<?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>218351</bug_id>
          
          <creation_ts>2020-10-29 13:28:53 -0700</creation_ts>
          <short_desc>Resync web-platform-tests/resources tests from upstream</short_desc>
          <delta_ts>2020-10-30 08:33:20 -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>Tools / Tests</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Chris Dumez">cdumez</reporter>
          <assigned_to name="Chris Dumez">cdumez</assigned_to>
          <cc>achristensen</cc>
    
    <cc>clopez</cc>
    
    <cc>darin</cc>
    
    <cc>eric.carlson</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>ggaren</cc>
    
    <cc>sam</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>youennf</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1702845</commentid>
    <comment_count>0</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2020-10-29 13:28:53 -0700</bug_when>
    <thetext>Resync web-platform-tests/resources tests from upstream.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1702846</commentid>
    <comment_count>1</comment_count>
      <attachid>412680</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2020-10-29 13:31:13 -0700</bug_when>
    <thetext>Created attachment 412680
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1702862</commentid>
    <comment_count>2</comment_count>
      <attachid>412685</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2020-10-29 14:23:32 -0700</bug_when>
    <thetext>Created attachment 412685
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1702869</commentid>
    <comment_count>3</comment_count>
      <attachid>412685</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-10-29 14:33:09 -0700</bug_when>
    <thetext>Comment on attachment 412685
Patch

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

&gt; LayoutTests/imported/w3c/web-platform-tests/resources/chromium/README.md:1
&gt; +This directory contains Chromium-specific test resources, including mocks for

I realize this was already here, but why do we have this imported? If they are Chromium specific, doesn&apos;t seem like we need them.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1702879</commentid>
    <comment_count>4</comment_count>
      <attachid>412690</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2020-10-29 14:50:33 -0700</bug_when>
    <thetext>Created attachment 412690
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1702880</commentid>
    <comment_count>5</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2020-10-29 14:51:14 -0700</bug_when>
    <thetext>(In reply to Sam Weinig from comment #3)
&gt; Comment on attachment 412685 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=412685&amp;action=review
&gt; 
&gt; &gt; LayoutTests/imported/w3c/web-platform-tests/resources/chromium/README.md:1
&gt; &gt; +This directory contains Chromium-specific test resources, including mocks for
&gt; 
&gt; I realize this was already here, but why do we have this imported? If they
&gt; are Chromium specific, doesn&apos;t seem like we need them.

Ok. Dropping them in this latest iteration. Hopefully tests still pass :o)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1702969</commentid>
    <comment_count>6</comment_count>
      <attachid>412690</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-10-29 21:13:44 -0700</bug_when>
    <thetext>Comment on attachment 412690
Patch

rs=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1703051</commentid>
    <comment_count>7</comment_count>
      <attachid>412741</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2020-10-30 07:36:39 -0700</bug_when>
    <thetext>Created attachment 412741
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1703063</commentid>
    <comment_count>8</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2020-10-30 08:32:54 -0700</bug_when>
    <thetext>Committed r269186: &lt;https://trac.webkit.org/changeset/269186&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 412741.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1703064</commentid>
    <comment_count>9</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2020-10-30 08:33:20 -0700</bug_when>
    <thetext>&lt;rdar://problem/70877741&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>412680</attachid>
            <date>2020-10-29 13:31:13 -0700</date>
            <delta_ts>2020-10-29 14:23:30 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-218351-20201029133112.patch</filename>
            <type>text/plain</type>
            <size>590314</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY5MTY0CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbXBv
cnRlZC93M2MvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL0NoYW5nZUxvZwpp
bmRleCBlOGUzMmJkNmQ4OGYyYjQ5YzQ1YmQ1NDhjNjNiMGUxZTEwMDlkMzBkLi43MmJkM2VmNTUy
NTA0MTA5YmFkMjk5N2ExNmU5ZTc1NzkyNTY5OTcxIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9p
bXBvcnRlZC93M2MvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy9DaGFu
Z2VMb2cKQEAgLTEsMyArMSwxNCBAQAorMjAyMC0xMC0yOSAgQ2hyaXMgRHVtZXogIDxjZHVtZXpA
YXBwbGUuY29tPgorCisgICAgICAgIFJlc3luYyB3ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2Vz
IHRlc3RzIGZyb20gdXBzdHJlYW0KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTIxODM1MQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIFJlc3luYyB3ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzIHRlc3RzIGZy
b20gdXBzdHJlYW0gNWRiYjBhM2ZhNjMxZWY3M2RhMC4KKworICAgICAgICAqIHdlYi1wbGF0Zm9y
bS10ZXN0cy9yZXNvdXJjZXMvKjogVXBkYXRlZC4KKwogMjAyMC0xMC0yOSAgQ2hyaXMgRHVtZXog
IDxjZHVtZXpAYXBwbGUuY29tPgogCiAgICAgICAgIFJlc3luYyB3ZWItcGxhdGZvcm0tdGVzdHMv
cGF5bWVudC1yZXF1ZXN0IHRlc3RzIGZyb20gdXBzdHJlYW0KZGlmZiAtLWdpdCBhL0xheW91dFRl
c3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL1JF
QURNRS5tZCBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVz
b3VyY2VzL2Nocm9taXVtL1JFQURNRS5tZAppbmRleCBiNTNjNmE4YzQyMzJkYmU5Yzc4N2IwZWEx
N2YwZWQxYTQ5ZjFlMzg2Li5lYzk1MzAzM2Y5YmY1YjA2YmJkMmE4YjZlY2NmNGZhZTQ3NjAxODVm
IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3Rz
L3Jlc291cmNlcy9jaHJvbWl1bS9SRUFETUUubWQKKysrIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQv
dzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vUkVBRE1FLm1kCkBAIC0x
LDQgKzEsNyBAQAotVGhpcyBkaXJlY3RvcnkgY29udGFpbnMgQ2hyb21pdW0tc3BlY2lmaWMgdGVz
dCByZXNvdXJjZXMuCitUaGlzIGRpcmVjdG9yeSBjb250YWlucyBDaHJvbWl1bS1zcGVjaWZpYyB0
ZXN0IHJlc291cmNlcywgaW5jbHVkaW5nIG1vY2tzIGZvcgordGVzdC1vbmx5IEFQSXMgaW1wbGVt
ZW50ZWQgd2l0aAorW01vam9KU10oaHR0cHM6Ly9jaHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2No
cm9taXVtL3NyYy8rL21hc3Rlci9tb2pvL3B1YmxpYy9qcy9SRUFETUUubWQpLgogCi1UaGUgZmls
ZXMgYG1vam9fYmluZGluZ3MuanNgIGFuZCBgKi5tb2pvbS5qc2AgYXJlIG1hbnVhbGx5IGNvcGll
ZCBmcm9tIHRoZQotQ2hyb21pdW0gYnVpbGQgcHJvY2VzcydzIGdlbmVyYXRlZCBmaWxlcyBhbmQg
c2hvdWxkIG5vdCBiZSBlZGl0ZWQgbWFudWFsbHkuCitQbGVhc2UgZG8gKipub3QqKiBjb3B5IGAq
Lm1vam9tLmpzYCBpbnRvIHRoaXMgZGlyZWN0b3J5LiBGb2xsb3cgdGhpcyBkb2MgaWYgeW91Cit3
YW50IHRvIGFkZCBuZXcgTW9qb0pTLWJhY2tlZCBtb2NrczoKK2h0dHBzOi8vY2hyb21pdW0uZ29v
Z2xlc291cmNlLmNvbS9jaHJvbWl1bS9zcmMvKy9tYXN0ZXIvZG9jcy90ZXN0aW5nL3dlYl9wbGF0
Zm9ybV90ZXN0cy5tZCNtb2pvanMKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3cz
Yy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL2JpZ19idWZmZXIubW9qb20u
anMgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNl
cy9jaHJvbWl1bS9iaWdfYnVmZmVyLm1vam9tLmpzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCBmMDk3MDZlZWJiODIyODUxODRjZGMyN2FkOWEzNjlmMGJlZjU0MTkzLi4wMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL0xheW91dFRlc3RzL2ltcG9ydGVk
L3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL2JpZ19idWZmZXIubW9q
b20uanMKKysrIC9kZXYvbnVsbApAQCAtMSwyNjMgKzAsMCBAQAotLy8gQ29weXJpZ2h0IDIwMTQg
VGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhp
cyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2Fu
IGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotCi0ndXNlIHN0cmljdCc7Ci0KLShm
dW5jdGlvbigpIHsKLSAgdmFyIG1vam9tSWQgPSAnbW9qby9wdWJsaWMvbW9qb20vYmFzZS9iaWdf
YnVmZmVyLm1vam9tJzsKLSAgaWYgKG1vam8uaW50ZXJuYWwuaXNNb2pvbUxvYWRlZChtb2pvbUlk
KSkgewotICAgIGNvbnNvbGUud2FybignVGhlIGZvbGxvd2luZyBtb2pvbSBpcyBsb2FkZWQgbXVs
dGlwbGUgdGltZXM6ICcgKyBtb2pvbUlkKTsKLSAgICByZXR1cm47Ci0gIH0KLSAgbW9qby5pbnRl
cm5hbC5tYXJrTW9qb21Mb2FkZWQobW9qb21JZCk7Ci0gIHZhciBiaW5kaW5ncyA9IG1vam87Ci0g
IHZhciBhc3NvY2lhdGVkQmluZGluZ3MgPSBtb2pvOwotICB2YXIgY29kZWMgPSBtb2pvLmludGVy
bmFsOwotICB2YXIgdmFsaWRhdG9yID0gbW9qby5pbnRlcm5hbDsKLQotICB2YXIgZXhwb3J0cyA9
IG1vam8uaW50ZXJuYWwuZXhwb3NlTmFtZXNwYWNlKCdtb2pvQmFzZS5tb2pvbScpOwotCi0KLQot
ICBmdW5jdGlvbiBCaWdCdWZmZXJTaGFyZWRNZW1vcnlSZWdpb24odmFsdWVzKSB7Ci0gICAgdGhp
cy5pbml0RGVmYXVsdHNfKCk7Ci0gICAgdGhpcy5pbml0RmllbGRzXyh2YWx1ZXMpOwotICB9Ci0K
LQotICBCaWdCdWZmZXJTaGFyZWRNZW1vcnlSZWdpb24ucHJvdG90eXBlLmluaXREZWZhdWx0c18g
PSBmdW5jdGlvbigpIHsKLSAgICB0aGlzLmJ1ZmZlckhhbmRsZSA9IG51bGw7Ci0gICAgdGhpcy5z
aXplID0gMDsKLSAgfTsKLSAgQmlnQnVmZmVyU2hhcmVkTWVtb3J5UmVnaW9uLnByb3RvdHlwZS5p
bml0RmllbGRzXyA9IGZ1bmN0aW9uKGZpZWxkcykgewotICAgIGZvcih2YXIgZmllbGQgaW4gZmll
bGRzKSB7Ci0gICAgICAgIGlmICh0aGlzLmhhc093blByb3BlcnR5KGZpZWxkKSkKLSAgICAgICAg
ICB0aGlzW2ZpZWxkXSA9IGZpZWxkc1tmaWVsZF07Ci0gICAgfQotICB9OwotCi0gIEJpZ0J1ZmZl
clNoYXJlZE1lbW9yeVJlZ2lvbi52YWxpZGF0ZSA9IGZ1bmN0aW9uKG1lc3NhZ2VWYWxpZGF0b3Is
IG9mZnNldCkgewotICAgIHZhciBlcnI7Ci0gICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxp
ZGF0ZVN0cnVjdEhlYWRlcihvZmZzZXQsIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplKTsKLSAgICBp
ZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCi0gICAgICAgIHJldHVy
biBlcnI7Ci0KLSAgICB2YXIga1ZlcnNpb25TaXplcyA9IFsKLSAgICAgIHt2ZXJzaW9uOiAwLCBu
dW1CeXRlczogMTZ9Ci0gICAgXTsKLSAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRl
U3RydWN0VmVyc2lvbihvZmZzZXQsIGtWZXJzaW9uU2l6ZXMpOwotICAgIGlmIChlcnIgIT09IHZh
bGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKLSAgICAgICAgcmV0dXJuIGVycjsKLQotCi0g
ICAgLy8gdmFsaWRhdGUgQmlnQnVmZmVyU2hhcmVkTWVtb3J5UmVnaW9uLmJ1ZmZlckhhbmRsZQot
ICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVIYW5kbGUob2Zmc2V0ICsgY29kZWMu
a1N0cnVjdEhlYWRlclNpemUgKyAwLCBmYWxzZSkKLSAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3Iu
dmFsaWRhdGlvbkVycm9yLk5PTkUpCi0gICAgICAgIHJldHVybiBlcnI7Ci0KLQotICAgIHJldHVy
biB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkU7Ci0gIH07Ci0KLSAgQmlnQnVmZmVyU2hh
cmVkTWVtb3J5UmVnaW9uLmVuY29kZWRTaXplID0gY29kZWMua1N0cnVjdEhlYWRlclNpemUgKyA4
OwotCi0gIEJpZ0J1ZmZlclNoYXJlZE1lbW9yeVJlZ2lvbi5kZWNvZGUgPSBmdW5jdGlvbihkZWNv
ZGVyKSB7Ci0gICAgdmFyIHBhY2tlZDsKLSAgICB2YXIgdmFsID0gbmV3IEJpZ0J1ZmZlclNoYXJl
ZE1lbW9yeVJlZ2lvbigpOwotICAgIHZhciBudW1iZXJPZkJ5dGVzID0gZGVjb2Rlci5yZWFkVWlu
dDMyKCk7Ci0gICAgdmFyIHZlcnNpb24gPSBkZWNvZGVyLnJlYWRVaW50MzIoKTsKLSAgICB2YWwu
YnVmZmVySGFuZGxlID0gZGVjb2Rlci5kZWNvZGVTdHJ1Y3QoY29kZWMuSGFuZGxlKTsKLSAgICB2
YWwuc2l6ZSA9IGRlY29kZXIuZGVjb2RlU3RydWN0KGNvZGVjLlVpbnQzMik7Ci0gICAgcmV0dXJu
IHZhbDsKLSAgfTsKLQotICBCaWdCdWZmZXJTaGFyZWRNZW1vcnlSZWdpb24uZW5jb2RlID0gZnVu
Y3Rpb24oZW5jb2RlciwgdmFsKSB7Ci0gICAgdmFyIHBhY2tlZDsKLSAgICBlbmNvZGVyLndyaXRl
VWludDMyKEJpZ0J1ZmZlclNoYXJlZE1lbW9yeVJlZ2lvbi5lbmNvZGVkU2l6ZSk7Ci0gICAgZW5j
b2Rlci53cml0ZVVpbnQzMigwKTsKLSAgICBlbmNvZGVyLmVuY29kZVN0cnVjdChjb2RlYy5IYW5k
bGUsIHZhbC5idWZmZXJIYW5kbGUpOwotICAgIGVuY29kZXIuZW5jb2RlU3RydWN0KGNvZGVjLlVp
bnQzMiwgdmFsLnNpemUpOwotICB9OwotCi0gIGZ1bmN0aW9uIEJpZ0J1ZmZlcih2YWx1ZSkgewot
ICAgIHRoaXMuaW5pdERlZmF1bHRfKCk7Ci0gICAgdGhpcy5pbml0VmFsdWVfKHZhbHVlKTsKLSAg
fQotCi0KLSAgQmlnQnVmZmVyLlRhZ3MgPSB7Ci0gICAgYnl0ZXM6IDAsCi0gICAgc2hhcmVkTWVt
b3J5OiAxLAotICAgIGludmFsaWRCdWZmZXI6IDIsCi0gIH07Ci0KLSAgQmlnQnVmZmVyLnByb3Rv
dHlwZS5pbml0RGVmYXVsdF8gPSBmdW5jdGlvbigpIHsKLSAgICB0aGlzLiRkYXRhID0gbnVsbDsK
LSAgICB0aGlzLiR0YWcgPSB1bmRlZmluZWQ7Ci0gIH0KLQotICBCaWdCdWZmZXIucHJvdG90eXBl
LmluaXRWYWx1ZV8gPSBmdW5jdGlvbih2YWx1ZSkgewotICAgIGlmICh2YWx1ZSA9PSB1bmRlZmlu
ZWQpIHsKLSAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICB2YXIga2V5cyA9IE9iamVjdC5rZXlz
KHZhbHVlKTsKLSAgICBpZiAoa2V5cy5sZW5ndGggPT0gMCkgewotICAgICAgcmV0dXJuOwotICAg
IH0KLQotICAgIGlmIChrZXlzLmxlbmd0aCA+IDEpIHsKLSAgICAgIHRocm93IG5ldyBUeXBlRXJy
b3IoIllvdSBtYXkgc2V0IG9ubHkgb25lIG1lbWJlciBvbiBhIHVuaW9uLiIpOwotICAgIH0KLQot
ICAgIHZhciBmaWVsZHMgPSBbCi0gICAgICAgICJieXRlcyIsCi0gICAgICAgICJzaGFyZWRNZW1v
cnkiLAotICAgICAgICAiaW52YWxpZEJ1ZmZlciIsCi0gICAgXTsKLQotICAgIGlmIChmaWVsZHMu
aW5kZXhPZihrZXlzWzBdKSA8IDApIHsKLSAgICAgIHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihr
ZXlzWzBdICsgIiBpcyBub3QgYSBCaWdCdWZmZXIgbWVtYmVyLiIpOwotCi0gICAgfQotCi0gICAg
dGhpc1trZXlzWzBdXSA9IHZhbHVlW2tleXNbMF1dOwotICB9Ci0gIE9iamVjdC5kZWZpbmVQcm9w
ZXJ0eShCaWdCdWZmZXIucHJvdG90eXBlLCAiYnl0ZXMiLCB7Ci0gICAgZ2V0OiBmdW5jdGlvbigp
IHsKLSAgICAgIGlmICh0aGlzLiR0YWcgIT0gQmlnQnVmZmVyLlRhZ3MuYnl0ZXMpIHsKLSAgICAg
ICAgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKAotICAgICAgICAgICAgIkJpZ0J1ZmZlci5ieXRl
cyBpcyBub3QgY3VycmVudGx5IHNldC4iKTsKLSAgICAgIH0KLSAgICAgIHJldHVybiB0aGlzLiRk
YXRhOwotICAgIH0sCi0KLSAgICBzZXQ6IGZ1bmN0aW9uKHZhbHVlKSB7Ci0gICAgICB0aGlzLiR0
YWcgPSBCaWdCdWZmZXIuVGFncy5ieXRlczsKLSAgICAgIHRoaXMuJGRhdGEgPSB2YWx1ZTsKLSAg
ICB9Ci0gIH0pOwotICBPYmplY3QuZGVmaW5lUHJvcGVydHkoQmlnQnVmZmVyLnByb3RvdHlwZSwg
InNoYXJlZE1lbW9yeSIsIHsKLSAgICBnZXQ6IGZ1bmN0aW9uKCkgewotICAgICAgaWYgKHRoaXMu
JHRhZyAhPSBCaWdCdWZmZXIuVGFncy5zaGFyZWRNZW1vcnkpIHsKLSAgICAgICAgdGhyb3cgbmV3
IFJlZmVyZW5jZUVycm9yKAotICAgICAgICAgICAgIkJpZ0J1ZmZlci5zaGFyZWRNZW1vcnkgaXMg
bm90IGN1cnJlbnRseSBzZXQuIik7Ci0gICAgICB9Ci0gICAgICByZXR1cm4gdGhpcy4kZGF0YTsK
LSAgICB9LAotCi0gICAgc2V0OiBmdW5jdGlvbih2YWx1ZSkgewotICAgICAgdGhpcy4kdGFnID0g
QmlnQnVmZmVyLlRhZ3Muc2hhcmVkTWVtb3J5OwotICAgICAgdGhpcy4kZGF0YSA9IHZhbHVlOwot
ICAgIH0KLSAgfSk7Ci0gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShCaWdCdWZmZXIucHJvdG90eXBl
LCAiaW52YWxpZEJ1ZmZlciIsIHsKLSAgICBnZXQ6IGZ1bmN0aW9uKCkgewotICAgICAgaWYgKHRo
aXMuJHRhZyAhPSBCaWdCdWZmZXIuVGFncy5pbnZhbGlkQnVmZmVyKSB7Ci0gICAgICAgIHRocm93
IG5ldyBSZWZlcmVuY2VFcnJvcigKLSAgICAgICAgICAgICJCaWdCdWZmZXIuaW52YWxpZEJ1ZmZl
ciBpcyBub3QgY3VycmVudGx5IHNldC4iKTsKLSAgICAgIH0KLSAgICAgIHJldHVybiB0aGlzLiRk
YXRhOwotICAgIH0sCi0KLSAgICBzZXQ6IGZ1bmN0aW9uKHZhbHVlKSB7Ci0gICAgICB0aGlzLiR0
YWcgPSBCaWdCdWZmZXIuVGFncy5pbnZhbGlkQnVmZmVyOwotICAgICAgdGhpcy4kZGF0YSA9IHZh
bHVlOwotICAgIH0KLSAgfSk7Ci0KLQotICAgIEJpZ0J1ZmZlci5lbmNvZGUgPSBmdW5jdGlvbihl
bmNvZGVyLCB2YWwpIHsKLSAgICAgIGlmICh2YWwgPT0gbnVsbCkgewotICAgICAgICBlbmNvZGVy
LndyaXRlVWludDY0KDApOwotICAgICAgICBlbmNvZGVyLndyaXRlVWludDY0KDApOwotICAgICAg
ICByZXR1cm47Ci0gICAgICB9Ci0gICAgICBpZiAodmFsLiR0YWcgPT0gdW5kZWZpbmVkKSB7Ci0g
ICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBlbmNvZGUgdW5pb25zIHdpdGggYW4g
dW5rbm93biBtZW1iZXIgc2V0LiIpOwotICAgICAgfQotCi0gICAgICBlbmNvZGVyLndyaXRlVWlu
dDMyKDE2KTsKLSAgICAgIGVuY29kZXIud3JpdGVVaW50MzIodmFsLiR0YWcpOwotICAgICAgc3dp
dGNoICh2YWwuJHRhZykgewotICAgICAgICBjYXNlIEJpZ0J1ZmZlci5UYWdzLmJ5dGVzOgotICAg
ICAgICAgIGVuY29kZXIuZW5jb2RlQXJyYXlQb2ludGVyKGNvZGVjLlVpbnQ4LCB2YWwuYnl0ZXMp
OwotICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEJpZ0J1ZmZlci5UYWdzLnNoYXJlZE1l
bW9yeToKLSAgICAgICAgICBlbmNvZGVyLmVuY29kZVN0cnVjdFBvaW50ZXIoQmlnQnVmZmVyU2hh
cmVkTWVtb3J5UmVnaW9uLCB2YWwuc2hhcmVkTWVtb3J5KTsKLSAgICAgICAgICBicmVhazsKLSAg
ICAgICAgY2FzZSBCaWdCdWZmZXIuVGFncy5pbnZhbGlkQnVmZmVyOgotICAgICAgICAgIGVuY29k
ZXIud3JpdGVVaW50OCh2YWwuaW52YWxpZEJ1ZmZlciA/IDEgOiAwKTsKLSAgICAgICAgICBicmVh
azsKLSAgICAgIH0KLSAgICAgIGVuY29kZXIuYWxpZ24oKTsKLSAgICB9OwotCi0KLSAgICBCaWdC
dWZmZXIuZGVjb2RlID0gZnVuY3Rpb24oZGVjb2RlcikgewotICAgICAgdmFyIHNpemUgPSBkZWNv
ZGVyLnJlYWRVaW50MzIoKTsKLSAgICAgIGlmIChzaXplID09IDApIHsKLSAgICAgICAgZGVjb2Rl
ci5yZWFkVWludDMyKCk7Ci0gICAgICAgIGRlY29kZXIucmVhZFVpbnQ2NCgpOwotICAgICAgICBy
ZXR1cm4gbnVsbDsKLSAgICAgIH0KLQotICAgICAgdmFyIHJlc3VsdCA9IG5ldyBCaWdCdWZmZXIo
KTsKLSAgICAgIHZhciB0YWcgPSBkZWNvZGVyLnJlYWRVaW50MzIoKTsKLSAgICAgIHN3aXRjaCAo
dGFnKSB7Ci0gICAgICAgIGNhc2UgQmlnQnVmZmVyLlRhZ3MuYnl0ZXM6Ci0gICAgICAgICAgcmVz
dWx0LmJ5dGVzID0gZGVjb2Rlci5kZWNvZGVBcnJheVBvaW50ZXIoY29kZWMuVWludDgpOwotICAg
ICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEJpZ0J1ZmZlci5UYWdzLnNoYXJlZE1lbW9yeToK
LSAgICAgICAgICByZXN1bHQuc2hhcmVkTWVtb3J5ID0gZGVjb2Rlci5kZWNvZGVTdHJ1Y3RQb2lu
dGVyKEJpZ0J1ZmZlclNoYXJlZE1lbW9yeVJlZ2lvbik7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIGNhc2UgQmlnQnVmZmVyLlRhZ3MuaW52YWxpZEJ1ZmZlcjoKLSAgICAgICAgICByZXN1bHQu
aW52YWxpZEJ1ZmZlciA9IGRlY29kZXIucmVhZFVpbnQ4KCkgPyB0cnVlIDogZmFsc2U7Ci0gICAg
ICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgICBkZWNvZGVyLmFsaWduKCk7Ci0KLSAgICAgIHJl
dHVybiByZXN1bHQ7Ci0gICAgfTsKLQotCi0gICAgQmlnQnVmZmVyLnZhbGlkYXRlID0gZnVuY3Rp
b24obWVzc2FnZVZhbGlkYXRvciwgb2Zmc2V0KSB7Ci0gICAgICB2YXIgc2l6ZSA9IG1lc3NhZ2VW
YWxpZGF0b3IuZGVjb2RlVW5pb25TaXplKG9mZnNldCk7Ci0gICAgICBpZiAoc2l6ZSAhPSAxNikg
ewotICAgICAgICByZXR1cm4gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5JTlZBTElEX1VOSU9O
X1NJWkU7Ci0gICAgICB9Ci0KLSAgICAgIHZhciB0YWcgPSBtZXNzYWdlVmFsaWRhdG9yLmRlY29k
ZVVuaW9uVGFnKG9mZnNldCk7Ci0gICAgICB2YXIgZGF0YV9vZmZzZXQgPSBvZmZzZXQgKyA4Owot
ICAgICAgdmFyIGVycjsKLSAgICAgIHN3aXRjaCAodGFnKSB7Ci0gICAgICAgIGNhc2UgQmlnQnVm
ZmVyLlRhZ3MuYnl0ZXM6Ci0KLQotICAgIC8vIHZhbGlkYXRlIEJpZ0J1ZmZlci5ieXRlcwotICAg
IGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVBcnJheVBvaW50ZXIoZGF0YV9vZmZzZXQs
IDEsIGNvZGVjLlVpbnQ4LCBmYWxzZSwgWzBdLCAwKTsKLSAgICBpZiAoZXJyICE9PSB2YWxpZGF0
b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCi0gICAgICAgIHJldHVybiBlcnI7Ci0gICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIGNhc2UgQmlnQnVmZmVyLlRhZ3Muc2hhcmVkTWVtb3J5OgotCi0KLSAg
ICAvLyB2YWxpZGF0ZSBCaWdCdWZmZXIuc2hhcmVkTWVtb3J5Ci0gICAgZXJyID0gbWVzc2FnZVZh
bGlkYXRvci52YWxpZGF0ZVN0cnVjdFBvaW50ZXIoZGF0YV9vZmZzZXQsIEJpZ0J1ZmZlclNoYXJl
ZE1lbW9yeVJlZ2lvbiwgZmFsc2UpOwotICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0
aW9uRXJyb3IuTk9ORSkKLSAgICAgICAgcmV0dXJuIGVycjsKLSAgICAgICAgICBicmVhazsKLSAg
ICAgICAgY2FzZSBCaWdCdWZmZXIuVGFncy5pbnZhbGlkQnVmZmVyOgotCi0KLSAgICAgICAgICBi
cmVhazsKLSAgICAgIH0KLQotICAgICAgcmV0dXJuIHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3Iu
Tk9ORTsKLSAgICB9OwotCi0gIEJpZ0J1ZmZlci5lbmNvZGVkU2l6ZSA9IDE2OwotICBleHBvcnRz
LkJpZ0J1ZmZlclNoYXJlZE1lbW9yeVJlZ2lvbiA9IEJpZ0J1ZmZlclNoYXJlZE1lbW9yeVJlZ2lv
bjsKLSAgZXhwb3J0cy5CaWdCdWZmZXIgPSBCaWdCdWZmZXI7Ci19KSgpOwpkaWZmIC0tZ2l0IGEv
TGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hy
b21pdW0vYmlnX2J1ZmZlci5tb2pvbS5qcy5oZWFkZXJzIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQv
dzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vYmlnX2J1ZmZlci5tb2pv
bS5qcy5oZWFkZXJzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2YzYxYTM0YTRlYzJl
NzUwOTZkYjBlYjlmNzc0OGIxNDJmMGRiN2JiLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwCi0tLSBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0t
dGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL2JpZ19idWZmZXIubW9qb20uanMuaGVhZGVycworKysg
L2Rldi9udWxsCkBAIC0xICswLDAgQEAKLUNvbnRlbnQtVHlwZTogdGV4dC9qYXZhc2NyaXB0OyBj
aGFyc2V0PXV0Zi04ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvTGF5
b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21p
dW0vZGV2aWNlLm1vam9tLmpzIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9y
bS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vZGV2aWNlLm1vam9tLmpzCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCA2NDg4Y2JjNjljMjkxNzBkOTQ0MWQyMjEwZGEyN2E0NjRmNjdkNDQ1
Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL0xheW91dFRl
c3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL2Rl
dmljZS5tb2pvbS5qcworKysgL2Rldi9udWxsCkBAIC0xLDM3ODggKzAsMCBAQAotLy8gQ29weXJp
Z2h0IDIwMTQgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBV
c2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNl
IHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotCi0ndXNlIHN0cmlj
dCc7Ci0KLShmdW5jdGlvbigpIHsKLSAgdmFyIG1vam9tSWQgPSAnZGV2aWNlL3VzYi9wdWJsaWMv
bW9qb20vZGV2aWNlLm1vam9tJzsKLSAgaWYgKG1vam8uaW50ZXJuYWwuaXNNb2pvbUxvYWRlZCht
b2pvbUlkKSkgewotICAgIGNvbnNvbGUud2FybignVGhlIGZvbGxvd2luZyBtb2pvbSBpcyBsb2Fk
ZWQgbXVsdGlwbGUgdGltZXM6ICcgKyBtb2pvbUlkKTsKLSAgICByZXR1cm47Ci0gIH0KLSAgbW9q
by5pbnRlcm5hbC5tYXJrTW9qb21Mb2FkZWQobW9qb21JZCk7Ci0gIHZhciBiaW5kaW5ncyA9IG1v
am87Ci0gIHZhciBhc3NvY2lhdGVkQmluZGluZ3MgPSBtb2pvOwotICB2YXIgY29kZWMgPSBtb2pv
LmludGVybmFsOwotICB2YXIgdmFsaWRhdG9yID0gbW9qby5pbnRlcm5hbDsKLQotICB2YXIgZXhw
b3J0cyA9IG1vam8uaW50ZXJuYWwuZXhwb3NlTmFtZXNwYWNlKCdkZXZpY2UubW9qb20nKTsKLSAg
dmFyIHN0cmluZzE2JCA9Ci0gICAgICBtb2pvLmludGVybmFsLmV4cG9zZU5hbWVzcGFjZSgnbW9q
b0Jhc2UubW9qb20nKTsKLSAgaWYgKG1vam8uY29uZmlnLmF1dG9Mb2FkTW9qb21EZXBzKSB7Ci0g
ICAgbW9qby5pbnRlcm5hbC5sb2FkTW9qb21JZk5lY2Vzc2FyeSgKLSAgICAgICAgJ21vam8vcHVi
bGljL21vam9tL2Jhc2Uvc3RyaW5nMTYubW9qb20nLCAnLi4vLi4vLi4vLi4vbW9qby9wdWJsaWMv
bW9qb20vYmFzZS9zdHJpbmcxNi5tb2pvbS5qcycpOwotICB9Ci0gIHZhciB1cmwkID0KLSAgICAg
IG1vam8uaW50ZXJuYWwuZXhwb3NlTmFtZXNwYWNlKCd1cmwubW9qb20nKTsKLSAgaWYgKG1vam8u
Y29uZmlnLmF1dG9Mb2FkTW9qb21EZXBzKSB7Ci0gICAgbW9qby5pbnRlcm5hbC5sb2FkTW9qb21J
Zk5lY2Vzc2FyeSgKLSAgICAgICAgJ3VybC9tb2pvbS91cmwubW9qb20nLCAnLi4vLi4vLi4vLi4v
dXJsL21vam9tL3VybC5tb2pvbS5qcycpOwotICB9Ci0KLQotICB2YXIgVXNiT3BlbkRldmljZUVy
cm9yID0ge307Ci0gIFVzYk9wZW5EZXZpY2VFcnJvci5PSyA9IDA7Ci0gIFVzYk9wZW5EZXZpY2VF
cnJvci5BQ0NFU1NfREVOSUVEID0gVXNiT3BlbkRldmljZUVycm9yLk9LICsgMTsKLSAgVXNiT3Bl
bkRldmljZUVycm9yLkFMUkVBRFlfT1BFTiA9IFVzYk9wZW5EZXZpY2VFcnJvci5BQ0NFU1NfREVO
SUVEICsgMTsKLSAgVXNiT3BlbkRldmljZUVycm9yLk1JTl9WQUxVRSA9IDAsCi0gIFVzYk9wZW5E
ZXZpY2VFcnJvci5NQVhfVkFMVUUgPSAyLAotCi0gIFVzYk9wZW5EZXZpY2VFcnJvci5pc0tub3du
RW51bVZhbHVlID0gZnVuY3Rpb24odmFsdWUpIHsKLSAgICBzd2l0Y2ggKHZhbHVlKSB7Ci0gICAg
Y2FzZSAwOgotICAgIGNhc2UgMToKLSAgICBjYXNlIDI6Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAg
ICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9OwotCi0gIFVzYk9wZW5EZXZpY2VFcnJvci52YWxp
ZGF0ZSA9IGZ1bmN0aW9uKGVudW1WYWx1ZSkgewotICAgIHZhciBpc0V4dGVuc2libGUgPSBmYWxz
ZTsKLSAgICBpZiAoaXNFeHRlbnNpYmxlIHx8IHRoaXMuaXNLbm93bkVudW1WYWx1ZShlbnVtVmFs
dWUpKQotICAgICAgcmV0dXJuIHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORTsKLQotICAg
IHJldHVybiB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLlVOS05PV05fRU5VTV9WQUxVRTsKLSAg
fTsKLSAgdmFyIFVzYlRyYW5zZmVyRGlyZWN0aW9uID0ge307Ci0gIFVzYlRyYW5zZmVyRGlyZWN0
aW9uLklOQk9VTkQgPSAwOwotICBVc2JUcmFuc2ZlckRpcmVjdGlvbi5PVVRCT1VORCA9IFVzYlRy
YW5zZmVyRGlyZWN0aW9uLklOQk9VTkQgKyAxOwotICBVc2JUcmFuc2ZlckRpcmVjdGlvbi5NSU5f
VkFMVUUgPSAwLAotICBVc2JUcmFuc2ZlckRpcmVjdGlvbi5NQVhfVkFMVUUgPSAxLAotCi0gIFVz
YlRyYW5zZmVyRGlyZWN0aW9uLmlzS25vd25FbnVtVmFsdWUgPSBmdW5jdGlvbih2YWx1ZSkgewot
ICAgIHN3aXRjaCAodmFsdWUpIHsKLSAgICBjYXNlIDA6Ci0gICAgY2FzZSAxOgotICAgICAgcmV0
dXJuIHRydWU7Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLSAgfTsKLQotICBVc2JUcmFuc2Zl
ckRpcmVjdGlvbi52YWxpZGF0ZSA9IGZ1bmN0aW9uKGVudW1WYWx1ZSkgewotICAgIHZhciBpc0V4
dGVuc2libGUgPSBmYWxzZTsKLSAgICBpZiAoaXNFeHRlbnNpYmxlIHx8IHRoaXMuaXNLbm93bkVu
dW1WYWx1ZShlbnVtVmFsdWUpKQotICAgICAgcmV0dXJuIHZhbGlkYXRvci52YWxpZGF0aW9uRXJy
b3IuTk9ORTsKLQotICAgIHJldHVybiB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLlVOS05PV05f
RU5VTV9WQUxVRTsKLSAgfTsKLSAgdmFyIFVzYkNvbnRyb2xUcmFuc2ZlclR5cGUgPSB7fTsKLSAg
VXNiQ29udHJvbFRyYW5zZmVyVHlwZS5TVEFOREFSRCA9IDA7Ci0gIFVzYkNvbnRyb2xUcmFuc2Zl
clR5cGUuQ0xBU1MgPSBVc2JDb250cm9sVHJhbnNmZXJUeXBlLlNUQU5EQVJEICsgMTsKLSAgVXNi
Q29udHJvbFRyYW5zZmVyVHlwZS5WRU5ET1IgPSBVc2JDb250cm9sVHJhbnNmZXJUeXBlLkNMQVNT
ICsgMTsKLSAgVXNiQ29udHJvbFRyYW5zZmVyVHlwZS5SRVNFUlZFRCA9IFVzYkNvbnRyb2xUcmFu
c2ZlclR5cGUuVkVORE9SICsgMTsKLSAgVXNiQ29udHJvbFRyYW5zZmVyVHlwZS5NSU5fVkFMVUUg
PSAwLAotICBVc2JDb250cm9sVHJhbnNmZXJUeXBlLk1BWF9WQUxVRSA9IDMsCi0KLSAgVXNiQ29u
dHJvbFRyYW5zZmVyVHlwZS5pc0tub3duRW51bVZhbHVlID0gZnVuY3Rpb24odmFsdWUpIHsKLSAg
ICBzd2l0Y2ggKHZhbHVlKSB7Ci0gICAgY2FzZSAwOgotICAgIGNhc2UgMToKLSAgICBjYXNlIDI6
Ci0gICAgY2FzZSAzOgotICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIHJldHVybiBmYWxz
ZTsKLSAgfTsKLQotICBVc2JDb250cm9sVHJhbnNmZXJUeXBlLnZhbGlkYXRlID0gZnVuY3Rpb24o
ZW51bVZhbHVlKSB7Ci0gICAgdmFyIGlzRXh0ZW5zaWJsZSA9IGZhbHNlOwotICAgIGlmIChpc0V4
dGVuc2libGUgfHwgdGhpcy5pc0tub3duRW51bVZhbHVlKGVudW1WYWx1ZSkpCi0gICAgICByZXR1
cm4gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FOwotCi0gICAgcmV0dXJuIHZhbGlkYXRv
ci52YWxpZGF0aW9uRXJyb3IuVU5LTk9XTl9FTlVNX1ZBTFVFOwotICB9OwotICB2YXIgVXNiQ29u
dHJvbFRyYW5zZmVyUmVjaXBpZW50ID0ge307Ci0gIFVzYkNvbnRyb2xUcmFuc2ZlclJlY2lwaWVu
dC5ERVZJQ0UgPSAwOwotICBVc2JDb250cm9sVHJhbnNmZXJSZWNpcGllbnQuSU5URVJGQUNFID0g
VXNiQ29udHJvbFRyYW5zZmVyUmVjaXBpZW50LkRFVklDRSArIDE7Ci0gIFVzYkNvbnRyb2xUcmFu
c2ZlclJlY2lwaWVudC5FTkRQT0lOVCA9IFVzYkNvbnRyb2xUcmFuc2ZlclJlY2lwaWVudC5JTlRF
UkZBQ0UgKyAxOwotICBVc2JDb250cm9sVHJhbnNmZXJSZWNpcGllbnQuT1RIRVIgPSBVc2JDb250
cm9sVHJhbnNmZXJSZWNpcGllbnQuRU5EUE9JTlQgKyAxOwotICBVc2JDb250cm9sVHJhbnNmZXJS
ZWNpcGllbnQuTUlOX1ZBTFVFID0gMCwKLSAgVXNiQ29udHJvbFRyYW5zZmVyUmVjaXBpZW50Lk1B
WF9WQUxVRSA9IDMsCi0KLSAgVXNiQ29udHJvbFRyYW5zZmVyUmVjaXBpZW50LmlzS25vd25FbnVt
VmFsdWUgPSBmdW5jdGlvbih2YWx1ZSkgewotICAgIHN3aXRjaCAodmFsdWUpIHsKLSAgICBjYXNl
IDA6Ci0gICAgY2FzZSAxOgotICAgIGNhc2UgMjoKLSAgICBjYXNlIDM6Ci0gICAgICByZXR1cm4g
dHJ1ZTsKLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9OwotCi0gIFVzYkNvbnRyb2xUcmFu
c2ZlclJlY2lwaWVudC52YWxpZGF0ZSA9IGZ1bmN0aW9uKGVudW1WYWx1ZSkgewotICAgIHZhciBp
c0V4dGVuc2libGUgPSBmYWxzZTsKLSAgICBpZiAoaXNFeHRlbnNpYmxlIHx8IHRoaXMuaXNLbm93
bkVudW1WYWx1ZShlbnVtVmFsdWUpKQotICAgICAgcmV0dXJuIHZhbGlkYXRvci52YWxpZGF0aW9u
RXJyb3IuTk9ORTsKLQotICAgIHJldHVybiB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLlVOS05P
V05fRU5VTV9WQUxVRTsKLSAgfTsKLSAgdmFyIFVzYlRyYW5zZmVyVHlwZSA9IHt9OwotICBVc2JU
cmFuc2ZlclR5cGUuQ09OVFJPTCA9IDA7Ci0gIFVzYlRyYW5zZmVyVHlwZS5JU09DSFJPTk9VUyA9
IFVzYlRyYW5zZmVyVHlwZS5DT05UUk9MICsgMTsKLSAgVXNiVHJhbnNmZXJUeXBlLkJVTEsgPSBV
c2JUcmFuc2ZlclR5cGUuSVNPQ0hST05PVVMgKyAxOwotICBVc2JUcmFuc2ZlclR5cGUuSU5URVJS
VVBUID0gVXNiVHJhbnNmZXJUeXBlLkJVTEsgKyAxOwotICBVc2JUcmFuc2ZlclR5cGUuTUlOX1ZB
TFVFID0gMCwKLSAgVXNiVHJhbnNmZXJUeXBlLk1BWF9WQUxVRSA9IDMsCi0KLSAgVXNiVHJhbnNm
ZXJUeXBlLmlzS25vd25FbnVtVmFsdWUgPSBmdW5jdGlvbih2YWx1ZSkgewotICAgIHN3aXRjaCAo
dmFsdWUpIHsKLSAgICBjYXNlIDA6Ci0gICAgY2FzZSAxOgotICAgIGNhc2UgMjoKLSAgICBjYXNl
IDM6Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Owot
Ci0gIFVzYlRyYW5zZmVyVHlwZS52YWxpZGF0ZSA9IGZ1bmN0aW9uKGVudW1WYWx1ZSkgewotICAg
IHZhciBpc0V4dGVuc2libGUgPSBmYWxzZTsKLSAgICBpZiAoaXNFeHRlbnNpYmxlIHx8IHRoaXMu
aXNLbm93bkVudW1WYWx1ZShlbnVtVmFsdWUpKQotICAgICAgcmV0dXJuIHZhbGlkYXRvci52YWxp
ZGF0aW9uRXJyb3IuTk9ORTsKLQotICAgIHJldHVybiB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9y
LlVOS05PV05fRU5VTV9WQUxVRTsKLSAgfTsKLSAgdmFyIFVzYlN5bmNocm9uaXphdGlvblR5cGUg
PSB7fTsKLSAgVXNiU3luY2hyb25pemF0aW9uVHlwZS5OT05FID0gMDsKLSAgVXNiU3luY2hyb25p
emF0aW9uVHlwZS5BU1lOQ0hST05PVVMgPSBVc2JTeW5jaHJvbml6YXRpb25UeXBlLk5PTkUgKyAx
OwotICBVc2JTeW5jaHJvbml6YXRpb25UeXBlLkFEQVBUSVZFID0gVXNiU3luY2hyb25pemF0aW9u
VHlwZS5BU1lOQ0hST05PVVMgKyAxOwotICBVc2JTeW5jaHJvbml6YXRpb25UeXBlLlNZTkNIUk9O
T1VTID0gVXNiU3luY2hyb25pemF0aW9uVHlwZS5BREFQVElWRSArIDE7Ci0gIFVzYlN5bmNocm9u
aXphdGlvblR5cGUuTUlOX1ZBTFVFID0gMCwKLSAgVXNiU3luY2hyb25pemF0aW9uVHlwZS5NQVhf
VkFMVUUgPSAzLAotCi0gIFVzYlN5bmNocm9uaXphdGlvblR5cGUuaXNLbm93bkVudW1WYWx1ZSA9
IGZ1bmN0aW9uKHZhbHVlKSB7Ci0gICAgc3dpdGNoICh2YWx1ZSkgewotICAgIGNhc2UgMDoKLSAg
ICBjYXNlIDE6Ci0gICAgY2FzZSAyOgotICAgIGNhc2UgMzoKLSAgICAgIHJldHVybiB0cnVlOwot
ICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci0gIH07Ci0KLSAgVXNiU3luY2hyb25pemF0aW9uVHlw
ZS52YWxpZGF0ZSA9IGZ1bmN0aW9uKGVudW1WYWx1ZSkgewotICAgIHZhciBpc0V4dGVuc2libGUg
PSBmYWxzZTsKLSAgICBpZiAoaXNFeHRlbnNpYmxlIHx8IHRoaXMuaXNLbm93bkVudW1WYWx1ZShl
bnVtVmFsdWUpKQotICAgICAgcmV0dXJuIHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORTsK
LQotICAgIHJldHVybiB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLlVOS05PV05fRU5VTV9WQUxV
RTsKLSAgfTsKLSAgdmFyIFVzYlVzYWdlVHlwZSA9IHt9OwotICBVc2JVc2FnZVR5cGUuREFUQSA9
IDA7Ci0gIFVzYlVzYWdlVHlwZS5GRUVEQkFDSyA9IFVzYlVzYWdlVHlwZS5EQVRBICsgMTsKLSAg
VXNiVXNhZ2VUeXBlLkVYUExJQ0lUX0ZFRURCQUNLID0gVXNiVXNhZ2VUeXBlLkZFRURCQUNLICsg
MTsKLSAgVXNiVXNhZ2VUeXBlLlBFUklPRElDID0gVXNiVXNhZ2VUeXBlLkVYUExJQ0lUX0ZFRURC
QUNLICsgMTsKLSAgVXNiVXNhZ2VUeXBlLk5PVElGSUNBVElPTiA9IFVzYlVzYWdlVHlwZS5QRVJJ
T0RJQyArIDE7Ci0gIFVzYlVzYWdlVHlwZS5SRVNFUlZFRCA9IFVzYlVzYWdlVHlwZS5OT1RJRklD
QVRJT04gKyAxOwotICBVc2JVc2FnZVR5cGUuTUlOX1ZBTFVFID0gMCwKLSAgVXNiVXNhZ2VUeXBl
Lk1BWF9WQUxVRSA9IDUsCi0KLSAgVXNiVXNhZ2VUeXBlLmlzS25vd25FbnVtVmFsdWUgPSBmdW5j
dGlvbih2YWx1ZSkgewotICAgIHN3aXRjaCAodmFsdWUpIHsKLSAgICBjYXNlIDA6Ci0gICAgY2Fz
ZSAxOgotICAgIGNhc2UgMjoKLSAgICBjYXNlIDM6Ci0gICAgY2FzZSA0OgotICAgIGNhc2UgNToK
LSAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci0gIH07Ci0KLSAg
VXNiVXNhZ2VUeXBlLnZhbGlkYXRlID0gZnVuY3Rpb24oZW51bVZhbHVlKSB7Ci0gICAgdmFyIGlz
RXh0ZW5zaWJsZSA9IGZhbHNlOwotICAgIGlmIChpc0V4dGVuc2libGUgfHwgdGhpcy5pc0tub3du
RW51bVZhbHVlKGVudW1WYWx1ZSkpCi0gICAgICByZXR1cm4gdmFsaWRhdG9yLnZhbGlkYXRpb25F
cnJvci5OT05FOwotCi0gICAgcmV0dXJuIHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuVU5LTk9X
Tl9FTlVNX1ZBTFVFOwotICB9OwotICB2YXIgVXNiVHJhbnNmZXJTdGF0dXMgPSB7fTsKLSAgVXNi
VHJhbnNmZXJTdGF0dXMuQ09NUExFVEVEID0gMDsKLSAgVXNiVHJhbnNmZXJTdGF0dXMuVFJBTlNG
RVJfRVJST1IgPSBVc2JUcmFuc2ZlclN0YXR1cy5DT01QTEVURUQgKyAxOwotICBVc2JUcmFuc2Zl
clN0YXR1cy5USU1FT1VUID0gVXNiVHJhbnNmZXJTdGF0dXMuVFJBTlNGRVJfRVJST1IgKyAxOwot
ICBVc2JUcmFuc2ZlclN0YXR1cy5DQU5DRUxMRUQgPSBVc2JUcmFuc2ZlclN0YXR1cy5USU1FT1VU
ICsgMTsKLSAgVXNiVHJhbnNmZXJTdGF0dXMuU1RBTExFRCA9IFVzYlRyYW5zZmVyU3RhdHVzLkNB
TkNFTExFRCArIDE7Ci0gIFVzYlRyYW5zZmVyU3RhdHVzLkRJU0NPTk5FQ1QgPSBVc2JUcmFuc2Zl
clN0YXR1cy5TVEFMTEVEICsgMTsKLSAgVXNiVHJhbnNmZXJTdGF0dXMuQkFCQkxFID0gVXNiVHJh
bnNmZXJTdGF0dXMuRElTQ09OTkVDVCArIDE7Ci0gIFVzYlRyYW5zZmVyU3RhdHVzLlNIT1JUX1BB
Q0tFVCA9IFVzYlRyYW5zZmVyU3RhdHVzLkJBQkJMRSArIDE7Ci0gIFVzYlRyYW5zZmVyU3RhdHVz
LlBFUk1JU1NJT05fREVOSUVEID0gVXNiVHJhbnNmZXJTdGF0dXMuU0hPUlRfUEFDS0VUICsgMTsK
LSAgVXNiVHJhbnNmZXJTdGF0dXMuTUlOX1ZBTFVFID0gMCwKLSAgVXNiVHJhbnNmZXJTdGF0dXMu
TUFYX1ZBTFVFID0gOCwKLQotICBVc2JUcmFuc2ZlclN0YXR1cy5pc0tub3duRW51bVZhbHVlID0g
ZnVuY3Rpb24odmFsdWUpIHsKLSAgICBzd2l0Y2ggKHZhbHVlKSB7Ci0gICAgY2FzZSAwOgotICAg
IGNhc2UgMToKLSAgICBjYXNlIDI6Ci0gICAgY2FzZSAzOgotICAgIGNhc2UgNDoKLSAgICBjYXNl
IDU6Ci0gICAgY2FzZSA2OgotICAgIGNhc2UgNzoKLSAgICBjYXNlIDg6Ci0gICAgICByZXR1cm4g
dHJ1ZTsKLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9OwotCi0gIFVzYlRyYW5zZmVyU3Rh
dHVzLnZhbGlkYXRlID0gZnVuY3Rpb24oZW51bVZhbHVlKSB7Ci0gICAgdmFyIGlzRXh0ZW5zaWJs
ZSA9IGZhbHNlOwotICAgIGlmIChpc0V4dGVuc2libGUgfHwgdGhpcy5pc0tub3duRW51bVZhbHVl
KGVudW1WYWx1ZSkpCi0gICAgICByZXR1cm4gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05F
OwotCi0gICAgcmV0dXJuIHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuVU5LTk9XTl9FTlVNX1ZB
TFVFOwotICB9OwotCi0gIGZ1bmN0aW9uIFVzYkVuZHBvaW50SW5mbyh2YWx1ZXMpIHsKLSAgICB0
aGlzLmluaXREZWZhdWx0c18oKTsKLSAgICB0aGlzLmluaXRGaWVsZHNfKHZhbHVlcyk7Ci0gIH0K
LQotCi0gIFVzYkVuZHBvaW50SW5mby5wcm90b3R5cGUuaW5pdERlZmF1bHRzXyA9IGZ1bmN0aW9u
KCkgewotICAgIHRoaXMuZW5kcG9pbnROdW1iZXIgPSAwOwotICAgIHRoaXMucG9sbGluZ0ludGVy
dmFsID0gMDsKLSAgICB0aGlzLmRpcmVjdGlvbiA9IDA7Ci0gICAgdGhpcy50eXBlID0gMDsKLSAg
ICB0aGlzLnBhY2tldFNpemUgPSAwOwotICAgIHRoaXMuc3luY2hyb25pemF0aW9uVHlwZSA9IDA7
Ci0gICAgdGhpcy51c2FnZVR5cGUgPSAwOwotICAgIHRoaXMuZXh0cmFEYXRhID0gbnVsbDsKLSAg
fTsKLSAgVXNiRW5kcG9pbnRJbmZvLnByb3RvdHlwZS5pbml0RmllbGRzXyA9IGZ1bmN0aW9uKGZp
ZWxkcykgewotICAgIGZvcih2YXIgZmllbGQgaW4gZmllbGRzKSB7Ci0gICAgICAgIGlmICh0aGlz
Lmhhc093blByb3BlcnR5KGZpZWxkKSkKLSAgICAgICAgICB0aGlzW2ZpZWxkXSA9IGZpZWxkc1tm
aWVsZF07Ci0gICAgfQotICB9OwotCi0gIFVzYkVuZHBvaW50SW5mby52YWxpZGF0ZSA9IGZ1bmN0
aW9uKG1lc3NhZ2VWYWxpZGF0b3IsIG9mZnNldCkgewotICAgIHZhciBlcnI7Ci0gICAgZXJyID0g
bWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdEhlYWRlcihvZmZzZXQsIGNvZGVjLmtTdHJ1
Y3RIZWFkZXJTaXplKTsKLSAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9y
Lk5PTkUpCi0gICAgICAgIHJldHVybiBlcnI7Ci0KLSAgICB2YXIga1ZlcnNpb25TaXplcyA9IFsK
LSAgICAgIHt2ZXJzaW9uOiAwLCBudW1CeXRlczogNDB9Ci0gICAgXTsKLSAgICBlcnIgPSBtZXNz
YWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0VmVyc2lvbihvZmZzZXQsIGtWZXJzaW9uU2l6ZXMp
OwotICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKLSAgICAg
ICAgcmV0dXJuIGVycjsKLQotCi0KLSAgICAvLyB2YWxpZGF0ZSBVc2JFbmRwb2ludEluZm8uZGly
ZWN0aW9uCi0gICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZUVudW0ob2Zmc2V0ICsg
Y29kZWMua1N0cnVjdEhlYWRlclNpemUgKyA0LCBVc2JUcmFuc2ZlckRpcmVjdGlvbik7Ci0gICAg
aWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQotICAgICAgICByZXR1
cm4gZXJyOwotCi0KLSAgICAvLyB2YWxpZGF0ZSBVc2JFbmRwb2ludEluZm8udHlwZQotICAgIGVy
ciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVFbnVtKG9mZnNldCArIGNvZGVjLmtTdHJ1Y3RI
ZWFkZXJTaXplICsgOCwgVXNiVHJhbnNmZXJUeXBlKTsKLSAgICBpZiAoZXJyICE9PSB2YWxpZGF0
b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCi0gICAgICAgIHJldHVybiBlcnI7Ci0KLQotCi0gICAg
Ly8gdmFsaWRhdGUgVXNiRW5kcG9pbnRJbmZvLnN5bmNocm9uaXphdGlvblR5cGUKLSAgICBlcnIg
PSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlRW51bShvZmZzZXQgKyBjb2RlYy5rU3RydWN0SGVh
ZGVyU2l6ZSArIDE2LCBVc2JTeW5jaHJvbml6YXRpb25UeXBlKTsKLSAgICBpZiAoZXJyICE9PSB2
YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCi0gICAgICAgIHJldHVybiBlcnI7Ci0KLQot
ICAgIC8vIHZhbGlkYXRlIFVzYkVuZHBvaW50SW5mby51c2FnZVR5cGUKLSAgICBlcnIgPSBtZXNz
YWdlVmFsaWRhdG9yLnZhbGlkYXRlRW51bShvZmZzZXQgKyBjb2RlYy5rU3RydWN0SGVhZGVyU2l6
ZSArIDIwLCBVc2JVc2FnZVR5cGUpOwotICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0
aW9uRXJyb3IuTk9ORSkKLSAgICAgICAgcmV0dXJuIGVycjsKLQotCi0KLSAgICAvLyB2YWxpZGF0
ZSBVc2JFbmRwb2ludEluZm8uZXh0cmFEYXRhCi0gICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52
YWxpZGF0ZUFycmF5UG9pbnRlcihvZmZzZXQgKyBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDI0
LCAxLCBjb2RlYy5VaW50OCwgZmFsc2UsIFswXSwgMCk7Ci0gICAgaWYgKGVyciAhPT0gdmFsaWRh
dG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQotICAgICAgICByZXR1cm4gZXJyOwotCi0gICAgcmV0
dXJuIHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORTsKLSAgfTsKLQotICBVc2JFbmRwb2lu
dEluZm8uZW5jb2RlZFNpemUgPSBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDMyOwotCi0gIFVz
YkVuZHBvaW50SW5mby5kZWNvZGUgPSBmdW5jdGlvbihkZWNvZGVyKSB7Ci0gICAgdmFyIHBhY2tl
ZDsKLSAgICB2YXIgdmFsID0gbmV3IFVzYkVuZHBvaW50SW5mbygpOwotICAgIHZhciBudW1iZXJP
ZkJ5dGVzID0gZGVjb2Rlci5yZWFkVWludDMyKCk7Ci0gICAgdmFyIHZlcnNpb24gPSBkZWNvZGVy
LnJlYWRVaW50MzIoKTsKLSAgICB2YWwuZW5kcG9pbnROdW1iZXIgPSBkZWNvZGVyLmRlY29kZVN0
cnVjdChjb2RlYy5VaW50OCk7Ci0gICAgdmFsLnBvbGxpbmdJbnRlcnZhbCA9IGRlY29kZXIuZGVj
b2RlU3RydWN0KGNvZGVjLlVpbnQ4KTsKLSAgICBkZWNvZGVyLnNraXAoMSk7Ci0gICAgZGVjb2Rl
ci5za2lwKDEpOwotICAgIHZhbC5kaXJlY3Rpb24gPSBkZWNvZGVyLmRlY29kZVN0cnVjdChjb2Rl
Yy5JbnQzMik7Ci0gICAgdmFsLnR5cGUgPSBkZWNvZGVyLmRlY29kZVN0cnVjdChjb2RlYy5JbnQz
Mik7Ci0gICAgdmFsLnBhY2tldFNpemUgPSBkZWNvZGVyLmRlY29kZVN0cnVjdChjb2RlYy5VaW50
MzIpOwotICAgIHZhbC5zeW5jaHJvbml6YXRpb25UeXBlID0gZGVjb2Rlci5kZWNvZGVTdHJ1Y3Qo
Y29kZWMuSW50MzIpOwotICAgIHZhbC51c2FnZVR5cGUgPSBkZWNvZGVyLmRlY29kZVN0cnVjdChj
b2RlYy5JbnQzMik7Ci0gICAgdmFsLmV4dHJhRGF0YSA9IGRlY29kZXIuZGVjb2RlQXJyYXlQb2lu
dGVyKGNvZGVjLlVpbnQ4KTsKLSAgICByZXR1cm4gdmFsOwotICB9OwotCi0gIFVzYkVuZHBvaW50
SW5mby5lbmNvZGUgPSBmdW5jdGlvbihlbmNvZGVyLCB2YWwpIHsKLSAgICB2YXIgcGFja2VkOwot
ICAgIGVuY29kZXIud3JpdGVVaW50MzIoVXNiRW5kcG9pbnRJbmZvLmVuY29kZWRTaXplKTsKLSAg
ICBlbmNvZGVyLndyaXRlVWludDMyKDApOwotICAgIGVuY29kZXIuZW5jb2RlU3RydWN0KGNvZGVj
LlVpbnQ4LCB2YWwuZW5kcG9pbnROdW1iZXIpOwotICAgIGVuY29kZXIuZW5jb2RlU3RydWN0KGNv
ZGVjLlVpbnQ4LCB2YWwucG9sbGluZ0ludGVydmFsKTsKLSAgICBlbmNvZGVyLnNraXAoMSk7Ci0g
ICAgZW5jb2Rlci5za2lwKDEpOwotICAgIGVuY29kZXIuZW5jb2RlU3RydWN0KGNvZGVjLkludDMy
LCB2YWwuZGlyZWN0aW9uKTsKLSAgICBlbmNvZGVyLmVuY29kZVN0cnVjdChjb2RlYy5JbnQzMiwg
dmFsLnR5cGUpOwotICAgIGVuY29kZXIuZW5jb2RlU3RydWN0KGNvZGVjLlVpbnQzMiwgdmFsLnBh
Y2tldFNpemUpOwotICAgIGVuY29kZXIuZW5jb2RlU3RydWN0KGNvZGVjLkludDMyLCB2YWwuc3lu
Y2hyb25pemF0aW9uVHlwZSk7Ci0gICAgZW5jb2Rlci5lbmNvZGVTdHJ1Y3QoY29kZWMuSW50MzIs
IHZhbC51c2FnZVR5cGUpOwotICAgIGVuY29kZXIuZW5jb2RlQXJyYXlQb2ludGVyKGNvZGVjLlVp
bnQ4LCB2YWwuZXh0cmFEYXRhKTsKLSAgfTsKLSAgZnVuY3Rpb24gVXNiQWx0ZXJuYXRlSW50ZXJm
YWNlSW5mbyh2YWx1ZXMpIHsKLSAgICB0aGlzLmluaXREZWZhdWx0c18oKTsKLSAgICB0aGlzLmlu
aXRGaWVsZHNfKHZhbHVlcyk7Ci0gIH0KLQotCi0gIFVzYkFsdGVybmF0ZUludGVyZmFjZUluZm8u
cHJvdG90eXBlLmluaXREZWZhdWx0c18gPSBmdW5jdGlvbigpIHsKLSAgICB0aGlzLmFsdGVybmF0
ZVNldHRpbmcgPSAwOwotICAgIHRoaXMuY2xhc3NDb2RlID0gMDsKLSAgICB0aGlzLnN1YmNsYXNz
Q29kZSA9IDA7Ci0gICAgdGhpcy5wcm90b2NvbENvZGUgPSAwOwotICAgIHRoaXMuaW50ZXJmYWNl
TmFtZSA9IG51bGw7Ci0gICAgdGhpcy5lbmRwb2ludHMgPSBudWxsOwotICAgIHRoaXMuZXh0cmFE
YXRhID0gbnVsbDsKLSAgfTsKLSAgVXNiQWx0ZXJuYXRlSW50ZXJmYWNlSW5mby5wcm90b3R5cGUu
aW5pdEZpZWxkc18gPSBmdW5jdGlvbihmaWVsZHMpIHsKLSAgICBmb3IodmFyIGZpZWxkIGluIGZp
ZWxkcykgewotICAgICAgICBpZiAodGhpcy5oYXNPd25Qcm9wZXJ0eShmaWVsZCkpCi0gICAgICAg
ICAgdGhpc1tmaWVsZF0gPSBmaWVsZHNbZmllbGRdOwotICAgIH0KLSAgfTsKLQotICBVc2JBbHRl
cm5hdGVJbnRlcmZhY2VJbmZvLnZhbGlkYXRlID0gZnVuY3Rpb24obWVzc2FnZVZhbGlkYXRvciwg
b2Zmc2V0KSB7Ci0gICAgdmFyIGVycjsKLSAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlk
YXRlU3RydWN0SGVhZGVyKG9mZnNldCwgY29kZWMua1N0cnVjdEhlYWRlclNpemUpOwotICAgIGlm
IChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKLSAgICAgICAgcmV0dXJu
IGVycjsKLQotICAgIHZhciBrVmVyc2lvblNpemVzID0gWwotICAgICAge3ZlcnNpb246IDAsIG51
bUJ5dGVzOiA0MH0KLSAgICBdOwotICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVT
dHJ1Y3RWZXJzaW9uKG9mZnNldCwga1ZlcnNpb25TaXplcyk7Ci0gICAgaWYgKGVyciAhPT0gdmFs
aWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQotICAgICAgICByZXR1cm4gZXJyOwotCi0KLQot
Ci0KLQotICAgIC8vIHZhbGlkYXRlIFVzYkFsdGVybmF0ZUludGVyZmFjZUluZm8uaW50ZXJmYWNl
TmFtZQotICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RQb2ludGVyKG9m
ZnNldCArIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgOCwgc3RyaW5nMTYkLlN0cmluZzE2LCB0
cnVlKTsKLSAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCi0g
ICAgICAgIHJldHVybiBlcnI7Ci0KLQotICAgIC8vIHZhbGlkYXRlIFVzYkFsdGVybmF0ZUludGVy
ZmFjZUluZm8uZW5kcG9pbnRzCi0gICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZUFy
cmF5UG9pbnRlcihvZmZzZXQgKyBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDE2LCA4LCBuZXcg
Y29kZWMuUG9pbnRlclRvKFVzYkVuZHBvaW50SW5mbyksIGZhbHNlLCBbMF0sIDApOwotICAgIGlm
IChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKLSAgICAgICAgcmV0dXJu
IGVycjsKLQotCi0gICAgLy8gdmFsaWRhdGUgVXNiQWx0ZXJuYXRlSW50ZXJmYWNlSW5mby5leHRy
YURhdGEKLSAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlQXJyYXlQb2ludGVyKG9m
ZnNldCArIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgMjQsIDEsIGNvZGVjLlVpbnQ4LCBmYWxz
ZSwgWzBdLCAwKTsKLSAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5P
TkUpCi0gICAgICAgIHJldHVybiBlcnI7Ci0KLSAgICByZXR1cm4gdmFsaWRhdG9yLnZhbGlkYXRp
b25FcnJvci5OT05FOwotICB9OwotCi0gIFVzYkFsdGVybmF0ZUludGVyZmFjZUluZm8uZW5jb2Rl
ZFNpemUgPSBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDMyOwotCi0gIFVzYkFsdGVybmF0ZUlu
dGVyZmFjZUluZm8uZGVjb2RlID0gZnVuY3Rpb24oZGVjb2RlcikgewotICAgIHZhciBwYWNrZWQ7
Ci0gICAgdmFyIHZhbCA9IG5ldyBVc2JBbHRlcm5hdGVJbnRlcmZhY2VJbmZvKCk7Ci0gICAgdmFy
IG51bWJlck9mQnl0ZXMgPSBkZWNvZGVyLnJlYWRVaW50MzIoKTsKLSAgICB2YXIgdmVyc2lvbiA9
IGRlY29kZXIucmVhZFVpbnQzMigpOwotICAgIHZhbC5hbHRlcm5hdGVTZXR0aW5nID0gZGVjb2Rl
ci5kZWNvZGVTdHJ1Y3QoY29kZWMuVWludDgpOwotICAgIHZhbC5jbGFzc0NvZGUgPSBkZWNvZGVy
LmRlY29kZVN0cnVjdChjb2RlYy5VaW50OCk7Ci0gICAgdmFsLnN1YmNsYXNzQ29kZSA9IGRlY29k
ZXIuZGVjb2RlU3RydWN0KGNvZGVjLlVpbnQ4KTsKLSAgICB2YWwucHJvdG9jb2xDb2RlID0gZGVj
b2Rlci5kZWNvZGVTdHJ1Y3QoY29kZWMuVWludDgpOwotICAgIGRlY29kZXIuc2tpcCgxKTsKLSAg
ICBkZWNvZGVyLnNraXAoMSk7Ci0gICAgZGVjb2Rlci5za2lwKDEpOwotICAgIGRlY29kZXIuc2tp
cCgxKTsKLSAgICB2YWwuaW50ZXJmYWNlTmFtZSA9IGRlY29kZXIuZGVjb2RlU3RydWN0UG9pbnRl
cihzdHJpbmcxNiQuU3RyaW5nMTYpOwotICAgIHZhbC5lbmRwb2ludHMgPSBkZWNvZGVyLmRlY29k
ZUFycmF5UG9pbnRlcihuZXcgY29kZWMuUG9pbnRlclRvKFVzYkVuZHBvaW50SW5mbykpOwotICAg
IHZhbC5leHRyYURhdGEgPSBkZWNvZGVyLmRlY29kZUFycmF5UG9pbnRlcihjb2RlYy5VaW50OCk7
Ci0gICAgcmV0dXJuIHZhbDsKLSAgfTsKLQotICBVc2JBbHRlcm5hdGVJbnRlcmZhY2VJbmZvLmVu
Y29kZSA9IGZ1bmN0aW9uKGVuY29kZXIsIHZhbCkgewotICAgIHZhciBwYWNrZWQ7Ci0gICAgZW5j
b2Rlci53cml0ZVVpbnQzMihVc2JBbHRlcm5hdGVJbnRlcmZhY2VJbmZvLmVuY29kZWRTaXplKTsK
LSAgICBlbmNvZGVyLndyaXRlVWludDMyKDApOwotICAgIGVuY29kZXIuZW5jb2RlU3RydWN0KGNv
ZGVjLlVpbnQ4LCB2YWwuYWx0ZXJuYXRlU2V0dGluZyk7Ci0gICAgZW5jb2Rlci5lbmNvZGVTdHJ1
Y3QoY29kZWMuVWludDgsIHZhbC5jbGFzc0NvZGUpOwotICAgIGVuY29kZXIuZW5jb2RlU3RydWN0
KGNvZGVjLlVpbnQ4LCB2YWwuc3ViY2xhc3NDb2RlKTsKLSAgICBlbmNvZGVyLmVuY29kZVN0cnVj
dChjb2RlYy5VaW50OCwgdmFsLnByb3RvY29sQ29kZSk7Ci0gICAgZW5jb2Rlci5za2lwKDEpOwot
ICAgIGVuY29kZXIuc2tpcCgxKTsKLSAgICBlbmNvZGVyLnNraXAoMSk7Ci0gICAgZW5jb2Rlci5z
a2lwKDEpOwotICAgIGVuY29kZXIuZW5jb2RlU3RydWN0UG9pbnRlcihzdHJpbmcxNiQuU3RyaW5n
MTYsIHZhbC5pbnRlcmZhY2VOYW1lKTsKLSAgICBlbmNvZGVyLmVuY29kZUFycmF5UG9pbnRlcihu
ZXcgY29kZWMuUG9pbnRlclRvKFVzYkVuZHBvaW50SW5mbyksIHZhbC5lbmRwb2ludHMpOwotICAg
IGVuY29kZXIuZW5jb2RlQXJyYXlQb2ludGVyKGNvZGVjLlVpbnQ4LCB2YWwuZXh0cmFEYXRhKTsK
LSAgfTsKLSAgZnVuY3Rpb24gVXNiSW50ZXJmYWNlSW5mbyh2YWx1ZXMpIHsKLSAgICB0aGlzLmlu
aXREZWZhdWx0c18oKTsKLSAgICB0aGlzLmluaXRGaWVsZHNfKHZhbHVlcyk7Ci0gIH0KLQotCi0g
IFVzYkludGVyZmFjZUluZm8ucHJvdG90eXBlLmluaXREZWZhdWx0c18gPSBmdW5jdGlvbigpIHsK
LSAgICB0aGlzLmludGVyZmFjZU51bWJlciA9IDA7Ci0gICAgdGhpcy5hbHRlcm5hdGVzID0gbnVs
bDsKLSAgfTsKLSAgVXNiSW50ZXJmYWNlSW5mby5wcm90b3R5cGUuaW5pdEZpZWxkc18gPSBmdW5j
dGlvbihmaWVsZHMpIHsKLSAgICBmb3IodmFyIGZpZWxkIGluIGZpZWxkcykgewotICAgICAgICBp
ZiAodGhpcy5oYXNPd25Qcm9wZXJ0eShmaWVsZCkpCi0gICAgICAgICAgdGhpc1tmaWVsZF0gPSBm
aWVsZHNbZmllbGRdOwotICAgIH0KLSAgfTsKLQotICBVc2JJbnRlcmZhY2VJbmZvLnZhbGlkYXRl
ID0gZnVuY3Rpb24obWVzc2FnZVZhbGlkYXRvciwgb2Zmc2V0KSB7Ci0gICAgdmFyIGVycjsKLSAg
ICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0SGVhZGVyKG9mZnNldCwgY29k
ZWMua1N0cnVjdEhlYWRlclNpemUpOwotICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0
aW9uRXJyb3IuTk9ORSkKLSAgICAgICAgcmV0dXJuIGVycjsKLQotICAgIHZhciBrVmVyc2lvblNp
emVzID0gWwotICAgICAge3ZlcnNpb246IDAsIG51bUJ5dGVzOiAyNH0KLSAgICBdOwotICAgIGVy
ciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RWZXJzaW9uKG9mZnNldCwga1ZlcnNp
b25TaXplcyk7Ci0gICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05F
KQotICAgICAgICByZXR1cm4gZXJyOwotCi0KLQotICAgIC8vIHZhbGlkYXRlIFVzYkludGVyZmFj
ZUluZm8uYWx0ZXJuYXRlcwotICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVBcnJh
eVBvaW50ZXIob2Zmc2V0ICsgY29kZWMua1N0cnVjdEhlYWRlclNpemUgKyA4LCA4LCBuZXcgY29k
ZWMuUG9pbnRlclRvKFVzYkFsdGVybmF0ZUludGVyZmFjZUluZm8pLCBmYWxzZSwgWzBdLCAwKTsK
LSAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCi0gICAgICAg
IHJldHVybiBlcnI7Ci0KLSAgICByZXR1cm4gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05F
OwotICB9OwotCi0gIFVzYkludGVyZmFjZUluZm8uZW5jb2RlZFNpemUgPSBjb2RlYy5rU3RydWN0
SGVhZGVyU2l6ZSArIDE2OwotCi0gIFVzYkludGVyZmFjZUluZm8uZGVjb2RlID0gZnVuY3Rpb24o
ZGVjb2RlcikgewotICAgIHZhciBwYWNrZWQ7Ci0gICAgdmFyIHZhbCA9IG5ldyBVc2JJbnRlcmZh
Y2VJbmZvKCk7Ci0gICAgdmFyIG51bWJlck9mQnl0ZXMgPSBkZWNvZGVyLnJlYWRVaW50MzIoKTsK
LSAgICB2YXIgdmVyc2lvbiA9IGRlY29kZXIucmVhZFVpbnQzMigpOwotICAgIHZhbC5pbnRlcmZh
Y2VOdW1iZXIgPSBkZWNvZGVyLmRlY29kZVN0cnVjdChjb2RlYy5VaW50OCk7Ci0gICAgZGVjb2Rl
ci5za2lwKDEpOwotICAgIGRlY29kZXIuc2tpcCgxKTsKLSAgICBkZWNvZGVyLnNraXAoMSk7Ci0g
ICAgZGVjb2Rlci5za2lwKDEpOwotICAgIGRlY29kZXIuc2tpcCgxKTsKLSAgICBkZWNvZGVyLnNr
aXAoMSk7Ci0gICAgZGVjb2Rlci5za2lwKDEpOwotICAgIHZhbC5hbHRlcm5hdGVzID0gZGVjb2Rl
ci5kZWNvZGVBcnJheVBvaW50ZXIobmV3IGNvZGVjLlBvaW50ZXJUbyhVc2JBbHRlcm5hdGVJbnRl
cmZhY2VJbmZvKSk7Ci0gICAgcmV0dXJuIHZhbDsKLSAgfTsKLQotICBVc2JJbnRlcmZhY2VJbmZv
LmVuY29kZSA9IGZ1bmN0aW9uKGVuY29kZXIsIHZhbCkgewotICAgIHZhciBwYWNrZWQ7Ci0gICAg
ZW5jb2Rlci53cml0ZVVpbnQzMihVc2JJbnRlcmZhY2VJbmZvLmVuY29kZWRTaXplKTsKLSAgICBl
bmNvZGVyLndyaXRlVWludDMyKDApOwotICAgIGVuY29kZXIuZW5jb2RlU3RydWN0KGNvZGVjLlVp
bnQ4LCB2YWwuaW50ZXJmYWNlTnVtYmVyKTsKLSAgICBlbmNvZGVyLnNraXAoMSk7Ci0gICAgZW5j
b2Rlci5za2lwKDEpOwotICAgIGVuY29kZXIuc2tpcCgxKTsKLSAgICBlbmNvZGVyLnNraXAoMSk7
Ci0gICAgZW5jb2Rlci5za2lwKDEpOwotICAgIGVuY29kZXIuc2tpcCgxKTsKLSAgICBlbmNvZGVy
LnNraXAoMSk7Ci0gICAgZW5jb2Rlci5lbmNvZGVBcnJheVBvaW50ZXIobmV3IGNvZGVjLlBvaW50
ZXJUbyhVc2JBbHRlcm5hdGVJbnRlcmZhY2VJbmZvKSwgdmFsLmFsdGVybmF0ZXMpOwotICB9Owot
ICBmdW5jdGlvbiBVc2JDb25maWd1cmF0aW9uSW5mbyh2YWx1ZXMpIHsKLSAgICB0aGlzLmluaXRE
ZWZhdWx0c18oKTsKLSAgICB0aGlzLmluaXRGaWVsZHNfKHZhbHVlcyk7Ci0gIH0KLQotCi0gIFVz
YkNvbmZpZ3VyYXRpb25JbmZvLnByb3RvdHlwZS5pbml0RGVmYXVsdHNfID0gZnVuY3Rpb24oKSB7
Ci0gICAgdGhpcy5jb25maWd1cmF0aW9uVmFsdWUgPSAwOwotICAgIHRoaXMuc2VsZlBvd2VyZWQg
PSBmYWxzZTsKLSAgICB0aGlzLnJlbW90ZVdha2V1cCA9IGZhbHNlOwotICAgIHRoaXMubWF4aW11
bVBvd2VyID0gMDsKLSAgICB0aGlzLmNvbmZpZ3VyYXRpb25OYW1lID0gbnVsbDsKLSAgICB0aGlz
LmludGVyZmFjZXMgPSBudWxsOwotICAgIHRoaXMuZXh0cmFEYXRhID0gbnVsbDsKLSAgfTsKLSAg
VXNiQ29uZmlndXJhdGlvbkluZm8ucHJvdG90eXBlLmluaXRGaWVsZHNfID0gZnVuY3Rpb24oZmll
bGRzKSB7Ci0gICAgZm9yKHZhciBmaWVsZCBpbiBmaWVsZHMpIHsKLSAgICAgICAgaWYgKHRoaXMu
aGFzT3duUHJvcGVydHkoZmllbGQpKQotICAgICAgICAgIHRoaXNbZmllbGRdID0gZmllbGRzW2Zp
ZWxkXTsKLSAgICB9Ci0gIH07Ci0KLSAgVXNiQ29uZmlndXJhdGlvbkluZm8udmFsaWRhdGUgPSBm
dW5jdGlvbihtZXNzYWdlVmFsaWRhdG9yLCBvZmZzZXQpIHsKLSAgICB2YXIgZXJyOwotICAgIGVy
ciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RIZWFkZXIob2Zmc2V0LCBjb2RlYy5r
U3RydWN0SGVhZGVyU2l6ZSk7Ci0gICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25F
cnJvci5OT05FKQotICAgICAgICByZXR1cm4gZXJyOwotCi0gICAgdmFyIGtWZXJzaW9uU2l6ZXMg
PSBbCi0gICAgICB7dmVyc2lvbjogMCwgbnVtQnl0ZXM6IDQwfQotICAgIF07Ci0gICAgZXJyID0g
bWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdFZlcnNpb24ob2Zmc2V0LCBrVmVyc2lvblNp
emVzKTsKLSAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCi0g
ICAgICAgIHJldHVybiBlcnI7Ci0KLQotCi0gICAgLy8gdmFsaWRhdGUgVXNiQ29uZmlndXJhdGlv
bkluZm8uY29uZmlndXJhdGlvbk5hbWUKLSAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlk
YXRlU3RydWN0UG9pbnRlcihvZmZzZXQgKyBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDgsIHN0
cmluZzE2JC5TdHJpbmcxNiwgdHJ1ZSk7Ci0gICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlk
YXRpb25FcnJvci5OT05FKQotICAgICAgICByZXR1cm4gZXJyOwotCi0KLQotCi0KLSAgICAvLyB2
YWxpZGF0ZSBVc2JDb25maWd1cmF0aW9uSW5mby5pbnRlcmZhY2VzCi0gICAgZXJyID0gbWVzc2Fn
ZVZhbGlkYXRvci52YWxpZGF0ZUFycmF5UG9pbnRlcihvZmZzZXQgKyBjb2RlYy5rU3RydWN0SGVh
ZGVyU2l6ZSArIDE2LCA4LCBuZXcgY29kZWMuUG9pbnRlclRvKFVzYkludGVyZmFjZUluZm8pLCBm
YWxzZSwgWzBdLCAwKTsKLSAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9y
Lk5PTkUpCi0gICAgICAgIHJldHVybiBlcnI7Ci0KLQotICAgIC8vIHZhbGlkYXRlIFVzYkNvbmZp
Z3VyYXRpb25JbmZvLmV4dHJhRGF0YQotICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRh
dGVBcnJheVBvaW50ZXIob2Zmc2V0ICsgY29kZWMua1N0cnVjdEhlYWRlclNpemUgKyAyNCwgMSwg
Y29kZWMuVWludDgsIGZhbHNlLCBbMF0sIDApOwotICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52
YWxpZGF0aW9uRXJyb3IuTk9ORSkKLSAgICAgICAgcmV0dXJuIGVycjsKLQotICAgIHJldHVybiB2
YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkU7Ci0gIH07Ci0KLSAgVXNiQ29uZmlndXJhdGlv
bkluZm8uZW5jb2RlZFNpemUgPSBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDMyOwotCi0gIFVz
YkNvbmZpZ3VyYXRpb25JbmZvLmRlY29kZSA9IGZ1bmN0aW9uKGRlY29kZXIpIHsKLSAgICB2YXIg
cGFja2VkOwotICAgIHZhciB2YWwgPSBuZXcgVXNiQ29uZmlndXJhdGlvbkluZm8oKTsKLSAgICB2
YXIgbnVtYmVyT2ZCeXRlcyA9IGRlY29kZXIucmVhZFVpbnQzMigpOwotICAgIHZhciB2ZXJzaW9u
ID0gZGVjb2Rlci5yZWFkVWludDMyKCk7Ci0gICAgdmFsLmNvbmZpZ3VyYXRpb25WYWx1ZSA9IGRl
Y29kZXIuZGVjb2RlU3RydWN0KGNvZGVjLlVpbnQ4KTsKLSAgICBwYWNrZWQgPSBkZWNvZGVyLnJl
YWRVaW50OCgpOwotICAgIHZhbC5zZWxmUG93ZXJlZCA9IChwYWNrZWQgPj4gMCkgJiAxID8gdHJ1
ZSA6IGZhbHNlOwotICAgIHZhbC5yZW1vdGVXYWtldXAgPSAocGFja2VkID4+IDEpICYgMSA/IHRy
dWUgOiBmYWxzZTsKLSAgICB2YWwubWF4aW11bVBvd2VyID0gZGVjb2Rlci5kZWNvZGVTdHJ1Y3Qo
Y29kZWMuVWludDgpOwotICAgIGRlY29kZXIuc2tpcCgxKTsKLSAgICBkZWNvZGVyLnNraXAoMSk7
Ci0gICAgZGVjb2Rlci5za2lwKDEpOwotICAgIGRlY29kZXIuc2tpcCgxKTsKLSAgICBkZWNvZGVy
LnNraXAoMSk7Ci0gICAgdmFsLmNvbmZpZ3VyYXRpb25OYW1lID0gZGVjb2Rlci5kZWNvZGVTdHJ1
Y3RQb2ludGVyKHN0cmluZzE2JC5TdHJpbmcxNik7Ci0gICAgdmFsLmludGVyZmFjZXMgPSBkZWNv
ZGVyLmRlY29kZUFycmF5UG9pbnRlcihuZXcgY29kZWMuUG9pbnRlclRvKFVzYkludGVyZmFjZUlu
Zm8pKTsKLSAgICB2YWwuZXh0cmFEYXRhID0gZGVjb2Rlci5kZWNvZGVBcnJheVBvaW50ZXIoY29k
ZWMuVWludDgpOwotICAgIHJldHVybiB2YWw7Ci0gIH07Ci0KLSAgVXNiQ29uZmlndXJhdGlvbklu
Zm8uZW5jb2RlID0gZnVuY3Rpb24oZW5jb2RlciwgdmFsKSB7Ci0gICAgdmFyIHBhY2tlZDsKLSAg
ICBlbmNvZGVyLndyaXRlVWludDMyKFVzYkNvbmZpZ3VyYXRpb25JbmZvLmVuY29kZWRTaXplKTsK
LSAgICBlbmNvZGVyLndyaXRlVWludDMyKDApOwotICAgIGVuY29kZXIuZW5jb2RlU3RydWN0KGNv
ZGVjLlVpbnQ4LCB2YWwuY29uZmlndXJhdGlvblZhbHVlKTsKLSAgICBwYWNrZWQgPSAwOwotICAg
IHBhY2tlZCB8PSAodmFsLnNlbGZQb3dlcmVkICYgMSkgPDwgMAotICAgIHBhY2tlZCB8PSAodmFs
LnJlbW90ZVdha2V1cCAmIDEpIDw8IDEKLSAgICBlbmNvZGVyLndyaXRlVWludDgocGFja2VkKTsK
LSAgICBlbmNvZGVyLmVuY29kZVN0cnVjdChjb2RlYy5VaW50OCwgdmFsLm1heGltdW1Qb3dlcik7
Ci0gICAgZW5jb2Rlci5za2lwKDEpOwotICAgIGVuY29kZXIuc2tpcCgxKTsKLSAgICBlbmNvZGVy
LnNraXAoMSk7Ci0gICAgZW5jb2Rlci5za2lwKDEpOwotICAgIGVuY29kZXIuc2tpcCgxKTsKLSAg
ICBlbmNvZGVyLmVuY29kZVN0cnVjdFBvaW50ZXIoc3RyaW5nMTYkLlN0cmluZzE2LCB2YWwuY29u
ZmlndXJhdGlvbk5hbWUpOwotICAgIGVuY29kZXIuZW5jb2RlQXJyYXlQb2ludGVyKG5ldyBjb2Rl
Yy5Qb2ludGVyVG8oVXNiSW50ZXJmYWNlSW5mbyksIHZhbC5pbnRlcmZhY2VzKTsKLSAgICBlbmNv
ZGVyLmVuY29kZUFycmF5UG9pbnRlcihjb2RlYy5VaW50OCwgdmFsLmV4dHJhRGF0YSk7Ci0gIH07
Ci0gIGZ1bmN0aW9uIFVzYkRldmljZUluZm8odmFsdWVzKSB7Ci0gICAgdGhpcy5pbml0RGVmYXVs
dHNfKCk7Ci0gICAgdGhpcy5pbml0RmllbGRzXyh2YWx1ZXMpOwotICB9Ci0KLQotICBVc2JEZXZp
Y2VJbmZvLnByb3RvdHlwZS5pbml0RGVmYXVsdHNfID0gZnVuY3Rpb24oKSB7Ci0gICAgdGhpcy5n
dWlkID0gbnVsbDsKLSAgICB0aGlzLnVzYlZlcnNpb25NYWpvciA9IDA7Ci0gICAgdGhpcy51c2JW
ZXJzaW9uTWlub3IgPSAwOwotICAgIHRoaXMudXNiVmVyc2lvblN1Ym1pbm9yID0gMDsKLSAgICB0
aGlzLmNsYXNzQ29kZSA9IDA7Ci0gICAgdGhpcy5zdWJjbGFzc0NvZGUgPSAwOwotICAgIHRoaXMu
cHJvdG9jb2xDb2RlID0gMDsKLSAgICB0aGlzLnZlbmRvcklkID0gMDsKLSAgICB0aGlzLmJ1c051
bWJlciA9IDA7Ci0gICAgdGhpcy5wb3J0TnVtYmVyID0gMDsKLSAgICB0aGlzLnByb2R1Y3RJZCA9
IDA7Ci0gICAgdGhpcy5kZXZpY2VWZXJzaW9uTWFqb3IgPSAwOwotICAgIHRoaXMuZGV2aWNlVmVy
c2lvbk1pbm9yID0gMDsKLSAgICB0aGlzLmRldmljZVZlcnNpb25TdWJtaW5vciA9IDA7Ci0gICAg
dGhpcy5hY3RpdmVDb25maWd1cmF0aW9uID0gMDsKLSAgICB0aGlzLm1hbnVmYWN0dXJlck5hbWUg
PSBudWxsOwotICAgIHRoaXMucHJvZHVjdE5hbWUgPSBudWxsOwotICAgIHRoaXMuc2VyaWFsTnVt
YmVyID0gbnVsbDsKLSAgICB0aGlzLndlYnVzYkxhbmRpbmdQYWdlID0gbnVsbDsKLSAgICB0aGlz
LmNvbmZpZ3VyYXRpb25zID0gbnVsbDsKLSAgfTsKLSAgVXNiRGV2aWNlSW5mby5wcm90b3R5cGUu
aW5pdEZpZWxkc18gPSBmdW5jdGlvbihmaWVsZHMpIHsKLSAgICBmb3IodmFyIGZpZWxkIGluIGZp
ZWxkcykgewotICAgICAgICBpZiAodGhpcy5oYXNPd25Qcm9wZXJ0eShmaWVsZCkpCi0gICAgICAg
ICAgdGhpc1tmaWVsZF0gPSBmaWVsZHNbZmllbGRdOwotICAgIH0KLSAgfTsKLQotICBVc2JEZXZp
Y2VJbmZvLnZhbGlkYXRlID0gZnVuY3Rpb24obWVzc2FnZVZhbGlkYXRvciwgb2Zmc2V0KSB7Ci0g
ICAgdmFyIGVycjsKLSAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0SGVh
ZGVyKG9mZnNldCwgY29kZWMua1N0cnVjdEhlYWRlclNpemUpOwotICAgIGlmIChlcnIgIT09IHZh
bGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKLSAgICAgICAgcmV0dXJuIGVycjsKLQotICAg
IHZhciBrVmVyc2lvblNpemVzID0gWwotICAgICAge3ZlcnNpb246IDAsIG51bUJ5dGVzOiA4MH0K
LSAgICBdOwotICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RWZXJzaW9u
KG9mZnNldCwga1ZlcnNpb25TaXplcyk7Ci0gICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlk
YXRpb25FcnJvci5OT05FKQotICAgICAgICByZXR1cm4gZXJyOwotCi0KLSAgICAvLyB2YWxpZGF0
ZSBVc2JEZXZpY2VJbmZvLmd1aWQKLSAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRl
U3RyaW5nUG9pbnRlcihvZmZzZXQgKyBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDAsIGZhbHNl
KQotICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKLSAgICAg
ICAgcmV0dXJuIGVycjsKLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLSAgICAvLyB2YWxp
ZGF0ZSBVc2JEZXZpY2VJbmZvLm1hbnVmYWN0dXJlck5hbWUKLSAgICBlcnIgPSBtZXNzYWdlVmFs
aWRhdG9yLnZhbGlkYXRlU3RydWN0UG9pbnRlcihvZmZzZXQgKyBjb2RlYy5rU3RydWN0SGVhZGVy
U2l6ZSArIDMyLCBzdHJpbmcxNiQuU3RyaW5nMTYsIHRydWUpOwotICAgIGlmIChlcnIgIT09IHZh
bGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKLSAgICAgICAgcmV0dXJuIGVycjsKLQotCi0g
ICAgLy8gdmFsaWRhdGUgVXNiRGV2aWNlSW5mby5wcm9kdWN0TmFtZQotICAgIGVyciA9IG1lc3Nh
Z2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RQb2ludGVyKG9mZnNldCArIGNvZGVjLmtTdHJ1Y3RI
ZWFkZXJTaXplICsgNDAsIHN0cmluZzE2JC5TdHJpbmcxNiwgdHJ1ZSk7Ci0gICAgaWYgKGVyciAh
PT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQotICAgICAgICByZXR1cm4gZXJyOwot
Ci0KLSAgICAvLyB2YWxpZGF0ZSBVc2JEZXZpY2VJbmZvLnNlcmlhbE51bWJlcgotICAgIGVyciA9
IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RQb2ludGVyKG9mZnNldCArIGNvZGVjLmtT
dHJ1Y3RIZWFkZXJTaXplICsgNDgsIHN0cmluZzE2JC5TdHJpbmcxNiwgdHJ1ZSk7Ci0gICAgaWYg
KGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQotICAgICAgICByZXR1cm4g
ZXJyOwotCi0KLSAgICAvLyB2YWxpZGF0ZSBVc2JEZXZpY2VJbmZvLndlYnVzYkxhbmRpbmdQYWdl
Ci0gICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdFBvaW50ZXIob2Zmc2V0
ICsgY29kZWMua1N0cnVjdEhlYWRlclNpemUgKyA1NiwgdXJsJC5VcmwsIHRydWUpOwotICAgIGlm
IChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKLSAgICAgICAgcmV0dXJu
IGVycjsKLQotCi0KLSAgICAvLyB2YWxpZGF0ZSBVc2JEZXZpY2VJbmZvLmNvbmZpZ3VyYXRpb25z
Ci0gICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZUFycmF5UG9pbnRlcihvZmZzZXQg
KyBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDY0LCA4LCBuZXcgY29kZWMuUG9pbnRlclRvKFVz
YkNvbmZpZ3VyYXRpb25JbmZvKSwgZmFsc2UsIFswXSwgMCk7Ci0gICAgaWYgKGVyciAhPT0gdmFs
aWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQotICAgICAgICByZXR1cm4gZXJyOwotCi0gICAg
cmV0dXJuIHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORTsKLSAgfTsKLQotICBVc2JEZXZp
Y2VJbmZvLmVuY29kZWRTaXplID0gY29kZWMua1N0cnVjdEhlYWRlclNpemUgKyA3MjsKLQotICBV
c2JEZXZpY2VJbmZvLmRlY29kZSA9IGZ1bmN0aW9uKGRlY29kZXIpIHsKLSAgICB2YXIgcGFja2Vk
OwotICAgIHZhciB2YWwgPSBuZXcgVXNiRGV2aWNlSW5mbygpOwotICAgIHZhciBudW1iZXJPZkJ5
dGVzID0gZGVjb2Rlci5yZWFkVWludDMyKCk7Ci0gICAgdmFyIHZlcnNpb24gPSBkZWNvZGVyLnJl
YWRVaW50MzIoKTsKLSAgICB2YWwuZ3VpZCA9IGRlY29kZXIuZGVjb2RlU3RydWN0KGNvZGVjLlN0
cmluZyk7Ci0gICAgdmFsLnVzYlZlcnNpb25NYWpvciA9IGRlY29kZXIuZGVjb2RlU3RydWN0KGNv
ZGVjLlVpbnQ4KTsKLSAgICB2YWwudXNiVmVyc2lvbk1pbm9yID0gZGVjb2Rlci5kZWNvZGVTdHJ1
Y3QoY29kZWMuVWludDgpOwotICAgIHZhbC51c2JWZXJzaW9uU3VibWlub3IgPSBkZWNvZGVyLmRl
Y29kZVN0cnVjdChjb2RlYy5VaW50OCk7Ci0gICAgdmFsLmNsYXNzQ29kZSA9IGRlY29kZXIuZGVj
b2RlU3RydWN0KGNvZGVjLlVpbnQ4KTsKLSAgICB2YWwuc3ViY2xhc3NDb2RlID0gZGVjb2Rlci5k
ZWNvZGVTdHJ1Y3QoY29kZWMuVWludDgpOwotICAgIHZhbC5wcm90b2NvbENvZGUgPSBkZWNvZGVy
LmRlY29kZVN0cnVjdChjb2RlYy5VaW50OCk7Ci0gICAgdmFsLnZlbmRvcklkID0gZGVjb2Rlci5k
ZWNvZGVTdHJ1Y3QoY29kZWMuVWludDE2KTsKLSAgICB2YWwuYnVzTnVtYmVyID0gZGVjb2Rlci5k
ZWNvZGVTdHJ1Y3QoY29kZWMuVWludDMyKTsKLSAgICB2YWwucG9ydE51bWJlciA9IGRlY29kZXIu
ZGVjb2RlU3RydWN0KGNvZGVjLlVpbnQzMik7Ci0gICAgdmFsLnByb2R1Y3RJZCA9IGRlY29kZXIu
ZGVjb2RlU3RydWN0KGNvZGVjLlVpbnQxNik7Ci0gICAgdmFsLmRldmljZVZlcnNpb25NYWpvciA9
IGRlY29kZXIuZGVjb2RlU3RydWN0KGNvZGVjLlVpbnQ4KTsKLSAgICB2YWwuZGV2aWNlVmVyc2lv
bk1pbm9yID0gZGVjb2Rlci5kZWNvZGVTdHJ1Y3QoY29kZWMuVWludDgpOwotICAgIHZhbC5kZXZp
Y2VWZXJzaW9uU3VibWlub3IgPSBkZWNvZGVyLmRlY29kZVN0cnVjdChjb2RlYy5VaW50OCk7Ci0g
ICAgdmFsLmFjdGl2ZUNvbmZpZ3VyYXRpb24gPSBkZWNvZGVyLmRlY29kZVN0cnVjdChjb2RlYy5V
aW50OCk7Ci0gICAgZGVjb2Rlci5za2lwKDEpOwotICAgIGRlY29kZXIuc2tpcCgxKTsKLSAgICB2
YWwubWFudWZhY3R1cmVyTmFtZSA9IGRlY29kZXIuZGVjb2RlU3RydWN0UG9pbnRlcihzdHJpbmcx
NiQuU3RyaW5nMTYpOwotICAgIHZhbC5wcm9kdWN0TmFtZSA9IGRlY29kZXIuZGVjb2RlU3RydWN0
UG9pbnRlcihzdHJpbmcxNiQuU3RyaW5nMTYpOwotICAgIHZhbC5zZXJpYWxOdW1iZXIgPSBkZWNv
ZGVyLmRlY29kZVN0cnVjdFBvaW50ZXIoc3RyaW5nMTYkLlN0cmluZzE2KTsKLSAgICB2YWwud2Vi
dXNiTGFuZGluZ1BhZ2UgPSBkZWNvZGVyLmRlY29kZVN0cnVjdFBvaW50ZXIodXJsJC5VcmwpOwot
ICAgIHZhbC5jb25maWd1cmF0aW9ucyA9IGRlY29kZXIuZGVjb2RlQXJyYXlQb2ludGVyKG5ldyBj
b2RlYy5Qb2ludGVyVG8oVXNiQ29uZmlndXJhdGlvbkluZm8pKTsKLSAgICByZXR1cm4gdmFsOwot
ICB9OwotCi0gIFVzYkRldmljZUluZm8uZW5jb2RlID0gZnVuY3Rpb24oZW5jb2RlciwgdmFsKSB7
Ci0gICAgdmFyIHBhY2tlZDsKLSAgICBlbmNvZGVyLndyaXRlVWludDMyKFVzYkRldmljZUluZm8u
ZW5jb2RlZFNpemUpOwotICAgIGVuY29kZXIud3JpdGVVaW50MzIoMCk7Ci0gICAgZW5jb2Rlci5l
bmNvZGVTdHJ1Y3QoY29kZWMuU3RyaW5nLCB2YWwuZ3VpZCk7Ci0gICAgZW5jb2Rlci5lbmNvZGVT
dHJ1Y3QoY29kZWMuVWludDgsIHZhbC51c2JWZXJzaW9uTWFqb3IpOwotICAgIGVuY29kZXIuZW5j
b2RlU3RydWN0KGNvZGVjLlVpbnQ4LCB2YWwudXNiVmVyc2lvbk1pbm9yKTsKLSAgICBlbmNvZGVy
LmVuY29kZVN0cnVjdChjb2RlYy5VaW50OCwgdmFsLnVzYlZlcnNpb25TdWJtaW5vcik7Ci0gICAg
ZW5jb2Rlci5lbmNvZGVTdHJ1Y3QoY29kZWMuVWludDgsIHZhbC5jbGFzc0NvZGUpOwotICAgIGVu
Y29kZXIuZW5jb2RlU3RydWN0KGNvZGVjLlVpbnQ4LCB2YWwuc3ViY2xhc3NDb2RlKTsKLSAgICBl
bmNvZGVyLmVuY29kZVN0cnVjdChjb2RlYy5VaW50OCwgdmFsLnByb3RvY29sQ29kZSk7Ci0gICAg
ZW5jb2Rlci5lbmNvZGVTdHJ1Y3QoY29kZWMuVWludDE2LCB2YWwudmVuZG9ySWQpOwotICAgIGVu
Y29kZXIuZW5jb2RlU3RydWN0KGNvZGVjLlVpbnQzMiwgdmFsLmJ1c051bWJlcik7Ci0gICAgZW5j
b2Rlci5lbmNvZGVTdHJ1Y3QoY29kZWMuVWludDMyLCB2YWwucG9ydE51bWJlcik7Ci0gICAgZW5j
b2Rlci5lbmNvZGVTdHJ1Y3QoY29kZWMuVWludDE2LCB2YWwucHJvZHVjdElkKTsKLSAgICBlbmNv
ZGVyLmVuY29kZVN0cnVjdChjb2RlYy5VaW50OCwgdmFsLmRldmljZVZlcnNpb25NYWpvcik7Ci0g
ICAgZW5jb2Rlci5lbmNvZGVTdHJ1Y3QoY29kZWMuVWludDgsIHZhbC5kZXZpY2VWZXJzaW9uTWlu
b3IpOwotICAgIGVuY29kZXIuZW5jb2RlU3RydWN0KGNvZGVjLlVpbnQ4LCB2YWwuZGV2aWNlVmVy
c2lvblN1Ym1pbm9yKTsKLSAgICBlbmNvZGVyLmVuY29kZVN0cnVjdChjb2RlYy5VaW50OCwgdmFs
LmFjdGl2ZUNvbmZpZ3VyYXRpb24pOwotICAgIGVuY29kZXIuc2tpcCgxKTsKLSAgICBlbmNvZGVy
LnNraXAoMSk7Ci0gICAgZW5jb2Rlci5lbmNvZGVTdHJ1Y3RQb2ludGVyKHN0cmluZzE2JC5TdHJp
bmcxNiwgdmFsLm1hbnVmYWN0dXJlck5hbWUpOwotICAgIGVuY29kZXIuZW5jb2RlU3RydWN0UG9p
bnRlcihzdHJpbmcxNiQuU3RyaW5nMTYsIHZhbC5wcm9kdWN0TmFtZSk7Ci0gICAgZW5jb2Rlci5l
bmNvZGVTdHJ1Y3RQb2ludGVyKHN0cmluZzE2JC5TdHJpbmcxNiwgdmFsLnNlcmlhbE51bWJlcik7
Ci0gICAgZW5jb2Rlci5lbmNvZGVTdHJ1Y3RQb2ludGVyKHVybCQuVXJsLCB2YWwud2VidXNiTGFu
ZGluZ1BhZ2UpOwotICAgIGVuY29kZXIuZW5jb2RlQXJyYXlQb2ludGVyKG5ldyBjb2RlYy5Qb2lu
dGVyVG8oVXNiQ29uZmlndXJhdGlvbkluZm8pLCB2YWwuY29uZmlndXJhdGlvbnMpOwotICB9Owot
ICBmdW5jdGlvbiBVc2JDb250cm9sVHJhbnNmZXJQYXJhbXModmFsdWVzKSB7Ci0gICAgdGhpcy5p
bml0RGVmYXVsdHNfKCk7Ci0gICAgdGhpcy5pbml0RmllbGRzXyh2YWx1ZXMpOwotICB9Ci0KLQot
ICBVc2JDb250cm9sVHJhbnNmZXJQYXJhbXMucHJvdG90eXBlLmluaXREZWZhdWx0c18gPSBmdW5j
dGlvbigpIHsKLSAgICB0aGlzLnR5cGUgPSAwOwotICAgIHRoaXMucmVjaXBpZW50ID0gMDsKLSAg
ICB0aGlzLnJlcXVlc3QgPSAwOwotICAgIHRoaXMudmFsdWUgPSAwOwotICAgIHRoaXMuaW5kZXgg
PSAwOwotICB9OwotICBVc2JDb250cm9sVHJhbnNmZXJQYXJhbXMucHJvdG90eXBlLmluaXRGaWVs
ZHNfID0gZnVuY3Rpb24oZmllbGRzKSB7Ci0gICAgZm9yKHZhciBmaWVsZCBpbiBmaWVsZHMpIHsK
LSAgICAgICAgaWYgKHRoaXMuaGFzT3duUHJvcGVydHkoZmllbGQpKQotICAgICAgICAgIHRoaXNb
ZmllbGRdID0gZmllbGRzW2ZpZWxkXTsKLSAgICB9Ci0gIH07Ci0KLSAgVXNiQ29udHJvbFRyYW5z
ZmVyUGFyYW1zLnZhbGlkYXRlID0gZnVuY3Rpb24obWVzc2FnZVZhbGlkYXRvciwgb2Zmc2V0KSB7
Ci0gICAgdmFyIGVycjsKLSAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0
SGVhZGVyKG9mZnNldCwgY29kZWMua1N0cnVjdEhlYWRlclNpemUpOwotICAgIGlmIChlcnIgIT09
IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKLSAgICAgICAgcmV0dXJuIGVycjsKLQot
ICAgIHZhciBrVmVyc2lvblNpemVzID0gWwotICAgICAge3ZlcnNpb246IDAsIG51bUJ5dGVzOiAy
NH0KLSAgICBdOwotICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RWZXJz
aW9uKG9mZnNldCwga1ZlcnNpb25TaXplcyk7Ci0gICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZh
bGlkYXRpb25FcnJvci5OT05FKQotICAgICAgICByZXR1cm4gZXJyOwotCi0KLSAgICAvLyB2YWxp
ZGF0ZSBVc2JDb250cm9sVHJhbnNmZXJQYXJhbXMudHlwZQotICAgIGVyciA9IG1lc3NhZ2VWYWxp
ZGF0b3IudmFsaWRhdGVFbnVtKG9mZnNldCArIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgMCwg
VXNiQ29udHJvbFRyYW5zZmVyVHlwZSk7Ci0gICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlk
YXRpb25FcnJvci5OT05FKQotICAgICAgICByZXR1cm4gZXJyOwotCi0KLSAgICAvLyB2YWxpZGF0
ZSBVc2JDb250cm9sVHJhbnNmZXJQYXJhbXMucmVjaXBpZW50Ci0gICAgZXJyID0gbWVzc2FnZVZh
bGlkYXRvci52YWxpZGF0ZUVudW0ob2Zmc2V0ICsgY29kZWMua1N0cnVjdEhlYWRlclNpemUgKyA0
LCBVc2JDb250cm9sVHJhbnNmZXJSZWNpcGllbnQpOwotICAgIGlmIChlcnIgIT09IHZhbGlkYXRv
ci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKLSAgICAgICAgcmV0dXJuIGVycjsKLQotCi0KLQotICAg
IHJldHVybiB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkU7Ci0gIH07Ci0KLSAgVXNiQ29u
dHJvbFRyYW5zZmVyUGFyYW1zLmVuY29kZWRTaXplID0gY29kZWMua1N0cnVjdEhlYWRlclNpemUg
KyAxNjsKLQotICBVc2JDb250cm9sVHJhbnNmZXJQYXJhbXMuZGVjb2RlID0gZnVuY3Rpb24oZGVj
b2RlcikgewotICAgIHZhciBwYWNrZWQ7Ci0gICAgdmFyIHZhbCA9IG5ldyBVc2JDb250cm9sVHJh
bnNmZXJQYXJhbXMoKTsKLSAgICB2YXIgbnVtYmVyT2ZCeXRlcyA9IGRlY29kZXIucmVhZFVpbnQz
MigpOwotICAgIHZhciB2ZXJzaW9uID0gZGVjb2Rlci5yZWFkVWludDMyKCk7Ci0gICAgdmFsLnR5
cGUgPSBkZWNvZGVyLmRlY29kZVN0cnVjdChjb2RlYy5JbnQzMik7Ci0gICAgdmFsLnJlY2lwaWVu
dCA9IGRlY29kZXIuZGVjb2RlU3RydWN0KGNvZGVjLkludDMyKTsKLSAgICB2YWwucmVxdWVzdCA9
IGRlY29kZXIuZGVjb2RlU3RydWN0KGNvZGVjLlVpbnQ4KTsKLSAgICBkZWNvZGVyLnNraXAoMSk7
Ci0gICAgdmFsLnZhbHVlID0gZGVjb2Rlci5kZWNvZGVTdHJ1Y3QoY29kZWMuVWludDE2KTsKLSAg
ICB2YWwuaW5kZXggPSBkZWNvZGVyLmRlY29kZVN0cnVjdChjb2RlYy5VaW50MTYpOwotICAgIGRl
Y29kZXIuc2tpcCgxKTsKLSAgICBkZWNvZGVyLnNraXAoMSk7Ci0gICAgcmV0dXJuIHZhbDsKLSAg
fTsKLQotICBVc2JDb250cm9sVHJhbnNmZXJQYXJhbXMuZW5jb2RlID0gZnVuY3Rpb24oZW5jb2Rl
ciwgdmFsKSB7Ci0gICAgdmFyIHBhY2tlZDsKLSAgICBlbmNvZGVyLndyaXRlVWludDMyKFVzYkNv
bnRyb2xUcmFuc2ZlclBhcmFtcy5lbmNvZGVkU2l6ZSk7Ci0gICAgZW5jb2Rlci53cml0ZVVpbnQz
MigwKTsKLSAgICBlbmNvZGVyLmVuY29kZVN0cnVjdChjb2RlYy5JbnQzMiwgdmFsLnR5cGUpOwot
ICAgIGVuY29kZXIuZW5jb2RlU3RydWN0KGNvZGVjLkludDMyLCB2YWwucmVjaXBpZW50KTsKLSAg
ICBlbmNvZGVyLmVuY29kZVN0cnVjdChjb2RlYy5VaW50OCwgdmFsLnJlcXVlc3QpOwotICAgIGVu
Y29kZXIuc2tpcCgxKTsKLSAgICBlbmNvZGVyLmVuY29kZVN0cnVjdChjb2RlYy5VaW50MTYsIHZh
bC52YWx1ZSk7Ci0gICAgZW5jb2Rlci5lbmNvZGVTdHJ1Y3QoY29kZWMuVWludDE2LCB2YWwuaW5k
ZXgpOwotICAgIGVuY29kZXIuc2tpcCgxKTsKLSAgICBlbmNvZGVyLnNraXAoMSk7Ci0gIH07Ci0g
IGZ1bmN0aW9uIFVzYklzb2Nocm9ub3VzUGFja2V0KHZhbHVlcykgewotICAgIHRoaXMuaW5pdERl
ZmF1bHRzXygpOwotICAgIHRoaXMuaW5pdEZpZWxkc18odmFsdWVzKTsKLSAgfQotCi0KLSAgVXNi
SXNvY2hyb25vdXNQYWNrZXQucHJvdG90eXBlLmluaXREZWZhdWx0c18gPSBmdW5jdGlvbigpIHsK
LSAgICB0aGlzLmxlbmd0aCA9IDA7Ci0gICAgdGhpcy50cmFuc2ZlcnJlZExlbmd0aCA9IDA7Ci0g
ICAgdGhpcy5zdGF0dXMgPSAwOwotICB9OwotICBVc2JJc29jaHJvbm91c1BhY2tldC5wcm90b3R5
cGUuaW5pdEZpZWxkc18gPSBmdW5jdGlvbihmaWVsZHMpIHsKLSAgICBmb3IodmFyIGZpZWxkIGlu
IGZpZWxkcykgewotICAgICAgICBpZiAodGhpcy5oYXNPd25Qcm9wZXJ0eShmaWVsZCkpCi0gICAg
ICAgICAgdGhpc1tmaWVsZF0gPSBmaWVsZHNbZmllbGRdOwotICAgIH0KLSAgfTsKLQotICBVc2JJ
c29jaHJvbm91c1BhY2tldC52YWxpZGF0ZSA9IGZ1bmN0aW9uKG1lc3NhZ2VWYWxpZGF0b3IsIG9m
ZnNldCkgewotICAgIHZhciBlcnI7Ci0gICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0
ZVN0cnVjdEhlYWRlcihvZmZzZXQsIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplKTsKLSAgICBpZiAo
ZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCi0gICAgICAgIHJldHVybiBl
cnI7Ci0KLSAgICB2YXIga1ZlcnNpb25TaXplcyA9IFsKLSAgICAgIHt2ZXJzaW9uOiAwLCBudW1C
eXRlczogMjR9Ci0gICAgXTsKLSAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3Ry
dWN0VmVyc2lvbihvZmZzZXQsIGtWZXJzaW9uU2l6ZXMpOwotICAgIGlmIChlcnIgIT09IHZhbGlk
YXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKLSAgICAgICAgcmV0dXJuIGVycjsKLQotCi0KLQot
ICAgIC8vIHZhbGlkYXRlIFVzYklzb2Nocm9ub3VzUGFja2V0LnN0YXR1cwotICAgIGVyciA9IG1l
c3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVFbnVtKG9mZnNldCArIGNvZGVjLmtTdHJ1Y3RIZWFkZXJT
aXplICsgOCwgVXNiVHJhbnNmZXJTdGF0dXMpOwotICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52
YWxpZGF0aW9uRXJyb3IuTk9ORSkKLSAgICAgICAgcmV0dXJuIGVycjsKLQotICAgIHJldHVybiB2
YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkU7Ci0gIH07Ci0KLSAgVXNiSXNvY2hyb25vdXNQ
YWNrZXQuZW5jb2RlZFNpemUgPSBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDE2OwotCi0gIFVz
Yklzb2Nocm9ub3VzUGFja2V0LmRlY29kZSA9IGZ1bmN0aW9uKGRlY29kZXIpIHsKLSAgICB2YXIg
cGFja2VkOwotICAgIHZhciB2YWwgPSBuZXcgVXNiSXNvY2hyb25vdXNQYWNrZXQoKTsKLSAgICB2
YXIgbnVtYmVyT2ZCeXRlcyA9IGRlY29kZXIucmVhZFVpbnQzMigpOwotICAgIHZhciB2ZXJzaW9u
ID0gZGVjb2Rlci5yZWFkVWludDMyKCk7Ci0gICAgdmFsLmxlbmd0aCA9IGRlY29kZXIuZGVjb2Rl
U3RydWN0KGNvZGVjLlVpbnQzMik7Ci0gICAgdmFsLnRyYW5zZmVycmVkTGVuZ3RoID0gZGVjb2Rl
ci5kZWNvZGVTdHJ1Y3QoY29kZWMuVWludDMyKTsKLSAgICB2YWwuc3RhdHVzID0gZGVjb2Rlci5k
ZWNvZGVTdHJ1Y3QoY29kZWMuSW50MzIpOwotICAgIGRlY29kZXIuc2tpcCgxKTsKLSAgICBkZWNv
ZGVyLnNraXAoMSk7Ci0gICAgZGVjb2Rlci5za2lwKDEpOwotICAgIGRlY29kZXIuc2tpcCgxKTsK
LSAgICByZXR1cm4gdmFsOwotICB9OwotCi0gIFVzYklzb2Nocm9ub3VzUGFja2V0LmVuY29kZSA9
IGZ1bmN0aW9uKGVuY29kZXIsIHZhbCkgewotICAgIHZhciBwYWNrZWQ7Ci0gICAgZW5jb2Rlci53
cml0ZVVpbnQzMihVc2JJc29jaHJvbm91c1BhY2tldC5lbmNvZGVkU2l6ZSk7Ci0gICAgZW5jb2Rl
ci53cml0ZVVpbnQzMigwKTsKLSAgICBlbmNvZGVyLmVuY29kZVN0cnVjdChjb2RlYy5VaW50MzIs
IHZhbC5sZW5ndGgpOwotICAgIGVuY29kZXIuZW5jb2RlU3RydWN0KGNvZGVjLlVpbnQzMiwgdmFs
LnRyYW5zZmVycmVkTGVuZ3RoKTsKLSAgICBlbmNvZGVyLmVuY29kZVN0cnVjdChjb2RlYy5JbnQz
MiwgdmFsLnN0YXR1cyk7Ci0gICAgZW5jb2Rlci5za2lwKDEpOwotICAgIGVuY29kZXIuc2tpcCgx
KTsKLSAgICBlbmNvZGVyLnNraXAoMSk7Ci0gICAgZW5jb2Rlci5za2lwKDEpOwotICB9OwotICBm
dW5jdGlvbiBVc2JEZXZpY2VfT3Blbl9QYXJhbXModmFsdWVzKSB7Ci0gICAgdGhpcy5pbml0RGVm
YXVsdHNfKCk7Ci0gICAgdGhpcy5pbml0RmllbGRzXyh2YWx1ZXMpOwotICB9Ci0KLQotICBVc2JE
ZXZpY2VfT3Blbl9QYXJhbXMucHJvdG90eXBlLmluaXREZWZhdWx0c18gPSBmdW5jdGlvbigpIHsK
LSAgfTsKLSAgVXNiRGV2aWNlX09wZW5fUGFyYW1zLnByb3RvdHlwZS5pbml0RmllbGRzXyA9IGZ1
bmN0aW9uKGZpZWxkcykgewotICAgIGZvcih2YXIgZmllbGQgaW4gZmllbGRzKSB7Ci0gICAgICAg
IGlmICh0aGlzLmhhc093blByb3BlcnR5KGZpZWxkKSkKLSAgICAgICAgICB0aGlzW2ZpZWxkXSA9
IGZpZWxkc1tmaWVsZF07Ci0gICAgfQotICB9OwotCi0gIFVzYkRldmljZV9PcGVuX1BhcmFtcy52
YWxpZGF0ZSA9IGZ1bmN0aW9uKG1lc3NhZ2VWYWxpZGF0b3IsIG9mZnNldCkgewotICAgIHZhciBl
cnI7Ci0gICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdEhlYWRlcihvZmZz
ZXQsIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplKTsKLSAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3Iu
dmFsaWRhdGlvbkVycm9yLk5PTkUpCi0gICAgICAgIHJldHVybiBlcnI7Ci0KLSAgICB2YXIga1Zl
cnNpb25TaXplcyA9IFsKLSAgICAgIHt2ZXJzaW9uOiAwLCBudW1CeXRlczogOH0KLSAgICBdOwot
ICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RWZXJzaW9uKG9mZnNldCwg
a1ZlcnNpb25TaXplcyk7Ci0gICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJv
ci5OT05FKQotICAgICAgICByZXR1cm4gZXJyOwotCi0gICAgcmV0dXJuIHZhbGlkYXRvci52YWxp
ZGF0aW9uRXJyb3IuTk9ORTsKLSAgfTsKLQotICBVc2JEZXZpY2VfT3Blbl9QYXJhbXMuZW5jb2Rl
ZFNpemUgPSBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDA7Ci0KLSAgVXNiRGV2aWNlX09wZW5f
UGFyYW1zLmRlY29kZSA9IGZ1bmN0aW9uKGRlY29kZXIpIHsKLSAgICB2YXIgcGFja2VkOwotICAg
IHZhciB2YWwgPSBuZXcgVXNiRGV2aWNlX09wZW5fUGFyYW1zKCk7Ci0gICAgdmFyIG51bWJlck9m
Qnl0ZXMgPSBkZWNvZGVyLnJlYWRVaW50MzIoKTsKLSAgICB2YXIgdmVyc2lvbiA9IGRlY29kZXIu
cmVhZFVpbnQzMigpOwotICAgIHJldHVybiB2YWw7Ci0gIH07Ci0KLSAgVXNiRGV2aWNlX09wZW5f
UGFyYW1zLmVuY29kZSA9IGZ1bmN0aW9uKGVuY29kZXIsIHZhbCkgewotICAgIHZhciBwYWNrZWQ7
Ci0gICAgZW5jb2Rlci53cml0ZVVpbnQzMihVc2JEZXZpY2VfT3Blbl9QYXJhbXMuZW5jb2RlZFNp
emUpOwotICAgIGVuY29kZXIud3JpdGVVaW50MzIoMCk7Ci0gIH07Ci0gIGZ1bmN0aW9uIFVzYkRl
dmljZV9PcGVuX1Jlc3BvbnNlUGFyYW1zKHZhbHVlcykgewotICAgIHRoaXMuaW5pdERlZmF1bHRz
XygpOwotICAgIHRoaXMuaW5pdEZpZWxkc18odmFsdWVzKTsKLSAgfQotCi0KLSAgVXNiRGV2aWNl
X09wZW5fUmVzcG9uc2VQYXJhbXMucHJvdG90eXBlLmluaXREZWZhdWx0c18gPSBmdW5jdGlvbigp
IHsKLSAgICB0aGlzLmVycm9yID0gMDsKLSAgfTsKLSAgVXNiRGV2aWNlX09wZW5fUmVzcG9uc2VQ
YXJhbXMucHJvdG90eXBlLmluaXRGaWVsZHNfID0gZnVuY3Rpb24oZmllbGRzKSB7Ci0gICAgZm9y
KHZhciBmaWVsZCBpbiBmaWVsZHMpIHsKLSAgICAgICAgaWYgKHRoaXMuaGFzT3duUHJvcGVydHko
ZmllbGQpKQotICAgICAgICAgIHRoaXNbZmllbGRdID0gZmllbGRzW2ZpZWxkXTsKLSAgICB9Ci0g
IH07Ci0KLSAgVXNiRGV2aWNlX09wZW5fUmVzcG9uc2VQYXJhbXMudmFsaWRhdGUgPSBmdW5jdGlv
bihtZXNzYWdlVmFsaWRhdG9yLCBvZmZzZXQpIHsKLSAgICB2YXIgZXJyOwotICAgIGVyciA9IG1l
c3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RIZWFkZXIob2Zmc2V0LCBjb2RlYy5rU3RydWN0
SGVhZGVyU2l6ZSk7Ci0gICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5O
T05FKQotICAgICAgICByZXR1cm4gZXJyOwotCi0gICAgdmFyIGtWZXJzaW9uU2l6ZXMgPSBbCi0g
ICAgICB7dmVyc2lvbjogMCwgbnVtQnl0ZXM6IDE2fQotICAgIF07Ci0gICAgZXJyID0gbWVzc2Fn
ZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdFZlcnNpb24ob2Zmc2V0LCBrVmVyc2lvblNpemVzKTsK
LSAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCi0gICAgICAg
IHJldHVybiBlcnI7Ci0KLQotICAgIC8vIHZhbGlkYXRlIFVzYkRldmljZV9PcGVuX1Jlc3BvbnNl
UGFyYW1zLmVycm9yCi0gICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZUVudW0ob2Zm
c2V0ICsgY29kZWMua1N0cnVjdEhlYWRlclNpemUgKyAwLCBVc2JPcGVuRGV2aWNlRXJyb3IpOwot
ICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKLSAgICAgICAg
cmV0dXJuIGVycjsKLQotICAgIHJldHVybiB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkU7
Ci0gIH07Ci0KLSAgVXNiRGV2aWNlX09wZW5fUmVzcG9uc2VQYXJhbXMuZW5jb2RlZFNpemUgPSBj
b2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDg7Ci0KLSAgVXNiRGV2aWNlX09wZW5fUmVzcG9uc2VQ
YXJhbXMuZGVjb2RlID0gZnVuY3Rpb24oZGVjb2RlcikgewotICAgIHZhciBwYWNrZWQ7Ci0gICAg
dmFyIHZhbCA9IG5ldyBVc2JEZXZpY2VfT3Blbl9SZXNwb25zZVBhcmFtcygpOwotICAgIHZhciBu
dW1iZXJPZkJ5dGVzID0gZGVjb2Rlci5yZWFkVWludDMyKCk7Ci0gICAgdmFyIHZlcnNpb24gPSBk
ZWNvZGVyLnJlYWRVaW50MzIoKTsKLSAgICB2YWwuZXJyb3IgPSBkZWNvZGVyLmRlY29kZVN0cnVj
dChjb2RlYy5JbnQzMik7Ci0gICAgZGVjb2Rlci5za2lwKDEpOwotICAgIGRlY29kZXIuc2tpcCgx
KTsKLSAgICBkZWNvZGVyLnNraXAoMSk7Ci0gICAgZGVjb2Rlci5za2lwKDEpOwotICAgIHJldHVy
biB2YWw7Ci0gIH07Ci0KLSAgVXNiRGV2aWNlX09wZW5fUmVzcG9uc2VQYXJhbXMuZW5jb2RlID0g
ZnVuY3Rpb24oZW5jb2RlciwgdmFsKSB7Ci0gICAgdmFyIHBhY2tlZDsKLSAgICBlbmNvZGVyLndy
aXRlVWludDMyKFVzYkRldmljZV9PcGVuX1Jlc3BvbnNlUGFyYW1zLmVuY29kZWRTaXplKTsKLSAg
ICBlbmNvZGVyLndyaXRlVWludDMyKDApOwotICAgIGVuY29kZXIuZW5jb2RlU3RydWN0KGNvZGVj
LkludDMyLCB2YWwuZXJyb3IpOwotICAgIGVuY29kZXIuc2tpcCgxKTsKLSAgICBlbmNvZGVyLnNr
aXAoMSk7Ci0gICAgZW5jb2Rlci5za2lwKDEpOwotICAgIGVuY29kZXIuc2tpcCgxKTsKLSAgfTsK
LSAgZnVuY3Rpb24gVXNiRGV2aWNlX0Nsb3NlX1BhcmFtcyh2YWx1ZXMpIHsKLSAgICB0aGlzLmlu
aXREZWZhdWx0c18oKTsKLSAgICB0aGlzLmluaXRGaWVsZHNfKHZhbHVlcyk7Ci0gIH0KLQotCi0g
IFVzYkRldmljZV9DbG9zZV9QYXJhbXMucHJvdG90eXBlLmluaXREZWZhdWx0c18gPSBmdW5jdGlv
bigpIHsKLSAgfTsKLSAgVXNiRGV2aWNlX0Nsb3NlX1BhcmFtcy5wcm90b3R5cGUuaW5pdEZpZWxk
c18gPSBmdW5jdGlvbihmaWVsZHMpIHsKLSAgICBmb3IodmFyIGZpZWxkIGluIGZpZWxkcykgewot
ICAgICAgICBpZiAodGhpcy5oYXNPd25Qcm9wZXJ0eShmaWVsZCkpCi0gICAgICAgICAgdGhpc1tm
aWVsZF0gPSBmaWVsZHNbZmllbGRdOwotICAgIH0KLSAgfTsKLQotICBVc2JEZXZpY2VfQ2xvc2Vf
UGFyYW1zLnZhbGlkYXRlID0gZnVuY3Rpb24obWVzc2FnZVZhbGlkYXRvciwgb2Zmc2V0KSB7Ci0g
ICAgdmFyIGVycjsKLSAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0SGVh
ZGVyKG9mZnNldCwgY29kZWMua1N0cnVjdEhlYWRlclNpemUpOwotICAgIGlmIChlcnIgIT09IHZh
bGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKLSAgICAgICAgcmV0dXJuIGVycjsKLQotICAg
IHZhciBrVmVyc2lvblNpemVzID0gWwotICAgICAge3ZlcnNpb246IDAsIG51bUJ5dGVzOiA4fQot
ICAgIF07Ci0gICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdFZlcnNpb24o
b2Zmc2V0LCBrVmVyc2lvblNpemVzKTsKLSAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRh
dGlvbkVycm9yLk5PTkUpCi0gICAgICAgIHJldHVybiBlcnI7Ci0KLSAgICByZXR1cm4gdmFsaWRh
dG9yLnZhbGlkYXRpb25FcnJvci5OT05FOwotICB9OwotCi0gIFVzYkRldmljZV9DbG9zZV9QYXJh
bXMuZW5jb2RlZFNpemUgPSBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDA7Ci0KLSAgVXNiRGV2
aWNlX0Nsb3NlX1BhcmFtcy5kZWNvZGUgPSBmdW5jdGlvbihkZWNvZGVyKSB7Ci0gICAgdmFyIHBh
Y2tlZDsKLSAgICB2YXIgdmFsID0gbmV3IFVzYkRldmljZV9DbG9zZV9QYXJhbXMoKTsKLSAgICB2
YXIgbnVtYmVyT2ZCeXRlcyA9IGRlY29kZXIucmVhZFVpbnQzMigpOwotICAgIHZhciB2ZXJzaW9u
ID0gZGVjb2Rlci5yZWFkVWludDMyKCk7Ci0gICAgcmV0dXJuIHZhbDsKLSAgfTsKLQotICBVc2JE
ZXZpY2VfQ2xvc2VfUGFyYW1zLmVuY29kZSA9IGZ1bmN0aW9uKGVuY29kZXIsIHZhbCkgewotICAg
IHZhciBwYWNrZWQ7Ci0gICAgZW5jb2Rlci53cml0ZVVpbnQzMihVc2JEZXZpY2VfQ2xvc2VfUGFy
YW1zLmVuY29kZWRTaXplKTsKLSAgICBlbmNvZGVyLndyaXRlVWludDMyKDApOwotICB9OwotICBm
dW5jdGlvbiBVc2JEZXZpY2VfQ2xvc2VfUmVzcG9uc2VQYXJhbXModmFsdWVzKSB7Ci0gICAgdGhp
cy5pbml0RGVmYXVsdHNfKCk7Ci0gICAgdGhpcy5pbml0RmllbGRzXyh2YWx1ZXMpOwotICB9Ci0K
LQotICBVc2JEZXZpY2VfQ2xvc2VfUmVzcG9uc2VQYXJhbXMucHJvdG90eXBlLmluaXREZWZhdWx0
c18gPSBmdW5jdGlvbigpIHsKLSAgfTsKLSAgVXNiRGV2aWNlX0Nsb3NlX1Jlc3BvbnNlUGFyYW1z
LnByb3RvdHlwZS5pbml0RmllbGRzXyA9IGZ1bmN0aW9uKGZpZWxkcykgewotICAgIGZvcih2YXIg
ZmllbGQgaW4gZmllbGRzKSB7Ci0gICAgICAgIGlmICh0aGlzLmhhc093blByb3BlcnR5KGZpZWxk
KSkKLSAgICAgICAgICB0aGlzW2ZpZWxkXSA9IGZpZWxkc1tmaWVsZF07Ci0gICAgfQotICB9Owot
Ci0gIFVzYkRldmljZV9DbG9zZV9SZXNwb25zZVBhcmFtcy52YWxpZGF0ZSA9IGZ1bmN0aW9uKG1l
c3NhZ2VWYWxpZGF0b3IsIG9mZnNldCkgewotICAgIHZhciBlcnI7Ci0gICAgZXJyID0gbWVzc2Fn
ZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdEhlYWRlcihvZmZzZXQsIGNvZGVjLmtTdHJ1Y3RIZWFk
ZXJTaXplKTsKLSAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUp
Ci0gICAgICAgIHJldHVybiBlcnI7Ci0KLSAgICB2YXIga1ZlcnNpb25TaXplcyA9IFsKLSAgICAg
IHt2ZXJzaW9uOiAwLCBudW1CeXRlczogOH0KLSAgICBdOwotICAgIGVyciA9IG1lc3NhZ2VWYWxp
ZGF0b3IudmFsaWRhdGVTdHJ1Y3RWZXJzaW9uKG9mZnNldCwga1ZlcnNpb25TaXplcyk7Ci0gICAg
aWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQotICAgICAgICByZXR1
cm4gZXJyOwotCi0gICAgcmV0dXJuIHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORTsKLSAg
fTsKLQotICBVc2JEZXZpY2VfQ2xvc2VfUmVzcG9uc2VQYXJhbXMuZW5jb2RlZFNpemUgPSBjb2Rl
Yy5rU3RydWN0SGVhZGVyU2l6ZSArIDA7Ci0KLSAgVXNiRGV2aWNlX0Nsb3NlX1Jlc3BvbnNlUGFy
YW1zLmRlY29kZSA9IGZ1bmN0aW9uKGRlY29kZXIpIHsKLSAgICB2YXIgcGFja2VkOwotICAgIHZh
ciB2YWwgPSBuZXcgVXNiRGV2aWNlX0Nsb3NlX1Jlc3BvbnNlUGFyYW1zKCk7Ci0gICAgdmFyIG51
bWJlck9mQnl0ZXMgPSBkZWNvZGVyLnJlYWRVaW50MzIoKTsKLSAgICB2YXIgdmVyc2lvbiA9IGRl
Y29kZXIucmVhZFVpbnQzMigpOwotICAgIHJldHVybiB2YWw7Ci0gIH07Ci0KLSAgVXNiRGV2aWNl
X0Nsb3NlX1Jlc3BvbnNlUGFyYW1zLmVuY29kZSA9IGZ1bmN0aW9uKGVuY29kZXIsIHZhbCkgewot
ICAgIHZhciBwYWNrZWQ7Ci0gICAgZW5jb2Rlci53cml0ZVVpbnQzMihVc2JEZXZpY2VfQ2xvc2Vf
UmVzcG9uc2VQYXJhbXMuZW5jb2RlZFNpemUpOwotICAgIGVuY29kZXIud3JpdGVVaW50MzIoMCk7
Ci0gIH07Ci0gIGZ1bmN0aW9uIFVzYkRldmljZV9TZXRDb25maWd1cmF0aW9uX1BhcmFtcyh2YWx1
ZXMpIHsKLSAgICB0aGlzLmluaXREZWZhdWx0c18oKTsKLSAgICB0aGlzLmluaXRGaWVsZHNfKHZh
bHVlcyk7Ci0gIH0KLQotCi0gIFVzYkRldmljZV9TZXRDb25maWd1cmF0aW9uX1BhcmFtcy5wcm90
b3R5cGUuaW5pdERlZmF1bHRzXyA9IGZ1bmN0aW9uKCkgewotICAgIHRoaXMudmFsdWUgPSAwOwot
ICB9OwotICBVc2JEZXZpY2VfU2V0Q29uZmlndXJhdGlvbl9QYXJhbXMucHJvdG90eXBlLmluaXRG
aWVsZHNfID0gZnVuY3Rpb24oZmllbGRzKSB7Ci0gICAgZm9yKHZhciBmaWVsZCBpbiBmaWVsZHMp
IHsKLSAgICAgICAgaWYgKHRoaXMuaGFzT3duUHJvcGVydHkoZmllbGQpKQotICAgICAgICAgIHRo
aXNbZmllbGRdID0gZmllbGRzW2ZpZWxkXTsKLSAgICB9Ci0gIH07Ci0KLSAgVXNiRGV2aWNlX1Nl
dENvbmZpZ3VyYXRpb25fUGFyYW1zLnZhbGlkYXRlID0gZnVuY3Rpb24obWVzc2FnZVZhbGlkYXRv
ciwgb2Zmc2V0KSB7Ci0gICAgdmFyIGVycjsKLSAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZh
bGlkYXRlU3RydWN0SGVhZGVyKG9mZnNldCwgY29kZWMua1N0cnVjdEhlYWRlclNpemUpOwotICAg
IGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKLSAgICAgICAgcmV0
dXJuIGVycjsKLQotICAgIHZhciBrVmVyc2lvblNpemVzID0gWwotICAgICAge3ZlcnNpb246IDAs
IG51bUJ5dGVzOiAxNn0KLSAgICBdOwotICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRh
dGVTdHJ1Y3RWZXJzaW9uKG9mZnNldCwga1ZlcnNpb25TaXplcyk7Ci0gICAgaWYgKGVyciAhPT0g
dmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQotICAgICAgICByZXR1cm4gZXJyOwotCi0K
LSAgICByZXR1cm4gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FOwotICB9OwotCi0gIFVz
YkRldmljZV9TZXRDb25maWd1cmF0aW9uX1BhcmFtcy5lbmNvZGVkU2l6ZSA9IGNvZGVjLmtTdHJ1
Y3RIZWFkZXJTaXplICsgODsKLQotICBVc2JEZXZpY2VfU2V0Q29uZmlndXJhdGlvbl9QYXJhbXMu
ZGVjb2RlID0gZnVuY3Rpb24oZGVjb2RlcikgewotICAgIHZhciBwYWNrZWQ7Ci0gICAgdmFyIHZh
bCA9IG5ldyBVc2JEZXZpY2VfU2V0Q29uZmlndXJhdGlvbl9QYXJhbXMoKTsKLSAgICB2YXIgbnVt
YmVyT2ZCeXRlcyA9IGRlY29kZXIucmVhZFVpbnQzMigpOwotICAgIHZhciB2ZXJzaW9uID0gZGVj
b2Rlci5yZWFkVWludDMyKCk7Ci0gICAgdmFsLnZhbHVlID0gZGVjb2Rlci5kZWNvZGVTdHJ1Y3Qo
Y29kZWMuVWludDgpOwotICAgIGRlY29kZXIuc2tpcCgxKTsKLSAgICBkZWNvZGVyLnNraXAoMSk7
Ci0gICAgZGVjb2Rlci5za2lwKDEpOwotICAgIGRlY29kZXIuc2tpcCgxKTsKLSAgICBkZWNvZGVy
LnNraXAoMSk7Ci0gICAgZGVjb2Rlci5za2lwKDEpOwotICAgIGRlY29kZXIuc2tpcCgxKTsKLSAg
ICByZXR1cm4gdmFsOwotICB9OwotCi0gIFVzYkRldmljZV9TZXRDb25maWd1cmF0aW9uX1BhcmFt
cy5lbmNvZGUgPSBmdW5jdGlvbihlbmNvZGVyLCB2YWwpIHsKLSAgICB2YXIgcGFja2VkOwotICAg
IGVuY29kZXIud3JpdGVVaW50MzIoVXNiRGV2aWNlX1NldENvbmZpZ3VyYXRpb25fUGFyYW1zLmVu
Y29kZWRTaXplKTsKLSAgICBlbmNvZGVyLndyaXRlVWludDMyKDApOwotICAgIGVuY29kZXIuZW5j
b2RlU3RydWN0KGNvZGVjLlVpbnQ4LCB2YWwudmFsdWUpOwotICAgIGVuY29kZXIuc2tpcCgxKTsK
LSAgICBlbmNvZGVyLnNraXAoMSk7Ci0gICAgZW5jb2Rlci5za2lwKDEpOwotICAgIGVuY29kZXIu
c2tpcCgxKTsKLSAgICBlbmNvZGVyLnNraXAoMSk7Ci0gICAgZW5jb2Rlci5za2lwKDEpOwotICAg
IGVuY29kZXIuc2tpcCgxKTsKLSAgfTsKLSAgZnVuY3Rpb24gVXNiRGV2aWNlX1NldENvbmZpZ3Vy
YXRpb25fUmVzcG9uc2VQYXJhbXModmFsdWVzKSB7Ci0gICAgdGhpcy5pbml0RGVmYXVsdHNfKCk7
Ci0gICAgdGhpcy5pbml0RmllbGRzXyh2YWx1ZXMpOwotICB9Ci0KLQotICBVc2JEZXZpY2VfU2V0
Q29uZmlndXJhdGlvbl9SZXNwb25zZVBhcmFtcy5wcm90b3R5cGUuaW5pdERlZmF1bHRzXyA9IGZ1
bmN0aW9uKCkgewotICAgIHRoaXMuc3VjY2VzcyA9IGZhbHNlOwotICB9OwotICBVc2JEZXZpY2Vf
U2V0Q29uZmlndXJhdGlvbl9SZXNwb25zZVBhcmFtcy5wcm90b3R5cGUuaW5pdEZpZWxkc18gPSBm
dW5jdGlvbihmaWVsZHMpIHsKLSAgICBmb3IodmFyIGZpZWxkIGluIGZpZWxkcykgewotICAgICAg
ICBpZiAodGhpcy5oYXNPd25Qcm9wZXJ0eShmaWVsZCkpCi0gICAgICAgICAgdGhpc1tmaWVsZF0g
PSBmaWVsZHNbZmllbGRdOwotICAgIH0KLSAgfTsKLQotICBVc2JEZXZpY2VfU2V0Q29uZmlndXJh
dGlvbl9SZXNwb25zZVBhcmFtcy52YWxpZGF0ZSA9IGZ1bmN0aW9uKG1lc3NhZ2VWYWxpZGF0b3Is
IG9mZnNldCkgewotICAgIHZhciBlcnI7Ci0gICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxp
ZGF0ZVN0cnVjdEhlYWRlcihvZmZzZXQsIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplKTsKLSAgICBp
ZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCi0gICAgICAgIHJldHVy
biBlcnI7Ci0KLSAgICB2YXIga1ZlcnNpb25TaXplcyA9IFsKLSAgICAgIHt2ZXJzaW9uOiAwLCBu
dW1CeXRlczogMTZ9Ci0gICAgXTsKLSAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRl
U3RydWN0VmVyc2lvbihvZmZzZXQsIGtWZXJzaW9uU2l6ZXMpOwotICAgIGlmIChlcnIgIT09IHZh
bGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKLSAgICAgICAgcmV0dXJuIGVycjsKLQotCi0g
ICAgcmV0dXJuIHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORTsKLSAgfTsKLQotICBVc2JE
ZXZpY2VfU2V0Q29uZmlndXJhdGlvbl9SZXNwb25zZVBhcmFtcy5lbmNvZGVkU2l6ZSA9IGNvZGVj
LmtTdHJ1Y3RIZWFkZXJTaXplICsgODsKLQotICBVc2JEZXZpY2VfU2V0Q29uZmlndXJhdGlvbl9S
ZXNwb25zZVBhcmFtcy5kZWNvZGUgPSBmdW5jdGlvbihkZWNvZGVyKSB7Ci0gICAgdmFyIHBhY2tl
ZDsKLSAgICB2YXIgdmFsID0gbmV3IFVzYkRldmljZV9TZXRDb25maWd1cmF0aW9uX1Jlc3BvbnNl
UGFyYW1zKCk7Ci0gICAgdmFyIG51bWJlck9mQnl0ZXMgPSBkZWNvZGVyLnJlYWRVaW50MzIoKTsK
LSAgICB2YXIgdmVyc2lvbiA9IGRlY29kZXIucmVhZFVpbnQzMigpOwotICAgIHBhY2tlZCA9IGRl
Y29kZXIucmVhZFVpbnQ4KCk7Ci0gICAgdmFsLnN1Y2Nlc3MgPSAocGFja2VkID4+IDApICYgMSA/
IHRydWUgOiBmYWxzZTsKLSAgICBkZWNvZGVyLnNraXAoMSk7Ci0gICAgZGVjb2Rlci5za2lwKDEp
OwotICAgIGRlY29kZXIuc2tpcCgxKTsKLSAgICBkZWNvZGVyLnNraXAoMSk7Ci0gICAgZGVjb2Rl
ci5za2lwKDEpOwotICAgIGRlY29kZXIuc2tpcCgxKTsKLSAgICBkZWNvZGVyLnNraXAoMSk7Ci0g
ICAgcmV0dXJuIHZhbDsKLSAgfTsKLQotICBVc2JEZXZpY2VfU2V0Q29uZmlndXJhdGlvbl9SZXNw
b25zZVBhcmFtcy5lbmNvZGUgPSBmdW5jdGlvbihlbmNvZGVyLCB2YWwpIHsKLSAgICB2YXIgcGFj
a2VkOwotICAgIGVuY29kZXIud3JpdGVVaW50MzIoVXNiRGV2aWNlX1NldENvbmZpZ3VyYXRpb25f
UmVzcG9uc2VQYXJhbXMuZW5jb2RlZFNpemUpOwotICAgIGVuY29kZXIud3JpdGVVaW50MzIoMCk7
Ci0gICAgcGFja2VkID0gMDsKLSAgICBwYWNrZWQgfD0gKHZhbC5zdWNjZXNzICYgMSkgPDwgMAot
ICAgIGVuY29kZXIud3JpdGVVaW50OChwYWNrZWQpOwotICAgIGVuY29kZXIuc2tpcCgxKTsKLSAg
ICBlbmNvZGVyLnNraXAoMSk7Ci0gICAgZW5jb2Rlci5za2lwKDEpOwotICAgIGVuY29kZXIuc2tp
cCgxKTsKLSAgICBlbmNvZGVyLnNraXAoMSk7Ci0gICAgZW5jb2Rlci5za2lwKDEpOwotICAgIGVu
Y29kZXIuc2tpcCgxKTsKLSAgfTsKLSAgZnVuY3Rpb24gVXNiRGV2aWNlX0NsYWltSW50ZXJmYWNl
X1BhcmFtcyh2YWx1ZXMpIHsKLSAgICB0aGlzLmluaXREZWZhdWx0c18oKTsKLSAgICB0aGlzLmlu
aXRGaWVsZHNfKHZhbHVlcyk7Ci0gIH0KLQotCi0gIFVzYkRldmljZV9DbGFpbUludGVyZmFjZV9Q
YXJhbXMucHJvdG90eXBlLmluaXREZWZhdWx0c18gPSBmdW5jdGlvbigpIHsKLSAgICB0aGlzLmlu
dGVyZmFjZU51bWJlciA9IDA7Ci0gIH07Ci0gIFVzYkRldmljZV9DbGFpbUludGVyZmFjZV9QYXJh
bXMucHJvdG90eXBlLmluaXRGaWVsZHNfID0gZnVuY3Rpb24oZmllbGRzKSB7Ci0gICAgZm9yKHZh
ciBmaWVsZCBpbiBmaWVsZHMpIHsKLSAgICAgICAgaWYgKHRoaXMuaGFzT3duUHJvcGVydHkoZmll
bGQpKQotICAgICAgICAgIHRoaXNbZmllbGRdID0gZmllbGRzW2ZpZWxkXTsKLSAgICB9Ci0gIH07
Ci0KLSAgVXNiRGV2aWNlX0NsYWltSW50ZXJmYWNlX1BhcmFtcy52YWxpZGF0ZSA9IGZ1bmN0aW9u
KG1lc3NhZ2VWYWxpZGF0b3IsIG9mZnNldCkgewotICAgIHZhciBlcnI7Ci0gICAgZXJyID0gbWVz
c2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdEhlYWRlcihvZmZzZXQsIGNvZGVjLmtTdHJ1Y3RI
ZWFkZXJTaXplKTsKLSAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5P
TkUpCi0gICAgICAgIHJldHVybiBlcnI7Ci0KLSAgICB2YXIga1ZlcnNpb25TaXplcyA9IFsKLSAg
ICAgIHt2ZXJzaW9uOiAwLCBudW1CeXRlczogMTZ9Ci0gICAgXTsKLSAgICBlcnIgPSBtZXNzYWdl
VmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0VmVyc2lvbihvZmZzZXQsIGtWZXJzaW9uU2l6ZXMpOwot
ICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKLSAgICAgICAg
cmV0dXJuIGVycjsKLQotCi0gICAgcmV0dXJuIHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9O
RTsKLSAgfTsKLQotICBVc2JEZXZpY2VfQ2xhaW1JbnRlcmZhY2VfUGFyYW1zLmVuY29kZWRTaXpl
ID0gY29kZWMua1N0cnVjdEhlYWRlclNpemUgKyA4OwotCi0gIFVzYkRldmljZV9DbGFpbUludGVy
ZmFjZV9QYXJhbXMuZGVjb2RlID0gZnVuY3Rpb24oZGVjb2RlcikgewotICAgIHZhciBwYWNrZWQ7
Ci0gICAgdmFyIHZhbCA9IG5ldyBVc2JEZXZpY2VfQ2xhaW1JbnRlcmZhY2VfUGFyYW1zKCk7Ci0g
ICAgdmFyIG51bWJlck9mQnl0ZXMgPSBkZWNvZGVyLnJlYWRVaW50MzIoKTsKLSAgICB2YXIgdmVy
c2lvbiA9IGRlY29kZXIucmVhZFVpbnQzMigpOwotICAgIHZhbC5pbnRlcmZhY2VOdW1iZXIgPSBk
ZWNvZGVyLmRlY29kZVN0cnVjdChjb2RlYy5VaW50OCk7Ci0gICAgZGVjb2Rlci5za2lwKDEpOwot
ICAgIGRlY29kZXIuc2tpcCgxKTsKLSAgICBkZWNvZGVyLnNraXAoMSk7Ci0gICAgZGVjb2Rlci5z
a2lwKDEpOwotICAgIGRlY29kZXIuc2tpcCgxKTsKLSAgICBkZWNvZGVyLnNraXAoMSk7Ci0gICAg
ZGVjb2Rlci5za2lwKDEpOwotICAgIHJldHVybiB2YWw7Ci0gIH07Ci0KLSAgVXNiRGV2aWNlX0Ns
YWltSW50ZXJmYWNlX1BhcmFtcy5lbmNvZGUgPSBmdW5jdGlvbihlbmNvZGVyLCB2YWwpIHsKLSAg
ICB2YXIgcGFja2VkOwotICAgIGVuY29kZXIud3JpdGVVaW50MzIoVXNiRGV2aWNlX0NsYWltSW50
ZXJmYWNlX1BhcmFtcy5lbmNvZGVkU2l6ZSk7Ci0gICAgZW5jb2Rlci53cml0ZVVpbnQzMigwKTsK
LSAgICBlbmNvZGVyLmVuY29kZVN0cnVjdChjb2RlYy5VaW50OCwgdmFsLmludGVyZmFjZU51bWJl
cik7Ci0gICAgZW5jb2Rlci5za2lwKDEpOwotICAgIGVuY29kZXIuc2tpcCgxKTsKLSAgICBlbmNv
ZGVyLnNraXAoMSk7Ci0gICAgZW5jb2Rlci5za2lwKDEpOwotICAgIGVuY29kZXIuc2tpcCgxKTsK
LSAgICBlbmNvZGVyLnNraXAoMSk7Ci0gICAgZW5jb2Rlci5za2lwKDEpOwotICB9OwotICBmdW5j
dGlvbiBVc2JEZXZpY2VfQ2xhaW1JbnRlcmZhY2VfUmVzcG9uc2VQYXJhbXModmFsdWVzKSB7Ci0g
ICAgdGhpcy5pbml0RGVmYXVsdHNfKCk7Ci0gICAgdGhpcy5pbml0RmllbGRzXyh2YWx1ZXMpOwot
ICB9Ci0KLQotICBVc2JEZXZpY2VfQ2xhaW1JbnRlcmZhY2VfUmVzcG9uc2VQYXJhbXMucHJvdG90
eXBlLmluaXREZWZhdWx0c18gPSBmdW5jdGlvbigpIHsKLSAgICB0aGlzLnN1Y2Nlc3MgPSBmYWxz
ZTsKLSAgfTsKLSAgVXNiRGV2aWNlX0NsYWltSW50ZXJmYWNlX1Jlc3BvbnNlUGFyYW1zLnByb3Rv
dHlwZS5pbml0RmllbGRzXyA9IGZ1bmN0aW9uKGZpZWxkcykgewotICAgIGZvcih2YXIgZmllbGQg
aW4gZmllbGRzKSB7Ci0gICAgICAgIGlmICh0aGlzLmhhc093blByb3BlcnR5KGZpZWxkKSkKLSAg
ICAgICAgICB0aGlzW2ZpZWxkXSA9IGZpZWxkc1tmaWVsZF07Ci0gICAgfQotICB9OwotCi0gIFVz
YkRldmljZV9DbGFpbUludGVyZmFjZV9SZXNwb25zZVBhcmFtcy52YWxpZGF0ZSA9IGZ1bmN0aW9u
KG1lc3NhZ2VWYWxpZGF0b3IsIG9mZnNldCkgewotICAgIHZhciBlcnI7Ci0gICAgZXJyID0gbWVz
c2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdEhlYWRlcihvZmZzZXQsIGNvZGVjLmtTdHJ1Y3RI
ZWFkZXJTaXplKTsKLSAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5P
TkUpCi0gICAgICAgIHJldHVybiBlcnI7Ci0KLSAgICB2YXIga1ZlcnNpb25TaXplcyA9IFsKLSAg
ICAgIHt2ZXJzaW9uOiAwLCBudW1CeXRlczogMTZ9Ci0gICAgXTsKLSAgICBlcnIgPSBtZXNzYWdl
VmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0VmVyc2lvbihvZmZzZXQsIGtWZXJzaW9uU2l6ZXMpOwot
ICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKLSAgICAgICAg
cmV0dXJuIGVycjsKLQotCi0gICAgcmV0dXJuIHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9O
RTsKLSAgfTsKLQotICBVc2JEZXZpY2VfQ2xhaW1JbnRlcmZhY2VfUmVzcG9uc2VQYXJhbXMuZW5j
b2RlZFNpemUgPSBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDg7Ci0KLSAgVXNiRGV2aWNlX0Ns
YWltSW50ZXJmYWNlX1Jlc3BvbnNlUGFyYW1zLmRlY29kZSA9IGZ1bmN0aW9uKGRlY29kZXIpIHsK
LSAgICB2YXIgcGFja2VkOwotICAgIHZhciB2YWwgPSBuZXcgVXNiRGV2aWNlX0NsYWltSW50ZXJm
YWNlX1Jlc3BvbnNlUGFyYW1zKCk7Ci0gICAgdmFyIG51bWJlck9mQnl0ZXMgPSBkZWNvZGVyLnJl
YWRVaW50MzIoKTsKLSAgICB2YXIgdmVyc2lvbiA9IGRlY29kZXIucmVhZFVpbnQzMigpOwotICAg
IHBhY2tlZCA9IGRlY29kZXIucmVhZFVpbnQ4KCk7Ci0gICAgdmFsLnN1Y2Nlc3MgPSAocGFja2Vk
ID4+IDApICYgMSA/IHRydWUgOiBmYWxzZTsKLSAgICBkZWNvZGVyLnNraXAoMSk7Ci0gICAgZGVj
b2Rlci5za2lwKDEpOwotICAgIGRlY29kZXIuc2tpcCgxKTsKLSAgICBkZWNvZGVyLnNraXAoMSk7
Ci0gICAgZGVjb2Rlci5za2lwKDEpOwotICAgIGRlY29kZXIuc2tpcCgxKTsKLSAgICBkZWNvZGVy
LnNraXAoMSk7Ci0gICAgcmV0dXJuIHZhbDsKLSAgfTsKLQotICBVc2JEZXZpY2VfQ2xhaW1JbnRl
cmZhY2VfUmVzcG9uc2VQYXJhbXMuZW5jb2RlID0gZnVuY3Rpb24oZW5jb2RlciwgdmFsKSB7Ci0g
ICAgdmFyIHBhY2tlZDsKLSAgICBlbmNvZGVyLndyaXRlVWludDMyKFVzYkRldmljZV9DbGFpbUlu
dGVyZmFjZV9SZXNwb25zZVBhcmFtcy5lbmNvZGVkU2l6ZSk7Ci0gICAgZW5jb2Rlci53cml0ZVVp
bnQzMigwKTsKLSAgICBwYWNrZWQgPSAwOwotICAgIHBhY2tlZCB8PSAodmFsLnN1Y2Nlc3MgJiAx
KSA8PCAwCi0gICAgZW5jb2Rlci53cml0ZVVpbnQ4KHBhY2tlZCk7Ci0gICAgZW5jb2Rlci5za2lw
KDEpOwotICAgIGVuY29kZXIuc2tpcCgxKTsKLSAgICBlbmNvZGVyLnNraXAoMSk7Ci0gICAgZW5j
b2Rlci5za2lwKDEpOwotICAgIGVuY29kZXIuc2tpcCgxKTsKLSAgICBlbmNvZGVyLnNraXAoMSk7
Ci0gICAgZW5jb2Rlci5za2lwKDEpOwotICB9OwotICBmdW5jdGlvbiBVc2JEZXZpY2VfUmVsZWFz
ZUludGVyZmFjZV9QYXJhbXModmFsdWVzKSB7Ci0gICAgdGhpcy5pbml0RGVmYXVsdHNfKCk7Ci0g
ICAgdGhpcy5pbml0RmllbGRzXyh2YWx1ZXMpOwotICB9Ci0KLQotICBVc2JEZXZpY2VfUmVsZWFz
ZUludGVyZmFjZV9QYXJhbXMucHJvdG90eXBlLmluaXREZWZhdWx0c18gPSBmdW5jdGlvbigpIHsK
LSAgICB0aGlzLmludGVyZmFjZU51bWJlciA9IDA7Ci0gIH07Ci0gIFVzYkRldmljZV9SZWxlYXNl
SW50ZXJmYWNlX1BhcmFtcy5wcm90b3R5cGUuaW5pdEZpZWxkc18gPSBmdW5jdGlvbihmaWVsZHMp
IHsKLSAgICBmb3IodmFyIGZpZWxkIGluIGZpZWxkcykgewotICAgICAgICBpZiAodGhpcy5oYXNP
d25Qcm9wZXJ0eShmaWVsZCkpCi0gICAgICAgICAgdGhpc1tmaWVsZF0gPSBmaWVsZHNbZmllbGRd
OwotICAgIH0KLSAgfTsKLQotICBVc2JEZXZpY2VfUmVsZWFzZUludGVyZmFjZV9QYXJhbXMudmFs
aWRhdGUgPSBmdW5jdGlvbihtZXNzYWdlVmFsaWRhdG9yLCBvZmZzZXQpIHsKLSAgICB2YXIgZXJy
OwotICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RIZWFkZXIob2Zmc2V0
LCBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSk7Ci0gICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZh
bGlkYXRpb25FcnJvci5OT05FKQotICAgICAgICByZXR1cm4gZXJyOwotCi0gICAgdmFyIGtWZXJz
aW9uU2l6ZXMgPSBbCi0gICAgICB7dmVyc2lvbjogMCwgbnVtQnl0ZXM6IDE2fQotICAgIF07Ci0g
ICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdFZlcnNpb24ob2Zmc2V0LCBr
VmVyc2lvblNpemVzKTsKLSAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9y
Lk5PTkUpCi0gICAgICAgIHJldHVybiBlcnI7Ci0KLQotICAgIHJldHVybiB2YWxpZGF0b3IudmFs
aWRhdGlvbkVycm9yLk5PTkU7Ci0gIH07Ci0KLSAgVXNiRGV2aWNlX1JlbGVhc2VJbnRlcmZhY2Vf
UGFyYW1zLmVuY29kZWRTaXplID0gY29kZWMua1N0cnVjdEhlYWRlclNpemUgKyA4OwotCi0gIFVz
YkRldmljZV9SZWxlYXNlSW50ZXJmYWNlX1BhcmFtcy5kZWNvZGUgPSBmdW5jdGlvbihkZWNvZGVy
KSB7Ci0gICAgdmFyIHBhY2tlZDsKLSAgICB2YXIgdmFsID0gbmV3IFVzYkRldmljZV9SZWxlYXNl
SW50ZXJmYWNlX1BhcmFtcygpOwotICAgIHZhciBudW1iZXJPZkJ5dGVzID0gZGVjb2Rlci5yZWFk
VWludDMyKCk7Ci0gICAgdmFyIHZlcnNpb24gPSBkZWNvZGVyLnJlYWRVaW50MzIoKTsKLSAgICB2
YWwuaW50ZXJmYWNlTnVtYmVyID0gZGVjb2Rlci5kZWNvZGVTdHJ1Y3QoY29kZWMuVWludDgpOwot
ICAgIGRlY29kZXIuc2tpcCgxKTsKLSAgICBkZWNvZGVyLnNraXAoMSk7Ci0gICAgZGVjb2Rlci5z
a2lwKDEpOwotICAgIGRlY29kZXIuc2tpcCgxKTsKLSAgICBkZWNvZGVyLnNraXAoMSk7Ci0gICAg
ZGVjb2Rlci5za2lwKDEpOwotICAgIGRlY29kZXIuc2tpcCgxKTsKLSAgICByZXR1cm4gdmFsOwot
ICB9OwotCi0gIFVzYkRldmljZV9SZWxlYXNlSW50ZXJmYWNlX1BhcmFtcy5lbmNvZGUgPSBmdW5j
dGlvbihlbmNvZGVyLCB2YWwpIHsKLSAgICB2YXIgcGFja2VkOwotICAgIGVuY29kZXIud3JpdGVV
aW50MzIoVXNiRGV2aWNlX1JlbGVhc2VJbnRlcmZhY2VfUGFyYW1zLmVuY29kZWRTaXplKTsKLSAg
ICBlbmNvZGVyLndyaXRlVWludDMyKDApOwotICAgIGVuY29kZXIuZW5jb2RlU3RydWN0KGNvZGVj
LlVpbnQ4LCB2YWwuaW50ZXJmYWNlTnVtYmVyKTsKLSAgICBlbmNvZGVyLnNraXAoMSk7Ci0gICAg
ZW5jb2Rlci5za2lwKDEpOwotICAgIGVuY29kZXIuc2tpcCgxKTsKLSAgICBlbmNvZGVyLnNraXAo
MSk7Ci0gICAgZW5jb2Rlci5za2lwKDEpOwotICAgIGVuY29kZXIuc2tpcCgxKTsKLSAgICBlbmNv
ZGVyLnNraXAoMSk7Ci0gIH07Ci0gIGZ1bmN0aW9uIFVzYkRldmljZV9SZWxlYXNlSW50ZXJmYWNl
X1Jlc3BvbnNlUGFyYW1zKHZhbHVlcykgewotICAgIHRoaXMuaW5pdERlZmF1bHRzXygpOwotICAg
IHRoaXMuaW5pdEZpZWxkc18odmFsdWVzKTsKLSAgfQotCi0KLSAgVXNiRGV2aWNlX1JlbGVhc2VJ
bnRlcmZhY2VfUmVzcG9uc2VQYXJhbXMucHJvdG90eXBlLmluaXREZWZhdWx0c18gPSBmdW5jdGlv
bigpIHsKLSAgICB0aGlzLnN1Y2Nlc3MgPSBmYWxzZTsKLSAgfTsKLSAgVXNiRGV2aWNlX1JlbGVh
c2VJbnRlcmZhY2VfUmVzcG9uc2VQYXJhbXMucHJvdG90eXBlLmluaXRGaWVsZHNfID0gZnVuY3Rp
b24oZmllbGRzKSB7Ci0gICAgZm9yKHZhciBmaWVsZCBpbiBmaWVsZHMpIHsKLSAgICAgICAgaWYg
KHRoaXMuaGFzT3duUHJvcGVydHkoZmllbGQpKQotICAgICAgICAgIHRoaXNbZmllbGRdID0gZmll
bGRzW2ZpZWxkXTsKLSAgICB9Ci0gIH07Ci0KLSAgVXNiRGV2aWNlX1JlbGVhc2VJbnRlcmZhY2Vf
UmVzcG9uc2VQYXJhbXMudmFsaWRhdGUgPSBmdW5jdGlvbihtZXNzYWdlVmFsaWRhdG9yLCBvZmZz
ZXQpIHsKLSAgICB2YXIgZXJyOwotICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVT
dHJ1Y3RIZWFkZXIob2Zmc2V0LCBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSk7Ci0gICAgaWYgKGVy
ciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQotICAgICAgICByZXR1cm4gZXJy
OwotCi0gICAgdmFyIGtWZXJzaW9uU2l6ZXMgPSBbCi0gICAgICB7dmVyc2lvbjogMCwgbnVtQnl0
ZXM6IDE2fQotICAgIF07Ci0gICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVj
dFZlcnNpb24ob2Zmc2V0LCBrVmVyc2lvblNpemVzKTsKLSAgICBpZiAoZXJyICE9PSB2YWxpZGF0
b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCi0gICAgICAgIHJldHVybiBlcnI7Ci0KLQotICAgIHJl
dHVybiB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkU7Ci0gIH07Ci0KLSAgVXNiRGV2aWNl
X1JlbGVhc2VJbnRlcmZhY2VfUmVzcG9uc2VQYXJhbXMuZW5jb2RlZFNpemUgPSBjb2RlYy5rU3Ry
dWN0SGVhZGVyU2l6ZSArIDg7Ci0KLSAgVXNiRGV2aWNlX1JlbGVhc2VJbnRlcmZhY2VfUmVzcG9u
c2VQYXJhbXMuZGVjb2RlID0gZnVuY3Rpb24oZGVjb2RlcikgewotICAgIHZhciBwYWNrZWQ7Ci0g
ICAgdmFyIHZhbCA9IG5ldyBVc2JEZXZpY2VfUmVsZWFzZUludGVyZmFjZV9SZXNwb25zZVBhcmFt
cygpOwotICAgIHZhciBudW1iZXJPZkJ5dGVzID0gZGVjb2Rlci5yZWFkVWludDMyKCk7Ci0gICAg
dmFyIHZlcnNpb24gPSBkZWNvZGVyLnJlYWRVaW50MzIoKTsKLSAgICBwYWNrZWQgPSBkZWNvZGVy
LnJlYWRVaW50OCgpOwotICAgIHZhbC5zdWNjZXNzID0gKHBhY2tlZCA+PiAwKSAmIDEgPyB0cnVl
IDogZmFsc2U7Ci0gICAgZGVjb2Rlci5za2lwKDEpOwotICAgIGRlY29kZXIuc2tpcCgxKTsKLSAg
ICBkZWNvZGVyLnNraXAoMSk7Ci0gICAgZGVjb2Rlci5za2lwKDEpOwotICAgIGRlY29kZXIuc2tp
cCgxKTsKLSAgICBkZWNvZGVyLnNraXAoMSk7Ci0gICAgZGVjb2Rlci5za2lwKDEpOwotICAgIHJl
dHVybiB2YWw7Ci0gIH07Ci0KLSAgVXNiRGV2aWNlX1JlbGVhc2VJbnRlcmZhY2VfUmVzcG9uc2VQ
YXJhbXMuZW5jb2RlID0gZnVuY3Rpb24oZW5jb2RlciwgdmFsKSB7Ci0gICAgdmFyIHBhY2tlZDsK
LSAgICBlbmNvZGVyLndyaXRlVWludDMyKFVzYkRldmljZV9SZWxlYXNlSW50ZXJmYWNlX1Jlc3Bv
bnNlUGFyYW1zLmVuY29kZWRTaXplKTsKLSAgICBlbmNvZGVyLndyaXRlVWludDMyKDApOwotICAg
IHBhY2tlZCA9IDA7Ci0gICAgcGFja2VkIHw9ICh2YWwuc3VjY2VzcyAmIDEpIDw8IDAKLSAgICBl
bmNvZGVyLndyaXRlVWludDgocGFja2VkKTsKLSAgICBlbmNvZGVyLnNraXAoMSk7Ci0gICAgZW5j
b2Rlci5za2lwKDEpOwotICAgIGVuY29kZXIuc2tpcCgxKTsKLSAgICBlbmNvZGVyLnNraXAoMSk7
Ci0gICAgZW5jb2Rlci5za2lwKDEpOwotICAgIGVuY29kZXIuc2tpcCgxKTsKLSAgICBlbmNvZGVy
LnNraXAoMSk7Ci0gIH07Ci0gIGZ1bmN0aW9uIFVzYkRldmljZV9TZXRJbnRlcmZhY2VBbHRlcm5h
dGVTZXR0aW5nX1BhcmFtcyh2YWx1ZXMpIHsKLSAgICB0aGlzLmluaXREZWZhdWx0c18oKTsKLSAg
ICB0aGlzLmluaXRGaWVsZHNfKHZhbHVlcyk7Ci0gIH0KLQotCi0gIFVzYkRldmljZV9TZXRJbnRl
cmZhY2VBbHRlcm5hdGVTZXR0aW5nX1BhcmFtcy5wcm90b3R5cGUuaW5pdERlZmF1bHRzXyA9IGZ1
bmN0aW9uKCkgewotICAgIHRoaXMuaW50ZXJmYWNlTnVtYmVyID0gMDsKLSAgICB0aGlzLmFsdGVy
bmF0ZVNldHRpbmcgPSAwOwotICB9OwotICBVc2JEZXZpY2VfU2V0SW50ZXJmYWNlQWx0ZXJuYXRl
U2V0dGluZ19QYXJhbXMucHJvdG90eXBlLmluaXRGaWVsZHNfID0gZnVuY3Rpb24oZmllbGRzKSB7
Ci0gICAgZm9yKHZhciBmaWVsZCBpbiBmaWVsZHMpIHsKLSAgICAgICAgaWYgKHRoaXMuaGFzT3du
UHJvcGVydHkoZmllbGQpKQotICAgICAgICAgIHRoaXNbZmllbGRdID0gZmllbGRzW2ZpZWxkXTsK
LSAgICB9Ci0gIH07Ci0KLSAgVXNiRGV2aWNlX1NldEludGVyZmFjZUFsdGVybmF0ZVNldHRpbmdf
UGFyYW1zLnZhbGlkYXRlID0gZnVuY3Rpb24obWVzc2FnZVZhbGlkYXRvciwgb2Zmc2V0KSB7Ci0g
ICAgdmFyIGVycjsKLSAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0SGVh
ZGVyKG9mZnNldCwgY29kZWMua1N0cnVjdEhlYWRlclNpemUpOwotICAgIGlmIChlcnIgIT09IHZh
bGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKLSAgICAgICAgcmV0dXJuIGVycjsKLQotICAg
IHZhciBrVmVyc2lvblNpemVzID0gWwotICAgICAge3ZlcnNpb246IDAsIG51bUJ5dGVzOiAxNn0K
LSAgICBdOwotICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RWZXJzaW9u
KG9mZnNldCwga1ZlcnNpb25TaXplcyk7Ci0gICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlk
YXRpb25FcnJvci5OT05FKQotICAgICAgICByZXR1cm4gZXJyOwotCi0KLQotICAgIHJldHVybiB2
YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkU7Ci0gIH07Ci0KLSAgVXNiRGV2aWNlX1NldElu
dGVyZmFjZUFsdGVybmF0ZVNldHRpbmdfUGFyYW1zLmVuY29kZWRTaXplID0gY29kZWMua1N0cnVj
dEhlYWRlclNpemUgKyA4OwotCi0gIFVzYkRldmljZV9TZXRJbnRlcmZhY2VBbHRlcm5hdGVTZXR0
aW5nX1BhcmFtcy5kZWNvZGUgPSBmdW5jdGlvbihkZWNvZGVyKSB7Ci0gICAgdmFyIHBhY2tlZDsK
LSAgICB2YXIgdmFsID0gbmV3IFVzYkRldmljZV9TZXRJbnRlcmZhY2VBbHRlcm5hdGVTZXR0aW5n
X1BhcmFtcygpOwotICAgIHZhciBudW1iZXJPZkJ5dGVzID0gZGVjb2Rlci5yZWFkVWludDMyKCk7
Ci0gICAgdmFyIHZlcnNpb24gPSBkZWNvZGVyLnJlYWRVaW50MzIoKTsKLSAgICB2YWwuaW50ZXJm
YWNlTnVtYmVyID0gZGVjb2Rlci5kZWNvZGVTdHJ1Y3QoY29kZWMuVWludDgpOwotICAgIHZhbC5h
bHRlcm5hdGVTZXR0aW5nID0gZGVjb2Rlci5kZWNvZGVTdHJ1Y3QoY29kZWMuVWludDgpOwotICAg
IGRlY29kZXIuc2tpcCgxKTsKLSAgICBkZWNvZGVyLnNraXAoMSk7Ci0gICAgZGVjb2Rlci5za2lw
KDEpOwotICAgIGRlY29kZXIuc2tpcCgxKTsKLSAgICBkZWNvZGVyLnNraXAoMSk7Ci0gICAgZGVj
b2Rlci5za2lwKDEpOwotICAgIHJldHVybiB2YWw7Ci0gIH07Ci0KLSAgVXNiRGV2aWNlX1NldElu
dGVyZmFjZUFsdGVybmF0ZVNldHRpbmdfUGFyYW1zLmVuY29kZSA9IGZ1bmN0aW9uKGVuY29kZXIs
IHZhbCkgewotICAgIHZhciBwYWNrZWQ7Ci0gICAgZW5jb2Rlci53cml0ZVVpbnQzMihVc2JEZXZp
Y2VfU2V0SW50ZXJmYWNlQWx0ZXJuYXRlU2V0dGluZ19QYXJhbXMuZW5jb2RlZFNpemUpOwotICAg
IGVuY29kZXIud3JpdGVVaW50MzIoMCk7Ci0gICAgZW5jb2Rlci5lbmNvZGVTdHJ1Y3QoY29kZWMu
VWludDgsIHZhbC5pbnRlcmZhY2VOdW1iZXIpOwotICAgIGVuY29kZXIuZW5jb2RlU3RydWN0KGNv
ZGVjLlVpbnQ4LCB2YWwuYWx0ZXJuYXRlU2V0dGluZyk7Ci0gICAgZW5jb2Rlci5za2lwKDEpOwot
ICAgIGVuY29kZXIuc2tpcCgxKTsKLSAgICBlbmNvZGVyLnNraXAoMSk7Ci0gICAgZW5jb2Rlci5z
a2lwKDEpOwotICAgIGVuY29kZXIuc2tpcCgxKTsKLSAgICBlbmNvZGVyLnNraXAoMSk7Ci0gIH07
Ci0gIGZ1bmN0aW9uIFVzYkRldmljZV9TZXRJbnRlcmZhY2VBbHRlcm5hdGVTZXR0aW5nX1Jlc3Bv
bnNlUGFyYW1zKHZhbHVlcykgewotICAgIHRoaXMuaW5pdERlZmF1bHRzXygpOwotICAgIHRoaXMu
aW5pdEZpZWxkc18odmFsdWVzKTsKLSAgfQotCi0KLSAgVXNiRGV2aWNlX1NldEludGVyZmFjZUFs
dGVybmF0ZVNldHRpbmdfUmVzcG9uc2VQYXJhbXMucHJvdG90eXBlLmluaXREZWZhdWx0c18gPSBm
dW5jdGlvbigpIHsKLSAgICB0aGlzLnN1Y2Nlc3MgPSBmYWxzZTsKLSAgfTsKLSAgVXNiRGV2aWNl
X1NldEludGVyZmFjZUFsdGVybmF0ZVNldHRpbmdfUmVzcG9uc2VQYXJhbXMucHJvdG90eXBlLmlu
aXRGaWVsZHNfID0gZnVuY3Rpb24oZmllbGRzKSB7Ci0gICAgZm9yKHZhciBmaWVsZCBpbiBmaWVs
ZHMpIHsKLSAgICAgICAgaWYgKHRoaXMuaGFzT3duUHJvcGVydHkoZmllbGQpKQotICAgICAgICAg
IHRoaXNbZmllbGRdID0gZmllbGRzW2ZpZWxkXTsKLSAgICB9Ci0gIH07Ci0KLSAgVXNiRGV2aWNl
X1NldEludGVyZmFjZUFsdGVybmF0ZVNldHRpbmdfUmVzcG9uc2VQYXJhbXMudmFsaWRhdGUgPSBm
dW5jdGlvbihtZXNzYWdlVmFsaWRhdG9yLCBvZmZzZXQpIHsKLSAgICB2YXIgZXJyOwotICAgIGVy
ciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RIZWFkZXIob2Zmc2V0LCBjb2RlYy5r
U3RydWN0SGVhZGVyU2l6ZSk7Ci0gICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25F
cnJvci5OT05FKQotICAgICAgICByZXR1cm4gZXJyOwotCi0gICAgdmFyIGtWZXJzaW9uU2l6ZXMg
PSBbCi0gICAgICB7dmVyc2lvbjogMCwgbnVtQnl0ZXM6IDE2fQotICAgIF07Ci0gICAgZXJyID0g
bWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdFZlcnNpb24ob2Zmc2V0LCBrVmVyc2lvblNp
emVzKTsKLSAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCi0g
ICAgICAgIHJldHVybiBlcnI7Ci0KLQotICAgIHJldHVybiB2YWxpZGF0b3IudmFsaWRhdGlvbkVy
cm9yLk5PTkU7Ci0gIH07Ci0KLSAgVXNiRGV2aWNlX1NldEludGVyZmFjZUFsdGVybmF0ZVNldHRp
bmdfUmVzcG9uc2VQYXJhbXMuZW5jb2RlZFNpemUgPSBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSAr
IDg7Ci0KLSAgVXNiRGV2aWNlX1NldEludGVyZmFjZUFsdGVybmF0ZVNldHRpbmdfUmVzcG9uc2VQ
YXJhbXMuZGVjb2RlID0gZnVuY3Rpb24oZGVjb2RlcikgewotICAgIHZhciBwYWNrZWQ7Ci0gICAg
dmFyIHZhbCA9IG5ldyBVc2JEZXZpY2VfU2V0SW50ZXJmYWNlQWx0ZXJuYXRlU2V0dGluZ19SZXNw
b25zZVBhcmFtcygpOwotICAgIHZhciBudW1iZXJPZkJ5dGVzID0gZGVjb2Rlci5yZWFkVWludDMy
KCk7Ci0gICAgdmFyIHZlcnNpb24gPSBkZWNvZGVyLnJlYWRVaW50MzIoKTsKLSAgICBwYWNrZWQg
PSBkZWNvZGVyLnJlYWRVaW50OCgpOwotICAgIHZhbC5zdWNjZXNzID0gKHBhY2tlZCA+PiAwKSAm
IDEgPyB0cnVlIDogZmFsc2U7Ci0gICAgZGVjb2Rlci5za2lwKDEpOwotICAgIGRlY29kZXIuc2tp
cCgxKTsKLSAgICBkZWNvZGVyLnNraXAoMSk7Ci0gICAgZGVjb2Rlci5za2lwKDEpOwotICAgIGRl
Y29kZXIuc2tpcCgxKTsKLSAgICBkZWNvZGVyLnNraXAoMSk7Ci0gICAgZGVjb2Rlci5za2lwKDEp
OwotICAgIHJldHVybiB2YWw7Ci0gIH07Ci0KLSAgVXNiRGV2aWNlX1NldEludGVyZmFjZUFsdGVy
bmF0ZVNldHRpbmdfUmVzcG9uc2VQYXJhbXMuZW5jb2RlID0gZnVuY3Rpb24oZW5jb2RlciwgdmFs
KSB7Ci0gICAgdmFyIHBhY2tlZDsKLSAgICBlbmNvZGVyLndyaXRlVWludDMyKFVzYkRldmljZV9T
ZXRJbnRlcmZhY2VBbHRlcm5hdGVTZXR0aW5nX1Jlc3BvbnNlUGFyYW1zLmVuY29kZWRTaXplKTsK
LSAgICBlbmNvZGVyLndyaXRlVWludDMyKDApOwotICAgIHBhY2tlZCA9IDA7Ci0gICAgcGFja2Vk
IHw9ICh2YWwuc3VjY2VzcyAmIDEpIDw8IDAKLSAgICBlbmNvZGVyLndyaXRlVWludDgocGFja2Vk
KTsKLSAgICBlbmNvZGVyLnNraXAoMSk7Ci0gICAgZW5jb2Rlci5za2lwKDEpOwotICAgIGVuY29k
ZXIuc2tpcCgxKTsKLSAgICBlbmNvZGVyLnNraXAoMSk7Ci0gICAgZW5jb2Rlci5za2lwKDEpOwot
ICAgIGVuY29kZXIuc2tpcCgxKTsKLSAgICBlbmNvZGVyLnNraXAoMSk7Ci0gIH07Ci0gIGZ1bmN0
aW9uIFVzYkRldmljZV9SZXNldF9QYXJhbXModmFsdWVzKSB7Ci0gICAgdGhpcy5pbml0RGVmYXVs
dHNfKCk7Ci0gICAgdGhpcy5pbml0RmllbGRzXyh2YWx1ZXMpOwotICB9Ci0KLQotICBVc2JEZXZp
Y2VfUmVzZXRfUGFyYW1zLnByb3RvdHlwZS5pbml0RGVmYXVsdHNfID0gZnVuY3Rpb24oKSB7Ci0g
IH07Ci0gIFVzYkRldmljZV9SZXNldF9QYXJhbXMucHJvdG90eXBlLmluaXRGaWVsZHNfID0gZnVu
Y3Rpb24oZmllbGRzKSB7Ci0gICAgZm9yKHZhciBmaWVsZCBpbiBmaWVsZHMpIHsKLSAgICAgICAg
aWYgKHRoaXMuaGFzT3duUHJvcGVydHkoZmllbGQpKQotICAgICAgICAgIHRoaXNbZmllbGRdID0g
ZmllbGRzW2ZpZWxkXTsKLSAgICB9Ci0gIH07Ci0KLSAgVXNiRGV2aWNlX1Jlc2V0X1BhcmFtcy52
YWxpZGF0ZSA9IGZ1bmN0aW9uKG1lc3NhZ2VWYWxpZGF0b3IsIG9mZnNldCkgewotICAgIHZhciBl
cnI7Ci0gICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdEhlYWRlcihvZmZz
ZXQsIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplKTsKLSAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3Iu
dmFsaWRhdGlvbkVycm9yLk5PTkUpCi0gICAgICAgIHJldHVybiBlcnI7Ci0KLSAgICB2YXIga1Zl
cnNpb25TaXplcyA9IFsKLSAgICAgIHt2ZXJzaW9uOiAwLCBudW1CeXRlczogOH0KLSAgICBdOwot
ICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RWZXJzaW9uKG9mZnNldCwg
a1ZlcnNpb25TaXplcyk7Ci0gICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJv
ci5OT05FKQotICAgICAgICByZXR1cm4gZXJyOwotCi0gICAgcmV0dXJuIHZhbGlkYXRvci52YWxp
ZGF0aW9uRXJyb3IuTk9ORTsKLSAgfTsKLQotICBVc2JEZXZpY2VfUmVzZXRfUGFyYW1zLmVuY29k
ZWRTaXplID0gY29kZWMua1N0cnVjdEhlYWRlclNpemUgKyAwOwotCi0gIFVzYkRldmljZV9SZXNl
dF9QYXJhbXMuZGVjb2RlID0gZnVuY3Rpb24oZGVjb2RlcikgewotICAgIHZhciBwYWNrZWQ7Ci0g
ICAgdmFyIHZhbCA9IG5ldyBVc2JEZXZpY2VfUmVzZXRfUGFyYW1zKCk7Ci0gICAgdmFyIG51bWJl
ck9mQnl0ZXMgPSBkZWNvZGVyLnJlYWRVaW50MzIoKTsKLSAgICB2YXIgdmVyc2lvbiA9IGRlY29k
ZXIucmVhZFVpbnQzMigpOwotICAgIHJldHVybiB2YWw7Ci0gIH07Ci0KLSAgVXNiRGV2aWNlX1Jl
c2V0X1BhcmFtcy5lbmNvZGUgPSBmdW5jdGlvbihlbmNvZGVyLCB2YWwpIHsKLSAgICB2YXIgcGFj
a2VkOwotICAgIGVuY29kZXIud3JpdGVVaW50MzIoVXNiRGV2aWNlX1Jlc2V0X1BhcmFtcy5lbmNv
ZGVkU2l6ZSk7Ci0gICAgZW5jb2Rlci53cml0ZVVpbnQzMigwKTsKLSAgfTsKLSAgZnVuY3Rpb24g
VXNiRGV2aWNlX1Jlc2V0X1Jlc3BvbnNlUGFyYW1zKHZhbHVlcykgewotICAgIHRoaXMuaW5pdERl
ZmF1bHRzXygpOwotICAgIHRoaXMuaW5pdEZpZWxkc18odmFsdWVzKTsKLSAgfQotCi0KLSAgVXNi
RGV2aWNlX1Jlc2V0X1Jlc3BvbnNlUGFyYW1zLnByb3RvdHlwZS5pbml0RGVmYXVsdHNfID0gZnVu
Y3Rpb24oKSB7Ci0gICAgdGhpcy5zdWNjZXNzID0gZmFsc2U7Ci0gIH07Ci0gIFVzYkRldmljZV9S
ZXNldF9SZXNwb25zZVBhcmFtcy5wcm90b3R5cGUuaW5pdEZpZWxkc18gPSBmdW5jdGlvbihmaWVs
ZHMpIHsKLSAgICBmb3IodmFyIGZpZWxkIGluIGZpZWxkcykgewotICAgICAgICBpZiAodGhpcy5o
YXNPd25Qcm9wZXJ0eShmaWVsZCkpCi0gICAgICAgICAgdGhpc1tmaWVsZF0gPSBmaWVsZHNbZmll
bGRdOwotICAgIH0KLSAgfTsKLQotICBVc2JEZXZpY2VfUmVzZXRfUmVzcG9uc2VQYXJhbXMudmFs
aWRhdGUgPSBmdW5jdGlvbihtZXNzYWdlVmFsaWRhdG9yLCBvZmZzZXQpIHsKLSAgICB2YXIgZXJy
OwotICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RIZWFkZXIob2Zmc2V0
LCBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSk7Ci0gICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZh
bGlkYXRpb25FcnJvci5OT05FKQotICAgICAgICByZXR1cm4gZXJyOwotCi0gICAgdmFyIGtWZXJz
aW9uU2l6ZXMgPSBbCi0gICAgICB7dmVyc2lvbjogMCwgbnVtQnl0ZXM6IDE2fQotICAgIF07Ci0g
ICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdFZlcnNpb24ob2Zmc2V0LCBr
VmVyc2lvblNpemVzKTsKLSAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9y
Lk5PTkUpCi0gICAgICAgIHJldHVybiBlcnI7Ci0KLQotICAgIHJldHVybiB2YWxpZGF0b3IudmFs
aWRhdGlvbkVycm9yLk5PTkU7Ci0gIH07Ci0KLSAgVXNiRGV2aWNlX1Jlc2V0X1Jlc3BvbnNlUGFy
YW1zLmVuY29kZWRTaXplID0gY29kZWMua1N0cnVjdEhlYWRlclNpemUgKyA4OwotCi0gIFVzYkRl
dmljZV9SZXNldF9SZXNwb25zZVBhcmFtcy5kZWNvZGUgPSBmdW5jdGlvbihkZWNvZGVyKSB7Ci0g
ICAgdmFyIHBhY2tlZDsKLSAgICB2YXIgdmFsID0gbmV3IFVzYkRldmljZV9SZXNldF9SZXNwb25z
ZVBhcmFtcygpOwotICAgIHZhciBudW1iZXJPZkJ5dGVzID0gZGVjb2Rlci5yZWFkVWludDMyKCk7
Ci0gICAgdmFyIHZlcnNpb24gPSBkZWNvZGVyLnJlYWRVaW50MzIoKTsKLSAgICBwYWNrZWQgPSBk
ZWNvZGVyLnJlYWRVaW50OCgpOwotICAgIHZhbC5zdWNjZXNzID0gKHBhY2tlZCA+PiAwKSAmIDEg
PyB0cnVlIDogZmFsc2U7Ci0gICAgZGVjb2Rlci5za2lwKDEpOwotICAgIGRlY29kZXIuc2tpcCgx
KTsKLSAgICBkZWNvZGVyLnNraXAoMSk7Ci0gICAgZGVjb2Rlci5za2lwKDEpOwotICAgIGRlY29k
ZXIuc2tpcCgxKTsKLSAgICBkZWNvZGVyLnNraXAoMSk7Ci0gICAgZGVjb2Rlci5za2lwKDEpOwot
ICAgIHJldHVybiB2YWw7Ci0gIH07Ci0KLSAgVXNiRGV2aWNlX1Jlc2V0X1Jlc3BvbnNlUGFyYW1z
LmVuY29kZSA9IGZ1bmN0aW9uKGVuY29kZXIsIHZhbCkgewotICAgIHZhciBwYWNrZWQ7Ci0gICAg
ZW5jb2Rlci53cml0ZVVpbnQzMihVc2JEZXZpY2VfUmVzZXRfUmVzcG9uc2VQYXJhbXMuZW5jb2Rl
ZFNpemUpOwotICAgIGVuY29kZXIud3JpdGVVaW50MzIoMCk7Ci0gICAgcGFja2VkID0gMDsKLSAg
ICBwYWNrZWQgfD0gKHZhbC5zdWNjZXNzICYgMSkgPDwgMAotICAgIGVuY29kZXIud3JpdGVVaW50
OChwYWNrZWQpOwotICAgIGVuY29kZXIuc2tpcCgxKTsKLSAgICBlbmNvZGVyLnNraXAoMSk7Ci0g
ICAgZW5jb2Rlci5za2lwKDEpOwotICAgIGVuY29kZXIuc2tpcCgxKTsKLSAgICBlbmNvZGVyLnNr
aXAoMSk7Ci0gICAgZW5jb2Rlci5za2lwKDEpOwotICAgIGVuY29kZXIuc2tpcCgxKTsKLSAgfTsK
LSAgZnVuY3Rpb24gVXNiRGV2aWNlX0NsZWFySGFsdF9QYXJhbXModmFsdWVzKSB7Ci0gICAgdGhp
cy5pbml0RGVmYXVsdHNfKCk7Ci0gICAgdGhpcy5pbml0RmllbGRzXyh2YWx1ZXMpOwotICB9Ci0K
LQotICBVc2JEZXZpY2VfQ2xlYXJIYWx0X1BhcmFtcy5wcm90b3R5cGUuaW5pdERlZmF1bHRzXyA9
IGZ1bmN0aW9uKCkgewotICAgIHRoaXMuZW5kcG9pbnQgPSAwOwotICB9OwotICBVc2JEZXZpY2Vf
Q2xlYXJIYWx0X1BhcmFtcy5wcm90b3R5cGUuaW5pdEZpZWxkc18gPSBmdW5jdGlvbihmaWVsZHMp
IHsKLSAgICBmb3IodmFyIGZpZWxkIGluIGZpZWxkcykgewotICAgICAgICBpZiAodGhpcy5oYXNP
d25Qcm9wZXJ0eShmaWVsZCkpCi0gICAgICAgICAgdGhpc1tmaWVsZF0gPSBmaWVsZHNbZmllbGRd
OwotICAgIH0KLSAgfTsKLQotICBVc2JEZXZpY2VfQ2xlYXJIYWx0X1BhcmFtcy52YWxpZGF0ZSA9
IGZ1bmN0aW9uKG1lc3NhZ2VWYWxpZGF0b3IsIG9mZnNldCkgewotICAgIHZhciBlcnI7Ci0gICAg
ZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdEhlYWRlcihvZmZzZXQsIGNvZGVj
LmtTdHJ1Y3RIZWFkZXJTaXplKTsKLSAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlv
bkVycm9yLk5PTkUpCi0gICAgICAgIHJldHVybiBlcnI7Ci0KLSAgICB2YXIga1ZlcnNpb25TaXpl
cyA9IFsKLSAgICAgIHt2ZXJzaW9uOiAwLCBudW1CeXRlczogMTZ9Ci0gICAgXTsKLSAgICBlcnIg
PSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0VmVyc2lvbihvZmZzZXQsIGtWZXJzaW9u
U2l6ZXMpOwotICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkK
LSAgICAgICAgcmV0dXJuIGVycjsKLQotCi0gICAgcmV0dXJuIHZhbGlkYXRvci52YWxpZGF0aW9u
RXJyb3IuTk9ORTsKLSAgfTsKLQotICBVc2JEZXZpY2VfQ2xlYXJIYWx0X1BhcmFtcy5lbmNvZGVk
U2l6ZSA9IGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgODsKLQotICBVc2JEZXZpY2VfQ2xlYXJI
YWx0X1BhcmFtcy5kZWNvZGUgPSBmdW5jdGlvbihkZWNvZGVyKSB7Ci0gICAgdmFyIHBhY2tlZDsK
LSAgICB2YXIgdmFsID0gbmV3IFVzYkRldmljZV9DbGVhckhhbHRfUGFyYW1zKCk7Ci0gICAgdmFy
IG51bWJlck9mQnl0ZXMgPSBkZWNvZGVyLnJlYWRVaW50MzIoKTsKLSAgICB2YXIgdmVyc2lvbiA9
IGRlY29kZXIucmVhZFVpbnQzMigpOwotICAgIHZhbC5lbmRwb2ludCA9IGRlY29kZXIuZGVjb2Rl
U3RydWN0KGNvZGVjLlVpbnQ4KTsKLSAgICBkZWNvZGVyLnNraXAoMSk7Ci0gICAgZGVjb2Rlci5z
a2lwKDEpOwotICAgIGRlY29kZXIuc2tpcCgxKTsKLSAgICBkZWNvZGVyLnNraXAoMSk7Ci0gICAg
ZGVjb2Rlci5za2lwKDEpOwotICAgIGRlY29kZXIuc2tpcCgxKTsKLSAgICBkZWNvZGVyLnNraXAo
MSk7Ci0gICAgcmV0dXJuIHZhbDsKLSAgfTsKLQotICBVc2JEZXZpY2VfQ2xlYXJIYWx0X1BhcmFt
cy5lbmNvZGUgPSBmdW5jdGlvbihlbmNvZGVyLCB2YWwpIHsKLSAgICB2YXIgcGFja2VkOwotICAg
IGVuY29kZXIud3JpdGVVaW50MzIoVXNiRGV2aWNlX0NsZWFySGFsdF9QYXJhbXMuZW5jb2RlZFNp
emUpOwotICAgIGVuY29kZXIud3JpdGVVaW50MzIoMCk7Ci0gICAgZW5jb2Rlci5lbmNvZGVTdHJ1
Y3QoY29kZWMuVWludDgsIHZhbC5lbmRwb2ludCk7Ci0gICAgZW5jb2Rlci5za2lwKDEpOwotICAg
IGVuY29kZXIuc2tpcCgxKTsKLSAgICBlbmNvZGVyLnNraXAoMSk7Ci0gICAgZW5jb2Rlci5za2lw
KDEpOwotICAgIGVuY29kZXIuc2tpcCgxKTsKLSAgICBlbmNvZGVyLnNraXAoMSk7Ci0gICAgZW5j
b2Rlci5za2lwKDEpOwotICB9OwotICBmdW5jdGlvbiBVc2JEZXZpY2VfQ2xlYXJIYWx0X1Jlc3Bv
bnNlUGFyYW1zKHZhbHVlcykgewotICAgIHRoaXMuaW5pdERlZmF1bHRzXygpOwotICAgIHRoaXMu
aW5pdEZpZWxkc18odmFsdWVzKTsKLSAgfQotCi0KLSAgVXNiRGV2aWNlX0NsZWFySGFsdF9SZXNw
b25zZVBhcmFtcy5wcm90b3R5cGUuaW5pdERlZmF1bHRzXyA9IGZ1bmN0aW9uKCkgewotICAgIHRo
aXMuc3VjY2VzcyA9IGZhbHNlOwotICB9OwotICBVc2JEZXZpY2VfQ2xlYXJIYWx0X1Jlc3BvbnNl
UGFyYW1zLnByb3RvdHlwZS5pbml0RmllbGRzXyA9IGZ1bmN0aW9uKGZpZWxkcykgewotICAgIGZv
cih2YXIgZmllbGQgaW4gZmllbGRzKSB7Ci0gICAgICAgIGlmICh0aGlzLmhhc093blByb3BlcnR5
KGZpZWxkKSkKLSAgICAgICAgICB0aGlzW2ZpZWxkXSA9IGZpZWxkc1tmaWVsZF07Ci0gICAgfQot
ICB9OwotCi0gIFVzYkRldmljZV9DbGVhckhhbHRfUmVzcG9uc2VQYXJhbXMudmFsaWRhdGUgPSBm
dW5jdGlvbihtZXNzYWdlVmFsaWRhdG9yLCBvZmZzZXQpIHsKLSAgICB2YXIgZXJyOwotICAgIGVy
ciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RIZWFkZXIob2Zmc2V0LCBjb2RlYy5r
U3RydWN0SGVhZGVyU2l6ZSk7Ci0gICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25F
cnJvci5OT05FKQotICAgICAgICByZXR1cm4gZXJyOwotCi0gICAgdmFyIGtWZXJzaW9uU2l6ZXMg
PSBbCi0gICAgICB7dmVyc2lvbjogMCwgbnVtQnl0ZXM6IDE2fQotICAgIF07Ci0gICAgZXJyID0g
bWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdFZlcnNpb24ob2Zmc2V0LCBrVmVyc2lvblNp
emVzKTsKLSAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCi0g
ICAgICAgIHJldHVybiBlcnI7Ci0KLQotICAgIHJldHVybiB2YWxpZGF0b3IudmFsaWRhdGlvbkVy
cm9yLk5PTkU7Ci0gIH07Ci0KLSAgVXNiRGV2aWNlX0NsZWFySGFsdF9SZXNwb25zZVBhcmFtcy5l
bmNvZGVkU2l6ZSA9IGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgODsKLQotICBVc2JEZXZpY2Vf
Q2xlYXJIYWx0X1Jlc3BvbnNlUGFyYW1zLmRlY29kZSA9IGZ1bmN0aW9uKGRlY29kZXIpIHsKLSAg
ICB2YXIgcGFja2VkOwotICAgIHZhciB2YWwgPSBuZXcgVXNiRGV2aWNlX0NsZWFySGFsdF9SZXNw
b25zZVBhcmFtcygpOwotICAgIHZhciBudW1iZXJPZkJ5dGVzID0gZGVjb2Rlci5yZWFkVWludDMy
KCk7Ci0gICAgdmFyIHZlcnNpb24gPSBkZWNvZGVyLnJlYWRVaW50MzIoKTsKLSAgICBwYWNrZWQg
PSBkZWNvZGVyLnJlYWRVaW50OCgpOwotICAgIHZhbC5zdWNjZXNzID0gKHBhY2tlZCA+PiAwKSAm
IDEgPyB0cnVlIDogZmFsc2U7Ci0gICAgZGVjb2Rlci5za2lwKDEpOwotICAgIGRlY29kZXIuc2tp
cCgxKTsKLSAgICBkZWNvZGVyLnNraXAoMSk7Ci0gICAgZGVjb2Rlci5za2lwKDEpOwotICAgIGRl
Y29kZXIuc2tpcCgxKTsKLSAgICBkZWNvZGVyLnNraXAoMSk7Ci0gICAgZGVjb2Rlci5za2lwKDEp
OwotICAgIHJldHVybiB2YWw7Ci0gIH07Ci0KLSAgVXNiRGV2aWNlX0NsZWFySGFsdF9SZXNwb25z
ZVBhcmFtcy5lbmNvZGUgPSBmdW5jdGlvbihlbmNvZGVyLCB2YWwpIHsKLSAgICB2YXIgcGFja2Vk
OwotICAgIGVuY29kZXIud3JpdGVVaW50MzIoVXNiRGV2aWNlX0NsZWFySGFsdF9SZXNwb25zZVBh
cmFtcy5lbmNvZGVkU2l6ZSk7Ci0gICAgZW5jb2Rlci53cml0ZVVpbnQzMigwKTsKLSAgICBwYWNr
ZWQgPSAwOwotICAgIHBhY2tlZCB8PSAodmFsLnN1Y2Nlc3MgJiAxKSA8PCAwCi0gICAgZW5jb2Rl
ci53cml0ZVVpbnQ4KHBhY2tlZCk7Ci0gICAgZW5jb2Rlci5za2lwKDEpOwotICAgIGVuY29kZXIu
c2tpcCgxKTsKLSAgICBlbmNvZGVyLnNraXAoMSk7Ci0gICAgZW5jb2Rlci5za2lwKDEpOwotICAg
IGVuY29kZXIuc2tpcCgxKTsKLSAgICBlbmNvZGVyLnNraXAoMSk7Ci0gICAgZW5jb2Rlci5za2lw
KDEpOwotICB9OwotICBmdW5jdGlvbiBVc2JEZXZpY2VfQ29udHJvbFRyYW5zZmVySW5fUGFyYW1z
KHZhbHVlcykgewotICAgIHRoaXMuaW5pdERlZmF1bHRzXygpOwotICAgIHRoaXMuaW5pdEZpZWxk
c18odmFsdWVzKTsKLSAgfQotCi0KLSAgVXNiRGV2aWNlX0NvbnRyb2xUcmFuc2ZlckluX1BhcmFt
cy5wcm90b3R5cGUuaW5pdERlZmF1bHRzXyA9IGZ1bmN0aW9uKCkgewotICAgIHRoaXMucGFyYW1z
ID0gbnVsbDsKLSAgICB0aGlzLmxlbmd0aCA9IDA7Ci0gICAgdGhpcy50aW1lb3V0ID0gMDsKLSAg
fTsKLSAgVXNiRGV2aWNlX0NvbnRyb2xUcmFuc2ZlckluX1BhcmFtcy5wcm90b3R5cGUuaW5pdEZp
ZWxkc18gPSBmdW5jdGlvbihmaWVsZHMpIHsKLSAgICBmb3IodmFyIGZpZWxkIGluIGZpZWxkcykg
ewotICAgICAgICBpZiAodGhpcy5oYXNPd25Qcm9wZXJ0eShmaWVsZCkpCi0gICAgICAgICAgdGhp
c1tmaWVsZF0gPSBmaWVsZHNbZmllbGRdOwotICAgIH0KLSAgfTsKLQotICBVc2JEZXZpY2VfQ29u
dHJvbFRyYW5zZmVySW5fUGFyYW1zLnZhbGlkYXRlID0gZnVuY3Rpb24obWVzc2FnZVZhbGlkYXRv
ciwgb2Zmc2V0KSB7Ci0gICAgdmFyIGVycjsKLSAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZh
bGlkYXRlU3RydWN0SGVhZGVyKG9mZnNldCwgY29kZWMua1N0cnVjdEhlYWRlclNpemUpOwotICAg
IGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKLSAgICAgICAgcmV0
dXJuIGVycjsKLQotICAgIHZhciBrVmVyc2lvblNpemVzID0gWwotICAgICAge3ZlcnNpb246IDAs
IG51bUJ5dGVzOiAyNH0KLSAgICBdOwotICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRh
dGVTdHJ1Y3RWZXJzaW9uKG9mZnNldCwga1ZlcnNpb25TaXplcyk7Ci0gICAgaWYgKGVyciAhPT0g
dmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQotICAgICAgICByZXR1cm4gZXJyOwotCi0K
LSAgICAvLyB2YWxpZGF0ZSBVc2JEZXZpY2VfQ29udHJvbFRyYW5zZmVySW5fUGFyYW1zLnBhcmFt
cwotICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RQb2ludGVyKG9mZnNl
dCArIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgMCwgVXNiQ29udHJvbFRyYW5zZmVyUGFyYW1z
LCBmYWxzZSk7Ci0gICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05F
KQotICAgICAgICByZXR1cm4gZXJyOwotCi0KLQotICAgIHJldHVybiB2YWxpZGF0b3IudmFsaWRh
dGlvbkVycm9yLk5PTkU7Ci0gIH07Ci0KLSAgVXNiRGV2aWNlX0NvbnRyb2xUcmFuc2ZlckluX1Bh
cmFtcy5lbmNvZGVkU2l6ZSA9IGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgMTY7Ci0KLSAgVXNi
RGV2aWNlX0NvbnRyb2xUcmFuc2ZlckluX1BhcmFtcy5kZWNvZGUgPSBmdW5jdGlvbihkZWNvZGVy
KSB7Ci0gICAgdmFyIHBhY2tlZDsKLSAgICB2YXIgdmFsID0gbmV3IFVzYkRldmljZV9Db250cm9s
VHJhbnNmZXJJbl9QYXJhbXMoKTsKLSAgICB2YXIgbnVtYmVyT2ZCeXRlcyA9IGRlY29kZXIucmVh
ZFVpbnQzMigpOwotICAgIHZhciB2ZXJzaW9uID0gZGVjb2Rlci5yZWFkVWludDMyKCk7Ci0gICAg
dmFsLnBhcmFtcyA9IGRlY29kZXIuZGVjb2RlU3RydWN0UG9pbnRlcihVc2JDb250cm9sVHJhbnNm
ZXJQYXJhbXMpOwotICAgIHZhbC5sZW5ndGggPSBkZWNvZGVyLmRlY29kZVN0cnVjdChjb2RlYy5V
aW50MzIpOwotICAgIHZhbC50aW1lb3V0ID0gZGVjb2Rlci5kZWNvZGVTdHJ1Y3QoY29kZWMuVWlu
dDMyKTsKLSAgICByZXR1cm4gdmFsOwotICB9OwotCi0gIFVzYkRldmljZV9Db250cm9sVHJhbnNm
ZXJJbl9QYXJhbXMuZW5jb2RlID0gZnVuY3Rpb24oZW5jb2RlciwgdmFsKSB7Ci0gICAgdmFyIHBh
Y2tlZDsKLSAgICBlbmNvZGVyLndyaXRlVWludDMyKFVzYkRldmljZV9Db250cm9sVHJhbnNmZXJJ
bl9QYXJhbXMuZW5jb2RlZFNpemUpOwotICAgIGVuY29kZXIud3JpdGVVaW50MzIoMCk7Ci0gICAg
ZW5jb2Rlci5lbmNvZGVTdHJ1Y3RQb2ludGVyKFVzYkNvbnRyb2xUcmFuc2ZlclBhcmFtcywgdmFs
LnBhcmFtcyk7Ci0gICAgZW5jb2Rlci5lbmNvZGVTdHJ1Y3QoY29kZWMuVWludDMyLCB2YWwubGVu
Z3RoKTsKLSAgICBlbmNvZGVyLmVuY29kZVN0cnVjdChjb2RlYy5VaW50MzIsIHZhbC50aW1lb3V0
KTsKLSAgfTsKLSAgZnVuY3Rpb24gVXNiRGV2aWNlX0NvbnRyb2xUcmFuc2ZlckluX1Jlc3BvbnNl
UGFyYW1zKHZhbHVlcykgewotICAgIHRoaXMuaW5pdERlZmF1bHRzXygpOwotICAgIHRoaXMuaW5p
dEZpZWxkc18odmFsdWVzKTsKLSAgfQotCi0KLSAgVXNiRGV2aWNlX0NvbnRyb2xUcmFuc2Zlcklu
X1Jlc3BvbnNlUGFyYW1zLnByb3RvdHlwZS5pbml0RGVmYXVsdHNfID0gZnVuY3Rpb24oKSB7Ci0g
ICAgdGhpcy5zdGF0dXMgPSAwOwotICAgIHRoaXMuZGF0YSA9IG51bGw7Ci0gIH07Ci0gIFVzYkRl
dmljZV9Db250cm9sVHJhbnNmZXJJbl9SZXNwb25zZVBhcmFtcy5wcm90b3R5cGUuaW5pdEZpZWxk
c18gPSBmdW5jdGlvbihmaWVsZHMpIHsKLSAgICBmb3IodmFyIGZpZWxkIGluIGZpZWxkcykgewot
ICAgICAgICBpZiAodGhpcy5oYXNPd25Qcm9wZXJ0eShmaWVsZCkpCi0gICAgICAgICAgdGhpc1tm
aWVsZF0gPSBmaWVsZHNbZmllbGRdOwotICAgIH0KLSAgfTsKLQotICBVc2JEZXZpY2VfQ29udHJv
bFRyYW5zZmVySW5fUmVzcG9uc2VQYXJhbXMudmFsaWRhdGUgPSBmdW5jdGlvbihtZXNzYWdlVmFs
aWRhdG9yLCBvZmZzZXQpIHsKLSAgICB2YXIgZXJyOwotICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0
b3IudmFsaWRhdGVTdHJ1Y3RIZWFkZXIob2Zmc2V0LCBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSk7
Ci0gICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQotICAgICAg
ICByZXR1cm4gZXJyOwotCi0gICAgdmFyIGtWZXJzaW9uU2l6ZXMgPSBbCi0gICAgICB7dmVyc2lv
bjogMCwgbnVtQnl0ZXM6IDI0fQotICAgIF07Ci0gICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52
YWxpZGF0ZVN0cnVjdFZlcnNpb24ob2Zmc2V0LCBrVmVyc2lvblNpemVzKTsKLSAgICBpZiAoZXJy
ICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCi0gICAgICAgIHJldHVybiBlcnI7
Ci0KLQotICAgIC8vIHZhbGlkYXRlIFVzYkRldmljZV9Db250cm9sVHJhbnNmZXJJbl9SZXNwb25z
ZVBhcmFtcy5zdGF0dXMKLSAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlRW51bShv
ZmZzZXQgKyBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDAsIFVzYlRyYW5zZmVyU3RhdHVzKTsK
LSAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCi0gICAgICAg
IHJldHVybiBlcnI7Ci0KLQotICAgIC8vIHZhbGlkYXRlIFVzYkRldmljZV9Db250cm9sVHJhbnNm
ZXJJbl9SZXNwb25zZVBhcmFtcy5kYXRhCi0gICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxp
ZGF0ZUFycmF5UG9pbnRlcihvZmZzZXQgKyBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDgsIDEs
IGNvZGVjLlVpbnQ4LCBmYWxzZSwgWzBdLCAwKTsKLSAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3Iu
dmFsaWRhdGlvbkVycm9yLk5PTkUpCi0gICAgICAgIHJldHVybiBlcnI7Ci0KLSAgICByZXR1cm4g
dmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FOwotICB9OwotCi0gIFVzYkRldmljZV9Db250
cm9sVHJhbnNmZXJJbl9SZXNwb25zZVBhcmFtcy5lbmNvZGVkU2l6ZSA9IGNvZGVjLmtTdHJ1Y3RI
ZWFkZXJTaXplICsgMTY7Ci0KLSAgVXNiRGV2aWNlX0NvbnRyb2xUcmFuc2ZlckluX1Jlc3BvbnNl
UGFyYW1zLmRlY29kZSA9IGZ1bmN0aW9uKGRlY29kZXIpIHsKLSAgICB2YXIgcGFja2VkOwotICAg
IHZhciB2YWwgPSBuZXcgVXNiRGV2aWNlX0NvbnRyb2xUcmFuc2ZlckluX1Jlc3BvbnNlUGFyYW1z
KCk7Ci0gICAgdmFyIG51bWJlck9mQnl0ZXMgPSBkZWNvZGVyLnJlYWRVaW50MzIoKTsKLSAgICB2
YXIgdmVyc2lvbiA9IGRlY29kZXIucmVhZFVpbnQzMigpOwotICAgIHZhbC5zdGF0dXMgPSBkZWNv
ZGVyLmRlY29kZVN0cnVjdChjb2RlYy5JbnQzMik7Ci0gICAgZGVjb2Rlci5za2lwKDEpOwotICAg
IGRlY29kZXIuc2tpcCgxKTsKLSAgICBkZWNvZGVyLnNraXAoMSk7Ci0gICAgZGVjb2Rlci5za2lw
KDEpOwotICAgIHZhbC5kYXRhID0gZGVjb2Rlci5kZWNvZGVBcnJheVBvaW50ZXIoY29kZWMuVWlu
dDgpOwotICAgIHJldHVybiB2YWw7Ci0gIH07Ci0KLSAgVXNiRGV2aWNlX0NvbnRyb2xUcmFuc2Zl
ckluX1Jlc3BvbnNlUGFyYW1zLmVuY29kZSA9IGZ1bmN0aW9uKGVuY29kZXIsIHZhbCkgewotICAg
IHZhciBwYWNrZWQ7Ci0gICAgZW5jb2Rlci53cml0ZVVpbnQzMihVc2JEZXZpY2VfQ29udHJvbFRy
YW5zZmVySW5fUmVzcG9uc2VQYXJhbXMuZW5jb2RlZFNpemUpOwotICAgIGVuY29kZXIud3JpdGVV
aW50MzIoMCk7Ci0gICAgZW5jb2Rlci5lbmNvZGVTdHJ1Y3QoY29kZWMuSW50MzIsIHZhbC5zdGF0
dXMpOwotICAgIGVuY29kZXIuc2tpcCgxKTsKLSAgICBlbmNvZGVyLnNraXAoMSk7Ci0gICAgZW5j
b2Rlci5za2lwKDEpOwotICAgIGVuY29kZXIuc2tpcCgxKTsKLSAgICBlbmNvZGVyLmVuY29kZUFy
cmF5UG9pbnRlcihjb2RlYy5VaW50OCwgdmFsLmRhdGEpOwotICB9OwotICBmdW5jdGlvbiBVc2JE
ZXZpY2VfQ29udHJvbFRyYW5zZmVyT3V0X1BhcmFtcyh2YWx1ZXMpIHsKLSAgICB0aGlzLmluaXRE
ZWZhdWx0c18oKTsKLSAgICB0aGlzLmluaXRGaWVsZHNfKHZhbHVlcyk7Ci0gIH0KLQotCi0gIFVz
YkRldmljZV9Db250cm9sVHJhbnNmZXJPdXRfUGFyYW1zLnByb3RvdHlwZS5pbml0RGVmYXVsdHNf
ID0gZnVuY3Rpb24oKSB7Ci0gICAgdGhpcy5wYXJhbXMgPSBudWxsOwotICAgIHRoaXMuZGF0YSA9
IG51bGw7Ci0gICAgdGhpcy50aW1lb3V0ID0gMDsKLSAgfTsKLSAgVXNiRGV2aWNlX0NvbnRyb2xU
cmFuc2Zlck91dF9QYXJhbXMucHJvdG90eXBlLmluaXRGaWVsZHNfID0gZnVuY3Rpb24oZmllbGRz
KSB7Ci0gICAgZm9yKHZhciBmaWVsZCBpbiBmaWVsZHMpIHsKLSAgICAgICAgaWYgKHRoaXMuaGFz
T3duUHJvcGVydHkoZmllbGQpKQotICAgICAgICAgIHRoaXNbZmllbGRdID0gZmllbGRzW2ZpZWxk
XTsKLSAgICB9Ci0gIH07Ci0KLSAgVXNiRGV2aWNlX0NvbnRyb2xUcmFuc2Zlck91dF9QYXJhbXMu
dmFsaWRhdGUgPSBmdW5jdGlvbihtZXNzYWdlVmFsaWRhdG9yLCBvZmZzZXQpIHsKLSAgICB2YXIg
ZXJyOwotICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RIZWFkZXIob2Zm
c2V0LCBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSk7Ci0gICAgaWYgKGVyciAhPT0gdmFsaWRhdG9y
LnZhbGlkYXRpb25FcnJvci5OT05FKQotICAgICAgICByZXR1cm4gZXJyOwotCi0gICAgdmFyIGtW
ZXJzaW9uU2l6ZXMgPSBbCi0gICAgICB7dmVyc2lvbjogMCwgbnVtQnl0ZXM6IDMyfQotICAgIF07
Ci0gICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdFZlcnNpb24ob2Zmc2V0
LCBrVmVyc2lvblNpemVzKTsKLSAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVy
cm9yLk5PTkUpCi0gICAgICAgIHJldHVybiBlcnI7Ci0KLQotICAgIC8vIHZhbGlkYXRlIFVzYkRl
dmljZV9Db250cm9sVHJhbnNmZXJPdXRfUGFyYW1zLnBhcmFtcwotICAgIGVyciA9IG1lc3NhZ2VW
YWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RQb2ludGVyKG9mZnNldCArIGNvZGVjLmtTdHJ1Y3RIZWFk
ZXJTaXplICsgMCwgVXNiQ29udHJvbFRyYW5zZmVyUGFyYW1zLCBmYWxzZSk7Ci0gICAgaWYgKGVy
ciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQotICAgICAgICByZXR1cm4gZXJy
OwotCi0KLSAgICAvLyB2YWxpZGF0ZSBVc2JEZXZpY2VfQ29udHJvbFRyYW5zZmVyT3V0X1BhcmFt
cy5kYXRhCi0gICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZUFycmF5UG9pbnRlcihv
ZmZzZXQgKyBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDgsIDEsIGNvZGVjLlVpbnQ4LCBmYWxz
ZSwgWzBdLCAwKTsKLSAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5P
TkUpCi0gICAgICAgIHJldHVybiBlcnI7Ci0KLQotICAgIHJldHVybiB2YWxpZGF0b3IudmFsaWRh
dGlvbkVycm9yLk5PTkU7Ci0gIH07Ci0KLSAgVXNiRGV2aWNlX0NvbnRyb2xUcmFuc2Zlck91dF9Q
YXJhbXMuZW5jb2RlZFNpemUgPSBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDI0OwotCi0gIFVz
YkRldmljZV9Db250cm9sVHJhbnNmZXJPdXRfUGFyYW1zLmRlY29kZSA9IGZ1bmN0aW9uKGRlY29k
ZXIpIHsKLSAgICB2YXIgcGFja2VkOwotICAgIHZhciB2YWwgPSBuZXcgVXNiRGV2aWNlX0NvbnRy
b2xUcmFuc2Zlck91dF9QYXJhbXMoKTsKLSAgICB2YXIgbnVtYmVyT2ZCeXRlcyA9IGRlY29kZXIu
cmVhZFVpbnQzMigpOwotICAgIHZhciB2ZXJzaW9uID0gZGVjb2Rlci5yZWFkVWludDMyKCk7Ci0g
ICAgdmFsLnBhcmFtcyA9IGRlY29kZXIuZGVjb2RlU3RydWN0UG9pbnRlcihVc2JDb250cm9sVHJh
bnNmZXJQYXJhbXMpOwotICAgIHZhbC5kYXRhID0gZGVjb2Rlci5kZWNvZGVBcnJheVBvaW50ZXIo
Y29kZWMuVWludDgpOwotICAgIHZhbC50aW1lb3V0ID0gZGVjb2Rlci5kZWNvZGVTdHJ1Y3QoY29k
ZWMuVWludDMyKTsKLSAgICBkZWNvZGVyLnNraXAoMSk7Ci0gICAgZGVjb2Rlci5za2lwKDEpOwot
ICAgIGRlY29kZXIuc2tpcCgxKTsKLSAgICBkZWNvZGVyLnNraXAoMSk7Ci0gICAgcmV0dXJuIHZh
bDsKLSAgfTsKLQotICBVc2JEZXZpY2VfQ29udHJvbFRyYW5zZmVyT3V0X1BhcmFtcy5lbmNvZGUg
PSBmdW5jdGlvbihlbmNvZGVyLCB2YWwpIHsKLSAgICB2YXIgcGFja2VkOwotICAgIGVuY29kZXIu
d3JpdGVVaW50MzIoVXNiRGV2aWNlX0NvbnRyb2xUcmFuc2Zlck91dF9QYXJhbXMuZW5jb2RlZFNp
emUpOwotICAgIGVuY29kZXIud3JpdGVVaW50MzIoMCk7Ci0gICAgZW5jb2Rlci5lbmNvZGVTdHJ1
Y3RQb2ludGVyKFVzYkNvbnRyb2xUcmFuc2ZlclBhcmFtcywgdmFsLnBhcmFtcyk7Ci0gICAgZW5j
b2Rlci5lbmNvZGVBcnJheVBvaW50ZXIoY29kZWMuVWludDgsIHZhbC5kYXRhKTsKLSAgICBlbmNv
ZGVyLmVuY29kZVN0cnVjdChjb2RlYy5VaW50MzIsIHZhbC50aW1lb3V0KTsKLSAgICBlbmNvZGVy
LnNraXAoMSk7Ci0gICAgZW5jb2Rlci5za2lwKDEpOwotICAgIGVuY29kZXIuc2tpcCgxKTsKLSAg
ICBlbmNvZGVyLnNraXAoMSk7Ci0gIH07Ci0gIGZ1bmN0aW9uIFVzYkRldmljZV9Db250cm9sVHJh
bnNmZXJPdXRfUmVzcG9uc2VQYXJhbXModmFsdWVzKSB7Ci0gICAgdGhpcy5pbml0RGVmYXVsdHNf
KCk7Ci0gICAgdGhpcy5pbml0RmllbGRzXyh2YWx1ZXMpOwotICB9Ci0KLQotICBVc2JEZXZpY2Vf
Q29udHJvbFRyYW5zZmVyT3V0X1Jlc3BvbnNlUGFyYW1zLnByb3RvdHlwZS5pbml0RGVmYXVsdHNf
ID0gZnVuY3Rpb24oKSB7Ci0gICAgdGhpcy5zdGF0dXMgPSAwOwotICB9OwotICBVc2JEZXZpY2Vf
Q29udHJvbFRyYW5zZmVyT3V0X1Jlc3BvbnNlUGFyYW1zLnByb3RvdHlwZS5pbml0RmllbGRzXyA9
IGZ1bmN0aW9uKGZpZWxkcykgewotICAgIGZvcih2YXIgZmllbGQgaW4gZmllbGRzKSB7Ci0gICAg
ICAgIGlmICh0aGlzLmhhc093blByb3BlcnR5KGZpZWxkKSkKLSAgICAgICAgICB0aGlzW2ZpZWxk
XSA9IGZpZWxkc1tmaWVsZF07Ci0gICAgfQotICB9OwotCi0gIFVzYkRldmljZV9Db250cm9sVHJh
bnNmZXJPdXRfUmVzcG9uc2VQYXJhbXMudmFsaWRhdGUgPSBmdW5jdGlvbihtZXNzYWdlVmFsaWRh
dG9yLCBvZmZzZXQpIHsKLSAgICB2YXIgZXJyOwotICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3Iu
dmFsaWRhdGVTdHJ1Y3RIZWFkZXIob2Zmc2V0LCBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSk7Ci0g
ICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQotICAgICAgICBy
ZXR1cm4gZXJyOwotCi0gICAgdmFyIGtWZXJzaW9uU2l6ZXMgPSBbCi0gICAgICB7dmVyc2lvbjog
MCwgbnVtQnl0ZXM6IDE2fQotICAgIF07Ci0gICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxp
ZGF0ZVN0cnVjdFZlcnNpb24ob2Zmc2V0LCBrVmVyc2lvblNpemVzKTsKLSAgICBpZiAoZXJyICE9
PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCi0gICAgICAgIHJldHVybiBlcnI7Ci0K
LQotICAgIC8vIHZhbGlkYXRlIFVzYkRldmljZV9Db250cm9sVHJhbnNmZXJPdXRfUmVzcG9uc2VQ
YXJhbXMuc3RhdHVzCi0gICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZUVudW0ob2Zm
c2V0ICsgY29kZWMua1N0cnVjdEhlYWRlclNpemUgKyAwLCBVc2JUcmFuc2ZlclN0YXR1cyk7Ci0g
ICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQotICAgICAgICBy
ZXR1cm4gZXJyOwotCi0gICAgcmV0dXJuIHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORTsK
LSAgfTsKLQotICBVc2JEZXZpY2VfQ29udHJvbFRyYW5zZmVyT3V0X1Jlc3BvbnNlUGFyYW1zLmVu
Y29kZWRTaXplID0gY29kZWMua1N0cnVjdEhlYWRlclNpemUgKyA4OwotCi0gIFVzYkRldmljZV9D
b250cm9sVHJhbnNmZXJPdXRfUmVzcG9uc2VQYXJhbXMuZGVjb2RlID0gZnVuY3Rpb24oZGVjb2Rl
cikgewotICAgIHZhciBwYWNrZWQ7Ci0gICAgdmFyIHZhbCA9IG5ldyBVc2JEZXZpY2VfQ29udHJv
bFRyYW5zZmVyT3V0X1Jlc3BvbnNlUGFyYW1zKCk7Ci0gICAgdmFyIG51bWJlck9mQnl0ZXMgPSBk
ZWNvZGVyLnJlYWRVaW50MzIoKTsKLSAgICB2YXIgdmVyc2lvbiA9IGRlY29kZXIucmVhZFVpbnQz
MigpOwotICAgIHZhbC5zdGF0dXMgPSBkZWNvZGVyLmRlY29kZVN0cnVjdChjb2RlYy5JbnQzMik7
Ci0gICAgZGVjb2Rlci5za2lwKDEpOwotICAgIGRlY29kZXIuc2tpcCgxKTsKLSAgICBkZWNvZGVy
LnNraXAoMSk7Ci0gICAgZGVjb2Rlci5za2lwKDEpOwotICAgIHJldHVybiB2YWw7Ci0gIH07Ci0K
LSAgVXNiRGV2aWNlX0NvbnRyb2xUcmFuc2Zlck91dF9SZXNwb25zZVBhcmFtcy5lbmNvZGUgPSBm
dW5jdGlvbihlbmNvZGVyLCB2YWwpIHsKLSAgICB2YXIgcGFja2VkOwotICAgIGVuY29kZXIud3Jp
dGVVaW50MzIoVXNiRGV2aWNlX0NvbnRyb2xUcmFuc2Zlck91dF9SZXNwb25zZVBhcmFtcy5lbmNv
ZGVkU2l6ZSk7Ci0gICAgZW5jb2Rlci53cml0ZVVpbnQzMigwKTsKLSAgICBlbmNvZGVyLmVuY29k
ZVN0cnVjdChjb2RlYy5JbnQzMiwgdmFsLnN0YXR1cyk7Ci0gICAgZW5jb2Rlci5za2lwKDEpOwot
ICAgIGVuY29kZXIuc2tpcCgxKTsKLSAgICBlbmNvZGVyLnNraXAoMSk7Ci0gICAgZW5jb2Rlci5z
a2lwKDEpOwotICB9OwotICBmdW5jdGlvbiBVc2JEZXZpY2VfR2VuZXJpY1RyYW5zZmVySW5fUGFy
YW1zKHZhbHVlcykgewotICAgIHRoaXMuaW5pdERlZmF1bHRzXygpOwotICAgIHRoaXMuaW5pdEZp
ZWxkc18odmFsdWVzKTsKLSAgfQotCi0KLSAgVXNiRGV2aWNlX0dlbmVyaWNUcmFuc2ZlckluX1Bh
cmFtcy5wcm90b3R5cGUuaW5pdERlZmF1bHRzXyA9IGZ1bmN0aW9uKCkgewotICAgIHRoaXMuZW5k
cG9pbnROdW1iZXIgPSAwOwotICAgIHRoaXMubGVuZ3RoID0gMDsKLSAgICB0aGlzLnRpbWVvdXQg
PSAwOwotICB9OwotICBVc2JEZXZpY2VfR2VuZXJpY1RyYW5zZmVySW5fUGFyYW1zLnByb3RvdHlw
ZS5pbml0RmllbGRzXyA9IGZ1bmN0aW9uKGZpZWxkcykgewotICAgIGZvcih2YXIgZmllbGQgaW4g
ZmllbGRzKSB7Ci0gICAgICAgIGlmICh0aGlzLmhhc093blByb3BlcnR5KGZpZWxkKSkKLSAgICAg
ICAgICB0aGlzW2ZpZWxkXSA9IGZpZWxkc1tmaWVsZF07Ci0gICAgfQotICB9OwotCi0gIFVzYkRl
dmljZV9HZW5lcmljVHJhbnNmZXJJbl9QYXJhbXMudmFsaWRhdGUgPSBmdW5jdGlvbihtZXNzYWdl
VmFsaWRhdG9yLCBvZmZzZXQpIHsKLSAgICB2YXIgZXJyOwotICAgIGVyciA9IG1lc3NhZ2VWYWxp
ZGF0b3IudmFsaWRhdGVTdHJ1Y3RIZWFkZXIob2Zmc2V0LCBjb2RlYy5rU3RydWN0SGVhZGVyU2l6
ZSk7Ci0gICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQotICAg
ICAgICByZXR1cm4gZXJyOwotCi0gICAgdmFyIGtWZXJzaW9uU2l6ZXMgPSBbCi0gICAgICB7dmVy
c2lvbjogMCwgbnVtQnl0ZXM6IDI0fQotICAgIF07Ci0gICAgZXJyID0gbWVzc2FnZVZhbGlkYXRv
ci52YWxpZGF0ZVN0cnVjdFZlcnNpb24ob2Zmc2V0LCBrVmVyc2lvblNpemVzKTsKLSAgICBpZiAo
ZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCi0gICAgICAgIHJldHVybiBl
cnI7Ci0KLQotCi0KLSAgICByZXR1cm4gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FOwot
ICB9OwotCi0gIFVzYkRldmljZV9HZW5lcmljVHJhbnNmZXJJbl9QYXJhbXMuZW5jb2RlZFNpemUg
PSBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDE2OwotCi0gIFVzYkRldmljZV9HZW5lcmljVHJh
bnNmZXJJbl9QYXJhbXMuZGVjb2RlID0gZnVuY3Rpb24oZGVjb2RlcikgewotICAgIHZhciBwYWNr
ZWQ7Ci0gICAgdmFyIHZhbCA9IG5ldyBVc2JEZXZpY2VfR2VuZXJpY1RyYW5zZmVySW5fUGFyYW1z
KCk7Ci0gICAgdmFyIG51bWJlck9mQnl0ZXMgPSBkZWNvZGVyLnJlYWRVaW50MzIoKTsKLSAgICB2
YXIgdmVyc2lvbiA9IGRlY29kZXIucmVhZFVpbnQzMigpOwotICAgIHZhbC5lbmRwb2ludE51bWJl
ciA9IGRlY29kZXIuZGVjb2RlU3RydWN0KGNvZGVjLlVpbnQ4KTsKLSAgICBkZWNvZGVyLnNraXAo
MSk7Ci0gICAgZGVjb2Rlci5za2lwKDEpOwotICAgIGRlY29kZXIuc2tpcCgxKTsKLSAgICB2YWwu
bGVuZ3RoID0gZGVjb2Rlci5kZWNvZGVTdHJ1Y3QoY29kZWMuVWludDMyKTsKLSAgICB2YWwudGlt
ZW91dCA9IGRlY29kZXIuZGVjb2RlU3RydWN0KGNvZGVjLlVpbnQzMik7Ci0gICAgZGVjb2Rlci5z
a2lwKDEpOwotICAgIGRlY29kZXIuc2tpcCgxKTsKLSAgICBkZWNvZGVyLnNraXAoMSk7Ci0gICAg
ZGVjb2Rlci5za2lwKDEpOwotICAgIHJldHVybiB2YWw7Ci0gIH07Ci0KLSAgVXNiRGV2aWNlX0dl
bmVyaWNUcmFuc2ZlckluX1BhcmFtcy5lbmNvZGUgPSBmdW5jdGlvbihlbmNvZGVyLCB2YWwpIHsK
LSAgICB2YXIgcGFja2VkOwotICAgIGVuY29kZXIud3JpdGVVaW50MzIoVXNiRGV2aWNlX0dlbmVy
aWNUcmFuc2ZlckluX1BhcmFtcy5lbmNvZGVkU2l6ZSk7Ci0gICAgZW5jb2Rlci53cml0ZVVpbnQz
MigwKTsKLSAgICBlbmNvZGVyLmVuY29kZVN0cnVjdChjb2RlYy5VaW50OCwgdmFsLmVuZHBvaW50
TnVtYmVyKTsKLSAgICBlbmNvZGVyLnNraXAoMSk7Ci0gICAgZW5jb2Rlci5za2lwKDEpOwotICAg
IGVuY29kZXIuc2tpcCgxKTsKLSAgICBlbmNvZGVyLmVuY29kZVN0cnVjdChjb2RlYy5VaW50MzIs
IHZhbC5sZW5ndGgpOwotICAgIGVuY29kZXIuZW5jb2RlU3RydWN0KGNvZGVjLlVpbnQzMiwgdmFs
LnRpbWVvdXQpOwotICAgIGVuY29kZXIuc2tpcCgxKTsKLSAgICBlbmNvZGVyLnNraXAoMSk7Ci0g
ICAgZW5jb2Rlci5za2lwKDEpOwotICAgIGVuY29kZXIuc2tpcCgxKTsKLSAgfTsKLSAgZnVuY3Rp
b24gVXNiRGV2aWNlX0dlbmVyaWNUcmFuc2ZlckluX1Jlc3BvbnNlUGFyYW1zKHZhbHVlcykgewot
ICAgIHRoaXMuaW5pdERlZmF1bHRzXygpOwotICAgIHRoaXMuaW5pdEZpZWxkc18odmFsdWVzKTsK
LSAgfQotCi0KLSAgVXNiRGV2aWNlX0dlbmVyaWNUcmFuc2ZlckluX1Jlc3BvbnNlUGFyYW1zLnBy
b3RvdHlwZS5pbml0RGVmYXVsdHNfID0gZnVuY3Rpb24oKSB7Ci0gICAgdGhpcy5zdGF0dXMgPSAw
OwotICAgIHRoaXMuZGF0YSA9IG51bGw7Ci0gIH07Ci0gIFVzYkRldmljZV9HZW5lcmljVHJhbnNm
ZXJJbl9SZXNwb25zZVBhcmFtcy5wcm90b3R5cGUuaW5pdEZpZWxkc18gPSBmdW5jdGlvbihmaWVs
ZHMpIHsKLSAgICBmb3IodmFyIGZpZWxkIGluIGZpZWxkcykgewotICAgICAgICBpZiAodGhpcy5o
YXNPd25Qcm9wZXJ0eShmaWVsZCkpCi0gICAgICAgICAgdGhpc1tmaWVsZF0gPSBmaWVsZHNbZmll
bGRdOwotICAgIH0KLSAgfTsKLQotICBVc2JEZXZpY2VfR2VuZXJpY1RyYW5zZmVySW5fUmVzcG9u
c2VQYXJhbXMudmFsaWRhdGUgPSBmdW5jdGlvbihtZXNzYWdlVmFsaWRhdG9yLCBvZmZzZXQpIHsK
LSAgICB2YXIgZXJyOwotICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RI
ZWFkZXIob2Zmc2V0LCBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSk7Ci0gICAgaWYgKGVyciAhPT0g
dmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQotICAgICAgICByZXR1cm4gZXJyOwotCi0g
ICAgdmFyIGtWZXJzaW9uU2l6ZXMgPSBbCi0gICAgICB7dmVyc2lvbjogMCwgbnVtQnl0ZXM6IDI0
fQotICAgIF07Ci0gICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdFZlcnNp
b24ob2Zmc2V0LCBrVmVyc2lvblNpemVzKTsKLSAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFs
aWRhdGlvbkVycm9yLk5PTkUpCi0gICAgICAgIHJldHVybiBlcnI7Ci0KLQotICAgIC8vIHZhbGlk
YXRlIFVzYkRldmljZV9HZW5lcmljVHJhbnNmZXJJbl9SZXNwb25zZVBhcmFtcy5zdGF0dXMKLSAg
ICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlRW51bShvZmZzZXQgKyBjb2RlYy5rU3Ry
dWN0SGVhZGVyU2l6ZSArIDAsIFVzYlRyYW5zZmVyU3RhdHVzKTsKLSAgICBpZiAoZXJyICE9PSB2
YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCi0gICAgICAgIHJldHVybiBlcnI7Ci0KLQot
ICAgIC8vIHZhbGlkYXRlIFVzYkRldmljZV9HZW5lcmljVHJhbnNmZXJJbl9SZXNwb25zZVBhcmFt
cy5kYXRhCi0gICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZUFycmF5UG9pbnRlcihv
ZmZzZXQgKyBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDgsIDEsIGNvZGVjLlVpbnQ4LCBmYWxz
ZSwgWzBdLCAwKTsKLSAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5P
TkUpCi0gICAgICAgIHJldHVybiBlcnI7Ci0KLSAgICByZXR1cm4gdmFsaWRhdG9yLnZhbGlkYXRp
b25FcnJvci5OT05FOwotICB9OwotCi0gIFVzYkRldmljZV9HZW5lcmljVHJhbnNmZXJJbl9SZXNw
b25zZVBhcmFtcy5lbmNvZGVkU2l6ZSA9IGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgMTY7Ci0K
LSAgVXNiRGV2aWNlX0dlbmVyaWNUcmFuc2ZlckluX1Jlc3BvbnNlUGFyYW1zLmRlY29kZSA9IGZ1
bmN0aW9uKGRlY29kZXIpIHsKLSAgICB2YXIgcGFja2VkOwotICAgIHZhciB2YWwgPSBuZXcgVXNi
RGV2aWNlX0dlbmVyaWNUcmFuc2ZlckluX1Jlc3BvbnNlUGFyYW1zKCk7Ci0gICAgdmFyIG51bWJl
ck9mQnl0ZXMgPSBkZWNvZGVyLnJlYWRVaW50MzIoKTsKLSAgICB2YXIgdmVyc2lvbiA9IGRlY29k
ZXIucmVhZFVpbnQzMigpOwotICAgIHZhbC5zdGF0dXMgPSBkZWNvZGVyLmRlY29kZVN0cnVjdChj
b2RlYy5JbnQzMik7Ci0gICAgZGVjb2Rlci5za2lwKDEpOwotICAgIGRlY29kZXIuc2tpcCgxKTsK
LSAgICBkZWNvZGVyLnNraXAoMSk7Ci0gICAgZGVjb2Rlci5za2lwKDEpOwotICAgIHZhbC5kYXRh
ID0gZGVjb2Rlci5kZWNvZGVBcnJheVBvaW50ZXIoY29kZWMuVWludDgpOwotICAgIHJldHVybiB2
YWw7Ci0gIH07Ci0KLSAgVXNiRGV2aWNlX0dlbmVyaWNUcmFuc2ZlckluX1Jlc3BvbnNlUGFyYW1z
LmVuY29kZSA9IGZ1bmN0aW9uKGVuY29kZXIsIHZhbCkgewotICAgIHZhciBwYWNrZWQ7Ci0gICAg
ZW5jb2Rlci53cml0ZVVpbnQzMihVc2JEZXZpY2VfR2VuZXJpY1RyYW5zZmVySW5fUmVzcG9uc2VQ
YXJhbXMuZW5jb2RlZFNpemUpOwotICAgIGVuY29kZXIud3JpdGVVaW50MzIoMCk7Ci0gICAgZW5j
b2Rlci5lbmNvZGVTdHJ1Y3QoY29kZWMuSW50MzIsIHZhbC5zdGF0dXMpOwotICAgIGVuY29kZXIu
c2tpcCgxKTsKLSAgICBlbmNvZGVyLnNraXAoMSk7Ci0gICAgZW5jb2Rlci5za2lwKDEpOwotICAg
IGVuY29kZXIuc2tpcCgxKTsKLSAgICBlbmNvZGVyLmVuY29kZUFycmF5UG9pbnRlcihjb2RlYy5V
aW50OCwgdmFsLmRhdGEpOwotICB9OwotICBmdW5jdGlvbiBVc2JEZXZpY2VfR2VuZXJpY1RyYW5z
ZmVyT3V0X1BhcmFtcyh2YWx1ZXMpIHsKLSAgICB0aGlzLmluaXREZWZhdWx0c18oKTsKLSAgICB0
aGlzLmluaXRGaWVsZHNfKHZhbHVlcyk7Ci0gIH0KLQotCi0gIFVzYkRldmljZV9HZW5lcmljVHJh
bnNmZXJPdXRfUGFyYW1zLnByb3RvdHlwZS5pbml0RGVmYXVsdHNfID0gZnVuY3Rpb24oKSB7Ci0g
ICAgdGhpcy5lbmRwb2ludE51bWJlciA9IDA7Ci0gICAgdGhpcy50aW1lb3V0ID0gMDsKLSAgICB0
aGlzLmRhdGEgPSBudWxsOwotICB9OwotICBVc2JEZXZpY2VfR2VuZXJpY1RyYW5zZmVyT3V0X1Bh
cmFtcy5wcm90b3R5cGUuaW5pdEZpZWxkc18gPSBmdW5jdGlvbihmaWVsZHMpIHsKLSAgICBmb3Io
dmFyIGZpZWxkIGluIGZpZWxkcykgewotICAgICAgICBpZiAodGhpcy5oYXNPd25Qcm9wZXJ0eShm
aWVsZCkpCi0gICAgICAgICAgdGhpc1tmaWVsZF0gPSBmaWVsZHNbZmllbGRdOwotICAgIH0KLSAg
fTsKLQotICBVc2JEZXZpY2VfR2VuZXJpY1RyYW5zZmVyT3V0X1BhcmFtcy52YWxpZGF0ZSA9IGZ1
bmN0aW9uKG1lc3NhZ2VWYWxpZGF0b3IsIG9mZnNldCkgewotICAgIHZhciBlcnI7Ci0gICAgZXJy
ID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdEhlYWRlcihvZmZzZXQsIGNvZGVjLmtT
dHJ1Y3RIZWFkZXJTaXplKTsKLSAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVy
cm9yLk5PTkUpCi0gICAgICAgIHJldHVybiBlcnI7Ci0KLSAgICB2YXIga1ZlcnNpb25TaXplcyA9
IFsKLSAgICAgIHt2ZXJzaW9uOiAwLCBudW1CeXRlczogMjR9Ci0gICAgXTsKLSAgICBlcnIgPSBt
ZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0VmVyc2lvbihvZmZzZXQsIGtWZXJzaW9uU2l6
ZXMpOwotICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKLSAg
ICAgICAgcmV0dXJuIGVycjsKLQotCi0KLSAgICAvLyB2YWxpZGF0ZSBVc2JEZXZpY2VfR2VuZXJp
Y1RyYW5zZmVyT3V0X1BhcmFtcy5kYXRhCi0gICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxp
ZGF0ZUFycmF5UG9pbnRlcihvZmZzZXQgKyBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDgsIDEs
IGNvZGVjLlVpbnQ4LCBmYWxzZSwgWzBdLCAwKTsKLSAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3Iu
dmFsaWRhdGlvbkVycm9yLk5PTkUpCi0gICAgICAgIHJldHVybiBlcnI7Ci0KLQotICAgIHJldHVy
biB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkU7Ci0gIH07Ci0KLSAgVXNiRGV2aWNlX0dl
bmVyaWNUcmFuc2Zlck91dF9QYXJhbXMuZW5jb2RlZFNpemUgPSBjb2RlYy5rU3RydWN0SGVhZGVy
U2l6ZSArIDE2OwotCi0gIFVzYkRldmljZV9HZW5lcmljVHJhbnNmZXJPdXRfUGFyYW1zLmRlY29k
ZSA9IGZ1bmN0aW9uKGRlY29kZXIpIHsKLSAgICB2YXIgcGFja2VkOwotICAgIHZhciB2YWwgPSBu
ZXcgVXNiRGV2aWNlX0dlbmVyaWNUcmFuc2Zlck91dF9QYXJhbXMoKTsKLSAgICB2YXIgbnVtYmVy
T2ZCeXRlcyA9IGRlY29kZXIucmVhZFVpbnQzMigpOwotICAgIHZhciB2ZXJzaW9uID0gZGVjb2Rl
ci5yZWFkVWludDMyKCk7Ci0gICAgdmFsLmVuZHBvaW50TnVtYmVyID0gZGVjb2Rlci5kZWNvZGVT
dHJ1Y3QoY29kZWMuVWludDgpOwotICAgIGRlY29kZXIuc2tpcCgxKTsKLSAgICBkZWNvZGVyLnNr
aXAoMSk7Ci0gICAgZGVjb2Rlci5za2lwKDEpOwotICAgIHZhbC50aW1lb3V0ID0gZGVjb2Rlci5k
ZWNvZGVTdHJ1Y3QoY29kZWMuVWludDMyKTsKLSAgICB2YWwuZGF0YSA9IGRlY29kZXIuZGVjb2Rl
QXJyYXlQb2ludGVyKGNvZGVjLlVpbnQ4KTsKLSAgICByZXR1cm4gdmFsOwotICB9OwotCi0gIFVz
YkRldmljZV9HZW5lcmljVHJhbnNmZXJPdXRfUGFyYW1zLmVuY29kZSA9IGZ1bmN0aW9uKGVuY29k
ZXIsIHZhbCkgewotICAgIHZhciBwYWNrZWQ7Ci0gICAgZW5jb2Rlci53cml0ZVVpbnQzMihVc2JE
ZXZpY2VfR2VuZXJpY1RyYW5zZmVyT3V0X1BhcmFtcy5lbmNvZGVkU2l6ZSk7Ci0gICAgZW5jb2Rl
ci53cml0ZVVpbnQzMigwKTsKLSAgICBlbmNvZGVyLmVuY29kZVN0cnVjdChjb2RlYy5VaW50OCwg
dmFsLmVuZHBvaW50TnVtYmVyKTsKLSAgICBlbmNvZGVyLnNraXAoMSk7Ci0gICAgZW5jb2Rlci5z
a2lwKDEpOwotICAgIGVuY29kZXIuc2tpcCgxKTsKLSAgICBlbmNvZGVyLmVuY29kZVN0cnVjdChj
b2RlYy5VaW50MzIsIHZhbC50aW1lb3V0KTsKLSAgICBlbmNvZGVyLmVuY29kZUFycmF5UG9pbnRl
cihjb2RlYy5VaW50OCwgdmFsLmRhdGEpOwotICB9OwotICBmdW5jdGlvbiBVc2JEZXZpY2VfR2Vu
ZXJpY1RyYW5zZmVyT3V0X1Jlc3BvbnNlUGFyYW1zKHZhbHVlcykgewotICAgIHRoaXMuaW5pdERl
ZmF1bHRzXygpOwotICAgIHRoaXMuaW5pdEZpZWxkc18odmFsdWVzKTsKLSAgfQotCi0KLSAgVXNi
RGV2aWNlX0dlbmVyaWNUcmFuc2Zlck91dF9SZXNwb25zZVBhcmFtcy5wcm90b3R5cGUuaW5pdERl
ZmF1bHRzXyA9IGZ1bmN0aW9uKCkgewotICAgIHRoaXMuc3RhdHVzID0gMDsKLSAgfTsKLSAgVXNi
RGV2aWNlX0dlbmVyaWNUcmFuc2Zlck91dF9SZXNwb25zZVBhcmFtcy5wcm90b3R5cGUuaW5pdEZp
ZWxkc18gPSBmdW5jdGlvbihmaWVsZHMpIHsKLSAgICBmb3IodmFyIGZpZWxkIGluIGZpZWxkcykg
ewotICAgICAgICBpZiAodGhpcy5oYXNPd25Qcm9wZXJ0eShmaWVsZCkpCi0gICAgICAgICAgdGhp
c1tmaWVsZF0gPSBmaWVsZHNbZmllbGRdOwotICAgIH0KLSAgfTsKLQotICBVc2JEZXZpY2VfR2Vu
ZXJpY1RyYW5zZmVyT3V0X1Jlc3BvbnNlUGFyYW1zLnZhbGlkYXRlID0gZnVuY3Rpb24obWVzc2Fn
ZVZhbGlkYXRvciwgb2Zmc2V0KSB7Ci0gICAgdmFyIGVycjsKLSAgICBlcnIgPSBtZXNzYWdlVmFs
aWRhdG9yLnZhbGlkYXRlU3RydWN0SGVhZGVyKG9mZnNldCwgY29kZWMua1N0cnVjdEhlYWRlclNp
emUpOwotICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKLSAg
ICAgICAgcmV0dXJuIGVycjsKLQotICAgIHZhciBrVmVyc2lvblNpemVzID0gWwotICAgICAge3Zl
cnNpb246IDAsIG51bUJ5dGVzOiAxNn0KLSAgICBdOwotICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0
b3IudmFsaWRhdGVTdHJ1Y3RWZXJzaW9uKG9mZnNldCwga1ZlcnNpb25TaXplcyk7Ci0gICAgaWYg
KGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQotICAgICAgICByZXR1cm4g
ZXJyOwotCi0KLSAgICAvLyB2YWxpZGF0ZSBVc2JEZXZpY2VfR2VuZXJpY1RyYW5zZmVyT3V0X1Jl
c3BvbnNlUGFyYW1zLnN0YXR1cwotICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVF
bnVtKG9mZnNldCArIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgMCwgVXNiVHJhbnNmZXJTdGF0
dXMpOwotICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKLSAg
ICAgICAgcmV0dXJuIGVycjsKLQotICAgIHJldHVybiB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9y
Lk5PTkU7Ci0gIH07Ci0KLSAgVXNiRGV2aWNlX0dlbmVyaWNUcmFuc2Zlck91dF9SZXNwb25zZVBh
cmFtcy5lbmNvZGVkU2l6ZSA9IGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgODsKLQotICBVc2JE
ZXZpY2VfR2VuZXJpY1RyYW5zZmVyT3V0X1Jlc3BvbnNlUGFyYW1zLmRlY29kZSA9IGZ1bmN0aW9u
KGRlY29kZXIpIHsKLSAgICB2YXIgcGFja2VkOwotICAgIHZhciB2YWwgPSBuZXcgVXNiRGV2aWNl
X0dlbmVyaWNUcmFuc2Zlck91dF9SZXNwb25zZVBhcmFtcygpOwotICAgIHZhciBudW1iZXJPZkJ5
dGVzID0gZGVjb2Rlci5yZWFkVWludDMyKCk7Ci0gICAgdmFyIHZlcnNpb24gPSBkZWNvZGVyLnJl
YWRVaW50MzIoKTsKLSAgICB2YWwuc3RhdHVzID0gZGVjb2Rlci5kZWNvZGVTdHJ1Y3QoY29kZWMu
SW50MzIpOwotICAgIGRlY29kZXIuc2tpcCgxKTsKLSAgICBkZWNvZGVyLnNraXAoMSk7Ci0gICAg
ZGVjb2Rlci5za2lwKDEpOwotICAgIGRlY29kZXIuc2tpcCgxKTsKLSAgICByZXR1cm4gdmFsOwot
ICB9OwotCi0gIFVzYkRldmljZV9HZW5lcmljVHJhbnNmZXJPdXRfUmVzcG9uc2VQYXJhbXMuZW5j
b2RlID0gZnVuY3Rpb24oZW5jb2RlciwgdmFsKSB7Ci0gICAgdmFyIHBhY2tlZDsKLSAgICBlbmNv
ZGVyLndyaXRlVWludDMyKFVzYkRldmljZV9HZW5lcmljVHJhbnNmZXJPdXRfUmVzcG9uc2VQYXJh
bXMuZW5jb2RlZFNpemUpOwotICAgIGVuY29kZXIud3JpdGVVaW50MzIoMCk7Ci0gICAgZW5jb2Rl
ci5lbmNvZGVTdHJ1Y3QoY29kZWMuSW50MzIsIHZhbC5zdGF0dXMpOwotICAgIGVuY29kZXIuc2tp
cCgxKTsKLSAgICBlbmNvZGVyLnNraXAoMSk7Ci0gICAgZW5jb2Rlci5za2lwKDEpOwotICAgIGVu
Y29kZXIuc2tpcCgxKTsKLSAgfTsKLSAgZnVuY3Rpb24gVXNiRGV2aWNlX0lzb2Nocm9ub3VzVHJh
bnNmZXJJbl9QYXJhbXModmFsdWVzKSB7Ci0gICAgdGhpcy5pbml0RGVmYXVsdHNfKCk7Ci0gICAg
dGhpcy5pbml0RmllbGRzXyh2YWx1ZXMpOwotICB9Ci0KLQotICBVc2JEZXZpY2VfSXNvY2hyb25v
dXNUcmFuc2ZlckluX1BhcmFtcy5wcm90b3R5cGUuaW5pdERlZmF1bHRzXyA9IGZ1bmN0aW9uKCkg
ewotICAgIHRoaXMuZW5kcG9pbnROdW1iZXIgPSAwOwotICAgIHRoaXMudGltZW91dCA9IDA7Ci0g
ICAgdGhpcy5wYWNrZXRMZW5ndGhzID0gbnVsbDsKLSAgfTsKLSAgVXNiRGV2aWNlX0lzb2Nocm9u
b3VzVHJhbnNmZXJJbl9QYXJhbXMucHJvdG90eXBlLmluaXRGaWVsZHNfID0gZnVuY3Rpb24oZmll
bGRzKSB7Ci0gICAgZm9yKHZhciBmaWVsZCBpbiBmaWVsZHMpIHsKLSAgICAgICAgaWYgKHRoaXMu
aGFzT3duUHJvcGVydHkoZmllbGQpKQotICAgICAgICAgIHRoaXNbZmllbGRdID0gZmllbGRzW2Zp
ZWxkXTsKLSAgICB9Ci0gIH07Ci0KLSAgVXNiRGV2aWNlX0lzb2Nocm9ub3VzVHJhbnNmZXJJbl9Q
YXJhbXMudmFsaWRhdGUgPSBmdW5jdGlvbihtZXNzYWdlVmFsaWRhdG9yLCBvZmZzZXQpIHsKLSAg
ICB2YXIgZXJyOwotICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RIZWFk
ZXIob2Zmc2V0LCBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSk7Ci0gICAgaWYgKGVyciAhPT0gdmFs
aWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQotICAgICAgICByZXR1cm4gZXJyOwotCi0gICAg
dmFyIGtWZXJzaW9uU2l6ZXMgPSBbCi0gICAgICB7dmVyc2lvbjogMCwgbnVtQnl0ZXM6IDI0fQot
ICAgIF07Ci0gICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdFZlcnNpb24o
b2Zmc2V0LCBrVmVyc2lvblNpemVzKTsKLSAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRh
dGlvbkVycm9yLk5PTkUpCi0gICAgICAgIHJldHVybiBlcnI7Ci0KLQotCi0gICAgLy8gdmFsaWRh
dGUgVXNiRGV2aWNlX0lzb2Nocm9ub3VzVHJhbnNmZXJJbl9QYXJhbXMucGFja2V0TGVuZ3Rocwot
ICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVBcnJheVBvaW50ZXIob2Zmc2V0ICsg
Y29kZWMua1N0cnVjdEhlYWRlclNpemUgKyA4LCA0LCBjb2RlYy5VaW50MzIsIGZhbHNlLCBbMF0s
IDApOwotICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKLSAg
ICAgICAgcmV0dXJuIGVycjsKLQotCi0gICAgcmV0dXJuIHZhbGlkYXRvci52YWxpZGF0aW9uRXJy
b3IuTk9ORTsKLSAgfTsKLQotICBVc2JEZXZpY2VfSXNvY2hyb25vdXNUcmFuc2ZlckluX1BhcmFt
cy5lbmNvZGVkU2l6ZSA9IGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgMTY7Ci0KLSAgVXNiRGV2
aWNlX0lzb2Nocm9ub3VzVHJhbnNmZXJJbl9QYXJhbXMuZGVjb2RlID0gZnVuY3Rpb24oZGVjb2Rl
cikgewotICAgIHZhciBwYWNrZWQ7Ci0gICAgdmFyIHZhbCA9IG5ldyBVc2JEZXZpY2VfSXNvY2hy
b25vdXNUcmFuc2ZlckluX1BhcmFtcygpOwotICAgIHZhciBudW1iZXJPZkJ5dGVzID0gZGVjb2Rl
ci5yZWFkVWludDMyKCk7Ci0gICAgdmFyIHZlcnNpb24gPSBkZWNvZGVyLnJlYWRVaW50MzIoKTsK
LSAgICB2YWwuZW5kcG9pbnROdW1iZXIgPSBkZWNvZGVyLmRlY29kZVN0cnVjdChjb2RlYy5VaW50
OCk7Ci0gICAgZGVjb2Rlci5za2lwKDEpOwotICAgIGRlY29kZXIuc2tpcCgxKTsKLSAgICBkZWNv
ZGVyLnNraXAoMSk7Ci0gICAgdmFsLnRpbWVvdXQgPSBkZWNvZGVyLmRlY29kZVN0cnVjdChjb2Rl
Yy5VaW50MzIpOwotICAgIHZhbC5wYWNrZXRMZW5ndGhzID0gZGVjb2Rlci5kZWNvZGVBcnJheVBv
aW50ZXIoY29kZWMuVWludDMyKTsKLSAgICByZXR1cm4gdmFsOwotICB9OwotCi0gIFVzYkRldmlj
ZV9Jc29jaHJvbm91c1RyYW5zZmVySW5fUGFyYW1zLmVuY29kZSA9IGZ1bmN0aW9uKGVuY29kZXIs
IHZhbCkgewotICAgIHZhciBwYWNrZWQ7Ci0gICAgZW5jb2Rlci53cml0ZVVpbnQzMihVc2JEZXZp
Y2VfSXNvY2hyb25vdXNUcmFuc2ZlckluX1BhcmFtcy5lbmNvZGVkU2l6ZSk7Ci0gICAgZW5jb2Rl
ci53cml0ZVVpbnQzMigwKTsKLSAgICBlbmNvZGVyLmVuY29kZVN0cnVjdChjb2RlYy5VaW50OCwg
dmFsLmVuZHBvaW50TnVtYmVyKTsKLSAgICBlbmNvZGVyLnNraXAoMSk7Ci0gICAgZW5jb2Rlci5z
a2lwKDEpOwotICAgIGVuY29kZXIuc2tpcCgxKTsKLSAgICBlbmNvZGVyLmVuY29kZVN0cnVjdChj
b2RlYy5VaW50MzIsIHZhbC50aW1lb3V0KTsKLSAgICBlbmNvZGVyLmVuY29kZUFycmF5UG9pbnRl
cihjb2RlYy5VaW50MzIsIHZhbC5wYWNrZXRMZW5ndGhzKTsKLSAgfTsKLSAgZnVuY3Rpb24gVXNi
RGV2aWNlX0lzb2Nocm9ub3VzVHJhbnNmZXJJbl9SZXNwb25zZVBhcmFtcyh2YWx1ZXMpIHsKLSAg
ICB0aGlzLmluaXREZWZhdWx0c18oKTsKLSAgICB0aGlzLmluaXRGaWVsZHNfKHZhbHVlcyk7Ci0g
IH0KLQotCi0gIFVzYkRldmljZV9Jc29jaHJvbm91c1RyYW5zZmVySW5fUmVzcG9uc2VQYXJhbXMu
cHJvdG90eXBlLmluaXREZWZhdWx0c18gPSBmdW5jdGlvbigpIHsKLSAgICB0aGlzLmRhdGEgPSBu
dWxsOwotICAgIHRoaXMucGFja2V0cyA9IG51bGw7Ci0gIH07Ci0gIFVzYkRldmljZV9Jc29jaHJv
bm91c1RyYW5zZmVySW5fUmVzcG9uc2VQYXJhbXMucHJvdG90eXBlLmluaXRGaWVsZHNfID0gZnVu
Y3Rpb24oZmllbGRzKSB7Ci0gICAgZm9yKHZhciBmaWVsZCBpbiBmaWVsZHMpIHsKLSAgICAgICAg
aWYgKHRoaXMuaGFzT3duUHJvcGVydHkoZmllbGQpKQotICAgICAgICAgIHRoaXNbZmllbGRdID0g
ZmllbGRzW2ZpZWxkXTsKLSAgICB9Ci0gIH07Ci0KLSAgVXNiRGV2aWNlX0lzb2Nocm9ub3VzVHJh
bnNmZXJJbl9SZXNwb25zZVBhcmFtcy52YWxpZGF0ZSA9IGZ1bmN0aW9uKG1lc3NhZ2VWYWxpZGF0
b3IsIG9mZnNldCkgewotICAgIHZhciBlcnI7Ci0gICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52
YWxpZGF0ZVN0cnVjdEhlYWRlcihvZmZzZXQsIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplKTsKLSAg
ICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCi0gICAgICAgIHJl
dHVybiBlcnI7Ci0KLSAgICB2YXIga1ZlcnNpb25TaXplcyA9IFsKLSAgICAgIHt2ZXJzaW9uOiAw
LCBudW1CeXRlczogMjR9Ci0gICAgXTsKLSAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlk
YXRlU3RydWN0VmVyc2lvbihvZmZzZXQsIGtWZXJzaW9uU2l6ZXMpOwotICAgIGlmIChlcnIgIT09
IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKLSAgICAgICAgcmV0dXJuIGVycjsKLQot
Ci0gICAgLy8gdmFsaWRhdGUgVXNiRGV2aWNlX0lzb2Nocm9ub3VzVHJhbnNmZXJJbl9SZXNwb25z
ZVBhcmFtcy5kYXRhCi0gICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZUFycmF5UG9p
bnRlcihvZmZzZXQgKyBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDAsIDEsIGNvZGVjLlVpbnQ4
LCBmYWxzZSwgWzBdLCAwKTsKLSAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVy
cm9yLk5PTkUpCi0gICAgICAgIHJldHVybiBlcnI7Ci0KLQotICAgIC8vIHZhbGlkYXRlIFVzYkRl
dmljZV9Jc29jaHJvbm91c1RyYW5zZmVySW5fUmVzcG9uc2VQYXJhbXMucGFja2V0cwotICAgIGVy
ciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVBcnJheVBvaW50ZXIob2Zmc2V0ICsgY29kZWMu
a1N0cnVjdEhlYWRlclNpemUgKyA4LCA4LCBuZXcgY29kZWMuUG9pbnRlclRvKFVzYklzb2Nocm9u
b3VzUGFja2V0KSwgZmFsc2UsIFswXSwgMCk7Ci0gICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZh
bGlkYXRpb25FcnJvci5OT05FKQotICAgICAgICByZXR1cm4gZXJyOwotCi0gICAgcmV0dXJuIHZh
bGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORTsKLSAgfTsKLQotICBVc2JEZXZpY2VfSXNvY2hy
b25vdXNUcmFuc2ZlckluX1Jlc3BvbnNlUGFyYW1zLmVuY29kZWRTaXplID0gY29kZWMua1N0cnVj
dEhlYWRlclNpemUgKyAxNjsKLQotICBVc2JEZXZpY2VfSXNvY2hyb25vdXNUcmFuc2ZlckluX1Jl
c3BvbnNlUGFyYW1zLmRlY29kZSA9IGZ1bmN0aW9uKGRlY29kZXIpIHsKLSAgICB2YXIgcGFja2Vk
OwotICAgIHZhciB2YWwgPSBuZXcgVXNiRGV2aWNlX0lzb2Nocm9ub3VzVHJhbnNmZXJJbl9SZXNw
b25zZVBhcmFtcygpOwotICAgIHZhciBudW1iZXJPZkJ5dGVzID0gZGVjb2Rlci5yZWFkVWludDMy
KCk7Ci0gICAgdmFyIHZlcnNpb24gPSBkZWNvZGVyLnJlYWRVaW50MzIoKTsKLSAgICB2YWwuZGF0
YSA9IGRlY29kZXIuZGVjb2RlQXJyYXlQb2ludGVyKGNvZGVjLlVpbnQ4KTsKLSAgICB2YWwucGFj
a2V0cyA9IGRlY29kZXIuZGVjb2RlQXJyYXlQb2ludGVyKG5ldyBjb2RlYy5Qb2ludGVyVG8oVXNi
SXNvY2hyb25vdXNQYWNrZXQpKTsKLSAgICByZXR1cm4gdmFsOwotICB9OwotCi0gIFVzYkRldmlj
ZV9Jc29jaHJvbm91c1RyYW5zZmVySW5fUmVzcG9uc2VQYXJhbXMuZW5jb2RlID0gZnVuY3Rpb24o
ZW5jb2RlciwgdmFsKSB7Ci0gICAgdmFyIHBhY2tlZDsKLSAgICBlbmNvZGVyLndyaXRlVWludDMy
KFVzYkRldmljZV9Jc29jaHJvbm91c1RyYW5zZmVySW5fUmVzcG9uc2VQYXJhbXMuZW5jb2RlZFNp
emUpOwotICAgIGVuY29kZXIud3JpdGVVaW50MzIoMCk7Ci0gICAgZW5jb2Rlci5lbmNvZGVBcnJh
eVBvaW50ZXIoY29kZWMuVWludDgsIHZhbC5kYXRhKTsKLSAgICBlbmNvZGVyLmVuY29kZUFycmF5
UG9pbnRlcihuZXcgY29kZWMuUG9pbnRlclRvKFVzYklzb2Nocm9ub3VzUGFja2V0KSwgdmFsLnBh
Y2tldHMpOwotICB9OwotICBmdW5jdGlvbiBVc2JEZXZpY2VfSXNvY2hyb25vdXNUcmFuc2Zlck91
dF9QYXJhbXModmFsdWVzKSB7Ci0gICAgdGhpcy5pbml0RGVmYXVsdHNfKCk7Ci0gICAgdGhpcy5p
bml0RmllbGRzXyh2YWx1ZXMpOwotICB9Ci0KLQotICBVc2JEZXZpY2VfSXNvY2hyb25vdXNUcmFu
c2Zlck91dF9QYXJhbXMucHJvdG90eXBlLmluaXREZWZhdWx0c18gPSBmdW5jdGlvbigpIHsKLSAg
ICB0aGlzLmVuZHBvaW50TnVtYmVyID0gMDsKLSAgICB0aGlzLnRpbWVvdXQgPSAwOwotICAgIHRo
aXMuZGF0YSA9IG51bGw7Ci0gICAgdGhpcy5wYWNrZXRMZW5ndGhzID0gbnVsbDsKLSAgfTsKLSAg
VXNiRGV2aWNlX0lzb2Nocm9ub3VzVHJhbnNmZXJPdXRfUGFyYW1zLnByb3RvdHlwZS5pbml0Rmll
bGRzXyA9IGZ1bmN0aW9uKGZpZWxkcykgewotICAgIGZvcih2YXIgZmllbGQgaW4gZmllbGRzKSB7
Ci0gICAgICAgIGlmICh0aGlzLmhhc093blByb3BlcnR5KGZpZWxkKSkKLSAgICAgICAgICB0aGlz
W2ZpZWxkXSA9IGZpZWxkc1tmaWVsZF07Ci0gICAgfQotICB9OwotCi0gIFVzYkRldmljZV9Jc29j
aHJvbm91c1RyYW5zZmVyT3V0X1BhcmFtcy52YWxpZGF0ZSA9IGZ1bmN0aW9uKG1lc3NhZ2VWYWxp
ZGF0b3IsIG9mZnNldCkgewotICAgIHZhciBlcnI7Ci0gICAgZXJyID0gbWVzc2FnZVZhbGlkYXRv
ci52YWxpZGF0ZVN0cnVjdEhlYWRlcihvZmZzZXQsIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplKTsK
LSAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCi0gICAgICAg
IHJldHVybiBlcnI7Ci0KLSAgICB2YXIga1ZlcnNpb25TaXplcyA9IFsKLSAgICAgIHt2ZXJzaW9u
OiAwLCBudW1CeXRlczogMzJ9Ci0gICAgXTsKLSAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZh
bGlkYXRlU3RydWN0VmVyc2lvbihvZmZzZXQsIGtWZXJzaW9uU2l6ZXMpOwotICAgIGlmIChlcnIg
IT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKLSAgICAgICAgcmV0dXJuIGVycjsK
LQotCi0KLSAgICAvLyB2YWxpZGF0ZSBVc2JEZXZpY2VfSXNvY2hyb25vdXNUcmFuc2Zlck91dF9Q
YXJhbXMuZGF0YQotICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVBcnJheVBvaW50
ZXIob2Zmc2V0ICsgY29kZWMua1N0cnVjdEhlYWRlclNpemUgKyA4LCAxLCBjb2RlYy5VaW50OCwg
ZmFsc2UsIFswXSwgMCk7Ci0gICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJv
ci5OT05FKQotICAgICAgICByZXR1cm4gZXJyOwotCi0KLSAgICAvLyB2YWxpZGF0ZSBVc2JEZXZp
Y2VfSXNvY2hyb25vdXNUcmFuc2Zlck91dF9QYXJhbXMucGFja2V0TGVuZ3RocwotICAgIGVyciA9
IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVBcnJheVBvaW50ZXIob2Zmc2V0ICsgY29kZWMua1N0
cnVjdEhlYWRlclNpemUgKyAxNiwgNCwgY29kZWMuVWludDMyLCBmYWxzZSwgWzBdLCAwKTsKLSAg
ICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCi0gICAgICAgIHJl
dHVybiBlcnI7Ci0KLQotICAgIHJldHVybiB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkU7
Ci0gIH07Ci0KLSAgVXNiRGV2aWNlX0lzb2Nocm9ub3VzVHJhbnNmZXJPdXRfUGFyYW1zLmVuY29k
ZWRTaXplID0gY29kZWMua1N0cnVjdEhlYWRlclNpemUgKyAyNDsKLQotICBVc2JEZXZpY2VfSXNv
Y2hyb25vdXNUcmFuc2Zlck91dF9QYXJhbXMuZGVjb2RlID0gZnVuY3Rpb24oZGVjb2Rlcikgewot
ICAgIHZhciBwYWNrZWQ7Ci0gICAgdmFyIHZhbCA9IG5ldyBVc2JEZXZpY2VfSXNvY2hyb25vdXNU
cmFuc2Zlck91dF9QYXJhbXMoKTsKLSAgICB2YXIgbnVtYmVyT2ZCeXRlcyA9IGRlY29kZXIucmVh
ZFVpbnQzMigpOwotICAgIHZhciB2ZXJzaW9uID0gZGVjb2Rlci5yZWFkVWludDMyKCk7Ci0gICAg
dmFsLmVuZHBvaW50TnVtYmVyID0gZGVjb2Rlci5kZWNvZGVTdHJ1Y3QoY29kZWMuVWludDgpOwot
ICAgIGRlY29kZXIuc2tpcCgxKTsKLSAgICBkZWNvZGVyLnNraXAoMSk7Ci0gICAgZGVjb2Rlci5z
a2lwKDEpOwotICAgIHZhbC50aW1lb3V0ID0gZGVjb2Rlci5kZWNvZGVTdHJ1Y3QoY29kZWMuVWlu
dDMyKTsKLSAgICB2YWwuZGF0YSA9IGRlY29kZXIuZGVjb2RlQXJyYXlQb2ludGVyKGNvZGVjLlVp
bnQ4KTsKLSAgICB2YWwucGFja2V0TGVuZ3RocyA9IGRlY29kZXIuZGVjb2RlQXJyYXlQb2ludGVy
KGNvZGVjLlVpbnQzMik7Ci0gICAgcmV0dXJuIHZhbDsKLSAgfTsKLQotICBVc2JEZXZpY2VfSXNv
Y2hyb25vdXNUcmFuc2Zlck91dF9QYXJhbXMuZW5jb2RlID0gZnVuY3Rpb24oZW5jb2RlciwgdmFs
KSB7Ci0gICAgdmFyIHBhY2tlZDsKLSAgICBlbmNvZGVyLndyaXRlVWludDMyKFVzYkRldmljZV9J
c29jaHJvbm91c1RyYW5zZmVyT3V0X1BhcmFtcy5lbmNvZGVkU2l6ZSk7Ci0gICAgZW5jb2Rlci53
cml0ZVVpbnQzMigwKTsKLSAgICBlbmNvZGVyLmVuY29kZVN0cnVjdChjb2RlYy5VaW50OCwgdmFs
LmVuZHBvaW50TnVtYmVyKTsKLSAgICBlbmNvZGVyLnNraXAoMSk7Ci0gICAgZW5jb2Rlci5za2lw
KDEpOwotICAgIGVuY29kZXIuc2tpcCgxKTsKLSAgICBlbmNvZGVyLmVuY29kZVN0cnVjdChjb2Rl
Yy5VaW50MzIsIHZhbC50aW1lb3V0KTsKLSAgICBlbmNvZGVyLmVuY29kZUFycmF5UG9pbnRlcihj
b2RlYy5VaW50OCwgdmFsLmRhdGEpOwotICAgIGVuY29kZXIuZW5jb2RlQXJyYXlQb2ludGVyKGNv
ZGVjLlVpbnQzMiwgdmFsLnBhY2tldExlbmd0aHMpOwotICB9OwotICBmdW5jdGlvbiBVc2JEZXZp
Y2VfSXNvY2hyb25vdXNUcmFuc2Zlck91dF9SZXNwb25zZVBhcmFtcyh2YWx1ZXMpIHsKLSAgICB0
aGlzLmluaXREZWZhdWx0c18oKTsKLSAgICB0aGlzLmluaXRGaWVsZHNfKHZhbHVlcyk7Ci0gIH0K
LQotCi0gIFVzYkRldmljZV9Jc29jaHJvbm91c1RyYW5zZmVyT3V0X1Jlc3BvbnNlUGFyYW1zLnBy
b3RvdHlwZS5pbml0RGVmYXVsdHNfID0gZnVuY3Rpb24oKSB7Ci0gICAgdGhpcy5wYWNrZXRzID0g
bnVsbDsKLSAgfTsKLSAgVXNiRGV2aWNlX0lzb2Nocm9ub3VzVHJhbnNmZXJPdXRfUmVzcG9uc2VQ
YXJhbXMucHJvdG90eXBlLmluaXRGaWVsZHNfID0gZnVuY3Rpb24oZmllbGRzKSB7Ci0gICAgZm9y
KHZhciBmaWVsZCBpbiBmaWVsZHMpIHsKLSAgICAgICAgaWYgKHRoaXMuaGFzT3duUHJvcGVydHko
ZmllbGQpKQotICAgICAgICAgIHRoaXNbZmllbGRdID0gZmllbGRzW2ZpZWxkXTsKLSAgICB9Ci0g
IH07Ci0KLSAgVXNiRGV2aWNlX0lzb2Nocm9ub3VzVHJhbnNmZXJPdXRfUmVzcG9uc2VQYXJhbXMu
dmFsaWRhdGUgPSBmdW5jdGlvbihtZXNzYWdlVmFsaWRhdG9yLCBvZmZzZXQpIHsKLSAgICB2YXIg
ZXJyOwotICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RIZWFkZXIob2Zm
c2V0LCBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSk7Ci0gICAgaWYgKGVyciAhPT0gdmFsaWRhdG9y
LnZhbGlkYXRpb25FcnJvci5OT05FKQotICAgICAgICByZXR1cm4gZXJyOwotCi0gICAgdmFyIGtW
ZXJzaW9uU2l6ZXMgPSBbCi0gICAgICB7dmVyc2lvbjogMCwgbnVtQnl0ZXM6IDE2fQotICAgIF07
Ci0gICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdFZlcnNpb24ob2Zmc2V0
LCBrVmVyc2lvblNpemVzKTsKLSAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVy
cm9yLk5PTkUpCi0gICAgICAgIHJldHVybiBlcnI7Ci0KLQotICAgIC8vIHZhbGlkYXRlIFVzYkRl
dmljZV9Jc29jaHJvbm91c1RyYW5zZmVyT3V0X1Jlc3BvbnNlUGFyYW1zLnBhY2tldHMKLSAgICBl
cnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlQXJyYXlQb2ludGVyKG9mZnNldCArIGNvZGVj
LmtTdHJ1Y3RIZWFkZXJTaXplICsgMCwgOCwgbmV3IGNvZGVjLlBvaW50ZXJUbyhVc2JJc29jaHJv
bm91c1BhY2tldCksIGZhbHNlLCBbMF0sIDApOwotICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52
YWxpZGF0aW9uRXJyb3IuTk9ORSkKLSAgICAgICAgcmV0dXJuIGVycjsKLQotICAgIHJldHVybiB2
YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkU7Ci0gIH07Ci0KLSAgVXNiRGV2aWNlX0lzb2No
cm9ub3VzVHJhbnNmZXJPdXRfUmVzcG9uc2VQYXJhbXMuZW5jb2RlZFNpemUgPSBjb2RlYy5rU3Ry
dWN0SGVhZGVyU2l6ZSArIDg7Ci0KLSAgVXNiRGV2aWNlX0lzb2Nocm9ub3VzVHJhbnNmZXJPdXRf
UmVzcG9uc2VQYXJhbXMuZGVjb2RlID0gZnVuY3Rpb24oZGVjb2RlcikgewotICAgIHZhciBwYWNr
ZWQ7Ci0gICAgdmFyIHZhbCA9IG5ldyBVc2JEZXZpY2VfSXNvY2hyb25vdXNUcmFuc2Zlck91dF9S
ZXNwb25zZVBhcmFtcygpOwotICAgIHZhciBudW1iZXJPZkJ5dGVzID0gZGVjb2Rlci5yZWFkVWlu
dDMyKCk7Ci0gICAgdmFyIHZlcnNpb24gPSBkZWNvZGVyLnJlYWRVaW50MzIoKTsKLSAgICB2YWwu
cGFja2V0cyA9IGRlY29kZXIuZGVjb2RlQXJyYXlQb2ludGVyKG5ldyBjb2RlYy5Qb2ludGVyVG8o
VXNiSXNvY2hyb25vdXNQYWNrZXQpKTsKLSAgICByZXR1cm4gdmFsOwotICB9OwotCi0gIFVzYkRl
dmljZV9Jc29jaHJvbm91c1RyYW5zZmVyT3V0X1Jlc3BvbnNlUGFyYW1zLmVuY29kZSA9IGZ1bmN0
aW9uKGVuY29kZXIsIHZhbCkgewotICAgIHZhciBwYWNrZWQ7Ci0gICAgZW5jb2Rlci53cml0ZVVp
bnQzMihVc2JEZXZpY2VfSXNvY2hyb25vdXNUcmFuc2Zlck91dF9SZXNwb25zZVBhcmFtcy5lbmNv
ZGVkU2l6ZSk7Ci0gICAgZW5jb2Rlci53cml0ZVVpbnQzMigwKTsKLSAgICBlbmNvZGVyLmVuY29k
ZUFycmF5UG9pbnRlcihuZXcgY29kZWMuUG9pbnRlclRvKFVzYklzb2Nocm9ub3VzUGFja2V0KSwg
dmFsLnBhY2tldHMpOwotICB9OwotICBmdW5jdGlvbiBVc2JEZXZpY2VDbGllbnRfT25EZXZpY2VP
cGVuZWRfUGFyYW1zKHZhbHVlcykgewotICAgIHRoaXMuaW5pdERlZmF1bHRzXygpOwotICAgIHRo
aXMuaW5pdEZpZWxkc18odmFsdWVzKTsKLSAgfQotCi0KLSAgVXNiRGV2aWNlQ2xpZW50X09uRGV2
aWNlT3BlbmVkX1BhcmFtcy5wcm90b3R5cGUuaW5pdERlZmF1bHRzXyA9IGZ1bmN0aW9uKCkgewot
ICB9OwotICBVc2JEZXZpY2VDbGllbnRfT25EZXZpY2VPcGVuZWRfUGFyYW1zLnByb3RvdHlwZS5p
bml0RmllbGRzXyA9IGZ1bmN0aW9uKGZpZWxkcykgewotICAgIGZvcih2YXIgZmllbGQgaW4gZmll
bGRzKSB7Ci0gICAgICAgIGlmICh0aGlzLmhhc093blByb3BlcnR5KGZpZWxkKSkKLSAgICAgICAg
ICB0aGlzW2ZpZWxkXSA9IGZpZWxkc1tmaWVsZF07Ci0gICAgfQotICB9OwotCi0gIFVzYkRldmlj
ZUNsaWVudF9PbkRldmljZU9wZW5lZF9QYXJhbXMudmFsaWRhdGUgPSBmdW5jdGlvbihtZXNzYWdl
VmFsaWRhdG9yLCBvZmZzZXQpIHsKLSAgICB2YXIgZXJyOwotICAgIGVyciA9IG1lc3NhZ2VWYWxp
ZGF0b3IudmFsaWRhdGVTdHJ1Y3RIZWFkZXIob2Zmc2V0LCBjb2RlYy5rU3RydWN0SGVhZGVyU2l6
ZSk7Ci0gICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQotICAg
ICAgICByZXR1cm4gZXJyOwotCi0gICAgdmFyIGtWZXJzaW9uU2l6ZXMgPSBbCi0gICAgICB7dmVy
c2lvbjogMCwgbnVtQnl0ZXM6IDh9Ci0gICAgXTsKLSAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9y
LnZhbGlkYXRlU3RydWN0VmVyc2lvbihvZmZzZXQsIGtWZXJzaW9uU2l6ZXMpOwotICAgIGlmIChl
cnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKLSAgICAgICAgcmV0dXJuIGVy
cjsKLQotICAgIHJldHVybiB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkU7Ci0gIH07Ci0K
LSAgVXNiRGV2aWNlQ2xpZW50X09uRGV2aWNlT3BlbmVkX1BhcmFtcy5lbmNvZGVkU2l6ZSA9IGNv
ZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgMDsKLQotICBVc2JEZXZpY2VDbGllbnRfT25EZXZpY2VP
cGVuZWRfUGFyYW1zLmRlY29kZSA9IGZ1bmN0aW9uKGRlY29kZXIpIHsKLSAgICB2YXIgcGFja2Vk
OwotICAgIHZhciB2YWwgPSBuZXcgVXNiRGV2aWNlQ2xpZW50X09uRGV2aWNlT3BlbmVkX1BhcmFt
cygpOwotICAgIHZhciBudW1iZXJPZkJ5dGVzID0gZGVjb2Rlci5yZWFkVWludDMyKCk7Ci0gICAg
dmFyIHZlcnNpb24gPSBkZWNvZGVyLnJlYWRVaW50MzIoKTsKLSAgICByZXR1cm4gdmFsOwotICB9
OwotCi0gIFVzYkRldmljZUNsaWVudF9PbkRldmljZU9wZW5lZF9QYXJhbXMuZW5jb2RlID0gZnVu
Y3Rpb24oZW5jb2RlciwgdmFsKSB7Ci0gICAgdmFyIHBhY2tlZDsKLSAgICBlbmNvZGVyLndyaXRl
VWludDMyKFVzYkRldmljZUNsaWVudF9PbkRldmljZU9wZW5lZF9QYXJhbXMuZW5jb2RlZFNpemUp
OwotICAgIGVuY29kZXIud3JpdGVVaW50MzIoMCk7Ci0gIH07Ci0gIGZ1bmN0aW9uIFVzYkRldmlj
ZUNsaWVudF9PbkRldmljZUNsb3NlZF9QYXJhbXModmFsdWVzKSB7Ci0gICAgdGhpcy5pbml0RGVm
YXVsdHNfKCk7Ci0gICAgdGhpcy5pbml0RmllbGRzXyh2YWx1ZXMpOwotICB9Ci0KLQotICBVc2JE
ZXZpY2VDbGllbnRfT25EZXZpY2VDbG9zZWRfUGFyYW1zLnByb3RvdHlwZS5pbml0RGVmYXVsdHNf
ID0gZnVuY3Rpb24oKSB7Ci0gIH07Ci0gIFVzYkRldmljZUNsaWVudF9PbkRldmljZUNsb3NlZF9Q
YXJhbXMucHJvdG90eXBlLmluaXRGaWVsZHNfID0gZnVuY3Rpb24oZmllbGRzKSB7Ci0gICAgZm9y
KHZhciBmaWVsZCBpbiBmaWVsZHMpIHsKLSAgICAgICAgaWYgKHRoaXMuaGFzT3duUHJvcGVydHko
ZmllbGQpKQotICAgICAgICAgIHRoaXNbZmllbGRdID0gZmllbGRzW2ZpZWxkXTsKLSAgICB9Ci0g
IH07Ci0KLSAgVXNiRGV2aWNlQ2xpZW50X09uRGV2aWNlQ2xvc2VkX1BhcmFtcy52YWxpZGF0ZSA9
IGZ1bmN0aW9uKG1lc3NhZ2VWYWxpZGF0b3IsIG9mZnNldCkgewotICAgIHZhciBlcnI7Ci0gICAg
ZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdEhlYWRlcihvZmZzZXQsIGNvZGVj
LmtTdHJ1Y3RIZWFkZXJTaXplKTsKLSAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlv
bkVycm9yLk5PTkUpCi0gICAgICAgIHJldHVybiBlcnI7Ci0KLSAgICB2YXIga1ZlcnNpb25TaXpl
cyA9IFsKLSAgICAgIHt2ZXJzaW9uOiAwLCBudW1CeXRlczogOH0KLSAgICBdOwotICAgIGVyciA9
IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RWZXJzaW9uKG9mZnNldCwga1ZlcnNpb25T
aXplcyk7Ci0gICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQot
ICAgICAgICByZXR1cm4gZXJyOwotCi0gICAgcmV0dXJuIHZhbGlkYXRvci52YWxpZGF0aW9uRXJy
b3IuTk9ORTsKLSAgfTsKLQotICBVc2JEZXZpY2VDbGllbnRfT25EZXZpY2VDbG9zZWRfUGFyYW1z
LmVuY29kZWRTaXplID0gY29kZWMua1N0cnVjdEhlYWRlclNpemUgKyAwOwotCi0gIFVzYkRldmlj
ZUNsaWVudF9PbkRldmljZUNsb3NlZF9QYXJhbXMuZGVjb2RlID0gZnVuY3Rpb24oZGVjb2Rlcikg
ewotICAgIHZhciBwYWNrZWQ7Ci0gICAgdmFyIHZhbCA9IG5ldyBVc2JEZXZpY2VDbGllbnRfT25E
ZXZpY2VDbG9zZWRfUGFyYW1zKCk7Ci0gICAgdmFyIG51bWJlck9mQnl0ZXMgPSBkZWNvZGVyLnJl
YWRVaW50MzIoKTsKLSAgICB2YXIgdmVyc2lvbiA9IGRlY29kZXIucmVhZFVpbnQzMigpOwotICAg
IHJldHVybiB2YWw7Ci0gIH07Ci0KLSAgVXNiRGV2aWNlQ2xpZW50X09uRGV2aWNlQ2xvc2VkX1Bh
cmFtcy5lbmNvZGUgPSBmdW5jdGlvbihlbmNvZGVyLCB2YWwpIHsKLSAgICB2YXIgcGFja2VkOwot
ICAgIGVuY29kZXIud3JpdGVVaW50MzIoVXNiRGV2aWNlQ2xpZW50X09uRGV2aWNlQ2xvc2VkX1Bh
cmFtcy5lbmNvZGVkU2l6ZSk7Ci0gICAgZW5jb2Rlci53cml0ZVVpbnQzMigwKTsKLSAgfTsKLSAg
dmFyIGtVc2JEZXZpY2VfT3Blbl9OYW1lID0gMDsKLSAgdmFyIGtVc2JEZXZpY2VfQ2xvc2VfTmFt
ZSA9IDE7Ci0gIHZhciBrVXNiRGV2aWNlX1NldENvbmZpZ3VyYXRpb25fTmFtZSA9IDI7Ci0gIHZh
ciBrVXNiRGV2aWNlX0NsYWltSW50ZXJmYWNlX05hbWUgPSAzOwotICB2YXIga1VzYkRldmljZV9S
ZWxlYXNlSW50ZXJmYWNlX05hbWUgPSA0OwotICB2YXIga1VzYkRldmljZV9TZXRJbnRlcmZhY2VB
bHRlcm5hdGVTZXR0aW5nX05hbWUgPSA1OwotICB2YXIga1VzYkRldmljZV9SZXNldF9OYW1lID0g
NjsKLSAgdmFyIGtVc2JEZXZpY2VfQ2xlYXJIYWx0X05hbWUgPSA3OwotICB2YXIga1VzYkRldmlj
ZV9Db250cm9sVHJhbnNmZXJJbl9OYW1lID0gODsKLSAgdmFyIGtVc2JEZXZpY2VfQ29udHJvbFRy
YW5zZmVyT3V0X05hbWUgPSA5OwotICB2YXIga1VzYkRldmljZV9HZW5lcmljVHJhbnNmZXJJbl9O
YW1lID0gMTA7Ci0gIHZhciBrVXNiRGV2aWNlX0dlbmVyaWNUcmFuc2Zlck91dF9OYW1lID0gMTE7
Ci0gIHZhciBrVXNiRGV2aWNlX0lzb2Nocm9ub3VzVHJhbnNmZXJJbl9OYW1lID0gMTI7Ci0gIHZh
ciBrVXNiRGV2aWNlX0lzb2Nocm9ub3VzVHJhbnNmZXJPdXRfTmFtZSA9IDEzOwotCi0gIGZ1bmN0
aW9uIFVzYkRldmljZVB0cihoYW5kbGVPclB0ckluZm8pIHsKLSAgICB0aGlzLnB0ciA9IG5ldyBi
aW5kaW5ncy5JbnRlcmZhY2VQdHJDb250cm9sbGVyKFVzYkRldmljZSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZU9yUHRySW5mbyk7Ci0g
IH0KLQotICBmdW5jdGlvbiBVc2JEZXZpY2VBc3NvY2lhdGVkUHRyKGFzc29jaWF0ZWRJbnRlcmZh
Y2VQdHJJbmZvKSB7Ci0gICAgdGhpcy5wdHIgPSBuZXcgYXNzb2NpYXRlZEJpbmRpbmdzLkFzc29j
aWF0ZWRJbnRlcmZhY2VQdHJDb250cm9sbGVyKAotICAgICAgICBVc2JEZXZpY2UsIGFzc29jaWF0
ZWRJbnRlcmZhY2VQdHJJbmZvKTsKLSAgfQotCi0gIFVzYkRldmljZUFzc29jaWF0ZWRQdHIucHJv
dG90eXBlID0KLSAgICAgIE9iamVjdC5jcmVhdGUoVXNiRGV2aWNlUHRyLnByb3RvdHlwZSk7Ci0g
IFVzYkRldmljZUFzc29jaWF0ZWRQdHIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0KLSAgICAgIFVz
YkRldmljZUFzc29jaWF0ZWRQdHI7Ci0KLSAgZnVuY3Rpb24gVXNiRGV2aWNlUHJveHkocmVjZWl2
ZXIpIHsKLSAgICB0aGlzLnJlY2VpdmVyXyA9IHJlY2VpdmVyOwotICB9Ci0gIFVzYkRldmljZVB0
ci5wcm90b3R5cGUub3BlbiA9IGZ1bmN0aW9uKCkgewotICAgIHJldHVybiBVc2JEZXZpY2VQcm94
eS5wcm90b3R5cGUub3BlbgotICAgICAgICAuYXBwbHkodGhpcy5wdHIuZ2V0UHJveHkoKSwgYXJn
dW1lbnRzKTsKLSAgfTsKLQotICBVc2JEZXZpY2VQcm94eS5wcm90b3R5cGUub3BlbiA9IGZ1bmN0
aW9uKCkgewotICAgIHZhciBwYXJhbXNfID0gbmV3IFVzYkRldmljZV9PcGVuX1BhcmFtcygpOwot
ICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3QpIHsKLSAgICAg
IHZhciBidWlsZGVyID0gbmV3IGNvZGVjLk1lc3NhZ2VWMUJ1aWxkZXIoCi0gICAgICAgICAga1Vz
YkRldmljZV9PcGVuX05hbWUsCi0gICAgICAgICAgY29kZWMuYWxpZ24oVXNiRGV2aWNlX09wZW5f
UGFyYW1zLmVuY29kZWRTaXplKSwKLSAgICAgICAgICBjb2RlYy5rTWVzc2FnZUV4cGVjdHNSZXNw
b25zZSwgMCk7Ci0gICAgICBidWlsZGVyLmVuY29kZVN0cnVjdChVc2JEZXZpY2VfT3Blbl9QYXJh
bXMsIHBhcmFtc18pOwotICAgICAgdmFyIG1lc3NhZ2UgPSBidWlsZGVyLmZpbmlzaCgpOwotICAg
ICAgdGhpcy5yZWNlaXZlcl8uYWNjZXB0QW5kRXhwZWN0UmVzcG9uc2UobWVzc2FnZSkudGhlbihm
dW5jdGlvbihtZXNzYWdlKSB7Ci0gICAgICAgIHZhciByZWFkZXIgPSBuZXcgY29kZWMuTWVzc2Fn
ZVJlYWRlcihtZXNzYWdlKTsKLSAgICAgICAgdmFyIHJlc3BvbnNlUGFyYW1zID0KLSAgICAgICAg
ICAgIHJlYWRlci5kZWNvZGVTdHJ1Y3QoVXNiRGV2aWNlX09wZW5fUmVzcG9uc2VQYXJhbXMpOwot
ICAgICAgICByZXNvbHZlKHJlc3BvbnNlUGFyYW1zKTsKLSAgICAgIH0pLmNhdGNoKGZ1bmN0aW9u
KHJlc3VsdCkgewotICAgICAgICByZWplY3QoRXJyb3IoIkNvbm5lY3Rpb24gZXJyb3I6ICIgKyBy
ZXN1bHQpKTsKLSAgICAgIH0pOwotICAgIH0uYmluZCh0aGlzKSk7Ci0gIH07Ci0gIFVzYkRldmlj
ZVB0ci5wcm90b3R5cGUuY2xvc2UgPSBmdW5jdGlvbigpIHsKLSAgICByZXR1cm4gVXNiRGV2aWNl
UHJveHkucHJvdG90eXBlLmNsb3NlCi0gICAgICAgIC5hcHBseSh0aGlzLnB0ci5nZXRQcm94eSgp
LCBhcmd1bWVudHMpOwotICB9OwotCi0gIFVzYkRldmljZVByb3h5LnByb3RvdHlwZS5jbG9zZSA9
IGZ1bmN0aW9uKCkgewotICAgIHZhciBwYXJhbXNfID0gbmV3IFVzYkRldmljZV9DbG9zZV9QYXJh
bXMoKTsKLSAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7
Ci0gICAgICB2YXIgYnVpbGRlciA9IG5ldyBjb2RlYy5NZXNzYWdlVjFCdWlsZGVyKAotICAgICAg
ICAgIGtVc2JEZXZpY2VfQ2xvc2VfTmFtZSwKLSAgICAgICAgICBjb2RlYy5hbGlnbihVc2JEZXZp
Y2VfQ2xvc2VfUGFyYW1zLmVuY29kZWRTaXplKSwKLSAgICAgICAgICBjb2RlYy5rTWVzc2FnZUV4
cGVjdHNSZXNwb25zZSwgMCk7Ci0gICAgICBidWlsZGVyLmVuY29kZVN0cnVjdChVc2JEZXZpY2Vf
Q2xvc2VfUGFyYW1zLCBwYXJhbXNfKTsKLSAgICAgIHZhciBtZXNzYWdlID0gYnVpbGRlci5maW5p
c2goKTsKLSAgICAgIHRoaXMucmVjZWl2ZXJfLmFjY2VwdEFuZEV4cGVjdFJlc3BvbnNlKG1lc3Nh
Z2UpLnRoZW4oZnVuY3Rpb24obWVzc2FnZSkgewotICAgICAgICB2YXIgcmVhZGVyID0gbmV3IGNv
ZGVjLk1lc3NhZ2VSZWFkZXIobWVzc2FnZSk7Ci0gICAgICAgIHZhciByZXNwb25zZVBhcmFtcyA9
Ci0gICAgICAgICAgICByZWFkZXIuZGVjb2RlU3RydWN0KFVzYkRldmljZV9DbG9zZV9SZXNwb25z
ZVBhcmFtcyk7Ci0gICAgICAgIHJlc29sdmUocmVzcG9uc2VQYXJhbXMpOwotICAgICAgfSkuY2F0
Y2goZnVuY3Rpb24ocmVzdWx0KSB7Ci0gICAgICAgIHJlamVjdChFcnJvcigiQ29ubmVjdGlvbiBl
cnJvcjogIiArIHJlc3VsdCkpOwotICAgICAgfSk7Ci0gICAgfS5iaW5kKHRoaXMpKTsKLSAgfTsK
LSAgVXNiRGV2aWNlUHRyLnByb3RvdHlwZS5zZXRDb25maWd1cmF0aW9uID0gZnVuY3Rpb24oKSB7
Ci0gICAgcmV0dXJuIFVzYkRldmljZVByb3h5LnByb3RvdHlwZS5zZXRDb25maWd1cmF0aW9uCi0g
ICAgICAgIC5hcHBseSh0aGlzLnB0ci5nZXRQcm94eSgpLCBhcmd1bWVudHMpOwotICB9OwotCi0g
IFVzYkRldmljZVByb3h5LnByb3RvdHlwZS5zZXRDb25maWd1cmF0aW9uID0gZnVuY3Rpb24odmFs
dWUpIHsKLSAgICB2YXIgcGFyYW1zXyA9IG5ldyBVc2JEZXZpY2VfU2V0Q29uZmlndXJhdGlvbl9Q
YXJhbXMoKTsKLSAgICBwYXJhbXNfLnZhbHVlID0gdmFsdWU7Ci0gICAgcmV0dXJuIG5ldyBQcm9t
aXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkgewotICAgICAgdmFyIGJ1aWxkZXIgPSBuZXcg
Y29kZWMuTWVzc2FnZVYxQnVpbGRlcigKLSAgICAgICAgICBrVXNiRGV2aWNlX1NldENvbmZpZ3Vy
YXRpb25fTmFtZSwKLSAgICAgICAgICBjb2RlYy5hbGlnbihVc2JEZXZpY2VfU2V0Q29uZmlndXJh
dGlvbl9QYXJhbXMuZW5jb2RlZFNpemUpLAotICAgICAgICAgIGNvZGVjLmtNZXNzYWdlRXhwZWN0
c1Jlc3BvbnNlLCAwKTsKLSAgICAgIGJ1aWxkZXIuZW5jb2RlU3RydWN0KFVzYkRldmljZV9TZXRD
b25maWd1cmF0aW9uX1BhcmFtcywgcGFyYW1zXyk7Ci0gICAgICB2YXIgbWVzc2FnZSA9IGJ1aWxk
ZXIuZmluaXNoKCk7Ci0gICAgICB0aGlzLnJlY2VpdmVyXy5hY2NlcHRBbmRFeHBlY3RSZXNwb25z
ZShtZXNzYWdlKS50aGVuKGZ1bmN0aW9uKG1lc3NhZ2UpIHsKLSAgICAgICAgdmFyIHJlYWRlciA9
IG5ldyBjb2RlYy5NZXNzYWdlUmVhZGVyKG1lc3NhZ2UpOwotICAgICAgICB2YXIgcmVzcG9uc2VQ
YXJhbXMgPQotICAgICAgICAgICAgcmVhZGVyLmRlY29kZVN0cnVjdChVc2JEZXZpY2VfU2V0Q29u
ZmlndXJhdGlvbl9SZXNwb25zZVBhcmFtcyk7Ci0gICAgICAgIHJlc29sdmUocmVzcG9uc2VQYXJh
bXMpOwotICAgICAgfSkuY2F0Y2goZnVuY3Rpb24ocmVzdWx0KSB7Ci0gICAgICAgIHJlamVjdChF
cnJvcigiQ29ubmVjdGlvbiBlcnJvcjogIiArIHJlc3VsdCkpOwotICAgICAgfSk7Ci0gICAgfS5i
aW5kKHRoaXMpKTsKLSAgfTsKLSAgVXNiRGV2aWNlUHRyLnByb3RvdHlwZS5jbGFpbUludGVyZmFj
ZSA9IGZ1bmN0aW9uKCkgewotICAgIHJldHVybiBVc2JEZXZpY2VQcm94eS5wcm90b3R5cGUuY2xh
aW1JbnRlcmZhY2UKLSAgICAgICAgLmFwcGx5KHRoaXMucHRyLmdldFByb3h5KCksIGFyZ3VtZW50
cyk7Ci0gIH07Ci0KLSAgVXNiRGV2aWNlUHJveHkucHJvdG90eXBlLmNsYWltSW50ZXJmYWNlID0g
ZnVuY3Rpb24oaW50ZXJmYWNlTnVtYmVyKSB7Ci0gICAgdmFyIHBhcmFtc18gPSBuZXcgVXNiRGV2
aWNlX0NsYWltSW50ZXJmYWNlX1BhcmFtcygpOwotICAgIHBhcmFtc18uaW50ZXJmYWNlTnVtYmVy
ID0gaW50ZXJmYWNlTnVtYmVyOwotICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNv
bHZlLCByZWplY3QpIHsKLSAgICAgIHZhciBidWlsZGVyID0gbmV3IGNvZGVjLk1lc3NhZ2VWMUJ1
aWxkZXIoCi0gICAgICAgICAga1VzYkRldmljZV9DbGFpbUludGVyZmFjZV9OYW1lLAotICAgICAg
ICAgIGNvZGVjLmFsaWduKFVzYkRldmljZV9DbGFpbUludGVyZmFjZV9QYXJhbXMuZW5jb2RlZFNp
emUpLAotICAgICAgICAgIGNvZGVjLmtNZXNzYWdlRXhwZWN0c1Jlc3BvbnNlLCAwKTsKLSAgICAg
IGJ1aWxkZXIuZW5jb2RlU3RydWN0KFVzYkRldmljZV9DbGFpbUludGVyZmFjZV9QYXJhbXMsIHBh
cmFtc18pOwotICAgICAgdmFyIG1lc3NhZ2UgPSBidWlsZGVyLmZpbmlzaCgpOwotICAgICAgdGhp
cy5yZWNlaXZlcl8uYWNjZXB0QW5kRXhwZWN0UmVzcG9uc2UobWVzc2FnZSkudGhlbihmdW5jdGlv
bihtZXNzYWdlKSB7Ci0gICAgICAgIHZhciByZWFkZXIgPSBuZXcgY29kZWMuTWVzc2FnZVJlYWRl
cihtZXNzYWdlKTsKLSAgICAgICAgdmFyIHJlc3BvbnNlUGFyYW1zID0KLSAgICAgICAgICAgIHJl
YWRlci5kZWNvZGVTdHJ1Y3QoVXNiRGV2aWNlX0NsYWltSW50ZXJmYWNlX1Jlc3BvbnNlUGFyYW1z
KTsKLSAgICAgICAgcmVzb2x2ZShyZXNwb25zZVBhcmFtcyk7Ci0gICAgICB9KS5jYXRjaChmdW5j
dGlvbihyZXN1bHQpIHsKLSAgICAgICAgcmVqZWN0KEVycm9yKCJDb25uZWN0aW9uIGVycm9yOiAi
ICsgcmVzdWx0KSk7Ci0gICAgICB9KTsKLSAgICB9LmJpbmQodGhpcykpOwotICB9OwotICBVc2JE
ZXZpY2VQdHIucHJvdG90eXBlLnJlbGVhc2VJbnRlcmZhY2UgPSBmdW5jdGlvbigpIHsKLSAgICBy
ZXR1cm4gVXNiRGV2aWNlUHJveHkucHJvdG90eXBlLnJlbGVhc2VJbnRlcmZhY2UKLSAgICAgICAg
LmFwcGx5KHRoaXMucHRyLmdldFByb3h5KCksIGFyZ3VtZW50cyk7Ci0gIH07Ci0KLSAgVXNiRGV2
aWNlUHJveHkucHJvdG90eXBlLnJlbGVhc2VJbnRlcmZhY2UgPSBmdW5jdGlvbihpbnRlcmZhY2VO
dW1iZXIpIHsKLSAgICB2YXIgcGFyYW1zXyA9IG5ldyBVc2JEZXZpY2VfUmVsZWFzZUludGVyZmFj
ZV9QYXJhbXMoKTsKLSAgICBwYXJhbXNfLmludGVyZmFjZU51bWJlciA9IGludGVyZmFjZU51bWJl
cjsKLSAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7Ci0g
ICAgICB2YXIgYnVpbGRlciA9IG5ldyBjb2RlYy5NZXNzYWdlVjFCdWlsZGVyKAotICAgICAgICAg
IGtVc2JEZXZpY2VfUmVsZWFzZUludGVyZmFjZV9OYW1lLAotICAgICAgICAgIGNvZGVjLmFsaWdu
KFVzYkRldmljZV9SZWxlYXNlSW50ZXJmYWNlX1BhcmFtcy5lbmNvZGVkU2l6ZSksCi0gICAgICAg
ICAgY29kZWMua01lc3NhZ2VFeHBlY3RzUmVzcG9uc2UsIDApOwotICAgICAgYnVpbGRlci5lbmNv
ZGVTdHJ1Y3QoVXNiRGV2aWNlX1JlbGVhc2VJbnRlcmZhY2VfUGFyYW1zLCBwYXJhbXNfKTsKLSAg
ICAgIHZhciBtZXNzYWdlID0gYnVpbGRlci5maW5pc2goKTsKLSAgICAgIHRoaXMucmVjZWl2ZXJf
LmFjY2VwdEFuZEV4cGVjdFJlc3BvbnNlKG1lc3NhZ2UpLnRoZW4oZnVuY3Rpb24obWVzc2FnZSkg
ewotICAgICAgICB2YXIgcmVhZGVyID0gbmV3IGNvZGVjLk1lc3NhZ2VSZWFkZXIobWVzc2FnZSk7
Ci0gICAgICAgIHZhciByZXNwb25zZVBhcmFtcyA9Ci0gICAgICAgICAgICByZWFkZXIuZGVjb2Rl
U3RydWN0KFVzYkRldmljZV9SZWxlYXNlSW50ZXJmYWNlX1Jlc3BvbnNlUGFyYW1zKTsKLSAgICAg
ICAgcmVzb2x2ZShyZXNwb25zZVBhcmFtcyk7Ci0gICAgICB9KS5jYXRjaChmdW5jdGlvbihyZXN1
bHQpIHsKLSAgICAgICAgcmVqZWN0KEVycm9yKCJDb25uZWN0aW9uIGVycm9yOiAiICsgcmVzdWx0
KSk7Ci0gICAgICB9KTsKLSAgICB9LmJpbmQodGhpcykpOwotICB9OwotICBVc2JEZXZpY2VQdHIu
cHJvdG90eXBlLnNldEludGVyZmFjZUFsdGVybmF0ZVNldHRpbmcgPSBmdW5jdGlvbigpIHsKLSAg
ICByZXR1cm4gVXNiRGV2aWNlUHJveHkucHJvdG90eXBlLnNldEludGVyZmFjZUFsdGVybmF0ZVNl
dHRpbmcKLSAgICAgICAgLmFwcGx5KHRoaXMucHRyLmdldFByb3h5KCksIGFyZ3VtZW50cyk7Ci0g
IH07Ci0KLSAgVXNiRGV2aWNlUHJveHkucHJvdG90eXBlLnNldEludGVyZmFjZUFsdGVybmF0ZVNl
dHRpbmcgPSBmdW5jdGlvbihpbnRlcmZhY2VOdW1iZXIsIGFsdGVybmF0ZVNldHRpbmcpIHsKLSAg
ICB2YXIgcGFyYW1zXyA9IG5ldyBVc2JEZXZpY2VfU2V0SW50ZXJmYWNlQWx0ZXJuYXRlU2V0dGlu
Z19QYXJhbXMoKTsKLSAgICBwYXJhbXNfLmludGVyZmFjZU51bWJlciA9IGludGVyZmFjZU51bWJl
cjsKLSAgICBwYXJhbXNfLmFsdGVybmF0ZVNldHRpbmcgPSBhbHRlcm5hdGVTZXR0aW5nOwotICAg
IHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3QpIHsKLSAgICAgIHZh
ciBidWlsZGVyID0gbmV3IGNvZGVjLk1lc3NhZ2VWMUJ1aWxkZXIoCi0gICAgICAgICAga1VzYkRl
dmljZV9TZXRJbnRlcmZhY2VBbHRlcm5hdGVTZXR0aW5nX05hbWUsCi0gICAgICAgICAgY29kZWMu
YWxpZ24oVXNiRGV2aWNlX1NldEludGVyZmFjZUFsdGVybmF0ZVNldHRpbmdfUGFyYW1zLmVuY29k
ZWRTaXplKSwKLSAgICAgICAgICBjb2RlYy5rTWVzc2FnZUV4cGVjdHNSZXNwb25zZSwgMCk7Ci0g
ICAgICBidWlsZGVyLmVuY29kZVN0cnVjdChVc2JEZXZpY2VfU2V0SW50ZXJmYWNlQWx0ZXJuYXRl
U2V0dGluZ19QYXJhbXMsIHBhcmFtc18pOwotICAgICAgdmFyIG1lc3NhZ2UgPSBidWlsZGVyLmZp
bmlzaCgpOwotICAgICAgdGhpcy5yZWNlaXZlcl8uYWNjZXB0QW5kRXhwZWN0UmVzcG9uc2UobWVz
c2FnZSkudGhlbihmdW5jdGlvbihtZXNzYWdlKSB7Ci0gICAgICAgIHZhciByZWFkZXIgPSBuZXcg
Y29kZWMuTWVzc2FnZVJlYWRlcihtZXNzYWdlKTsKLSAgICAgICAgdmFyIHJlc3BvbnNlUGFyYW1z
ID0KLSAgICAgICAgICAgIHJlYWRlci5kZWNvZGVTdHJ1Y3QoVXNiRGV2aWNlX1NldEludGVyZmFj
ZUFsdGVybmF0ZVNldHRpbmdfUmVzcG9uc2VQYXJhbXMpOwotICAgICAgICByZXNvbHZlKHJlc3Bv
bnNlUGFyYW1zKTsKLSAgICAgIH0pLmNhdGNoKGZ1bmN0aW9uKHJlc3VsdCkgewotICAgICAgICBy
ZWplY3QoRXJyb3IoIkNvbm5lY3Rpb24gZXJyb3I6ICIgKyByZXN1bHQpKTsKLSAgICAgIH0pOwot
ICAgIH0uYmluZCh0aGlzKSk7Ci0gIH07Ci0gIFVzYkRldmljZVB0ci5wcm90b3R5cGUucmVzZXQg
PSBmdW5jdGlvbigpIHsKLSAgICByZXR1cm4gVXNiRGV2aWNlUHJveHkucHJvdG90eXBlLnJlc2V0
Ci0gICAgICAgIC5hcHBseSh0aGlzLnB0ci5nZXRQcm94eSgpLCBhcmd1bWVudHMpOwotICB9Owot
Ci0gIFVzYkRldmljZVByb3h5LnByb3RvdHlwZS5yZXNldCA9IGZ1bmN0aW9uKCkgewotICAgIHZh
ciBwYXJhbXNfID0gbmV3IFVzYkRldmljZV9SZXNldF9QYXJhbXMoKTsKLSAgICByZXR1cm4gbmV3
IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7Ci0gICAgICB2YXIgYnVpbGRlciA9
IG5ldyBjb2RlYy5NZXNzYWdlVjFCdWlsZGVyKAotICAgICAgICAgIGtVc2JEZXZpY2VfUmVzZXRf
TmFtZSwKLSAgICAgICAgICBjb2RlYy5hbGlnbihVc2JEZXZpY2VfUmVzZXRfUGFyYW1zLmVuY29k
ZWRTaXplKSwKLSAgICAgICAgICBjb2RlYy5rTWVzc2FnZUV4cGVjdHNSZXNwb25zZSwgMCk7Ci0g
ICAgICBidWlsZGVyLmVuY29kZVN0cnVjdChVc2JEZXZpY2VfUmVzZXRfUGFyYW1zLCBwYXJhbXNf
KTsKLSAgICAgIHZhciBtZXNzYWdlID0gYnVpbGRlci5maW5pc2goKTsKLSAgICAgIHRoaXMucmVj
ZWl2ZXJfLmFjY2VwdEFuZEV4cGVjdFJlc3BvbnNlKG1lc3NhZ2UpLnRoZW4oZnVuY3Rpb24obWVz
c2FnZSkgewotICAgICAgICB2YXIgcmVhZGVyID0gbmV3IGNvZGVjLk1lc3NhZ2VSZWFkZXIobWVz
c2FnZSk7Ci0gICAgICAgIHZhciByZXNwb25zZVBhcmFtcyA9Ci0gICAgICAgICAgICByZWFkZXIu
ZGVjb2RlU3RydWN0KFVzYkRldmljZV9SZXNldF9SZXNwb25zZVBhcmFtcyk7Ci0gICAgICAgIHJl
c29sdmUocmVzcG9uc2VQYXJhbXMpOwotICAgICAgfSkuY2F0Y2goZnVuY3Rpb24ocmVzdWx0KSB7
Ci0gICAgICAgIHJlamVjdChFcnJvcigiQ29ubmVjdGlvbiBlcnJvcjogIiArIHJlc3VsdCkpOwot
ICAgICAgfSk7Ci0gICAgfS5iaW5kKHRoaXMpKTsKLSAgfTsKLSAgVXNiRGV2aWNlUHRyLnByb3Rv
dHlwZS5jbGVhckhhbHQgPSBmdW5jdGlvbigpIHsKLSAgICByZXR1cm4gVXNiRGV2aWNlUHJveHku
cHJvdG90eXBlLmNsZWFySGFsdAotICAgICAgICAuYXBwbHkodGhpcy5wdHIuZ2V0UHJveHkoKSwg
YXJndW1lbnRzKTsKLSAgfTsKLQotICBVc2JEZXZpY2VQcm94eS5wcm90b3R5cGUuY2xlYXJIYWx0
ID0gZnVuY3Rpb24oZW5kcG9pbnQpIHsKLSAgICB2YXIgcGFyYW1zXyA9IG5ldyBVc2JEZXZpY2Vf
Q2xlYXJIYWx0X1BhcmFtcygpOwotICAgIHBhcmFtc18uZW5kcG9pbnQgPSBlbmRwb2ludDsKLSAg
ICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7Ci0gICAgICB2
YXIgYnVpbGRlciA9IG5ldyBjb2RlYy5NZXNzYWdlVjFCdWlsZGVyKAotICAgICAgICAgIGtVc2JE
ZXZpY2VfQ2xlYXJIYWx0X05hbWUsCi0gICAgICAgICAgY29kZWMuYWxpZ24oVXNiRGV2aWNlX0Ns
ZWFySGFsdF9QYXJhbXMuZW5jb2RlZFNpemUpLAotICAgICAgICAgIGNvZGVjLmtNZXNzYWdlRXhw
ZWN0c1Jlc3BvbnNlLCAwKTsKLSAgICAgIGJ1aWxkZXIuZW5jb2RlU3RydWN0KFVzYkRldmljZV9D
bGVhckhhbHRfUGFyYW1zLCBwYXJhbXNfKTsKLSAgICAgIHZhciBtZXNzYWdlID0gYnVpbGRlci5m
aW5pc2goKTsKLSAgICAgIHRoaXMucmVjZWl2ZXJfLmFjY2VwdEFuZEV4cGVjdFJlc3BvbnNlKG1l
c3NhZ2UpLnRoZW4oZnVuY3Rpb24obWVzc2FnZSkgewotICAgICAgICB2YXIgcmVhZGVyID0gbmV3
IGNvZGVjLk1lc3NhZ2VSZWFkZXIobWVzc2FnZSk7Ci0gICAgICAgIHZhciByZXNwb25zZVBhcmFt
cyA9Ci0gICAgICAgICAgICByZWFkZXIuZGVjb2RlU3RydWN0KFVzYkRldmljZV9DbGVhckhhbHRf
UmVzcG9uc2VQYXJhbXMpOwotICAgICAgICByZXNvbHZlKHJlc3BvbnNlUGFyYW1zKTsKLSAgICAg
IH0pLmNhdGNoKGZ1bmN0aW9uKHJlc3VsdCkgewotICAgICAgICByZWplY3QoRXJyb3IoIkNvbm5l
Y3Rpb24gZXJyb3I6ICIgKyByZXN1bHQpKTsKLSAgICAgIH0pOwotICAgIH0uYmluZCh0aGlzKSk7
Ci0gIH07Ci0gIFVzYkRldmljZVB0ci5wcm90b3R5cGUuY29udHJvbFRyYW5zZmVySW4gPSBmdW5j
dGlvbigpIHsKLSAgICByZXR1cm4gVXNiRGV2aWNlUHJveHkucHJvdG90eXBlLmNvbnRyb2xUcmFu
c2ZlckluCi0gICAgICAgIC5hcHBseSh0aGlzLnB0ci5nZXRQcm94eSgpLCBhcmd1bWVudHMpOwot
ICB9OwotCi0gIFVzYkRldmljZVByb3h5LnByb3RvdHlwZS5jb250cm9sVHJhbnNmZXJJbiA9IGZ1
bmN0aW9uKHBhcmFtcywgbGVuZ3RoLCB0aW1lb3V0KSB7Ci0gICAgdmFyIHBhcmFtc18gPSBuZXcg
VXNiRGV2aWNlX0NvbnRyb2xUcmFuc2ZlckluX1BhcmFtcygpOwotICAgIHBhcmFtc18ucGFyYW1z
ID0gcGFyYW1zOwotICAgIHBhcmFtc18ubGVuZ3RoID0gbGVuZ3RoOwotICAgIHBhcmFtc18udGlt
ZW91dCA9IHRpbWVvdXQ7Ci0gICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUs
IHJlamVjdCkgewotICAgICAgdmFyIGJ1aWxkZXIgPSBuZXcgY29kZWMuTWVzc2FnZVYxQnVpbGRl
cigKLSAgICAgICAgICBrVXNiRGV2aWNlX0NvbnRyb2xUcmFuc2ZlckluX05hbWUsCi0gICAgICAg
ICAgY29kZWMuYWxpZ24oVXNiRGV2aWNlX0NvbnRyb2xUcmFuc2ZlckluX1BhcmFtcy5lbmNvZGVk
U2l6ZSksCi0gICAgICAgICAgY29kZWMua01lc3NhZ2VFeHBlY3RzUmVzcG9uc2UsIDApOwotICAg
ICAgYnVpbGRlci5lbmNvZGVTdHJ1Y3QoVXNiRGV2aWNlX0NvbnRyb2xUcmFuc2ZlckluX1BhcmFt
cywgcGFyYW1zXyk7Ci0gICAgICB2YXIgbWVzc2FnZSA9IGJ1aWxkZXIuZmluaXNoKCk7Ci0gICAg
ICB0aGlzLnJlY2VpdmVyXy5hY2NlcHRBbmRFeHBlY3RSZXNwb25zZShtZXNzYWdlKS50aGVuKGZ1
bmN0aW9uKG1lc3NhZ2UpIHsKLSAgICAgICAgdmFyIHJlYWRlciA9IG5ldyBjb2RlYy5NZXNzYWdl
UmVhZGVyKG1lc3NhZ2UpOwotICAgICAgICB2YXIgcmVzcG9uc2VQYXJhbXMgPQotICAgICAgICAg
ICAgcmVhZGVyLmRlY29kZVN0cnVjdChVc2JEZXZpY2VfQ29udHJvbFRyYW5zZmVySW5fUmVzcG9u
c2VQYXJhbXMpOwotICAgICAgICByZXNvbHZlKHJlc3BvbnNlUGFyYW1zKTsKLSAgICAgIH0pLmNh
dGNoKGZ1bmN0aW9uKHJlc3VsdCkgewotICAgICAgICByZWplY3QoRXJyb3IoIkNvbm5lY3Rpb24g
ZXJyb3I6ICIgKyByZXN1bHQpKTsKLSAgICAgIH0pOwotICAgIH0uYmluZCh0aGlzKSk7Ci0gIH07
Ci0gIFVzYkRldmljZVB0ci5wcm90b3R5cGUuY29udHJvbFRyYW5zZmVyT3V0ID0gZnVuY3Rpb24o
KSB7Ci0gICAgcmV0dXJuIFVzYkRldmljZVByb3h5LnByb3RvdHlwZS5jb250cm9sVHJhbnNmZXJP
dXQKLSAgICAgICAgLmFwcGx5KHRoaXMucHRyLmdldFByb3h5KCksIGFyZ3VtZW50cyk7Ci0gIH07
Ci0KLSAgVXNiRGV2aWNlUHJveHkucHJvdG90eXBlLmNvbnRyb2xUcmFuc2Zlck91dCA9IGZ1bmN0
aW9uKHBhcmFtcywgZGF0YSwgdGltZW91dCkgewotICAgIHZhciBwYXJhbXNfID0gbmV3IFVzYkRl
dmljZV9Db250cm9sVHJhbnNmZXJPdXRfUGFyYW1zKCk7Ci0gICAgcGFyYW1zXy5wYXJhbXMgPSBw
YXJhbXM7Ci0gICAgcGFyYW1zXy5kYXRhID0gZGF0YTsKLSAgICBwYXJhbXNfLnRpbWVvdXQgPSB0
aW1lb3V0OwotICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3Qp
IHsKLSAgICAgIHZhciBidWlsZGVyID0gbmV3IGNvZGVjLk1lc3NhZ2VWMUJ1aWxkZXIoCi0gICAg
ICAgICAga1VzYkRldmljZV9Db250cm9sVHJhbnNmZXJPdXRfTmFtZSwKLSAgICAgICAgICBjb2Rl
Yy5hbGlnbihVc2JEZXZpY2VfQ29udHJvbFRyYW5zZmVyT3V0X1BhcmFtcy5lbmNvZGVkU2l6ZSks
Ci0gICAgICAgICAgY29kZWMua01lc3NhZ2VFeHBlY3RzUmVzcG9uc2UsIDApOwotICAgICAgYnVp
bGRlci5lbmNvZGVTdHJ1Y3QoVXNiRGV2aWNlX0NvbnRyb2xUcmFuc2Zlck91dF9QYXJhbXMsIHBh
cmFtc18pOwotICAgICAgdmFyIG1lc3NhZ2UgPSBidWlsZGVyLmZpbmlzaCgpOwotICAgICAgdGhp
cy5yZWNlaXZlcl8uYWNjZXB0QW5kRXhwZWN0UmVzcG9uc2UobWVzc2FnZSkudGhlbihmdW5jdGlv
bihtZXNzYWdlKSB7Ci0gICAgICAgIHZhciByZWFkZXIgPSBuZXcgY29kZWMuTWVzc2FnZVJlYWRl
cihtZXNzYWdlKTsKLSAgICAgICAgdmFyIHJlc3BvbnNlUGFyYW1zID0KLSAgICAgICAgICAgIHJl
YWRlci5kZWNvZGVTdHJ1Y3QoVXNiRGV2aWNlX0NvbnRyb2xUcmFuc2Zlck91dF9SZXNwb25zZVBh
cmFtcyk7Ci0gICAgICAgIHJlc29sdmUocmVzcG9uc2VQYXJhbXMpOwotICAgICAgfSkuY2F0Y2go
ZnVuY3Rpb24ocmVzdWx0KSB7Ci0gICAgICAgIHJlamVjdChFcnJvcigiQ29ubmVjdGlvbiBlcnJv
cjogIiArIHJlc3VsdCkpOwotICAgICAgfSk7Ci0gICAgfS5iaW5kKHRoaXMpKTsKLSAgfTsKLSAg
VXNiRGV2aWNlUHRyLnByb3RvdHlwZS5nZW5lcmljVHJhbnNmZXJJbiA9IGZ1bmN0aW9uKCkgewot
ICAgIHJldHVybiBVc2JEZXZpY2VQcm94eS5wcm90b3R5cGUuZ2VuZXJpY1RyYW5zZmVySW4KLSAg
ICAgICAgLmFwcGx5KHRoaXMucHRyLmdldFByb3h5KCksIGFyZ3VtZW50cyk7Ci0gIH07Ci0KLSAg
VXNiRGV2aWNlUHJveHkucHJvdG90eXBlLmdlbmVyaWNUcmFuc2ZlckluID0gZnVuY3Rpb24oZW5k
cG9pbnROdW1iZXIsIGxlbmd0aCwgdGltZW91dCkgewotICAgIHZhciBwYXJhbXNfID0gbmV3IFVz
YkRldmljZV9HZW5lcmljVHJhbnNmZXJJbl9QYXJhbXMoKTsKLSAgICBwYXJhbXNfLmVuZHBvaW50
TnVtYmVyID0gZW5kcG9pbnROdW1iZXI7Ci0gICAgcGFyYW1zXy5sZW5ndGggPSBsZW5ndGg7Ci0g
ICAgcGFyYW1zXy50aW1lb3V0ID0gdGltZW91dDsKLSAgICByZXR1cm4gbmV3IFByb21pc2UoZnVu
Y3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7Ci0gICAgICB2YXIgYnVpbGRlciA9IG5ldyBjb2RlYy5N
ZXNzYWdlVjFCdWlsZGVyKAotICAgICAgICAgIGtVc2JEZXZpY2VfR2VuZXJpY1RyYW5zZmVySW5f
TmFtZSwKLSAgICAgICAgICBjb2RlYy5hbGlnbihVc2JEZXZpY2VfR2VuZXJpY1RyYW5zZmVySW5f
UGFyYW1zLmVuY29kZWRTaXplKSwKLSAgICAgICAgICBjb2RlYy5rTWVzc2FnZUV4cGVjdHNSZXNw
b25zZSwgMCk7Ci0gICAgICBidWlsZGVyLmVuY29kZVN0cnVjdChVc2JEZXZpY2VfR2VuZXJpY1Ry
YW5zZmVySW5fUGFyYW1zLCBwYXJhbXNfKTsKLSAgICAgIHZhciBtZXNzYWdlID0gYnVpbGRlci5m
aW5pc2goKTsKLSAgICAgIHRoaXMucmVjZWl2ZXJfLmFjY2VwdEFuZEV4cGVjdFJlc3BvbnNlKG1l
c3NhZ2UpLnRoZW4oZnVuY3Rpb24obWVzc2FnZSkgewotICAgICAgICB2YXIgcmVhZGVyID0gbmV3
IGNvZGVjLk1lc3NhZ2VSZWFkZXIobWVzc2FnZSk7Ci0gICAgICAgIHZhciByZXNwb25zZVBhcmFt
cyA9Ci0gICAgICAgICAgICByZWFkZXIuZGVjb2RlU3RydWN0KFVzYkRldmljZV9HZW5lcmljVHJh
bnNmZXJJbl9SZXNwb25zZVBhcmFtcyk7Ci0gICAgICAgIHJlc29sdmUocmVzcG9uc2VQYXJhbXMp
OwotICAgICAgfSkuY2F0Y2goZnVuY3Rpb24ocmVzdWx0KSB7Ci0gICAgICAgIHJlamVjdChFcnJv
cigiQ29ubmVjdGlvbiBlcnJvcjogIiArIHJlc3VsdCkpOwotICAgICAgfSk7Ci0gICAgfS5iaW5k
KHRoaXMpKTsKLSAgfTsKLSAgVXNiRGV2aWNlUHRyLnByb3RvdHlwZS5nZW5lcmljVHJhbnNmZXJP
dXQgPSBmdW5jdGlvbigpIHsKLSAgICByZXR1cm4gVXNiRGV2aWNlUHJveHkucHJvdG90eXBlLmdl
bmVyaWNUcmFuc2Zlck91dAotICAgICAgICAuYXBwbHkodGhpcy5wdHIuZ2V0UHJveHkoKSwgYXJn
dW1lbnRzKTsKLSAgfTsKLQotICBVc2JEZXZpY2VQcm94eS5wcm90b3R5cGUuZ2VuZXJpY1RyYW5z
ZmVyT3V0ID0gZnVuY3Rpb24oZW5kcG9pbnROdW1iZXIsIGRhdGEsIHRpbWVvdXQpIHsKLSAgICB2
YXIgcGFyYW1zXyA9IG5ldyBVc2JEZXZpY2VfR2VuZXJpY1RyYW5zZmVyT3V0X1BhcmFtcygpOwot
ICAgIHBhcmFtc18uZW5kcG9pbnROdW1iZXIgPSBlbmRwb2ludE51bWJlcjsKLSAgICBwYXJhbXNf
LmRhdGEgPSBkYXRhOwotICAgIHBhcmFtc18udGltZW91dCA9IHRpbWVvdXQ7Ci0gICAgcmV0dXJu
IG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkgewotICAgICAgdmFyIGJ1aWxk
ZXIgPSBuZXcgY29kZWMuTWVzc2FnZVYxQnVpbGRlcigKLSAgICAgICAgICBrVXNiRGV2aWNlX0dl
bmVyaWNUcmFuc2Zlck91dF9OYW1lLAotICAgICAgICAgIGNvZGVjLmFsaWduKFVzYkRldmljZV9H
ZW5lcmljVHJhbnNmZXJPdXRfUGFyYW1zLmVuY29kZWRTaXplKSwKLSAgICAgICAgICBjb2RlYy5r
TWVzc2FnZUV4cGVjdHNSZXNwb25zZSwgMCk7Ci0gICAgICBidWlsZGVyLmVuY29kZVN0cnVjdChV
c2JEZXZpY2VfR2VuZXJpY1RyYW5zZmVyT3V0X1BhcmFtcywgcGFyYW1zXyk7Ci0gICAgICB2YXIg
bWVzc2FnZSA9IGJ1aWxkZXIuZmluaXNoKCk7Ci0gICAgICB0aGlzLnJlY2VpdmVyXy5hY2NlcHRB
bmRFeHBlY3RSZXNwb25zZShtZXNzYWdlKS50aGVuKGZ1bmN0aW9uKG1lc3NhZ2UpIHsKLSAgICAg
ICAgdmFyIHJlYWRlciA9IG5ldyBjb2RlYy5NZXNzYWdlUmVhZGVyKG1lc3NhZ2UpOwotICAgICAg
ICB2YXIgcmVzcG9uc2VQYXJhbXMgPQotICAgICAgICAgICAgcmVhZGVyLmRlY29kZVN0cnVjdChV
c2JEZXZpY2VfR2VuZXJpY1RyYW5zZmVyT3V0X1Jlc3BvbnNlUGFyYW1zKTsKLSAgICAgICAgcmVz
b2x2ZShyZXNwb25zZVBhcmFtcyk7Ci0gICAgICB9KS5jYXRjaChmdW5jdGlvbihyZXN1bHQpIHsK
LSAgICAgICAgcmVqZWN0KEVycm9yKCJDb25uZWN0aW9uIGVycm9yOiAiICsgcmVzdWx0KSk7Ci0g
ICAgICB9KTsKLSAgICB9LmJpbmQodGhpcykpOwotICB9OwotICBVc2JEZXZpY2VQdHIucHJvdG90
eXBlLmlzb2Nocm9ub3VzVHJhbnNmZXJJbiA9IGZ1bmN0aW9uKCkgewotICAgIHJldHVybiBVc2JE
ZXZpY2VQcm94eS5wcm90b3R5cGUuaXNvY2hyb25vdXNUcmFuc2ZlckluCi0gICAgICAgIC5hcHBs
eSh0aGlzLnB0ci5nZXRQcm94eSgpLCBhcmd1bWVudHMpOwotICB9OwotCi0gIFVzYkRldmljZVBy
b3h5LnByb3RvdHlwZS5pc29jaHJvbm91c1RyYW5zZmVySW4gPSBmdW5jdGlvbihlbmRwb2ludE51
bWJlciwgcGFja2V0TGVuZ3RocywgdGltZW91dCkgewotICAgIHZhciBwYXJhbXNfID0gbmV3IFVz
YkRldmljZV9Jc29jaHJvbm91c1RyYW5zZmVySW5fUGFyYW1zKCk7Ci0gICAgcGFyYW1zXy5lbmRw
b2ludE51bWJlciA9IGVuZHBvaW50TnVtYmVyOwotICAgIHBhcmFtc18ucGFja2V0TGVuZ3RocyA9
IHBhY2tldExlbmd0aHM7Ci0gICAgcGFyYW1zXy50aW1lb3V0ID0gdGltZW91dDsKLSAgICByZXR1
cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7Ci0gICAgICB2YXIgYnVp
bGRlciA9IG5ldyBjb2RlYy5NZXNzYWdlVjFCdWlsZGVyKAotICAgICAgICAgIGtVc2JEZXZpY2Vf
SXNvY2hyb25vdXNUcmFuc2ZlckluX05hbWUsCi0gICAgICAgICAgY29kZWMuYWxpZ24oVXNiRGV2
aWNlX0lzb2Nocm9ub3VzVHJhbnNmZXJJbl9QYXJhbXMuZW5jb2RlZFNpemUpLAotICAgICAgICAg
IGNvZGVjLmtNZXNzYWdlRXhwZWN0c1Jlc3BvbnNlLCAwKTsKLSAgICAgIGJ1aWxkZXIuZW5jb2Rl
U3RydWN0KFVzYkRldmljZV9Jc29jaHJvbm91c1RyYW5zZmVySW5fUGFyYW1zLCBwYXJhbXNfKTsK
LSAgICAgIHZhciBtZXNzYWdlID0gYnVpbGRlci5maW5pc2goKTsKLSAgICAgIHRoaXMucmVjZWl2
ZXJfLmFjY2VwdEFuZEV4cGVjdFJlc3BvbnNlKG1lc3NhZ2UpLnRoZW4oZnVuY3Rpb24obWVzc2Fn
ZSkgewotICAgICAgICB2YXIgcmVhZGVyID0gbmV3IGNvZGVjLk1lc3NhZ2VSZWFkZXIobWVzc2Fn
ZSk7Ci0gICAgICAgIHZhciByZXNwb25zZVBhcmFtcyA9Ci0gICAgICAgICAgICByZWFkZXIuZGVj
b2RlU3RydWN0KFVzYkRldmljZV9Jc29jaHJvbm91c1RyYW5zZmVySW5fUmVzcG9uc2VQYXJhbXMp
OwotICAgICAgICByZXNvbHZlKHJlc3BvbnNlUGFyYW1zKTsKLSAgICAgIH0pLmNhdGNoKGZ1bmN0
aW9uKHJlc3VsdCkgewotICAgICAgICByZWplY3QoRXJyb3IoIkNvbm5lY3Rpb24gZXJyb3I6ICIg
KyByZXN1bHQpKTsKLSAgICAgIH0pOwotICAgIH0uYmluZCh0aGlzKSk7Ci0gIH07Ci0gIFVzYkRl
dmljZVB0ci5wcm90b3R5cGUuaXNvY2hyb25vdXNUcmFuc2Zlck91dCA9IGZ1bmN0aW9uKCkgewot
ICAgIHJldHVybiBVc2JEZXZpY2VQcm94eS5wcm90b3R5cGUuaXNvY2hyb25vdXNUcmFuc2Zlck91
dAotICAgICAgICAuYXBwbHkodGhpcy5wdHIuZ2V0UHJveHkoKSwgYXJndW1lbnRzKTsKLSAgfTsK
LQotICBVc2JEZXZpY2VQcm94eS5wcm90b3R5cGUuaXNvY2hyb25vdXNUcmFuc2Zlck91dCA9IGZ1
bmN0aW9uKGVuZHBvaW50TnVtYmVyLCBkYXRhLCBwYWNrZXRMZW5ndGhzLCB0aW1lb3V0KSB7Ci0g
ICAgdmFyIHBhcmFtc18gPSBuZXcgVXNiRGV2aWNlX0lzb2Nocm9ub3VzVHJhbnNmZXJPdXRfUGFy
YW1zKCk7Ci0gICAgcGFyYW1zXy5lbmRwb2ludE51bWJlciA9IGVuZHBvaW50TnVtYmVyOwotICAg
IHBhcmFtc18uZGF0YSA9IGRhdGE7Ci0gICAgcGFyYW1zXy5wYWNrZXRMZW5ndGhzID0gcGFja2V0
TGVuZ3RoczsKLSAgICBwYXJhbXNfLnRpbWVvdXQgPSB0aW1lb3V0OwotICAgIHJldHVybiBuZXcg
UHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3QpIHsKLSAgICAgIHZhciBidWlsZGVyID0g
bmV3IGNvZGVjLk1lc3NhZ2VWMUJ1aWxkZXIoCi0gICAgICAgICAga1VzYkRldmljZV9Jc29jaHJv
bm91c1RyYW5zZmVyT3V0X05hbWUsCi0gICAgICAgICAgY29kZWMuYWxpZ24oVXNiRGV2aWNlX0lz
b2Nocm9ub3VzVHJhbnNmZXJPdXRfUGFyYW1zLmVuY29kZWRTaXplKSwKLSAgICAgICAgICBjb2Rl
Yy5rTWVzc2FnZUV4cGVjdHNSZXNwb25zZSwgMCk7Ci0gICAgICBidWlsZGVyLmVuY29kZVN0cnVj
dChVc2JEZXZpY2VfSXNvY2hyb25vdXNUcmFuc2Zlck91dF9QYXJhbXMsIHBhcmFtc18pOwotICAg
ICAgdmFyIG1lc3NhZ2UgPSBidWlsZGVyLmZpbmlzaCgpOwotICAgICAgdGhpcy5yZWNlaXZlcl8u
YWNjZXB0QW5kRXhwZWN0UmVzcG9uc2UobWVzc2FnZSkudGhlbihmdW5jdGlvbihtZXNzYWdlKSB7
Ci0gICAgICAgIHZhciByZWFkZXIgPSBuZXcgY29kZWMuTWVzc2FnZVJlYWRlcihtZXNzYWdlKTsK
LSAgICAgICAgdmFyIHJlc3BvbnNlUGFyYW1zID0KLSAgICAgICAgICAgIHJlYWRlci5kZWNvZGVT
dHJ1Y3QoVXNiRGV2aWNlX0lzb2Nocm9ub3VzVHJhbnNmZXJPdXRfUmVzcG9uc2VQYXJhbXMpOwot
ICAgICAgICByZXNvbHZlKHJlc3BvbnNlUGFyYW1zKTsKLSAgICAgIH0pLmNhdGNoKGZ1bmN0aW9u
KHJlc3VsdCkgewotICAgICAgICByZWplY3QoRXJyb3IoIkNvbm5lY3Rpb24gZXJyb3I6ICIgKyBy
ZXN1bHQpKTsKLSAgICAgIH0pOwotICAgIH0uYmluZCh0aGlzKSk7Ci0gIH07Ci0KLSAgZnVuY3Rp
b24gVXNiRGV2aWNlU3R1YihkZWxlZ2F0ZSkgewotICAgIHRoaXMuZGVsZWdhdGVfID0gZGVsZWdh
dGU7Ci0gIH0KLSAgVXNiRGV2aWNlU3R1Yi5wcm90b3R5cGUub3BlbiA9IGZ1bmN0aW9uKCkgewot
ICAgIHJldHVybiB0aGlzLmRlbGVnYXRlXyAmJiB0aGlzLmRlbGVnYXRlXy5vcGVuICYmIHRoaXMu
ZGVsZWdhdGVfLm9wZW4oKTsKLSAgfQotICBVc2JEZXZpY2VTdHViLnByb3RvdHlwZS5jbG9zZSA9
IGZ1bmN0aW9uKCkgewotICAgIHJldHVybiB0aGlzLmRlbGVnYXRlXyAmJiB0aGlzLmRlbGVnYXRl
Xy5jbG9zZSAmJiB0aGlzLmRlbGVnYXRlXy5jbG9zZSgpOwotICB9Ci0gIFVzYkRldmljZVN0dWIu
cHJvdG90eXBlLnNldENvbmZpZ3VyYXRpb24gPSBmdW5jdGlvbih2YWx1ZSkgewotICAgIHJldHVy
biB0aGlzLmRlbGVnYXRlXyAmJiB0aGlzLmRlbGVnYXRlXy5zZXRDb25maWd1cmF0aW9uICYmIHRo
aXMuZGVsZWdhdGVfLnNldENvbmZpZ3VyYXRpb24odmFsdWUpOwotICB9Ci0gIFVzYkRldmljZVN0
dWIucHJvdG90eXBlLmNsYWltSW50ZXJmYWNlID0gZnVuY3Rpb24oaW50ZXJmYWNlTnVtYmVyKSB7
Ci0gICAgcmV0dXJuIHRoaXMuZGVsZWdhdGVfICYmIHRoaXMuZGVsZWdhdGVfLmNsYWltSW50ZXJm
YWNlICYmIHRoaXMuZGVsZWdhdGVfLmNsYWltSW50ZXJmYWNlKGludGVyZmFjZU51bWJlcik7Ci0g
IH0KLSAgVXNiRGV2aWNlU3R1Yi5wcm90b3R5cGUucmVsZWFzZUludGVyZmFjZSA9IGZ1bmN0aW9u
KGludGVyZmFjZU51bWJlcikgewotICAgIHJldHVybiB0aGlzLmRlbGVnYXRlXyAmJiB0aGlzLmRl
bGVnYXRlXy5yZWxlYXNlSW50ZXJmYWNlICYmIHRoaXMuZGVsZWdhdGVfLnJlbGVhc2VJbnRlcmZh
Y2UoaW50ZXJmYWNlTnVtYmVyKTsKLSAgfQotICBVc2JEZXZpY2VTdHViLnByb3RvdHlwZS5zZXRJ
bnRlcmZhY2VBbHRlcm5hdGVTZXR0aW5nID0gZnVuY3Rpb24oaW50ZXJmYWNlTnVtYmVyLCBhbHRl
cm5hdGVTZXR0aW5nKSB7Ci0gICAgcmV0dXJuIHRoaXMuZGVsZWdhdGVfICYmIHRoaXMuZGVsZWdh
dGVfLnNldEludGVyZmFjZUFsdGVybmF0ZVNldHRpbmcgJiYgdGhpcy5kZWxlZ2F0ZV8uc2V0SW50
ZXJmYWNlQWx0ZXJuYXRlU2V0dGluZyhpbnRlcmZhY2VOdW1iZXIsIGFsdGVybmF0ZVNldHRpbmcp
OwotICB9Ci0gIFVzYkRldmljZVN0dWIucHJvdG90eXBlLnJlc2V0ID0gZnVuY3Rpb24oKSB7Ci0g
ICAgcmV0dXJuIHRoaXMuZGVsZWdhdGVfICYmIHRoaXMuZGVsZWdhdGVfLnJlc2V0ICYmIHRoaXMu
ZGVsZWdhdGVfLnJlc2V0KCk7Ci0gIH0KLSAgVXNiRGV2aWNlU3R1Yi5wcm90b3R5cGUuY2xlYXJI
YWx0ID0gZnVuY3Rpb24oZW5kcG9pbnQpIHsKLSAgICByZXR1cm4gdGhpcy5kZWxlZ2F0ZV8gJiYg
dGhpcy5kZWxlZ2F0ZV8uY2xlYXJIYWx0ICYmIHRoaXMuZGVsZWdhdGVfLmNsZWFySGFsdChlbmRw
b2ludCk7Ci0gIH0KLSAgVXNiRGV2aWNlU3R1Yi5wcm90b3R5cGUuY29udHJvbFRyYW5zZmVySW4g
PSBmdW5jdGlvbihwYXJhbXMsIGxlbmd0aCwgdGltZW91dCkgewotICAgIHJldHVybiB0aGlzLmRl
bGVnYXRlXyAmJiB0aGlzLmRlbGVnYXRlXy5jb250cm9sVHJhbnNmZXJJbiAmJiB0aGlzLmRlbGVn
YXRlXy5jb250cm9sVHJhbnNmZXJJbihwYXJhbXMsIGxlbmd0aCwgdGltZW91dCk7Ci0gIH0KLSAg
VXNiRGV2aWNlU3R1Yi5wcm90b3R5cGUuY29udHJvbFRyYW5zZmVyT3V0ID0gZnVuY3Rpb24ocGFy
YW1zLCBkYXRhLCB0aW1lb3V0KSB7Ci0gICAgcmV0dXJuIHRoaXMuZGVsZWdhdGVfICYmIHRoaXMu
ZGVsZWdhdGVfLmNvbnRyb2xUcmFuc2Zlck91dCAmJiB0aGlzLmRlbGVnYXRlXy5jb250cm9sVHJh
bnNmZXJPdXQocGFyYW1zLCBkYXRhLCB0aW1lb3V0KTsKLSAgfQotICBVc2JEZXZpY2VTdHViLnBy
b3RvdHlwZS5nZW5lcmljVHJhbnNmZXJJbiA9IGZ1bmN0aW9uKGVuZHBvaW50TnVtYmVyLCBsZW5n
dGgsIHRpbWVvdXQpIHsKLSAgICByZXR1cm4gdGhpcy5kZWxlZ2F0ZV8gJiYgdGhpcy5kZWxlZ2F0
ZV8uZ2VuZXJpY1RyYW5zZmVySW4gJiYgdGhpcy5kZWxlZ2F0ZV8uZ2VuZXJpY1RyYW5zZmVySW4o
ZW5kcG9pbnROdW1iZXIsIGxlbmd0aCwgdGltZW91dCk7Ci0gIH0KLSAgVXNiRGV2aWNlU3R1Yi5w
cm90b3R5cGUuZ2VuZXJpY1RyYW5zZmVyT3V0ID0gZnVuY3Rpb24oZW5kcG9pbnROdW1iZXIsIGRh
dGEsIHRpbWVvdXQpIHsKLSAgICByZXR1cm4gdGhpcy5kZWxlZ2F0ZV8gJiYgdGhpcy5kZWxlZ2F0
ZV8uZ2VuZXJpY1RyYW5zZmVyT3V0ICYmIHRoaXMuZGVsZWdhdGVfLmdlbmVyaWNUcmFuc2Zlck91
dChlbmRwb2ludE51bWJlciwgZGF0YSwgdGltZW91dCk7Ci0gIH0KLSAgVXNiRGV2aWNlU3R1Yi5w
cm90b3R5cGUuaXNvY2hyb25vdXNUcmFuc2ZlckluID0gZnVuY3Rpb24oZW5kcG9pbnROdW1iZXIs
IHBhY2tldExlbmd0aHMsIHRpbWVvdXQpIHsKLSAgICByZXR1cm4gdGhpcy5kZWxlZ2F0ZV8gJiYg
dGhpcy5kZWxlZ2F0ZV8uaXNvY2hyb25vdXNUcmFuc2ZlckluICYmIHRoaXMuZGVsZWdhdGVfLmlz
b2Nocm9ub3VzVHJhbnNmZXJJbihlbmRwb2ludE51bWJlciwgcGFja2V0TGVuZ3RocywgdGltZW91
dCk7Ci0gIH0KLSAgVXNiRGV2aWNlU3R1Yi5wcm90b3R5cGUuaXNvY2hyb25vdXNUcmFuc2Zlck91
dCA9IGZ1bmN0aW9uKGVuZHBvaW50TnVtYmVyLCBkYXRhLCBwYWNrZXRMZW5ndGhzLCB0aW1lb3V0
KSB7Ci0gICAgcmV0dXJuIHRoaXMuZGVsZWdhdGVfICYmIHRoaXMuZGVsZWdhdGVfLmlzb2Nocm9u
b3VzVHJhbnNmZXJPdXQgJiYgdGhpcy5kZWxlZ2F0ZV8uaXNvY2hyb25vdXNUcmFuc2Zlck91dChl
bmRwb2ludE51bWJlciwgZGF0YSwgcGFja2V0TGVuZ3RocywgdGltZW91dCk7Ci0gIH0KLQotICBV
c2JEZXZpY2VTdHViLnByb3RvdHlwZS5hY2NlcHQgPSBmdW5jdGlvbihtZXNzYWdlKSB7Ci0gICAg
dmFyIHJlYWRlciA9IG5ldyBjb2RlYy5NZXNzYWdlUmVhZGVyKG1lc3NhZ2UpOwotICAgIHN3aXRj
aCAocmVhZGVyLm1lc3NhZ2VOYW1lKSB7Ci0gICAgZGVmYXVsdDoKLSAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICB9Ci0gIH07Ci0KLSAgVXNiRGV2aWNlU3R1Yi5wcm90b3R5cGUuYWNjZXB0V2l0aFJl
c3BvbmRlciA9Ci0gICAgICBmdW5jdGlvbihtZXNzYWdlLCByZXNwb25kZXIpIHsKLSAgICB2YXIg
cmVhZGVyID0gbmV3IGNvZGVjLk1lc3NhZ2VSZWFkZXIobWVzc2FnZSk7Ci0gICAgc3dpdGNoIChy
ZWFkZXIubWVzc2FnZU5hbWUpIHsKLSAgICBjYXNlIGtVc2JEZXZpY2VfT3Blbl9OYW1lOgotICAg
ICAgdmFyIHBhcmFtcyA9IHJlYWRlci5kZWNvZGVTdHJ1Y3QoVXNiRGV2aWNlX09wZW5fUGFyYW1z
KTsKLSAgICAgIHRoaXMub3BlbigpLnRoZW4oZnVuY3Rpb24ocmVzcG9uc2UpIHsKLSAgICAgICAg
dmFyIHJlc3BvbnNlUGFyYW1zID0KLSAgICAgICAgICAgIG5ldyBVc2JEZXZpY2VfT3Blbl9SZXNw
b25zZVBhcmFtcygpOwotICAgICAgICByZXNwb25zZVBhcmFtcy5lcnJvciA9IHJlc3BvbnNlLmVy
cm9yOwotICAgICAgICB2YXIgYnVpbGRlciA9IG5ldyBjb2RlYy5NZXNzYWdlVjFCdWlsZGVyKAot
ICAgICAgICAgICAga1VzYkRldmljZV9PcGVuX05hbWUsCi0gICAgICAgICAgICBjb2RlYy5hbGln
bihVc2JEZXZpY2VfT3Blbl9SZXNwb25zZVBhcmFtcy5lbmNvZGVkU2l6ZSksCi0gICAgICAgICAg
ICBjb2RlYy5rTWVzc2FnZUlzUmVzcG9uc2UsIHJlYWRlci5yZXF1ZXN0SUQpOwotICAgICAgICBi
dWlsZGVyLmVuY29kZVN0cnVjdChVc2JEZXZpY2VfT3Blbl9SZXNwb25zZVBhcmFtcywKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2VQYXJhbXMpOwotICAgICAgICB2YXIgbWVz
c2FnZSA9IGJ1aWxkZXIuZmluaXNoKCk7Ci0gICAgICAgIHJlc3BvbmRlci5hY2NlcHQobWVzc2Fn
ZSk7Ci0gICAgICB9KTsKLSAgICAgIHJldHVybiB0cnVlOwotICAgIGNhc2Uga1VzYkRldmljZV9D
bG9zZV9OYW1lOgotICAgICAgdmFyIHBhcmFtcyA9IHJlYWRlci5kZWNvZGVTdHJ1Y3QoVXNiRGV2
aWNlX0Nsb3NlX1BhcmFtcyk7Ci0gICAgICB0aGlzLmNsb3NlKCkudGhlbihmdW5jdGlvbihyZXNw
b25zZSkgewotICAgICAgICB2YXIgcmVzcG9uc2VQYXJhbXMgPQotICAgICAgICAgICAgbmV3IFVz
YkRldmljZV9DbG9zZV9SZXNwb25zZVBhcmFtcygpOwotICAgICAgICB2YXIgYnVpbGRlciA9IG5l
dyBjb2RlYy5NZXNzYWdlVjFCdWlsZGVyKAotICAgICAgICAgICAga1VzYkRldmljZV9DbG9zZV9O
YW1lLAotICAgICAgICAgICAgY29kZWMuYWxpZ24oVXNiRGV2aWNlX0Nsb3NlX1Jlc3BvbnNlUGFy
YW1zLmVuY29kZWRTaXplKSwKLSAgICAgICAgICAgIGNvZGVjLmtNZXNzYWdlSXNSZXNwb25zZSwg
cmVhZGVyLnJlcXVlc3RJRCk7Ci0gICAgICAgIGJ1aWxkZXIuZW5jb2RlU3RydWN0KFVzYkRldmlj
ZV9DbG9zZV9SZXNwb25zZVBhcmFtcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVz
cG9uc2VQYXJhbXMpOwotICAgICAgICB2YXIgbWVzc2FnZSA9IGJ1aWxkZXIuZmluaXNoKCk7Ci0g
ICAgICAgIHJlc3BvbmRlci5hY2NlcHQobWVzc2FnZSk7Ci0gICAgICB9KTsKLSAgICAgIHJldHVy
biB0cnVlOwotICAgIGNhc2Uga1VzYkRldmljZV9TZXRDb25maWd1cmF0aW9uX05hbWU6Ci0gICAg
ICB2YXIgcGFyYW1zID0gcmVhZGVyLmRlY29kZVN0cnVjdChVc2JEZXZpY2VfU2V0Q29uZmlndXJh
dGlvbl9QYXJhbXMpOwotICAgICAgdGhpcy5zZXRDb25maWd1cmF0aW9uKHBhcmFtcy52YWx1ZSku
dGhlbihmdW5jdGlvbihyZXNwb25zZSkgewotICAgICAgICB2YXIgcmVzcG9uc2VQYXJhbXMgPQot
ICAgICAgICAgICAgbmV3IFVzYkRldmljZV9TZXRDb25maWd1cmF0aW9uX1Jlc3BvbnNlUGFyYW1z
KCk7Ci0gICAgICAgIHJlc3BvbnNlUGFyYW1zLnN1Y2Nlc3MgPSByZXNwb25zZS5zdWNjZXNzOwot
ICAgICAgICB2YXIgYnVpbGRlciA9IG5ldyBjb2RlYy5NZXNzYWdlVjFCdWlsZGVyKAotICAgICAg
ICAgICAga1VzYkRldmljZV9TZXRDb25maWd1cmF0aW9uX05hbWUsCi0gICAgICAgICAgICBjb2Rl
Yy5hbGlnbihVc2JEZXZpY2VfU2V0Q29uZmlndXJhdGlvbl9SZXNwb25zZVBhcmFtcy5lbmNvZGVk
U2l6ZSksCi0gICAgICAgICAgICBjb2RlYy5rTWVzc2FnZUlzUmVzcG9uc2UsIHJlYWRlci5yZXF1
ZXN0SUQpOwotICAgICAgICBidWlsZGVyLmVuY29kZVN0cnVjdChVc2JEZXZpY2VfU2V0Q29uZmln
dXJhdGlvbl9SZXNwb25zZVBhcmFtcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVz
cG9uc2VQYXJhbXMpOwotICAgICAgICB2YXIgbWVzc2FnZSA9IGJ1aWxkZXIuZmluaXNoKCk7Ci0g
ICAgICAgIHJlc3BvbmRlci5hY2NlcHQobWVzc2FnZSk7Ci0gICAgICB9KTsKLSAgICAgIHJldHVy
biB0cnVlOwotICAgIGNhc2Uga1VzYkRldmljZV9DbGFpbUludGVyZmFjZV9OYW1lOgotICAgICAg
dmFyIHBhcmFtcyA9IHJlYWRlci5kZWNvZGVTdHJ1Y3QoVXNiRGV2aWNlX0NsYWltSW50ZXJmYWNl
X1BhcmFtcyk7Ci0gICAgICB0aGlzLmNsYWltSW50ZXJmYWNlKHBhcmFtcy5pbnRlcmZhY2VOdW1i
ZXIpLnRoZW4oZnVuY3Rpb24ocmVzcG9uc2UpIHsKLSAgICAgICAgdmFyIHJlc3BvbnNlUGFyYW1z
ID0KLSAgICAgICAgICAgIG5ldyBVc2JEZXZpY2VfQ2xhaW1JbnRlcmZhY2VfUmVzcG9uc2VQYXJh
bXMoKTsKLSAgICAgICAgcmVzcG9uc2VQYXJhbXMuc3VjY2VzcyA9IHJlc3BvbnNlLnN1Y2Nlc3M7
Ci0gICAgICAgIHZhciBidWlsZGVyID0gbmV3IGNvZGVjLk1lc3NhZ2VWMUJ1aWxkZXIoCi0gICAg
ICAgICAgICBrVXNiRGV2aWNlX0NsYWltSW50ZXJmYWNlX05hbWUsCi0gICAgICAgICAgICBjb2Rl
Yy5hbGlnbihVc2JEZXZpY2VfQ2xhaW1JbnRlcmZhY2VfUmVzcG9uc2VQYXJhbXMuZW5jb2RlZFNp
emUpLAotICAgICAgICAgICAgY29kZWMua01lc3NhZ2VJc1Jlc3BvbnNlLCByZWFkZXIucmVxdWVz
dElEKTsKLSAgICAgICAgYnVpbGRlci5lbmNvZGVTdHJ1Y3QoVXNiRGV2aWNlX0NsYWltSW50ZXJm
YWNlX1Jlc3BvbnNlUGFyYW1zLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNwb25z
ZVBhcmFtcyk7Ci0gICAgICAgIHZhciBtZXNzYWdlID0gYnVpbGRlci5maW5pc2goKTsKLSAgICAg
ICAgcmVzcG9uZGVyLmFjY2VwdChtZXNzYWdlKTsKLSAgICAgIH0pOwotICAgICAgcmV0dXJuIHRy
dWU7Ci0gICAgY2FzZSBrVXNiRGV2aWNlX1JlbGVhc2VJbnRlcmZhY2VfTmFtZToKLSAgICAgIHZh
ciBwYXJhbXMgPSByZWFkZXIuZGVjb2RlU3RydWN0KFVzYkRldmljZV9SZWxlYXNlSW50ZXJmYWNl
X1BhcmFtcyk7Ci0gICAgICB0aGlzLnJlbGVhc2VJbnRlcmZhY2UocGFyYW1zLmludGVyZmFjZU51
bWJlcikudGhlbihmdW5jdGlvbihyZXNwb25zZSkgewotICAgICAgICB2YXIgcmVzcG9uc2VQYXJh
bXMgPQotICAgICAgICAgICAgbmV3IFVzYkRldmljZV9SZWxlYXNlSW50ZXJmYWNlX1Jlc3BvbnNl
UGFyYW1zKCk7Ci0gICAgICAgIHJlc3BvbnNlUGFyYW1zLnN1Y2Nlc3MgPSByZXNwb25zZS5zdWNj
ZXNzOwotICAgICAgICB2YXIgYnVpbGRlciA9IG5ldyBjb2RlYy5NZXNzYWdlVjFCdWlsZGVyKAot
ICAgICAgICAgICAga1VzYkRldmljZV9SZWxlYXNlSW50ZXJmYWNlX05hbWUsCi0gICAgICAgICAg
ICBjb2RlYy5hbGlnbihVc2JEZXZpY2VfUmVsZWFzZUludGVyZmFjZV9SZXNwb25zZVBhcmFtcy5l
bmNvZGVkU2l6ZSksCi0gICAgICAgICAgICBjb2RlYy5rTWVzc2FnZUlzUmVzcG9uc2UsIHJlYWRl
ci5yZXF1ZXN0SUQpOwotICAgICAgICBidWlsZGVyLmVuY29kZVN0cnVjdChVc2JEZXZpY2VfUmVs
ZWFzZUludGVyZmFjZV9SZXNwb25zZVBhcmFtcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcmVzcG9uc2VQYXJhbXMpOwotICAgICAgICB2YXIgbWVzc2FnZSA9IGJ1aWxkZXIuZmluaXNo
KCk7Ci0gICAgICAgIHJlc3BvbmRlci5hY2NlcHQobWVzc2FnZSk7Ci0gICAgICB9KTsKLSAgICAg
IHJldHVybiB0cnVlOwotICAgIGNhc2Uga1VzYkRldmljZV9TZXRJbnRlcmZhY2VBbHRlcm5hdGVT
ZXR0aW5nX05hbWU6Ci0gICAgICB2YXIgcGFyYW1zID0gcmVhZGVyLmRlY29kZVN0cnVjdChVc2JE
ZXZpY2VfU2V0SW50ZXJmYWNlQWx0ZXJuYXRlU2V0dGluZ19QYXJhbXMpOwotICAgICAgdGhpcy5z
ZXRJbnRlcmZhY2VBbHRlcm5hdGVTZXR0aW5nKHBhcmFtcy5pbnRlcmZhY2VOdW1iZXIsIHBhcmFt
cy5hbHRlcm5hdGVTZXR0aW5nKS50aGVuKGZ1bmN0aW9uKHJlc3BvbnNlKSB7Ci0gICAgICAgIHZh
ciByZXNwb25zZVBhcmFtcyA9Ci0gICAgICAgICAgICBuZXcgVXNiRGV2aWNlX1NldEludGVyZmFj
ZUFsdGVybmF0ZVNldHRpbmdfUmVzcG9uc2VQYXJhbXMoKTsKLSAgICAgICAgcmVzcG9uc2VQYXJh
bXMuc3VjY2VzcyA9IHJlc3BvbnNlLnN1Y2Nlc3M7Ci0gICAgICAgIHZhciBidWlsZGVyID0gbmV3
IGNvZGVjLk1lc3NhZ2VWMUJ1aWxkZXIoCi0gICAgICAgICAgICBrVXNiRGV2aWNlX1NldEludGVy
ZmFjZUFsdGVybmF0ZVNldHRpbmdfTmFtZSwKLSAgICAgICAgICAgIGNvZGVjLmFsaWduKFVzYkRl
dmljZV9TZXRJbnRlcmZhY2VBbHRlcm5hdGVTZXR0aW5nX1Jlc3BvbnNlUGFyYW1zLmVuY29kZWRT
aXplKSwKLSAgICAgICAgICAgIGNvZGVjLmtNZXNzYWdlSXNSZXNwb25zZSwgcmVhZGVyLnJlcXVl
c3RJRCk7Ci0gICAgICAgIGJ1aWxkZXIuZW5jb2RlU3RydWN0KFVzYkRldmljZV9TZXRJbnRlcmZh
Y2VBbHRlcm5hdGVTZXR0aW5nX1Jlc3BvbnNlUGFyYW1zLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICByZXNwb25zZVBhcmFtcyk7Ci0gICAgICAgIHZhciBtZXNzYWdlID0gYnVpbGRlci5m
aW5pc2goKTsKLSAgICAgICAgcmVzcG9uZGVyLmFjY2VwdChtZXNzYWdlKTsKLSAgICAgIH0pOwot
ICAgICAgcmV0dXJuIHRydWU7Ci0gICAgY2FzZSBrVXNiRGV2aWNlX1Jlc2V0X05hbWU6Ci0gICAg
ICB2YXIgcGFyYW1zID0gcmVhZGVyLmRlY29kZVN0cnVjdChVc2JEZXZpY2VfUmVzZXRfUGFyYW1z
KTsKLSAgICAgIHRoaXMucmVzZXQoKS50aGVuKGZ1bmN0aW9uKHJlc3BvbnNlKSB7Ci0gICAgICAg
IHZhciByZXNwb25zZVBhcmFtcyA9Ci0gICAgICAgICAgICBuZXcgVXNiRGV2aWNlX1Jlc2V0X1Jl
c3BvbnNlUGFyYW1zKCk7Ci0gICAgICAgIHJlc3BvbnNlUGFyYW1zLnN1Y2Nlc3MgPSByZXNwb25z
ZS5zdWNjZXNzOwotICAgICAgICB2YXIgYnVpbGRlciA9IG5ldyBjb2RlYy5NZXNzYWdlVjFCdWls
ZGVyKAotICAgICAgICAgICAga1VzYkRldmljZV9SZXNldF9OYW1lLAotICAgICAgICAgICAgY29k
ZWMuYWxpZ24oVXNiRGV2aWNlX1Jlc2V0X1Jlc3BvbnNlUGFyYW1zLmVuY29kZWRTaXplKSwKLSAg
ICAgICAgICAgIGNvZGVjLmtNZXNzYWdlSXNSZXNwb25zZSwgcmVhZGVyLnJlcXVlc3RJRCk7Ci0g
ICAgICAgIGJ1aWxkZXIuZW5jb2RlU3RydWN0KFVzYkRldmljZV9SZXNldF9SZXNwb25zZVBhcmFt
cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2VQYXJhbXMpOwotICAgICAg
ICB2YXIgbWVzc2FnZSA9IGJ1aWxkZXIuZmluaXNoKCk7Ci0gICAgICAgIHJlc3BvbmRlci5hY2Nl
cHQobWVzc2FnZSk7Ci0gICAgICB9KTsKLSAgICAgIHJldHVybiB0cnVlOwotICAgIGNhc2Uga1Vz
YkRldmljZV9DbGVhckhhbHRfTmFtZToKLSAgICAgIHZhciBwYXJhbXMgPSByZWFkZXIuZGVjb2Rl
U3RydWN0KFVzYkRldmljZV9DbGVhckhhbHRfUGFyYW1zKTsKLSAgICAgIHRoaXMuY2xlYXJIYWx0
KHBhcmFtcy5lbmRwb2ludCkudGhlbihmdW5jdGlvbihyZXNwb25zZSkgewotICAgICAgICB2YXIg
cmVzcG9uc2VQYXJhbXMgPQotICAgICAgICAgICAgbmV3IFVzYkRldmljZV9DbGVhckhhbHRfUmVz
cG9uc2VQYXJhbXMoKTsKLSAgICAgICAgcmVzcG9uc2VQYXJhbXMuc3VjY2VzcyA9IHJlc3BvbnNl
LnN1Y2Nlc3M7Ci0gICAgICAgIHZhciBidWlsZGVyID0gbmV3IGNvZGVjLk1lc3NhZ2VWMUJ1aWxk
ZXIoCi0gICAgICAgICAgICBrVXNiRGV2aWNlX0NsZWFySGFsdF9OYW1lLAotICAgICAgICAgICAg
Y29kZWMuYWxpZ24oVXNiRGV2aWNlX0NsZWFySGFsdF9SZXNwb25zZVBhcmFtcy5lbmNvZGVkU2l6
ZSksCi0gICAgICAgICAgICBjb2RlYy5rTWVzc2FnZUlzUmVzcG9uc2UsIHJlYWRlci5yZXF1ZXN0
SUQpOwotICAgICAgICBidWlsZGVyLmVuY29kZVN0cnVjdChVc2JEZXZpY2VfQ2xlYXJIYWx0X1Jl
c3BvbnNlUGFyYW1zLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zZVBhcmFt
cyk7Ci0gICAgICAgIHZhciBtZXNzYWdlID0gYnVpbGRlci5maW5pc2goKTsKLSAgICAgICAgcmVz
cG9uZGVyLmFjY2VwdChtZXNzYWdlKTsKLSAgICAgIH0pOwotICAgICAgcmV0dXJuIHRydWU7Ci0g
ICAgY2FzZSBrVXNiRGV2aWNlX0NvbnRyb2xUcmFuc2ZlckluX05hbWU6Ci0gICAgICB2YXIgcGFy
YW1zID0gcmVhZGVyLmRlY29kZVN0cnVjdChVc2JEZXZpY2VfQ29udHJvbFRyYW5zZmVySW5fUGFy
YW1zKTsKLSAgICAgIHRoaXMuY29udHJvbFRyYW5zZmVySW4ocGFyYW1zLnBhcmFtcywgcGFyYW1z
Lmxlbmd0aCwgcGFyYW1zLnRpbWVvdXQpLnRoZW4oZnVuY3Rpb24ocmVzcG9uc2UpIHsKLSAgICAg
ICAgdmFyIHJlc3BvbnNlUGFyYW1zID0KLSAgICAgICAgICAgIG5ldyBVc2JEZXZpY2VfQ29udHJv
bFRyYW5zZmVySW5fUmVzcG9uc2VQYXJhbXMoKTsKLSAgICAgICAgcmVzcG9uc2VQYXJhbXMuc3Rh
dHVzID0gcmVzcG9uc2Uuc3RhdHVzOwotICAgICAgICByZXNwb25zZVBhcmFtcy5kYXRhID0gcmVz
cG9uc2UuZGF0YTsKLSAgICAgICAgdmFyIGJ1aWxkZXIgPSBuZXcgY29kZWMuTWVzc2FnZVYxQnVp
bGRlcigKLSAgICAgICAgICAgIGtVc2JEZXZpY2VfQ29udHJvbFRyYW5zZmVySW5fTmFtZSwKLSAg
ICAgICAgICAgIGNvZGVjLmFsaWduKFVzYkRldmljZV9Db250cm9sVHJhbnNmZXJJbl9SZXNwb25z
ZVBhcmFtcy5lbmNvZGVkU2l6ZSksCi0gICAgICAgICAgICBjb2RlYy5rTWVzc2FnZUlzUmVzcG9u
c2UsIHJlYWRlci5yZXF1ZXN0SUQpOwotICAgICAgICBidWlsZGVyLmVuY29kZVN0cnVjdChVc2JE
ZXZpY2VfQ29udHJvbFRyYW5zZmVySW5fUmVzcG9uc2VQYXJhbXMsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHJlc3BvbnNlUGFyYW1zKTsKLSAgICAgICAgdmFyIG1lc3NhZ2UgPSBidWls
ZGVyLmZpbmlzaCgpOwotICAgICAgICByZXNwb25kZXIuYWNjZXB0KG1lc3NhZ2UpOwotICAgICAg
fSk7Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICBjYXNlIGtVc2JEZXZpY2VfQ29udHJvbFRyYW5z
ZmVyT3V0X05hbWU6Ci0gICAgICB2YXIgcGFyYW1zID0gcmVhZGVyLmRlY29kZVN0cnVjdChVc2JE
ZXZpY2VfQ29udHJvbFRyYW5zZmVyT3V0X1BhcmFtcyk7Ci0gICAgICB0aGlzLmNvbnRyb2xUcmFu
c2Zlck91dChwYXJhbXMucGFyYW1zLCBwYXJhbXMuZGF0YSwgcGFyYW1zLnRpbWVvdXQpLnRoZW4o
ZnVuY3Rpb24ocmVzcG9uc2UpIHsKLSAgICAgICAgdmFyIHJlc3BvbnNlUGFyYW1zID0KLSAgICAg
ICAgICAgIG5ldyBVc2JEZXZpY2VfQ29udHJvbFRyYW5zZmVyT3V0X1Jlc3BvbnNlUGFyYW1zKCk7
Ci0gICAgICAgIHJlc3BvbnNlUGFyYW1zLnN0YXR1cyA9IHJlc3BvbnNlLnN0YXR1czsKLSAgICAg
ICAgdmFyIGJ1aWxkZXIgPSBuZXcgY29kZWMuTWVzc2FnZVYxQnVpbGRlcigKLSAgICAgICAgICAg
IGtVc2JEZXZpY2VfQ29udHJvbFRyYW5zZmVyT3V0X05hbWUsCi0gICAgICAgICAgICBjb2RlYy5h
bGlnbihVc2JEZXZpY2VfQ29udHJvbFRyYW5zZmVyT3V0X1Jlc3BvbnNlUGFyYW1zLmVuY29kZWRT
aXplKSwKLSAgICAgICAgICAgIGNvZGVjLmtNZXNzYWdlSXNSZXNwb25zZSwgcmVhZGVyLnJlcXVl
c3RJRCk7Ci0gICAgICAgIGJ1aWxkZXIuZW5jb2RlU3RydWN0KFVzYkRldmljZV9Db250cm9sVHJh
bnNmZXJPdXRfUmVzcG9uc2VQYXJhbXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJl
c3BvbnNlUGFyYW1zKTsKLSAgICAgICAgdmFyIG1lc3NhZ2UgPSBidWlsZGVyLmZpbmlzaCgpOwot
ICAgICAgICByZXNwb25kZXIuYWNjZXB0KG1lc3NhZ2UpOwotICAgICAgfSk7Ci0gICAgICByZXR1
cm4gdHJ1ZTsKLSAgICBjYXNlIGtVc2JEZXZpY2VfR2VuZXJpY1RyYW5zZmVySW5fTmFtZToKLSAg
ICAgIHZhciBwYXJhbXMgPSByZWFkZXIuZGVjb2RlU3RydWN0KFVzYkRldmljZV9HZW5lcmljVHJh
bnNmZXJJbl9QYXJhbXMpOwotICAgICAgdGhpcy5nZW5lcmljVHJhbnNmZXJJbihwYXJhbXMuZW5k
cG9pbnROdW1iZXIsIHBhcmFtcy5sZW5ndGgsIHBhcmFtcy50aW1lb3V0KS50aGVuKGZ1bmN0aW9u
KHJlc3BvbnNlKSB7Ci0gICAgICAgIHZhciByZXNwb25zZVBhcmFtcyA9Ci0gICAgICAgICAgICBu
ZXcgVXNiRGV2aWNlX0dlbmVyaWNUcmFuc2ZlckluX1Jlc3BvbnNlUGFyYW1zKCk7Ci0gICAgICAg
IHJlc3BvbnNlUGFyYW1zLnN0YXR1cyA9IHJlc3BvbnNlLnN0YXR1czsKLSAgICAgICAgcmVzcG9u
c2VQYXJhbXMuZGF0YSA9IHJlc3BvbnNlLmRhdGE7Ci0gICAgICAgIHZhciBidWlsZGVyID0gbmV3
IGNvZGVjLk1lc3NhZ2VWMUJ1aWxkZXIoCi0gICAgICAgICAgICBrVXNiRGV2aWNlX0dlbmVyaWNU
cmFuc2ZlckluX05hbWUsCi0gICAgICAgICAgICBjb2RlYy5hbGlnbihVc2JEZXZpY2VfR2VuZXJp
Y1RyYW5zZmVySW5fUmVzcG9uc2VQYXJhbXMuZW5jb2RlZFNpemUpLAotICAgICAgICAgICAgY29k
ZWMua01lc3NhZ2VJc1Jlc3BvbnNlLCByZWFkZXIucmVxdWVzdElEKTsKLSAgICAgICAgYnVpbGRl
ci5lbmNvZGVTdHJ1Y3QoVXNiRGV2aWNlX0dlbmVyaWNUcmFuc2ZlckluX1Jlc3BvbnNlUGFyYW1z
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zZVBhcmFtcyk7Ci0gICAgICAg
IHZhciBtZXNzYWdlID0gYnVpbGRlci5maW5pc2goKTsKLSAgICAgICAgcmVzcG9uZGVyLmFjY2Vw
dChtZXNzYWdlKTsKLSAgICAgIH0pOwotICAgICAgcmV0dXJuIHRydWU7Ci0gICAgY2FzZSBrVXNi
RGV2aWNlX0dlbmVyaWNUcmFuc2Zlck91dF9OYW1lOgotICAgICAgdmFyIHBhcmFtcyA9IHJlYWRl
ci5kZWNvZGVTdHJ1Y3QoVXNiRGV2aWNlX0dlbmVyaWNUcmFuc2Zlck91dF9QYXJhbXMpOwotICAg
ICAgdGhpcy5nZW5lcmljVHJhbnNmZXJPdXQocGFyYW1zLmVuZHBvaW50TnVtYmVyLCBwYXJhbXMu
ZGF0YSwgcGFyYW1zLnRpbWVvdXQpLnRoZW4oZnVuY3Rpb24ocmVzcG9uc2UpIHsKLSAgICAgICAg
dmFyIHJlc3BvbnNlUGFyYW1zID0KLSAgICAgICAgICAgIG5ldyBVc2JEZXZpY2VfR2VuZXJpY1Ry
YW5zZmVyT3V0X1Jlc3BvbnNlUGFyYW1zKCk7Ci0gICAgICAgIHJlc3BvbnNlUGFyYW1zLnN0YXR1
cyA9IHJlc3BvbnNlLnN0YXR1czsKLSAgICAgICAgdmFyIGJ1aWxkZXIgPSBuZXcgY29kZWMuTWVz
c2FnZVYxQnVpbGRlcigKLSAgICAgICAgICAgIGtVc2JEZXZpY2VfR2VuZXJpY1RyYW5zZmVyT3V0
X05hbWUsCi0gICAgICAgICAgICBjb2RlYy5hbGlnbihVc2JEZXZpY2VfR2VuZXJpY1RyYW5zZmVy
T3V0X1Jlc3BvbnNlUGFyYW1zLmVuY29kZWRTaXplKSwKLSAgICAgICAgICAgIGNvZGVjLmtNZXNz
YWdlSXNSZXNwb25zZSwgcmVhZGVyLnJlcXVlc3RJRCk7Ci0gICAgICAgIGJ1aWxkZXIuZW5jb2Rl
U3RydWN0KFVzYkRldmljZV9HZW5lcmljVHJhbnNmZXJPdXRfUmVzcG9uc2VQYXJhbXMsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlUGFyYW1zKTsKLSAgICAgICAgdmFyIG1l
c3NhZ2UgPSBidWlsZGVyLmZpbmlzaCgpOwotICAgICAgICByZXNwb25kZXIuYWNjZXB0KG1lc3Nh
Z2UpOwotICAgICAgfSk7Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICBjYXNlIGtVc2JEZXZpY2Vf
SXNvY2hyb25vdXNUcmFuc2ZlckluX05hbWU6Ci0gICAgICB2YXIgcGFyYW1zID0gcmVhZGVyLmRl
Y29kZVN0cnVjdChVc2JEZXZpY2VfSXNvY2hyb25vdXNUcmFuc2ZlckluX1BhcmFtcyk7Ci0gICAg
ICB0aGlzLmlzb2Nocm9ub3VzVHJhbnNmZXJJbihwYXJhbXMuZW5kcG9pbnROdW1iZXIsIHBhcmFt
cy5wYWNrZXRMZW5ndGhzLCBwYXJhbXMudGltZW91dCkudGhlbihmdW5jdGlvbihyZXNwb25zZSkg
ewotICAgICAgICB2YXIgcmVzcG9uc2VQYXJhbXMgPQotICAgICAgICAgICAgbmV3IFVzYkRldmlj
ZV9Jc29jaHJvbm91c1RyYW5zZmVySW5fUmVzcG9uc2VQYXJhbXMoKTsKLSAgICAgICAgcmVzcG9u
c2VQYXJhbXMuZGF0YSA9IHJlc3BvbnNlLmRhdGE7Ci0gICAgICAgIHJlc3BvbnNlUGFyYW1zLnBh
Y2tldHMgPSByZXNwb25zZS5wYWNrZXRzOwotICAgICAgICB2YXIgYnVpbGRlciA9IG5ldyBjb2Rl
Yy5NZXNzYWdlVjFCdWlsZGVyKAotICAgICAgICAgICAga1VzYkRldmljZV9Jc29jaHJvbm91c1Ry
YW5zZmVySW5fTmFtZSwKLSAgICAgICAgICAgIGNvZGVjLmFsaWduKFVzYkRldmljZV9Jc29jaHJv
bm91c1RyYW5zZmVySW5fUmVzcG9uc2VQYXJhbXMuZW5jb2RlZFNpemUpLAotICAgICAgICAgICAg
Y29kZWMua01lc3NhZ2VJc1Jlc3BvbnNlLCByZWFkZXIucmVxdWVzdElEKTsKLSAgICAgICAgYnVp
bGRlci5lbmNvZGVTdHJ1Y3QoVXNiRGV2aWNlX0lzb2Nocm9ub3VzVHJhbnNmZXJJbl9SZXNwb25z
ZVBhcmFtcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2VQYXJhbXMpOwot
ICAgICAgICB2YXIgbWVzc2FnZSA9IGJ1aWxkZXIuZmluaXNoKCk7Ci0gICAgICAgIHJlc3BvbmRl
ci5hY2NlcHQobWVzc2FnZSk7Ci0gICAgICB9KTsKLSAgICAgIHJldHVybiB0cnVlOwotICAgIGNh
c2Uga1VzYkRldmljZV9Jc29jaHJvbm91c1RyYW5zZmVyT3V0X05hbWU6Ci0gICAgICB2YXIgcGFy
YW1zID0gcmVhZGVyLmRlY29kZVN0cnVjdChVc2JEZXZpY2VfSXNvY2hyb25vdXNUcmFuc2Zlck91
dF9QYXJhbXMpOwotICAgICAgdGhpcy5pc29jaHJvbm91c1RyYW5zZmVyT3V0KHBhcmFtcy5lbmRw
b2ludE51bWJlciwgcGFyYW1zLmRhdGEsIHBhcmFtcy5wYWNrZXRMZW5ndGhzLCBwYXJhbXMudGlt
ZW91dCkudGhlbihmdW5jdGlvbihyZXNwb25zZSkgewotICAgICAgICB2YXIgcmVzcG9uc2VQYXJh
bXMgPQotICAgICAgICAgICAgbmV3IFVzYkRldmljZV9Jc29jaHJvbm91c1RyYW5zZmVyT3V0X1Jl
c3BvbnNlUGFyYW1zKCk7Ci0gICAgICAgIHJlc3BvbnNlUGFyYW1zLnBhY2tldHMgPSByZXNwb25z
ZS5wYWNrZXRzOwotICAgICAgICB2YXIgYnVpbGRlciA9IG5ldyBjb2RlYy5NZXNzYWdlVjFCdWls
ZGVyKAotICAgICAgICAgICAga1VzYkRldmljZV9Jc29jaHJvbm91c1RyYW5zZmVyT3V0X05hbWUs
Ci0gICAgICAgICAgICBjb2RlYy5hbGlnbihVc2JEZXZpY2VfSXNvY2hyb25vdXNUcmFuc2Zlck91
dF9SZXNwb25zZVBhcmFtcy5lbmNvZGVkU2l6ZSksCi0gICAgICAgICAgICBjb2RlYy5rTWVzc2Fn
ZUlzUmVzcG9uc2UsIHJlYWRlci5yZXF1ZXN0SUQpOwotICAgICAgICBidWlsZGVyLmVuY29kZVN0
cnVjdChVc2JEZXZpY2VfSXNvY2hyb25vdXNUcmFuc2Zlck91dF9SZXNwb25zZVBhcmFtcywKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2VQYXJhbXMpOwotICAgICAgICB2YXIg
bWVzc2FnZSA9IGJ1aWxkZXIuZmluaXNoKCk7Ci0gICAgICAgIHJlc3BvbmRlci5hY2NlcHQobWVz
c2FnZSk7Ci0gICAgICB9KTsKLSAgICAgIHJldHVybiB0cnVlOwotICAgIGRlZmF1bHQ6Ci0gICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICB9OwotCi0gIGZ1bmN0aW9uIHZhbGlkYXRlVXNiRGV2
aWNlUmVxdWVzdChtZXNzYWdlVmFsaWRhdG9yKSB7Ci0gICAgdmFyIG1lc3NhZ2UgPSBtZXNzYWdl
VmFsaWRhdG9yLm1lc3NhZ2U7Ci0gICAgdmFyIHBhcmFtc0NsYXNzID0gbnVsbDsKLSAgICBzd2l0
Y2ggKG1lc3NhZ2UuZ2V0TmFtZSgpKSB7Ci0gICAgICBjYXNlIGtVc2JEZXZpY2VfT3Blbl9OYW1l
OgotICAgICAgICBpZiAobWVzc2FnZS5leHBlY3RzUmVzcG9uc2UoKSkKLSAgICAgICAgICBwYXJh
bXNDbGFzcyA9IFVzYkRldmljZV9PcGVuX1BhcmFtczsKLSAgICAgIGJyZWFrOwotICAgICAgY2Fz
ZSBrVXNiRGV2aWNlX0Nsb3NlX05hbWU6Ci0gICAgICAgIGlmIChtZXNzYWdlLmV4cGVjdHNSZXNw
b25zZSgpKQotICAgICAgICAgIHBhcmFtc0NsYXNzID0gVXNiRGV2aWNlX0Nsb3NlX1BhcmFtczsK
LSAgICAgIGJyZWFrOwotICAgICAgY2FzZSBrVXNiRGV2aWNlX1NldENvbmZpZ3VyYXRpb25fTmFt
ZToKLSAgICAgICAgaWYgKG1lc3NhZ2UuZXhwZWN0c1Jlc3BvbnNlKCkpCi0gICAgICAgICAgcGFy
YW1zQ2xhc3MgPSBVc2JEZXZpY2VfU2V0Q29uZmlndXJhdGlvbl9QYXJhbXM7Ci0gICAgICBicmVh
azsKLSAgICAgIGNhc2Uga1VzYkRldmljZV9DbGFpbUludGVyZmFjZV9OYW1lOgotICAgICAgICBp
ZiAobWVzc2FnZS5leHBlY3RzUmVzcG9uc2UoKSkKLSAgICAgICAgICBwYXJhbXNDbGFzcyA9IFVz
YkRldmljZV9DbGFpbUludGVyZmFjZV9QYXJhbXM7Ci0gICAgICBicmVhazsKLSAgICAgIGNhc2Ug
a1VzYkRldmljZV9SZWxlYXNlSW50ZXJmYWNlX05hbWU6Ci0gICAgICAgIGlmIChtZXNzYWdlLmV4
cGVjdHNSZXNwb25zZSgpKQotICAgICAgICAgIHBhcmFtc0NsYXNzID0gVXNiRGV2aWNlX1JlbGVh
c2VJbnRlcmZhY2VfUGFyYW1zOwotICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIGtVc2JEZXZpY2Vf
U2V0SW50ZXJmYWNlQWx0ZXJuYXRlU2V0dGluZ19OYW1lOgotICAgICAgICBpZiAobWVzc2FnZS5l
eHBlY3RzUmVzcG9uc2UoKSkKLSAgICAgICAgICBwYXJhbXNDbGFzcyA9IFVzYkRldmljZV9TZXRJ
bnRlcmZhY2VBbHRlcm5hdGVTZXR0aW5nX1BhcmFtczsKLSAgICAgIGJyZWFrOwotICAgICAgY2Fz
ZSBrVXNiRGV2aWNlX1Jlc2V0X05hbWU6Ci0gICAgICAgIGlmIChtZXNzYWdlLmV4cGVjdHNSZXNw
b25zZSgpKQotICAgICAgICAgIHBhcmFtc0NsYXNzID0gVXNiRGV2aWNlX1Jlc2V0X1BhcmFtczsK
LSAgICAgIGJyZWFrOwotICAgICAgY2FzZSBrVXNiRGV2aWNlX0NsZWFySGFsdF9OYW1lOgotICAg
ICAgICBpZiAobWVzc2FnZS5leHBlY3RzUmVzcG9uc2UoKSkKLSAgICAgICAgICBwYXJhbXNDbGFz
cyA9IFVzYkRldmljZV9DbGVhckhhbHRfUGFyYW1zOwotICAgICAgYnJlYWs7Ci0gICAgICBjYXNl
IGtVc2JEZXZpY2VfQ29udHJvbFRyYW5zZmVySW5fTmFtZToKLSAgICAgICAgaWYgKG1lc3NhZ2Uu
ZXhwZWN0c1Jlc3BvbnNlKCkpCi0gICAgICAgICAgcGFyYW1zQ2xhc3MgPSBVc2JEZXZpY2VfQ29u
dHJvbFRyYW5zZmVySW5fUGFyYW1zOwotICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIGtVc2JEZXZp
Y2VfQ29udHJvbFRyYW5zZmVyT3V0X05hbWU6Ci0gICAgICAgIGlmIChtZXNzYWdlLmV4cGVjdHNS
ZXNwb25zZSgpKQotICAgICAgICAgIHBhcmFtc0NsYXNzID0gVXNiRGV2aWNlX0NvbnRyb2xUcmFu
c2Zlck91dF9QYXJhbXM7Ci0gICAgICBicmVhazsKLSAgICAgIGNhc2Uga1VzYkRldmljZV9HZW5l
cmljVHJhbnNmZXJJbl9OYW1lOgotICAgICAgICBpZiAobWVzc2FnZS5leHBlY3RzUmVzcG9uc2Uo
KSkKLSAgICAgICAgICBwYXJhbXNDbGFzcyA9IFVzYkRldmljZV9HZW5lcmljVHJhbnNmZXJJbl9Q
YXJhbXM7Ci0gICAgICBicmVhazsKLSAgICAgIGNhc2Uga1VzYkRldmljZV9HZW5lcmljVHJhbnNm
ZXJPdXRfTmFtZToKLSAgICAgICAgaWYgKG1lc3NhZ2UuZXhwZWN0c1Jlc3BvbnNlKCkpCi0gICAg
ICAgICAgcGFyYW1zQ2xhc3MgPSBVc2JEZXZpY2VfR2VuZXJpY1RyYW5zZmVyT3V0X1BhcmFtczsK
LSAgICAgIGJyZWFrOwotICAgICAgY2FzZSBrVXNiRGV2aWNlX0lzb2Nocm9ub3VzVHJhbnNmZXJJ
bl9OYW1lOgotICAgICAgICBpZiAobWVzc2FnZS5leHBlY3RzUmVzcG9uc2UoKSkKLSAgICAgICAg
ICBwYXJhbXNDbGFzcyA9IFVzYkRldmljZV9Jc29jaHJvbm91c1RyYW5zZmVySW5fUGFyYW1zOwot
ICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIGtVc2JEZXZpY2VfSXNvY2hyb25vdXNUcmFuc2Zlck91
dF9OYW1lOgotICAgICAgICBpZiAobWVzc2FnZS5leHBlY3RzUmVzcG9uc2UoKSkKLSAgICAgICAg
ICBwYXJhbXNDbGFzcyA9IFVzYkRldmljZV9Jc29jaHJvbm91c1RyYW5zZmVyT3V0X1BhcmFtczsK
LSAgICAgIGJyZWFrOwotICAgIH0KLSAgICBpZiAocGFyYW1zQ2xhc3MgPT09IG51bGwpCi0gICAg
ICByZXR1cm4gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FOwotICAgIHJldHVybiBwYXJh
bXNDbGFzcy52YWxpZGF0ZShtZXNzYWdlVmFsaWRhdG9yLCBtZXNzYWdlVmFsaWRhdG9yLm1lc3Nh
Z2UuZ2V0SGVhZGVyTnVtQnl0ZXMoKSk7Ci0gIH0KLQotICBmdW5jdGlvbiB2YWxpZGF0ZVVzYkRl
dmljZVJlc3BvbnNlKG1lc3NhZ2VWYWxpZGF0b3IpIHsKLSAgIHZhciBtZXNzYWdlID0gbWVzc2Fn
ZVZhbGlkYXRvci5tZXNzYWdlOwotICAgdmFyIHBhcmFtc0NsYXNzID0gbnVsbDsKLSAgIHN3aXRj
aCAobWVzc2FnZS5nZXROYW1lKCkpIHsKLSAgICAgIGNhc2Uga1VzYkRldmljZV9PcGVuX05hbWU6
Ci0gICAgICAgIGlmIChtZXNzYWdlLmlzUmVzcG9uc2UoKSkKLSAgICAgICAgICBwYXJhbXNDbGFz
cyA9IFVzYkRldmljZV9PcGVuX1Jlc3BvbnNlUGFyYW1zOwotICAgICAgICBicmVhazsKLSAgICAg
IGNhc2Uga1VzYkRldmljZV9DbG9zZV9OYW1lOgotICAgICAgICBpZiAobWVzc2FnZS5pc1Jlc3Bv
bnNlKCkpCi0gICAgICAgICAgcGFyYW1zQ2xhc3MgPSBVc2JEZXZpY2VfQ2xvc2VfUmVzcG9uc2VQ
YXJhbXM7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBrVXNiRGV2aWNlX1NldENvbmZpZ3Vy
YXRpb25fTmFtZToKLSAgICAgICAgaWYgKG1lc3NhZ2UuaXNSZXNwb25zZSgpKQotICAgICAgICAg
IHBhcmFtc0NsYXNzID0gVXNiRGV2aWNlX1NldENvbmZpZ3VyYXRpb25fUmVzcG9uc2VQYXJhbXM7
Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBrVXNiRGV2aWNlX0NsYWltSW50ZXJmYWNlX05h
bWU6Ci0gICAgICAgIGlmIChtZXNzYWdlLmlzUmVzcG9uc2UoKSkKLSAgICAgICAgICBwYXJhbXND
bGFzcyA9IFVzYkRldmljZV9DbGFpbUludGVyZmFjZV9SZXNwb25zZVBhcmFtczsKLSAgICAgICAg
YnJlYWs7Ci0gICAgICBjYXNlIGtVc2JEZXZpY2VfUmVsZWFzZUludGVyZmFjZV9OYW1lOgotICAg
ICAgICBpZiAobWVzc2FnZS5pc1Jlc3BvbnNlKCkpCi0gICAgICAgICAgcGFyYW1zQ2xhc3MgPSBV
c2JEZXZpY2VfUmVsZWFzZUludGVyZmFjZV9SZXNwb25zZVBhcmFtczsKLSAgICAgICAgYnJlYWs7
Ci0gICAgICBjYXNlIGtVc2JEZXZpY2VfU2V0SW50ZXJmYWNlQWx0ZXJuYXRlU2V0dGluZ19OYW1l
OgotICAgICAgICBpZiAobWVzc2FnZS5pc1Jlc3BvbnNlKCkpCi0gICAgICAgICAgcGFyYW1zQ2xh
c3MgPSBVc2JEZXZpY2VfU2V0SW50ZXJmYWNlQWx0ZXJuYXRlU2V0dGluZ19SZXNwb25zZVBhcmFt
czsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIGtVc2JEZXZpY2VfUmVzZXRfTmFtZToKLSAg
ICAgICAgaWYgKG1lc3NhZ2UuaXNSZXNwb25zZSgpKQotICAgICAgICAgIHBhcmFtc0NsYXNzID0g
VXNiRGV2aWNlX1Jlc2V0X1Jlc3BvbnNlUGFyYW1zOwotICAgICAgICBicmVhazsKLSAgICAgIGNh
c2Uga1VzYkRldmljZV9DbGVhckhhbHRfTmFtZToKLSAgICAgICAgaWYgKG1lc3NhZ2UuaXNSZXNw
b25zZSgpKQotICAgICAgICAgIHBhcmFtc0NsYXNzID0gVXNiRGV2aWNlX0NsZWFySGFsdF9SZXNw
b25zZVBhcmFtczsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIGtVc2JEZXZpY2VfQ29udHJv
bFRyYW5zZmVySW5fTmFtZToKLSAgICAgICAgaWYgKG1lc3NhZ2UuaXNSZXNwb25zZSgpKQotICAg
ICAgICAgIHBhcmFtc0NsYXNzID0gVXNiRGV2aWNlX0NvbnRyb2xUcmFuc2ZlckluX1Jlc3BvbnNl
UGFyYW1zOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2Uga1VzYkRldmljZV9Db250cm9sVHJh
bnNmZXJPdXRfTmFtZToKLSAgICAgICAgaWYgKG1lc3NhZ2UuaXNSZXNwb25zZSgpKQotICAgICAg
ICAgIHBhcmFtc0NsYXNzID0gVXNiRGV2aWNlX0NvbnRyb2xUcmFuc2Zlck91dF9SZXNwb25zZVBh
cmFtczsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIGtVc2JEZXZpY2VfR2VuZXJpY1RyYW5z
ZmVySW5fTmFtZToKLSAgICAgICAgaWYgKG1lc3NhZ2UuaXNSZXNwb25zZSgpKQotICAgICAgICAg
IHBhcmFtc0NsYXNzID0gVXNiRGV2aWNlX0dlbmVyaWNUcmFuc2ZlckluX1Jlc3BvbnNlUGFyYW1z
OwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2Uga1VzYkRldmljZV9HZW5lcmljVHJhbnNmZXJP
dXRfTmFtZToKLSAgICAgICAgaWYgKG1lc3NhZ2UuaXNSZXNwb25zZSgpKQotICAgICAgICAgIHBh
cmFtc0NsYXNzID0gVXNiRGV2aWNlX0dlbmVyaWNUcmFuc2Zlck91dF9SZXNwb25zZVBhcmFtczsK
LSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIGtVc2JEZXZpY2VfSXNvY2hyb25vdXNUcmFuc2Zl
ckluX05hbWU6Ci0gICAgICAgIGlmIChtZXNzYWdlLmlzUmVzcG9uc2UoKSkKLSAgICAgICAgICBw
YXJhbXNDbGFzcyA9IFVzYkRldmljZV9Jc29jaHJvbm91c1RyYW5zZmVySW5fUmVzcG9uc2VQYXJh
bXM7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBrVXNiRGV2aWNlX0lzb2Nocm9ub3VzVHJh
bnNmZXJPdXRfTmFtZToKLSAgICAgICAgaWYgKG1lc3NhZ2UuaXNSZXNwb25zZSgpKQotICAgICAg
ICAgIHBhcmFtc0NsYXNzID0gVXNiRGV2aWNlX0lzb2Nocm9ub3VzVHJhbnNmZXJPdXRfUmVzcG9u
c2VQYXJhbXM7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBpZiAocGFyYW1zQ2xhc3MgPT09
IG51bGwpCi0gICAgICByZXR1cm4gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FOwotICAg
IHJldHVybiBwYXJhbXNDbGFzcy52YWxpZGF0ZShtZXNzYWdlVmFsaWRhdG9yLCBtZXNzYWdlVmFs
aWRhdG9yLm1lc3NhZ2UuZ2V0SGVhZGVyTnVtQnl0ZXMoKSk7Ci0gIH0KLQotICB2YXIgVXNiRGV2
aWNlID0gewotICAgIG5hbWU6ICdkZXZpY2UubW9qb20uVXNiRGV2aWNlJywKLSAgICBrVmVyc2lv
bjogMCwKLSAgICBwdHJDbGFzczogVXNiRGV2aWNlUHRyLAotICAgIHByb3h5Q2xhc3M6IFVzYkRl
dmljZVByb3h5LAotICAgIHN0dWJDbGFzczogVXNiRGV2aWNlU3R1YiwKLSAgICB2YWxpZGF0ZVJl
cXVlc3Q6IHZhbGlkYXRlVXNiRGV2aWNlUmVxdWVzdCwKLSAgICB2YWxpZGF0ZVJlc3BvbnNlOiB2
YWxpZGF0ZVVzYkRldmljZVJlc3BvbnNlLAotICB9OwotICBVc2JEZXZpY2VTdHViLnByb3RvdHlw
ZS52YWxpZGF0b3IgPSB2YWxpZGF0ZVVzYkRldmljZVJlcXVlc3Q7Ci0gIFVzYkRldmljZVByb3h5
LnByb3RvdHlwZS52YWxpZGF0b3IgPSB2YWxpZGF0ZVVzYkRldmljZVJlc3BvbnNlOwotICB2YXIg
a1VzYkRldmljZUNsaWVudF9PbkRldmljZU9wZW5lZF9OYW1lID0gMDsKLSAgdmFyIGtVc2JEZXZp
Y2VDbGllbnRfT25EZXZpY2VDbG9zZWRfTmFtZSA9IDE7Ci0KLSAgZnVuY3Rpb24gVXNiRGV2aWNl
Q2xpZW50UHRyKGhhbmRsZU9yUHRySW5mbykgewotICAgIHRoaXMucHRyID0gbmV3IGJpbmRpbmdz
LkludGVyZmFjZVB0ckNvbnRyb2xsZXIoVXNiRGV2aWNlQ2xpZW50LAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlT3JQdHJJbmZvKTsKLSAg
fQotCi0gIGZ1bmN0aW9uIFVzYkRldmljZUNsaWVudEFzc29jaWF0ZWRQdHIoYXNzb2NpYXRlZElu
dGVyZmFjZVB0ckluZm8pIHsKLSAgICB0aGlzLnB0ciA9IG5ldyBhc3NvY2lhdGVkQmluZGluZ3Mu
QXNzb2NpYXRlZEludGVyZmFjZVB0ckNvbnRyb2xsZXIoCi0gICAgICAgIFVzYkRldmljZUNsaWVu
dCwgYXNzb2NpYXRlZEludGVyZmFjZVB0ckluZm8pOwotICB9Ci0KLSAgVXNiRGV2aWNlQ2xpZW50
QXNzb2NpYXRlZFB0ci5wcm90b3R5cGUgPQotICAgICAgT2JqZWN0LmNyZWF0ZShVc2JEZXZpY2VD
bGllbnRQdHIucHJvdG90eXBlKTsKLSAgVXNiRGV2aWNlQ2xpZW50QXNzb2NpYXRlZFB0ci5wcm90
b3R5cGUuY29uc3RydWN0b3IgPQotICAgICAgVXNiRGV2aWNlQ2xpZW50QXNzb2NpYXRlZFB0cjsK
LQotICBmdW5jdGlvbiBVc2JEZXZpY2VDbGllbnRQcm94eShyZWNlaXZlcikgewotICAgIHRoaXMu
cmVjZWl2ZXJfID0gcmVjZWl2ZXI7Ci0gIH0KLSAgVXNiRGV2aWNlQ2xpZW50UHRyLnByb3RvdHlw
ZS5vbkRldmljZU9wZW5lZCA9IGZ1bmN0aW9uKCkgewotICAgIHJldHVybiBVc2JEZXZpY2VDbGll
bnRQcm94eS5wcm90b3R5cGUub25EZXZpY2VPcGVuZWQKLSAgICAgICAgLmFwcGx5KHRoaXMucHRy
LmdldFByb3h5KCksIGFyZ3VtZW50cyk7Ci0gIH07Ci0KLSAgVXNiRGV2aWNlQ2xpZW50UHJveHku
cHJvdG90eXBlLm9uRGV2aWNlT3BlbmVkID0gZnVuY3Rpb24oKSB7Ci0gICAgdmFyIHBhcmFtc18g
PSBuZXcgVXNiRGV2aWNlQ2xpZW50X09uRGV2aWNlT3BlbmVkX1BhcmFtcygpOwotICAgIHZhciBi
dWlsZGVyID0gbmV3IGNvZGVjLk1lc3NhZ2VWMEJ1aWxkZXIoCi0gICAgICAgIGtVc2JEZXZpY2VD
bGllbnRfT25EZXZpY2VPcGVuZWRfTmFtZSwKLSAgICAgICAgY29kZWMuYWxpZ24oVXNiRGV2aWNl
Q2xpZW50X09uRGV2aWNlT3BlbmVkX1BhcmFtcy5lbmNvZGVkU2l6ZSkpOwotICAgIGJ1aWxkZXIu
ZW5jb2RlU3RydWN0KFVzYkRldmljZUNsaWVudF9PbkRldmljZU9wZW5lZF9QYXJhbXMsIHBhcmFt
c18pOwotICAgIHZhciBtZXNzYWdlID0gYnVpbGRlci5maW5pc2goKTsKLSAgICB0aGlzLnJlY2Vp
dmVyXy5hY2NlcHQobWVzc2FnZSk7Ci0gIH07Ci0gIFVzYkRldmljZUNsaWVudFB0ci5wcm90b3R5
cGUub25EZXZpY2VDbG9zZWQgPSBmdW5jdGlvbigpIHsKLSAgICByZXR1cm4gVXNiRGV2aWNlQ2xp
ZW50UHJveHkucHJvdG90eXBlLm9uRGV2aWNlQ2xvc2VkCi0gICAgICAgIC5hcHBseSh0aGlzLnB0
ci5nZXRQcm94eSgpLCBhcmd1bWVudHMpOwotICB9OwotCi0gIFVzYkRldmljZUNsaWVudFByb3h5
LnByb3RvdHlwZS5vbkRldmljZUNsb3NlZCA9IGZ1bmN0aW9uKCkgewotICAgIHZhciBwYXJhbXNf
ID0gbmV3IFVzYkRldmljZUNsaWVudF9PbkRldmljZUNsb3NlZF9QYXJhbXMoKTsKLSAgICB2YXIg
YnVpbGRlciA9IG5ldyBjb2RlYy5NZXNzYWdlVjBCdWlsZGVyKAotICAgICAgICBrVXNiRGV2aWNl
Q2xpZW50X09uRGV2aWNlQ2xvc2VkX05hbWUsCi0gICAgICAgIGNvZGVjLmFsaWduKFVzYkRldmlj
ZUNsaWVudF9PbkRldmljZUNsb3NlZF9QYXJhbXMuZW5jb2RlZFNpemUpKTsKLSAgICBidWlsZGVy
LmVuY29kZVN0cnVjdChVc2JEZXZpY2VDbGllbnRfT25EZXZpY2VDbG9zZWRfUGFyYW1zLCBwYXJh
bXNfKTsKLSAgICB2YXIgbWVzc2FnZSA9IGJ1aWxkZXIuZmluaXNoKCk7Ci0gICAgdGhpcy5yZWNl
aXZlcl8uYWNjZXB0KG1lc3NhZ2UpOwotICB9OwotCi0gIGZ1bmN0aW9uIFVzYkRldmljZUNsaWVu
dFN0dWIoZGVsZWdhdGUpIHsKLSAgICB0aGlzLmRlbGVnYXRlXyA9IGRlbGVnYXRlOwotICB9Ci0g
IFVzYkRldmljZUNsaWVudFN0dWIucHJvdG90eXBlLm9uRGV2aWNlT3BlbmVkID0gZnVuY3Rpb24o
KSB7Ci0gICAgcmV0dXJuIHRoaXMuZGVsZWdhdGVfICYmIHRoaXMuZGVsZWdhdGVfLm9uRGV2aWNl
T3BlbmVkICYmIHRoaXMuZGVsZWdhdGVfLm9uRGV2aWNlT3BlbmVkKCk7Ci0gIH0KLSAgVXNiRGV2
aWNlQ2xpZW50U3R1Yi5wcm90b3R5cGUub25EZXZpY2VDbG9zZWQgPSBmdW5jdGlvbigpIHsKLSAg
ICByZXR1cm4gdGhpcy5kZWxlZ2F0ZV8gJiYgdGhpcy5kZWxlZ2F0ZV8ub25EZXZpY2VDbG9zZWQg
JiYgdGhpcy5kZWxlZ2F0ZV8ub25EZXZpY2VDbG9zZWQoKTsKLSAgfQotCi0gIFVzYkRldmljZUNs
aWVudFN0dWIucHJvdG90eXBlLmFjY2VwdCA9IGZ1bmN0aW9uKG1lc3NhZ2UpIHsKLSAgICB2YXIg
cmVhZGVyID0gbmV3IGNvZGVjLk1lc3NhZ2VSZWFkZXIobWVzc2FnZSk7Ci0gICAgc3dpdGNoIChy
ZWFkZXIubWVzc2FnZU5hbWUpIHsKLSAgICBjYXNlIGtVc2JEZXZpY2VDbGllbnRfT25EZXZpY2VP
cGVuZWRfTmFtZToKLSAgICAgIHZhciBwYXJhbXMgPSByZWFkZXIuZGVjb2RlU3RydWN0KFVzYkRl
dmljZUNsaWVudF9PbkRldmljZU9wZW5lZF9QYXJhbXMpOwotICAgICAgdGhpcy5vbkRldmljZU9w
ZW5lZCgpOwotICAgICAgcmV0dXJuIHRydWU7Ci0gICAgY2FzZSBrVXNiRGV2aWNlQ2xpZW50X09u
RGV2aWNlQ2xvc2VkX05hbWU6Ci0gICAgICB2YXIgcGFyYW1zID0gcmVhZGVyLmRlY29kZVN0cnVj
dChVc2JEZXZpY2VDbGllbnRfT25EZXZpY2VDbG9zZWRfUGFyYW1zKTsKLSAgICAgIHRoaXMub25E
ZXZpY2VDbG9zZWQoKTsKLSAgICAgIHJldHVybiB0cnVlOwotICAgIGRlZmF1bHQ6Ci0gICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgfQotICB9OwotCi0gIFVzYkRldmljZUNsaWVudFN0dWIucHJvdG90
eXBlLmFjY2VwdFdpdGhSZXNwb25kZXIgPQotICAgICAgZnVuY3Rpb24obWVzc2FnZSwgcmVzcG9u
ZGVyKSB7Ci0gICAgdmFyIHJlYWRlciA9IG5ldyBjb2RlYy5NZXNzYWdlUmVhZGVyKG1lc3NhZ2Up
OwotICAgIHN3aXRjaCAocmVhZGVyLm1lc3NhZ2VOYW1lKSB7Ci0gICAgZGVmYXVsdDoKLSAgICAg
IHJldHVybiBmYWxzZTsKLSAgICB9Ci0gIH07Ci0KLSAgZnVuY3Rpb24gdmFsaWRhdGVVc2JEZXZp
Y2VDbGllbnRSZXF1ZXN0KG1lc3NhZ2VWYWxpZGF0b3IpIHsKLSAgICB2YXIgbWVzc2FnZSA9IG1l
c3NhZ2VWYWxpZGF0b3IubWVzc2FnZTsKLSAgICB2YXIgcGFyYW1zQ2xhc3MgPSBudWxsOwotICAg
IHN3aXRjaCAobWVzc2FnZS5nZXROYW1lKCkpIHsKLSAgICAgIGNhc2Uga1VzYkRldmljZUNsaWVu
dF9PbkRldmljZU9wZW5lZF9OYW1lOgotICAgICAgICBpZiAoIW1lc3NhZ2UuZXhwZWN0c1Jlc3Bv
bnNlKCkgJiYgIW1lc3NhZ2UuaXNSZXNwb25zZSgpKQotICAgICAgICAgIHBhcmFtc0NsYXNzID0g
VXNiRGV2aWNlQ2xpZW50X09uRGV2aWNlT3BlbmVkX1BhcmFtczsKLSAgICAgIGJyZWFrOwotICAg
ICAgY2FzZSBrVXNiRGV2aWNlQ2xpZW50X09uRGV2aWNlQ2xvc2VkX05hbWU6Ci0gICAgICAgIGlm
ICghbWVzc2FnZS5leHBlY3RzUmVzcG9uc2UoKSAmJiAhbWVzc2FnZS5pc1Jlc3BvbnNlKCkpCi0g
ICAgICAgICAgcGFyYW1zQ2xhc3MgPSBVc2JEZXZpY2VDbGllbnRfT25EZXZpY2VDbG9zZWRfUGFy
YW1zOwotICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGlmIChwYXJhbXNDbGFzcyA9PT0gbnVsbCkK
LSAgICAgIHJldHVybiB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkU7Ci0gICAgcmV0dXJu
IHBhcmFtc0NsYXNzLnZhbGlkYXRlKG1lc3NhZ2VWYWxpZGF0b3IsIG1lc3NhZ2VWYWxpZGF0b3Iu
bWVzc2FnZS5nZXRIZWFkZXJOdW1CeXRlcygpKTsKLSAgfQotCi0gIGZ1bmN0aW9uIHZhbGlkYXRl
VXNiRGV2aWNlQ2xpZW50UmVzcG9uc2UobWVzc2FnZVZhbGlkYXRvcikgewotICAgIHJldHVybiB2
YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkU7Ci0gIH0KLQotICB2YXIgVXNiRGV2aWNlQ2xp
ZW50ID0gewotICAgIG5hbWU6ICdkZXZpY2UubW9qb20uVXNiRGV2aWNlQ2xpZW50JywKLSAgICBr
VmVyc2lvbjogMCwKLSAgICBwdHJDbGFzczogVXNiRGV2aWNlQ2xpZW50UHRyLAotICAgIHByb3h5
Q2xhc3M6IFVzYkRldmljZUNsaWVudFByb3h5LAotICAgIHN0dWJDbGFzczogVXNiRGV2aWNlQ2xp
ZW50U3R1YiwKLSAgICB2YWxpZGF0ZVJlcXVlc3Q6IHZhbGlkYXRlVXNiRGV2aWNlQ2xpZW50UmVx
dWVzdCwKLSAgICB2YWxpZGF0ZVJlc3BvbnNlOiBudWxsLAotICB9OwotICBVc2JEZXZpY2VDbGll
bnRTdHViLnByb3RvdHlwZS52YWxpZGF0b3IgPSB2YWxpZGF0ZVVzYkRldmljZUNsaWVudFJlcXVl
c3Q7Ci0gIFVzYkRldmljZUNsaWVudFByb3h5LnByb3RvdHlwZS52YWxpZGF0b3IgPSBudWxsOwot
ICBleHBvcnRzLlVzYk9wZW5EZXZpY2VFcnJvciA9IFVzYk9wZW5EZXZpY2VFcnJvcjsKLSAgZXhw
b3J0cy5Vc2JUcmFuc2ZlckRpcmVjdGlvbiA9IFVzYlRyYW5zZmVyRGlyZWN0aW9uOwotICBleHBv
cnRzLlVzYkNvbnRyb2xUcmFuc2ZlclR5cGUgPSBVc2JDb250cm9sVHJhbnNmZXJUeXBlOwotICBl
eHBvcnRzLlVzYkNvbnRyb2xUcmFuc2ZlclJlY2lwaWVudCA9IFVzYkNvbnRyb2xUcmFuc2ZlclJl
Y2lwaWVudDsKLSAgZXhwb3J0cy5Vc2JUcmFuc2ZlclR5cGUgPSBVc2JUcmFuc2ZlclR5cGU7Ci0g
IGV4cG9ydHMuVXNiU3luY2hyb25pemF0aW9uVHlwZSA9IFVzYlN5bmNocm9uaXphdGlvblR5cGU7
Ci0gIGV4cG9ydHMuVXNiVXNhZ2VUeXBlID0gVXNiVXNhZ2VUeXBlOwotICBleHBvcnRzLlVzYlRy
YW5zZmVyU3RhdHVzID0gVXNiVHJhbnNmZXJTdGF0dXM7Ci0gIGV4cG9ydHMuVXNiRW5kcG9pbnRJ
bmZvID0gVXNiRW5kcG9pbnRJbmZvOwotICBleHBvcnRzLlVzYkFsdGVybmF0ZUludGVyZmFjZUlu
Zm8gPSBVc2JBbHRlcm5hdGVJbnRlcmZhY2VJbmZvOwotICBleHBvcnRzLlVzYkludGVyZmFjZUlu
Zm8gPSBVc2JJbnRlcmZhY2VJbmZvOwotICBleHBvcnRzLlVzYkNvbmZpZ3VyYXRpb25JbmZvID0g
VXNiQ29uZmlndXJhdGlvbkluZm87Ci0gIGV4cG9ydHMuVXNiRGV2aWNlSW5mbyA9IFVzYkRldmlj
ZUluZm87Ci0gIGV4cG9ydHMuVXNiQ29udHJvbFRyYW5zZmVyUGFyYW1zID0gVXNiQ29udHJvbFRy
YW5zZmVyUGFyYW1zOwotICBleHBvcnRzLlVzYklzb2Nocm9ub3VzUGFja2V0ID0gVXNiSXNvY2hy
b25vdXNQYWNrZXQ7Ci0gIGV4cG9ydHMuVXNiRGV2aWNlID0gVXNiRGV2aWNlOwotICBleHBvcnRz
LlVzYkRldmljZVB0ciA9IFVzYkRldmljZVB0cjsKLSAgZXhwb3J0cy5Vc2JEZXZpY2VBc3NvY2lh
dGVkUHRyID0gVXNiRGV2aWNlQXNzb2NpYXRlZFB0cjsKLSAgZXhwb3J0cy5Vc2JEZXZpY2VDbGll
bnQgPSBVc2JEZXZpY2VDbGllbnQ7Ci0gIGV4cG9ydHMuVXNiRGV2aWNlQ2xpZW50UHRyID0gVXNi
RGV2aWNlQ2xpZW50UHRyOwotICBleHBvcnRzLlVzYkRldmljZUNsaWVudEFzc29jaWF0ZWRQdHIg
PSBVc2JEZXZpY2VDbGllbnRBc3NvY2lhdGVkUHRyOwotfSkoKTsKZGlmZiAtLWdpdCBhL0xheW91
dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVt
L2RldmljZS5tb2pvbS5qcy5oZWFkZXJzIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1w
bGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vZGV2aWNlLm1vam9tLmpzLmhlYWRlcnMK
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY4MDVjMzIzZGY1YTk3NTIzMTY0OGI4MzBl
MzNjZTE4M2MzY2JiZDMuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAK
LS0tIGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJj
ZXMvY2hyb21pdW0vZGV2aWNlLm1vam9tLmpzLmhlYWRlcnMKKysrIC9kZXYvbnVsbApAQCAtMSAr
MCwwIEBACi1Db250ZW50LVR5cGU6IHRleHQvamF2YXNjcmlwdDsgY2hhcnNldD11dGYtOApkaWZm
IC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNv
dXJjZXMvY2hyb21pdW0vZGV2aWNlX2VudW1lcmF0aW9uX29wdGlvbnMubW9qb20uanMgYi9MYXlv
dXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1
bS9kZXZpY2VfZW51bWVyYXRpb25fb3B0aW9ucy5tb2pvbS5qcwpkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggNWE3NzVhZDM2ODc4ZjJjMmEzY2YwNWRiNTU2OTdiODUxZTJhNGRiNy4uMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9MYXlvdXRUZXN0cy9p
bXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS9kZXZpY2Vf
ZW51bWVyYXRpb25fb3B0aW9ucy5tb2pvbS5qcworKysgL2Rldi9udWxsCkBAIC0xLDE4NCArMCww
IEBACi0vLyBDb3B5cmlnaHQgMjAxNCBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNE
LXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUu
Ci0KLSd1c2Ugc3RyaWN0JzsKLQotKGZ1bmN0aW9uKCkgewotICB2YXIgbW9qb21JZCA9ICdkZXZp
Y2UvdXNiL3B1YmxpYy9tb2pvbS9kZXZpY2VfZW51bWVyYXRpb25fb3B0aW9ucy5tb2pvbSc7Ci0g
IGlmIChtb2pvLmludGVybmFsLmlzTW9qb21Mb2FkZWQobW9qb21JZCkpIHsKLSAgICBjb25zb2xl
Lndhcm4oJ1RoZSBmb2xsb3dpbmcgbW9qb20gaXMgbG9hZGVkIG11bHRpcGxlIHRpbWVzOiAnICsg
bW9qb21JZCk7Ci0gICAgcmV0dXJuOwotICB9Ci0gIG1vam8uaW50ZXJuYWwubWFya01vam9tTG9h
ZGVkKG1vam9tSWQpOwotICB2YXIgYmluZGluZ3MgPSBtb2pvOwotICB2YXIgYXNzb2NpYXRlZEJp
bmRpbmdzID0gbW9qbzsKLSAgdmFyIGNvZGVjID0gbW9qby5pbnRlcm5hbDsKLSAgdmFyIHZhbGlk
YXRvciA9IG1vam8uaW50ZXJuYWw7Ci0KLSAgdmFyIGV4cG9ydHMgPSBtb2pvLmludGVybmFsLmV4
cG9zZU5hbWVzcGFjZSgnZGV2aWNlLm1vam9tJyk7Ci0gIHZhciBzdHJpbmcxNiQgPQotICAgICAg
bW9qby5pbnRlcm5hbC5leHBvc2VOYW1lc3BhY2UoJ21vam9CYXNlLm1vam9tJyk7Ci0gIGlmICht
b2pvLmNvbmZpZy5hdXRvTG9hZE1vam9tRGVwcykgewotICAgIG1vam8uaW50ZXJuYWwubG9hZE1v
am9tSWZOZWNlc3NhcnkoCi0gICAgICAgICdtb2pvL3B1YmxpYy9tb2pvbS9iYXNlL3N0cmluZzE2
Lm1vam9tJywgJy4uLy4uLy4uLy4uL21vam8vcHVibGljL21vam9tL2Jhc2Uvc3RyaW5nMTYubW9q
b20uanMnKTsKLSAgfQotCi0KLQotICBmdW5jdGlvbiBVc2JEZXZpY2VGaWx0ZXIodmFsdWVzKSB7
Ci0gICAgdGhpcy5pbml0RGVmYXVsdHNfKCk7Ci0gICAgdGhpcy5pbml0RmllbGRzXyh2YWx1ZXMp
OwotICB9Ci0KLQotICBVc2JEZXZpY2VGaWx0ZXIucHJvdG90eXBlLmluaXREZWZhdWx0c18gPSBm
dW5jdGlvbigpIHsKLSAgICB0aGlzLmhhc1ZlbmRvcklkID0gZmFsc2U7Ci0gICAgdGhpcy5oYXNQ
cm9kdWN0SWQgPSBmYWxzZTsKLSAgICB0aGlzLmhhc0NsYXNzQ29kZSA9IGZhbHNlOwotICAgIHRo
aXMuaGFzU3ViY2xhc3NDb2RlID0gZmFsc2U7Ci0gICAgdGhpcy5oYXNQcm90b2NvbENvZGUgPSBm
YWxzZTsKLSAgICB0aGlzLmNsYXNzQ29kZSA9IDA7Ci0gICAgdGhpcy52ZW5kb3JJZCA9IDA7Ci0g
ICAgdGhpcy5wcm9kdWN0SWQgPSAwOwotICAgIHRoaXMuc3ViY2xhc3NDb2RlID0gMDsKLSAgICB0
aGlzLnByb3RvY29sQ29kZSA9IDA7Ci0gICAgdGhpcy5zZXJpYWxOdW1iZXIgPSBudWxsOwotICB9
OwotICBVc2JEZXZpY2VGaWx0ZXIucHJvdG90eXBlLmluaXRGaWVsZHNfID0gZnVuY3Rpb24oZmll
bGRzKSB7Ci0gICAgZm9yKHZhciBmaWVsZCBpbiBmaWVsZHMpIHsKLSAgICAgICAgaWYgKHRoaXMu
aGFzT3duUHJvcGVydHkoZmllbGQpKQotICAgICAgICAgIHRoaXNbZmllbGRdID0gZmllbGRzW2Zp
ZWxkXTsKLSAgICB9Ci0gIH07Ci0KLSAgVXNiRGV2aWNlRmlsdGVyLnZhbGlkYXRlID0gZnVuY3Rp
b24obWVzc2FnZVZhbGlkYXRvciwgb2Zmc2V0KSB7Ci0gICAgdmFyIGVycjsKLSAgICBlcnIgPSBt
ZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0SGVhZGVyKG9mZnNldCwgY29kZWMua1N0cnVj
dEhlYWRlclNpemUpOwotICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3Iu
Tk9ORSkKLSAgICAgICAgcmV0dXJuIGVycjsKLQotICAgIHZhciBrVmVyc2lvblNpemVzID0gWwot
ICAgICAge3ZlcnNpb246IDAsIG51bUJ5dGVzOiAyNH0KLSAgICBdOwotICAgIGVyciA9IG1lc3Nh
Z2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RWZXJzaW9uKG9mZnNldCwga1ZlcnNpb25TaXplcyk7
Ci0gICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQotICAgICAg
ICByZXR1cm4gZXJyOwotCi0KLQotCi0KLQotCi0KLQotCi0KLQotICAgIC8vIHZhbGlkYXRlIFVz
YkRldmljZUZpbHRlci5zZXJpYWxOdW1iZXIKLSAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZh
bGlkYXRlU3RydWN0UG9pbnRlcihvZmZzZXQgKyBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDgs
IHN0cmluZzE2JC5TdHJpbmcxNiwgdHJ1ZSk7Ci0gICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZh
bGlkYXRpb25FcnJvci5OT05FKQotICAgICAgICByZXR1cm4gZXJyOwotCi0gICAgcmV0dXJuIHZh
bGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORTsKLSAgfTsKLQotICBVc2JEZXZpY2VGaWx0ZXIu
ZW5jb2RlZFNpemUgPSBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDE2OwotCi0gIFVzYkRldmlj
ZUZpbHRlci5kZWNvZGUgPSBmdW5jdGlvbihkZWNvZGVyKSB7Ci0gICAgdmFyIHBhY2tlZDsKLSAg
ICB2YXIgdmFsID0gbmV3IFVzYkRldmljZUZpbHRlcigpOwotICAgIHZhciBudW1iZXJPZkJ5dGVz
ID0gZGVjb2Rlci5yZWFkVWludDMyKCk7Ci0gICAgdmFyIHZlcnNpb24gPSBkZWNvZGVyLnJlYWRV
aW50MzIoKTsKLSAgICBwYWNrZWQgPSBkZWNvZGVyLnJlYWRVaW50OCgpOwotICAgIHZhbC5oYXNW
ZW5kb3JJZCA9IChwYWNrZWQgPj4gMCkgJiAxID8gdHJ1ZSA6IGZhbHNlOwotICAgIHZhbC5oYXNQ
cm9kdWN0SWQgPSAocGFja2VkID4+IDEpICYgMSA/IHRydWUgOiBmYWxzZTsKLSAgICB2YWwuaGFz
Q2xhc3NDb2RlID0gKHBhY2tlZCA+PiAyKSAmIDEgPyB0cnVlIDogZmFsc2U7Ci0gICAgdmFsLmhh
c1N1YmNsYXNzQ29kZSA9IChwYWNrZWQgPj4gMykgJiAxID8gdHJ1ZSA6IGZhbHNlOwotICAgIHZh
bC5oYXNQcm90b2NvbENvZGUgPSAocGFja2VkID4+IDQpICYgMSA/IHRydWUgOiBmYWxzZTsKLSAg
ICB2YWwuY2xhc3NDb2RlID0gZGVjb2Rlci5kZWNvZGVTdHJ1Y3QoY29kZWMuVWludDgpOwotICAg
IHZhbC52ZW5kb3JJZCA9IGRlY29kZXIuZGVjb2RlU3RydWN0KGNvZGVjLlVpbnQxNik7Ci0gICAg
dmFsLnByb2R1Y3RJZCA9IGRlY29kZXIuZGVjb2RlU3RydWN0KGNvZGVjLlVpbnQxNik7Ci0gICAg
dmFsLnN1YmNsYXNzQ29kZSA9IGRlY29kZXIuZGVjb2RlU3RydWN0KGNvZGVjLlVpbnQ4KTsKLSAg
ICB2YWwucHJvdG9jb2xDb2RlID0gZGVjb2Rlci5kZWNvZGVTdHJ1Y3QoY29kZWMuVWludDgpOwot
ICAgIHZhbC5zZXJpYWxOdW1iZXIgPSBkZWNvZGVyLmRlY29kZVN0cnVjdFBvaW50ZXIoc3RyaW5n
MTYkLlN0cmluZzE2KTsKLSAgICByZXR1cm4gdmFsOwotICB9OwotCi0gIFVzYkRldmljZUZpbHRl
ci5lbmNvZGUgPSBmdW5jdGlvbihlbmNvZGVyLCB2YWwpIHsKLSAgICB2YXIgcGFja2VkOwotICAg
IGVuY29kZXIud3JpdGVVaW50MzIoVXNiRGV2aWNlRmlsdGVyLmVuY29kZWRTaXplKTsKLSAgICBl
bmNvZGVyLndyaXRlVWludDMyKDApOwotICAgIHBhY2tlZCA9IDA7Ci0gICAgcGFja2VkIHw9ICh2
YWwuaGFzVmVuZG9ySWQgJiAxKSA8PCAwCi0gICAgcGFja2VkIHw9ICh2YWwuaGFzUHJvZHVjdElk
ICYgMSkgPDwgMQotICAgIHBhY2tlZCB8PSAodmFsLmhhc0NsYXNzQ29kZSAmIDEpIDw8IDIKLSAg
ICBwYWNrZWQgfD0gKHZhbC5oYXNTdWJjbGFzc0NvZGUgJiAxKSA8PCAzCi0gICAgcGFja2VkIHw9
ICh2YWwuaGFzUHJvdG9jb2xDb2RlICYgMSkgPDwgNAotICAgIGVuY29kZXIud3JpdGVVaW50OChw
YWNrZWQpOwotICAgIGVuY29kZXIuZW5jb2RlU3RydWN0KGNvZGVjLlVpbnQ4LCB2YWwuY2xhc3ND
b2RlKTsKLSAgICBlbmNvZGVyLmVuY29kZVN0cnVjdChjb2RlYy5VaW50MTYsIHZhbC52ZW5kb3JJ
ZCk7Ci0gICAgZW5jb2Rlci5lbmNvZGVTdHJ1Y3QoY29kZWMuVWludDE2LCB2YWwucHJvZHVjdElk
KTsKLSAgICBlbmNvZGVyLmVuY29kZVN0cnVjdChjb2RlYy5VaW50OCwgdmFsLnN1YmNsYXNzQ29k
ZSk7Ci0gICAgZW5jb2Rlci5lbmNvZGVTdHJ1Y3QoY29kZWMuVWludDgsIHZhbC5wcm90b2NvbENv
ZGUpOwotICAgIGVuY29kZXIuZW5jb2RlU3RydWN0UG9pbnRlcihzdHJpbmcxNiQuU3RyaW5nMTYs
IHZhbC5zZXJpYWxOdW1iZXIpOwotICB9OwotICBmdW5jdGlvbiBVc2JFbnVtZXJhdGlvbk9wdGlv
bnModmFsdWVzKSB7Ci0gICAgdGhpcy5pbml0RGVmYXVsdHNfKCk7Ci0gICAgdGhpcy5pbml0Rmll
bGRzXyh2YWx1ZXMpOwotICB9Ci0KLQotICBVc2JFbnVtZXJhdGlvbk9wdGlvbnMucHJvdG90eXBl
LmluaXREZWZhdWx0c18gPSBmdW5jdGlvbigpIHsKLSAgICB0aGlzLmZpbHRlcnMgPSBudWxsOwot
ICB9OwotICBVc2JFbnVtZXJhdGlvbk9wdGlvbnMucHJvdG90eXBlLmluaXRGaWVsZHNfID0gZnVu
Y3Rpb24oZmllbGRzKSB7Ci0gICAgZm9yKHZhciBmaWVsZCBpbiBmaWVsZHMpIHsKLSAgICAgICAg
aWYgKHRoaXMuaGFzT3duUHJvcGVydHkoZmllbGQpKQotICAgICAgICAgIHRoaXNbZmllbGRdID0g
ZmllbGRzW2ZpZWxkXTsKLSAgICB9Ci0gIH07Ci0KLSAgVXNiRW51bWVyYXRpb25PcHRpb25zLnZh
bGlkYXRlID0gZnVuY3Rpb24obWVzc2FnZVZhbGlkYXRvciwgb2Zmc2V0KSB7Ci0gICAgdmFyIGVy
cjsKLSAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0SGVhZGVyKG9mZnNl
dCwgY29kZWMua1N0cnVjdEhlYWRlclNpemUpOwotICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52
YWxpZGF0aW9uRXJyb3IuTk9ORSkKLSAgICAgICAgcmV0dXJuIGVycjsKLQotICAgIHZhciBrVmVy
c2lvblNpemVzID0gWwotICAgICAge3ZlcnNpb246IDAsIG51bUJ5dGVzOiAxNn0KLSAgICBdOwot
ICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RWZXJzaW9uKG9mZnNldCwg
a1ZlcnNpb25TaXplcyk7Ci0gICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJv
ci5OT05FKQotICAgICAgICByZXR1cm4gZXJyOwotCi0KLSAgICAvLyB2YWxpZGF0ZSBVc2JFbnVt
ZXJhdGlvbk9wdGlvbnMuZmlsdGVycwotICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRh
dGVBcnJheVBvaW50ZXIob2Zmc2V0ICsgY29kZWMua1N0cnVjdEhlYWRlclNpemUgKyAwLCA4LCBu
ZXcgY29kZWMuUG9pbnRlclRvKFVzYkRldmljZUZpbHRlciksIGZhbHNlLCBbMF0sIDApOwotICAg
IGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKLSAgICAgICAgcmV0
dXJuIGVycjsKLQotICAgIHJldHVybiB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkU7Ci0g
IH07Ci0KLSAgVXNiRW51bWVyYXRpb25PcHRpb25zLmVuY29kZWRTaXplID0gY29kZWMua1N0cnVj
dEhlYWRlclNpemUgKyA4OwotCi0gIFVzYkVudW1lcmF0aW9uT3B0aW9ucy5kZWNvZGUgPSBmdW5j
dGlvbihkZWNvZGVyKSB7Ci0gICAgdmFyIHBhY2tlZDsKLSAgICB2YXIgdmFsID0gbmV3IFVzYkVu
dW1lcmF0aW9uT3B0aW9ucygpOwotICAgIHZhciBudW1iZXJPZkJ5dGVzID0gZGVjb2Rlci5yZWFk
VWludDMyKCk7Ci0gICAgdmFyIHZlcnNpb24gPSBkZWNvZGVyLnJlYWRVaW50MzIoKTsKLSAgICB2
YWwuZmlsdGVycyA9IGRlY29kZXIuZGVjb2RlQXJyYXlQb2ludGVyKG5ldyBjb2RlYy5Qb2ludGVy
VG8oVXNiRGV2aWNlRmlsdGVyKSk7Ci0gICAgcmV0dXJuIHZhbDsKLSAgfTsKLQotICBVc2JFbnVt
ZXJhdGlvbk9wdGlvbnMuZW5jb2RlID0gZnVuY3Rpb24oZW5jb2RlciwgdmFsKSB7Ci0gICAgdmFy
IHBhY2tlZDsKLSAgICBlbmNvZGVyLndyaXRlVWludDMyKFVzYkVudW1lcmF0aW9uT3B0aW9ucy5l
bmNvZGVkU2l6ZSk7Ci0gICAgZW5jb2Rlci53cml0ZVVpbnQzMigwKTsKLSAgICBlbmNvZGVyLmVu
Y29kZUFycmF5UG9pbnRlcihuZXcgY29kZWMuUG9pbnRlclRvKFVzYkRldmljZUZpbHRlciksIHZh
bC5maWx0ZXJzKTsKLSAgfTsKLSAgZXhwb3J0cy5Vc2JEZXZpY2VGaWx0ZXIgPSBVc2JEZXZpY2VG
aWx0ZXI7Ci0gIGV4cG9ydHMuVXNiRW51bWVyYXRpb25PcHRpb25zID0gVXNiRW51bWVyYXRpb25P
cHRpb25zOwotfSkoKTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9M
YXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9jaHJv
bWl1bS9kZXZpY2VfZW51bWVyYXRpb25fb3B0aW9ucy5tb2pvbS5qcy5oZWFkZXJzIGIvTGF5b3V0
VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0v
ZGV2aWNlX2VudW1lcmF0aW9uX29wdGlvbnMubW9qb20uanMuaGVhZGVycwpkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggNmM2MWEzNGE0ZWMyZTc1MDk2ZGIwZWI5Zjc3NDhiMTQyZjBkYjdi
Yi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9MYXlvdXRU
ZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS9k
ZXZpY2VfZW51bWVyYXRpb25fb3B0aW9ucy5tb2pvbS5qcy5oZWFkZXJzCisrKyAvZGV2L251bGwK
QEAgLTEgKzAsMCBAQAotQ29udGVudC1UeXBlOiB0ZXh0L2phdmFzY3JpcHQ7IGNoYXJzZXQ9dXRm
LTgKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9p
bXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS9kZXZpY2Vf
bWFuYWdlcl9jbGllbnQubW9qb20uanMgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBs
YXRmb3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS9kZXZpY2VfbWFuYWdlcl9jbGllbnQubW9q
b20uanMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQzOWY2NDY1NzRkZmE3ODVkOGY0
ZDE1OTk0NTk3ZWQxNTZkYWU2OTUuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAKLS0tIGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9y
ZXNvdXJjZXMvY2hyb21pdW0vZGV2aWNlX21hbmFnZXJfY2xpZW50Lm1vam9tLmpzCisrKyAvZGV2
L251bGwKQEAgLTEsMjYyICswLDAgQEAKLS8vIENvcHlyaWdodCAyMDE0IFRoZSBDaHJvbWl1bSBB
dXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUg
aXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQg
aW4gdGhlIExJQ0VOU0UgZmlsZS4KLQotJ3VzZSBzdHJpY3QnOwotCi0oZnVuY3Rpb24oKSB7Ci0g
IHZhciBtb2pvbUlkID0gJ2RldmljZS91c2IvcHVibGljL21vam9tL2RldmljZV9tYW5hZ2VyX2Ns
aWVudC5tb2pvbSc7Ci0gIGlmIChtb2pvLmludGVybmFsLmlzTW9qb21Mb2FkZWQobW9qb21JZCkp
IHsKLSAgICBjb25zb2xlLndhcm4oJ1RoZSBmb2xsb3dpbmcgbW9qb20gaXMgbG9hZGVkIG11bHRp
cGxlIHRpbWVzOiAnICsgbW9qb21JZCk7Ci0gICAgcmV0dXJuOwotICB9Ci0gIG1vam8uaW50ZXJu
YWwubWFya01vam9tTG9hZGVkKG1vam9tSWQpOwotICB2YXIgYmluZGluZ3MgPSBtb2pvOwotICB2
YXIgYXNzb2NpYXRlZEJpbmRpbmdzID0gbW9qbzsKLSAgdmFyIGNvZGVjID0gbW9qby5pbnRlcm5h
bDsKLSAgdmFyIHZhbGlkYXRvciA9IG1vam8uaW50ZXJuYWw7Ci0KLSAgdmFyIGV4cG9ydHMgPSBt
b2pvLmludGVybmFsLmV4cG9zZU5hbWVzcGFjZSgnZGV2aWNlLm1vam9tJyk7Ci0gIHZhciBkZXZp
Y2UkID0KLSAgICAgIG1vam8uaW50ZXJuYWwuZXhwb3NlTmFtZXNwYWNlKCdkZXZpY2UubW9qb20n
KTsKLSAgaWYgKG1vam8uY29uZmlnLmF1dG9Mb2FkTW9qb21EZXBzKSB7Ci0gICAgbW9qby5pbnRl
cm5hbC5sb2FkTW9qb21JZk5lY2Vzc2FyeSgKLSAgICAgICAgJ2RldmljZS91c2IvcHVibGljL21v
am9tL2RldmljZS5tb2pvbScsICdkZXZpY2UubW9qb20uanMnKTsKLSAgfQotCi0KLQotICBmdW5j
dGlvbiBVc2JEZXZpY2VNYW5hZ2VyQ2xpZW50X09uRGV2aWNlQWRkZWRfUGFyYW1zKHZhbHVlcykg
ewotICAgIHRoaXMuaW5pdERlZmF1bHRzXygpOwotICAgIHRoaXMuaW5pdEZpZWxkc18odmFsdWVz
KTsKLSAgfQotCi0KLSAgVXNiRGV2aWNlTWFuYWdlckNsaWVudF9PbkRldmljZUFkZGVkX1BhcmFt
cy5wcm90b3R5cGUuaW5pdERlZmF1bHRzXyA9IGZ1bmN0aW9uKCkgewotICAgIHRoaXMuZGV2aWNl
SW5mbyA9IG51bGw7Ci0gIH07Ci0gIFVzYkRldmljZU1hbmFnZXJDbGllbnRfT25EZXZpY2VBZGRl
ZF9QYXJhbXMucHJvdG90eXBlLmluaXRGaWVsZHNfID0gZnVuY3Rpb24oZmllbGRzKSB7Ci0gICAg
Zm9yKHZhciBmaWVsZCBpbiBmaWVsZHMpIHsKLSAgICAgICAgaWYgKHRoaXMuaGFzT3duUHJvcGVy
dHkoZmllbGQpKQotICAgICAgICAgIHRoaXNbZmllbGRdID0gZmllbGRzW2ZpZWxkXTsKLSAgICB9
Ci0gIH07Ci0KLSAgVXNiRGV2aWNlTWFuYWdlckNsaWVudF9PbkRldmljZUFkZGVkX1BhcmFtcy52
YWxpZGF0ZSA9IGZ1bmN0aW9uKG1lc3NhZ2VWYWxpZGF0b3IsIG9mZnNldCkgewotICAgIHZhciBl
cnI7Ci0gICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdEhlYWRlcihvZmZz
ZXQsIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplKTsKLSAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3Iu
dmFsaWRhdGlvbkVycm9yLk5PTkUpCi0gICAgICAgIHJldHVybiBlcnI7Ci0KLSAgICB2YXIga1Zl
cnNpb25TaXplcyA9IFsKLSAgICAgIHt2ZXJzaW9uOiAwLCBudW1CeXRlczogMTZ9Ci0gICAgXTsK
LSAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0VmVyc2lvbihvZmZzZXQs
IGtWZXJzaW9uU2l6ZXMpOwotICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJy
b3IuTk9ORSkKLSAgICAgICAgcmV0dXJuIGVycjsKLQotCi0gICAgLy8gdmFsaWRhdGUgVXNiRGV2
aWNlTWFuYWdlckNsaWVudF9PbkRldmljZUFkZGVkX1BhcmFtcy5kZXZpY2VJbmZvCi0gICAgZXJy
ID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdFBvaW50ZXIob2Zmc2V0ICsgY29kZWMu
a1N0cnVjdEhlYWRlclNpemUgKyAwLCBkZXZpY2UkLlVzYkRldmljZUluZm8sIGZhbHNlKTsKLSAg
ICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCi0gICAgICAgIHJl
dHVybiBlcnI7Ci0KLSAgICByZXR1cm4gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FOwot
ICB9OwotCi0gIFVzYkRldmljZU1hbmFnZXJDbGllbnRfT25EZXZpY2VBZGRlZF9QYXJhbXMuZW5j
b2RlZFNpemUgPSBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDg7Ci0KLSAgVXNiRGV2aWNlTWFu
YWdlckNsaWVudF9PbkRldmljZUFkZGVkX1BhcmFtcy5kZWNvZGUgPSBmdW5jdGlvbihkZWNvZGVy
KSB7Ci0gICAgdmFyIHBhY2tlZDsKLSAgICB2YXIgdmFsID0gbmV3IFVzYkRldmljZU1hbmFnZXJD
bGllbnRfT25EZXZpY2VBZGRlZF9QYXJhbXMoKTsKLSAgICB2YXIgbnVtYmVyT2ZCeXRlcyA9IGRl
Y29kZXIucmVhZFVpbnQzMigpOwotICAgIHZhciB2ZXJzaW9uID0gZGVjb2Rlci5yZWFkVWludDMy
KCk7Ci0gICAgdmFsLmRldmljZUluZm8gPSBkZWNvZGVyLmRlY29kZVN0cnVjdFBvaW50ZXIoZGV2
aWNlJC5Vc2JEZXZpY2VJbmZvKTsKLSAgICByZXR1cm4gdmFsOwotICB9OwotCi0gIFVzYkRldmlj
ZU1hbmFnZXJDbGllbnRfT25EZXZpY2VBZGRlZF9QYXJhbXMuZW5jb2RlID0gZnVuY3Rpb24oZW5j
b2RlciwgdmFsKSB7Ci0gICAgdmFyIHBhY2tlZDsKLSAgICBlbmNvZGVyLndyaXRlVWludDMyKFVz
YkRldmljZU1hbmFnZXJDbGllbnRfT25EZXZpY2VBZGRlZF9QYXJhbXMuZW5jb2RlZFNpemUpOwot
ICAgIGVuY29kZXIud3JpdGVVaW50MzIoMCk7Ci0gICAgZW5jb2Rlci5lbmNvZGVTdHJ1Y3RQb2lu
dGVyKGRldmljZSQuVXNiRGV2aWNlSW5mbywgdmFsLmRldmljZUluZm8pOwotICB9OwotICBmdW5j
dGlvbiBVc2JEZXZpY2VNYW5hZ2VyQ2xpZW50X09uRGV2aWNlUmVtb3ZlZF9QYXJhbXModmFsdWVz
KSB7Ci0gICAgdGhpcy5pbml0RGVmYXVsdHNfKCk7Ci0gICAgdGhpcy5pbml0RmllbGRzXyh2YWx1
ZXMpOwotICB9Ci0KLQotICBVc2JEZXZpY2VNYW5hZ2VyQ2xpZW50X09uRGV2aWNlUmVtb3ZlZF9Q
YXJhbXMucHJvdG90eXBlLmluaXREZWZhdWx0c18gPSBmdW5jdGlvbigpIHsKLSAgICB0aGlzLmRl
dmljZUluZm8gPSBudWxsOwotICB9OwotICBVc2JEZXZpY2VNYW5hZ2VyQ2xpZW50X09uRGV2aWNl
UmVtb3ZlZF9QYXJhbXMucHJvdG90eXBlLmluaXRGaWVsZHNfID0gZnVuY3Rpb24oZmllbGRzKSB7
Ci0gICAgZm9yKHZhciBmaWVsZCBpbiBmaWVsZHMpIHsKLSAgICAgICAgaWYgKHRoaXMuaGFzT3du
UHJvcGVydHkoZmllbGQpKQotICAgICAgICAgIHRoaXNbZmllbGRdID0gZmllbGRzW2ZpZWxkXTsK
LSAgICB9Ci0gIH07Ci0KLSAgVXNiRGV2aWNlTWFuYWdlckNsaWVudF9PbkRldmljZVJlbW92ZWRf
UGFyYW1zLnZhbGlkYXRlID0gZnVuY3Rpb24obWVzc2FnZVZhbGlkYXRvciwgb2Zmc2V0KSB7Ci0g
ICAgdmFyIGVycjsKLSAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0SGVh
ZGVyKG9mZnNldCwgY29kZWMua1N0cnVjdEhlYWRlclNpemUpOwotICAgIGlmIChlcnIgIT09IHZh
bGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKLSAgICAgICAgcmV0dXJuIGVycjsKLQotICAg
IHZhciBrVmVyc2lvblNpemVzID0gWwotICAgICAge3ZlcnNpb246IDAsIG51bUJ5dGVzOiAxNn0K
LSAgICBdOwotICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RWZXJzaW9u
KG9mZnNldCwga1ZlcnNpb25TaXplcyk7Ci0gICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlk
YXRpb25FcnJvci5OT05FKQotICAgICAgICByZXR1cm4gZXJyOwotCi0KLSAgICAvLyB2YWxpZGF0
ZSBVc2JEZXZpY2VNYW5hZ2VyQ2xpZW50X09uRGV2aWNlUmVtb3ZlZF9QYXJhbXMuZGV2aWNlSW5m
bwotICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RQb2ludGVyKG9mZnNl
dCArIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgMCwgZGV2aWNlJC5Vc2JEZXZpY2VJbmZvLCBm
YWxzZSk7Ci0gICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQot
ICAgICAgICByZXR1cm4gZXJyOwotCi0gICAgcmV0dXJuIHZhbGlkYXRvci52YWxpZGF0aW9uRXJy
b3IuTk9ORTsKLSAgfTsKLQotICBVc2JEZXZpY2VNYW5hZ2VyQ2xpZW50X09uRGV2aWNlUmVtb3Zl
ZF9QYXJhbXMuZW5jb2RlZFNpemUgPSBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDg7Ci0KLSAg
VXNiRGV2aWNlTWFuYWdlckNsaWVudF9PbkRldmljZVJlbW92ZWRfUGFyYW1zLmRlY29kZSA9IGZ1
bmN0aW9uKGRlY29kZXIpIHsKLSAgICB2YXIgcGFja2VkOwotICAgIHZhciB2YWwgPSBuZXcgVXNi
RGV2aWNlTWFuYWdlckNsaWVudF9PbkRldmljZVJlbW92ZWRfUGFyYW1zKCk7Ci0gICAgdmFyIG51
bWJlck9mQnl0ZXMgPSBkZWNvZGVyLnJlYWRVaW50MzIoKTsKLSAgICB2YXIgdmVyc2lvbiA9IGRl
Y29kZXIucmVhZFVpbnQzMigpOwotICAgIHZhbC5kZXZpY2VJbmZvID0gZGVjb2Rlci5kZWNvZGVT
dHJ1Y3RQb2ludGVyKGRldmljZSQuVXNiRGV2aWNlSW5mbyk7Ci0gICAgcmV0dXJuIHZhbDsKLSAg
fTsKLQotICBVc2JEZXZpY2VNYW5hZ2VyQ2xpZW50X09uRGV2aWNlUmVtb3ZlZF9QYXJhbXMuZW5j
b2RlID0gZnVuY3Rpb24oZW5jb2RlciwgdmFsKSB7Ci0gICAgdmFyIHBhY2tlZDsKLSAgICBlbmNv
ZGVyLndyaXRlVWludDMyKFVzYkRldmljZU1hbmFnZXJDbGllbnRfT25EZXZpY2VSZW1vdmVkX1Bh
cmFtcy5lbmNvZGVkU2l6ZSk7Ci0gICAgZW5jb2Rlci53cml0ZVVpbnQzMigwKTsKLSAgICBlbmNv
ZGVyLmVuY29kZVN0cnVjdFBvaW50ZXIoZGV2aWNlJC5Vc2JEZXZpY2VJbmZvLCB2YWwuZGV2aWNl
SW5mbyk7Ci0gIH07Ci0gIHZhciBrVXNiRGV2aWNlTWFuYWdlckNsaWVudF9PbkRldmljZUFkZGVk
X05hbWUgPSAwOwotICB2YXIga1VzYkRldmljZU1hbmFnZXJDbGllbnRfT25EZXZpY2VSZW1vdmVk
X05hbWUgPSAxOwotCi0gIGZ1bmN0aW9uIFVzYkRldmljZU1hbmFnZXJDbGllbnRQdHIoaGFuZGxl
T3JQdHJJbmZvKSB7Ci0gICAgdGhpcy5wdHIgPSBuZXcgYmluZGluZ3MuSW50ZXJmYWNlUHRyQ29u
dHJvbGxlcihVc2JEZXZpY2VNYW5hZ2VyQ2xpZW50LAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlT3JQdHJJbmZvKTsKLSAgfQotCi0gIGZ1
bmN0aW9uIFVzYkRldmljZU1hbmFnZXJDbGllbnRBc3NvY2lhdGVkUHRyKGFzc29jaWF0ZWRJbnRl
cmZhY2VQdHJJbmZvKSB7Ci0gICAgdGhpcy5wdHIgPSBuZXcgYXNzb2NpYXRlZEJpbmRpbmdzLkFz
c29jaWF0ZWRJbnRlcmZhY2VQdHJDb250cm9sbGVyKAotICAgICAgICBVc2JEZXZpY2VNYW5hZ2Vy
Q2xpZW50LCBhc3NvY2lhdGVkSW50ZXJmYWNlUHRySW5mbyk7Ci0gIH0KLQotICBVc2JEZXZpY2VN
YW5hZ2VyQ2xpZW50QXNzb2NpYXRlZFB0ci5wcm90b3R5cGUgPQotICAgICAgT2JqZWN0LmNyZWF0
ZShVc2JEZXZpY2VNYW5hZ2VyQ2xpZW50UHRyLnByb3RvdHlwZSk7Ci0gIFVzYkRldmljZU1hbmFn
ZXJDbGllbnRBc3NvY2lhdGVkUHRyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9Ci0gICAgICBVc2JE
ZXZpY2VNYW5hZ2VyQ2xpZW50QXNzb2NpYXRlZFB0cjsKLQotICBmdW5jdGlvbiBVc2JEZXZpY2VN
YW5hZ2VyQ2xpZW50UHJveHkocmVjZWl2ZXIpIHsKLSAgICB0aGlzLnJlY2VpdmVyXyA9IHJlY2Vp
dmVyOwotICB9Ci0gIFVzYkRldmljZU1hbmFnZXJDbGllbnRQdHIucHJvdG90eXBlLm9uRGV2aWNl
QWRkZWQgPSBmdW5jdGlvbigpIHsKLSAgICByZXR1cm4gVXNiRGV2aWNlTWFuYWdlckNsaWVudFBy
b3h5LnByb3RvdHlwZS5vbkRldmljZUFkZGVkCi0gICAgICAgIC5hcHBseSh0aGlzLnB0ci5nZXRQ
cm94eSgpLCBhcmd1bWVudHMpOwotICB9OwotCi0gIFVzYkRldmljZU1hbmFnZXJDbGllbnRQcm94
eS5wcm90b3R5cGUub25EZXZpY2VBZGRlZCA9IGZ1bmN0aW9uKGRldmljZUluZm8pIHsKLSAgICB2
YXIgcGFyYW1zXyA9IG5ldyBVc2JEZXZpY2VNYW5hZ2VyQ2xpZW50X09uRGV2aWNlQWRkZWRfUGFy
YW1zKCk7Ci0gICAgcGFyYW1zXy5kZXZpY2VJbmZvID0gZGV2aWNlSW5mbzsKLSAgICB2YXIgYnVp
bGRlciA9IG5ldyBjb2RlYy5NZXNzYWdlVjBCdWlsZGVyKAotICAgICAgICBrVXNiRGV2aWNlTWFu
YWdlckNsaWVudF9PbkRldmljZUFkZGVkX05hbWUsCi0gICAgICAgIGNvZGVjLmFsaWduKFVzYkRl
dmljZU1hbmFnZXJDbGllbnRfT25EZXZpY2VBZGRlZF9QYXJhbXMuZW5jb2RlZFNpemUpKTsKLSAg
ICBidWlsZGVyLmVuY29kZVN0cnVjdChVc2JEZXZpY2VNYW5hZ2VyQ2xpZW50X09uRGV2aWNlQWRk
ZWRfUGFyYW1zLCBwYXJhbXNfKTsKLSAgICB2YXIgbWVzc2FnZSA9IGJ1aWxkZXIuZmluaXNoKCk7
Ci0gICAgdGhpcy5yZWNlaXZlcl8uYWNjZXB0KG1lc3NhZ2UpOwotICB9OwotICBVc2JEZXZpY2VN
YW5hZ2VyQ2xpZW50UHRyLnByb3RvdHlwZS5vbkRldmljZVJlbW92ZWQgPSBmdW5jdGlvbigpIHsK
LSAgICByZXR1cm4gVXNiRGV2aWNlTWFuYWdlckNsaWVudFByb3h5LnByb3RvdHlwZS5vbkRldmlj
ZVJlbW92ZWQKLSAgICAgICAgLmFwcGx5KHRoaXMucHRyLmdldFByb3h5KCksIGFyZ3VtZW50cyk7
Ci0gIH07Ci0KLSAgVXNiRGV2aWNlTWFuYWdlckNsaWVudFByb3h5LnByb3RvdHlwZS5vbkRldmlj
ZVJlbW92ZWQgPSBmdW5jdGlvbihkZXZpY2VJbmZvKSB7Ci0gICAgdmFyIHBhcmFtc18gPSBuZXcg
VXNiRGV2aWNlTWFuYWdlckNsaWVudF9PbkRldmljZVJlbW92ZWRfUGFyYW1zKCk7Ci0gICAgcGFy
YW1zXy5kZXZpY2VJbmZvID0gZGV2aWNlSW5mbzsKLSAgICB2YXIgYnVpbGRlciA9IG5ldyBjb2Rl
Yy5NZXNzYWdlVjBCdWlsZGVyKAotICAgICAgICBrVXNiRGV2aWNlTWFuYWdlckNsaWVudF9PbkRl
dmljZVJlbW92ZWRfTmFtZSwKLSAgICAgICAgY29kZWMuYWxpZ24oVXNiRGV2aWNlTWFuYWdlckNs
aWVudF9PbkRldmljZVJlbW92ZWRfUGFyYW1zLmVuY29kZWRTaXplKSk7Ci0gICAgYnVpbGRlci5l
bmNvZGVTdHJ1Y3QoVXNiRGV2aWNlTWFuYWdlckNsaWVudF9PbkRldmljZVJlbW92ZWRfUGFyYW1z
LCBwYXJhbXNfKTsKLSAgICB2YXIgbWVzc2FnZSA9IGJ1aWxkZXIuZmluaXNoKCk7Ci0gICAgdGhp
cy5yZWNlaXZlcl8uYWNjZXB0KG1lc3NhZ2UpOwotICB9OwotCi0gIGZ1bmN0aW9uIFVzYkRldmlj
ZU1hbmFnZXJDbGllbnRTdHViKGRlbGVnYXRlKSB7Ci0gICAgdGhpcy5kZWxlZ2F0ZV8gPSBkZWxl
Z2F0ZTsKLSAgfQotICBVc2JEZXZpY2VNYW5hZ2VyQ2xpZW50U3R1Yi5wcm90b3R5cGUub25EZXZp
Y2VBZGRlZCA9IGZ1bmN0aW9uKGRldmljZUluZm8pIHsKLSAgICByZXR1cm4gdGhpcy5kZWxlZ2F0
ZV8gJiYgdGhpcy5kZWxlZ2F0ZV8ub25EZXZpY2VBZGRlZCAmJiB0aGlzLmRlbGVnYXRlXy5vbkRl
dmljZUFkZGVkKGRldmljZUluZm8pOwotICB9Ci0gIFVzYkRldmljZU1hbmFnZXJDbGllbnRTdHVi
LnByb3RvdHlwZS5vbkRldmljZVJlbW92ZWQgPSBmdW5jdGlvbihkZXZpY2VJbmZvKSB7Ci0gICAg
cmV0dXJuIHRoaXMuZGVsZWdhdGVfICYmIHRoaXMuZGVsZWdhdGVfLm9uRGV2aWNlUmVtb3ZlZCAm
JiB0aGlzLmRlbGVnYXRlXy5vbkRldmljZVJlbW92ZWQoZGV2aWNlSW5mbyk7Ci0gIH0KLQotICBV
c2JEZXZpY2VNYW5hZ2VyQ2xpZW50U3R1Yi5wcm90b3R5cGUuYWNjZXB0ID0gZnVuY3Rpb24obWVz
c2FnZSkgewotICAgIHZhciByZWFkZXIgPSBuZXcgY29kZWMuTWVzc2FnZVJlYWRlcihtZXNzYWdl
KTsKLSAgICBzd2l0Y2ggKHJlYWRlci5tZXNzYWdlTmFtZSkgewotICAgIGNhc2Uga1VzYkRldmlj
ZU1hbmFnZXJDbGllbnRfT25EZXZpY2VBZGRlZF9OYW1lOgotICAgICAgdmFyIHBhcmFtcyA9IHJl
YWRlci5kZWNvZGVTdHJ1Y3QoVXNiRGV2aWNlTWFuYWdlckNsaWVudF9PbkRldmljZUFkZGVkX1Bh
cmFtcyk7Ci0gICAgICB0aGlzLm9uRGV2aWNlQWRkZWQocGFyYW1zLmRldmljZUluZm8pOwotICAg
ICAgcmV0dXJuIHRydWU7Ci0gICAgY2FzZSBrVXNiRGV2aWNlTWFuYWdlckNsaWVudF9PbkRldmlj
ZVJlbW92ZWRfTmFtZToKLSAgICAgIHZhciBwYXJhbXMgPSByZWFkZXIuZGVjb2RlU3RydWN0KFVz
YkRldmljZU1hbmFnZXJDbGllbnRfT25EZXZpY2VSZW1vdmVkX1BhcmFtcyk7Ci0gICAgICB0aGlz
Lm9uRGV2aWNlUmVtb3ZlZChwYXJhbXMuZGV2aWNlSW5mbyk7Ci0gICAgICByZXR1cm4gdHJ1ZTsK
LSAgICBkZWZhdWx0OgotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgfTsKLQotICBVc2JE
ZXZpY2VNYW5hZ2VyQ2xpZW50U3R1Yi5wcm90b3R5cGUuYWNjZXB0V2l0aFJlc3BvbmRlciA9Ci0g
ICAgICBmdW5jdGlvbihtZXNzYWdlLCByZXNwb25kZXIpIHsKLSAgICB2YXIgcmVhZGVyID0gbmV3
IGNvZGVjLk1lc3NhZ2VSZWFkZXIobWVzc2FnZSk7Ci0gICAgc3dpdGNoIChyZWFkZXIubWVzc2Fn
ZU5hbWUpIHsKLSAgICBkZWZhdWx0OgotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgfTsK
LQotICBmdW5jdGlvbiB2YWxpZGF0ZVVzYkRldmljZU1hbmFnZXJDbGllbnRSZXF1ZXN0KG1lc3Nh
Z2VWYWxpZGF0b3IpIHsKLSAgICB2YXIgbWVzc2FnZSA9IG1lc3NhZ2VWYWxpZGF0b3IubWVzc2Fn
ZTsKLSAgICB2YXIgcGFyYW1zQ2xhc3MgPSBudWxsOwotICAgIHN3aXRjaCAobWVzc2FnZS5nZXRO
YW1lKCkpIHsKLSAgICAgIGNhc2Uga1VzYkRldmljZU1hbmFnZXJDbGllbnRfT25EZXZpY2VBZGRl
ZF9OYW1lOgotICAgICAgICBpZiAoIW1lc3NhZ2UuZXhwZWN0c1Jlc3BvbnNlKCkgJiYgIW1lc3Nh
Z2UuaXNSZXNwb25zZSgpKQotICAgICAgICAgIHBhcmFtc0NsYXNzID0gVXNiRGV2aWNlTWFuYWdl
ckNsaWVudF9PbkRldmljZUFkZGVkX1BhcmFtczsKLSAgICAgIGJyZWFrOwotICAgICAgY2FzZSBr
VXNiRGV2aWNlTWFuYWdlckNsaWVudF9PbkRldmljZVJlbW92ZWRfTmFtZToKLSAgICAgICAgaWYg
KCFtZXNzYWdlLmV4cGVjdHNSZXNwb25zZSgpICYmICFtZXNzYWdlLmlzUmVzcG9uc2UoKSkKLSAg
ICAgICAgICBwYXJhbXNDbGFzcyA9IFVzYkRldmljZU1hbmFnZXJDbGllbnRfT25EZXZpY2VSZW1v
dmVkX1BhcmFtczsKLSAgICAgIGJyZWFrOwotICAgIH0KLSAgICBpZiAocGFyYW1zQ2xhc3MgPT09
IG51bGwpCi0gICAgICByZXR1cm4gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FOwotICAg
IHJldHVybiBwYXJhbXNDbGFzcy52YWxpZGF0ZShtZXNzYWdlVmFsaWRhdG9yLCBtZXNzYWdlVmFs
aWRhdG9yLm1lc3NhZ2UuZ2V0SGVhZGVyTnVtQnl0ZXMoKSk7Ci0gIH0KLQotICBmdW5jdGlvbiB2
YWxpZGF0ZVVzYkRldmljZU1hbmFnZXJDbGllbnRSZXNwb25zZShtZXNzYWdlVmFsaWRhdG9yKSB7
Ci0gICAgcmV0dXJuIHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORTsKLSAgfQotCi0gIHZh
ciBVc2JEZXZpY2VNYW5hZ2VyQ2xpZW50ID0gewotICAgIG5hbWU6ICdkZXZpY2UubW9qb20uVXNi
RGV2aWNlTWFuYWdlckNsaWVudCcsCi0gICAga1ZlcnNpb246IDAsCi0gICAgcHRyQ2xhc3M6IFVz
YkRldmljZU1hbmFnZXJDbGllbnRQdHIsCi0gICAgcHJveHlDbGFzczogVXNiRGV2aWNlTWFuYWdl
ckNsaWVudFByb3h5LAotICAgIHN0dWJDbGFzczogVXNiRGV2aWNlTWFuYWdlckNsaWVudFN0dWIs
Ci0gICAgdmFsaWRhdGVSZXF1ZXN0OiB2YWxpZGF0ZVVzYkRldmljZU1hbmFnZXJDbGllbnRSZXF1
ZXN0LAotICAgIHZhbGlkYXRlUmVzcG9uc2U6IG51bGwsCi0gIH07Ci0gIFVzYkRldmljZU1hbmFn
ZXJDbGllbnRTdHViLnByb3RvdHlwZS52YWxpZGF0b3IgPSB2YWxpZGF0ZVVzYkRldmljZU1hbmFn
ZXJDbGllbnRSZXF1ZXN0OwotICBVc2JEZXZpY2VNYW5hZ2VyQ2xpZW50UHJveHkucHJvdG90eXBl
LnZhbGlkYXRvciA9IG51bGw7Ci0gIGV4cG9ydHMuVXNiRGV2aWNlTWFuYWdlckNsaWVudCA9IFVz
YkRldmljZU1hbmFnZXJDbGllbnQ7Ci0gIGV4cG9ydHMuVXNiRGV2aWNlTWFuYWdlckNsaWVudFB0
ciA9IFVzYkRldmljZU1hbmFnZXJDbGllbnRQdHI7Ci0gIGV4cG9ydHMuVXNiRGV2aWNlTWFuYWdl
ckNsaWVudEFzc29jaWF0ZWRQdHIgPSBVc2JEZXZpY2VNYW5hZ2VyQ2xpZW50QXNzb2NpYXRlZFB0
cjsKLX0pKCk7ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvTGF5b3V0
VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0v
ZGV2aWNlX21hbmFnZXJfY2xpZW50Lm1vam9tLmpzLmhlYWRlcnMgYi9MYXlvdXRUZXN0cy9pbXBv
cnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS9kZXZpY2VfbWFu
YWdlcl9jbGllbnQubW9qb20uanMuaGVhZGVycwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggNmM2MWEzNGE0ZWMyZTc1MDk2ZGIwZWI5Zjc3NDhiMTQyZjBkYjdiYi4uMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93
M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS9kZXZpY2VfbWFuYWdlcl9j
bGllbnQubW9qb20uanMuaGVhZGVycworKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLUNvbnRl
bnQtVHlwZTogdGV4dC9qYXZhc2NyaXB0OyBjaGFyc2V0PXV0Zi04ClwgTm8gbmV3bGluZSBhdCBl
bmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0
Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vZ2VuZXJpY19zZW5zb3JfbW9ja3MuanMgYi9M
YXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9jaHJv
bWl1bS9nZW5lcmljX3NlbnNvcl9tb2Nrcy5qcwppbmRleCBmZTJmNzBiZTM0ZWJkZWViNzRkZGFj
NWU1ZmE0YjM5Njg0YjBlM2I1Li5mZjExY2ExYWIwYmMzYjc3MDc1NjE4ZmU1YjU3OTg0MjUxNTJj
NWVkIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRl
c3RzL3Jlc291cmNlcy9jaHJvbWl1bS9nZW5lcmljX3NlbnNvcl9tb2Nrcy5qcworKysgYi9MYXlv
dXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1
bS9nZW5lcmljX3NlbnNvcl9tb2Nrcy5qcwpAQCAtNDYsNyArNDYsOSBAQCB2YXIgR2VuZXJpY1Nl
bnNvclRlc3QgPSAoKCkgPT4gewogICAgICAgdGhpcy5yZWFkaW5nRGF0YV8gPSBudWxsOwogICAg
ICAgdGhpcy5yZXF1ZXN0ZWRGcmVxdWVuY2llc18gPSBbXTsKICAgICAgIGxldCBydiA9IGhhbmRs
ZS5tYXBCdWZmZXIob2Zmc2V0LCBzaXplKTsKLSAgICAgIGFzc2VydF9lcXVhbHMocnYucmVzdWx0
LCBNb2pvLlJFU1VMVF9PSywgIkZhaWxlZCB0byBtYXAgc2hhcmVkIGJ1ZmZlciIpOworICAgICAg
aWYgKHJ2LnJlc3VsdCAhPSBNb2pvLlJFU1VMVF9PSykgeworICAgICAgICB0aHJvdyBuZXcgRXJy
b3IoIk1vY2tTZW5zb3IoKTogRmFpbGVkIHRvIG1hcCBzaGFyZWQgYnVmZmVyIik7CisgICAgICB9
CiAgICAgICB0aGlzLmJ1ZmZlcl8gPSBuZXcgRmxvYXQ2NEFycmF5KHJ2LmJ1ZmZlcik7CiAgICAg
ICB0aGlzLmJ1ZmZlcl8uZmlsbCgwKTsKICAgICAgIHRoaXMuYmluZGluZ18gPSBuZXcgbW9qby5C
aW5kaW5nKGRldmljZS5tb2pvbS5TZW5zb3IsIHRoaXMsCkBAIC02NCw4ICs2Niw2IEBAIHZhciBH
ZW5lcmljU2Vuc29yVGVzdCA9ICgoKSA9PiB7CiAgICAgLy8gQWRkcyBjb25maWd1cmF0aW9uIGZv
ciB0aGUgc2Vuc29yIGFuZCBzdGFydHMgcmVwb3J0aW5nIGZha2UgZGF0YQogICAgIC8vIHRocm91
Z2ggc2V0U2Vuc29yUmVhZGluZyBmdW5jdGlvbi4KICAgICBhc3luYyBhZGRDb25maWd1cmF0aW9u
KGNvbmZpZ3VyYXRpb24pIHsKLSAgICAgIGFzc2VydF9ub3RfZXF1YWxzKGNvbmZpZ3VyYXRpb24s
IG51bGwsICJJbnZhbGlkIHNlbnNvciBjb25maWd1cmF0aW9uLiIpOwotCiAgICAgICB0aGlzLnJl
cXVlc3RlZEZyZXF1ZW5jaWVzXy5wdXNoKGNvbmZpZ3VyYXRpb24uZnJlcXVlbmN5KTsKICAgICAg
IC8vIFNvcnQgdXNpbmcgZGVzY2VuZGluZyBvcmRlci4KICAgICAgIHRoaXMucmVxdWVzdGVkRnJl
cXVlbmNpZXNfLnNvcnQoCkBAIC05Nyw2ICs5NywxNCBAQCB2YXIgR2VuZXJpY1NlbnNvclRlc3Qg
PSAoKCkgPT4gewogICAgICAgdGhpcy5ub3RpZnlPblJlYWRpbmdDaGFuZ2VfID0gbm90aWZ5T25S
ZWFkaW5nQ2hhbmdlOwogICAgIH0KIAorICAgIHJlc3VtZSgpIHsKKyAgICAgIHRoaXMuc3RhcnRS
ZWFkaW5nKCk7CisgICAgfQorCisgICAgc3VzcGVuZCgpIHsKKyAgICAgIHRoaXMuc3RvcFJlYWRp
bmcoKTsKKyAgICB9CisKICAgICAvLyBNb2NrIGZ1bmN0aW9ucwogCiAgICAgLy8gUmVzZXRzIG1v
Y2sgU2Vuc29yIHN0YXRlLgpAQCAtMTQzLDggKzE1MSwxMCBAQCB2YXIgR2VuZXJpY1NlbnNvclRl
c3QgPSAoKCkgPT4gewogICAgICAgICAgIC8vIHxidWZmZXJffCBpcyBhIFR5cGVkQXJyYXksIHNv
IHdlIG5lZWQgdG8gbWFrZSBzdXJlIHBhc3MgYW4KICAgICAgICAgICAvLyBhcnJheSB0byBzZXQo
KS4KICAgICAgICAgICBjb25zdCByZWFkaW5nID0gdGhpcy5yZWFkaW5nRGF0YV8ubmV4dCgpLnZh
bHVlOwotICAgICAgICAgIGFzc2VydF90cnVlKEFycmF5LmlzQXJyYXkocmVhZGluZyksICJUaGUg
cmVhZGluZ3MgcGFzc2VkIHRvICIgKwotICAgICAgICAgICAgICAic2V0U2Vuc29yUmVhZGluZygp
IG11c3QgYmUgYXJyYXlzLiIpOworICAgICAgICAgIGlmICghQXJyYXkuaXNBcnJheShyZWFkaW5n
KSkgeworICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigic3RhcnRSZWFkaW5nKCk6IFRo
ZSByZWFkaW5ncyBwYXNzZWQgdG8gIiArCisgICAgICAgICAgICAgICJzZXRTZW5zb3JSZWFkaW5n
KCkgbXVzdCBiZSBhcnJheXMiKTsKKyAgICAgICAgICB9CiAgICAgICAgICAgdGhpcy5idWZmZXJf
LnNldChyZWFkaW5nLCAyKTsKICAgICAgICAgfQogICAgICAgICAvLyBGb3IgYWxsIHRlc3RzIHNl
bnNvciByZWFkaW5nIHNob3VsZCBoYXZlIG1vbm90b25pY2FsbHkKQEAgLTE2NSw5ICsxNzUsMTUg
QEAgdmFyIEdlbmVyaWNTZW5zb3JUZXN0ID0gKCgpID0+IHsKICAgICB9CiAKICAgICBnZXRTYW1w
bGluZ0ZyZXF1ZW5jeSgpIHsKLSAgICAgICBhc3NlcnRfdHJ1ZSh0aGlzLnJlcXVlc3RlZEZyZXF1
ZW5jaWVzXy5sZW5ndGggPiAwKTsKKyAgICAgIGlmICh0aGlzLnJlcXVlc3RlZEZyZXF1ZW5jaWVz
Xy5sZW5ndGggPT0gMCkgeworICAgICAgICB0aHJvdyBuZXcgRXJyb3IoImdldFNhbXBsaW5nRnJl
cXVlbmN5KCk6IE5vIGNvbmZpZ3VyZWQgZnJlcXVlbmN5Iik7CisgICAgICB9CiAgICAgICAgcmV0
dXJuIHRoaXMucmVxdWVzdGVkRnJlcXVlbmNpZXNfWzBdOwogICAgIH0KKworICAgIGlzUmVhZGlu
Z0RhdGEoKSB7CisgICAgICByZXR1cm4gdGhpcy5zZW5zb3JSZWFkaW5nVGltZXJJZF8gIT0gbnVs
bDsKKyAgICB9CiAgIH0KIAogICAvLyBDbGFzcyB0aGF0IG1vY2tzIFNlbnNvclByb3ZpZGVyIGlu
dGVyZmFjZSBkZWZpbmVkIGluCkBAIC0xNzksNyArMTk1LDkgQEAgdmFyIEdlbmVyaWNTZW5zb3JU
ZXN0ID0gKCgpID0+IHsKICAgICAgIHRoaXMuc2hhcmVkQnVmZmVyU2l6ZUluQnl0ZXNfID0gdGhp
cy5yZWFkaW5nU2l6ZUluQnl0ZXNfICoKICAgICAgICAgICAgICAgKGRldmljZS5tb2pvbS5TZW5z
b3JUeXBlLk1BWF9WQUxVRSArIDEpOwogICAgICAgY29uc3QgcnYgPSBNb2pvLmNyZWF0ZVNoYXJl
ZEJ1ZmZlcih0aGlzLnNoYXJlZEJ1ZmZlclNpemVJbkJ5dGVzXyk7Ci0gICAgICBhc3NlcnRfZXF1
YWxzKHJ2LnJlc3VsdCwgTW9qby5SRVNVTFRfT0ssICJGYWlsZWQgdG8gY3JlYXRlIGJ1ZmZlciIp
OworICAgICAgaWYgKHJ2LnJlc3VsdCAhPSBNb2pvLlJFU1VMVF9PSykgeworICAgICAgICB0aHJv
dyBuZXcgRXJyb3IoIk1vY2tTZW5zb3JQcm92aWRlcjogRmFpbGVkIHRvIG1hcCBzaGFyZWQgYnVm
ZmVyIik7CisgICAgICB9CiAgICAgICB0aGlzLnNoYXJlZEJ1ZmZlckhhbmRsZV8gPSBydi5oYW5k
bGU7CiAgICAgICB0aGlzLmFjdGl2ZVNlbnNvcnNfID0gbmV3IE1hcCgpOwogICAgICAgdGhpcy5y
ZXNvbHZlRnVuY3NfID0gbmV3IE1hcCgpOwpAQCAtMjM5LDggKzI1Nyw5IEBAIHZhciBHZW5lcmlj
U2Vuc29yVGVzdCA9ICgoKSA9PiB7CiAgICAgICB9CiAKICAgICAgIGNvbnN0IHJ2ID0gdGhpcy5z
aGFyZWRCdWZmZXJIYW5kbGVfLmR1cGxpY2F0ZUJ1ZmZlckhhbmRsZSgpOwotCi0gICAgICBhc3Nl
cnRfZXF1YWxzKHJ2LnJlc3VsdCwgTW9qby5SRVNVTFRfT0spOworICAgICAgaWYgKHJ2LnJlc3Vs
dCAhPSBNb2pvLlJFU1VMVF9PSykgeworICAgICAgICB0aHJvdyBuZXcgRXJyb3IoImdldFNlbnNv
cigpOiBmYWlsZWQgdG8gZHVwbGljYXRlIE1vam8gYnVmZmVyIGhhbmRsZXIiKTsKKyAgICAgIH0K
IAogICAgICAgY29uc3QgZGVmYXVsdENvbmZpZyA9IHsgZnJlcXVlbmN5OiBERUZBVUxUX0ZSRVFV
RU5DWSB9OwogICAgICAgLy8gQ29uc2lkZXIgc2Vuc29yIHRyYWl0cyB0byBtZWV0IGFzc2VydGlv
bnMgaW4gQysrIGNvZGUgKHNlZQpAQCAtMzI1LDcgKzM0NCw5IEBAIHZhciBHZW5lcmljU2Vuc29y
VGVzdCA9ICgoKSA9PiB7CiAgICAgLy8gUmV0dXJucyBtb2NrIHNlbnNvciB0aGF0IHdhcyBjcmVh
dGVkIGluIGdldFNlbnNvciB0byB0aGUgbGF5b3V0IHRlc3QuCiAgICAgZ2V0Q3JlYXRlZFNlbnNv
cihzZW5zb3JUeXBlKSB7CiAgICAgICBjb25zdCB0eXBlID0gdGhpcy5tb2pvbVNlbnNvclR5cGVf
LmdldChzZW5zb3JUeXBlKTsKLSAgICAgIGFzc2VydF9lcXVhbHModHlwZW9mIHR5cGUsICJudW1i
ZXIiLCAiQSBzZW5zb3IgdHlwZSBtdXN0IGJlIHNwZWNpZmllZC4iKTsKKyAgICAgIGlmICh0eXBl
b2YgdHlwZSAhPSAibnVtYmVyIikgeworICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBnZXRD
cmVhdGVkU2Vuc29yKCk6IEludmFsaWQgc2Vuc29yIHR5cGUgJHtzZW5zb3JUeXBlfWApOworICAg
ICAgfQogCiAgICAgICBpZiAodGhpcy5hY3RpdmVTZW5zb3JzXy5oYXModHlwZSkpIHsKICAgICAg
ICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh0aGlzLmFjdGl2ZVNlbnNvcnNfLmdldCh0eXBlKSk7
CkBAIC0zNjUsMTAgKzM4NiwxNSBAQCB2YXIgR2VuZXJpY1NlbnNvclRlc3QgPSAoKCkgPT4gewog
ICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0NhbGwgcmVzZXQoKSBiZWZvcmUgaW5pdGlhbGl6ZSgp
LicpOwogCiAgICAgICAvLyBHcmFudCBzZW5zb3IgcGVybWlzc2lvbnMgZm9yIENocm9taXVtIHRl
c3Rkcml2ZXIuCi0gICAgICBmb3IgKGNvbnN0IGVudHJ5IG9mIFsnYWNjZWxlcm9tZXRlcicsICdn
eXJvc2NvcGUnLAotICAgICAgICAgICdtYWduZXRvbWV0ZXInLCAnYW1iaWVudC1saWdodC1zZW5z
b3InXSkgewotICAgICAgICBhd2FpdCB0ZXN0X2RyaXZlci5zZXRfcGVybWlzc2lvbih7IG5hbWU6
IGVudHJ5IH0sICdncmFudGVkJywgZmFsc2UpOwotICAgICAgfTsKKyAgICAgIC8vIHRlc3Rkcml2
ZXIuanMgb25seSB3b3JrcyBpbiB0aGUgdG9wLWxldmVsIGJyb3dzaW5nIGNvbnRleHQsIHNvIGRv
CisgICAgICAvLyBub3RoaW5nIGlmIHdlJ3JlIGluIGUuZy4gYW4gaWZyYW1lLgorICAgICAgaWYg
KHdpbmRvdy5wYXJlbnQgPT09IHdpbmRvdykgeworICAgICAgICBmb3IgKGNvbnN0IGVudHJ5Cisg
ICAgICAgICAgICAgICAgIG9mIFsnYWNjZWxlcm9tZXRlcicsICdneXJvc2NvcGUnLCAnbWFnbmV0
b21ldGVyJywKKyAgICAgICAgICAgICAgICAgICAgICdhbWJpZW50LWxpZ2h0LXNlbnNvciddKSB7
CisgICAgICAgICAgYXdhaXQgdGVzdF9kcml2ZXIuc2V0X3Blcm1pc3Npb24oe25hbWU6IGVudHJ5
fSwgJ2dyYW50ZWQnLCBmYWxzZSk7CisgICAgICAgIH0KKyAgICAgIH0KIAogICAgICAgdGVzdElu
dGVybmFsLnNlbnNvclByb3ZpZGVyID0gbmV3IE1vY2tTZW5zb3JQcm92aWRlcjsKICAgICAgIHRl
c3RJbnRlcm5hbC5pbml0aWFsaXplZCA9IHRydWU7CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9p
bXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS9pbWFnZV9j
YXB0dXJlLW1vam9tLmpzLmhlYWRlcnMgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBs
YXRmb3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS9pbWFnZV9jYXB0dXJlLW1vam9tLmpzLmhl
YWRlcnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZjNjFhMzRhNGVjMmU3NTA5NmRi
MGViOWY3NzQ4YjE0MmYwZGI3YmIuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAKLS0tIGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9y
ZXNvdXJjZXMvY2hyb21pdW0vaW1hZ2VfY2FwdHVyZS1tb2pvbS5qcy5oZWFkZXJzCisrKyAvZGV2
L251bGwKQEAgLTEgKzAsMCBAQAotQ29udGVudC1UeXBlOiB0ZXh0L2phdmFzY3JpcHQ7IGNoYXJz
ZXQ9dXRmLTgKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9MYXlvdXRU
ZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS9p
bWFnZV9jYXB0dXJlLm1vam9tLmpzIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0
Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vaW1hZ2VfY2FwdHVyZS5tb2pvbS5qcwpkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjE0NWQ3YTM0MDI1NDNhMTgyMjk2MjlkYTAxMzNk
ZWE4MWRkMzc1NS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0g
YS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9j
aHJvbWl1bS9pbWFnZV9jYXB0dXJlLm1vam9tLmpzCisrKyAvZGV2L251bGwKQEAgLTEsMTQwMyAr
MCwwIEBACi0vLyBDb3B5cmlnaHQgMjAxNCBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEg
QlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZp
bGUuCi0KLSd1c2Ugc3RyaWN0JzsKLQotKGZ1bmN0aW9uKCkgewotICB2YXIgbW9qb21JZCA9ICdt
ZWRpYS9jYXB0dXJlL21vam9tL2ltYWdlX2NhcHR1cmUubW9qb20nOwotICBpZiAobW9qby5pbnRl
cm5hbC5pc01vam9tTG9hZGVkKG1vam9tSWQpKSB7Ci0gICAgY29uc29sZS53YXJuKCdUaGUgZm9s
bG93aW5nIG1vam9tIGlzIGxvYWRlZCBtdWx0aXBsZSB0aW1lczogJyArIG1vam9tSWQpOwotICAg
IHJldHVybjsKLSAgfQotICBtb2pvLmludGVybmFsLm1hcmtNb2pvbUxvYWRlZChtb2pvbUlkKTsK
LSAgdmFyIGJpbmRpbmdzID0gbW9qbzsKLSAgdmFyIGFzc29jaWF0ZWRCaW5kaW5ncyA9IG1vam87
Ci0gIHZhciBjb2RlYyA9IG1vam8uaW50ZXJuYWw7Ci0gIHZhciB2YWxpZGF0b3IgPSBtb2pvLmlu
dGVybmFsOwotCi0gIHZhciBleHBvcnRzID0gbW9qby5pbnRlcm5hbC5leHBvc2VOYW1lc3BhY2Uo
J21lZGlhLm1vam9tJyk7Ci0KLQotICB2YXIgTWV0ZXJpbmdNb2RlID0ge307Ci0gIE1ldGVyaW5n
TW9kZS5OT05FID0gMDsKLSAgTWV0ZXJpbmdNb2RlLk1BTlVBTCA9IE1ldGVyaW5nTW9kZS5OT05F
ICsgMTsKLSAgTWV0ZXJpbmdNb2RlLlNJTkdMRV9TSE9UID0gTWV0ZXJpbmdNb2RlLk1BTlVBTCAr
IDE7Ci0gIE1ldGVyaW5nTW9kZS5DT05USU5VT1VTID0gTWV0ZXJpbmdNb2RlLlNJTkdMRV9TSE9U
ICsgMTsKLSAgTWV0ZXJpbmdNb2RlLk1JTl9WQUxVRSA9IDAsCi0gIE1ldGVyaW5nTW9kZS5NQVhf
VkFMVUUgPSAzLAotCi0gIE1ldGVyaW5nTW9kZS5pc0tub3duRW51bVZhbHVlID0gZnVuY3Rpb24o
dmFsdWUpIHsKLSAgICBzd2l0Y2ggKHZhbHVlKSB7Ci0gICAgY2FzZSAwOgotICAgIGNhc2UgMToK
LSAgICBjYXNlIDI6Ci0gICAgY2FzZSAzOgotICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAg
IHJldHVybiBmYWxzZTsKLSAgfTsKLQotICBNZXRlcmluZ01vZGUudmFsaWRhdGUgPSBmdW5jdGlv
bihlbnVtVmFsdWUpIHsKLSAgICB2YXIgaXNFeHRlbnNpYmxlID0gZmFsc2U7Ci0gICAgaWYgKGlz
RXh0ZW5zaWJsZSB8fCB0aGlzLmlzS25vd25FbnVtVmFsdWUoZW51bVZhbHVlKSkKLSAgICAgIHJl
dHVybiB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkU7Ci0KLSAgICByZXR1cm4gdmFsaWRh
dG9yLnZhbGlkYXRpb25FcnJvci5VTktOT1dOX0VOVU1fVkFMVUU7Ci0gIH07Ci0gIHZhciBSZWRF
eWVSZWR1Y3Rpb24gPSB7fTsKLSAgUmVkRXllUmVkdWN0aW9uLk5FVkVSID0gMDsKLSAgUmVkRXll
UmVkdWN0aW9uLkFMV0FZUyA9IFJlZEV5ZVJlZHVjdGlvbi5ORVZFUiArIDE7Ci0gIFJlZEV5ZVJl
ZHVjdGlvbi5DT05UUk9MTEFCTEUgPSBSZWRFeWVSZWR1Y3Rpb24uQUxXQVlTICsgMTsKLSAgUmVk
RXllUmVkdWN0aW9uLk1JTl9WQUxVRSA9IDAsCi0gIFJlZEV5ZVJlZHVjdGlvbi5NQVhfVkFMVUUg
PSAyLAotCi0gIFJlZEV5ZVJlZHVjdGlvbi5pc0tub3duRW51bVZhbHVlID0gZnVuY3Rpb24odmFs
dWUpIHsKLSAgICBzd2l0Y2ggKHZhbHVlKSB7Ci0gICAgY2FzZSAwOgotICAgIGNhc2UgMToKLSAg
ICBjYXNlIDI6Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwot
ICB9OwotCi0gIFJlZEV5ZVJlZHVjdGlvbi52YWxpZGF0ZSA9IGZ1bmN0aW9uKGVudW1WYWx1ZSkg
ewotICAgIHZhciBpc0V4dGVuc2libGUgPSBmYWxzZTsKLSAgICBpZiAoaXNFeHRlbnNpYmxlIHx8
IHRoaXMuaXNLbm93bkVudW1WYWx1ZShlbnVtVmFsdWUpKQotICAgICAgcmV0dXJuIHZhbGlkYXRv
ci52YWxpZGF0aW9uRXJyb3IuTk9ORTsKLQotICAgIHJldHVybiB2YWxpZGF0b3IudmFsaWRhdGlv
bkVycm9yLlVOS05PV05fRU5VTV9WQUxVRTsKLSAgfTsKLSAgdmFyIEZpbGxMaWdodE1vZGUgPSB7
fTsKLSAgRmlsbExpZ2h0TW9kZS5PRkYgPSAwOwotICBGaWxsTGlnaHRNb2RlLkFVVE8gPSBGaWxs
TGlnaHRNb2RlLk9GRiArIDE7Ci0gIEZpbGxMaWdodE1vZGUuRkxBU0ggPSBGaWxsTGlnaHRNb2Rl
LkFVVE8gKyAxOwotICBGaWxsTGlnaHRNb2RlLk1JTl9WQUxVRSA9IDAsCi0gIEZpbGxMaWdodE1v
ZGUuTUFYX1ZBTFVFID0gMiwKLQotICBGaWxsTGlnaHRNb2RlLmlzS25vd25FbnVtVmFsdWUgPSBm
dW5jdGlvbih2YWx1ZSkgewotICAgIHN3aXRjaCAodmFsdWUpIHsKLSAgICBjYXNlIDA6Ci0gICAg
Y2FzZSAxOgotICAgIGNhc2UgMjoKLSAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICByZXR1
cm4gZmFsc2U7Ci0gIH07Ci0KLSAgRmlsbExpZ2h0TW9kZS52YWxpZGF0ZSA9IGZ1bmN0aW9uKGVu
dW1WYWx1ZSkgewotICAgIHZhciBpc0V4dGVuc2libGUgPSBmYWxzZTsKLSAgICBpZiAoaXNFeHRl
bnNpYmxlIHx8IHRoaXMuaXNLbm93bkVudW1WYWx1ZShlbnVtVmFsdWUpKQotICAgICAgcmV0dXJu
IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORTsKLQotICAgIHJldHVybiB2YWxpZGF0b3Iu
dmFsaWRhdGlvbkVycm9yLlVOS05PV05fRU5VTV9WQUxVRTsKLSAgfTsKLQotICBmdW5jdGlvbiBS
YW5nZSh2YWx1ZXMpIHsKLSAgICB0aGlzLmluaXREZWZhdWx0c18oKTsKLSAgICB0aGlzLmluaXRG
aWVsZHNfKHZhbHVlcyk7Ci0gIH0KLQotCi0gIFJhbmdlLnByb3RvdHlwZS5pbml0RGVmYXVsdHNf
ID0gZnVuY3Rpb24oKSB7Ci0gICAgdGhpcy5tYXggPSAwOwotICAgIHRoaXMubWluID0gMDsKLSAg
ICB0aGlzLmN1cnJlbnQgPSAwOwotICAgIHRoaXMuc3RlcCA9IDA7Ci0gIH07Ci0gIFJhbmdlLnBy
b3RvdHlwZS5pbml0RmllbGRzXyA9IGZ1bmN0aW9uKGZpZWxkcykgewotICAgIGZvcih2YXIgZmll
bGQgaW4gZmllbGRzKSB7Ci0gICAgICAgIGlmICh0aGlzLmhhc093blByb3BlcnR5KGZpZWxkKSkK
LSAgICAgICAgICB0aGlzW2ZpZWxkXSA9IGZpZWxkc1tmaWVsZF07Ci0gICAgfQotICB9OwotCi0g
IFJhbmdlLnZhbGlkYXRlID0gZnVuY3Rpb24obWVzc2FnZVZhbGlkYXRvciwgb2Zmc2V0KSB7Ci0g
ICAgdmFyIGVycjsKLSAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0SGVh
ZGVyKG9mZnNldCwgY29kZWMua1N0cnVjdEhlYWRlclNpemUpOwotICAgIGlmIChlcnIgIT09IHZh
bGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKLSAgICAgICAgcmV0dXJuIGVycjsKLQotICAg
IHZhciBrVmVyc2lvblNpemVzID0gWwotICAgICAge3ZlcnNpb246IDAsIG51bUJ5dGVzOiA0MH0K
LSAgICBdOwotICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RWZXJzaW9u
KG9mZnNldCwga1ZlcnNpb25TaXplcyk7Ci0gICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlk
YXRpb25FcnJvci5OT05FKQotICAgICAgICByZXR1cm4gZXJyOwotCi0KLQotCi0KLSAgICByZXR1
cm4gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FOwotICB9OwotCi0gIFJhbmdlLmVuY29k
ZWRTaXplID0gY29kZWMua1N0cnVjdEhlYWRlclNpemUgKyAzMjsKLQotICBSYW5nZS5kZWNvZGUg
PSBmdW5jdGlvbihkZWNvZGVyKSB7Ci0gICAgdmFyIHBhY2tlZDsKLSAgICB2YXIgdmFsID0gbmV3
IFJhbmdlKCk7Ci0gICAgdmFyIG51bWJlck9mQnl0ZXMgPSBkZWNvZGVyLnJlYWRVaW50MzIoKTsK
LSAgICB2YXIgdmVyc2lvbiA9IGRlY29kZXIucmVhZFVpbnQzMigpOwotICAgIHZhbC5tYXggPSBk
ZWNvZGVyLmRlY29kZVN0cnVjdChjb2RlYy5Eb3VibGUpOwotICAgIHZhbC5taW4gPSBkZWNvZGVy
LmRlY29kZVN0cnVjdChjb2RlYy5Eb3VibGUpOwotICAgIHZhbC5jdXJyZW50ID0gZGVjb2Rlci5k
ZWNvZGVTdHJ1Y3QoY29kZWMuRG91YmxlKTsKLSAgICB2YWwuc3RlcCA9IGRlY29kZXIuZGVjb2Rl
U3RydWN0KGNvZGVjLkRvdWJsZSk7Ci0gICAgcmV0dXJuIHZhbDsKLSAgfTsKLQotICBSYW5nZS5l
bmNvZGUgPSBmdW5jdGlvbihlbmNvZGVyLCB2YWwpIHsKLSAgICB2YXIgcGFja2VkOwotICAgIGVu
Y29kZXIud3JpdGVVaW50MzIoUmFuZ2UuZW5jb2RlZFNpemUpOwotICAgIGVuY29kZXIud3JpdGVV
aW50MzIoMCk7Ci0gICAgZW5jb2Rlci5lbmNvZGVTdHJ1Y3QoY29kZWMuRG91YmxlLCB2YWwubWF4
KTsKLSAgICBlbmNvZGVyLmVuY29kZVN0cnVjdChjb2RlYy5Eb3VibGUsIHZhbC5taW4pOwotICAg
IGVuY29kZXIuZW5jb2RlU3RydWN0KGNvZGVjLkRvdWJsZSwgdmFsLmN1cnJlbnQpOwotICAgIGVu
Y29kZXIuZW5jb2RlU3RydWN0KGNvZGVjLkRvdWJsZSwgdmFsLnN0ZXApOwotICB9OwotICBmdW5j
dGlvbiBQaG90b1N0YXRlKHZhbHVlcykgewotICAgIHRoaXMuaW5pdERlZmF1bHRzXygpOwotICAg
IHRoaXMuaW5pdEZpZWxkc18odmFsdWVzKTsKLSAgfQotCi0KLSAgUGhvdG9TdGF0ZS5wcm90b3R5
cGUuaW5pdERlZmF1bHRzXyA9IGZ1bmN0aW9uKCkgewotICAgIHRoaXMuc3VwcG9ydGVkV2hpdGVC
YWxhbmNlTW9kZXMgPSBudWxsOwotICAgIHRoaXMuY3VycmVudFdoaXRlQmFsYW5jZU1vZGUgPSAw
OwotICAgIHRoaXMuY3VycmVudEV4cG9zdXJlTW9kZSA9IDA7Ci0gICAgdGhpcy5zdXBwb3J0ZWRF
eHBvc3VyZU1vZGVzID0gbnVsbDsKLSAgICB0aGlzLnN1cHBvcnRlZEZvY3VzTW9kZXMgPSBudWxs
OwotICAgIHRoaXMuY3VycmVudEZvY3VzTW9kZSA9IDA7Ci0gICAgdGhpcy5zdXBwb3J0c1RvcmNo
ID0gZmFsc2U7Ci0gICAgdGhpcy50b3JjaCA9IGZhbHNlOwotICAgIHRoaXMucG9pbnRzT2ZJbnRl
cmVzdCA9IG51bGw7Ci0gICAgdGhpcy5leHBvc3VyZUNvbXBlbnNhdGlvbiA9IG51bGw7Ci0gICAg
dGhpcy5leHBvc3VyZVRpbWUgPSBudWxsOwotICAgIHRoaXMuY29sb3JUZW1wZXJhdHVyZSA9IG51
bGw7Ci0gICAgdGhpcy5pc28gPSBudWxsOwotICAgIHRoaXMuYnJpZ2h0bmVzcyA9IG51bGw7Ci0g
ICAgdGhpcy5jb250cmFzdCA9IG51bGw7Ci0gICAgdGhpcy5zYXR1cmF0aW9uID0gbnVsbDsKLSAg
ICB0aGlzLnNoYXJwbmVzcyA9IG51bGw7Ci0gICAgdGhpcy5mb2N1c0Rpc3RhbmNlID0gbnVsbDsK
LSAgICB0aGlzLnBhbiA9IG51bGw7Ci0gICAgdGhpcy50aWx0ID0gbnVsbDsKLSAgICB0aGlzLnpv
b20gPSBudWxsOwotICAgIHRoaXMucmVkRXllUmVkdWN0aW9uID0gMDsKLSAgICB0aGlzLmhlaWdo
dCA9IG51bGw7Ci0gICAgdGhpcy53aWR0aCA9IG51bGw7Ci0gICAgdGhpcy5maWxsTGlnaHRNb2Rl
ID0gbnVsbDsKLSAgfTsKLSAgUGhvdG9TdGF0ZS5wcm90b3R5cGUuaW5pdEZpZWxkc18gPSBmdW5j
dGlvbihmaWVsZHMpIHsKLSAgICBmb3IodmFyIGZpZWxkIGluIGZpZWxkcykgewotICAgICAgICBp
ZiAodGhpcy5oYXNPd25Qcm9wZXJ0eShmaWVsZCkpCi0gICAgICAgICAgdGhpc1tmaWVsZF0gPSBm
aWVsZHNbZmllbGRdOwotICAgIH0KLSAgfTsKLQotICBQaG90b1N0YXRlLnZhbGlkYXRlID0gZnVu
Y3Rpb24obWVzc2FnZVZhbGlkYXRvciwgb2Zmc2V0KSB7Ci0gICAgdmFyIGVycjsKLSAgICBlcnIg
PSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0SGVhZGVyKG9mZnNldCwgY29kZWMua1N0
cnVjdEhlYWRlclNpemUpOwotICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJy
b3IuTk9ORSkKLSAgICAgICAgcmV0dXJuIGVycjsKLQotICAgIHZhciBrVmVyc2lvblNpemVzID0g
WwotICAgICAge3ZlcnNpb246IDAsIG51bUJ5dGVzOiAxODR9Ci0gICAgXTsKLSAgICBlcnIgPSBt
ZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0VmVyc2lvbihvZmZzZXQsIGtWZXJzaW9uU2l6
ZXMpOwotICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKLSAg
ICAgICAgcmV0dXJuIGVycjsKLQotCi0gICAgLy8gdmFsaWRhdGUgUGhvdG9TdGF0ZS5zdXBwb3J0
ZWRXaGl0ZUJhbGFuY2VNb2RlcwotICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVB
cnJheVBvaW50ZXIob2Zmc2V0ICsgY29kZWMua1N0cnVjdEhlYWRlclNpemUgKyAwLCA0LCBuZXcg
Y29kZWMuRW51bShNZXRlcmluZ01vZGUpLCBmYWxzZSwgWzBdLCAwKTsKLSAgICBpZiAoZXJyICE9
PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCi0gICAgICAgIHJldHVybiBlcnI7Ci0K
LQotICAgIC8vIHZhbGlkYXRlIFBob3RvU3RhdGUuY3VycmVudFdoaXRlQmFsYW5jZU1vZGUKLSAg
ICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlRW51bShvZmZzZXQgKyBjb2RlYy5rU3Ry
dWN0SGVhZGVyU2l6ZSArIDgsIE1ldGVyaW5nTW9kZSk7Ci0gICAgaWYgKGVyciAhPT0gdmFsaWRh
dG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQotICAgICAgICByZXR1cm4gZXJyOwotCi0KLSAgICAv
LyB2YWxpZGF0ZSBQaG90b1N0YXRlLnN1cHBvcnRlZEV4cG9zdXJlTW9kZXMKLSAgICBlcnIgPSBt
ZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlQXJyYXlQb2ludGVyKG9mZnNldCArIGNvZGVjLmtTdHJ1
Y3RIZWFkZXJTaXplICsgMTYsIDQsIG5ldyBjb2RlYy5FbnVtKE1ldGVyaW5nTW9kZSksIGZhbHNl
LCBbMF0sIDApOwotICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9O
RSkKLSAgICAgICAgcmV0dXJuIGVycjsKLQotCi0gICAgLy8gdmFsaWRhdGUgUGhvdG9TdGF0ZS5j
dXJyZW50RXhwb3N1cmVNb2RlCi0gICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZUVu
dW0ob2Zmc2V0ICsgY29kZWMua1N0cnVjdEhlYWRlclNpemUgKyAxMiwgTWV0ZXJpbmdNb2RlKTsK
LSAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCi0gICAgICAg
IHJldHVybiBlcnI7Ci0KLQotICAgIC8vIHZhbGlkYXRlIFBob3RvU3RhdGUuc3VwcG9ydGVkRm9j
dXNNb2RlcwotICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVBcnJheVBvaW50ZXIo
b2Zmc2V0ICsgY29kZWMua1N0cnVjdEhlYWRlclNpemUgKyAyNCwgNCwgbmV3IGNvZGVjLkVudW0o
TWV0ZXJpbmdNb2RlKSwgZmFsc2UsIFswXSwgMCk7Ci0gICAgaWYgKGVyciAhPT0gdmFsaWRhdG9y
LnZhbGlkYXRpb25FcnJvci5OT05FKQotICAgICAgICByZXR1cm4gZXJyOwotCi0KLSAgICAvLyB2
YWxpZGF0ZSBQaG90b1N0YXRlLmN1cnJlbnRGb2N1c01vZGUKLSAgICBlcnIgPSBtZXNzYWdlVmFs
aWRhdG9yLnZhbGlkYXRlRW51bShvZmZzZXQgKyBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDMy
LCBNZXRlcmluZ01vZGUpOwotICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJy
b3IuTk9ORSkKLSAgICAgICAgcmV0dXJuIGVycjsKLQotCi0gICAgLy8gdmFsaWRhdGUgUGhvdG9T
dGF0ZS5wb2ludHNPZkludGVyZXN0Ci0gICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0
ZUFycmF5UG9pbnRlcihvZmZzZXQgKyBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDQwLCA4LCBu
ZXcgY29kZWMuUG9pbnRlclRvKFBvaW50MkQpLCBmYWxzZSwgWzBdLCAwKTsKLSAgICBpZiAoZXJy
ICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCi0gICAgICAgIHJldHVybiBlcnI7
Ci0KLQotICAgIC8vIHZhbGlkYXRlIFBob3RvU3RhdGUuZXhwb3N1cmVDb21wZW5zYXRpb24KLSAg
ICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0UG9pbnRlcihvZmZzZXQgKyBj
b2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDQ4LCBSYW5nZSwgZmFsc2UpOwotICAgIGlmIChlcnIg
IT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKLSAgICAgICAgcmV0dXJuIGVycjsK
LQotCi0gICAgLy8gdmFsaWRhdGUgUGhvdG9TdGF0ZS5leHBvc3VyZVRpbWUKLSAgICBlcnIgPSBt
ZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0UG9pbnRlcihvZmZzZXQgKyBjb2RlYy5rU3Ry
dWN0SGVhZGVyU2l6ZSArIDU2LCBSYW5nZSwgZmFsc2UpOwotICAgIGlmIChlcnIgIT09IHZhbGlk
YXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKLSAgICAgICAgcmV0dXJuIGVycjsKLQotCi0gICAg
Ly8gdmFsaWRhdGUgUGhvdG9TdGF0ZS5jb2xvclRlbXBlcmF0dXJlCi0gICAgZXJyID0gbWVzc2Fn
ZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdFBvaW50ZXIob2Zmc2V0ICsgY29kZWMua1N0cnVjdEhl
YWRlclNpemUgKyA2NCwgUmFuZ2UsIGZhbHNlKTsKLSAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3Iu
dmFsaWRhdGlvbkVycm9yLk5PTkUpCi0gICAgICAgIHJldHVybiBlcnI7Ci0KLQotICAgIC8vIHZh
bGlkYXRlIFBob3RvU3RhdGUuaXNvCi0gICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0
ZVN0cnVjdFBvaW50ZXIob2Zmc2V0ICsgY29kZWMua1N0cnVjdEhlYWRlclNpemUgKyA3MiwgUmFu
Z2UsIGZhbHNlKTsKLSAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5P
TkUpCi0gICAgICAgIHJldHVybiBlcnI7Ci0KLQotICAgIC8vIHZhbGlkYXRlIFBob3RvU3RhdGUu
YnJpZ2h0bmVzcwotICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RQb2lu
dGVyKG9mZnNldCArIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgODAsIFJhbmdlLCBmYWxzZSk7
Ci0gICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQotICAgICAg
ICByZXR1cm4gZXJyOwotCi0KLSAgICAvLyB2YWxpZGF0ZSBQaG90b1N0YXRlLmNvbnRyYXN0Ci0g
ICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdFBvaW50ZXIob2Zmc2V0ICsg
Y29kZWMua1N0cnVjdEhlYWRlclNpemUgKyA4OCwgUmFuZ2UsIGZhbHNlKTsKLSAgICBpZiAoZXJy
ICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCi0gICAgICAgIHJldHVybiBlcnI7
Ci0KLQotICAgIC8vIHZhbGlkYXRlIFBob3RvU3RhdGUuc2F0dXJhdGlvbgotICAgIGVyciA9IG1l
c3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RQb2ludGVyKG9mZnNldCArIGNvZGVjLmtTdHJ1
Y3RIZWFkZXJTaXplICsgOTYsIFJhbmdlLCBmYWxzZSk7Ci0gICAgaWYgKGVyciAhPT0gdmFsaWRh
dG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQotICAgICAgICByZXR1cm4gZXJyOwotCi0KLSAgICAv
LyB2YWxpZGF0ZSBQaG90b1N0YXRlLnNoYXJwbmVzcwotICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0
b3IudmFsaWRhdGVTdHJ1Y3RQb2ludGVyKG9mZnNldCArIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXpl
ICsgMTA0LCBSYW5nZSwgZmFsc2UpOwotICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0
aW9uRXJyb3IuTk9ORSkKLSAgICAgICAgcmV0dXJuIGVycjsKLQotCi0gICAgLy8gdmFsaWRhdGUg
UGhvdG9TdGF0ZS5mb2N1c0Rpc3RhbmNlCi0gICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxp
ZGF0ZVN0cnVjdFBvaW50ZXIob2Zmc2V0ICsgY29kZWMua1N0cnVjdEhlYWRlclNpemUgKyAxMTIs
IFJhbmdlLCBmYWxzZSk7Ci0gICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJv
ci5OT05FKQotICAgICAgICByZXR1cm4gZXJyOwotCi0KLSAgICAvLyB2YWxpZGF0ZSBQaG90b1N0
YXRlLnBhbgotICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RQb2ludGVy
KG9mZnNldCArIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgMTIwLCBSYW5nZSwgZmFsc2UpOwot
ICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKLSAgICAgICAg
cmV0dXJuIGVycjsKLQotCi0gICAgLy8gdmFsaWRhdGUgUGhvdG9TdGF0ZS50aWx0Ci0gICAgZXJy
ID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdFBvaW50ZXIob2Zmc2V0ICsgY29kZWMu
a1N0cnVjdEhlYWRlclNpemUgKyAxMjgsIFJhbmdlLCBmYWxzZSk7Ci0gICAgaWYgKGVyciAhPT0g
dmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQotICAgICAgICByZXR1cm4gZXJyOwotCi0K
LSAgICAvLyB2YWxpZGF0ZSBQaG90b1N0YXRlLnpvb20KLSAgICBlcnIgPSBtZXNzYWdlVmFsaWRh
dG9yLnZhbGlkYXRlU3RydWN0UG9pbnRlcihvZmZzZXQgKyBjb2RlYy5rU3RydWN0SGVhZGVyU2l6
ZSArIDEzNiwgUmFuZ2UsIGZhbHNlKTsKLSAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRh
dGlvbkVycm9yLk5PTkUpCi0gICAgICAgIHJldHVybiBlcnI7Ci0KLQotCi0KLSAgICAvLyB2YWxp
ZGF0ZSBQaG90b1N0YXRlLnJlZEV5ZVJlZHVjdGlvbgotICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0
b3IudmFsaWRhdGVFbnVtKG9mZnNldCArIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgMTQ0LCBS
ZWRFeWVSZWR1Y3Rpb24pOwotICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJy
b3IuTk9ORSkKLSAgICAgICAgcmV0dXJuIGVycjsKLQotCi0gICAgLy8gdmFsaWRhdGUgUGhvdG9T
dGF0ZS5oZWlnaHQKLSAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0UG9p
bnRlcihvZmZzZXQgKyBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDE1MiwgUmFuZ2UsIGZhbHNl
KTsKLSAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCi0gICAg
ICAgIHJldHVybiBlcnI7Ci0KLQotICAgIC8vIHZhbGlkYXRlIFBob3RvU3RhdGUud2lkdGgKLSAg
ICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0UG9pbnRlcihvZmZzZXQgKyBj
b2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDE2MCwgUmFuZ2UsIGZhbHNlKTsKLSAgICBpZiAoZXJy
ICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCi0gICAgICAgIHJldHVybiBlcnI7
Ci0KLQotICAgIC8vIHZhbGlkYXRlIFBob3RvU3RhdGUuZmlsbExpZ2h0TW9kZQotICAgIGVyciA9
IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVBcnJheVBvaW50ZXIob2Zmc2V0ICsgY29kZWMua1N0
cnVjdEhlYWRlclNpemUgKyAxNjgsIDQsIG5ldyBjb2RlYy5FbnVtKEZpbGxMaWdodE1vZGUpLCBm
YWxzZSwgWzBdLCAwKTsKLSAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9y
Lk5PTkUpCi0gICAgICAgIHJldHVybiBlcnI7Ci0KLSAgICByZXR1cm4gdmFsaWRhdG9yLnZhbGlk
YXRpb25FcnJvci5OT05FOwotICB9OwotCi0gIFBob3RvU3RhdGUuZW5jb2RlZFNpemUgPSBjb2Rl
Yy5rU3RydWN0SGVhZGVyU2l6ZSArIDE3NjsKLQotICBQaG90b1N0YXRlLmRlY29kZSA9IGZ1bmN0
aW9uKGRlY29kZXIpIHsKLSAgICB2YXIgcGFja2VkOwotICAgIHZhciB2YWwgPSBuZXcgUGhvdG9T
dGF0ZSgpOwotICAgIHZhciBudW1iZXJPZkJ5dGVzID0gZGVjb2Rlci5yZWFkVWludDMyKCk7Ci0g
ICAgdmFyIHZlcnNpb24gPSBkZWNvZGVyLnJlYWRVaW50MzIoKTsKLSAgICB2YWwuc3VwcG9ydGVk
V2hpdGVCYWxhbmNlTW9kZXMgPSBkZWNvZGVyLmRlY29kZUFycmF5UG9pbnRlcihuZXcgY29kZWMu
RW51bShNZXRlcmluZ01vZGUpKTsKLSAgICB2YWwuY3VycmVudFdoaXRlQmFsYW5jZU1vZGUgPSBk
ZWNvZGVyLmRlY29kZVN0cnVjdChjb2RlYy5JbnQzMik7Ci0gICAgdmFsLmN1cnJlbnRFeHBvc3Vy
ZU1vZGUgPSBkZWNvZGVyLmRlY29kZVN0cnVjdChjb2RlYy5JbnQzMik7Ci0gICAgdmFsLnN1cHBv
cnRlZEV4cG9zdXJlTW9kZXMgPSBkZWNvZGVyLmRlY29kZUFycmF5UG9pbnRlcihuZXcgY29kZWMu
RW51bShNZXRlcmluZ01vZGUpKTsKLSAgICB2YWwuc3VwcG9ydGVkRm9jdXNNb2RlcyA9IGRlY29k
ZXIuZGVjb2RlQXJyYXlQb2ludGVyKG5ldyBjb2RlYy5FbnVtKE1ldGVyaW5nTW9kZSkpOwotICAg
IHZhbC5jdXJyZW50Rm9jdXNNb2RlID0gZGVjb2Rlci5kZWNvZGVTdHJ1Y3QoY29kZWMuSW50MzIp
OwotICAgIHBhY2tlZCA9IGRlY29kZXIucmVhZFVpbnQ4KCk7Ci0gICAgdmFsLnN1cHBvcnRzVG9y
Y2ggPSAocGFja2VkID4+IDApICYgMSA/IHRydWUgOiBmYWxzZTsKLSAgICB2YWwudG9yY2ggPSAo
cGFja2VkID4+IDEpICYgMSA/IHRydWUgOiBmYWxzZTsKLSAgICBkZWNvZGVyLnNraXAoMSk7Ci0g
ICAgZGVjb2Rlci5za2lwKDEpOwotICAgIGRlY29kZXIuc2tpcCgxKTsKLSAgICB2YWwucG9pbnRz
T2ZJbnRlcmVzdCA9IGRlY29kZXIuZGVjb2RlQXJyYXlQb2ludGVyKG5ldyBjb2RlYy5Qb2ludGVy
VG8oUG9pbnQyRCkpOwotICAgIHZhbC5leHBvc3VyZUNvbXBlbnNhdGlvbiA9IGRlY29kZXIuZGVj
b2RlU3RydWN0UG9pbnRlcihSYW5nZSk7Ci0gICAgdmFsLmV4cG9zdXJlVGltZSA9IGRlY29kZXIu
ZGVjb2RlU3RydWN0UG9pbnRlcihSYW5nZSk7Ci0gICAgdmFsLmNvbG9yVGVtcGVyYXR1cmUgPSBk
ZWNvZGVyLmRlY29kZVN0cnVjdFBvaW50ZXIoUmFuZ2UpOwotICAgIHZhbC5pc28gPSBkZWNvZGVy
LmRlY29kZVN0cnVjdFBvaW50ZXIoUmFuZ2UpOwotICAgIHZhbC5icmlnaHRuZXNzID0gZGVjb2Rl
ci5kZWNvZGVTdHJ1Y3RQb2ludGVyKFJhbmdlKTsKLSAgICB2YWwuY29udHJhc3QgPSBkZWNvZGVy
LmRlY29kZVN0cnVjdFBvaW50ZXIoUmFuZ2UpOwotICAgIHZhbC5zYXR1cmF0aW9uID0gZGVjb2Rl
ci5kZWNvZGVTdHJ1Y3RQb2ludGVyKFJhbmdlKTsKLSAgICB2YWwuc2hhcnBuZXNzID0gZGVjb2Rl
ci5kZWNvZGVTdHJ1Y3RQb2ludGVyKFJhbmdlKTsKLSAgICB2YWwuZm9jdXNEaXN0YW5jZSA9IGRl
Y29kZXIuZGVjb2RlU3RydWN0UG9pbnRlcihSYW5nZSk7Ci0gICAgdmFsLnBhbiA9IGRlY29kZXIu
ZGVjb2RlU3RydWN0UG9pbnRlcihSYW5nZSk7Ci0gICAgdmFsLnRpbHQgPSBkZWNvZGVyLmRlY29k
ZVN0cnVjdFBvaW50ZXIoUmFuZ2UpOwotICAgIHZhbC56b29tID0gZGVjb2Rlci5kZWNvZGVTdHJ1
Y3RQb2ludGVyKFJhbmdlKTsKLSAgICB2YWwucmVkRXllUmVkdWN0aW9uID0gZGVjb2Rlci5kZWNv
ZGVTdHJ1Y3QoY29kZWMuSW50MzIpOwotICAgIGRlY29kZXIuc2tpcCgxKTsKLSAgICBkZWNvZGVy
LnNraXAoMSk7Ci0gICAgZGVjb2Rlci5za2lwKDEpOwotICAgIGRlY29kZXIuc2tpcCgxKTsKLSAg
ICB2YWwuaGVpZ2h0ID0gZGVjb2Rlci5kZWNvZGVTdHJ1Y3RQb2ludGVyKFJhbmdlKTsKLSAgICB2
YWwud2lkdGggPSBkZWNvZGVyLmRlY29kZVN0cnVjdFBvaW50ZXIoUmFuZ2UpOwotICAgIHZhbC5m
aWxsTGlnaHRNb2RlID0gZGVjb2Rlci5kZWNvZGVBcnJheVBvaW50ZXIobmV3IGNvZGVjLkVudW0o
RmlsbExpZ2h0TW9kZSkpOwotICAgIHJldHVybiB2YWw7Ci0gIH07Ci0KLSAgUGhvdG9TdGF0ZS5l
bmNvZGUgPSBmdW5jdGlvbihlbmNvZGVyLCB2YWwpIHsKLSAgICB2YXIgcGFja2VkOwotICAgIGVu
Y29kZXIud3JpdGVVaW50MzIoUGhvdG9TdGF0ZS5lbmNvZGVkU2l6ZSk7Ci0gICAgZW5jb2Rlci53
cml0ZVVpbnQzMigwKTsKLSAgICBlbmNvZGVyLmVuY29kZUFycmF5UG9pbnRlcihuZXcgY29kZWMu
RW51bShNZXRlcmluZ01vZGUpLCB2YWwuc3VwcG9ydGVkV2hpdGVCYWxhbmNlTW9kZXMpOwotICAg
IGVuY29kZXIuZW5jb2RlU3RydWN0KGNvZGVjLkludDMyLCB2YWwuY3VycmVudFdoaXRlQmFsYW5j
ZU1vZGUpOwotICAgIGVuY29kZXIuZW5jb2RlU3RydWN0KGNvZGVjLkludDMyLCB2YWwuY3VycmVu
dEV4cG9zdXJlTW9kZSk7Ci0gICAgZW5jb2Rlci5lbmNvZGVBcnJheVBvaW50ZXIobmV3IGNvZGVj
LkVudW0oTWV0ZXJpbmdNb2RlKSwgdmFsLnN1cHBvcnRlZEV4cG9zdXJlTW9kZXMpOwotICAgIGVu
Y29kZXIuZW5jb2RlQXJyYXlQb2ludGVyKG5ldyBjb2RlYy5FbnVtKE1ldGVyaW5nTW9kZSksIHZh
bC5zdXBwb3J0ZWRGb2N1c01vZGVzKTsKLSAgICBlbmNvZGVyLmVuY29kZVN0cnVjdChjb2RlYy5J
bnQzMiwgdmFsLmN1cnJlbnRGb2N1c01vZGUpOwotICAgIHBhY2tlZCA9IDA7Ci0gICAgcGFja2Vk
IHw9ICh2YWwuc3VwcG9ydHNUb3JjaCAmIDEpIDw8IDAKLSAgICBwYWNrZWQgfD0gKHZhbC50b3Jj
aCAmIDEpIDw8IDEKLSAgICBlbmNvZGVyLndyaXRlVWludDgocGFja2VkKTsKLSAgICBlbmNvZGVy
LnNraXAoMSk7Ci0gICAgZW5jb2Rlci5za2lwKDEpOwotICAgIGVuY29kZXIuc2tpcCgxKTsKLSAg
ICBlbmNvZGVyLmVuY29kZUFycmF5UG9pbnRlcihuZXcgY29kZWMuUG9pbnRlclRvKFBvaW50MkQp
LCB2YWwucG9pbnRzT2ZJbnRlcmVzdCk7Ci0gICAgZW5jb2Rlci5lbmNvZGVTdHJ1Y3RQb2ludGVy
KFJhbmdlLCB2YWwuZXhwb3N1cmVDb21wZW5zYXRpb24pOwotICAgIGVuY29kZXIuZW5jb2RlU3Ry
dWN0UG9pbnRlcihSYW5nZSwgdmFsLmV4cG9zdXJlVGltZSk7Ci0gICAgZW5jb2Rlci5lbmNvZGVT
dHJ1Y3RQb2ludGVyKFJhbmdlLCB2YWwuY29sb3JUZW1wZXJhdHVyZSk7Ci0gICAgZW5jb2Rlci5l
bmNvZGVTdHJ1Y3RQb2ludGVyKFJhbmdlLCB2YWwuaXNvKTsKLSAgICBlbmNvZGVyLmVuY29kZVN0
cnVjdFBvaW50ZXIoUmFuZ2UsIHZhbC5icmlnaHRuZXNzKTsKLSAgICBlbmNvZGVyLmVuY29kZVN0
cnVjdFBvaW50ZXIoUmFuZ2UsIHZhbC5jb250cmFzdCk7Ci0gICAgZW5jb2Rlci5lbmNvZGVTdHJ1
Y3RQb2ludGVyKFJhbmdlLCB2YWwuc2F0dXJhdGlvbik7Ci0gICAgZW5jb2Rlci5lbmNvZGVTdHJ1
Y3RQb2ludGVyKFJhbmdlLCB2YWwuc2hhcnBuZXNzKTsKLSAgICBlbmNvZGVyLmVuY29kZVN0cnVj
dFBvaW50ZXIoUmFuZ2UsIHZhbC5mb2N1c0Rpc3RhbmNlKTsKLSAgICBlbmNvZGVyLmVuY29kZVN0
cnVjdFBvaW50ZXIoUmFuZ2UsIHZhbC5wYW4pOwotICAgIGVuY29kZXIuZW5jb2RlU3RydWN0UG9p
bnRlcihSYW5nZSwgdmFsLnRpbHQpOwotICAgIGVuY29kZXIuZW5jb2RlU3RydWN0UG9pbnRlcihS
YW5nZSwgdmFsLnpvb20pOwotICAgIGVuY29kZXIuZW5jb2RlU3RydWN0KGNvZGVjLkludDMyLCB2
YWwucmVkRXllUmVkdWN0aW9uKTsKLSAgICBlbmNvZGVyLnNraXAoMSk7Ci0gICAgZW5jb2Rlci5z
a2lwKDEpOwotICAgIGVuY29kZXIuc2tpcCgxKTsKLSAgICBlbmNvZGVyLnNraXAoMSk7Ci0gICAg
ZW5jb2Rlci5lbmNvZGVTdHJ1Y3RQb2ludGVyKFJhbmdlLCB2YWwuaGVpZ2h0KTsKLSAgICBlbmNv
ZGVyLmVuY29kZVN0cnVjdFBvaW50ZXIoUmFuZ2UsIHZhbC53aWR0aCk7Ci0gICAgZW5jb2Rlci5l
bmNvZGVBcnJheVBvaW50ZXIobmV3IGNvZGVjLkVudW0oRmlsbExpZ2h0TW9kZSksIHZhbC5maWxs
TGlnaHRNb2RlKTsKLSAgfTsKLSAgZnVuY3Rpb24gUG9pbnQyRCh2YWx1ZXMpIHsKLSAgICB0aGlz
LmluaXREZWZhdWx0c18oKTsKLSAgICB0aGlzLmluaXRGaWVsZHNfKHZhbHVlcyk7Ci0gIH0KLQot
Ci0gIFBvaW50MkQucHJvdG90eXBlLmluaXREZWZhdWx0c18gPSBmdW5jdGlvbigpIHsKLSAgICB0
aGlzLnggPSAwOwotICAgIHRoaXMueSA9IDA7Ci0gIH07Ci0gIFBvaW50MkQucHJvdG90eXBlLmlu
aXRGaWVsZHNfID0gZnVuY3Rpb24oZmllbGRzKSB7Ci0gICAgZm9yKHZhciBmaWVsZCBpbiBmaWVs
ZHMpIHsKLSAgICAgICAgaWYgKHRoaXMuaGFzT3duUHJvcGVydHkoZmllbGQpKQotICAgICAgICAg
IHRoaXNbZmllbGRdID0gZmllbGRzW2ZpZWxkXTsKLSAgICB9Ci0gIH07Ci0KLSAgUG9pbnQyRC52
YWxpZGF0ZSA9IGZ1bmN0aW9uKG1lc3NhZ2VWYWxpZGF0b3IsIG9mZnNldCkgewotICAgIHZhciBl
cnI7Ci0gICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdEhlYWRlcihvZmZz
ZXQsIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplKTsKLSAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3Iu
dmFsaWRhdGlvbkVycm9yLk5PTkUpCi0gICAgICAgIHJldHVybiBlcnI7Ci0KLSAgICB2YXIga1Zl
cnNpb25TaXplcyA9IFsKLSAgICAgIHt2ZXJzaW9uOiAwLCBudW1CeXRlczogMjR9Ci0gICAgXTsK
LSAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0VmVyc2lvbihvZmZzZXQs
IGtWZXJzaW9uU2l6ZXMpOwotICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJy
b3IuTk9ORSkKLSAgICAgICAgcmV0dXJuIGVycjsKLQotCi0KLSAgICByZXR1cm4gdmFsaWRhdG9y
LnZhbGlkYXRpb25FcnJvci5OT05FOwotICB9OwotCi0gIFBvaW50MkQuZW5jb2RlZFNpemUgPSBj
b2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDE2OwotCi0gIFBvaW50MkQuZGVjb2RlID0gZnVuY3Rp
b24oZGVjb2RlcikgewotICAgIHZhciBwYWNrZWQ7Ci0gICAgdmFyIHZhbCA9IG5ldyBQb2ludDJE
KCk7Ci0gICAgdmFyIG51bWJlck9mQnl0ZXMgPSBkZWNvZGVyLnJlYWRVaW50MzIoKTsKLSAgICB2
YXIgdmVyc2lvbiA9IGRlY29kZXIucmVhZFVpbnQzMigpOwotICAgIHZhbC54ID0gZGVjb2Rlci5k
ZWNvZGVTdHJ1Y3QoY29kZWMuRG91YmxlKTsKLSAgICB2YWwueSA9IGRlY29kZXIuZGVjb2RlU3Ry
dWN0KGNvZGVjLkRvdWJsZSk7Ci0gICAgcmV0dXJuIHZhbDsKLSAgfTsKLQotICBQb2ludDJELmVu
Y29kZSA9IGZ1bmN0aW9uKGVuY29kZXIsIHZhbCkgewotICAgIHZhciBwYWNrZWQ7Ci0gICAgZW5j
b2Rlci53cml0ZVVpbnQzMihQb2ludDJELmVuY29kZWRTaXplKTsKLSAgICBlbmNvZGVyLndyaXRl
VWludDMyKDApOwotICAgIGVuY29kZXIuZW5jb2RlU3RydWN0KGNvZGVjLkRvdWJsZSwgdmFsLngp
OwotICAgIGVuY29kZXIuZW5jb2RlU3RydWN0KGNvZGVjLkRvdWJsZSwgdmFsLnkpOwotICB9Owot
ICBmdW5jdGlvbiBQaG90b1NldHRpbmdzKHZhbHVlcykgewotICAgIHRoaXMuaW5pdERlZmF1bHRz
XygpOwotICAgIHRoaXMuaW5pdEZpZWxkc18odmFsdWVzKTsKLSAgfQotCi0KLSAgUGhvdG9TZXR0
aW5ncy5wcm90b3R5cGUuaW5pdERlZmF1bHRzXyA9IGZ1bmN0aW9uKCkgewotICAgIHRoaXMuaGFz
V2hpdGVCYWxhbmNlTW9kZSA9IGZhbHNlOwotICAgIHRoaXMuaGFzRXhwb3N1cmVNb2RlID0gZmFs
c2U7Ci0gICAgdGhpcy5oYXNGb2N1c01vZGUgPSBmYWxzZTsKLSAgICB0aGlzLmhhc0V4cG9zdXJl
Q29tcGVuc2F0aW9uID0gZmFsc2U7Ci0gICAgdGhpcy5oYXNFeHBvc3VyZVRpbWUgPSBmYWxzZTsK
LSAgICB0aGlzLmhhc0NvbG9yVGVtcGVyYXR1cmUgPSBmYWxzZTsKLSAgICB0aGlzLmhhc0lzbyA9
IGZhbHNlOwotICAgIHRoaXMuaGFzQnJpZ2h0bmVzcyA9IGZhbHNlOwotICAgIHRoaXMuaGFzQ29u
dHJhc3QgPSBmYWxzZTsKLSAgICB0aGlzLmhhc1NhdHVyYXRpb24gPSBmYWxzZTsKLSAgICB0aGlz
Lmhhc1NoYXJwbmVzcyA9IGZhbHNlOwotICAgIHRoaXMuaGFzRm9jdXNEaXN0YW5jZSA9IGZhbHNl
OwotICAgIHRoaXMuaGFzUGFuID0gZmFsc2U7Ci0gICAgdGhpcy5oYXNUaWx0ID0gZmFsc2U7Ci0g
ICAgdGhpcy5oYXNab29tID0gZmFsc2U7Ci0gICAgdGhpcy5oYXNUb3JjaCA9IGZhbHNlOwotICAg
IHRoaXMudG9yY2ggPSBmYWxzZTsKLSAgICB0aGlzLmhhc0ZpbGxMaWdodE1vZGUgPSBmYWxzZTsK
LSAgICB0aGlzLmhhc1dpZHRoID0gZmFsc2U7Ci0gICAgdGhpcy5oYXNIZWlnaHQgPSBmYWxzZTsK
LSAgICB0aGlzLmhhc1JlZEV5ZVJlZHVjdGlvbiA9IGZhbHNlOwotICAgIHRoaXMucmVkRXllUmVk
dWN0aW9uID0gZmFsc2U7Ci0gICAgdGhpcy53aGl0ZUJhbGFuY2VNb2RlID0gMDsKLSAgICB0aGlz
LmV4cG9zdXJlTW9kZSA9IDA7Ci0gICAgdGhpcy5mb2N1c01vZGUgPSAwOwotICAgIHRoaXMucG9p
bnRzT2ZJbnRlcmVzdCA9IG51bGw7Ci0gICAgdGhpcy5leHBvc3VyZUNvbXBlbnNhdGlvbiA9IDA7
Ci0gICAgdGhpcy5leHBvc3VyZVRpbWUgPSAwOwotICAgIHRoaXMuY29sb3JUZW1wZXJhdHVyZSA9
IDA7Ci0gICAgdGhpcy5pc28gPSAwOwotICAgIHRoaXMuYnJpZ2h0bmVzcyA9IDA7Ci0gICAgdGhp
cy5jb250cmFzdCA9IDA7Ci0gICAgdGhpcy5zYXR1cmF0aW9uID0gMDsKLSAgICB0aGlzLnNoYXJw
bmVzcyA9IDA7Ci0gICAgdGhpcy5mb2N1c0Rpc3RhbmNlID0gMDsKLSAgICB0aGlzLnBhbiA9IDA7
Ci0gICAgdGhpcy50aWx0ID0gMDsKLSAgICB0aGlzLnpvb20gPSAwOwotICAgIHRoaXMuZmlsbExp
Z2h0TW9kZSA9IDA7Ci0gICAgdGhpcy53aWR0aCA9IDA7Ci0gICAgdGhpcy5oZWlnaHQgPSAwOwot
ICB9OwotICBQaG90b1NldHRpbmdzLnByb3RvdHlwZS5pbml0RmllbGRzXyA9IGZ1bmN0aW9uKGZp
ZWxkcykgewotICAgIGZvcih2YXIgZmllbGQgaW4gZmllbGRzKSB7Ci0gICAgICAgIGlmICh0aGlz
Lmhhc093blByb3BlcnR5KGZpZWxkKSkKLSAgICAgICAgICB0aGlzW2ZpZWxkXSA9IGZpZWxkc1tm
aWVsZF07Ci0gICAgfQotICB9OwotCi0gIFBob3RvU2V0dGluZ3MudmFsaWRhdGUgPSBmdW5jdGlv
bihtZXNzYWdlVmFsaWRhdG9yLCBvZmZzZXQpIHsKLSAgICB2YXIgZXJyOwotICAgIGVyciA9IG1l
c3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RIZWFkZXIob2Zmc2V0LCBjb2RlYy5rU3RydWN0
SGVhZGVyU2l6ZSk7Ci0gICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5O
T05FKQotICAgICAgICByZXR1cm4gZXJyOwotCi0gICAgdmFyIGtWZXJzaW9uU2l6ZXMgPSBbCi0g
ICAgICB7dmVyc2lvbjogMCwgbnVtQnl0ZXM6IDE1Mn0KLSAgICBdOwotICAgIGVyciA9IG1lc3Nh
Z2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RWZXJzaW9uKG9mZnNldCwga1ZlcnNpb25TaXplcyk7
Ci0gICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQotICAgICAg
ICByZXR1cm4gZXJyOwotCi0KLQotICAgIC8vIHZhbGlkYXRlIFBob3RvU2V0dGluZ3Mud2hpdGVC
YWxhbmNlTW9kZQotICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVFbnVtKG9mZnNl
dCArIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgNCwgTWV0ZXJpbmdNb2RlKTsKLSAgICBpZiAo
ZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCi0gICAgICAgIHJldHVybiBl
cnI7Ci0KLQotCi0gICAgLy8gdmFsaWRhdGUgUGhvdG9TZXR0aW5ncy5leHBvc3VyZU1vZGUKLSAg
ICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlRW51bShvZmZzZXQgKyBjb2RlYy5rU3Ry
dWN0SGVhZGVyU2l6ZSArIDgsIE1ldGVyaW5nTW9kZSk7Ci0gICAgaWYgKGVyciAhPT0gdmFsaWRh
dG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQotICAgICAgICByZXR1cm4gZXJyOwotCi0KLQotICAg
IC8vIHZhbGlkYXRlIFBob3RvU2V0dGluZ3MuZm9jdXNNb2RlCi0gICAgZXJyID0gbWVzc2FnZVZh
bGlkYXRvci52YWxpZGF0ZUVudW0ob2Zmc2V0ICsgY29kZWMua1N0cnVjdEhlYWRlclNpemUgKyAx
MiwgTWV0ZXJpbmdNb2RlKTsKLSAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVy
cm9yLk5PTkUpCi0gICAgICAgIHJldHVybiBlcnI7Ci0KLQotICAgIC8vIHZhbGlkYXRlIFBob3Rv
U2V0dGluZ3MucG9pbnRzT2ZJbnRlcmVzdAotICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFs
aWRhdGVBcnJheVBvaW50ZXIob2Zmc2V0ICsgY29kZWMua1N0cnVjdEhlYWRlclNpemUgKyAxNiwg
OCwgbmV3IGNvZGVjLlBvaW50ZXJUbyhQb2ludDJEKSwgZmFsc2UsIFswXSwgMCk7Ci0gICAgaWYg
KGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQotICAgICAgICByZXR1cm4g
ZXJyOwotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0K
LQotCi0KLSAgICAvLyB2YWxpZGF0ZSBQaG90b1NldHRpbmdzLmZpbGxMaWdodE1vZGUKLSAgICBl
cnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlRW51bShvZmZzZXQgKyBjb2RlYy5rU3RydWN0
SGVhZGVyU2l6ZSArIDEyMCwgRmlsbExpZ2h0TW9kZSk7Ci0gICAgaWYgKGVyciAhPT0gdmFsaWRh
dG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQotICAgICAgICByZXR1cm4gZXJyOwotCi0KLQotCi0K
LQotCi0gICAgcmV0dXJuIHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORTsKLSAgfTsKLQot
ICBQaG90b1NldHRpbmdzLmVuY29kZWRTaXplID0gY29kZWMua1N0cnVjdEhlYWRlclNpemUgKyAx
NDQ7Ci0KLSAgUGhvdG9TZXR0aW5ncy5kZWNvZGUgPSBmdW5jdGlvbihkZWNvZGVyKSB7Ci0gICAg
dmFyIHBhY2tlZDsKLSAgICB2YXIgdmFsID0gbmV3IFBob3RvU2V0dGluZ3MoKTsKLSAgICB2YXIg
bnVtYmVyT2ZCeXRlcyA9IGRlY29kZXIucmVhZFVpbnQzMigpOwotICAgIHZhciB2ZXJzaW9uID0g
ZGVjb2Rlci5yZWFkVWludDMyKCk7Ci0gICAgcGFja2VkID0gZGVjb2Rlci5yZWFkVWludDgoKTsK
LSAgICB2YWwuaGFzV2hpdGVCYWxhbmNlTW9kZSA9IChwYWNrZWQgPj4gMCkgJiAxID8gdHJ1ZSA6
IGZhbHNlOwotICAgIHZhbC5oYXNFeHBvc3VyZU1vZGUgPSAocGFja2VkID4+IDEpICYgMSA/IHRy
dWUgOiBmYWxzZTsKLSAgICB2YWwuaGFzRm9jdXNNb2RlID0gKHBhY2tlZCA+PiAyKSAmIDEgPyB0
cnVlIDogZmFsc2U7Ci0gICAgdmFsLmhhc0V4cG9zdXJlQ29tcGVuc2F0aW9uID0gKHBhY2tlZCA+
PiAzKSAmIDEgPyB0cnVlIDogZmFsc2U7Ci0gICAgdmFsLmhhc0V4cG9zdXJlVGltZSA9IChwYWNr
ZWQgPj4gNCkgJiAxID8gdHJ1ZSA6IGZhbHNlOwotICAgIHZhbC5oYXNDb2xvclRlbXBlcmF0dXJl
ID0gKHBhY2tlZCA+PiA1KSAmIDEgPyB0cnVlIDogZmFsc2U7Ci0gICAgdmFsLmhhc0lzbyA9IChw
YWNrZWQgPj4gNikgJiAxID8gdHJ1ZSA6IGZhbHNlOwotICAgIHZhbC5oYXNCcmlnaHRuZXNzID0g
KHBhY2tlZCA+PiA3KSAmIDEgPyB0cnVlIDogZmFsc2U7Ci0gICAgcGFja2VkID0gZGVjb2Rlci5y
ZWFkVWludDgoKTsKLSAgICB2YWwuaGFzQ29udHJhc3QgPSAocGFja2VkID4+IDApICYgMSA/IHRy
dWUgOiBmYWxzZTsKLSAgICB2YWwuaGFzU2F0dXJhdGlvbiA9IChwYWNrZWQgPj4gMSkgJiAxID8g
dHJ1ZSA6IGZhbHNlOwotICAgIHZhbC5oYXNTaGFycG5lc3MgPSAocGFja2VkID4+IDIpICYgMSA/
IHRydWUgOiBmYWxzZTsKLSAgICB2YWwuaGFzRm9jdXNEaXN0YW5jZSA9IChwYWNrZWQgPj4gMykg
JiAxID8gdHJ1ZSA6IGZhbHNlOwotICAgIHZhbC5oYXNQYW4gPSAocGFja2VkID4+IDQpICYgMSA/
IHRydWUgOiBmYWxzZTsKLSAgICB2YWwuaGFzVGlsdCA9IChwYWNrZWQgPj4gNSkgJiAxID8gdHJ1
ZSA6IGZhbHNlOwotICAgIHZhbC5oYXNab29tID0gKHBhY2tlZCA+PiA2KSAmIDEgPyB0cnVlIDog
ZmFsc2U7Ci0gICAgdmFsLmhhc1RvcmNoID0gKHBhY2tlZCA+PiA3KSAmIDEgPyB0cnVlIDogZmFs
c2U7Ci0gICAgcGFja2VkID0gZGVjb2Rlci5yZWFkVWludDgoKTsKLSAgICB2YWwudG9yY2ggPSAo
cGFja2VkID4+IDApICYgMSA/IHRydWUgOiBmYWxzZTsKLSAgICB2YWwuaGFzRmlsbExpZ2h0TW9k
ZSA9IChwYWNrZWQgPj4gMSkgJiAxID8gdHJ1ZSA6IGZhbHNlOwotICAgIHZhbC5oYXNXaWR0aCA9
IChwYWNrZWQgPj4gMikgJiAxID8gdHJ1ZSA6IGZhbHNlOwotICAgIHZhbC5oYXNIZWlnaHQgPSAo
cGFja2VkID4+IDMpICYgMSA/IHRydWUgOiBmYWxzZTsKLSAgICB2YWwuaGFzUmVkRXllUmVkdWN0
aW9uID0gKHBhY2tlZCA+PiA0KSAmIDEgPyB0cnVlIDogZmFsc2U7Ci0gICAgdmFsLnJlZEV5ZVJl
ZHVjdGlvbiA9IChwYWNrZWQgPj4gNSkgJiAxID8gdHJ1ZSA6IGZhbHNlOwotICAgIGRlY29kZXIu
c2tpcCgxKTsKLSAgICB2YWwud2hpdGVCYWxhbmNlTW9kZSA9IGRlY29kZXIuZGVjb2RlU3RydWN0
KGNvZGVjLkludDMyKTsKLSAgICB2YWwuZXhwb3N1cmVNb2RlID0gZGVjb2Rlci5kZWNvZGVTdHJ1
Y3QoY29kZWMuSW50MzIpOwotICAgIHZhbC5mb2N1c01vZGUgPSBkZWNvZGVyLmRlY29kZVN0cnVj
dChjb2RlYy5JbnQzMik7Ci0gICAgdmFsLnBvaW50c09mSW50ZXJlc3QgPSBkZWNvZGVyLmRlY29k
ZUFycmF5UG9pbnRlcihuZXcgY29kZWMuUG9pbnRlclRvKFBvaW50MkQpKTsKLSAgICB2YWwuZXhw
b3N1cmVDb21wZW5zYXRpb24gPSBkZWNvZGVyLmRlY29kZVN0cnVjdChjb2RlYy5Eb3VibGUpOwot
ICAgIHZhbC5leHBvc3VyZVRpbWUgPSBkZWNvZGVyLmRlY29kZVN0cnVjdChjb2RlYy5Eb3VibGUp
OwotICAgIHZhbC5jb2xvclRlbXBlcmF0dXJlID0gZGVjb2Rlci5kZWNvZGVTdHJ1Y3QoY29kZWMu
RG91YmxlKTsKLSAgICB2YWwuaXNvID0gZGVjb2Rlci5kZWNvZGVTdHJ1Y3QoY29kZWMuRG91Ymxl
KTsKLSAgICB2YWwuYnJpZ2h0bmVzcyA9IGRlY29kZXIuZGVjb2RlU3RydWN0KGNvZGVjLkRvdWJs
ZSk7Ci0gICAgdmFsLmNvbnRyYXN0ID0gZGVjb2Rlci5kZWNvZGVTdHJ1Y3QoY29kZWMuRG91Ymxl
KTsKLSAgICB2YWwuc2F0dXJhdGlvbiA9IGRlY29kZXIuZGVjb2RlU3RydWN0KGNvZGVjLkRvdWJs
ZSk7Ci0gICAgdmFsLnNoYXJwbmVzcyA9IGRlY29kZXIuZGVjb2RlU3RydWN0KGNvZGVjLkRvdWJs
ZSk7Ci0gICAgdmFsLmZvY3VzRGlzdGFuY2UgPSBkZWNvZGVyLmRlY29kZVN0cnVjdChjb2RlYy5E
b3VibGUpOwotICAgIHZhbC5wYW4gPSBkZWNvZGVyLmRlY29kZVN0cnVjdChjb2RlYy5Eb3VibGUp
OwotICAgIHZhbC50aWx0ID0gZGVjb2Rlci5kZWNvZGVTdHJ1Y3QoY29kZWMuRG91YmxlKTsKLSAg
ICB2YWwuem9vbSA9IGRlY29kZXIuZGVjb2RlU3RydWN0KGNvZGVjLkRvdWJsZSk7Ci0gICAgdmFs
LmZpbGxMaWdodE1vZGUgPSBkZWNvZGVyLmRlY29kZVN0cnVjdChjb2RlYy5JbnQzMik7Ci0gICAg
ZGVjb2Rlci5za2lwKDEpOwotICAgIGRlY29kZXIuc2tpcCgxKTsKLSAgICBkZWNvZGVyLnNraXAo
MSk7Ci0gICAgZGVjb2Rlci5za2lwKDEpOwotICAgIHZhbC53aWR0aCA9IGRlY29kZXIuZGVjb2Rl
U3RydWN0KGNvZGVjLkRvdWJsZSk7Ci0gICAgdmFsLmhlaWdodCA9IGRlY29kZXIuZGVjb2RlU3Ry
dWN0KGNvZGVjLkRvdWJsZSk7Ci0gICAgcmV0dXJuIHZhbDsKLSAgfTsKLQotICBQaG90b1NldHRp
bmdzLmVuY29kZSA9IGZ1bmN0aW9uKGVuY29kZXIsIHZhbCkgewotICAgIHZhciBwYWNrZWQ7Ci0g
ICAgZW5jb2Rlci53cml0ZVVpbnQzMihQaG90b1NldHRpbmdzLmVuY29kZWRTaXplKTsKLSAgICBl
bmNvZGVyLndyaXRlVWludDMyKDApOwotICAgIHBhY2tlZCA9IDA7Ci0gICAgcGFja2VkIHw9ICh2
YWwuaGFzV2hpdGVCYWxhbmNlTW9kZSAmIDEpIDw8IDAKLSAgICBwYWNrZWQgfD0gKHZhbC5oYXNF
eHBvc3VyZU1vZGUgJiAxKSA8PCAxCi0gICAgcGFja2VkIHw9ICh2YWwuaGFzRm9jdXNNb2RlICYg
MSkgPDwgMgotICAgIHBhY2tlZCB8PSAodmFsLmhhc0V4cG9zdXJlQ29tcGVuc2F0aW9uICYgMSkg
PDwgMwotICAgIHBhY2tlZCB8PSAodmFsLmhhc0V4cG9zdXJlVGltZSAmIDEpIDw8IDQKLSAgICBw
YWNrZWQgfD0gKHZhbC5oYXNDb2xvclRlbXBlcmF0dXJlICYgMSkgPDwgNQotICAgIHBhY2tlZCB8
PSAodmFsLmhhc0lzbyAmIDEpIDw8IDYKLSAgICBwYWNrZWQgfD0gKHZhbC5oYXNCcmlnaHRuZXNz
ICYgMSkgPDwgNwotICAgIGVuY29kZXIud3JpdGVVaW50OChwYWNrZWQpOwotICAgIHBhY2tlZCA9
IDA7Ci0gICAgcGFja2VkIHw9ICh2YWwuaGFzQ29udHJhc3QgJiAxKSA8PCAwCi0gICAgcGFja2Vk
IHw9ICh2YWwuaGFzU2F0dXJhdGlvbiAmIDEpIDw8IDEKLSAgICBwYWNrZWQgfD0gKHZhbC5oYXNT
aGFycG5lc3MgJiAxKSA8PCAyCi0gICAgcGFja2VkIHw9ICh2YWwuaGFzRm9jdXNEaXN0YW5jZSAm
IDEpIDw8IDMKLSAgICBwYWNrZWQgfD0gKHZhbC5oYXNQYW4gJiAxKSA8PCA0Ci0gICAgcGFja2Vk
IHw9ICh2YWwuaGFzVGlsdCAmIDEpIDw8IDUKLSAgICBwYWNrZWQgfD0gKHZhbC5oYXNab29tICYg
MSkgPDwgNgotICAgIHBhY2tlZCB8PSAodmFsLmhhc1RvcmNoICYgMSkgPDwgNwotICAgIGVuY29k
ZXIud3JpdGVVaW50OChwYWNrZWQpOwotICAgIHBhY2tlZCA9IDA7Ci0gICAgcGFja2VkIHw9ICh2
YWwudG9yY2ggJiAxKSA8PCAwCi0gICAgcGFja2VkIHw9ICh2YWwuaGFzRmlsbExpZ2h0TW9kZSAm
IDEpIDw8IDEKLSAgICBwYWNrZWQgfD0gKHZhbC5oYXNXaWR0aCAmIDEpIDw8IDIKLSAgICBwYWNr
ZWQgfD0gKHZhbC5oYXNIZWlnaHQgJiAxKSA8PCAzCi0gICAgcGFja2VkIHw9ICh2YWwuaGFzUmVk
RXllUmVkdWN0aW9uICYgMSkgPDwgNAotICAgIHBhY2tlZCB8PSAodmFsLnJlZEV5ZVJlZHVjdGlv
biAmIDEpIDw8IDUKLSAgICBlbmNvZGVyLndyaXRlVWludDgocGFja2VkKTsKLSAgICBlbmNvZGVy
LnNraXAoMSk7Ci0gICAgZW5jb2Rlci5lbmNvZGVTdHJ1Y3QoY29kZWMuSW50MzIsIHZhbC53aGl0
ZUJhbGFuY2VNb2RlKTsKLSAgICBlbmNvZGVyLmVuY29kZVN0cnVjdChjb2RlYy5JbnQzMiwgdmFs
LmV4cG9zdXJlTW9kZSk7Ci0gICAgZW5jb2Rlci5lbmNvZGVTdHJ1Y3QoY29kZWMuSW50MzIsIHZh
bC5mb2N1c01vZGUpOwotICAgIGVuY29kZXIuZW5jb2RlQXJyYXlQb2ludGVyKG5ldyBjb2RlYy5Q
b2ludGVyVG8oUG9pbnQyRCksIHZhbC5wb2ludHNPZkludGVyZXN0KTsKLSAgICBlbmNvZGVyLmVu
Y29kZVN0cnVjdChjb2RlYy5Eb3VibGUsIHZhbC5leHBvc3VyZUNvbXBlbnNhdGlvbik7Ci0gICAg
ZW5jb2Rlci5lbmNvZGVTdHJ1Y3QoY29kZWMuRG91YmxlLCB2YWwuZXhwb3N1cmVUaW1lKTsKLSAg
ICBlbmNvZGVyLmVuY29kZVN0cnVjdChjb2RlYy5Eb3VibGUsIHZhbC5jb2xvclRlbXBlcmF0dXJl
KTsKLSAgICBlbmNvZGVyLmVuY29kZVN0cnVjdChjb2RlYy5Eb3VibGUsIHZhbC5pc28pOwotICAg
IGVuY29kZXIuZW5jb2RlU3RydWN0KGNvZGVjLkRvdWJsZSwgdmFsLmJyaWdodG5lc3MpOwotICAg
IGVuY29kZXIuZW5jb2RlU3RydWN0KGNvZGVjLkRvdWJsZSwgdmFsLmNvbnRyYXN0KTsKLSAgICBl
bmNvZGVyLmVuY29kZVN0cnVjdChjb2RlYy5Eb3VibGUsIHZhbC5zYXR1cmF0aW9uKTsKLSAgICBl
bmNvZGVyLmVuY29kZVN0cnVjdChjb2RlYy5Eb3VibGUsIHZhbC5zaGFycG5lc3MpOwotICAgIGVu
Y29kZXIuZW5jb2RlU3RydWN0KGNvZGVjLkRvdWJsZSwgdmFsLmZvY3VzRGlzdGFuY2UpOwotICAg
IGVuY29kZXIuZW5jb2RlU3RydWN0KGNvZGVjLkRvdWJsZSwgdmFsLnBhbik7Ci0gICAgZW5jb2Rl
ci5lbmNvZGVTdHJ1Y3QoY29kZWMuRG91YmxlLCB2YWwudGlsdCk7Ci0gICAgZW5jb2Rlci5lbmNv
ZGVTdHJ1Y3QoY29kZWMuRG91YmxlLCB2YWwuem9vbSk7Ci0gICAgZW5jb2Rlci5lbmNvZGVTdHJ1
Y3QoY29kZWMuSW50MzIsIHZhbC5maWxsTGlnaHRNb2RlKTsKLSAgICBlbmNvZGVyLnNraXAoMSk7
Ci0gICAgZW5jb2Rlci5za2lwKDEpOwotICAgIGVuY29kZXIuc2tpcCgxKTsKLSAgICBlbmNvZGVy
LnNraXAoMSk7Ci0gICAgZW5jb2Rlci5lbmNvZGVTdHJ1Y3QoY29kZWMuRG91YmxlLCB2YWwud2lk
dGgpOwotICAgIGVuY29kZXIuZW5jb2RlU3RydWN0KGNvZGVjLkRvdWJsZSwgdmFsLmhlaWdodCk7
Ci0gIH07Ci0gIGZ1bmN0aW9uIEJsb2IodmFsdWVzKSB7Ci0gICAgdGhpcy5pbml0RGVmYXVsdHNf
KCk7Ci0gICAgdGhpcy5pbml0RmllbGRzXyh2YWx1ZXMpOwotICB9Ci0KLQotICBCbG9iLnByb3Rv
dHlwZS5pbml0RGVmYXVsdHNfID0gZnVuY3Rpb24oKSB7Ci0gICAgdGhpcy5taW1lVHlwZSA9IG51
bGw7Ci0gICAgdGhpcy5kYXRhID0gbnVsbDsKLSAgfTsKLSAgQmxvYi5wcm90b3R5cGUuaW5pdEZp
ZWxkc18gPSBmdW5jdGlvbihmaWVsZHMpIHsKLSAgICBmb3IodmFyIGZpZWxkIGluIGZpZWxkcykg
ewotICAgICAgICBpZiAodGhpcy5oYXNPd25Qcm9wZXJ0eShmaWVsZCkpCi0gICAgICAgICAgdGhp
c1tmaWVsZF0gPSBmaWVsZHNbZmllbGRdOwotICAgIH0KLSAgfTsKLQotICBCbG9iLnZhbGlkYXRl
ID0gZnVuY3Rpb24obWVzc2FnZVZhbGlkYXRvciwgb2Zmc2V0KSB7Ci0gICAgdmFyIGVycjsKLSAg
ICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0SGVhZGVyKG9mZnNldCwgY29k
ZWMua1N0cnVjdEhlYWRlclNpemUpOwotICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0
aW9uRXJyb3IuTk9ORSkKLSAgICAgICAgcmV0dXJuIGVycjsKLQotICAgIHZhciBrVmVyc2lvblNp
emVzID0gWwotICAgICAge3ZlcnNpb246IDAsIG51bUJ5dGVzOiAyNH0KLSAgICBdOwotICAgIGVy
ciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RWZXJzaW9uKG9mZnNldCwga1ZlcnNp
b25TaXplcyk7Ci0gICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05F
KQotICAgICAgICByZXR1cm4gZXJyOwotCi0KLSAgICAvLyB2YWxpZGF0ZSBCbG9iLm1pbWVUeXBl
Ci0gICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cmluZ1BvaW50ZXIob2Zmc2V0
ICsgY29kZWMua1N0cnVjdEhlYWRlclNpemUgKyAwLCBmYWxzZSkKLSAgICBpZiAoZXJyICE9PSB2
YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCi0gICAgICAgIHJldHVybiBlcnI7Ci0KLQot
ICAgIC8vIHZhbGlkYXRlIEJsb2IuZGF0YQotICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFs
aWRhdGVBcnJheVBvaW50ZXIob2Zmc2V0ICsgY29kZWMua1N0cnVjdEhlYWRlclNpemUgKyA4LCAx
LCBjb2RlYy5VaW50OCwgZmFsc2UsIFswXSwgMCk7Ci0gICAgaWYgKGVyciAhPT0gdmFsaWRhdG9y
LnZhbGlkYXRpb25FcnJvci5OT05FKQotICAgICAgICByZXR1cm4gZXJyOwotCi0gICAgcmV0dXJu
IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORTsKLSAgfTsKLQotICBCbG9iLmVuY29kZWRT
aXplID0gY29kZWMua1N0cnVjdEhlYWRlclNpemUgKyAxNjsKLQotICBCbG9iLmRlY29kZSA9IGZ1
bmN0aW9uKGRlY29kZXIpIHsKLSAgICB2YXIgcGFja2VkOwotICAgIHZhciB2YWwgPSBuZXcgQmxv
YigpOwotICAgIHZhciBudW1iZXJPZkJ5dGVzID0gZGVjb2Rlci5yZWFkVWludDMyKCk7Ci0gICAg
dmFyIHZlcnNpb24gPSBkZWNvZGVyLnJlYWRVaW50MzIoKTsKLSAgICB2YWwubWltZVR5cGUgPSBk
ZWNvZGVyLmRlY29kZVN0cnVjdChjb2RlYy5TdHJpbmcpOwotICAgIHZhbC5kYXRhID0gZGVjb2Rl
ci5kZWNvZGVBcnJheVBvaW50ZXIoY29kZWMuVWludDgpOwotICAgIHJldHVybiB2YWw7Ci0gIH07
Ci0KLSAgQmxvYi5lbmNvZGUgPSBmdW5jdGlvbihlbmNvZGVyLCB2YWwpIHsKLSAgICB2YXIgcGFj
a2VkOwotICAgIGVuY29kZXIud3JpdGVVaW50MzIoQmxvYi5lbmNvZGVkU2l6ZSk7Ci0gICAgZW5j
b2Rlci53cml0ZVVpbnQzMigwKTsKLSAgICBlbmNvZGVyLmVuY29kZVN0cnVjdChjb2RlYy5TdHJp
bmcsIHZhbC5taW1lVHlwZSk7Ci0gICAgZW5jb2Rlci5lbmNvZGVBcnJheVBvaW50ZXIoY29kZWMu
VWludDgsIHZhbC5kYXRhKTsKLSAgfTsKLSAgZnVuY3Rpb24gSW1hZ2VDYXB0dXJlX0dldFBob3Rv
U3RhdGVfUGFyYW1zKHZhbHVlcykgewotICAgIHRoaXMuaW5pdERlZmF1bHRzXygpOwotICAgIHRo
aXMuaW5pdEZpZWxkc18odmFsdWVzKTsKLSAgfQotCi0KLSAgSW1hZ2VDYXB0dXJlX0dldFBob3Rv
U3RhdGVfUGFyYW1zLnByb3RvdHlwZS5pbml0RGVmYXVsdHNfID0gZnVuY3Rpb24oKSB7Ci0gICAg
dGhpcy5zb3VyY2VJZCA9IG51bGw7Ci0gIH07Ci0gIEltYWdlQ2FwdHVyZV9HZXRQaG90b1N0YXRl
X1BhcmFtcy5wcm90b3R5cGUuaW5pdEZpZWxkc18gPSBmdW5jdGlvbihmaWVsZHMpIHsKLSAgICBm
b3IodmFyIGZpZWxkIGluIGZpZWxkcykgewotICAgICAgICBpZiAodGhpcy5oYXNPd25Qcm9wZXJ0
eShmaWVsZCkpCi0gICAgICAgICAgdGhpc1tmaWVsZF0gPSBmaWVsZHNbZmllbGRdOwotICAgIH0K
LSAgfTsKLQotICBJbWFnZUNhcHR1cmVfR2V0UGhvdG9TdGF0ZV9QYXJhbXMudmFsaWRhdGUgPSBm
dW5jdGlvbihtZXNzYWdlVmFsaWRhdG9yLCBvZmZzZXQpIHsKLSAgICB2YXIgZXJyOwotICAgIGVy
ciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RIZWFkZXIob2Zmc2V0LCBjb2RlYy5r
U3RydWN0SGVhZGVyU2l6ZSk7Ci0gICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25F
cnJvci5OT05FKQotICAgICAgICByZXR1cm4gZXJyOwotCi0gICAgdmFyIGtWZXJzaW9uU2l6ZXMg
PSBbCi0gICAgICB7dmVyc2lvbjogMCwgbnVtQnl0ZXM6IDE2fQotICAgIF07Ci0gICAgZXJyID0g
bWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdFZlcnNpb24ob2Zmc2V0LCBrVmVyc2lvblNp
emVzKTsKLSAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCi0g
ICAgICAgIHJldHVybiBlcnI7Ci0KLQotICAgIC8vIHZhbGlkYXRlIEltYWdlQ2FwdHVyZV9HZXRQ
aG90b1N0YXRlX1BhcmFtcy5zb3VyY2VJZAotICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFs
aWRhdGVTdHJpbmdQb2ludGVyKG9mZnNldCArIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgMCwg
ZmFsc2UpCi0gICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQot
ICAgICAgICByZXR1cm4gZXJyOwotCi0gICAgcmV0dXJuIHZhbGlkYXRvci52YWxpZGF0aW9uRXJy
b3IuTk9ORTsKLSAgfTsKLQotICBJbWFnZUNhcHR1cmVfR2V0UGhvdG9TdGF0ZV9QYXJhbXMuZW5j
b2RlZFNpemUgPSBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDg7Ci0KLSAgSW1hZ2VDYXB0dXJl
X0dldFBob3RvU3RhdGVfUGFyYW1zLmRlY29kZSA9IGZ1bmN0aW9uKGRlY29kZXIpIHsKLSAgICB2
YXIgcGFja2VkOwotICAgIHZhciB2YWwgPSBuZXcgSW1hZ2VDYXB0dXJlX0dldFBob3RvU3RhdGVf
UGFyYW1zKCk7Ci0gICAgdmFyIG51bWJlck9mQnl0ZXMgPSBkZWNvZGVyLnJlYWRVaW50MzIoKTsK
LSAgICB2YXIgdmVyc2lvbiA9IGRlY29kZXIucmVhZFVpbnQzMigpOwotICAgIHZhbC5zb3VyY2VJ
ZCA9IGRlY29kZXIuZGVjb2RlU3RydWN0KGNvZGVjLlN0cmluZyk7Ci0gICAgcmV0dXJuIHZhbDsK
LSAgfTsKLQotICBJbWFnZUNhcHR1cmVfR2V0UGhvdG9TdGF0ZV9QYXJhbXMuZW5jb2RlID0gZnVu
Y3Rpb24oZW5jb2RlciwgdmFsKSB7Ci0gICAgdmFyIHBhY2tlZDsKLSAgICBlbmNvZGVyLndyaXRl
VWludDMyKEltYWdlQ2FwdHVyZV9HZXRQaG90b1N0YXRlX1BhcmFtcy5lbmNvZGVkU2l6ZSk7Ci0g
ICAgZW5jb2Rlci53cml0ZVVpbnQzMigwKTsKLSAgICBlbmNvZGVyLmVuY29kZVN0cnVjdChjb2Rl
Yy5TdHJpbmcsIHZhbC5zb3VyY2VJZCk7Ci0gIH07Ci0gIGZ1bmN0aW9uIEltYWdlQ2FwdHVyZV9H
ZXRQaG90b1N0YXRlX1Jlc3BvbnNlUGFyYW1zKHZhbHVlcykgewotICAgIHRoaXMuaW5pdERlZmF1
bHRzXygpOwotICAgIHRoaXMuaW5pdEZpZWxkc18odmFsdWVzKTsKLSAgfQotCi0KLSAgSW1hZ2VD
YXB0dXJlX0dldFBob3RvU3RhdGVfUmVzcG9uc2VQYXJhbXMucHJvdG90eXBlLmluaXREZWZhdWx0
c18gPSBmdW5jdGlvbigpIHsKLSAgICB0aGlzLnN0YXRlID0gbnVsbDsKLSAgfTsKLSAgSW1hZ2VD
YXB0dXJlX0dldFBob3RvU3RhdGVfUmVzcG9uc2VQYXJhbXMucHJvdG90eXBlLmluaXRGaWVsZHNf
ID0gZnVuY3Rpb24oZmllbGRzKSB7Ci0gICAgZm9yKHZhciBmaWVsZCBpbiBmaWVsZHMpIHsKLSAg
ICAgICAgaWYgKHRoaXMuaGFzT3duUHJvcGVydHkoZmllbGQpKQotICAgICAgICAgIHRoaXNbZmll
bGRdID0gZmllbGRzW2ZpZWxkXTsKLSAgICB9Ci0gIH07Ci0KLSAgSW1hZ2VDYXB0dXJlX0dldFBo
b3RvU3RhdGVfUmVzcG9uc2VQYXJhbXMudmFsaWRhdGUgPSBmdW5jdGlvbihtZXNzYWdlVmFsaWRh
dG9yLCBvZmZzZXQpIHsKLSAgICB2YXIgZXJyOwotICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3Iu
dmFsaWRhdGVTdHJ1Y3RIZWFkZXIob2Zmc2V0LCBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSk7Ci0g
ICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQotICAgICAgICBy
ZXR1cm4gZXJyOwotCi0gICAgdmFyIGtWZXJzaW9uU2l6ZXMgPSBbCi0gICAgICB7dmVyc2lvbjog
MCwgbnVtQnl0ZXM6IDE2fQotICAgIF07Ci0gICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxp
ZGF0ZVN0cnVjdFZlcnNpb24ob2Zmc2V0LCBrVmVyc2lvblNpemVzKTsKLSAgICBpZiAoZXJyICE9
PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCi0gICAgICAgIHJldHVybiBlcnI7Ci0K
LQotICAgIC8vIHZhbGlkYXRlIEltYWdlQ2FwdHVyZV9HZXRQaG90b1N0YXRlX1Jlc3BvbnNlUGFy
YW1zLnN0YXRlCi0gICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdFBvaW50
ZXIob2Zmc2V0ICsgY29kZWMua1N0cnVjdEhlYWRlclNpemUgKyAwLCBQaG90b1N0YXRlLCBmYWxz
ZSk7Ci0gICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQotICAg
ICAgICByZXR1cm4gZXJyOwotCi0gICAgcmV0dXJuIHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3Iu
Tk9ORTsKLSAgfTsKLQotICBJbWFnZUNhcHR1cmVfR2V0UGhvdG9TdGF0ZV9SZXNwb25zZVBhcmFt
cy5lbmNvZGVkU2l6ZSA9IGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgODsKLQotICBJbWFnZUNh
cHR1cmVfR2V0UGhvdG9TdGF0ZV9SZXNwb25zZVBhcmFtcy5kZWNvZGUgPSBmdW5jdGlvbihkZWNv
ZGVyKSB7Ci0gICAgdmFyIHBhY2tlZDsKLSAgICB2YXIgdmFsID0gbmV3IEltYWdlQ2FwdHVyZV9H
ZXRQaG90b1N0YXRlX1Jlc3BvbnNlUGFyYW1zKCk7Ci0gICAgdmFyIG51bWJlck9mQnl0ZXMgPSBk
ZWNvZGVyLnJlYWRVaW50MzIoKTsKLSAgICB2YXIgdmVyc2lvbiA9IGRlY29kZXIucmVhZFVpbnQz
MigpOwotICAgIHZhbC5zdGF0ZSA9IGRlY29kZXIuZGVjb2RlU3RydWN0UG9pbnRlcihQaG90b1N0
YXRlKTsKLSAgICByZXR1cm4gdmFsOwotICB9OwotCi0gIEltYWdlQ2FwdHVyZV9HZXRQaG90b1N0
YXRlX1Jlc3BvbnNlUGFyYW1zLmVuY29kZSA9IGZ1bmN0aW9uKGVuY29kZXIsIHZhbCkgewotICAg
IHZhciBwYWNrZWQ7Ci0gICAgZW5jb2Rlci53cml0ZVVpbnQzMihJbWFnZUNhcHR1cmVfR2V0UGhv
dG9TdGF0ZV9SZXNwb25zZVBhcmFtcy5lbmNvZGVkU2l6ZSk7Ci0gICAgZW5jb2Rlci53cml0ZVVp
bnQzMigwKTsKLSAgICBlbmNvZGVyLmVuY29kZVN0cnVjdFBvaW50ZXIoUGhvdG9TdGF0ZSwgdmFs
LnN0YXRlKTsKLSAgfTsKLSAgZnVuY3Rpb24gSW1hZ2VDYXB0dXJlX1NldE9wdGlvbnNfUGFyYW1z
KHZhbHVlcykgewotICAgIHRoaXMuaW5pdERlZmF1bHRzXygpOwotICAgIHRoaXMuaW5pdEZpZWxk
c18odmFsdWVzKTsKLSAgfQotCi0KLSAgSW1hZ2VDYXB0dXJlX1NldE9wdGlvbnNfUGFyYW1zLnBy
b3RvdHlwZS5pbml0RGVmYXVsdHNfID0gZnVuY3Rpb24oKSB7Ci0gICAgdGhpcy5zb3VyY2VJZCA9
IG51bGw7Ci0gICAgdGhpcy5zZXR0aW5ncyA9IG51bGw7Ci0gIH07Ci0gIEltYWdlQ2FwdHVyZV9T
ZXRPcHRpb25zX1BhcmFtcy5wcm90b3R5cGUuaW5pdEZpZWxkc18gPSBmdW5jdGlvbihmaWVsZHMp
IHsKLSAgICBmb3IodmFyIGZpZWxkIGluIGZpZWxkcykgewotICAgICAgICBpZiAodGhpcy5oYXNP
d25Qcm9wZXJ0eShmaWVsZCkpCi0gICAgICAgICAgdGhpc1tmaWVsZF0gPSBmaWVsZHNbZmllbGRd
OwotICAgIH0KLSAgfTsKLQotICBJbWFnZUNhcHR1cmVfU2V0T3B0aW9uc19QYXJhbXMudmFsaWRh
dGUgPSBmdW5jdGlvbihtZXNzYWdlVmFsaWRhdG9yLCBvZmZzZXQpIHsKLSAgICB2YXIgZXJyOwot
ICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RIZWFkZXIob2Zmc2V0LCBj
b2RlYy5rU3RydWN0SGVhZGVyU2l6ZSk7Ci0gICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlk
YXRpb25FcnJvci5OT05FKQotICAgICAgICByZXR1cm4gZXJyOwotCi0gICAgdmFyIGtWZXJzaW9u
U2l6ZXMgPSBbCi0gICAgICB7dmVyc2lvbjogMCwgbnVtQnl0ZXM6IDI0fQotICAgIF07Ci0gICAg
ZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdFZlcnNpb24ob2Zmc2V0LCBrVmVy
c2lvblNpemVzKTsKLSAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5P
TkUpCi0gICAgICAgIHJldHVybiBlcnI7Ci0KLQotICAgIC8vIHZhbGlkYXRlIEltYWdlQ2FwdHVy
ZV9TZXRPcHRpb25zX1BhcmFtcy5zb3VyY2VJZAotICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3Iu
dmFsaWRhdGVTdHJpbmdQb2ludGVyKG9mZnNldCArIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsg
MCwgZmFsc2UpCi0gICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05F
KQotICAgICAgICByZXR1cm4gZXJyOwotCi0KLSAgICAvLyB2YWxpZGF0ZSBJbWFnZUNhcHR1cmVf
U2V0T3B0aW9uc19QYXJhbXMuc2V0dGluZ3MKLSAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZh
bGlkYXRlU3RydWN0UG9pbnRlcihvZmZzZXQgKyBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDgs
IFBob3RvU2V0dGluZ3MsIGZhbHNlKTsKLSAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRh
dGlvbkVycm9yLk5PTkUpCi0gICAgICAgIHJldHVybiBlcnI7Ci0KLSAgICByZXR1cm4gdmFsaWRh
dG9yLnZhbGlkYXRpb25FcnJvci5OT05FOwotICB9OwotCi0gIEltYWdlQ2FwdHVyZV9TZXRPcHRp
b25zX1BhcmFtcy5lbmNvZGVkU2l6ZSA9IGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgMTY7Ci0K
LSAgSW1hZ2VDYXB0dXJlX1NldE9wdGlvbnNfUGFyYW1zLmRlY29kZSA9IGZ1bmN0aW9uKGRlY29k
ZXIpIHsKLSAgICB2YXIgcGFja2VkOwotICAgIHZhciB2YWwgPSBuZXcgSW1hZ2VDYXB0dXJlX1Nl
dE9wdGlvbnNfUGFyYW1zKCk7Ci0gICAgdmFyIG51bWJlck9mQnl0ZXMgPSBkZWNvZGVyLnJlYWRV
aW50MzIoKTsKLSAgICB2YXIgdmVyc2lvbiA9IGRlY29kZXIucmVhZFVpbnQzMigpOwotICAgIHZh
bC5zb3VyY2VJZCA9IGRlY29kZXIuZGVjb2RlU3RydWN0KGNvZGVjLlN0cmluZyk7Ci0gICAgdmFs
LnNldHRpbmdzID0gZGVjb2Rlci5kZWNvZGVTdHJ1Y3RQb2ludGVyKFBob3RvU2V0dGluZ3MpOwot
ICAgIHJldHVybiB2YWw7Ci0gIH07Ci0KLSAgSW1hZ2VDYXB0dXJlX1NldE9wdGlvbnNfUGFyYW1z
LmVuY29kZSA9IGZ1bmN0aW9uKGVuY29kZXIsIHZhbCkgewotICAgIHZhciBwYWNrZWQ7Ci0gICAg
ZW5jb2Rlci53cml0ZVVpbnQzMihJbWFnZUNhcHR1cmVfU2V0T3B0aW9uc19QYXJhbXMuZW5jb2Rl
ZFNpemUpOwotICAgIGVuY29kZXIud3JpdGVVaW50MzIoMCk7Ci0gICAgZW5jb2Rlci5lbmNvZGVT
dHJ1Y3QoY29kZWMuU3RyaW5nLCB2YWwuc291cmNlSWQpOwotICAgIGVuY29kZXIuZW5jb2RlU3Ry
dWN0UG9pbnRlcihQaG90b1NldHRpbmdzLCB2YWwuc2V0dGluZ3MpOwotICB9OwotICBmdW5jdGlv
biBJbWFnZUNhcHR1cmVfU2V0T3B0aW9uc19SZXNwb25zZVBhcmFtcyh2YWx1ZXMpIHsKLSAgICB0
aGlzLmluaXREZWZhdWx0c18oKTsKLSAgICB0aGlzLmluaXRGaWVsZHNfKHZhbHVlcyk7Ci0gIH0K
LQotCi0gIEltYWdlQ2FwdHVyZV9TZXRPcHRpb25zX1Jlc3BvbnNlUGFyYW1zLnByb3RvdHlwZS5p
bml0RGVmYXVsdHNfID0gZnVuY3Rpb24oKSB7Ci0gICAgdGhpcy5zdWNjZXNzID0gZmFsc2U7Ci0g
IH07Ci0gIEltYWdlQ2FwdHVyZV9TZXRPcHRpb25zX1Jlc3BvbnNlUGFyYW1zLnByb3RvdHlwZS5p
bml0RmllbGRzXyA9IGZ1bmN0aW9uKGZpZWxkcykgewotICAgIGZvcih2YXIgZmllbGQgaW4gZmll
bGRzKSB7Ci0gICAgICAgIGlmICh0aGlzLmhhc093blByb3BlcnR5KGZpZWxkKSkKLSAgICAgICAg
ICB0aGlzW2ZpZWxkXSA9IGZpZWxkc1tmaWVsZF07Ci0gICAgfQotICB9OwotCi0gIEltYWdlQ2Fw
dHVyZV9TZXRPcHRpb25zX1Jlc3BvbnNlUGFyYW1zLnZhbGlkYXRlID0gZnVuY3Rpb24obWVzc2Fn
ZVZhbGlkYXRvciwgb2Zmc2V0KSB7Ci0gICAgdmFyIGVycjsKLSAgICBlcnIgPSBtZXNzYWdlVmFs
aWRhdG9yLnZhbGlkYXRlU3RydWN0SGVhZGVyKG9mZnNldCwgY29kZWMua1N0cnVjdEhlYWRlclNp
emUpOwotICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKLSAg
ICAgICAgcmV0dXJuIGVycjsKLQotICAgIHZhciBrVmVyc2lvblNpemVzID0gWwotICAgICAge3Zl
cnNpb246IDAsIG51bUJ5dGVzOiAxNn0KLSAgICBdOwotICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0
b3IudmFsaWRhdGVTdHJ1Y3RWZXJzaW9uKG9mZnNldCwga1ZlcnNpb25TaXplcyk7Ci0gICAgaWYg
KGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQotICAgICAgICByZXR1cm4g
ZXJyOwotCi0KLSAgICByZXR1cm4gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FOwotICB9
OwotCi0gIEltYWdlQ2FwdHVyZV9TZXRPcHRpb25zX1Jlc3BvbnNlUGFyYW1zLmVuY29kZWRTaXpl
ID0gY29kZWMua1N0cnVjdEhlYWRlclNpemUgKyA4OwotCi0gIEltYWdlQ2FwdHVyZV9TZXRPcHRp
b25zX1Jlc3BvbnNlUGFyYW1zLmRlY29kZSA9IGZ1bmN0aW9uKGRlY29kZXIpIHsKLSAgICB2YXIg
cGFja2VkOwotICAgIHZhciB2YWwgPSBuZXcgSW1hZ2VDYXB0dXJlX1NldE9wdGlvbnNfUmVzcG9u
c2VQYXJhbXMoKTsKLSAgICB2YXIgbnVtYmVyT2ZCeXRlcyA9IGRlY29kZXIucmVhZFVpbnQzMigp
OwotICAgIHZhciB2ZXJzaW9uID0gZGVjb2Rlci5yZWFkVWludDMyKCk7Ci0gICAgcGFja2VkID0g
ZGVjb2Rlci5yZWFkVWludDgoKTsKLSAgICB2YWwuc3VjY2VzcyA9IChwYWNrZWQgPj4gMCkgJiAx
ID8gdHJ1ZSA6IGZhbHNlOwotICAgIGRlY29kZXIuc2tpcCgxKTsKLSAgICBkZWNvZGVyLnNraXAo
MSk7Ci0gICAgZGVjb2Rlci5za2lwKDEpOwotICAgIGRlY29kZXIuc2tpcCgxKTsKLSAgICBkZWNv
ZGVyLnNraXAoMSk7Ci0gICAgZGVjb2Rlci5za2lwKDEpOwotICAgIGRlY29kZXIuc2tpcCgxKTsK
LSAgICByZXR1cm4gdmFsOwotICB9OwotCi0gIEltYWdlQ2FwdHVyZV9TZXRPcHRpb25zX1Jlc3Bv
bnNlUGFyYW1zLmVuY29kZSA9IGZ1bmN0aW9uKGVuY29kZXIsIHZhbCkgewotICAgIHZhciBwYWNr
ZWQ7Ci0gICAgZW5jb2Rlci53cml0ZVVpbnQzMihJbWFnZUNhcHR1cmVfU2V0T3B0aW9uc19SZXNw
b25zZVBhcmFtcy5lbmNvZGVkU2l6ZSk7Ci0gICAgZW5jb2Rlci53cml0ZVVpbnQzMigwKTsKLSAg
ICBwYWNrZWQgPSAwOwotICAgIHBhY2tlZCB8PSAodmFsLnN1Y2Nlc3MgJiAxKSA8PCAwCi0gICAg
ZW5jb2Rlci53cml0ZVVpbnQ4KHBhY2tlZCk7Ci0gICAgZW5jb2Rlci5za2lwKDEpOwotICAgIGVu
Y29kZXIuc2tpcCgxKTsKLSAgICBlbmNvZGVyLnNraXAoMSk7Ci0gICAgZW5jb2Rlci5za2lwKDEp
OwotICAgIGVuY29kZXIuc2tpcCgxKTsKLSAgICBlbmNvZGVyLnNraXAoMSk7Ci0gICAgZW5jb2Rl
ci5za2lwKDEpOwotICB9OwotICBmdW5jdGlvbiBJbWFnZUNhcHR1cmVfVGFrZVBob3RvX1BhcmFt
cyh2YWx1ZXMpIHsKLSAgICB0aGlzLmluaXREZWZhdWx0c18oKTsKLSAgICB0aGlzLmluaXRGaWVs
ZHNfKHZhbHVlcyk7Ci0gIH0KLQotCi0gIEltYWdlQ2FwdHVyZV9UYWtlUGhvdG9fUGFyYW1zLnBy
b3RvdHlwZS5pbml0RGVmYXVsdHNfID0gZnVuY3Rpb24oKSB7Ci0gICAgdGhpcy5zb3VyY2VJZCA9
IG51bGw7Ci0gIH07Ci0gIEltYWdlQ2FwdHVyZV9UYWtlUGhvdG9fUGFyYW1zLnByb3RvdHlwZS5p
bml0RmllbGRzXyA9IGZ1bmN0aW9uKGZpZWxkcykgewotICAgIGZvcih2YXIgZmllbGQgaW4gZmll
bGRzKSB7Ci0gICAgICAgIGlmICh0aGlzLmhhc093blByb3BlcnR5KGZpZWxkKSkKLSAgICAgICAg
ICB0aGlzW2ZpZWxkXSA9IGZpZWxkc1tmaWVsZF07Ci0gICAgfQotICB9OwotCi0gIEltYWdlQ2Fw
dHVyZV9UYWtlUGhvdG9fUGFyYW1zLnZhbGlkYXRlID0gZnVuY3Rpb24obWVzc2FnZVZhbGlkYXRv
ciwgb2Zmc2V0KSB7Ci0gICAgdmFyIGVycjsKLSAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZh
bGlkYXRlU3RydWN0SGVhZGVyKG9mZnNldCwgY29kZWMua1N0cnVjdEhlYWRlclNpemUpOwotICAg
IGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKLSAgICAgICAgcmV0
dXJuIGVycjsKLQotICAgIHZhciBrVmVyc2lvblNpemVzID0gWwotICAgICAge3ZlcnNpb246IDAs
IG51bUJ5dGVzOiAxNn0KLSAgICBdOwotICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRh
dGVTdHJ1Y3RWZXJzaW9uKG9mZnNldCwga1ZlcnNpb25TaXplcyk7Ci0gICAgaWYgKGVyciAhPT0g
dmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQotICAgICAgICByZXR1cm4gZXJyOwotCi0K
LSAgICAvLyB2YWxpZGF0ZSBJbWFnZUNhcHR1cmVfVGFrZVBob3RvX1BhcmFtcy5zb3VyY2VJZAot
ICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJpbmdQb2ludGVyKG9mZnNldCAr
IGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgMCwgZmFsc2UpCi0gICAgaWYgKGVyciAhPT0gdmFs
aWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQotICAgICAgICByZXR1cm4gZXJyOwotCi0gICAg
cmV0dXJuIHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORTsKLSAgfTsKLQotICBJbWFnZUNh
cHR1cmVfVGFrZVBob3RvX1BhcmFtcy5lbmNvZGVkU2l6ZSA9IGNvZGVjLmtTdHJ1Y3RIZWFkZXJT
aXplICsgODsKLQotICBJbWFnZUNhcHR1cmVfVGFrZVBob3RvX1BhcmFtcy5kZWNvZGUgPSBmdW5j
dGlvbihkZWNvZGVyKSB7Ci0gICAgdmFyIHBhY2tlZDsKLSAgICB2YXIgdmFsID0gbmV3IEltYWdl
Q2FwdHVyZV9UYWtlUGhvdG9fUGFyYW1zKCk7Ci0gICAgdmFyIG51bWJlck9mQnl0ZXMgPSBkZWNv
ZGVyLnJlYWRVaW50MzIoKTsKLSAgICB2YXIgdmVyc2lvbiA9IGRlY29kZXIucmVhZFVpbnQzMigp
OwotICAgIHZhbC5zb3VyY2VJZCA9IGRlY29kZXIuZGVjb2RlU3RydWN0KGNvZGVjLlN0cmluZyk7
Ci0gICAgcmV0dXJuIHZhbDsKLSAgfTsKLQotICBJbWFnZUNhcHR1cmVfVGFrZVBob3RvX1BhcmFt
cy5lbmNvZGUgPSBmdW5jdGlvbihlbmNvZGVyLCB2YWwpIHsKLSAgICB2YXIgcGFja2VkOwotICAg
IGVuY29kZXIud3JpdGVVaW50MzIoSW1hZ2VDYXB0dXJlX1Rha2VQaG90b19QYXJhbXMuZW5jb2Rl
ZFNpemUpOwotICAgIGVuY29kZXIud3JpdGVVaW50MzIoMCk7Ci0gICAgZW5jb2Rlci5lbmNvZGVT
dHJ1Y3QoY29kZWMuU3RyaW5nLCB2YWwuc291cmNlSWQpOwotICB9OwotICBmdW5jdGlvbiBJbWFn
ZUNhcHR1cmVfVGFrZVBob3RvX1Jlc3BvbnNlUGFyYW1zKHZhbHVlcykgewotICAgIHRoaXMuaW5p
dERlZmF1bHRzXygpOwotICAgIHRoaXMuaW5pdEZpZWxkc18odmFsdWVzKTsKLSAgfQotCi0KLSAg
SW1hZ2VDYXB0dXJlX1Rha2VQaG90b19SZXNwb25zZVBhcmFtcy5wcm90b3R5cGUuaW5pdERlZmF1
bHRzXyA9IGZ1bmN0aW9uKCkgewotICAgIHRoaXMuYmxvYiA9IG51bGw7Ci0gIH07Ci0gIEltYWdl
Q2FwdHVyZV9UYWtlUGhvdG9fUmVzcG9uc2VQYXJhbXMucHJvdG90eXBlLmluaXRGaWVsZHNfID0g
ZnVuY3Rpb24oZmllbGRzKSB7Ci0gICAgZm9yKHZhciBmaWVsZCBpbiBmaWVsZHMpIHsKLSAgICAg
ICAgaWYgKHRoaXMuaGFzT3duUHJvcGVydHkoZmllbGQpKQotICAgICAgICAgIHRoaXNbZmllbGRd
ID0gZmllbGRzW2ZpZWxkXTsKLSAgICB9Ci0gIH07Ci0KLSAgSW1hZ2VDYXB0dXJlX1Rha2VQaG90
b19SZXNwb25zZVBhcmFtcy52YWxpZGF0ZSA9IGZ1bmN0aW9uKG1lc3NhZ2VWYWxpZGF0b3IsIG9m
ZnNldCkgewotICAgIHZhciBlcnI7Ci0gICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0
ZVN0cnVjdEhlYWRlcihvZmZzZXQsIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplKTsKLSAgICBpZiAo
ZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCi0gICAgICAgIHJldHVybiBl
cnI7Ci0KLSAgICB2YXIga1ZlcnNpb25TaXplcyA9IFsKLSAgICAgIHt2ZXJzaW9uOiAwLCBudW1C
eXRlczogMTZ9Ci0gICAgXTsKLSAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3Ry
dWN0VmVyc2lvbihvZmZzZXQsIGtWZXJzaW9uU2l6ZXMpOwotICAgIGlmIChlcnIgIT09IHZhbGlk
YXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKLSAgICAgICAgcmV0dXJuIGVycjsKLQotCi0gICAg
Ly8gdmFsaWRhdGUgSW1hZ2VDYXB0dXJlX1Rha2VQaG90b19SZXNwb25zZVBhcmFtcy5ibG9iCi0g
ICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdFBvaW50ZXIob2Zmc2V0ICsg
Y29kZWMua1N0cnVjdEhlYWRlclNpemUgKyAwLCBCbG9iLCBmYWxzZSk7Ci0gICAgaWYgKGVyciAh
PT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQotICAgICAgICByZXR1cm4gZXJyOwot
Ci0gICAgcmV0dXJuIHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORTsKLSAgfTsKLQotICBJ
bWFnZUNhcHR1cmVfVGFrZVBob3RvX1Jlc3BvbnNlUGFyYW1zLmVuY29kZWRTaXplID0gY29kZWMu
a1N0cnVjdEhlYWRlclNpemUgKyA4OwotCi0gIEltYWdlQ2FwdHVyZV9UYWtlUGhvdG9fUmVzcG9u
c2VQYXJhbXMuZGVjb2RlID0gZnVuY3Rpb24oZGVjb2RlcikgewotICAgIHZhciBwYWNrZWQ7Ci0g
ICAgdmFyIHZhbCA9IG5ldyBJbWFnZUNhcHR1cmVfVGFrZVBob3RvX1Jlc3BvbnNlUGFyYW1zKCk7
Ci0gICAgdmFyIG51bWJlck9mQnl0ZXMgPSBkZWNvZGVyLnJlYWRVaW50MzIoKTsKLSAgICB2YXIg
dmVyc2lvbiA9IGRlY29kZXIucmVhZFVpbnQzMigpOwotICAgIHZhbC5ibG9iID0gZGVjb2Rlci5k
ZWNvZGVTdHJ1Y3RQb2ludGVyKEJsb2IpOwotICAgIHJldHVybiB2YWw7Ci0gIH07Ci0KLSAgSW1h
Z2VDYXB0dXJlX1Rha2VQaG90b19SZXNwb25zZVBhcmFtcy5lbmNvZGUgPSBmdW5jdGlvbihlbmNv
ZGVyLCB2YWwpIHsKLSAgICB2YXIgcGFja2VkOwotICAgIGVuY29kZXIud3JpdGVVaW50MzIoSW1h
Z2VDYXB0dXJlX1Rha2VQaG90b19SZXNwb25zZVBhcmFtcy5lbmNvZGVkU2l6ZSk7Ci0gICAgZW5j
b2Rlci53cml0ZVVpbnQzMigwKTsKLSAgICBlbmNvZGVyLmVuY29kZVN0cnVjdFBvaW50ZXIoQmxv
YiwgdmFsLmJsb2IpOwotICB9OwotICB2YXIga0ltYWdlQ2FwdHVyZV9HZXRQaG90b1N0YXRlX05h
bWUgPSAwOwotICB2YXIga0ltYWdlQ2FwdHVyZV9TZXRPcHRpb25zX05hbWUgPSAxOwotICB2YXIg
a0ltYWdlQ2FwdHVyZV9UYWtlUGhvdG9fTmFtZSA9IDI7Ci0KLSAgZnVuY3Rpb24gSW1hZ2VDYXB0
dXJlUHRyKGhhbmRsZU9yUHRySW5mbykgewotICAgIHRoaXMucHRyID0gbmV3IGJpbmRpbmdzLklu
dGVyZmFjZVB0ckNvbnRyb2xsZXIoSW1hZ2VDYXB0dXJlLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlT3JQdHJJbmZvKTsKLSAgfQotCi0g
IGZ1bmN0aW9uIEltYWdlQ2FwdHVyZUFzc29jaWF0ZWRQdHIoYXNzb2NpYXRlZEludGVyZmFjZVB0
ckluZm8pIHsKLSAgICB0aGlzLnB0ciA9IG5ldyBhc3NvY2lhdGVkQmluZGluZ3MuQXNzb2NpYXRl
ZEludGVyZmFjZVB0ckNvbnRyb2xsZXIoCi0gICAgICAgIEltYWdlQ2FwdHVyZSwgYXNzb2NpYXRl
ZEludGVyZmFjZVB0ckluZm8pOwotICB9Ci0KLSAgSW1hZ2VDYXB0dXJlQXNzb2NpYXRlZFB0ci5w
cm90b3R5cGUgPQotICAgICAgT2JqZWN0LmNyZWF0ZShJbWFnZUNhcHR1cmVQdHIucHJvdG90eXBl
KTsKLSAgSW1hZ2VDYXB0dXJlQXNzb2NpYXRlZFB0ci5wcm90b3R5cGUuY29uc3RydWN0b3IgPQot
ICAgICAgSW1hZ2VDYXB0dXJlQXNzb2NpYXRlZFB0cjsKLQotICBmdW5jdGlvbiBJbWFnZUNhcHR1
cmVQcm94eShyZWNlaXZlcikgewotICAgIHRoaXMucmVjZWl2ZXJfID0gcmVjZWl2ZXI7Ci0gIH0K
LSAgSW1hZ2VDYXB0dXJlUHRyLnByb3RvdHlwZS5nZXRQaG90b1N0YXRlID0gZnVuY3Rpb24oKSB7
Ci0gICAgcmV0dXJuIEltYWdlQ2FwdHVyZVByb3h5LnByb3RvdHlwZS5nZXRQaG90b1N0YXRlCi0g
ICAgICAgIC5hcHBseSh0aGlzLnB0ci5nZXRQcm94eSgpLCBhcmd1bWVudHMpOwotICB9OwotCi0g
IEltYWdlQ2FwdHVyZVByb3h5LnByb3RvdHlwZS5nZXRQaG90b1N0YXRlID0gZnVuY3Rpb24oc291
cmNlSWQpIHsKLSAgICB2YXIgcGFyYW1zXyA9IG5ldyBJbWFnZUNhcHR1cmVfR2V0UGhvdG9TdGF0
ZV9QYXJhbXMoKTsKLSAgICBwYXJhbXNfLnNvdXJjZUlkID0gc291cmNlSWQ7Ci0gICAgcmV0dXJu
IG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkgewotICAgICAgdmFyIGJ1aWxk
ZXIgPSBuZXcgY29kZWMuTWVzc2FnZVYxQnVpbGRlcigKLSAgICAgICAgICBrSW1hZ2VDYXB0dXJl
X0dldFBob3RvU3RhdGVfTmFtZSwKLSAgICAgICAgICBjb2RlYy5hbGlnbihJbWFnZUNhcHR1cmVf
R2V0UGhvdG9TdGF0ZV9QYXJhbXMuZW5jb2RlZFNpemUpLAotICAgICAgICAgIGNvZGVjLmtNZXNz
YWdlRXhwZWN0c1Jlc3BvbnNlLCAwKTsKLSAgICAgIGJ1aWxkZXIuZW5jb2RlU3RydWN0KEltYWdl
Q2FwdHVyZV9HZXRQaG90b1N0YXRlX1BhcmFtcywgcGFyYW1zXyk7Ci0gICAgICB2YXIgbWVzc2Fn
ZSA9IGJ1aWxkZXIuZmluaXNoKCk7Ci0gICAgICB0aGlzLnJlY2VpdmVyXy5hY2NlcHRBbmRFeHBl
Y3RSZXNwb25zZShtZXNzYWdlKS50aGVuKGZ1bmN0aW9uKG1lc3NhZ2UpIHsKLSAgICAgICAgdmFy
IHJlYWRlciA9IG5ldyBjb2RlYy5NZXNzYWdlUmVhZGVyKG1lc3NhZ2UpOwotICAgICAgICB2YXIg
cmVzcG9uc2VQYXJhbXMgPQotICAgICAgICAgICAgcmVhZGVyLmRlY29kZVN0cnVjdChJbWFnZUNh
cHR1cmVfR2V0UGhvdG9TdGF0ZV9SZXNwb25zZVBhcmFtcyk7Ci0gICAgICAgIHJlc29sdmUocmVz
cG9uc2VQYXJhbXMpOwotICAgICAgfSkuY2F0Y2goZnVuY3Rpb24ocmVzdWx0KSB7Ci0gICAgICAg
IHJlamVjdChFcnJvcigiQ29ubmVjdGlvbiBlcnJvcjogIiArIHJlc3VsdCkpOwotICAgICAgfSk7
Ci0gICAgfS5iaW5kKHRoaXMpKTsKLSAgfTsKLSAgSW1hZ2VDYXB0dXJlUHRyLnByb3RvdHlwZS5z
ZXRPcHRpb25zID0gZnVuY3Rpb24oKSB7Ci0gICAgcmV0dXJuIEltYWdlQ2FwdHVyZVByb3h5LnBy
b3RvdHlwZS5zZXRPcHRpb25zCi0gICAgICAgIC5hcHBseSh0aGlzLnB0ci5nZXRQcm94eSgpLCBh
cmd1bWVudHMpOwotICB9OwotCi0gIEltYWdlQ2FwdHVyZVByb3h5LnByb3RvdHlwZS5zZXRPcHRp
b25zID0gZnVuY3Rpb24oc291cmNlSWQsIHNldHRpbmdzKSB7Ci0gICAgdmFyIHBhcmFtc18gPSBu
ZXcgSW1hZ2VDYXB0dXJlX1NldE9wdGlvbnNfUGFyYW1zKCk7Ci0gICAgcGFyYW1zXy5zb3VyY2VJ
ZCA9IHNvdXJjZUlkOwotICAgIHBhcmFtc18uc2V0dGluZ3MgPSBzZXR0aW5nczsKLSAgICByZXR1
cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7Ci0gICAgICB2YXIgYnVp
bGRlciA9IG5ldyBjb2RlYy5NZXNzYWdlVjFCdWlsZGVyKAotICAgICAgICAgIGtJbWFnZUNhcHR1
cmVfU2V0T3B0aW9uc19OYW1lLAotICAgICAgICAgIGNvZGVjLmFsaWduKEltYWdlQ2FwdHVyZV9T
ZXRPcHRpb25zX1BhcmFtcy5lbmNvZGVkU2l6ZSksCi0gICAgICAgICAgY29kZWMua01lc3NhZ2VF
eHBlY3RzUmVzcG9uc2UsIDApOwotICAgICAgYnVpbGRlci5lbmNvZGVTdHJ1Y3QoSW1hZ2VDYXB0
dXJlX1NldE9wdGlvbnNfUGFyYW1zLCBwYXJhbXNfKTsKLSAgICAgIHZhciBtZXNzYWdlID0gYnVp
bGRlci5maW5pc2goKTsKLSAgICAgIHRoaXMucmVjZWl2ZXJfLmFjY2VwdEFuZEV4cGVjdFJlc3Bv
bnNlKG1lc3NhZ2UpLnRoZW4oZnVuY3Rpb24obWVzc2FnZSkgewotICAgICAgICB2YXIgcmVhZGVy
ID0gbmV3IGNvZGVjLk1lc3NhZ2VSZWFkZXIobWVzc2FnZSk7Ci0gICAgICAgIHZhciByZXNwb25z
ZVBhcmFtcyA9Ci0gICAgICAgICAgICByZWFkZXIuZGVjb2RlU3RydWN0KEltYWdlQ2FwdHVyZV9T
ZXRPcHRpb25zX1Jlc3BvbnNlUGFyYW1zKTsKLSAgICAgICAgcmVzb2x2ZShyZXNwb25zZVBhcmFt
cyk7Ci0gICAgICB9KS5jYXRjaChmdW5jdGlvbihyZXN1bHQpIHsKLSAgICAgICAgcmVqZWN0KEVy
cm9yKCJDb25uZWN0aW9uIGVycm9yOiAiICsgcmVzdWx0KSk7Ci0gICAgICB9KTsKLSAgICB9LmJp
bmQodGhpcykpOwotICB9OwotICBJbWFnZUNhcHR1cmVQdHIucHJvdG90eXBlLnRha2VQaG90byA9
IGZ1bmN0aW9uKCkgewotICAgIHJldHVybiBJbWFnZUNhcHR1cmVQcm94eS5wcm90b3R5cGUudGFr
ZVBob3RvCi0gICAgICAgIC5hcHBseSh0aGlzLnB0ci5nZXRQcm94eSgpLCBhcmd1bWVudHMpOwot
ICB9OwotCi0gIEltYWdlQ2FwdHVyZVByb3h5LnByb3RvdHlwZS50YWtlUGhvdG8gPSBmdW5jdGlv
bihzb3VyY2VJZCkgewotICAgIHZhciBwYXJhbXNfID0gbmV3IEltYWdlQ2FwdHVyZV9UYWtlUGhv
dG9fUGFyYW1zKCk7Ci0gICAgcGFyYW1zXy5zb3VyY2VJZCA9IHNvdXJjZUlkOwotICAgIHJldHVy
biBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3QpIHsKLSAgICAgIHZhciBidWls
ZGVyID0gbmV3IGNvZGVjLk1lc3NhZ2VWMUJ1aWxkZXIoCi0gICAgICAgICAga0ltYWdlQ2FwdHVy
ZV9UYWtlUGhvdG9fTmFtZSwKLSAgICAgICAgICBjb2RlYy5hbGlnbihJbWFnZUNhcHR1cmVfVGFr
ZVBob3RvX1BhcmFtcy5lbmNvZGVkU2l6ZSksCi0gICAgICAgICAgY29kZWMua01lc3NhZ2VFeHBl
Y3RzUmVzcG9uc2UsIDApOwotICAgICAgYnVpbGRlci5lbmNvZGVTdHJ1Y3QoSW1hZ2VDYXB0dXJl
X1Rha2VQaG90b19QYXJhbXMsIHBhcmFtc18pOwotICAgICAgdmFyIG1lc3NhZ2UgPSBidWlsZGVy
LmZpbmlzaCgpOwotICAgICAgdGhpcy5yZWNlaXZlcl8uYWNjZXB0QW5kRXhwZWN0UmVzcG9uc2Uo
bWVzc2FnZSkudGhlbihmdW5jdGlvbihtZXNzYWdlKSB7Ci0gICAgICAgIHZhciByZWFkZXIgPSBu
ZXcgY29kZWMuTWVzc2FnZVJlYWRlcihtZXNzYWdlKTsKLSAgICAgICAgdmFyIHJlc3BvbnNlUGFy
YW1zID0KLSAgICAgICAgICAgIHJlYWRlci5kZWNvZGVTdHJ1Y3QoSW1hZ2VDYXB0dXJlX1Rha2VQ
aG90b19SZXNwb25zZVBhcmFtcyk7Ci0gICAgICAgIHJlc29sdmUocmVzcG9uc2VQYXJhbXMpOwot
ICAgICAgfSkuY2F0Y2goZnVuY3Rpb24ocmVzdWx0KSB7Ci0gICAgICAgIHJlamVjdChFcnJvcigi
Q29ubmVjdGlvbiBlcnJvcjogIiArIHJlc3VsdCkpOwotICAgICAgfSk7Ci0gICAgfS5iaW5kKHRo
aXMpKTsKLSAgfTsKLQotICBmdW5jdGlvbiBJbWFnZUNhcHR1cmVTdHViKGRlbGVnYXRlKSB7Ci0g
ICAgdGhpcy5kZWxlZ2F0ZV8gPSBkZWxlZ2F0ZTsKLSAgfQotICBJbWFnZUNhcHR1cmVTdHViLnBy
b3RvdHlwZS5nZXRQaG90b1N0YXRlID0gZnVuY3Rpb24oc291cmNlSWQpIHsKLSAgICByZXR1cm4g
dGhpcy5kZWxlZ2F0ZV8gJiYgdGhpcy5kZWxlZ2F0ZV8uZ2V0UGhvdG9TdGF0ZSAmJiB0aGlzLmRl
bGVnYXRlXy5nZXRQaG90b1N0YXRlKHNvdXJjZUlkKTsKLSAgfQotICBJbWFnZUNhcHR1cmVTdHVi
LnByb3RvdHlwZS5zZXRPcHRpb25zID0gZnVuY3Rpb24oc291cmNlSWQsIHNldHRpbmdzKSB7Ci0g
ICAgcmV0dXJuIHRoaXMuZGVsZWdhdGVfICYmIHRoaXMuZGVsZWdhdGVfLnNldE9wdGlvbnMgJiYg
dGhpcy5kZWxlZ2F0ZV8uc2V0T3B0aW9ucyhzb3VyY2VJZCwgc2V0dGluZ3MpOwotICB9Ci0gIElt
YWdlQ2FwdHVyZVN0dWIucHJvdG90eXBlLnRha2VQaG90byA9IGZ1bmN0aW9uKHNvdXJjZUlkKSB7
Ci0gICAgcmV0dXJuIHRoaXMuZGVsZWdhdGVfICYmIHRoaXMuZGVsZWdhdGVfLnRha2VQaG90byAm
JiB0aGlzLmRlbGVnYXRlXy50YWtlUGhvdG8oc291cmNlSWQpOwotICB9Ci0KLSAgSW1hZ2VDYXB0
dXJlU3R1Yi5wcm90b3R5cGUuYWNjZXB0ID0gZnVuY3Rpb24obWVzc2FnZSkgewotICAgIHZhciBy
ZWFkZXIgPSBuZXcgY29kZWMuTWVzc2FnZVJlYWRlcihtZXNzYWdlKTsKLSAgICBzd2l0Y2ggKHJl
YWRlci5tZXNzYWdlTmFtZSkgewotICAgIGRlZmF1bHQ6Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgfQotICB9OwotCi0gIEltYWdlQ2FwdHVyZVN0dWIucHJvdG90eXBlLmFjY2VwdFdpdGhSZXNw
b25kZXIgPQotICAgICAgZnVuY3Rpb24obWVzc2FnZSwgcmVzcG9uZGVyKSB7Ci0gICAgdmFyIHJl
YWRlciA9IG5ldyBjb2RlYy5NZXNzYWdlUmVhZGVyKG1lc3NhZ2UpOwotICAgIHN3aXRjaCAocmVh
ZGVyLm1lc3NhZ2VOYW1lKSB7Ci0gICAgY2FzZSBrSW1hZ2VDYXB0dXJlX0dldFBob3RvU3RhdGVf
TmFtZToKLSAgICAgIHZhciBwYXJhbXMgPSByZWFkZXIuZGVjb2RlU3RydWN0KEltYWdlQ2FwdHVy
ZV9HZXRQaG90b1N0YXRlX1BhcmFtcyk7Ci0gICAgICB0aGlzLmdldFBob3RvU3RhdGUocGFyYW1z
LnNvdXJjZUlkKS50aGVuKGZ1bmN0aW9uKHJlc3BvbnNlKSB7Ci0gICAgICAgIHZhciByZXNwb25z
ZVBhcmFtcyA9Ci0gICAgICAgICAgICBuZXcgSW1hZ2VDYXB0dXJlX0dldFBob3RvU3RhdGVfUmVz
cG9uc2VQYXJhbXMoKTsKLSAgICAgICAgcmVzcG9uc2VQYXJhbXMuc3RhdGUgPSByZXNwb25zZS5z
dGF0ZTsKLSAgICAgICAgdmFyIGJ1aWxkZXIgPSBuZXcgY29kZWMuTWVzc2FnZVYxQnVpbGRlcigK
LSAgICAgICAgICAgIGtJbWFnZUNhcHR1cmVfR2V0UGhvdG9TdGF0ZV9OYW1lLAotICAgICAgICAg
ICAgY29kZWMuYWxpZ24oSW1hZ2VDYXB0dXJlX0dldFBob3RvU3RhdGVfUmVzcG9uc2VQYXJhbXMu
ZW5jb2RlZFNpemUpLAotICAgICAgICAgICAgY29kZWMua01lc3NhZ2VJc1Jlc3BvbnNlLCByZWFk
ZXIucmVxdWVzdElEKTsKLSAgICAgICAgYnVpbGRlci5lbmNvZGVTdHJ1Y3QoSW1hZ2VDYXB0dXJl
X0dldFBob3RvU3RhdGVfUmVzcG9uc2VQYXJhbXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHJlc3BvbnNlUGFyYW1zKTsKLSAgICAgICAgdmFyIG1lc3NhZ2UgPSBidWlsZGVyLmZpbmlz
aCgpOwotICAgICAgICByZXNwb25kZXIuYWNjZXB0KG1lc3NhZ2UpOwotICAgICAgfSk7Ci0gICAg
ICByZXR1cm4gdHJ1ZTsKLSAgICBjYXNlIGtJbWFnZUNhcHR1cmVfU2V0T3B0aW9uc19OYW1lOgot
ICAgICAgdmFyIHBhcmFtcyA9IHJlYWRlci5kZWNvZGVTdHJ1Y3QoSW1hZ2VDYXB0dXJlX1NldE9w
dGlvbnNfUGFyYW1zKTsKLSAgICAgIHRoaXMuc2V0T3B0aW9ucyhwYXJhbXMuc291cmNlSWQsIHBh
cmFtcy5zZXR0aW5ncykudGhlbihmdW5jdGlvbihyZXNwb25zZSkgewotICAgICAgICB2YXIgcmVz
cG9uc2VQYXJhbXMgPQotICAgICAgICAgICAgbmV3IEltYWdlQ2FwdHVyZV9TZXRPcHRpb25zX1Jl
c3BvbnNlUGFyYW1zKCk7Ci0gICAgICAgIHJlc3BvbnNlUGFyYW1zLnN1Y2Nlc3MgPSByZXNwb25z
ZS5zdWNjZXNzOwotICAgICAgICB2YXIgYnVpbGRlciA9IG5ldyBjb2RlYy5NZXNzYWdlVjFCdWls
ZGVyKAotICAgICAgICAgICAga0ltYWdlQ2FwdHVyZV9TZXRPcHRpb25zX05hbWUsCi0gICAgICAg
ICAgICBjb2RlYy5hbGlnbihJbWFnZUNhcHR1cmVfU2V0T3B0aW9uc19SZXNwb25zZVBhcmFtcy5l
bmNvZGVkU2l6ZSksCi0gICAgICAgICAgICBjb2RlYy5rTWVzc2FnZUlzUmVzcG9uc2UsIHJlYWRl
ci5yZXF1ZXN0SUQpOwotICAgICAgICBidWlsZGVyLmVuY29kZVN0cnVjdChJbWFnZUNhcHR1cmVf
U2V0T3B0aW9uc19SZXNwb25zZVBhcmFtcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
cmVzcG9uc2VQYXJhbXMpOwotICAgICAgICB2YXIgbWVzc2FnZSA9IGJ1aWxkZXIuZmluaXNoKCk7
Ci0gICAgICAgIHJlc3BvbmRlci5hY2NlcHQobWVzc2FnZSk7Ci0gICAgICB9KTsKLSAgICAgIHJl
dHVybiB0cnVlOwotICAgIGNhc2Uga0ltYWdlQ2FwdHVyZV9UYWtlUGhvdG9fTmFtZToKLSAgICAg
IHZhciBwYXJhbXMgPSByZWFkZXIuZGVjb2RlU3RydWN0KEltYWdlQ2FwdHVyZV9UYWtlUGhvdG9f
UGFyYW1zKTsKLSAgICAgIHRoaXMudGFrZVBob3RvKHBhcmFtcy5zb3VyY2VJZCkudGhlbihmdW5j
dGlvbihyZXNwb25zZSkgewotICAgICAgICB2YXIgcmVzcG9uc2VQYXJhbXMgPQotICAgICAgICAg
ICAgbmV3IEltYWdlQ2FwdHVyZV9UYWtlUGhvdG9fUmVzcG9uc2VQYXJhbXMoKTsKLSAgICAgICAg
cmVzcG9uc2VQYXJhbXMuYmxvYiA9IHJlc3BvbnNlLmJsb2I7Ci0gICAgICAgIHZhciBidWlsZGVy
ID0gbmV3IGNvZGVjLk1lc3NhZ2VWMUJ1aWxkZXIoCi0gICAgICAgICAgICBrSW1hZ2VDYXB0dXJl
X1Rha2VQaG90b19OYW1lLAotICAgICAgICAgICAgY29kZWMuYWxpZ24oSW1hZ2VDYXB0dXJlX1Rh
a2VQaG90b19SZXNwb25zZVBhcmFtcy5lbmNvZGVkU2l6ZSksCi0gICAgICAgICAgICBjb2RlYy5r
TWVzc2FnZUlzUmVzcG9uc2UsIHJlYWRlci5yZXF1ZXN0SUQpOwotICAgICAgICBidWlsZGVyLmVu
Y29kZVN0cnVjdChJbWFnZUNhcHR1cmVfVGFrZVBob3RvX1Jlc3BvbnNlUGFyYW1zLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zZVBhcmFtcyk7Ci0gICAgICAgIHZhciBtZXNz
YWdlID0gYnVpbGRlci5maW5pc2goKTsKLSAgICAgICAgcmVzcG9uZGVyLmFjY2VwdChtZXNzYWdl
KTsKLSAgICAgIH0pOwotICAgICAgcmV0dXJuIHRydWU7Ci0gICAgZGVmYXVsdDoKLSAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICB9Ci0gIH07Ci0KLSAgZnVuY3Rpb24gdmFsaWRhdGVJbWFnZUNhcHR1
cmVSZXF1ZXN0KG1lc3NhZ2VWYWxpZGF0b3IpIHsKLSAgICB2YXIgbWVzc2FnZSA9IG1lc3NhZ2VW
YWxpZGF0b3IubWVzc2FnZTsKLSAgICB2YXIgcGFyYW1zQ2xhc3MgPSBudWxsOwotICAgIHN3aXRj
aCAobWVzc2FnZS5nZXROYW1lKCkpIHsKLSAgICAgIGNhc2Uga0ltYWdlQ2FwdHVyZV9HZXRQaG90
b1N0YXRlX05hbWU6Ci0gICAgICAgIGlmIChtZXNzYWdlLmV4cGVjdHNSZXNwb25zZSgpKQotICAg
ICAgICAgIHBhcmFtc0NsYXNzID0gSW1hZ2VDYXB0dXJlX0dldFBob3RvU3RhdGVfUGFyYW1zOwot
ICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIGtJbWFnZUNhcHR1cmVfU2V0T3B0aW9uc19OYW1lOgot
ICAgICAgICBpZiAobWVzc2FnZS5leHBlY3RzUmVzcG9uc2UoKSkKLSAgICAgICAgICBwYXJhbXND
bGFzcyA9IEltYWdlQ2FwdHVyZV9TZXRPcHRpb25zX1BhcmFtczsKLSAgICAgIGJyZWFrOwotICAg
ICAgY2FzZSBrSW1hZ2VDYXB0dXJlX1Rha2VQaG90b19OYW1lOgotICAgICAgICBpZiAobWVzc2Fn
ZS5leHBlY3RzUmVzcG9uc2UoKSkKLSAgICAgICAgICBwYXJhbXNDbGFzcyA9IEltYWdlQ2FwdHVy
ZV9UYWtlUGhvdG9fUGFyYW1zOwotICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGlmIChwYXJhbXND
bGFzcyA9PT0gbnVsbCkKLSAgICAgIHJldHVybiB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5P
TkU7Ci0gICAgcmV0dXJuIHBhcmFtc0NsYXNzLnZhbGlkYXRlKG1lc3NhZ2VWYWxpZGF0b3IsIG1l
c3NhZ2VWYWxpZGF0b3IubWVzc2FnZS5nZXRIZWFkZXJOdW1CeXRlcygpKTsKLSAgfQotCi0gIGZ1
bmN0aW9uIHZhbGlkYXRlSW1hZ2VDYXB0dXJlUmVzcG9uc2UobWVzc2FnZVZhbGlkYXRvcikgewot
ICAgdmFyIG1lc3NhZ2UgPSBtZXNzYWdlVmFsaWRhdG9yLm1lc3NhZ2U7Ci0gICB2YXIgcGFyYW1z
Q2xhc3MgPSBudWxsOwotICAgc3dpdGNoIChtZXNzYWdlLmdldE5hbWUoKSkgewotICAgICAgY2Fz
ZSBrSW1hZ2VDYXB0dXJlX0dldFBob3RvU3RhdGVfTmFtZToKLSAgICAgICAgaWYgKG1lc3NhZ2Uu
aXNSZXNwb25zZSgpKQotICAgICAgICAgIHBhcmFtc0NsYXNzID0gSW1hZ2VDYXB0dXJlX0dldFBo
b3RvU3RhdGVfUmVzcG9uc2VQYXJhbXM7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBrSW1h
Z2VDYXB0dXJlX1NldE9wdGlvbnNfTmFtZToKLSAgICAgICAgaWYgKG1lc3NhZ2UuaXNSZXNwb25z
ZSgpKQotICAgICAgICAgIHBhcmFtc0NsYXNzID0gSW1hZ2VDYXB0dXJlX1NldE9wdGlvbnNfUmVz
cG9uc2VQYXJhbXM7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBrSW1hZ2VDYXB0dXJlX1Rh
a2VQaG90b19OYW1lOgotICAgICAgICBpZiAobWVzc2FnZS5pc1Jlc3BvbnNlKCkpCi0gICAgICAg
ICAgcGFyYW1zQ2xhc3MgPSBJbWFnZUNhcHR1cmVfVGFrZVBob3RvX1Jlc3BvbnNlUGFyYW1zOwot
ICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgaWYgKHBhcmFtc0NsYXNzID09PSBudWxsKQotICAg
ICAgcmV0dXJuIHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORTsKLSAgICByZXR1cm4gcGFy
YW1zQ2xhc3MudmFsaWRhdGUobWVzc2FnZVZhbGlkYXRvciwgbWVzc2FnZVZhbGlkYXRvci5tZXNz
YWdlLmdldEhlYWRlck51bUJ5dGVzKCkpOwotICB9Ci0KLSAgdmFyIEltYWdlQ2FwdHVyZSA9IHsK
LSAgICBuYW1lOiAnbWVkaWEubW9qb20uSW1hZ2VDYXB0dXJlJywKLSAgICBrVmVyc2lvbjogMCwK
LSAgICBwdHJDbGFzczogSW1hZ2VDYXB0dXJlUHRyLAotICAgIHByb3h5Q2xhc3M6IEltYWdlQ2Fw
dHVyZVByb3h5LAotICAgIHN0dWJDbGFzczogSW1hZ2VDYXB0dXJlU3R1YiwKLSAgICB2YWxpZGF0
ZVJlcXVlc3Q6IHZhbGlkYXRlSW1hZ2VDYXB0dXJlUmVxdWVzdCwKLSAgICB2YWxpZGF0ZVJlc3Bv
bnNlOiB2YWxpZGF0ZUltYWdlQ2FwdHVyZVJlc3BvbnNlLAotICB9OwotICBJbWFnZUNhcHR1cmVT
dHViLnByb3RvdHlwZS52YWxpZGF0b3IgPSB2YWxpZGF0ZUltYWdlQ2FwdHVyZVJlcXVlc3Q7Ci0g
IEltYWdlQ2FwdHVyZVByb3h5LnByb3RvdHlwZS52YWxpZGF0b3IgPSB2YWxpZGF0ZUltYWdlQ2Fw
dHVyZVJlc3BvbnNlOwotICBleHBvcnRzLk1ldGVyaW5nTW9kZSA9IE1ldGVyaW5nTW9kZTsKLSAg
ZXhwb3J0cy5SZWRFeWVSZWR1Y3Rpb24gPSBSZWRFeWVSZWR1Y3Rpb247Ci0gIGV4cG9ydHMuRmls
bExpZ2h0TW9kZSA9IEZpbGxMaWdodE1vZGU7Ci0gIGV4cG9ydHMuUmFuZ2UgPSBSYW5nZTsKLSAg
ZXhwb3J0cy5QaG90b1N0YXRlID0gUGhvdG9TdGF0ZTsKLSAgZXhwb3J0cy5Qb2ludDJEID0gUG9p
bnQyRDsKLSAgZXhwb3J0cy5QaG90b1NldHRpbmdzID0gUGhvdG9TZXR0aW5nczsKLSAgZXhwb3J0
cy5CbG9iID0gQmxvYjsKLSAgZXhwb3J0cy5JbWFnZUNhcHR1cmUgPSBJbWFnZUNhcHR1cmU7Ci0g
IGV4cG9ydHMuSW1hZ2VDYXB0dXJlUHRyID0gSW1hZ2VDYXB0dXJlUHRyOwotICBleHBvcnRzLklt
YWdlQ2FwdHVyZUFzc29jaWF0ZWRQdHIgPSBJbWFnZUNhcHR1cmVBc3NvY2lhdGVkUHRyOwotfSko
KTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9p
bXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS9tb2NrLWlk
bGUtZGV0ZWN0aW9uLmpzIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10
ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vbW9jay1pZGxlLWRldGVjdGlvbi5qcwpuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li5kODhkMWFkMWM1NWFmYWVlMjQzZTFlOTE0NjgyN2IwNzNjMzgwNjEzCi0tLSAvZGV2L251bGwK
KysrIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJj
ZXMvY2hyb21pdW0vbW9jay1pZGxlLWRldGVjdGlvbi5qcwpAQCAtMCwwICsxLDgzIEBACisvKioK
KyAqIFRoaXMgaXMgYSB0ZXN0aW5nIGZyYW1ld29yayB0aGF0IGVuYWJsZXMgdXMgdG8gdGVzdCB0
aGUgdXNlciBpZGxlIGRldGVjdGlvbgorICogYnkgaW50ZXJjZXB0aW5nIHRoZSBjb25uZWN0aW9u
IGJldHdlZW4gdGhlIHJlbmRlcmVyIGFuZCB0aGUgYnJvd3NlciBhbmQKKyAqIGV4cG9zaW5nIGEg
bW9ja2luZyBBUEkgZm9yIHRlc3RzLgorICoKKyAqIFVzYWdlOgorICoKKyAqIDEpIEluY2x1ZGUg
PHNjcmlwdCBzcmM9Im1vY2suanMiPjwvc2NyaXB0PiBpbiB5b3VyIGZpbGUuCisgKiAyKSBTZXQg
ZXhwZWN0YXRpb25zCisgKiAgIGV4cGVjdChhZGRNb25pdG9yKS5hbmRSZXR1cm4oKHRocmVzaG9s
ZCwgbW9uaXRvclB0ciwgY2FsbGJhY2spID0+IHsKKyAqICAgICAvLyBtb2NrIGJlaGF2aW9yCisg
KiAgIH0pCisgKiAzKSBDYWxsIG5hdmlnYXRvci5pZGxlLnF1ZXJ5KCkKKyAqCisgKiBUaGUgbW9j
a2luZyBBUEkgaXMgYmxpbmsgYWdub3N0aWMgYW5kIGlzIGRlc2lnbmVkIHN1Y2ggdGhhdCBvdGhl
ciBlbmdpbmVzCisgKiBjb3VsZCBpbXBsZW1lbnQgaXQgdG9vLiBIZXJlIGFyZSB0aGUgc3ltYm9s
cyB0aGF0IGFyZSBleHBvc2VkIHRvIHRlc3RzOgorICoKKyAqIC0gZnVuY3Rpb24gYWRkTW9uaXRv
cigpOiB0aGUgbWFpbi9vbmx5IGZ1bmN0aW9uIHRoYXQgY2FuIGJlIG1vY2tlZC4KKyAqIC0gZnVu
Y3Rpb24gZXhwZWN0KCk6IHRoZSBtYWluL29ubHkgZnVuY3Rpb24gdGhhdCBlbmFibGVzIHVzIHRv
IG1vY2sgaXQuCisgKiAtIGZ1bmN0aW9uIGNsb3NlKCk6IGRpc2Nvbm5lY3RzIHRoZSBpbnRlcmNl
cHRvci4KKyAqIC0gZW51bSBVc2VySWRsZVN0YXRlIHtJRExFLCBBQ1RJVkV9OiBibGluayBhZ25v
c3RpYyBjb25zdGFudHMuCisgKiAtIGVudW0gU2NyZWVuSWRsZVN0YXRlIHtMT0NLRUQsIFVOTE9D
S0VEfTogYmxpbmsgYWdub3N0aWMgY29uc3RhbnRzLgorICovCisKK2NsYXNzIEZha2VJZGxlTW9u
aXRvciB7CisgIGFkZE1vbml0b3IodGhyZXNob2xkLCBtb25pdG9yUHRyLCBjYWxsYmFjaykgewor
ICAgIHJldHVybiB0aGlzLmhhbmRsZXIuYWRkTW9uaXRvcih0aHJlc2hvbGQsIG1vbml0b3JQdHIp
OworICB9CisgIHNldEhhbmRsZXIoaGFuZGxlcikgeworICAgIHRoaXMuaGFuZGxlciA9IGhhbmRs
ZXI7CisgICAgcmV0dXJuIHRoaXM7CisgIH0KKyAgc2V0QmluZGluZyhiaW5kaW5nKSB7CisgICAg
dGhpcy5iaW5kaW5nID0gYmluZGluZzsKKyAgICByZXR1cm4gdGhpczsKKyAgfQorICBjbG9zZSgp
IHsKKyAgICB0aGlzLmJpbmRpbmcuY2xvc2UoKTsKKyAgfQorfQorCitjb25zdCBVc2VySWRsZVN0
YXRlID0ge307Citjb25zdCBTY3JlZW5JZGxlU3RhdGUgPSB7fTsKKworZnVuY3Rpb24gYWRkTW9u
aXRvcih0aHJlc2hvbGQsIG1vbml0b3JQdHIsIGNhbGxiYWNrKSB7CisgIHRocm93IG5ldyBFcnJv
cigiZXhwZWN0ZWQgdG8gYmUgb3ZlcnJpZGVuIGJ5IHRlc3RzIik7Cit9CisKK2FzeW5jIGZ1bmN0
aW9uIGNsb3NlKCkgeworICBpbnRlcmNlcHRvci5jbG9zZSgpOworfQorCitmdW5jdGlvbiBleHBl
Y3QoY2FsbCkgeworICByZXR1cm4geworICAgIGFuZFJldHVybihjYWxsYmFjaykgeworICAgICAg
bGV0IGhhbmRsZXIgPSB7fTsKKyAgICAgIGhhbmRsZXJbY2FsbC5uYW1lXSA9IGNhbGxiYWNrOwor
ICAgICAgaW50ZXJjZXB0b3Iuc2V0SGFuZGxlcihoYW5kbGVyKTsKKyAgICB9CisgIH0KK30KKwor
ZnVuY3Rpb24gaW50ZXJjZXB0KCkgeworICBsZXQgcmVzdWx0ID0gbmV3IEZha2VJZGxlTW9uaXRv
cigpOworCisgIGxldCBiaW5kaW5nID0gbmV3IG1vam8uQmluZGluZyhibGluay5tb2pvbS5JZGxl
TWFuYWdlciwgcmVzdWx0KTsKKyAgbGV0IGludGVyY2VwdG9yID0gbmV3IE1vam9JbnRlcmZhY2VJ
bnRlcmNlcHRvcihibGluay5tb2pvbS5JZGxlTWFuYWdlci5uYW1lKTsKKyAgaW50ZXJjZXB0b3Iu
b25pbnRlcmZhY2VyZXF1ZXN0ID0gKGUpID0+IHsKKyAgICBiaW5kaW5nLmJpbmQoZS5oYW5kbGUp
OworICB9CisKKyAgaW50ZXJjZXB0b3Iuc3RhcnQoKTsKKworICBVc2VySWRsZVN0YXRlLkFDVElW
RSA9IGJsaW5rLm1vam9tLlVzZXJJZGxlU3RhdGUua0FjdGl2ZTsKKyAgVXNlcklkbGVTdGF0ZS5J
RExFID0gYmxpbmsubW9qb20uVXNlcklkbGVTdGF0ZS5rSWRsZTsKKyAgU2NyZWVuSWRsZVN0YXRl
LkxPQ0tFRCA9IGJsaW5rLm1vam9tLlNjcmVlbklkbGVTdGF0ZS5rTG9ja2VkOworICBTY3JlZW5J
ZGxlU3RhdGUuVU5MT0NLRUQgPSBibGluay5tb2pvbS5TY3JlZW5JZGxlU3RhdGUua1VubG9ja2Vk
OworCisgIHJlc3VsdC5zZXRCaW5kaW5nKGJpbmRpbmcpOworICByZXR1cm4gcmVzdWx0OworfQor
Citjb25zdCBpbnRlcmNlcHRvciA9IGludGVyY2VwdCgpOwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9m
IGZpbGUKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0t
dGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL21vY2staW1hZ2VjYXB0dXJlLmpzIGIvTGF5b3V0VGVz
dHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vbW9j
ay1pbWFnZWNhcHR1cmUuanMKaW5kZXggY2UyYjk2ODM5MTM0MzMzOWE5OTU4MTAwZjU2NGZhNzNk
NWMwMTUwOS4uYThmNWM4OTZiMWYyY2MyYzkwMjQwYmQwNTNkMjE4YzI4ZGM1NDlkZCAxMDA2NDQK
LS0tIGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJj
ZXMvY2hyb21pdW0vbW9jay1pbWFnZWNhcHR1cmUuanMKKysrIGIvTGF5b3V0VGVzdHMvaW1wb3J0
ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vbW9jay1pbWFnZWNh
cHR1cmUuanMKQEAgLTEzMyw2ICsxMzMsNyBAQCB2YXIgSW1hZ2VDYXB0dXJlVGVzdCA9ICgoKSA9
PiB7CiAgICAgICAgICAgXSwKICAgICAgICAgfQogICAgICAgfTsKKyAgICAgIHRoaXMucGFuVGls
dFpvb21QZXJtaXNzaW9uU3RhdHVzXyA9IG51bGw7CiAgICAgICB0aGlzLnNldHRpbmdzXyA9IG51
bGw7CiAgICAgICB0aGlzLmJpbmRpbmdTZXRfID0gbmV3IG1vam8uQmluZGluZ1NldChtZWRpYS5t
b2pvbS5JbWFnZUNhcHR1cmUpOwogICAgIH0KQEAgLTE0MiwxMSArMTQzLDI0IEBAIHZhciBJbWFn
ZUNhcHR1cmVUZXN0ID0gKCgpID0+IHsKICAgICAgIHRoaXMuaW50ZXJjZXB0b3JfLnN0b3AoKTsK
ICAgICB9CiAKLSAgICBnZXRQaG90b1N0YXRlKHNvdXJjZV9pZCkgewotICAgICAgcmV0dXJuIFBy
b21pc2UucmVzb2x2ZSh0aGlzLnN0YXRlXyk7CisgICAgYXN5bmMgZ2V0UGhvdG9TdGF0ZShzb3Vy
Y2VfaWQpIHsKKyAgICAgIGNvbnN0IHNob3VsZEtlZXBQYW5UaWx0Wm9vbSA9IGF3YWl0IHRoaXMu
aXNQYW5UaWx0Wm9vbVBlcm1pc3Npb25HcmFudGVkKCk7CisgICAgICBpZiAoc2hvdWxkS2VlcFBh
blRpbHRab29tKQorICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRoaXMuc3RhdGVfKTsK
KworICAgICAgY29uc3QgbmV3U3RhdGUgPSB7Li4udGhpcy5zdGF0ZV99OworICAgICAgbmV3U3Rh
dGUuc3RhdGUucGFuID0ge307CisgICAgICBuZXdTdGF0ZS5zdGF0ZS50aWx0ID0ge307CisgICAg
ICBuZXdTdGF0ZS5zdGF0ZS56b29tID0ge307CisgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZl
KG5ld1N0YXRlKTsKICAgICB9CiAKLSAgICBzZXRPcHRpb25zKHNvdXJjZV9pZCwgc2V0dGluZ3Mp
IHsKKyAgICBhc3luYyBzZXRPcHRpb25zKHNvdXJjZV9pZCwgc2V0dGluZ3MpIHsKKyAgICAgIGNv
bnN0IGlzQWxsb3dlZFRvQ29udHJvbFBhblRpbHRab29tID0gYXdhaXQgdGhpcy5pc1BhblRpbHRa
b29tUGVybWlzc2lvbkdyYW50ZWQoKTsKKyAgICAgIGlmICghaXNBbGxvd2VkVG9Db250cm9sUGFu
VGlsdFpvb20gJiYKKyAgICAgICAgICAoc2V0dGluZ3MuaGFzUGFuIHx8IHNldHRpbmdzLmhhc1Rp
bHQgfHwgc2V0dGluZ3MuaGFzWm9vbSkpIHsKKyAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2
ZSh7IHN1Y2Nlc3M6IGZhbHNlIH0pOworICAgICAgfQogICAgICAgdGhpcy5zZXR0aW5nc18gPSBz
ZXR0aW5nczsKICAgICAgIGlmIChzZXR0aW5ncy5oYXNJc28pCiAgICAgICAgIHRoaXMuc3RhdGVf
LnN0YXRlLmlzby5jdXJyZW50ID0gc2V0dGluZ3MuaXNvOwpAQCAtMjE5LDYgKzIzMywxNiBAQCB2
YXIgSW1hZ2VDYXB0dXJlVGVzdCA9ICgoKSA9PiB7CiAgICAgICB9KTsKICAgICB9CiAKKyAgICBh
c3luYyBpc1BhblRpbHRab29tUGVybWlzc2lvbkdyYW50ZWQoKSB7CisgICAgICBpZiAoIXRoaXMu
cGFuVGlsdFpvb21QZXJtaXNzaW9uU3RhdHVzXykgeworICAgICAgICB0aGlzLnBhblRpbHRab29t
UGVybWlzc2lvblN0YXR1c18gPSBhd2FpdCBuYXZpZ2F0b3IucGVybWlzc2lvbnMucXVlcnkoewor
ICAgICAgICAgIG5hbWU6ICJjYW1lcmEiLAorICAgICAgICAgIHBhblRpbHRab29tOiB0cnVlCisg
ICAgICAgIH0pOworICAgICAgfQorICAgICAgcmV0dXJuIHRoaXMucGFuVGlsdFpvb21QZXJtaXNz
aW9uU3RhdHVzXy5zdGF0ZSA9PSAiZ3JhbnRlZCI7CisgICAgfQorCiAgICAgc3RhdGUoKSB7CiAg
ICAgICByZXR1cm4gdGhpcy5zdGF0ZV8uc3RhdGU7CiAgICAgfQpkaWZmIC0tZ2l0IGEvTGF5b3V0
VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0v
bW9jay1zY3JlZW5lbnVtZXJhdGlvbi5qcyBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWIt
cGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL21vY2stc2NyZWVuZW51bWVyYXRpb24u
anMKaW5kZXggNWEyZDdiMThkMjgyMjlkOWUwZTNlNTNhMjIwMDZhMDgyZGUyNWRlYS4uMmU0MWY1
OWVhODA5YjY0MzRkOTM2MzIyOGIxNjJkYmNmMzUzOGY2MSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVz
dHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vbW9j
ay1zY3JlZW5lbnVtZXJhdGlvbi5qcworKysgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2Vi
LXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS9tb2NrLXNjcmVlbmVudW1lcmF0aW9u
LmpzCkBAIC00NCwxMSArNDQsMjIgQEAgdmFyIFNjcmVlbkVudW1lcmF0aW9uVGVzdCA9ICgoKSA9
PiB7CiAgICAgfQogCiAgICAgYXN5bmMgZ2V0RGlzcGxheXMoKSB7CisgICAgICBpZiAoIXRoaXMu
c3VjY2Vzc18pCisgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoeyByZXN1bHQ6IHVuZGVm
aW5lZCwgfSk7CisgICAgICBsZXQgdmFsdWUgPSBuZXcgYmxpbmsubW9qb20uRGlzcGxheXMoKTsK
KyAgICAgIHZhbHVlLmRpc3BsYXlzID0gdGhpcy5kaXNwbGF5c187CisgICAgICB2YWx1ZS5pbnRl
cm5hbElkID0gdGhpcy5pbnRlcm5hbElkXzsKKyAgICAgIHZhbHVlLnByaW1hcnlJZCA9IHRoaXMu
cHJpbWFyeUlkXzsKKyAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoeyByZXN1bHQ6IHZhbHVl
LCB9KTsKKyAgICB9CisKKyAgICBhc3luYyBoYXNNdWx0aXBsZURpc3BsYXlzKCkgeworICAgICAg
aWYgKCF0aGlzLnN1Y2Nlc3NfKQorICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHsgcmVz
dWx0OiBibGluay5tb2pvbS5NdWx0aXBsZURpc3BsYXlzLmtFcnJvciB9KTsKICAgICAgIHJldHVy
biBQcm9taXNlLnJlc29sdmUoewotICAgICAgICBkaXNwbGF5czogdGhpcy5kaXNwbGF5c18sCi0g
ICAgICAgIGludGVybmFsSWQ6IHRoaXMuaW50ZXJuYWxJZF8sCi0gICAgICAgIHByaW1hcnlJZDog
dGhpcy5wcmltYXJ5SWRfLAotICAgICAgICBzdWNjZXNzOiB0aGlzLnN1Y2Nlc3NfLAorICAgICAg
ICByZXN1bHQ6IHRoaXMuZGlzcGxheXNfLmxlbmd0aCA+IDEKKyAgICAgICAgICAgID8gYmxpbmsu
bW9qb20uTXVsdGlwbGVEaXNwbGF5cy5rVHJ1ZQorICAgICAgICAgICAgOiBibGluay5tb2pvbS5N
dWx0aXBsZURpc3BsYXlzLmtGYWxzZSwKICAgICAgIH0pOwogICAgIH0KICAgfQpkaWZmIC0tZ2l0
IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMv
Y2hyb21pdW0vbW9jay1zbXMtcmVjZWl2ZXIuanMgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mv
d2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS9tb2NrLXNtcy1yZWNlaXZlci5q
cwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzRhYTlhODZmMmM4YTE1MzAzZjk2Y2M5
ODU5YjJlYzE0NmViMmY1OC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MAotLS0gYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291
cmNlcy9jaHJvbWl1bS9tb2NrLXNtcy1yZWNlaXZlci5qcworKysgL2Rldi9udWxsCkBAIC0xLDUx
ICswLDAgQEAKLSd1c2Ugc3RyaWN0JzsKLQotY29uc3QgU21zUHJvdmlkZXIgPSAoKCkgPT4gewot
Ci0gIGNsYXNzIE1vY2tTbXNSZWNlaXZlciB7Ci0KLSAgICBjb25zdHJ1Y3RvcigpIHsKLSAgICAg
IHRoaXMubW9qb1JlY2VpdmVyXyA9IG5ldyBibGluay5tb2pvbS5TbXNSZWNlaXZlclJlY2VpdmVy
KHRoaXMpOwotCi0gICAgICB0aGlzLmludGVyY2VwdG9yXyA9Ci0gICAgICAgICAgbmV3IE1vam9J
bnRlcmZhY2VJbnRlcmNlcHRvcihibGluay5tb2pvbS5TbXNSZWNlaXZlci4kaW50ZXJmYWNlTmFt
ZSk7Ci0KLSAgICAgIHRoaXMuaW50ZXJjZXB0b3JfLm9uaW50ZXJmYWNlcmVxdWVzdCA9IChlKSA9
PiB7Ci0gICAgICAgIHRoaXMubW9qb1JlY2VpdmVyXy4kLmJpbmRIYW5kbGUoZS5oYW5kbGUpOwot
ICAgICAgfQotICAgICAgdGhpcy5pbnRlcmNlcHRvcl8uc3RhcnQoKTsKLQotICAgICAgdGhpcy5y
ZXR1cm5WYWx1ZXNfID0ge307Ci0gICAgfQotCi0gICAgYXN5bmMgcmVjZWl2ZSgpIHsKLSAgICAg
IGxldCBjYWxsID0gdGhpcy5yZXR1cm5WYWx1ZXNfLnJlY2VpdmUgPwotICAgICAgICAgIHRoaXMu
cmV0dXJuVmFsdWVzXy5yZWNlaXZlLnNoaWZ0KCkgOiBudWxsOwotICAgICAgaWYgKCFjYWxsKQot
ICAgICAgICByZXR1cm47Ci0gICAgICByZXR1cm4gY2FsbCgpOwotICAgIH0KLQotICAgIGFzeW5j
IGFib3J0KCkge307Ci0KLSAgICBwdXNoUmV0dXJuVmFsdWVzRm9yVGVzdGluZyhjYWxsTmFtZSwg
dmFsdWUpIHsKLSAgICAgIHRoaXMucmV0dXJuVmFsdWVzX1tjYWxsTmFtZV0gPSB0aGlzLnJldHVy
blZhbHVlc19bY2FsbE5hbWVdIHx8IFtdOwotICAgICAgdGhpcy5yZXR1cm5WYWx1ZXNfW2NhbGxO
YW1lXS5wdXNoKHZhbHVlKTsKLSAgICAgIHJldHVybiB0aGlzOwotICAgIH0KLSAgfQotCi0gIGNv
bnN0IG1vY2tTbXNSZWNlaXZlciA9IG5ldyBNb2NrU21zUmVjZWl2ZXIoKTsKLQotICBjbGFzcyBT
bXNQcm92aWRlckNocm9taXVtIHsKLSAgICBjb25zdHJ1Y3RvcigpIHsKLSAgICAgIE9iamVjdC5m
cmVlemUodGhpcyk7IC8vIE1ha2UgaXQgaW1tdXRhYmxlLgotICAgIH0KLQotICAgIHB1c2hSZXR1
cm5WYWx1ZXNGb3JUZXN0aW5nKGNhbGxOYW1lLCBjYWxsYmFjaykgewotICAgICAgbW9ja1Ntc1Jl
Y2VpdmVyLnB1c2hSZXR1cm5WYWx1ZXNGb3JUZXN0aW5nKGNhbGxOYW1lLCBjYWxsYmFjayk7Ci0g
ICAgfQotICB9Ci0KLSAgcmV0dXJuIFNtc1Byb3ZpZGVyQ2hyb21pdW07Ci19KSgpOwpkaWZmIC0t
Z2l0IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJj
ZXMvY2hyb21pdW0vbW9qb19iaW5kaW5ncy5qcyBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93
ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL21vam9fYmluZGluZ3MuanMKZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDcwZjZjYWQ1ZTVmMDZmNGY2NGEwZmQ0Y2RjZDY5
M2ZjZWExMmJiNzguLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0t
IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMv
Y2hyb21pdW0vbW9qb19iaW5kaW5ncy5qcworKysgL2Rldi9udWxsCkBAIC0xLDUxNDYgKzAsMCBA
QAotLy8gQ29weXJpZ2h0IDIwMTcgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1z
dHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgot
Ci0ndXNlIHN0cmljdCc7Ci0KLWlmICgodHlwZW9mIG1vam8gIT09ICd1bmRlZmluZWQnKSAmJiBt
b2pvLmJpbmRpbmdzTGlicmFyeUluaXRpYWxpemVkKSB7Ci0gIHRocm93IG5ldyBFcnJvcignVGhl
IE1vam8gYmluZGluZ3MgbGlicmFyeSBoYXMgYmVlbiBpbml0aWFsaXplZC4nKTsKLX0KLQotdmFy
IG1vam8gPSBtb2pvIHx8IHt9OwotbW9qby5iaW5kaW5nc0xpYnJhcnlJbml0aWFsaXplZCA9IHRy
dWU7Ci0KLW1vam8uaW50ZXJuYWwgPSBtb2pvLmludGVybmFsIHx8IHt9OwotCi1tb2pvLmNvbmZp
ZyA9IG1vam8uY29uZmlnIHx8IHt9OwotaWYgKHR5cGVvZiBtb2pvLmNvbmZpZy5nbG9iYWwgPT09
ICd1bmRlZmluZWQnKSB7Ci0gIG1vam8uY29uZmlnLmdsb2JhbCA9IHRoaXM7Ci19Ci0KLWlmICh0
eXBlb2YgbW9qby5jb25maWcuYXV0b0xvYWRNb2pvbURlcHMgPT09ICd1bmRlZmluZWQnKSB7Ci0g
IC8vIFdoZXRoZXIgdG8gYXV0b21hdGljYWxseSBsb2FkIG1vam9tIGRlcGVuZGVuY2llcy4KLSAg
Ly8gRm9yIGV4YW1wbGUsIGlmIGZvby5tb2pvbSBpbXBvcnRzIGJhci5tb2pvbSwgfGF1dG9Mb2Fk
TW9qb21EZXBzfCBzZXQgdG8KLSAgLy8gdHJ1ZSBtZWFucyB0aGF0IGxvYWRpbmcgZm9vLm1vam9t
LmpzIHdpbGwgaW5zZXJ0IGEgPHNjcmlwdD4gdGFnIHRvIGxvYWQKLSAgLy8gYmFyLm1vam9tLmpz
LCBpZiBpdCBoYXNuJ3QgYmVlbiBsb2FkZWQuCi0gIC8vCi0gIC8vIFRoZSBVUkwgb2YgYmFyLm1v
am9tLmpzIGlzIGRldGVybWluZWQgYnkgdGhlIHJlbGF0aXZlIHBhdGggb2YgYmFyLm1vam9tCi0g
IC8vIChyZWxhdGl2ZSB0byB0aGUgcG9zaXRpb24gb2YgZm9vLm1vam9tIGF0IGJ1aWxkIHRpbWUp
IGFuZCB0aGUgVVJMIG9mCi0gIC8vIGZvby5tb2pvbS5qcy4gRm9yIGV4bXBsZSwgaWYgYXQgYnVp
bGQgdGltZSB0aGUgdHdvIG1vam9tIGZpbGVzIGFyZQotICAvLyBsb2NhdGVkIGF0OgotICAvLyAg
IGEvYi9jL2Zvby5tb2pvbQotICAvLyAgIGEvYi9kL2Jhci5tb2pvbQotICAvLyBhbmQgdGhlIFVS
TCBvZiBmb28ubW9qb20uanMgaXM6Ci0gIC8vICAgaHR0cDovL2V4YW1wbGUub3JnL3NjcmlwdHMv
Yi9jL2Zvby5tb2pvbS5qcwotICAvLyB0aGVuIHRoZSBVUkwgb2YgYmFyLm1vam9tLmpzIHdpbGwg
YmU6Ci0gIC8vICAgaHR0cDovL2V4YW1wbGUub3JnL3NjcmlwdHMvYi9kL2Jhci5tb2pvbS5qcwot
ICAvLwotICAvLyBJZiB5b3Ugd291bGQgbGlrZSBiYXIubW9qb20uanMgdG8gbGl2ZSBhdCBhIGRp
ZmZlcmVudCBsb2NhdGlvbiwgeW91IG5lZWQKLSAgLy8gdG8gdHVybiBvZmYgfGF1dG9Mb2FkTW9q
b21EZXBzfCBiZWZvcmUgbG9hZGluZyBmb28ubW9qb20uanMsIGFuZCBtYW51YWxseQotICAvLyBs
b2FkIGJhci5tb2pvbS5qcyB5b3Vyc2VsZi4gU2ltaWxhcmx5LCB5b3UgbmVlZCB0byB0dXJuIG9m
ZiB0aGUgb3B0aW9uIGlmCi0gIC8vIHlvdSBtZXJnZSBiYXIubW9qb20uanMgYW5kIGZvby5tb2pv
bS5qcyBpbnRvIGEgc2luZ2xlIGZpbGUuCi0gIC8vCi0gIC8vIFBlcmZvcm1hbmNlIHRpcDogQXZv
aWQgbG9hZGluZyB0aGUgc2FtZSBtb2pvbS5qcyBmaWxlIG11bHRpcGxlIHRpbWVzLgotICAvLyBB
c3N1bWUgdGhhdCB8YXV0b0xvYWRNb2pvbURlcHN8IGlzIHNldCB0byB0cnVlLAotICAvLwotICAv
LyA8IS0tCi0gIC8vIChUaGlzIGNvbW1lbnQgdGFnIGlzIG5lY2Vzc2FyeSBvbiBJT1MgdG8gYXZv
aWQgaW50ZXJwcmV0aW5nIHRoZSBjbG9zaW5nCi0gIC8vIHNjcmlwdCB0YWdzIGluIHRoZSBleGFt
cGxlLikKLSAgLy8KLSAgLy8gTm8gZHVwbGljYXRlIGxvYWRpbmc7IHJlY29tbWVuZGVkOgotICAv
LyA8c2NyaXB0IHNyYz0iaHR0cDovL2V4YW1wbGUub3JnL3NjcmlwdHMvYi9jL2Zvby5tb2pvbS5q
cyI+PC9zY3JpcHQ+Ci0gIC8vCi0gIC8vIE5vIGR1cGxpY2F0ZSBsb2FkaW5nLCBhbHRob3VnaCB1
bm5lY2Vzc2FyeToKLSAgLy8gPHNjcmlwdCBzcmM9Imh0dHA6Ly9leGFtcGxlLm9yZy9zY3JpcHRz
L2IvZC9iYXIubW9qb20uanMiPjwvc2NyaXB0PgotICAvLyA8c2NyaXB0IHNyYz0iaHR0cDovL2V4
YW1wbGUub3JnL3NjcmlwdHMvYi9jL2Zvby5tb2pvbS5qcyI+PC9zY3JpcHQ+Ci0gIC8vCi0gIC8v
IExvYWQgYmFyLm1vam9tLmpzIHR3aWNlOyBzaG91bGQgYmUgYXZvaWRlZDoKLSAgLy8gPHNjcmlw
dCBzcmM9Imh0dHA6Ly9leGFtcGxlLm9yZy9zY3JpcHRzL2IvYy9mb28ubW9qb20uanMiPjwvc2Ny
aXB0PgotICAvLyA8c2NyaXB0IHNyYz0iaHR0cDovL2V4YW1wbGUub3JnL3NjcmlwdHMvYi9kL2Jh
ci5tb2pvbS5qcyI+PC9zY3JpcHQ+Ci0gIC8vCi0gIC8vIC0tPgotICBtb2pvLmNvbmZpZy5hdXRv
TG9hZE1vam9tRGVwcyA9IHRydWU7Ci19Ci0KLShmdW5jdGlvbigpIHsKLSAgdmFyIGludGVybmFs
ID0gbW9qby5pbnRlcm5hbDsKLSAgdmFyIGNvbmZpZyA9IG1vam8uY29uZmlnOwotCi0gIHZhciBM
b2FkU3RhdGUgPSB7Ci0gICAgUEVORElOR19MT0FEOiAxLAotICAgIExPQURFRDogMgotICB9Owot
Ci0gIHZhciBtb2pvbVJlZ2lzdHJ5ID0gbmV3IE1hcCgpOwotCi0gIGZ1bmN0aW9uIGV4cG9zZU5h
bWVzcGFjZShuYW1lc3BhY2UpIHsKLSAgICB2YXIgY3VycmVudCA9IGNvbmZpZy5nbG9iYWw7Ci0g
ICAgdmFyIHBhcnRzID0gbmFtZXNwYWNlLnNwbGl0KCcuJyk7Ci0KLSAgICBmb3IgKHZhciBwYXJ0
OyBwYXJ0cy5sZW5ndGggJiYgKHBhcnQgPSBwYXJ0cy5zaGlmdCgpKTspIHsKLSAgICAgIGlmICgh
Y3VycmVudFtwYXJ0XSkgewotICAgICAgICBjdXJyZW50W3BhcnRdID0ge307Ci0gICAgICB9Ci0g
ICAgICBjdXJyZW50ID0gY3VycmVudFtwYXJ0XTsKLSAgICB9Ci0KLSAgICByZXR1cm4gY3VycmVu
dDsKLSAgfQotCi0gIGZ1bmN0aW9uIGlzTW9qb21QZW5kaW5nTG9hZChpZCkgewotICAgIHJldHVy
biBtb2pvbVJlZ2lzdHJ5LmdldChpZCkgPT09IExvYWRTdGF0ZS5QRU5ESU5HX0xPQUQ7Ci0gIH0K
LQotICBmdW5jdGlvbiBpc01vam9tTG9hZGVkKGlkKSB7Ci0gICAgcmV0dXJuIG1vam9tUmVnaXN0
cnkuZ2V0KGlkKSA9PT0gTG9hZFN0YXRlLkxPQURFRDsKLSAgfQotCi0gIGZ1bmN0aW9uIG1hcmtN
b2pvbVBlbmRpbmdMb2FkKGlkKSB7Ci0gICAgaWYgKGlzTW9qb21Mb2FkZWQoaWQpKSB7Ci0gICAg
ICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBmb2xsb3dpbmcgbW9qb20gZmlsZSBoYXMgYmVlbiBsb2Fk
ZWQ6ICcgKyBpZCk7Ci0gICAgfQotCi0gICAgbW9qb21SZWdpc3RyeS5zZXQoaWQsIExvYWRTdGF0
ZS5QRU5ESU5HX0xPQUQpOwotICB9Ci0KLSAgZnVuY3Rpb24gbWFya01vam9tTG9hZGVkKGlkKSB7
Ci0gICAgbW9qb21SZWdpc3RyeS5zZXQoaWQsIExvYWRTdGF0ZS5MT0FERUQpOwotICB9Ci0KLSAg
ZnVuY3Rpb24gbG9hZE1vam9tSWZOZWNlc3NhcnkoaWQsIHJlbGF0aXZlUGF0aCkgewotICAgIGlm
IChtb2pvbVJlZ2lzdHJ5LmhhcyhpZCkpIHsKLSAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBp
ZiAoY29uZmlnLmdsb2JhbC5kb2N1bWVudCA9PT0gdW5kZWZpbmVkKSB7Ci0gICAgICB0aHJvdyBu
ZXcgRXJyb3IoCi0gICAgICAgICAgJ01vam9tIGRlcGVuZGVuY3kgYXV0b2xvYWRpbmcgaXMgbm90
IGltcGxlbWVudGVkIGluIHdvcmtlcnMuICcgKwotICAgICAgICAgICdQbGVhc2Ugc2VlIGNvbmZp
ZyB2YXJpYWJsZSBtb2pvLmNvbmZpZy5hdXRvTG9hZE1vam9tRGVwcyBmb3IgbW9yZSAnICsKLSAg
ICAgICAgICAnZGV0YWlscy4nKTsKLSAgICB9Ci0KLSAgICBtYXJrTW9qb21QZW5kaW5nTG9hZChp
ZCk7Ci0gICAgdmFyIHVybCA9IG5ldyBVUkwocmVsYXRpdmVQYXRoLCBkb2N1bWVudC5jdXJyZW50
U2NyaXB0LnNyYykuaHJlZjsKLSAgICBjb25maWcuZ2xvYmFsLmRvY3VtZW50LndyaXRlKCc8c2Ny
aXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSInICsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHVybCArICciPjwnICsgJy9zY3JpcHQ+Jyk7Ci0gIH0KLQotICBpbnRlcm5h
bC5leHBvc2VOYW1lc3BhY2UgPSBleHBvc2VOYW1lc3BhY2U7Ci0gIGludGVybmFsLmlzTW9qb21Q
ZW5kaW5nTG9hZCA9IGlzTW9qb21QZW5kaW5nTG9hZDsKLSAgaW50ZXJuYWwuaXNNb2pvbUxvYWRl
ZCA9IGlzTW9qb21Mb2FkZWQ7Ci0gIGludGVybmFsLm1hcmtNb2pvbVBlbmRpbmdMb2FkID0gbWFy
a01vam9tUGVuZGluZ0xvYWQ7Ci0gIGludGVybmFsLm1hcmtNb2pvbUxvYWRlZCA9IG1hcmtNb2pv
bUxvYWRlZDsKLSAgaW50ZXJuYWwubG9hZE1vam9tSWZOZWNlc3NhcnkgPSBsb2FkTW9qb21JZk5l
Y2Vzc2FyeTsKLX0pKCk7Ci0vLyBDb3B5cmlnaHQgMjAxNyBUaGUgQ2hyb21pdW0gQXV0aG9ycy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVy
bmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBM
SUNFTlNFIGZpbGUuCi0KLShmdW5jdGlvbigpIHsKLSAgdmFyIGludGVybmFsID0gbW9qby5pbnRl
cm5hbDsKLQotICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotICAvLyB8b3V0cHV0fCBjb3VsZCBi
ZSBhbiBpbnRlcmZhY2UgcG9pbnRlciwgSW50ZXJmYWNlUHRySW5mbyBvcgotICAvLyBBc3NvY2lh
dGVkSW50ZXJmYWNlUHRySW5mby4KLSAgZnVuY3Rpb24gbWFrZVJlcXVlc3Qob3V0cHV0KSB7Ci0g
ICAgaWYgKG91dHB1dCBpbnN0YW5jZW9mIG1vam8uQXNzb2NpYXRlZEludGVyZmFjZVB0ckluZm8p
IHsKLSAgICAgIHZhciB7aGFuZGxlMCwgaGFuZGxlMX0gPSBpbnRlcm5hbC5jcmVhdGVQYWlyUGVu
ZGluZ0Fzc29jaWF0aW9uKCk7Ci0gICAgICBvdXRwdXQuaW50ZXJmYWNlRW5kcG9pbnRIYW5kbGUg
PSBoYW5kbGUwOwotICAgICAgb3V0cHV0LnZlcnNpb24gPSAwOwotCi0gICAgICByZXR1cm4gbmV3
IG1vam8uQXNzb2NpYXRlZEludGVyZmFjZVJlcXVlc3QoaGFuZGxlMSk7Ci0gICAgfQotCi0gICAg
aWYgKG91dHB1dCBpbnN0YW5jZW9mIG1vam8uSW50ZXJmYWNlUHRySW5mbykgewotICAgICAgdmFy
IHBpcGUgPSBNb2pvLmNyZWF0ZU1lc3NhZ2VQaXBlKCk7Ci0gICAgICBvdXRwdXQuaGFuZGxlID0g
cGlwZS5oYW5kbGUwOwotICAgICAgb3V0cHV0LnZlcnNpb24gPSAwOwotCi0gICAgICByZXR1cm4g
bmV3IG1vam8uSW50ZXJmYWNlUmVxdWVzdChwaXBlLmhhbmRsZTEpOwotICAgIH0KLQotICAgIHZh
ciBwaXBlID0gTW9qby5jcmVhdGVNZXNzYWdlUGlwZSgpOwotICAgIG91dHB1dC5wdHIuYmluZChu
ZXcgbW9qby5JbnRlcmZhY2VQdHJJbmZvKHBpcGUuaGFuZGxlMCwgMCkpOwotICAgIHJldHVybiBu
ZXcgbW9qby5JbnRlcmZhY2VSZXF1ZXN0KHBpcGUuaGFuZGxlMSk7Ci0gIH0KLQotICAvLyAtLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0KLQotICAvLyBPcGVyYXRpb25zIHVzZWQgdG8gc2V0dXAvY29uZmlndXJl
IGFuIGludGVyZmFjZSBwb2ludGVyLiBFeHBvc2VkIGFzIHRoZQotICAvLyB8cHRyfCBmaWVsZCBv
ZiBnZW5lcmF0ZWQgaW50ZXJmYWNlIHBvaW50ZXIgY2xhc3Nlcy4KLSAgLy8gfHB0ckluZm9Pckhh
bmRsZXwgY291bGQgYmUgb21pdHRlZCBhbmQgcGFzc2VkIGludG8gYmluZCgpIGxhdGVyLgotICBm
dW5jdGlvbiBJbnRlcmZhY2VQdHJDb250cm9sbGVyKGludGVyZmFjZVR5cGUsIHB0ckluZm9Pckhh
bmRsZSkgewotICAgIHRoaXMudmVyc2lvbiA9IDA7Ci0KLSAgICB0aGlzLmludGVyZmFjZVR5cGVf
ID0gaW50ZXJmYWNlVHlwZTsKLSAgICB0aGlzLnJvdXRlcl8gPSBudWxsOwotICAgIHRoaXMuaW50
ZXJmYWNlRW5kcG9pbnRDbGllbnRfID0gbnVsbDsKLSAgICB0aGlzLnByb3h5XyA9IG51bGw7Ci0K
LSAgICAvLyB8cm91dGVyX3wgYW5kIHxpbnRlcmZhY2VFbmRwb2ludENsaWVudF98IGFyZSBsYXpp
bHkgaW5pdGlhbGl6ZWQuCi0gICAgLy8gfGhhbmRsZV98IGlzIHZhbGlkIGJldHdlZW4gYmluZCgp
IGFuZAotICAgIC8vIHRoZSBpbml0aWFsaXphdGlvbiBvZiB8cm91dGVyX3wgYW5kIHxpbnRlcmZh
Y2VFbmRwb2ludENsaWVudF98LgotICAgIHRoaXMuaGFuZGxlXyA9IG51bGw7Ci0KLSAgICBpZiAo
cHRySW5mb09ySGFuZGxlKQotICAgICAgdGhpcy5iaW5kKHB0ckluZm9PckhhbmRsZSk7Ci0gIH0K
LQotICBJbnRlcmZhY2VQdHJDb250cm9sbGVyLnByb3RvdHlwZS5iaW5kID0gZnVuY3Rpb24ocHRy
SW5mb09ySGFuZGxlKSB7Ci0gICAgdGhpcy5yZXNldCgpOwotCi0gICAgaWYgKHB0ckluZm9Pckhh
bmRsZSBpbnN0YW5jZW9mIG1vam8uSW50ZXJmYWNlUHRySW5mbykgewotICAgICAgdGhpcy52ZXJz
aW9uID0gcHRySW5mb09ySGFuZGxlLnZlcnNpb247Ci0gICAgICB0aGlzLmhhbmRsZV8gPSBwdHJJ
bmZvT3JIYW5kbGUuaGFuZGxlOwotICAgIH0gZWxzZSB7Ci0gICAgICB0aGlzLmhhbmRsZV8gPSBw
dHJJbmZvT3JIYW5kbGU7Ci0gICAgfQotICB9OwotCi0gIEludGVyZmFjZVB0ckNvbnRyb2xsZXIu
cHJvdG90eXBlLmlzQm91bmQgPSBmdW5jdGlvbigpIHsKLSAgICByZXR1cm4gdGhpcy5pbnRlcmZh
Y2VFbmRwb2ludENsaWVudF8gIT09IG51bGwgfHwgdGhpcy5oYW5kbGVfICE9PSBudWxsOwotICB9
OwotCi0gIC8vIEFsdGhvdWdoIHVzZXJzIGNvdWxkIGp1c3QgZGlzY2FyZCB0aGUgb2JqZWN0LCBy
ZXNldCgpIGNsb3NlcyB0aGUgcGlwZQotICAvLyBpbW1lZGlhdGVseS4KLSAgSW50ZXJmYWNlUHRy
Q29udHJvbGxlci5wcm90b3R5cGUucmVzZXQgPSBmdW5jdGlvbigpIHsKLSAgICB0aGlzLnZlcnNp
b24gPSAwOwotICAgIGlmICh0aGlzLmludGVyZmFjZUVuZHBvaW50Q2xpZW50XykgewotICAgICAg
dGhpcy5pbnRlcmZhY2VFbmRwb2ludENsaWVudF8uY2xvc2UoKTsKLSAgICAgIHRoaXMuaW50ZXJm
YWNlRW5kcG9pbnRDbGllbnRfID0gbnVsbDsKLSAgICB9Ci0gICAgaWYgKHRoaXMucm91dGVyXykg
ewotICAgICAgdGhpcy5yb3V0ZXJfLmNsb3NlKCk7Ci0gICAgICB0aGlzLnJvdXRlcl8gPSBudWxs
OwotCi0gICAgICB0aGlzLnByb3h5XyA9IG51bGw7Ci0gICAgfQotICAgIGlmICh0aGlzLmhhbmRs
ZV8pIHsKLSAgICAgIHRoaXMuaGFuZGxlXy5jbG9zZSgpOwotICAgICAgdGhpcy5oYW5kbGVfID0g
bnVsbDsKLSAgICB9Ci0gIH07Ci0KLSAgSW50ZXJmYWNlUHRyQ29udHJvbGxlci5wcm90b3R5cGUu
cmVzZXRXaXRoUmVhc29uID0gZnVuY3Rpb24ocmVhc29uKSB7Ci0gICAgaWYgKHRoaXMuaXNCb3Vu
ZCgpKSB7Ci0gICAgICB0aGlzLmNvbmZpZ3VyZVByb3h5SWZOZWNlc3NhcnlfKCk7Ci0gICAgICB0
aGlzLmludGVyZmFjZUVuZHBvaW50Q2xpZW50Xy5jbG9zZShyZWFzb24pOwotICAgICAgdGhpcy5p
bnRlcmZhY2VFbmRwb2ludENsaWVudF8gPSBudWxsOwotICAgIH0KLSAgICB0aGlzLnJlc2V0KCk7
Ci0gIH07Ci0KLSAgSW50ZXJmYWNlUHRyQ29udHJvbGxlci5wcm90b3R5cGUuc2V0Q29ubmVjdGlv
bkVycm9ySGFuZGxlciA9IGZ1bmN0aW9uKAotICAgICAgY2FsbGJhY2spIHsKLSAgICBpZiAoIXRo
aXMuaXNCb3VuZCgpKQotICAgICAgdGhyb3cgbmV3IEVycm9yKCJDYW5ub3Qgc2V0IGNvbm5lY3Rp
b24gZXJyb3IgaGFuZGxlciBpZiBub3QgYm91bmQuIik7Ci0KLSAgICB0aGlzLmNvbmZpZ3VyZVBy
b3h5SWZOZWNlc3NhcnlfKCk7Ci0gICAgdGhpcy5pbnRlcmZhY2VFbmRwb2ludENsaWVudF8uc2V0
Q29ubmVjdGlvbkVycm9ySGFuZGxlcihjYWxsYmFjayk7Ci0gIH07Ci0KLSAgSW50ZXJmYWNlUHRy
Q29udHJvbGxlci5wcm90b3R5cGUucGFzc0ludGVyZmFjZSA9IGZ1bmN0aW9uKCkgewotICAgIHZh
ciByZXN1bHQ7Ci0gICAgaWYgKHRoaXMucm91dGVyXykgewotICAgICAgLy8gVE9ETyh5enNoZW4p
OiBGaXggUm91dGVyIGludGVyZmFjZSB0byBzdXBwb3J0IGV4dHJhY3RpbmcgaGFuZGxlLgotICAg
ICAgcmVzdWx0ID0gbmV3IG1vam8uSW50ZXJmYWNlUHRySW5mbygKLSAgICAgICAgICB0aGlzLnJv
dXRlcl8uY29ubmVjdG9yXy5oYW5kbGVfLCB0aGlzLnZlcnNpb24pOwotICAgICAgdGhpcy5yb3V0
ZXJfLmNvbm5lY3Rvcl8uaGFuZGxlXyA9IG51bGw7Ci0gICAgfSBlbHNlIHsKLSAgICAgIC8vIFRo
aXMgYWxzbyBoYW5kbGVzIHRoZSBjYXNlIHdoZW4gdGhpcyBvYmplY3QgaXMgbm90IGJvdW5kLgot
ICAgICAgcmVzdWx0ID0gbmV3IG1vam8uSW50ZXJmYWNlUHRySW5mbyh0aGlzLmhhbmRsZV8sIHRo
aXMudmVyc2lvbik7Ci0gICAgICB0aGlzLmhhbmRsZV8gPSBudWxsOwotICAgIH0KLQotICAgIHRo
aXMucmVzZXQoKTsKLSAgICByZXR1cm4gcmVzdWx0OwotICB9OwotCi0gIEludGVyZmFjZVB0ckNv
bnRyb2xsZXIucHJvdG90eXBlLmdldFByb3h5ID0gZnVuY3Rpb24oKSB7Ci0gICAgdGhpcy5jb25m
aWd1cmVQcm94eUlmTmVjZXNzYXJ5XygpOwotICAgIHJldHVybiB0aGlzLnByb3h5XzsKLSAgfTsK
LQotICBJbnRlcmZhY2VQdHJDb250cm9sbGVyLnByb3RvdHlwZS5jb25maWd1cmVQcm94eUlmTmVj
ZXNzYXJ5XyA9IGZ1bmN0aW9uKCkgewotICAgIGlmICghdGhpcy5oYW5kbGVfKQotICAgICAgcmV0
dXJuOwotCi0gICAgdGhpcy5yb3V0ZXJfID0gbmV3IGludGVybmFsLlJvdXRlcih0aGlzLmhhbmRs
ZV8sIHRydWUpOwotICAgIHRoaXMuaGFuZGxlXyA9IG51bGw7Ci0KLSAgICB0aGlzLmludGVyZmFj
ZUVuZHBvaW50Q2xpZW50XyA9IG5ldyBpbnRlcm5hbC5JbnRlcmZhY2VFbmRwb2ludENsaWVudCgK
LSAgICAgICAgdGhpcy5yb3V0ZXJfLmNyZWF0ZUxvY2FsRW5kcG9pbnRIYW5kbGUoaW50ZXJuYWwu
a01hc3RlckludGVyZmFjZUlkKSk7Ci0KLSAgICB0aGlzLmludGVyZmFjZUVuZHBvaW50Q2xpZW50
XyAuc2V0UGF5bG9hZFZhbGlkYXRvcnMoWwotICAgICAgICB0aGlzLmludGVyZmFjZVR5cGVfLnZh
bGlkYXRlUmVzcG9uc2VdKTsKLSAgICB0aGlzLnByb3h5XyA9IG5ldyB0aGlzLmludGVyZmFjZVR5
cGVfLnByb3h5Q2xhc3MoCi0gICAgICAgIHRoaXMuaW50ZXJmYWNlRW5kcG9pbnRDbGllbnRfKTsK
LSAgfTsKLQotICBJbnRlcmZhY2VQdHJDb250cm9sbGVyLnByb3RvdHlwZS5xdWVyeVZlcnNpb24g
PSBmdW5jdGlvbigpIHsKLSAgICBmdW5jdGlvbiBvblF1ZXJ5VmVyc2lvbih2ZXJzaW9uKSB7Ci0g
ICAgICB0aGlzLnZlcnNpb24gPSB2ZXJzaW9uOwotICAgICAgcmV0dXJuIHZlcnNpb247Ci0gICAg
fQotCi0gICAgdGhpcy5jb25maWd1cmVQcm94eUlmTmVjZXNzYXJ5XygpOwotICAgIHJldHVybiB0
aGlzLmludGVyZmFjZUVuZHBvaW50Q2xpZW50Xy5xdWVyeVZlcnNpb24oKS50aGVuKAotICAgICAg
b25RdWVyeVZlcnNpb24uYmluZCh0aGlzKSk7Ci0gIH07Ci0KLSAgSW50ZXJmYWNlUHRyQ29udHJv
bGxlci5wcm90b3R5cGUucmVxdWlyZVZlcnNpb24gPSBmdW5jdGlvbih2ZXJzaW9uKSB7Ci0gICAg
dGhpcy5jb25maWd1cmVQcm94eUlmTmVjZXNzYXJ5XygpOwotCi0gICAgaWYgKHRoaXMudmVyc2lv
biA+PSB2ZXJzaW9uKSB7Ci0gICAgICByZXR1cm47Ci0gICAgfQotICAgIHRoaXMudmVyc2lvbiA9
IHZlcnNpb247Ci0gICAgdGhpcy5pbnRlcmZhY2VFbmRwb2ludENsaWVudF8ucmVxdWlyZVZlcnNp
b24odmVyc2lvbik7Ci0gIH07Ci0KLSAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLSAgLy8gfHJl
cXVlc3R8IGNvdWxkIGJlIG9taXR0ZWQgYW5kIHBhc3NlZCBpbnRvIGJpbmQoKSBsYXRlci4KLSAg
Ly8KLSAgLy8gRXhhbXBsZToKLSAgLy8KLSAgLy8gICAgLy8gRm9vSW1wbCBpbXBsZW1lbnRzIG1v
am9tLkZvby4KLSAgLy8gICAgZnVuY3Rpb24gRm9vSW1wbCgpIHsgLi4uIH0KLSAgLy8gICAgRm9v
SW1wbC5wcm90b3R5cGUuZm9vTWV0aG9kMSA9IGZ1bmN0aW9uKCkgeyAuLi4gfQotICAvLyAgICBG
b29JbXBsLnByb3RvdHlwZS5mb29NZXRob2QyID0gZnVuY3Rpb24oKSB7IC4uLiB9Ci0gIC8vCi0g
IC8vICAgIHZhciBmb29QdHIgPSBuZXcgbW9qb20uRm9vUHRyKCk7Ci0gIC8vICAgIHZhciByZXF1
ZXN0ID0gbWFrZVJlcXVlc3QoZm9vUHRyKTsKLSAgLy8gICAgdmFyIGJpbmRpbmcgPSBuZXcgQmlu
ZGluZyhtb2pvbS5Gb28sIG5ldyBGb29JbXBsKCksIHJlcXVlc3QpOwotICAvLyAgICBmb29QdHIu
Zm9vTWV0aG9kMSgpOwotICBmdW5jdGlvbiBCaW5kaW5nKGludGVyZmFjZVR5cGUsIGltcGwsIHJl
cXVlc3RPckhhbmRsZSkgewotICAgIHRoaXMuaW50ZXJmYWNlVHlwZV8gPSBpbnRlcmZhY2VUeXBl
OwotICAgIHRoaXMuaW1wbF8gPSBpbXBsOwotICAgIHRoaXMucm91dGVyXyA9IG51bGw7Ci0gICAg
dGhpcy5pbnRlcmZhY2VFbmRwb2ludENsaWVudF8gPSBudWxsOwotICAgIHRoaXMuc3R1Yl8gPSBu
dWxsOwotCi0gICAgaWYgKHJlcXVlc3RPckhhbmRsZSkKLSAgICAgIHRoaXMuYmluZChyZXF1ZXN0
T3JIYW5kbGUpOwotICB9Ci0KLSAgQmluZGluZy5wcm90b3R5cGUuaXNCb3VuZCA9IGZ1bmN0aW9u
KCkgewotICAgIHJldHVybiB0aGlzLnJvdXRlcl8gIT09IG51bGw7Ci0gIH07Ci0KLSAgQmluZGlu
Zy5wcm90b3R5cGUuY3JlYXRlSW50ZXJmYWNlUHRyQW5kQmluZCA9IGZ1bmN0aW9uKCkgewotICAg
IHZhciBwdHIgPSBuZXcgdGhpcy5pbnRlcmZhY2VUeXBlXy5wdHJDbGFzcygpOwotICAgIC8vIFRP
RE8oeXpzaGVuKTogU2V0IHRoZSB2ZXJzaW9uIG9mIHRoZSBpbnRlcmZhY2UgcG9pbnRlci4KLSAg
ICB0aGlzLmJpbmQobWFrZVJlcXVlc3QocHRyKSk7Ci0gICAgcmV0dXJuIHB0cjsKLSAgfTsKLQot
ICBCaW5kaW5nLnByb3RvdHlwZS5iaW5kID0gZnVuY3Rpb24ocmVxdWVzdE9ySGFuZGxlKSB7Ci0g
ICAgdGhpcy5jbG9zZSgpOwotCi0gICAgdmFyIGhhbmRsZSA9IHJlcXVlc3RPckhhbmRsZSBpbnN0
YW5jZW9mIG1vam8uSW50ZXJmYWNlUmVxdWVzdCA/Ci0gICAgICAgIHJlcXVlc3RPckhhbmRsZS5o
YW5kbGUgOiByZXF1ZXN0T3JIYW5kbGU7Ci0gICAgaWYgKCEoaGFuZGxlIGluc3RhbmNlb2YgTW9q
b0hhbmRsZSkpCi0gICAgICByZXR1cm47Ci0KLSAgICB0aGlzLnJvdXRlcl8gPSBuZXcgaW50ZXJu
YWwuUm91dGVyKGhhbmRsZSk7Ci0KLSAgICB0aGlzLnN0dWJfID0gbmV3IHRoaXMuaW50ZXJmYWNl
VHlwZV8uc3R1YkNsYXNzKHRoaXMuaW1wbF8pOwotICAgIHRoaXMuaW50ZXJmYWNlRW5kcG9pbnRD
bGllbnRfID0gbmV3IGludGVybmFsLkludGVyZmFjZUVuZHBvaW50Q2xpZW50KAotICAgICAgICB0
aGlzLnJvdXRlcl8uY3JlYXRlTG9jYWxFbmRwb2ludEhhbmRsZShpbnRlcm5hbC5rTWFzdGVySW50
ZXJmYWNlSWQpLAotICAgICAgICB0aGlzLnN0dWJfLCB0aGlzLmludGVyZmFjZVR5cGVfLmtWZXJz
aW9uKTsKLQotICAgIHRoaXMuaW50ZXJmYWNlRW5kcG9pbnRDbGllbnRfIC5zZXRQYXlsb2FkVmFs
aWRhdG9ycyhbCi0gICAgICAgIHRoaXMuaW50ZXJmYWNlVHlwZV8udmFsaWRhdGVSZXF1ZXN0XSk7
Ci0gIH07Ci0KLSAgQmluZGluZy5wcm90b3R5cGUuY2xvc2UgPSBmdW5jdGlvbigpIHsKLSAgICBp
ZiAoIXRoaXMuaXNCb3VuZCgpKQotICAgICAgcmV0dXJuOwotCi0gICAgaWYgKHRoaXMuaW50ZXJm
YWNlRW5kcG9pbnRDbGllbnRfKSB7Ci0gICAgICB0aGlzLmludGVyZmFjZUVuZHBvaW50Q2xpZW50
Xy5jbG9zZSgpOwotICAgICAgdGhpcy5pbnRlcmZhY2VFbmRwb2ludENsaWVudF8gPSBudWxsOwot
ICAgIH0KLQotICAgIHRoaXMucm91dGVyXy5jbG9zZSgpOwotICAgIHRoaXMucm91dGVyXyA9IG51
bGw7Ci0gICAgdGhpcy5zdHViXyA9IG51bGw7Ci0gIH07Ci0KLSAgQmluZGluZy5wcm90b3R5cGUu
Y2xvc2VXaXRoUmVhc29uID0gZnVuY3Rpb24ocmVhc29uKSB7Ci0gICAgaWYgKHRoaXMuaW50ZXJm
YWNlRW5kcG9pbnRDbGllbnRfKSB7Ci0gICAgICB0aGlzLmludGVyZmFjZUVuZHBvaW50Q2xpZW50
Xy5jbG9zZShyZWFzb24pOwotICAgICAgdGhpcy5pbnRlcmZhY2VFbmRwb2ludENsaWVudF8gPSBu
dWxsOwotICAgIH0KLSAgICB0aGlzLmNsb3NlKCk7Ci0gIH07Ci0KLSAgQmluZGluZy5wcm90b3R5
cGUuc2V0Q29ubmVjdGlvbkVycm9ySGFuZGxlciA9IGZ1bmN0aW9uKGNhbGxiYWNrKSB7Ci0gICAg
aWYgKCF0aGlzLmlzQm91bmQoKSkgewotICAgICAgdGhyb3cgbmV3IEVycm9yKCJDYW5ub3Qgc2V0
IGNvbm5lY3Rpb24gZXJyb3IgaGFuZGxlciBpZiBub3QgYm91bmQuIik7Ci0gICAgfQotICAgIHRo
aXMuaW50ZXJmYWNlRW5kcG9pbnRDbGllbnRfLnNldENvbm5lY3Rpb25FcnJvckhhbmRsZXIoY2Fs
bGJhY2spOwotICB9OwotCi0gIEJpbmRpbmcucHJvdG90eXBlLnVuYmluZCA9IGZ1bmN0aW9uKCkg
ewotICAgIGlmICghdGhpcy5pc0JvdW5kKCkpCi0gICAgICByZXR1cm4gbmV3IG1vam8uSW50ZXJm
YWNlUmVxdWVzdChudWxsKTsKLQotICAgIHZhciByZXN1bHQgPSBuZXcgbW9qby5JbnRlcmZhY2VS
ZXF1ZXN0KHRoaXMucm91dGVyXy5jb25uZWN0b3JfLmhhbmRsZV8pOwotICAgIHRoaXMucm91dGVy
Xy5jb25uZWN0b3JfLmhhbmRsZV8gPSBudWxsOwotICAgIHRoaXMuY2xvc2UoKTsKLSAgICByZXR1
cm4gcmVzdWx0OwotICB9OwotCi0gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0gIGZ1bmN0aW9u
IEJpbmRpbmdTZXRFbnRyeShiaW5kaW5nU2V0LCBpbnRlcmZhY2VUeXBlLCBiaW5kaW5nVHlwZSwg
aW1wbCwKLSAgICAgIHJlcXVlc3RPckhhbmRsZSwgYmluZGluZ0lkKSB7Ci0gICAgdGhpcy5iaW5k
aW5nU2V0XyA9IGJpbmRpbmdTZXQ7Ci0gICAgdGhpcy5iaW5kaW5nSWRfID0gYmluZGluZ0lkOwot
ICAgIHRoaXMuYmluZGluZ18gPSBuZXcgYmluZGluZ1R5cGUoaW50ZXJmYWNlVHlwZSwgaW1wbCwK
LSAgICAgICAgcmVxdWVzdE9ySGFuZGxlKTsKLQotICAgIHRoaXMuYmluZGluZ18uc2V0Q29ubmVj
dGlvbkVycm9ySGFuZGxlcihmdW5jdGlvbihyZWFzb24pIHsKLSAgICAgIHRoaXMuYmluZGluZ1Nl
dF8ub25Db25uZWN0aW9uRXJyb3IoYmluZGluZ0lkLCByZWFzb24pOwotICAgIH0uYmluZCh0aGlz
KSk7Ci0gIH0KLQotICBCaW5kaW5nU2V0RW50cnkucHJvdG90eXBlLmNsb3NlID0gZnVuY3Rpb24o
KSB7Ci0gICAgdGhpcy5iaW5kaW5nXy5jbG9zZSgpOwotICB9OwotCi0gIGZ1bmN0aW9uIEJpbmRp
bmdTZXQoaW50ZXJmYWNlVHlwZSkgewotICAgIHRoaXMuaW50ZXJmYWNlVHlwZV8gPSBpbnRlcmZh
Y2VUeXBlOwotICAgIHRoaXMubmV4dEJpbmRpbmdJZF8gPSAwOwotICAgIHRoaXMuYmluZGluZ3Nf
ID0gbmV3IE1hcCgpOwotICAgIHRoaXMuZXJyb3JIYW5kbGVyXyA9IG51bGw7Ci0gICAgdGhpcy5i
aW5kaW5nVHlwZV8gPSBCaW5kaW5nOwotICB9Ci0KLSAgQmluZGluZ1NldC5wcm90b3R5cGUuaXNF
bXB0eSA9IGZ1bmN0aW9uKCkgewotICAgIHJldHVybiB0aGlzLmJpbmRpbmdzXy5zaXplID09IDA7
Ci0gIH07Ci0KLSAgQmluZGluZ1NldC5wcm90b3R5cGUuYWRkQmluZGluZyA9IGZ1bmN0aW9uKGlt
cGwsIHJlcXVlc3RPckhhbmRsZSkgewotICAgIHRoaXMuYmluZGluZ3NfLnNldCgKLSAgICAgICAg
dGhpcy5uZXh0QmluZGluZ0lkXywKLSAgICAgICAgbmV3IEJpbmRpbmdTZXRFbnRyeSh0aGlzLCB0
aGlzLmludGVyZmFjZVR5cGVfLCB0aGlzLmJpbmRpbmdUeXBlXywgaW1wbCwKLSAgICAgICAgICAg
IHJlcXVlc3RPckhhbmRsZSwgdGhpcy5uZXh0QmluZGluZ0lkXykpOwotICAgICsrdGhpcy5uZXh0
QmluZGluZ0lkXzsKLSAgfTsKLQotICBCaW5kaW5nU2V0LnByb3RvdHlwZS5jbG9zZUFsbEJpbmRp
bmdzID0gZnVuY3Rpb24oKSB7Ci0gICAgZm9yICh2YXIgZW50cnkgb2YgdGhpcy5iaW5kaW5nc18u
dmFsdWVzKCkpCi0gICAgICBlbnRyeS5jbG9zZSgpOwotICAgIHRoaXMuYmluZGluZ3NfLmNsZWFy
KCk7Ci0gIH07Ci0KLSAgQmluZGluZ1NldC5wcm90b3R5cGUuc2V0Q29ubmVjdGlvbkVycm9ySGFu
ZGxlciA9IGZ1bmN0aW9uKGNhbGxiYWNrKSB7Ci0gICAgdGhpcy5lcnJvckhhbmRsZXJfID0gY2Fs
bGJhY2s7Ci0gIH07Ci0KLSAgQmluZGluZ1NldC5wcm90b3R5cGUub25Db25uZWN0aW9uRXJyb3Ig
PSBmdW5jdGlvbihiaW5kaW5nSWQsIHJlYXNvbikgewotICAgIHRoaXMuYmluZGluZ3NfLmRlbGV0
ZShiaW5kaW5nSWQpOwotCi0gICAgaWYgKHRoaXMuZXJyb3JIYW5kbGVyXykKLSAgICAgIHRoaXMu
ZXJyb3JIYW5kbGVyXyhyZWFzb24pOwotICB9OwotCi0gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQot
Ci0gIC8vIE9wZXJhdGlvbnMgdXNlZCB0byBzZXR1cC9jb25maWd1cmUgYW4gYXNzb2NpYXRlZCBp
bnRlcmZhY2UgcG9pbnRlci4KLSAgLy8gRXhwb3NlZCBhcyB8cHRyfCBmaWVsZCBvZiBnZW5lcmF0
ZWQgYXNzb2NpYXRlZCBpbnRlcmZhY2UgcG9pbnRlciBjbGFzc2VzLgotICAvLyB8YXNzb2NpYXRl
ZFB0ckluZm98IGNvdWxkIGJlIG9taXR0ZWQgYW5kIHBhc3NlZCBpbnRvIGJpbmQoKSBsYXRlci4K
LSAgLy8KLSAgLy8gRXhhbXBsZToKLSAgLy8gICAgLy8gSW50ZWdlclNlbmRlckltcGwgaW1wbGVt
ZW50cyBtb2pvbS5JbnRlZ2VyU2VuZGVyCi0gIC8vICAgIGZ1bmN0aW9uIEludGVnZXJTZW5kZXJJ
bXBsKCkgeyAuLi4gfQotICAvLyAgICBJbnRlZ2VyU2VuZGVySW1wbC5wcm90b3R5cGUuZWNobyA9
IGZ1bmN0aW9uKCkgeyAuLi4gfQotICAvLwotICAvLyAgICAvLyBJbnRlZ2VyU2VuZGVyQ29ubmVj
dGlvbkltcGwgaW1wbGVtZW50cyBtb2pvbS5JbnRlZ2VyU2VuZGVyQ29ubmVjdGlvbgotICAvLyAg
ICBmdW5jdGlvbiBJbnRlZ2VyU2VuZGVyQ29ubmVjdGlvbkltcGwoKSB7Ci0gIC8vICAgICAgdGhp
cy5zZW5kZXJCaW5kaW5nXyA9IG51bGw7Ci0gIC8vICAgIH0KLSAgLy8gICAgSW50ZWdlclNlbmRl
ckNvbm5lY3Rpb25JbXBsLnByb3RvdHlwZS5nZXRTZW5kZXIgPSBmdW5jdGlvbigKLSAgLy8gICAg
ICAgIGFzc29jaWF0ZWRSZXF1ZXN0KSB7Ci0gIC8vICAgICAgdGhpcy5zZW5kZXJCaW5kaW5nXyA9
IG5ldyBBc3NvY2lhdGVkQmluZGluZyhtb2pvbS5JbnRlZ2VyU2VuZGVyLAotICAvLyAgICAgICAg
ICBuZXcgSW50ZWdlclNlbmRlckltcGwoKSwKLSAgLy8gICAgICAgICAgYXNzb2NpYXRlZFJlcXVl
c3QpOwotICAvLyAgICB9Ci0gIC8vCi0gIC8vICAgIHZhciBpbnRlZ2VyU2VuZGVyQ29ubmVjdGlv
biA9IG5ldyBtb2pvbS5JbnRlZ2VyU2VuZGVyQ29ubmVjdGlvblB0cigpOwotICAvLyAgICB2YXIg
aW50ZWdlclNlbmRlckNvbm5lY3Rpb25CaW5kaW5nID0gbmV3IEJpbmRpbmcoCi0gIC8vICAgICAg
ICBtb2pvbS5JbnRlZ2VyU2VuZGVyQ29ubmVjdGlvbiwKLSAgLy8gICAgICAgIG5ldyBJbnRlZ2Vy
U2VuZGVyQ29ubmVjdGlvbkltcGwoKSwKLSAgLy8gICAgICAgIG1vam8ubWFrZVJlcXVlc3QoaW50
ZWdlclNlbmRlckNvbm5lY3Rpb24pKTsKLSAgLy8KLSAgLy8gICAgLy8gQSBsb2NhbGx5LWNyZWF0
ZWQgYXNzb2NpYXRlZCBpbnRlcmZhY2UgcG9pbnRlciBjYW4gb25seSBiZSB1c2VkIHRvCi0gIC8v
ICAgIC8vIG1ha2UgY2FsbHMgd2hlbiB0aGUgY29ycmVzcG9uZGluZyBhc3NvY2lhdGVkIHJlcXVl
c3QgaXMgc2VudCBvdmVyCi0gIC8vICAgIC8vIGFub3RoZXIgaW50ZXJmYWNlIChlaXRoZXIgdGhl
IG1hc3RlciBpbnRlcmZhY2Ugb3IgYW5vdGhlcgotICAvLyAgICAvLyBhc3NvY2lhdGVkIGludGVy
ZmFjZSkuCi0gIC8vICAgIHZhciBhc3NvY2lhdGVkSW50ZXJmYWNlUHRySW5mbyA9IG5ldyBBc3Nv
Y2lhdGVkSW50ZXJmYWNlUHRySW5mbygpOwotICAvLyAgICB2YXIgYXNzb2NpYXRlZFJlcXVlc3Qg
PSBtYWtlUmVxdWVzdChpbnRlcmZhY2VQdHJJbmZvKTsKLSAgLy8KLSAgLy8gICAgaW50ZWdlclNl
bmRlckNvbm5lY3Rpb24uZ2V0U2VuZGVyKGFzc29jaWF0ZWRSZXF1ZXN0KTsKLSAgLy8KLSAgLy8g
ICAgLy8gQ3JlYXRlIGFuIGFzc29jaWF0ZWQgaW50ZXJmYWNlIGFuZCBiaW5kIHRoZSBhc3NvY2lh
dGVkIGhhbmRsZS4KLSAgLy8gICAgdmFyIGludGVnZXJTZW5kZXIgPSBuZXcgbW9qb20uQXNzb2Np
YXRlZEludGVnZXJTZW5kZXJQdHIoKTsKLSAgLy8gICAgaW50ZWdlclNlbmRlci5wdHIuYmluZChh
c3NvY2lhdGVkSW50ZXJmYWNlUHRySW5mbyk7Ci0gIC8vICAgIGludGVnZXJTZW5kZXIuZWNobygp
OwotCi0gIGZ1bmN0aW9uIEFzc29jaWF0ZWRJbnRlcmZhY2VQdHJDb250cm9sbGVyKGludGVyZmFj
ZVR5cGUsIGFzc29jaWF0ZWRQdHJJbmZvKSB7Ci0gICAgdGhpcy52ZXJzaW9uID0gMDsKLQotICAg
IHRoaXMuaW50ZXJmYWNlVHlwZV8gPSBpbnRlcmZhY2VUeXBlOwotICAgIHRoaXMuaW50ZXJmYWNl
RW5kcG9pbnRDbGllbnRfID0gbnVsbDsKLSAgICB0aGlzLnByb3h5XyA9IG51bGw7Ci0KLSAgICBp
ZiAoYXNzb2NpYXRlZFB0ckluZm8pIHsKLSAgICAgIHRoaXMuYmluZChhc3NvY2lhdGVkUHRySW5m
byk7Ci0gICAgfQotICB9Ci0KLSAgQXNzb2NpYXRlZEludGVyZmFjZVB0ckNvbnRyb2xsZXIucHJv
dG90eXBlLmJpbmQgPSBmdW5jdGlvbigKLSAgICAgIGFzc29jaWF0ZWRQdHJJbmZvKSB7Ci0gICAg
dGhpcy5yZXNldCgpOwotICAgIHRoaXMudmVyc2lvbiA9IGFzc29jaWF0ZWRQdHJJbmZvLnZlcnNp
b247Ci0KLSAgICB0aGlzLmludGVyZmFjZUVuZHBvaW50Q2xpZW50XyA9IG5ldyBpbnRlcm5hbC5J
bnRlcmZhY2VFbmRwb2ludENsaWVudCgKLSAgICAgICAgYXNzb2NpYXRlZFB0ckluZm8uaW50ZXJm
YWNlRW5kcG9pbnRIYW5kbGUpOwotCi0gICAgdGhpcy5pbnRlcmZhY2VFbmRwb2ludENsaWVudF8g
LnNldFBheWxvYWRWYWxpZGF0b3JzKFsKLSAgICAgICAgdGhpcy5pbnRlcmZhY2VUeXBlXy52YWxp
ZGF0ZVJlc3BvbnNlXSk7Ci0gICAgdGhpcy5wcm94eV8gPSBuZXcgdGhpcy5pbnRlcmZhY2VUeXBl
Xy5wcm94eUNsYXNzKAotICAgICAgICB0aGlzLmludGVyZmFjZUVuZHBvaW50Q2xpZW50Xyk7Ci0g
IH07Ci0KLSAgQXNzb2NpYXRlZEludGVyZmFjZVB0ckNvbnRyb2xsZXIucHJvdG90eXBlLmlzQm91
bmQgPSBmdW5jdGlvbigpIHsKLSAgICByZXR1cm4gdGhpcy5pbnRlcmZhY2VFbmRwb2ludENsaWVu
dF8gIT09IG51bGw7Ci0gIH07Ci0KLSAgQXNzb2NpYXRlZEludGVyZmFjZVB0ckNvbnRyb2xsZXIu
cHJvdG90eXBlLnJlc2V0ID0gZnVuY3Rpb24oKSB7Ci0gICAgdGhpcy52ZXJzaW9uID0gMDsKLSAg
ICBpZiAodGhpcy5pbnRlcmZhY2VFbmRwb2ludENsaWVudF8pIHsKLSAgICAgIHRoaXMuaW50ZXJm
YWNlRW5kcG9pbnRDbGllbnRfLmNsb3NlKCk7Ci0gICAgICB0aGlzLmludGVyZmFjZUVuZHBvaW50
Q2xpZW50XyA9IG51bGw7Ci0gICAgfQotICAgIGlmICh0aGlzLnByb3h5XykgewotICAgICAgdGhp
cy5wcm94eV8gPSBudWxsOwotICAgIH0KLSAgfTsKLQotICBBc3NvY2lhdGVkSW50ZXJmYWNlUHRy
Q29udHJvbGxlci5wcm90b3R5cGUucmVzZXRXaXRoUmVhc29uID0gZnVuY3Rpb24oCi0gICAgICBy
ZWFzb24pIHsKLSAgICBpZiAodGhpcy5pc0JvdW5kKCkpIHsKLSAgICAgIHRoaXMuaW50ZXJmYWNl
RW5kcG9pbnRDbGllbnRfLmNsb3NlKHJlYXNvbik7Ci0gICAgICB0aGlzLmludGVyZmFjZUVuZHBv
aW50Q2xpZW50XyA9IG51bGw7Ci0gICAgfQotICAgIHRoaXMucmVzZXQoKTsKLSAgfTsKLQotICAv
LyBJbmRpY2F0ZXMgd2hldGhlciBhbiBlcnJvciBoYXMgYmVlbiBlbmNvdW50ZXJlZC4gSWYgdHJ1
ZSwgbWV0aG9kIGNhbGxzCi0gIC8vIG9uIHRoaXMgaW50ZXJmYWNlIHdpbGwgYmUgZHJvcHBlZCAo
YW5kIG1heSBhbHJlYWR5IGhhdmUgYmVlbiBkcm9wcGVkKS4KLSAgQXNzb2NpYXRlZEludGVyZmFj
ZVB0ckNvbnRyb2xsZXIucHJvdG90eXBlLmdldEVuY291bnRlcmVkRXJyb3IgPSBmdW5jdGlvbigp
IHsKLSAgICByZXR1cm4gdGhpcy5pbnRlcmZhY2VFbmRwb2ludENsaWVudF8gPwotICAgICAgICB0
aGlzLmludGVyZmFjZUVuZHBvaW50Q2xpZW50Xy5nZXRFbmNvdW50ZXJlZEVycm9yKCkgOiBmYWxz
ZTsKLSAgfTsKLQotICBBc3NvY2lhdGVkSW50ZXJmYWNlUHRyQ29udHJvbGxlci5wcm90b3R5cGUu
c2V0Q29ubmVjdGlvbkVycm9ySGFuZGxlciA9Ci0gICAgICBmdW5jdGlvbihjYWxsYmFjaykgewot
ICAgIGlmICghdGhpcy5pc0JvdW5kKCkpIHsKLSAgICAgIHRocm93IG5ldyBFcnJvcigiQ2Fubm90
IHNldCBjb25uZWN0aW9uIGVycm9yIGhhbmRsZXIgaWYgbm90IGJvdW5kLiIpOwotICAgIH0KLQot
ICAgIHRoaXMuaW50ZXJmYWNlRW5kcG9pbnRDbGllbnRfLnNldENvbm5lY3Rpb25FcnJvckhhbmRs
ZXIoY2FsbGJhY2spOwotICB9OwotCi0gIEFzc29jaWF0ZWRJbnRlcmZhY2VQdHJDb250cm9sbGVy
LnByb3RvdHlwZS5wYXNzSW50ZXJmYWNlID0gZnVuY3Rpb24oKSB7Ci0gICAgaWYgKCF0aGlzLmlz
Qm91bmQoKSkgewotICAgICAgcmV0dXJuIG5ldyBtb2pvLkFzc29jaWF0ZWRJbnRlcmZhY2VQdHJJ
bmZvKG51bGwpOwotICAgIH0KLQotICAgIHZhciByZXN1bHQgPSBuZXcgbW9qby5Bc3NvY2lhdGVk
SW50ZXJmYWNlUHRySW5mbygKLSAgICAgICAgdGhpcy5pbnRlcmZhY2VFbmRwb2ludENsaWVudF8u
cGFzc0hhbmRsZSgpLCB0aGlzLnZlcnNpb24pOwotICAgIHRoaXMucmVzZXQoKTsKLSAgICByZXR1
cm4gcmVzdWx0OwotICB9OwotCi0gIEFzc29jaWF0ZWRJbnRlcmZhY2VQdHJDb250cm9sbGVyLnBy
b3RvdHlwZS5nZXRQcm94eSA9IGZ1bmN0aW9uKCkgewotICAgIHJldHVybiB0aGlzLnByb3h5XzsK
LSAgfTsKLQotICBBc3NvY2lhdGVkSW50ZXJmYWNlUHRyQ29udHJvbGxlci5wcm90b3R5cGUucXVl
cnlWZXJzaW9uID0gZnVuY3Rpb24oKSB7Ci0gICAgZnVuY3Rpb24gb25RdWVyeVZlcnNpb24odmVy
c2lvbikgewotICAgICAgdGhpcy52ZXJzaW9uID0gdmVyc2lvbjsKLSAgICAgIHJldHVybiB2ZXJz
aW9uOwotICAgIH0KLQotICAgIHJldHVybiB0aGlzLmludGVyZmFjZUVuZHBvaW50Q2xpZW50Xy5x
dWVyeVZlcnNpb24oKS50aGVuKAotICAgICAgb25RdWVyeVZlcnNpb24uYmluZCh0aGlzKSk7Ci0g
IH07Ci0KLSAgQXNzb2NpYXRlZEludGVyZmFjZVB0ckNvbnRyb2xsZXIucHJvdG90eXBlLnJlcXVp
cmVWZXJzaW9uID0gZnVuY3Rpb24oCi0gICAgICB2ZXJzaW9uKSB7Ci0gICAgaWYgKHRoaXMudmVy
c2lvbiA+PSB2ZXJzaW9uKSB7Ci0gICAgICByZXR1cm47Ci0gICAgfQotICAgIHRoaXMudmVyc2lv
biA9IHZlcnNpb247Ci0gICAgdGhpcy5pbnRlcmZhY2VFbmRwb2ludENsaWVudF8ucmVxdWlyZVZl
cnNpb24odmVyc2lvbik7Ci0gIH07Ci0KLSAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLSAgLy8g
fGFzc29jaWF0ZWRJbnRlcmZhY2VSZXF1ZXN0fCBjb3VsZCBiZSBvbWl0dGVkIGFuZCBwYXNzZWQg
aW50byBiaW5kKCkKLSAgLy8gbGF0ZXIuCi0gIGZ1bmN0aW9uIEFzc29jaWF0ZWRCaW5kaW5nKGlu
dGVyZmFjZVR5cGUsIGltcGwsIGFzc29jaWF0ZWRJbnRlcmZhY2VSZXF1ZXN0KSB7Ci0gICAgdGhp
cy5pbnRlcmZhY2VUeXBlXyA9IGludGVyZmFjZVR5cGU7Ci0gICAgdGhpcy5pbXBsXyA9IGltcGw7
Ci0gICAgdGhpcy5pbnRlcmZhY2VFbmRwb2ludENsaWVudF8gPSBudWxsOwotICAgIHRoaXMuc3R1
Yl8gPSBudWxsOwotCi0gICAgaWYgKGFzc29jaWF0ZWRJbnRlcmZhY2VSZXF1ZXN0KSB7Ci0gICAg
ICB0aGlzLmJpbmQoYXNzb2NpYXRlZEludGVyZmFjZVJlcXVlc3QpOwotICAgIH0KLSAgfQotCi0g
IEFzc29jaWF0ZWRCaW5kaW5nLnByb3RvdHlwZS5pc0JvdW5kID0gZnVuY3Rpb24oKSB7Ci0gICAg
cmV0dXJuIHRoaXMuaW50ZXJmYWNlRW5kcG9pbnRDbGllbnRfICE9PSBudWxsOwotICB9OwotCi0g
IEFzc29jaWF0ZWRCaW5kaW5nLnByb3RvdHlwZS5iaW5kID0gZnVuY3Rpb24oYXNzb2NpYXRlZElu
dGVyZmFjZVJlcXVlc3QpIHsKLSAgICB0aGlzLmNsb3NlKCk7Ci0KLSAgICB0aGlzLnN0dWJfID0g
bmV3IHRoaXMuaW50ZXJmYWNlVHlwZV8uc3R1YkNsYXNzKHRoaXMuaW1wbF8pOwotICAgIHRoaXMu
aW50ZXJmYWNlRW5kcG9pbnRDbGllbnRfID0gbmV3IGludGVybmFsLkludGVyZmFjZUVuZHBvaW50
Q2xpZW50KAotICAgICAgICBhc3NvY2lhdGVkSW50ZXJmYWNlUmVxdWVzdC5pbnRlcmZhY2VFbmRw
b2ludEhhbmRsZSwgdGhpcy5zdHViXywKLSAgICAgICAgdGhpcy5pbnRlcmZhY2VUeXBlXy5rVmVy
c2lvbik7Ci0KLSAgICB0aGlzLmludGVyZmFjZUVuZHBvaW50Q2xpZW50XyAuc2V0UGF5bG9hZFZh
bGlkYXRvcnMoWwotICAgICAgICB0aGlzLmludGVyZmFjZVR5cGVfLnZhbGlkYXRlUmVxdWVzdF0p
OwotICB9OwotCi0KLSAgQXNzb2NpYXRlZEJpbmRpbmcucHJvdG90eXBlLmNsb3NlID0gZnVuY3Rp
b24oKSB7Ci0gICAgaWYgKCF0aGlzLmlzQm91bmQoKSkgewotICAgICAgcmV0dXJuOwotICAgIH0K
LQotICAgIGlmICh0aGlzLmludGVyZmFjZUVuZHBvaW50Q2xpZW50XykgewotICAgICAgdGhpcy5p
bnRlcmZhY2VFbmRwb2ludENsaWVudF8uY2xvc2UoKTsKLSAgICAgIHRoaXMuaW50ZXJmYWNlRW5k
cG9pbnRDbGllbnRfID0gbnVsbDsKLSAgICB9Ci0KLSAgICB0aGlzLnN0dWJfID0gbnVsbDsKLSAg
fTsKLQotICBBc3NvY2lhdGVkQmluZGluZy5wcm90b3R5cGUuY2xvc2VXaXRoUmVhc29uID0gZnVu
Y3Rpb24ocmVhc29uKSB7Ci0gICAgaWYgKHRoaXMuaW50ZXJmYWNlRW5kcG9pbnRDbGllbnRfKSB7
Ci0gICAgICB0aGlzLmludGVyZmFjZUVuZHBvaW50Q2xpZW50Xy5jbG9zZShyZWFzb24pOwotICAg
ICAgdGhpcy5pbnRlcmZhY2VFbmRwb2ludENsaWVudF8gPSBudWxsOwotICAgIH0KLSAgICB0aGlz
LmNsb3NlKCk7Ci0gIH07Ci0KLSAgQXNzb2NpYXRlZEJpbmRpbmcucHJvdG90eXBlLnNldENvbm5l
Y3Rpb25FcnJvckhhbmRsZXIgPSBmdW5jdGlvbihjYWxsYmFjaykgewotICAgIGlmICghdGhpcy5p
c0JvdW5kKCkpIHsKLSAgICAgIHRocm93IG5ldyBFcnJvcigiQ2Fubm90IHNldCBjb25uZWN0aW9u
IGVycm9yIGhhbmRsZXIgaWYgbm90IGJvdW5kLiIpOwotICAgIH0KLSAgICB0aGlzLmludGVyZmFj
ZUVuZHBvaW50Q2xpZW50Xy5zZXRDb25uZWN0aW9uRXJyb3JIYW5kbGVyKGNhbGxiYWNrKTsKLSAg
fTsKLQotICBBc3NvY2lhdGVkQmluZGluZy5wcm90b3R5cGUudW5iaW5kID0gZnVuY3Rpb24oKSB7
Ci0gICAgaWYgKCF0aGlzLmlzQm91bmQoKSkgewotICAgICAgcmV0dXJuIG5ldyBtb2pvLkFzc29j
aWF0ZWRJbnRlcmZhY2VSZXF1ZXN0KG51bGwpOwotICAgIH0KLQotICAgIHZhciByZXN1bHQgPSBu
ZXcgbW9qby5Bc3NvY2lhdGVkSW50ZXJmYWNlUmVxdWVzdCgKLSAgICAgICAgdGhpcy5pbnRlcmZh
Y2VFbmRwb2ludENsaWVudF8ucGFzc0hhbmRsZSgpKTsKLSAgICB0aGlzLmNsb3NlKCk7Ci0gICAg
cmV0dXJuIHJlc3VsdDsKLSAgfTsKLQotICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotICBmdW5j
dGlvbiBBc3NvY2lhdGVkQmluZGluZ1NldChpbnRlcmZhY2VUeXBlKSB7Ci0gICAgbW9qby5CaW5k
aW5nU2V0LmNhbGwodGhpcywgaW50ZXJmYWNlVHlwZSk7Ci0gICAgdGhpcy5iaW5kaW5nVHlwZV8g
PSBBc3NvY2lhdGVkQmluZGluZzsKLSAgfQotCi0gIEFzc29jaWF0ZWRCaW5kaW5nU2V0LnByb3Rv
dHlwZSA9IE9iamVjdC5jcmVhdGUoQmluZGluZ1NldC5wcm90b3R5cGUpOwotICBBc3NvY2lhdGVk
QmluZGluZ1NldC5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBBc3NvY2lhdGVkQmluZGluZ1NldDsK
LQotICBtb2pvLm1ha2VSZXF1ZXN0ID0gbWFrZVJlcXVlc3Q7Ci0gIG1vam8uQXNzb2NpYXRlZElu
dGVyZmFjZVB0ckNvbnRyb2xsZXIgPSBBc3NvY2lhdGVkSW50ZXJmYWNlUHRyQ29udHJvbGxlcjsK
LSAgbW9qby5Bc3NvY2lhdGVkQmluZGluZyA9IEFzc29jaWF0ZWRCaW5kaW5nOwotICBtb2pvLkFz
c29jaWF0ZWRCaW5kaW5nU2V0ID0gQXNzb2NpYXRlZEJpbmRpbmdTZXQ7Ci0gIG1vam8uQmluZGlu
ZyA9IEJpbmRpbmc7Ci0gIG1vam8uQmluZGluZ1NldCA9IEJpbmRpbmdTZXQ7Ci0gIG1vam8uSW50
ZXJmYWNlUHRyQ29udHJvbGxlciA9IEludGVyZmFjZVB0ckNvbnRyb2xsZXI7Ci19KSgpOwotLy8g
Q29weXJpZ2h0IDIwMTYgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBs
aWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotCi0oZnVu
Y3Rpb24oKSB7Ci0gIHZhciBpbnRlcm5hbCA9IG1vam8uaW50ZXJuYWw7Ci0KLSAgLy8gQ29uc3Rh
bnRzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0KLSAgdmFyIGtJbnRlcmZhY2VJZE5hbWVzcGFjZU1hc2sgPSAweDgwMDAwMDAw
OwotICB2YXIga01hc3RlckludGVyZmFjZUlkID0gMHgwMDAwMDAwMDsKLSAgdmFyIGtJbnZhbGlk
SW50ZXJmYWNlSWQgPSAweEZGRkZGRkZGOwotCi0gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0g
IGZ1bmN0aW9uIEludGVyZmFjZVB0ckluZm8oaGFuZGxlLCB2ZXJzaW9uKSB7Ci0gICAgdGhpcy5o
YW5kbGUgPSBoYW5kbGU7Ci0gICAgdGhpcy52ZXJzaW9uID0gdmVyc2lvbjsKLSAgfQotCi0gIElu
dGVyZmFjZVB0ckluZm8ucHJvdG90eXBlLmlzVmFsaWQgPSBmdW5jdGlvbigpIHsKLSAgICByZXR1
cm4gdGhpcy5oYW5kbGUgaW5zdGFuY2VvZiBNb2pvSGFuZGxlOwotICB9OwotCi0gIEludGVyZmFj
ZVB0ckluZm8ucHJvdG90eXBlLmNsb3NlID0gZnVuY3Rpb24oKSB7Ci0gICAgaWYgKCF0aGlzLmlz
VmFsaWQoKSkKLSAgICAgIHJldHVybjsKLQotICAgIHRoaXMuaGFuZGxlLmNsb3NlKCk7Ci0gICAg
dGhpcy5oYW5kbGUgPSBudWxsOwotICAgIHRoaXMudmVyc2lvbiA9IDA7Ci0gIH07Ci0KLSAgZnVu
Y3Rpb24gQXNzb2NpYXRlZEludGVyZmFjZVB0ckluZm8oaW50ZXJmYWNlRW5kcG9pbnRIYW5kbGUs
IHZlcnNpb24pIHsKLSAgICB0aGlzLmludGVyZmFjZUVuZHBvaW50SGFuZGxlID0gaW50ZXJmYWNl
RW5kcG9pbnRIYW5kbGU7Ci0gICAgdGhpcy52ZXJzaW9uID0gdmVyc2lvbjsKLSAgfQotCi0gIEFz
c29jaWF0ZWRJbnRlcmZhY2VQdHJJbmZvLnByb3RvdHlwZS5pc1ZhbGlkID0gZnVuY3Rpb24oKSB7
Ci0gICAgcmV0dXJuIHRoaXMuaW50ZXJmYWNlRW5kcG9pbnRIYW5kbGUuaXNWYWxpZCgpOwotICB9
OwotCi0gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0gIGZ1bmN0aW9uIEludGVyZmFjZVJlcXVl
c3QoaGFuZGxlKSB7Ci0gICAgdGhpcy5oYW5kbGUgPSBoYW5kbGU7Ci0gIH0KLQotICBJbnRlcmZh
Y2VSZXF1ZXN0LnByb3RvdHlwZS5pc1ZhbGlkID0gZnVuY3Rpb24oKSB7Ci0gICAgcmV0dXJuIHRo
aXMuaGFuZGxlIGluc3RhbmNlb2YgTW9qb0hhbmRsZTsKLSAgfTsKLQotICBJbnRlcmZhY2VSZXF1
ZXN0LnByb3RvdHlwZS5jbG9zZSA9IGZ1bmN0aW9uKCkgewotICAgIGlmICghdGhpcy5pc1ZhbGlk
KCkpCi0gICAgICByZXR1cm47Ci0KLSAgICB0aGlzLmhhbmRsZS5jbG9zZSgpOwotICAgIHRoaXMu
aGFuZGxlID0gbnVsbDsKLSAgfTsKLQotICBmdW5jdGlvbiBBc3NvY2lhdGVkSW50ZXJmYWNlUmVx
dWVzdChpbnRlcmZhY2VFbmRwb2ludEhhbmRsZSkgewotICAgIHRoaXMuaW50ZXJmYWNlRW5kcG9p
bnRIYW5kbGUgPSBpbnRlcmZhY2VFbmRwb2ludEhhbmRsZTsKLSAgfQotCi0gIEFzc29jaWF0ZWRJ
bnRlcmZhY2VSZXF1ZXN0LnByb3RvdHlwZS5pc1ZhbGlkID0gZnVuY3Rpb24oKSB7Ci0gICAgcmV0
dXJuIHRoaXMuaW50ZXJmYWNlRW5kcG9pbnRIYW5kbGUuaXNWYWxpZCgpOwotICB9OwotCi0gIEFz
c29jaWF0ZWRJbnRlcmZhY2VSZXF1ZXN0LnByb3RvdHlwZS5yZXNldFdpdGhSZWFzb24gPSBmdW5j
dGlvbihyZWFzb24pIHsKLSAgICB0aGlzLmludGVyZmFjZUVuZHBvaW50SGFuZGxlLnJlc2V0KHJl
YXNvbik7Ci0gIH07Ci0KLSAgZnVuY3Rpb24gaXNNYXN0ZXJJbnRlcmZhY2VJZChpbnRlcmZhY2VJ
ZCkgewotICAgIHJldHVybiBpbnRlcmZhY2VJZCA9PT0ga01hc3RlckludGVyZmFjZUlkOwotICB9
Ci0KLSAgZnVuY3Rpb24gaXNWYWxpZEludGVyZmFjZUlkKGludGVyZmFjZUlkKSB7Ci0gICAgcmV0
dXJuIGludGVyZmFjZUlkICE9PSBrSW52YWxpZEludGVyZmFjZUlkOwotICB9Ci0KLSAgZnVuY3Rp
b24gaGFzSW50ZXJmYWNlSWROYW1lc3BhY2VCaXRTZXQoaW50ZXJmYWNlSWQpIHsKLSAgICBpZiAo
aW50ZXJmYWNlSWQgPj0gMiAqIGtJbnRlcmZhY2VJZE5hbWVzcGFjZU1hc2spIHsKLSAgICAgIHRo
cm93IG5ldyBFcnJvcigiSW50ZXJmYWNlIElEIHNob3VsZCBiZSBhIDMyLWJpdCB1bnNpZ25lZCBp
bnRlZ2VyLiIpOwotICAgIH0KLSAgICByZXR1cm4gaW50ZXJmYWNlSWQgPj0ga0ludGVyZmFjZUlk
TmFtZXNwYWNlTWFzazsKLSAgfQotCi0gIG1vam8uSW50ZXJmYWNlUHRySW5mbyA9IEludGVyZmFj
ZVB0ckluZm87Ci0gIG1vam8uSW50ZXJmYWNlUmVxdWVzdCA9IEludGVyZmFjZVJlcXVlc3Q7Ci0g
IG1vam8uQXNzb2NpYXRlZEludGVyZmFjZVB0ckluZm8gPSBBc3NvY2lhdGVkSW50ZXJmYWNlUHRy
SW5mbzsKLSAgbW9qby5Bc3NvY2lhdGVkSW50ZXJmYWNlUmVxdWVzdCA9IEFzc29jaWF0ZWRJbnRl
cmZhY2VSZXF1ZXN0OwotICBpbnRlcm5hbC5pc01hc3RlckludGVyZmFjZUlkID0gaXNNYXN0ZXJJ
bnRlcmZhY2VJZDsKLSAgaW50ZXJuYWwuaXNWYWxpZEludGVyZmFjZUlkID0gaXNWYWxpZEludGVy
ZmFjZUlkOwotICBpbnRlcm5hbC5oYXNJbnRlcmZhY2VJZE5hbWVzcGFjZUJpdFNldCA9IGhhc0lu
dGVyZmFjZUlkTmFtZXNwYWNlQml0U2V0OwotICBpbnRlcm5hbC5rSW52YWxpZEludGVyZmFjZUlk
ID0ga0ludmFsaWRJbnRlcmZhY2VJZDsKLSAgaW50ZXJuYWwua01hc3RlckludGVyZmFjZUlkID0g
a01hc3RlckludGVyZmFjZUlkOwotICBpbnRlcm5hbC5rSW50ZXJmYWNlSWROYW1lc3BhY2VNYXNr
ID0ga0ludGVyZmFjZUlkTmFtZXNwYWNlTWFzazsKLX0pKCk7Ci0vLyBDb3B5cmlnaHQgMjAxNCBU
aGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlz
IHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4g
YmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLShmdW5jdGlvbigpIHsKLSAgdmFy
IGludGVybmFsID0gbW9qby5pbnRlcm5hbDsKLQotICB2YXIga0hvc3RJc0xpdHRsZUVuZGlhbiA9
IChmdW5jdGlvbiAoKSB7Ci0gICAgdmFyIGVuZGlhbkFycmF5QnVmZmVyID0gbmV3IEFycmF5QnVm
ZmVyKDIpOwotICAgIHZhciBlbmRpYW5VaW50OEFycmF5ID0gbmV3IFVpbnQ4QXJyYXkoZW5kaWFu
QXJyYXlCdWZmZXIpOwotICAgIHZhciBlbmRpYW5VaW50MTZBcnJheSA9IG5ldyBVaW50MTZBcnJh
eShlbmRpYW5BcnJheUJ1ZmZlcik7Ci0gICAgZW5kaWFuVWludDE2QXJyYXlbMF0gPSAxOwotICAg
IHJldHVybiBlbmRpYW5VaW50OEFycmF5WzBdID09IDE7Ci0gIH0pKCk7Ci0KLSAgdmFyIGtIaWdo
V29yZE11bHRpcGxpZXIgPSAweDEwMDAwMDAwMDsKLQotICBmdW5jdGlvbiBCdWZmZXIoc2l6ZU9y
QXJyYXlCdWZmZXIpIHsKLSAgICBpZiAoc2l6ZU9yQXJyYXlCdWZmZXIgaW5zdGFuY2VvZiBBcnJh
eUJ1ZmZlcikKLSAgICAgIHRoaXMuYXJyYXlCdWZmZXIgPSBzaXplT3JBcnJheUJ1ZmZlcjsKLSAg
ICBlbHNlCi0gICAgICB0aGlzLmFycmF5QnVmZmVyID0gbmV3IEFycmF5QnVmZmVyKHNpemVPckFy
cmF5QnVmZmVyKTsKLQotICAgIHRoaXMuZGF0YVZpZXcgPSBuZXcgRGF0YVZpZXcodGhpcy5hcnJh
eUJ1ZmZlcik7Ci0gICAgdGhpcy5uZXh0ID0gMDsKLSAgfQotCi0gIE9iamVjdC5kZWZpbmVQcm9w
ZXJ0eShCdWZmZXIucHJvdG90eXBlLCAiYnl0ZUxlbmd0aCIsIHsKLSAgICBnZXQ6IGZ1bmN0aW9u
KCkgeyByZXR1cm4gdGhpcy5hcnJheUJ1ZmZlci5ieXRlTGVuZ3RoOyB9Ci0gIH0pOwotCi0gIEJ1
ZmZlci5wcm90b3R5cGUuYWxsb2MgPSBmdW5jdGlvbihzaXplKSB7Ci0gICAgdmFyIHBvaW50ZXIg
PSB0aGlzLm5leHQ7Ci0gICAgdGhpcy5uZXh0ICs9IHNpemU7Ci0gICAgaWYgKHRoaXMubmV4dCA+
IHRoaXMuYnl0ZUxlbmd0aCkgewotICAgICAgdmFyIG5ld1NpemUgPSAoMS41ICogKHRoaXMuYnl0
ZUxlbmd0aCArIHNpemUpKSB8IDA7Ci0gICAgICB0aGlzLmdyb3cobmV3U2l6ZSk7Ci0gICAgfQot
ICAgIHJldHVybiBwb2ludGVyOwotICB9OwotCi0gIGZ1bmN0aW9uIGNvcHlBcnJheUJ1ZmZlcihk
c3RBcnJheUJ1ZmZlciwgc3JjQXJyYXlCdWZmZXIpIHsKLSAgICAobmV3IFVpbnQ4QXJyYXkoZHN0
QXJyYXlCdWZmZXIpKS5zZXQobmV3IFVpbnQ4QXJyYXkoc3JjQXJyYXlCdWZmZXIpKTsKLSAgfQot
Ci0gIEJ1ZmZlci5wcm90b3R5cGUuZ3JvdyA9IGZ1bmN0aW9uKHNpemUpIHsKLSAgICB2YXIgbmV3
QXJyYXlCdWZmZXIgPSBuZXcgQXJyYXlCdWZmZXIoc2l6ZSk7Ci0gICAgY29weUFycmF5QnVmZmVy
KG5ld0FycmF5QnVmZmVyLCB0aGlzLmFycmF5QnVmZmVyKTsKLSAgICB0aGlzLmFycmF5QnVmZmVy
ID0gbmV3QXJyYXlCdWZmZXI7Ci0gICAgdGhpcy5kYXRhVmlldyA9IG5ldyBEYXRhVmlldyh0aGlz
LmFycmF5QnVmZmVyKTsKLSAgfTsKLQotICBCdWZmZXIucHJvdG90eXBlLnRyaW0gPSBmdW5jdGlv
bigpIHsKLSAgICB0aGlzLmFycmF5QnVmZmVyID0gdGhpcy5hcnJheUJ1ZmZlci5zbGljZSgwLCB0
aGlzLm5leHQpOwotICAgIHRoaXMuZGF0YVZpZXcgPSBuZXcgRGF0YVZpZXcodGhpcy5hcnJheUJ1
ZmZlcik7Ci0gIH07Ci0KLSAgQnVmZmVyLnByb3RvdHlwZS5nZXRVaW50OCA9IGZ1bmN0aW9uKG9m
ZnNldCkgewotICAgIHJldHVybiB0aGlzLmRhdGFWaWV3LmdldFVpbnQ4KG9mZnNldCk7Ci0gIH0K
LSAgQnVmZmVyLnByb3RvdHlwZS5nZXRVaW50MTYgPSBmdW5jdGlvbihvZmZzZXQpIHsKLSAgICBy
ZXR1cm4gdGhpcy5kYXRhVmlldy5nZXRVaW50MTYob2Zmc2V0LCBrSG9zdElzTGl0dGxlRW5kaWFu
KTsKLSAgfQotICBCdWZmZXIucHJvdG90eXBlLmdldFVpbnQzMiA9IGZ1bmN0aW9uKG9mZnNldCkg
ewotICAgIHJldHVybiB0aGlzLmRhdGFWaWV3LmdldFVpbnQzMihvZmZzZXQsIGtIb3N0SXNMaXR0
bGVFbmRpYW4pOwotICB9Ci0gIEJ1ZmZlci5wcm90b3R5cGUuZ2V0VWludDY0ID0gZnVuY3Rpb24o
b2Zmc2V0KSB7Ci0gICAgdmFyIGxvLCBoaTsKLSAgICBpZiAoa0hvc3RJc0xpdHRsZUVuZGlhbikg
ewotICAgICAgbG8gPSB0aGlzLmRhdGFWaWV3LmdldFVpbnQzMihvZmZzZXQsIGtIb3N0SXNMaXR0
bGVFbmRpYW4pOwotICAgICAgaGkgPSB0aGlzLmRhdGFWaWV3LmdldFVpbnQzMihvZmZzZXQgKyA0
LCBrSG9zdElzTGl0dGxlRW5kaWFuKTsKLSAgICB9IGVsc2UgewotICAgICAgaGkgPSB0aGlzLmRh
dGFWaWV3LmdldFVpbnQzMihvZmZzZXQsIGtIb3N0SXNMaXR0bGVFbmRpYW4pOwotICAgICAgbG8g
PSB0aGlzLmRhdGFWaWV3LmdldFVpbnQzMihvZmZzZXQgKyA0LCBrSG9zdElzTGl0dGxlRW5kaWFu
KTsKLSAgICB9Ci0gICAgcmV0dXJuIGxvICsgaGkgKiBrSGlnaFdvcmRNdWx0aXBsaWVyOwotICB9
Ci0KLSAgQnVmZmVyLnByb3RvdHlwZS5nZXRJbnQ4ID0gZnVuY3Rpb24ob2Zmc2V0KSB7Ci0gICAg
cmV0dXJuIHRoaXMuZGF0YVZpZXcuZ2V0SW50OChvZmZzZXQpOwotICB9Ci0gIEJ1ZmZlci5wcm90
b3R5cGUuZ2V0SW50MTYgPSBmdW5jdGlvbihvZmZzZXQpIHsKLSAgICByZXR1cm4gdGhpcy5kYXRh
Vmlldy5nZXRJbnQxNihvZmZzZXQsIGtIb3N0SXNMaXR0bGVFbmRpYW4pOwotICB9Ci0gIEJ1ZmZl
ci5wcm90b3R5cGUuZ2V0SW50MzIgPSBmdW5jdGlvbihvZmZzZXQpIHsKLSAgICByZXR1cm4gdGhp
cy5kYXRhVmlldy5nZXRJbnQzMihvZmZzZXQsIGtIb3N0SXNMaXR0bGVFbmRpYW4pOwotICB9Ci0g
IEJ1ZmZlci5wcm90b3R5cGUuZ2V0SW50NjQgPSBmdW5jdGlvbihvZmZzZXQpIHsKLSAgICB2YXIg
bG8sIGhpOwotICAgIGlmIChrSG9zdElzTGl0dGxlRW5kaWFuKSB7Ci0gICAgICBsbyA9IHRoaXMu
ZGF0YVZpZXcuZ2V0VWludDMyKG9mZnNldCwga0hvc3RJc0xpdHRsZUVuZGlhbik7Ci0gICAgICBo
aSA9IHRoaXMuZGF0YVZpZXcuZ2V0SW50MzIob2Zmc2V0ICsgNCwga0hvc3RJc0xpdHRsZUVuZGlh
bik7Ci0gICAgfSBlbHNlIHsKLSAgICAgIGhpID0gdGhpcy5kYXRhVmlldy5nZXRJbnQzMihvZmZz
ZXQsIGtIb3N0SXNMaXR0bGVFbmRpYW4pOwotICAgICAgbG8gPSB0aGlzLmRhdGFWaWV3LmdldFVp
bnQzMihvZmZzZXQgKyA0LCBrSG9zdElzTGl0dGxlRW5kaWFuKTsKLSAgICB9Ci0gICAgcmV0dXJu
IGxvICsgaGkgKiBrSGlnaFdvcmRNdWx0aXBsaWVyOwotICB9Ci0KLSAgQnVmZmVyLnByb3RvdHlw
ZS5nZXRGbG9hdDMyID0gZnVuY3Rpb24ob2Zmc2V0KSB7Ci0gICAgcmV0dXJuIHRoaXMuZGF0YVZp
ZXcuZ2V0RmxvYXQzMihvZmZzZXQsIGtIb3N0SXNMaXR0bGVFbmRpYW4pOwotICB9Ci0gIEJ1ZmZl
ci5wcm90b3R5cGUuZ2V0RmxvYXQ2NCA9IGZ1bmN0aW9uKG9mZnNldCkgewotICAgIHJldHVybiB0
aGlzLmRhdGFWaWV3LmdldEZsb2F0NjQob2Zmc2V0LCBrSG9zdElzTGl0dGxlRW5kaWFuKTsKLSAg
fQotCi0gIEJ1ZmZlci5wcm90b3R5cGUuc2V0VWludDggPSBmdW5jdGlvbihvZmZzZXQsIHZhbHVl
KSB7Ci0gICAgdGhpcy5kYXRhVmlldy5zZXRVaW50OChvZmZzZXQsIHZhbHVlKTsKLSAgfQotICBC
dWZmZXIucHJvdG90eXBlLnNldFVpbnQxNiA9IGZ1bmN0aW9uKG9mZnNldCwgdmFsdWUpIHsKLSAg
ICB0aGlzLmRhdGFWaWV3LnNldFVpbnQxNihvZmZzZXQsIHZhbHVlLCBrSG9zdElzTGl0dGxlRW5k
aWFuKTsKLSAgfQotICBCdWZmZXIucHJvdG90eXBlLnNldFVpbnQzMiA9IGZ1bmN0aW9uKG9mZnNl
dCwgdmFsdWUpIHsKLSAgICB0aGlzLmRhdGFWaWV3LnNldFVpbnQzMihvZmZzZXQsIHZhbHVlLCBr
SG9zdElzTGl0dGxlRW5kaWFuKTsKLSAgfQotICBCdWZmZXIucHJvdG90eXBlLnNldFVpbnQ2NCA9
IGZ1bmN0aW9uKG9mZnNldCwgdmFsdWUpIHsKLSAgICB2YXIgaGkgPSAodmFsdWUgLyBrSGlnaFdv
cmRNdWx0aXBsaWVyKSB8IDA7Ci0gICAgaWYgKGtIb3N0SXNMaXR0bGVFbmRpYW4pIHsKLSAgICAg
IHRoaXMuZGF0YVZpZXcuc2V0SW50MzIob2Zmc2V0LCB2YWx1ZSwga0hvc3RJc0xpdHRsZUVuZGlh
bik7Ci0gICAgICB0aGlzLmRhdGFWaWV3LnNldEludDMyKG9mZnNldCArIDQsIGhpLCBrSG9zdElz
TGl0dGxlRW5kaWFuKTsKLSAgICB9IGVsc2UgewotICAgICAgdGhpcy5kYXRhVmlldy5zZXRJbnQz
MihvZmZzZXQsIGhpLCBrSG9zdElzTGl0dGxlRW5kaWFuKTsKLSAgICAgIHRoaXMuZGF0YVZpZXcu
c2V0SW50MzIob2Zmc2V0ICsgNCwgdmFsdWUsIGtIb3N0SXNMaXR0bGVFbmRpYW4pOwotICAgIH0K
LSAgfQotCi0gIEJ1ZmZlci5wcm90b3R5cGUuc2V0SW50OCA9IGZ1bmN0aW9uKG9mZnNldCwgdmFs
dWUpIHsKLSAgICB0aGlzLmRhdGFWaWV3LnNldEludDgob2Zmc2V0LCB2YWx1ZSk7Ci0gIH0KLSAg
QnVmZmVyLnByb3RvdHlwZS5zZXRJbnQxNiA9IGZ1bmN0aW9uKG9mZnNldCwgdmFsdWUpIHsKLSAg
ICB0aGlzLmRhdGFWaWV3LnNldEludDE2KG9mZnNldCwgdmFsdWUsIGtIb3N0SXNMaXR0bGVFbmRp
YW4pOwotICB9Ci0gIEJ1ZmZlci5wcm90b3R5cGUuc2V0SW50MzIgPSBmdW5jdGlvbihvZmZzZXQs
IHZhbHVlKSB7Ci0gICAgdGhpcy5kYXRhVmlldy5zZXRJbnQzMihvZmZzZXQsIHZhbHVlLCBrSG9z
dElzTGl0dGxlRW5kaWFuKTsKLSAgfQotICBCdWZmZXIucHJvdG90eXBlLnNldEludDY0ID0gZnVu
Y3Rpb24ob2Zmc2V0LCB2YWx1ZSkgewotICAgIHZhciBoaSA9IE1hdGguZmxvb3IodmFsdWUgLyBr
SGlnaFdvcmRNdWx0aXBsaWVyKTsKLSAgICBpZiAoa0hvc3RJc0xpdHRsZUVuZGlhbikgewotICAg
ICAgdGhpcy5kYXRhVmlldy5zZXRJbnQzMihvZmZzZXQsIHZhbHVlLCBrSG9zdElzTGl0dGxlRW5k
aWFuKTsKLSAgICAgIHRoaXMuZGF0YVZpZXcuc2V0SW50MzIob2Zmc2V0ICsgNCwgaGksIGtIb3N0
SXNMaXR0bGVFbmRpYW4pOwotICAgIH0gZWxzZSB7Ci0gICAgICB0aGlzLmRhdGFWaWV3LnNldElu
dDMyKG9mZnNldCwgaGksIGtIb3N0SXNMaXR0bGVFbmRpYW4pOwotICAgICAgdGhpcy5kYXRhVmll
dy5zZXRJbnQzMihvZmZzZXQgKyA0LCB2YWx1ZSwga0hvc3RJc0xpdHRsZUVuZGlhbik7Ci0gICAg
fQotICB9Ci0KLSAgQnVmZmVyLnByb3RvdHlwZS5zZXRGbG9hdDMyID0gZnVuY3Rpb24ob2Zmc2V0
LCB2YWx1ZSkgewotICAgIHRoaXMuZGF0YVZpZXcuc2V0RmxvYXQzMihvZmZzZXQsIHZhbHVlLCBr
SG9zdElzTGl0dGxlRW5kaWFuKTsKLSAgfQotICBCdWZmZXIucHJvdG90eXBlLnNldEZsb2F0NjQg
PSBmdW5jdGlvbihvZmZzZXQsIHZhbHVlKSB7Ci0gICAgdGhpcy5kYXRhVmlldy5zZXRGbG9hdDY0
KG9mZnNldCwgdmFsdWUsIGtIb3N0SXNMaXR0bGVFbmRpYW4pOwotICB9Ci0KLSAgaW50ZXJuYWwu
QnVmZmVyID0gQnVmZmVyOwotfSkoKTsKLS8vIENvcHlyaWdodCAyMDE0IFRoZSBDaHJvbWl1bSBB
dXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUg
aXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQg
aW4gdGhlIExJQ0VOU0UgZmlsZS4KLQotKGZ1bmN0aW9uKCkgewotICB2YXIgaW50ZXJuYWwgPSBt
b2pvLmludGVybmFsOwotCi0gIHZhciBrRXJyb3JVbnNpZ25lZCA9ICJQYXNzaW5nIG5lZ2F0aXZl
IHZhbHVlIHRvIHVuc2lnbmVkIjsKLSAgdmFyIGtFcnJvckFycmF5ID0gIlBhc3Npbmcgbm9uIEFy
cmF5IGZvciBhcnJheSB0eXBlIjsKLSAgdmFyIGtFcnJvclN0cmluZyA9ICJQYXNzaW5nIG5vbiBT
dHJpbmcgZm9yIHN0cmluZyB0eXBlIjsKLSAgdmFyIGtFcnJvck1hcCA9ICJQYXNzaW5nIG5vbiBN
YXAgZm9yIG1hcCB0eXBlIjsKLQotICAvLyBNZW1vcnkgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0gIHZhciBrQWxp
Z25tZW50ID0gODsKLQotICBmdW5jdGlvbiBhbGlnbihzaXplKSB7Ci0gICAgcmV0dXJuIHNpemUg
KyAoa0FsaWdubWVudCAtIChzaXplICUga0FsaWdubWVudCkpICUga0FsaWdubWVudDsKLSAgfQot
Ci0gIGZ1bmN0aW9uIGlzQWxpZ25lZChvZmZzZXQpIHsKLSAgICByZXR1cm4gb2Zmc2V0ID49IDAg
JiYgKG9mZnNldCAlIGtBbGlnbm1lbnQpID09PSAwOwotICB9Ci0KLSAgLy8gQ29uc3RhbnRzIC0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0KLQotICB2YXIga0FycmF5SGVhZGVyU2l6ZSA9IDg7Ci0gIHZhciBrU3RydWN0SGVhZGVy
U2l6ZSA9IDg7Ci0gIHZhciBrTWVzc2FnZVYwSGVhZGVyU2l6ZSA9IDI0OwotICB2YXIga01lc3Nh
Z2VWMUhlYWRlclNpemUgPSAzMjsKLSAgdmFyIGtNZXNzYWdlVjJIZWFkZXJTaXplID0gNDg7Ci0g
IHZhciBrTWFwU3RydWN0UGF5bG9hZFNpemUgPSAxNjsKLQotICB2YXIga1N0cnVjdEhlYWRlck51
bUJ5dGVzT2Zmc2V0ID0gMDsKLSAgdmFyIGtTdHJ1Y3RIZWFkZXJWZXJzaW9uT2Zmc2V0ID0gNDsK
LQotICB2YXIga0VuY29kZWRJbnZhbGlkSGFuZGxlVmFsdWUgPSAweEZGRkZGRkZGOwotCi0gIC8v
IERlY29kZXIgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tCi0KLSAgZnVuY3Rpb24gRGVjb2RlcihidWZmZXIsIGhhbmRsZXMs
IGFzc29jaWF0ZWRFbmRwb2ludEhhbmRsZXMsIGJhc2UpIHsKLSAgICB0aGlzLmJ1ZmZlciA9IGJ1
ZmZlcjsKLSAgICB0aGlzLmhhbmRsZXMgPSBoYW5kbGVzOwotICAgIHRoaXMuYXNzb2NpYXRlZEVu
ZHBvaW50SGFuZGxlcyA9IGFzc29jaWF0ZWRFbmRwb2ludEhhbmRsZXM7Ci0gICAgdGhpcy5iYXNl
ID0gYmFzZTsKLSAgICB0aGlzLm5leHQgPSBiYXNlOwotICB9Ci0KLSAgRGVjb2Rlci5wcm90b3R5
cGUuYWxpZ24gPSBmdW5jdGlvbigpIHsKLSAgICB0aGlzLm5leHQgPSBhbGlnbih0aGlzLm5leHQp
OwotICB9OwotCi0gIERlY29kZXIucHJvdG90eXBlLnNraXAgPSBmdW5jdGlvbihvZmZzZXQpIHsK
LSAgICB0aGlzLm5leHQgKz0gb2Zmc2V0OwotICB9OwotCi0gIERlY29kZXIucHJvdG90eXBlLnJl
YWRJbnQ4ID0gZnVuY3Rpb24oKSB7Ci0gICAgdmFyIHJlc3VsdCA9IHRoaXMuYnVmZmVyLmdldElu
dDgodGhpcy5uZXh0KTsKLSAgICB0aGlzLm5leHQgKz0gMTsKLSAgICByZXR1cm4gcmVzdWx0Owot
ICB9OwotCi0gIERlY29kZXIucHJvdG90eXBlLnJlYWRVaW50OCA9IGZ1bmN0aW9uKCkgewotICAg
IHZhciByZXN1bHQgPSB0aGlzLmJ1ZmZlci5nZXRVaW50OCh0aGlzLm5leHQpOwotICAgIHRoaXMu
bmV4dCArPSAxOwotICAgIHJldHVybiByZXN1bHQ7Ci0gIH07Ci0KLSAgRGVjb2Rlci5wcm90b3R5
cGUucmVhZEludDE2ID0gZnVuY3Rpb24oKSB7Ci0gICAgdmFyIHJlc3VsdCA9IHRoaXMuYnVmZmVy
LmdldEludDE2KHRoaXMubmV4dCk7Ci0gICAgdGhpcy5uZXh0ICs9IDI7Ci0gICAgcmV0dXJuIHJl
c3VsdDsKLSAgfTsKLQotICBEZWNvZGVyLnByb3RvdHlwZS5yZWFkVWludDE2ID0gZnVuY3Rpb24o
KSB7Ci0gICAgdmFyIHJlc3VsdCA9IHRoaXMuYnVmZmVyLmdldFVpbnQxNih0aGlzLm5leHQpOwot
ICAgIHRoaXMubmV4dCArPSAyOwotICAgIHJldHVybiByZXN1bHQ7Ci0gIH07Ci0KLSAgRGVjb2Rl
ci5wcm90b3R5cGUucmVhZEludDMyID0gZnVuY3Rpb24oKSB7Ci0gICAgdmFyIHJlc3VsdCA9IHRo
aXMuYnVmZmVyLmdldEludDMyKHRoaXMubmV4dCk7Ci0gICAgdGhpcy5uZXh0ICs9IDQ7Ci0gICAg
cmV0dXJuIHJlc3VsdDsKLSAgfTsKLQotICBEZWNvZGVyLnByb3RvdHlwZS5yZWFkVWludDMyID0g
ZnVuY3Rpb24oKSB7Ci0gICAgdmFyIHJlc3VsdCA9IHRoaXMuYnVmZmVyLmdldFVpbnQzMih0aGlz
Lm5leHQpOwotICAgIHRoaXMubmV4dCArPSA0OwotICAgIHJldHVybiByZXN1bHQ7Ci0gIH07Ci0K
LSAgRGVjb2Rlci5wcm90b3R5cGUucmVhZEludDY0ID0gZnVuY3Rpb24oKSB7Ci0gICAgdmFyIHJl
c3VsdCA9IHRoaXMuYnVmZmVyLmdldEludDY0KHRoaXMubmV4dCk7Ci0gICAgdGhpcy5uZXh0ICs9
IDg7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLSAgfTsKLQotICBEZWNvZGVyLnByb3RvdHlwZS5yZWFk
VWludDY0ID0gZnVuY3Rpb24oKSB7Ci0gICAgdmFyIHJlc3VsdCA9IHRoaXMuYnVmZmVyLmdldFVp
bnQ2NCh0aGlzLm5leHQpOwotICAgIHRoaXMubmV4dCArPSA4OwotICAgIHJldHVybiByZXN1bHQ7
Ci0gIH07Ci0KLSAgRGVjb2Rlci5wcm90b3R5cGUucmVhZEZsb2F0ID0gZnVuY3Rpb24oKSB7Ci0g
ICAgdmFyIHJlc3VsdCA9IHRoaXMuYnVmZmVyLmdldEZsb2F0MzIodGhpcy5uZXh0KTsKLSAgICB0
aGlzLm5leHQgKz0gNDsKLSAgICByZXR1cm4gcmVzdWx0OwotICB9OwotCi0gIERlY29kZXIucHJv
dG90eXBlLnJlYWREb3VibGUgPSBmdW5jdGlvbigpIHsKLSAgICB2YXIgcmVzdWx0ID0gdGhpcy5i
dWZmZXIuZ2V0RmxvYXQ2NCh0aGlzLm5leHQpOwotICAgIHRoaXMubmV4dCArPSA4OwotICAgIHJl
dHVybiByZXN1bHQ7Ci0gIH07Ci0KLSAgRGVjb2Rlci5wcm90b3R5cGUuZGVjb2RlUG9pbnRlciA9
IGZ1bmN0aW9uKCkgewotICAgIC8vIFRPRE8oYWJhcnRoKTogVG8gY29ycmVjdGx5IGRlY29kZSBh
IHBvaW50ZXIsIHdlIG5lZWQgdG8ga25vdyB0aGUgcmVhbAotICAgIC8vIGJhc2UgYWRkcmVzcyBv
ZiB0aGUgYXJyYXkgYnVmZmVyLgotICAgIHZhciBvZmZzZXRQb2ludGVyID0gdGhpcy5uZXh0Owot
ICAgIHZhciBvZmZzZXQgPSB0aGlzLnJlYWRVaW50NjQoKTsKLSAgICBpZiAoIW9mZnNldCkKLSAg
ICAgIHJldHVybiAwOwotICAgIHJldHVybiBvZmZzZXRQb2ludGVyICsgb2Zmc2V0OwotICB9Owot
Ci0gIERlY29kZXIucHJvdG90eXBlLmRlY29kZUFuZENyZWF0ZURlY29kZXIgPSBmdW5jdGlvbihw
b2ludGVyKSB7Ci0gICAgcmV0dXJuIG5ldyBEZWNvZGVyKHRoaXMuYnVmZmVyLCB0aGlzLmhhbmRs
ZXMsCi0gICAgICAgIHRoaXMuYXNzb2NpYXRlZEVuZHBvaW50SGFuZGxlcywgcG9pbnRlcik7Ci0g
IH07Ci0KLSAgRGVjb2Rlci5wcm90b3R5cGUuZGVjb2RlSGFuZGxlID0gZnVuY3Rpb24oKSB7Ci0g
ICAgcmV0dXJuIHRoaXMuaGFuZGxlc1t0aGlzLnJlYWRVaW50MzIoKV0gfHwgbnVsbDsKLSAgfTsK
LQotICBEZWNvZGVyLnByb3RvdHlwZS5kZWNvZGVBc3NvY2lhdGVkRW5kcG9pbnRIYW5kbGUgPSBm
dW5jdGlvbigpIHsKLSAgICByZXR1cm4gdGhpcy5hc3NvY2lhdGVkRW5kcG9pbnRIYW5kbGVzW3Ro
aXMucmVhZFVpbnQzMigpXSB8fCBudWxsOwotICB9OwotCi0gIERlY29kZXIucHJvdG90eXBlLmRl
Y29kZVN0cmluZyA9IGZ1bmN0aW9uKCkgewotICAgIHZhciBudW1iZXJPZkJ5dGVzID0gdGhpcy5y
ZWFkVWludDMyKCk7Ci0gICAgdmFyIG51bWJlck9mRWxlbWVudHMgPSB0aGlzLnJlYWRVaW50MzIo
KTsKLSAgICB2YXIgYmFzZSA9IHRoaXMubmV4dDsKLSAgICB0aGlzLm5leHQgKz0gbnVtYmVyT2ZF
bGVtZW50czsKLSAgICByZXR1cm4gaW50ZXJuYWwuZGVjb2RlVXRmOFN0cmluZygKLSAgICAgICAg
bmV3IFVpbnQ4QXJyYXkodGhpcy5idWZmZXIuYXJyYXlCdWZmZXIsIGJhc2UsIG51bWJlck9mRWxl
bWVudHMpKTsKLSAgfTsKLQotICBEZWNvZGVyLnByb3RvdHlwZS5kZWNvZGVBcnJheSA9IGZ1bmN0
aW9uKGNscykgewotICAgIHZhciBudW1iZXJPZkJ5dGVzID0gdGhpcy5yZWFkVWludDMyKCk7Ci0g
ICAgdmFyIG51bWJlck9mRWxlbWVudHMgPSB0aGlzLnJlYWRVaW50MzIoKTsKLSAgICB2YXIgdmFs
ID0gbmV3IEFycmF5KG51bWJlck9mRWxlbWVudHMpOwotICAgIGlmIChjbHMgPT09IFBhY2tlZEJv
b2wpIHsKLSAgICAgIHZhciBieXRlOwotICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBudW1iZXJP
ZkVsZW1lbnRzOyArK2kpIHsKLSAgICAgICAgaWYgKGkgJSA4ID09PSAwKQotICAgICAgICAgIGJ5
dGUgPSB0aGlzLnJlYWRVaW50OCgpOwotICAgICAgICB2YWxbaV0gPSAoYnl0ZSAmICgxIDw8IGkg
JSA4KSkgPyB0cnVlIDogZmFsc2U7Ci0gICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgIGZvciAo
dmFyIGkgPSAwOyBpIDwgbnVtYmVyT2ZFbGVtZW50czsgKytpKSB7Ci0gICAgICAgIHZhbFtpXSA9
IGNscy5kZWNvZGUodGhpcyk7Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiB2YWw7Ci0gIH07
Ci0KLSAgRGVjb2Rlci5wcm90b3R5cGUuZGVjb2RlU3RydWN0ID0gZnVuY3Rpb24oY2xzKSB7Ci0g
ICAgcmV0dXJuIGNscy5kZWNvZGUodGhpcyk7Ci0gIH07Ci0KLSAgRGVjb2Rlci5wcm90b3R5cGUu
ZGVjb2RlU3RydWN0UG9pbnRlciA9IGZ1bmN0aW9uKGNscykgewotICAgIHZhciBwb2ludGVyID0g
dGhpcy5kZWNvZGVQb2ludGVyKCk7Ci0gICAgaWYgKCFwb2ludGVyKSB7Ci0gICAgICByZXR1cm4g
bnVsbDsKLSAgICB9Ci0gICAgcmV0dXJuIGNscy5kZWNvZGUodGhpcy5kZWNvZGVBbmRDcmVhdGVE
ZWNvZGVyKHBvaW50ZXIpKTsKLSAgfTsKLQotICBEZWNvZGVyLnByb3RvdHlwZS5kZWNvZGVBcnJh
eVBvaW50ZXIgPSBmdW5jdGlvbihjbHMpIHsKLSAgICB2YXIgcG9pbnRlciA9IHRoaXMuZGVjb2Rl
UG9pbnRlcigpOwotICAgIGlmICghcG9pbnRlcikgewotICAgICAgcmV0dXJuIG51bGw7Ci0gICAg
fQotICAgIHJldHVybiB0aGlzLmRlY29kZUFuZENyZWF0ZURlY29kZXIocG9pbnRlcikuZGVjb2Rl
QXJyYXkoY2xzKTsKLSAgfTsKLQotICBEZWNvZGVyLnByb3RvdHlwZS5kZWNvZGVTdHJpbmdQb2lu
dGVyID0gZnVuY3Rpb24oKSB7Ci0gICAgdmFyIHBvaW50ZXIgPSB0aGlzLmRlY29kZVBvaW50ZXIo
KTsKLSAgICBpZiAoIXBvaW50ZXIpIHsKLSAgICAgIHJldHVybiBudWxsOwotICAgIH0KLSAgICBy
ZXR1cm4gdGhpcy5kZWNvZGVBbmRDcmVhdGVEZWNvZGVyKHBvaW50ZXIpLmRlY29kZVN0cmluZygp
OwotICB9OwotCi0gIERlY29kZXIucHJvdG90eXBlLmRlY29kZU1hcCA9IGZ1bmN0aW9uKGtleUNs
YXNzLCB2YWx1ZUNsYXNzKSB7Ci0gICAgdGhpcy5za2lwKDQpOyAvLyBudW1iZXJPZkJ5dGVzCi0g
ICAgdGhpcy5za2lwKDQpOyAvLyB2ZXJzaW9uCi0gICAgdmFyIGtleXMgPSB0aGlzLmRlY29kZUFy
cmF5UG9pbnRlcihrZXlDbGFzcyk7Ci0gICAgdmFyIHZhbHVlcyA9IHRoaXMuZGVjb2RlQXJyYXlQ
b2ludGVyKHZhbHVlQ2xhc3MpOwotICAgIHZhciB2YWwgPSBuZXcgTWFwKCk7Ci0gICAgZm9yICh2
YXIgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKQotICAgICAgdmFsLnNldChrZXlzW2ldLCB2
YWx1ZXNbaV0pOwotICAgIHJldHVybiB2YWw7Ci0gIH07Ci0KLSAgRGVjb2Rlci5wcm90b3R5cGUu
ZGVjb2RlTWFwUG9pbnRlciA9IGZ1bmN0aW9uKGtleUNsYXNzLCB2YWx1ZUNsYXNzKSB7Ci0gICAg
dmFyIHBvaW50ZXIgPSB0aGlzLmRlY29kZVBvaW50ZXIoKTsKLSAgICBpZiAoIXBvaW50ZXIpIHsK
LSAgICAgIHJldHVybiBudWxsOwotICAgIH0KLSAgICB2YXIgZGVjb2RlciA9IHRoaXMuZGVjb2Rl
QW5kQ3JlYXRlRGVjb2Rlcihwb2ludGVyKTsKLSAgICByZXR1cm4gZGVjb2Rlci5kZWNvZGVNYXAo
a2V5Q2xhc3MsIHZhbHVlQ2xhc3MpOwotICB9OwotCi0gIC8vIEVuY29kZXIgLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0K
LSAgZnVuY3Rpb24gRW5jb2RlcihidWZmZXIsIGhhbmRsZXMsIGFzc29jaWF0ZWRFbmRwb2ludEhh
bmRsZXMsIGJhc2UpIHsKLSAgICB0aGlzLmJ1ZmZlciA9IGJ1ZmZlcjsKLSAgICB0aGlzLmhhbmRs
ZXMgPSBoYW5kbGVzOwotICAgIHRoaXMuYXNzb2NpYXRlZEVuZHBvaW50SGFuZGxlcyA9IGFzc29j
aWF0ZWRFbmRwb2ludEhhbmRsZXM7Ci0gICAgdGhpcy5iYXNlID0gYmFzZTsKLSAgICB0aGlzLm5l
eHQgPSBiYXNlOwotICB9Ci0KLSAgRW5jb2Rlci5wcm90b3R5cGUuYWxpZ24gPSBmdW5jdGlvbigp
IHsKLSAgICB0aGlzLm5leHQgPSBhbGlnbih0aGlzLm5leHQpOwotICB9OwotCi0gIEVuY29kZXIu
cHJvdG90eXBlLnNraXAgPSBmdW5jdGlvbihvZmZzZXQpIHsKLSAgICB0aGlzLm5leHQgKz0gb2Zm
c2V0OwotICB9OwotCi0gIEVuY29kZXIucHJvdG90eXBlLndyaXRlSW50OCA9IGZ1bmN0aW9uKHZh
bCkgewotICAgIHRoaXMuYnVmZmVyLnNldEludDgodGhpcy5uZXh0LCB2YWwpOwotICAgIHRoaXMu
bmV4dCArPSAxOwotICB9OwotCi0gIEVuY29kZXIucHJvdG90eXBlLndyaXRlVWludDggPSBmdW5j
dGlvbih2YWwpIHsKLSAgICBpZiAodmFsIDwgMCkgewotICAgICAgdGhyb3cgbmV3IEVycm9yKGtF
cnJvclVuc2lnbmVkKTsKLSAgICB9Ci0gICAgdGhpcy5idWZmZXIuc2V0VWludDgodGhpcy5uZXh0
LCB2YWwpOwotICAgIHRoaXMubmV4dCArPSAxOwotICB9OwotCi0gIEVuY29kZXIucHJvdG90eXBl
LndyaXRlSW50MTYgPSBmdW5jdGlvbih2YWwpIHsKLSAgICB0aGlzLmJ1ZmZlci5zZXRJbnQxNih0
aGlzLm5leHQsIHZhbCk7Ci0gICAgdGhpcy5uZXh0ICs9IDI7Ci0gIH07Ci0KLSAgRW5jb2Rlci5w
cm90b3R5cGUud3JpdGVVaW50MTYgPSBmdW5jdGlvbih2YWwpIHsKLSAgICBpZiAodmFsIDwgMCkg
ewotICAgICAgdGhyb3cgbmV3IEVycm9yKGtFcnJvclVuc2lnbmVkKTsKLSAgICB9Ci0gICAgdGhp
cy5idWZmZXIuc2V0VWludDE2KHRoaXMubmV4dCwgdmFsKTsKLSAgICB0aGlzLm5leHQgKz0gMjsK
LSAgfTsKLQotICBFbmNvZGVyLnByb3RvdHlwZS53cml0ZUludDMyID0gZnVuY3Rpb24odmFsKSB7
Ci0gICAgdGhpcy5idWZmZXIuc2V0SW50MzIodGhpcy5uZXh0LCB2YWwpOwotICAgIHRoaXMubmV4
dCArPSA0OwotICB9OwotCi0gIEVuY29kZXIucHJvdG90eXBlLndyaXRlVWludDMyID0gZnVuY3Rp
b24odmFsKSB7Ci0gICAgaWYgKHZhbCA8IDApIHsKLSAgICAgIHRocm93IG5ldyBFcnJvcihrRXJy
b3JVbnNpZ25lZCk7Ci0gICAgfQotICAgIHRoaXMuYnVmZmVyLnNldFVpbnQzMih0aGlzLm5leHQs
IHZhbCk7Ci0gICAgdGhpcy5uZXh0ICs9IDQ7Ci0gIH07Ci0KLSAgRW5jb2Rlci5wcm90b3R5cGUu
d3JpdGVJbnQ2NCA9IGZ1bmN0aW9uKHZhbCkgewotICAgIHRoaXMuYnVmZmVyLnNldEludDY0KHRo
aXMubmV4dCwgdmFsKTsKLSAgICB0aGlzLm5leHQgKz0gODsKLSAgfTsKLQotICBFbmNvZGVyLnBy
b3RvdHlwZS53cml0ZVVpbnQ2NCA9IGZ1bmN0aW9uKHZhbCkgewotICAgIGlmICh2YWwgPCAwKSB7
Ci0gICAgICB0aHJvdyBuZXcgRXJyb3Ioa0Vycm9yVW5zaWduZWQpOwotICAgIH0KLSAgICB0aGlz
LmJ1ZmZlci5zZXRVaW50NjQodGhpcy5uZXh0LCB2YWwpOwotICAgIHRoaXMubmV4dCArPSA4Owot
ICB9OwotCi0gIEVuY29kZXIucHJvdG90eXBlLndyaXRlRmxvYXQgPSBmdW5jdGlvbih2YWwpIHsK
LSAgICB0aGlzLmJ1ZmZlci5zZXRGbG9hdDMyKHRoaXMubmV4dCwgdmFsKTsKLSAgICB0aGlzLm5l
eHQgKz0gNDsKLSAgfTsKLQotICBFbmNvZGVyLnByb3RvdHlwZS53cml0ZURvdWJsZSA9IGZ1bmN0
aW9uKHZhbCkgewotICAgIHRoaXMuYnVmZmVyLnNldEZsb2F0NjQodGhpcy5uZXh0LCB2YWwpOwot
ICAgIHRoaXMubmV4dCArPSA4OwotICB9OwotCi0gIEVuY29kZXIucHJvdG90eXBlLmVuY29kZVBv
aW50ZXIgPSBmdW5jdGlvbihwb2ludGVyKSB7Ci0gICAgaWYgKCFwb2ludGVyKQotICAgICAgcmV0
dXJuIHRoaXMud3JpdGVVaW50NjQoMCk7Ci0gICAgLy8gVE9ETyhhYmFydGgpOiBUbyBjb3JyZWN0
bHkgZW5jb2RlIGEgcG9pbnRlciwgd2UgbmVlZCB0byBrbm93IHRoZSByZWFsCi0gICAgLy8gYmFz
ZSBhZGRyZXNzIG9mIHRoZSBhcnJheSBidWZmZXIuCi0gICAgdmFyIG9mZnNldCA9IHBvaW50ZXIg
LSB0aGlzLm5leHQ7Ci0gICAgdGhpcy53cml0ZVVpbnQ2NChvZmZzZXQpOwotICB9OwotCi0gIEVu
Y29kZXIucHJvdG90eXBlLmNyZWF0ZUFuZEVuY29kZUVuY29kZXIgPSBmdW5jdGlvbihzaXplKSB7
Ci0gICAgdmFyIHBvaW50ZXIgPSB0aGlzLmJ1ZmZlci5hbGxvYyhhbGlnbihzaXplKSk7Ci0gICAg
dGhpcy5lbmNvZGVQb2ludGVyKHBvaW50ZXIpOwotICAgIHJldHVybiBuZXcgRW5jb2Rlcih0aGlz
LmJ1ZmZlciwgdGhpcy5oYW5kbGVzLAotICAgICAgICB0aGlzLmFzc29jaWF0ZWRFbmRwb2ludEhh
bmRsZXMsIHBvaW50ZXIpOwotICB9OwotCi0gIEVuY29kZXIucHJvdG90eXBlLmVuY29kZUhhbmRs
ZSA9IGZ1bmN0aW9uKGhhbmRsZSkgewotICAgIGlmIChoYW5kbGUpIHsKLSAgICAgIHRoaXMuaGFu
ZGxlcy5wdXNoKGhhbmRsZSk7Ci0gICAgICB0aGlzLndyaXRlVWludDMyKHRoaXMuaGFuZGxlcy5s
ZW5ndGggLSAxKTsKLSAgICB9IGVsc2UgewotICAgICAgdGhpcy53cml0ZVVpbnQzMihrRW5jb2Rl
ZEludmFsaWRIYW5kbGVWYWx1ZSk7Ci0gICAgfQotICB9OwotCi0gIEVuY29kZXIucHJvdG90eXBl
LmVuY29kZUFzc29jaWF0ZWRFbmRwb2ludEhhbmRsZSA9IGZ1bmN0aW9uKGVuZHBvaW50SGFuZGxl
KSB7Ci0gICAgaWYgKGVuZHBvaW50SGFuZGxlKSB7Ci0gICAgICB0aGlzLmFzc29jaWF0ZWRFbmRw
b2ludEhhbmRsZXMucHVzaChlbmRwb2ludEhhbmRsZSk7Ci0gICAgICB0aGlzLndyaXRlVWludDMy
KHRoaXMuYXNzb2NpYXRlZEVuZHBvaW50SGFuZGxlcy5sZW5ndGggLSAxKTsKLSAgICB9IGVsc2Ug
ewotICAgICAgdGhpcy53cml0ZVVpbnQzMihrRW5jb2RlZEludmFsaWRIYW5kbGVWYWx1ZSk7Ci0g
ICAgfQotICB9OwotCi0gIEVuY29kZXIucHJvdG90eXBlLmVuY29kZVN0cmluZyA9IGZ1bmN0aW9u
KHZhbCkgewotICAgIHZhciBiYXNlID0gdGhpcy5uZXh0ICsga0FycmF5SGVhZGVyU2l6ZTsKLSAg
ICB2YXIgbnVtYmVyT2ZFbGVtZW50cyA9IGludGVybmFsLmVuY29kZVV0ZjhTdHJpbmcoCi0gICAg
ICAgIHZhbCwgbmV3IFVpbnQ4QXJyYXkodGhpcy5idWZmZXIuYXJyYXlCdWZmZXIsIGJhc2UpKTsK
LSAgICB2YXIgbnVtYmVyT2ZCeXRlcyA9IGtBcnJheUhlYWRlclNpemUgKyBudW1iZXJPZkVsZW1l
bnRzOwotICAgIHRoaXMud3JpdGVVaW50MzIobnVtYmVyT2ZCeXRlcyk7Ci0gICAgdGhpcy53cml0
ZVVpbnQzMihudW1iZXJPZkVsZW1lbnRzKTsKLSAgICB0aGlzLm5leHQgKz0gbnVtYmVyT2ZFbGVt
ZW50czsKLSAgfTsKLQotICBFbmNvZGVyLnByb3RvdHlwZS5lbmNvZGVBcnJheSA9Ci0gICAgICBm
dW5jdGlvbihjbHMsIHZhbCwgbnVtYmVyT2ZFbGVtZW50cywgZW5jb2RlZFNpemUpIHsKLSAgICBp
ZiAobnVtYmVyT2ZFbGVtZW50cyA9PT0gdW5kZWZpbmVkKQotICAgICAgbnVtYmVyT2ZFbGVtZW50
cyA9IHZhbC5sZW5ndGg7Ci0gICAgaWYgKGVuY29kZWRTaXplID09PSB1bmRlZmluZWQpCi0gICAg
ICBlbmNvZGVkU2l6ZSA9IGtBcnJheUhlYWRlclNpemUgKyBjbHMuZW5jb2RlZFNpemUgKiBudW1i
ZXJPZkVsZW1lbnRzOwotCi0gICAgdGhpcy53cml0ZVVpbnQzMihlbmNvZGVkU2l6ZSk7Ci0gICAg
dGhpcy53cml0ZVVpbnQzMihudW1iZXJPZkVsZW1lbnRzKTsKLQotICAgIGlmIChjbHMgPT09IFBh
Y2tlZEJvb2wpIHsKLSAgICAgIHZhciBieXRlID0gMDsKLSAgICAgIGZvciAoaSA9IDA7IGkgPCBu
dW1iZXJPZkVsZW1lbnRzOyArK2kpIHsKLSAgICAgICAgaWYgKHZhbFtpXSkKLSAgICAgICAgICBi
eXRlIHw9ICgxIDw8IGkgJSA4KTsKLSAgICAgICAgaWYgKGkgJSA4ID09PSA3IHx8IGkgPT0gbnVt
YmVyT2ZFbGVtZW50cyAtIDEpIHsKLSAgICAgICAgICBVaW50OC5lbmNvZGUodGhpcywgYnl0ZSk7
Ci0gICAgICAgICAgYnl0ZSA9IDA7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9IGVsc2Ugewot
ICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBudW1iZXJPZkVsZW1lbnRzOyArK2kpCi0gICAgICAg
IGNscy5lbmNvZGUodGhpcywgdmFsW2ldKTsKLSAgICB9Ci0gIH07Ci0KLSAgRW5jb2Rlci5wcm90
b3R5cGUuZW5jb2RlU3RydWN0ID0gZnVuY3Rpb24oY2xzLCB2YWwpIHsKLSAgICByZXR1cm4gY2xz
LmVuY29kZSh0aGlzLCB2YWwpOwotICB9OwotCi0gIEVuY29kZXIucHJvdG90eXBlLmVuY29kZVN0
cnVjdFBvaW50ZXIgPSBmdW5jdGlvbihjbHMsIHZhbCkgewotICAgIGlmICh2YWwgPT0gbnVsbCkg
ewotICAgICAgLy8gQWxzbyBoYW5kbGVzIHVuZGVmaW5lZCwgc2luY2UgdW5kZWZpbmVkID09IG51
bGwuCi0gICAgICB0aGlzLmVuY29kZVBvaW50ZXIodmFsKTsKLSAgICAgIHJldHVybjsKLSAgICB9
Ci0gICAgdmFyIGVuY29kZXIgPSB0aGlzLmNyZWF0ZUFuZEVuY29kZUVuY29kZXIoY2xzLmVuY29k
ZWRTaXplKTsKLSAgICBjbHMuZW5jb2RlKGVuY29kZXIsIHZhbCk7Ci0gIH07Ci0KLSAgRW5jb2Rl
ci5wcm90b3R5cGUuZW5jb2RlQXJyYXlQb2ludGVyID0gZnVuY3Rpb24oY2xzLCB2YWwpIHsKLSAg
ICBpZiAodmFsID09IG51bGwpIHsKLSAgICAgIC8vIEFsc28gaGFuZGxlcyB1bmRlZmluZWQsIHNp
bmNlIHVuZGVmaW5lZCA9PSBudWxsLgotICAgICAgdGhpcy5lbmNvZGVQb2ludGVyKHZhbCk7Ci0g
ICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgdmFyIG51bWJlck9mRWxlbWVudHMgPSB2YWwubGVu
Z3RoOwotICAgIGlmICghTnVtYmVyLmlzU2FmZUludGVnZXIobnVtYmVyT2ZFbGVtZW50cykgfHwg
bnVtYmVyT2ZFbGVtZW50cyA8IDApCi0gICAgICB0aHJvdyBuZXcgRXJyb3Ioa0Vycm9yQXJyYXkp
OwotCi0gICAgdmFyIGVuY29kZWRTaXplID0ga0FycmF5SGVhZGVyU2l6ZSArICgoY2xzID09PSBQ
YWNrZWRCb29sKSA/Ci0gICAgICAgIE1hdGguY2VpbChudW1iZXJPZkVsZW1lbnRzIC8gOCkgOiBj
bHMuZW5jb2RlZFNpemUgKiBudW1iZXJPZkVsZW1lbnRzKTsKLSAgICB2YXIgZW5jb2RlciA9IHRo
aXMuY3JlYXRlQW5kRW5jb2RlRW5jb2RlcihlbmNvZGVkU2l6ZSk7Ci0gICAgZW5jb2Rlci5lbmNv
ZGVBcnJheShjbHMsIHZhbCwgbnVtYmVyT2ZFbGVtZW50cywgZW5jb2RlZFNpemUpOwotICB9Owot
Ci0gIEVuY29kZXIucHJvdG90eXBlLmVuY29kZVN0cmluZ1BvaW50ZXIgPSBmdW5jdGlvbih2YWwp
IHsKLSAgICBpZiAodmFsID09IG51bGwpIHsKLSAgICAgIC8vIEFsc28gaGFuZGxlcyB1bmRlZmlu
ZWQsIHNpbmNlIHVuZGVmaW5lZCA9PSBudWxsLgotICAgICAgdGhpcy5lbmNvZGVQb2ludGVyKHZh
bCk7Ci0gICAgICByZXR1cm47Ci0gICAgfQotICAgIC8vIE9ubHkgYWNjZXB0cyBzdHJpbmcgcHJp
bWl2aXRlcywgbm90IFN0cmluZyBPYmplY3RzIGxpa2UgbmV3IFN0cmluZygiZm9vIikKLSAgICBp
ZiAodHlwZW9mKHZhbCkgIT09ICJzdHJpbmciKSB7Ci0gICAgICB0aHJvdyBuZXcgRXJyb3Ioa0Vy
cm9yU3RyaW5nKTsKLSAgICB9Ci0gICAgdmFyIGVuY29kZWRTaXplID0ga0FycmF5SGVhZGVyU2l6
ZSArIGludGVybmFsLnV0ZjhMZW5ndGgodmFsKTsKLSAgICB2YXIgZW5jb2RlciA9IHRoaXMuY3Jl
YXRlQW5kRW5jb2RlRW5jb2RlcihlbmNvZGVkU2l6ZSk7Ci0gICAgZW5jb2Rlci5lbmNvZGVTdHJp
bmcodmFsKTsKLSAgfTsKLQotICBFbmNvZGVyLnByb3RvdHlwZS5lbmNvZGVNYXAgPSBmdW5jdGlv
bihrZXlDbGFzcywgdmFsdWVDbGFzcywgdmFsKSB7Ci0gICAgdmFyIGtleXMgPSBuZXcgQXJyYXko
dmFsLnNpemUpOwotICAgIHZhciB2YWx1ZXMgPSBuZXcgQXJyYXkodmFsLnNpemUpOwotICAgIHZh
ciBpID0gMDsKLSAgICB2YWwuZm9yRWFjaChmdW5jdGlvbih2YWx1ZSwga2V5KSB7Ci0gICAgICB2
YWx1ZXNbaV0gPSB2YWx1ZTsKLSAgICAgIGtleXNbaSsrXSA9IGtleTsKLSAgICB9KTsKLSAgICB0
aGlzLndyaXRlVWludDMyKGtTdHJ1Y3RIZWFkZXJTaXplICsga01hcFN0cnVjdFBheWxvYWRTaXpl
KTsKLSAgICB0aGlzLndyaXRlVWludDMyKDApOyAgLy8gdmVyc2lvbgotICAgIHRoaXMuZW5jb2Rl
QXJyYXlQb2ludGVyKGtleUNsYXNzLCBrZXlzKTsKLSAgICB0aGlzLmVuY29kZUFycmF5UG9pbnRl
cih2YWx1ZUNsYXNzLCB2YWx1ZXMpOwotICB9Ci0KLSAgRW5jb2Rlci5wcm90b3R5cGUuZW5jb2Rl
TWFwUG9pbnRlciA9IGZ1bmN0aW9uKGtleUNsYXNzLCB2YWx1ZUNsYXNzLCB2YWwpIHsKLSAgICBp
ZiAodmFsID09IG51bGwpIHsKLSAgICAgIC8vIEFsc28gaGFuZGxlcyB1bmRlZmluZWQsIHNpbmNl
IHVuZGVmaW5lZCA9PSBudWxsLgotICAgICAgdGhpcy5lbmNvZGVQb2ludGVyKHZhbCk7Ci0gICAg
ICByZXR1cm47Ci0gICAgfQotICAgIGlmICghKHZhbCBpbnN0YW5jZW9mIE1hcCkpIHsKLSAgICAg
IHRocm93IG5ldyBFcnJvcihrRXJyb3JNYXApOwotICAgIH0KLSAgICB2YXIgZW5jb2RlZFNpemUg
PSBrU3RydWN0SGVhZGVyU2l6ZSArIGtNYXBTdHJ1Y3RQYXlsb2FkU2l6ZTsKLSAgICB2YXIgZW5j
b2RlciA9IHRoaXMuY3JlYXRlQW5kRW5jb2RlRW5jb2RlcihlbmNvZGVkU2l6ZSk7Ci0gICAgZW5j
b2Rlci5lbmNvZGVNYXAoa2V5Q2xhc3MsIHZhbHVlQ2xhc3MsIHZhbCk7Ci0gIH07Ci0KLSAgLy8g
TWVzc2FnZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0KLQotICB2YXIga01lc3NhZ2VJbnRlcmZhY2VJZE9mZnNldCA9IGtT
dHJ1Y3RIZWFkZXJTaXplOwotICB2YXIga01lc3NhZ2VOYW1lT2Zmc2V0ID0ga01lc3NhZ2VJbnRl
cmZhY2VJZE9mZnNldCArIDQ7Ci0gIHZhciBrTWVzc2FnZUZsYWdzT2Zmc2V0ID0ga01lc3NhZ2VO
YW1lT2Zmc2V0ICsgNDsKLSAgdmFyIGtNZXNzYWdlUmVxdWVzdElET2Zmc2V0ID0ga01lc3NhZ2VG
bGFnc09mZnNldCArIDg7Ci0gIHZhciBrTWVzc2FnZVBheWxvYWRJbnRlcmZhY2VJZHNQb2ludGVy
T2Zmc2V0ID0ga01lc3NhZ2VWMkhlYWRlclNpemUgLSA4OwotCi0gIHZhciBrTWVzc2FnZUV4cGVj
dHNSZXNwb25zZSA9IDEgPDwgMDsKLSAgdmFyIGtNZXNzYWdlSXNSZXNwb25zZSAgICAgID0gMSA8
PCAxOwotCi0gIGZ1bmN0aW9uIE1lc3NhZ2UoYnVmZmVyLCBoYW5kbGVzLCBhc3NvY2lhdGVkRW5k
cG9pbnRIYW5kbGVzKSB7Ci0gICAgaWYgKGFzc29jaWF0ZWRFbmRwb2ludEhhbmRsZXMgPT09IHVu
ZGVmaW5lZCkgewotICAgICAgYXNzb2NpYXRlZEVuZHBvaW50SGFuZGxlcyA9IFtdOwotICAgIH0K
LQotICAgIHRoaXMuYnVmZmVyID0gYnVmZmVyOwotICAgIHRoaXMuaGFuZGxlcyA9IGhhbmRsZXM7
Ci0gICAgdGhpcy5hc3NvY2lhdGVkRW5kcG9pbnRIYW5kbGVzID0gYXNzb2NpYXRlZEVuZHBvaW50
SGFuZGxlczsKLSAgfQotCi0gIE1lc3NhZ2UucHJvdG90eXBlLmdldEhlYWRlck51bUJ5dGVzID0g
ZnVuY3Rpb24oKSB7Ci0gICAgcmV0dXJuIHRoaXMuYnVmZmVyLmdldFVpbnQzMihrU3RydWN0SGVh
ZGVyTnVtQnl0ZXNPZmZzZXQpOwotICB9OwotCi0gIE1lc3NhZ2UucHJvdG90eXBlLmdldEhlYWRl
clZlcnNpb24gPSBmdW5jdGlvbigpIHsKLSAgICByZXR1cm4gdGhpcy5idWZmZXIuZ2V0VWludDMy
KGtTdHJ1Y3RIZWFkZXJWZXJzaW9uT2Zmc2V0KTsKLSAgfTsKLQotICBNZXNzYWdlLnByb3RvdHlw
ZS5nZXROYW1lID0gZnVuY3Rpb24oKSB7Ci0gICAgcmV0dXJuIHRoaXMuYnVmZmVyLmdldFVpbnQz
MihrTWVzc2FnZU5hbWVPZmZzZXQpOwotICB9OwotCi0gIE1lc3NhZ2UucHJvdG90eXBlLmdldEZs
YWdzID0gZnVuY3Rpb24oKSB7Ci0gICAgcmV0dXJuIHRoaXMuYnVmZmVyLmdldFVpbnQzMihrTWVz
c2FnZUZsYWdzT2Zmc2V0KTsKLSAgfTsKLQotICBNZXNzYWdlLnByb3RvdHlwZS5nZXRJbnRlcmZh
Y2VJZCA9IGZ1bmN0aW9uKCkgewotICAgIHJldHVybiB0aGlzLmJ1ZmZlci5nZXRVaW50MzIoa01l
c3NhZ2VJbnRlcmZhY2VJZE9mZnNldCk7Ci0gIH07Ci0KLSAgTWVzc2FnZS5wcm90b3R5cGUuZ2V0
UGF5bG9hZEludGVyZmFjZUlkcyA9IGZ1bmN0aW9uKCkgewotICAgIGlmICh0aGlzLmdldEhlYWRl
clZlcnNpb24oKSA8IDIpIHsKLSAgICAgIHJldHVybiBudWxsOwotICAgIH0KLQotICAgIHZhciBk
ZWNvZGVyID0gbmV3IERlY29kZXIodGhpcy5idWZmZXIsIHRoaXMuaGFuZGxlcywKLSAgICAgICAg
dGhpcy5hc3NvY2lhdGVkRW5kcG9pbnRIYW5kbGVzLAotICAgICAgICBrTWVzc2FnZVBheWxvYWRJ
bnRlcmZhY2VJZHNQb2ludGVyT2Zmc2V0KTsKLSAgICB2YXIgcGF5bG9hZEludGVyZmFjZUlkcyA9
IGRlY29kZXIuZGVjb2RlQXJyYXlQb2ludGVyKFVpbnQzMik7Ci0gICAgcmV0dXJuIHBheWxvYWRJ
bnRlcmZhY2VJZHM7Ci0gIH07Ci0KLSAgTWVzc2FnZS5wcm90b3R5cGUuaXNSZXNwb25zZSA9IGZ1
bmN0aW9uKCkgewotICAgIHJldHVybiAodGhpcy5nZXRGbGFncygpICYga01lc3NhZ2VJc1Jlc3Bv
bnNlKSAhPSAwOwotICB9OwotCi0gIE1lc3NhZ2UucHJvdG90eXBlLmV4cGVjdHNSZXNwb25zZSA9
IGZ1bmN0aW9uKCkgewotICAgIHJldHVybiAodGhpcy5nZXRGbGFncygpICYga01lc3NhZ2VFeHBl
Y3RzUmVzcG9uc2UpICE9IDA7Ci0gIH07Ci0KLSAgTWVzc2FnZS5wcm90b3R5cGUuc2V0UmVxdWVz
dElEID0gZnVuY3Rpb24ocmVxdWVzdElEKSB7Ci0gICAgLy8gVE9ETyhkYXJpbik6IFZlcmlmeSB0
aGF0IHNwYWNlIHdhcyByZXNlcnZlZCBmb3IgdGhpcyBmaWVsZCEKLSAgICB0aGlzLmJ1ZmZlci5z
ZXRVaW50NjQoa01lc3NhZ2VSZXF1ZXN0SURPZmZzZXQsIHJlcXVlc3RJRCk7Ci0gIH07Ci0KLSAg
TWVzc2FnZS5wcm90b3R5cGUuc2V0SW50ZXJmYWNlSWQgPSBmdW5jdGlvbihpbnRlcmZhY2VJZCkg
ewotICAgIHRoaXMuYnVmZmVyLnNldFVpbnQzMihrTWVzc2FnZUludGVyZmFjZUlkT2Zmc2V0LCBp
bnRlcmZhY2VJZCk7Ci0gIH07Ci0KLSAgTWVzc2FnZS5wcm90b3R5cGUuc2V0UGF5bG9hZEludGVy
ZmFjZUlkc18gPSBmdW5jdGlvbihwYXlsb2FkSW50ZXJmYWNlSWRzKSB7Ci0gICAgaWYgKHRoaXMu
Z2V0SGVhZGVyVmVyc2lvbigpIDwgMikgewotICAgICAgdGhyb3cgbmV3IEVycm9yKAotICAgICAg
ICAgICJWZXJzaW9uIG9mIG1lc3NhZ2UgZG9lcyBub3Qgc3VwcG9ydCBwYXlsb2FkIGludGVyZmFj
ZSBpZHMiKTsKLSAgICB9Ci0KLSAgICB2YXIgZGVjb2RlciA9IG5ldyBEZWNvZGVyKHRoaXMuYnVm
ZmVyLCB0aGlzLmhhbmRsZXMsCi0gICAgICAgIHRoaXMuYXNzb2NpYXRlZEVuZHBvaW50SGFuZGxl
cywKLSAgICAgICAga01lc3NhZ2VQYXlsb2FkSW50ZXJmYWNlSWRzUG9pbnRlck9mZnNldCk7Ci0g
ICAgdmFyIHBheWxvYWRJbnRlcmZhY2VJZHNPZmZzZXQgPSBkZWNvZGVyLmRlY29kZVBvaW50ZXIo
KTsKLSAgICB2YXIgZW5jb2RlciA9IG5ldyBFbmNvZGVyKHRoaXMuYnVmZmVyLCB0aGlzLmhhbmRs
ZXMsCi0gICAgICAgIHRoaXMuYXNzb2NpYXRlZEVuZHBvaW50SGFuZGxlcywKLSAgICAgICAgcGF5
bG9hZEludGVyZmFjZUlkc09mZnNldCk7Ci0gICAgZW5jb2Rlci5lbmNvZGVBcnJheShVaW50MzIs
IHBheWxvYWRJbnRlcmZhY2VJZHMpOwotICB9OwotCi0gIE1lc3NhZ2UucHJvdG90eXBlLnNlcmlh
bGl6ZUFzc29jaWF0ZWRFbmRwb2ludEhhbmRsZXMgPSBmdW5jdGlvbigKLSAgICAgIGFzc29jaWF0
ZWRHcm91cENvbnRyb2xsZXIpIHsKLSAgICBpZiAodGhpcy5hc3NvY2lhdGVkRW5kcG9pbnRIYW5k
bGVzLmxlbmd0aCA+IDApIHsKLSAgICAgIGlmICh0aGlzLmdldEhlYWRlclZlcnNpb24oKSA8IDIp
IHsKLSAgICAgICAgdGhyb3cgbmV3IEVycm9yKAotICAgICAgICAgICAgIlZlcnNpb24gb2YgbWVz
c2FnZSBkb2VzIG5vdCBzdXBwb3J0IGFzc29jaWF0ZWQgZW5kcG9pbnQgaGFuZGxlcyIpOwotICAg
ICAgfQotCi0gICAgICB2YXIgZGF0YSA9IFtdOwotICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0
aGlzLmFzc29jaWF0ZWRFbmRwb2ludEhhbmRsZXMubGVuZ3RoOyBpKyspIHsKLSAgICAgICAgdmFy
IGhhbmRsZSA9IHRoaXMuYXNzb2NpYXRlZEVuZHBvaW50SGFuZGxlc1tpXTsKLSAgICAgICAgZGF0
YS5wdXNoKGFzc29jaWF0ZWRHcm91cENvbnRyb2xsZXIuYXNzb2NpYXRlSW50ZXJmYWNlKGhhbmRs
ZSkpOwotICAgICAgfQotICAgICAgdGhpcy5hc3NvY2lhdGVkRW5kcG9pbnRIYW5kbGVzID0gW107
Ci0gICAgICB0aGlzLnNldFBheWxvYWRJbnRlcmZhY2VJZHNfKGRhdGEpOwotICAgIH0KLSAgfTsK
LQotICBNZXNzYWdlLnByb3RvdHlwZS5kZXNlcmlhbGl6ZUFzc29jaWF0ZWRFbmRwb2ludEhhbmRs
ZXMgPSBmdW5jdGlvbigKLSAgICAgIGFzc29jaWF0ZWRHcm91cENvbnRyb2xsZXIpIHsKLSAgICBp
ZiAodGhpcy5nZXRIZWFkZXJWZXJzaW9uKCkgPCAyKSB7Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAg
ICB9Ci0KLSAgICB0aGlzLmFzc29jaWF0ZWRFbmRwb2ludEhhbmRsZXMgPSBbXTsKLSAgICB2YXIg
aWRzID0gdGhpcy5nZXRQYXlsb2FkSW50ZXJmYWNlSWRzKCk7Ci0KLSAgICB2YXIgcmVzdWx0ID0g
dHJ1ZTsKLSAgICBmb3IgKHZhciBpID0gMDsgaSA8IGlkcy5sZW5ndGg7IGkrKykgewotICAgICAg
dmFyIGhhbmRsZSA9IGFzc29jaWF0ZWRHcm91cENvbnRyb2xsZXIuY3JlYXRlTG9jYWxFbmRwb2lu
dEhhbmRsZShpZHNbaV0pOwotICAgICAgaWYgKGludGVybmFsLmlzVmFsaWRJbnRlcmZhY2VJZChp
ZHNbaV0pICYmICFoYW5kbGUuaXNWYWxpZCgpKSB7Ci0gICAgICAgIC8vIHxpZHNbaV18IGl0c2Vs
ZiBpcyB2YWxpZCBidXQgaGFuZGxlIGNyZWF0aW9uIGZhaWxlZC4gSW4gdGhhdCBjYXNlLAotICAg
ICAgICAvLyBtYXJrIGRlc2VyaWFsaXphdGlvbiBhcyBmYWlsZWQgYnV0IGNvbnRpbnVlIHRvIGRl
c2VyaWFsaXplIHRoZQotICAgICAgICAvLyByZXN0IG9mIGhhbmRsZXMuCi0gICAgICAgIHJlc3Vs
dCA9IGZhbHNlOwotICAgICAgfQotICAgICAgdGhpcy5hc3NvY2lhdGVkRW5kcG9pbnRIYW5kbGVz
LnB1c2goaGFuZGxlKTsKLSAgICAgIGlkc1tpXSA9IGludGVybmFsLmtJbnZhbGlkSW50ZXJmYWNl
SWQ7Ci0gICAgfQotCi0gICAgdGhpcy5zZXRQYXlsb2FkSW50ZXJmYWNlSWRzXyhpZHMpOwotICAg
IHJldHVybiByZXN1bHQ7Ci0gIH07Ci0KLQotICAvLyBNZXNzYWdlVjBCdWlsZGVyIC0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0gIGZ1
bmN0aW9uIE1lc3NhZ2VWMEJ1aWxkZXIobWVzc2FnZU5hbWUsIHBheWxvYWRTaXplKSB7Ci0gICAg
Ly8gQ3VycmVudGx5LCB3ZSBkb24ndCBjb21wdXRlIHRoZSBwYXlsb2FkIHNpemUgY29ycmVjdGx5
IGFoZWFkIG9mIHRpbWUuCi0gICAgLy8gSW5zdGVhZCwgd2UgcmVzaXplIHRoZSBidWZmZXIgYXQg
dGhlIGVuZC4KLSAgICB2YXIgbnVtYmVyT2ZCeXRlcyA9IGtNZXNzYWdlVjBIZWFkZXJTaXplICsg
cGF5bG9hZFNpemU7Ci0gICAgdGhpcy5idWZmZXIgPSBuZXcgaW50ZXJuYWwuQnVmZmVyKG51bWJl
ck9mQnl0ZXMpOwotICAgIHRoaXMuaGFuZGxlcyA9IFtdOwotICAgIHZhciBlbmNvZGVyID0gdGhp
cy5jcmVhdGVFbmNvZGVyKGtNZXNzYWdlVjBIZWFkZXJTaXplKTsKLSAgICBlbmNvZGVyLndyaXRl
VWludDMyKGtNZXNzYWdlVjBIZWFkZXJTaXplKTsKLSAgICBlbmNvZGVyLndyaXRlVWludDMyKDAp
OyAgLy8gdmVyc2lvbi4KLSAgICBlbmNvZGVyLndyaXRlVWludDMyKDApOyAgLy8gaW50ZXJmYWNl
IElELgotICAgIGVuY29kZXIud3JpdGVVaW50MzIobWVzc2FnZU5hbWUpOwotICAgIGVuY29kZXIu
d3JpdGVVaW50MzIoMCk7ICAvLyBmbGFncy4KLSAgICBlbmNvZGVyLndyaXRlVWludDMyKDApOyAg
Ly8gcGFkZGluZy4KLSAgfQotCi0gIE1lc3NhZ2VWMEJ1aWxkZXIucHJvdG90eXBlLmNyZWF0ZUVu
Y29kZXIgPSBmdW5jdGlvbihzaXplKSB7Ci0gICAgdmFyIHBvaW50ZXIgPSB0aGlzLmJ1ZmZlci5h
bGxvYyhzaXplKTsKLSAgICByZXR1cm4gbmV3IEVuY29kZXIodGhpcy5idWZmZXIsIHRoaXMuaGFu
ZGxlcywgW10sIHBvaW50ZXIpOwotICB9OwotCi0gIE1lc3NhZ2VWMEJ1aWxkZXIucHJvdG90eXBl
LmVuY29kZVN0cnVjdCA9IGZ1bmN0aW9uKGNscywgdmFsKSB7Ci0gICAgY2xzLmVuY29kZSh0aGlz
LmNyZWF0ZUVuY29kZXIoY2xzLmVuY29kZWRTaXplKSwgdmFsKTsKLSAgfTsKLQotICBNZXNzYWdl
VjBCdWlsZGVyLnByb3RvdHlwZS5maW5pc2ggPSBmdW5jdGlvbigpIHsKLSAgICAvLyBUT0RPKGFi
YXJ0aCk6IFJhdGhlciB0aGFuIHJlc2l6aW5nIHRoZSBidWZmZXIgYXQgdGhlIGVuZCwgd2UgY291
bGQKLSAgICAvLyBjb21wdXRlIHRoZSBzaXplIHdlIG5lZWQgYWhlYWQgb2YgdGltZSwgbGlrZSB3
ZSBkbyBpbiBDKysuCi0gICAgdGhpcy5idWZmZXIudHJpbSgpOwotICAgIHZhciBtZXNzYWdlID0g
bmV3IE1lc3NhZ2UodGhpcy5idWZmZXIsIHRoaXMuaGFuZGxlcyk7Ci0gICAgdGhpcy5idWZmZXIg
PSBudWxsOwotICAgIHRoaXMuaGFuZGxlcyA9IG51bGw7Ci0gICAgdGhpcy5lbmNvZGVyID0gbnVs
bDsKLSAgICByZXR1cm4gbWVzc2FnZTsKLSAgfTsKLQotICAvLyBNZXNzYWdlVjFCdWlsZGVyIC0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLSAgZnVuY3Rp
b24gTWVzc2FnZVYxQnVpbGRlcihtZXNzYWdlTmFtZSwgcGF5bG9hZFNpemUsIGZsYWdzLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdElEKSB7Ci0gICAgLy8g
Q3VycmVudGx5LCB3ZSBkb24ndCBjb21wdXRlIHRoZSBwYXlsb2FkIHNpemUgY29ycmVjdGx5IGFo
ZWFkIG9mIHRpbWUuCi0gICAgLy8gSW5zdGVhZCwgd2UgcmVzaXplIHRoZSBidWZmZXIgYXQgdGhl
IGVuZC4KLSAgICB2YXIgbnVtYmVyT2ZCeXRlcyA9IGtNZXNzYWdlVjFIZWFkZXJTaXplICsgcGF5
bG9hZFNpemU7Ci0gICAgdGhpcy5idWZmZXIgPSBuZXcgaW50ZXJuYWwuQnVmZmVyKG51bWJlck9m
Qnl0ZXMpOwotICAgIHRoaXMuaGFuZGxlcyA9IFtdOwotICAgIHZhciBlbmNvZGVyID0gdGhpcy5j
cmVhdGVFbmNvZGVyKGtNZXNzYWdlVjFIZWFkZXJTaXplKTsKLSAgICBlbmNvZGVyLndyaXRlVWlu
dDMyKGtNZXNzYWdlVjFIZWFkZXJTaXplKTsKLSAgICBlbmNvZGVyLndyaXRlVWludDMyKDEpOyAg
Ly8gdmVyc2lvbi4KLSAgICBlbmNvZGVyLndyaXRlVWludDMyKDApOyAgLy8gaW50ZXJmYWNlIElE
LgotICAgIGVuY29kZXIud3JpdGVVaW50MzIobWVzc2FnZU5hbWUpOwotICAgIGVuY29kZXIud3Jp
dGVVaW50MzIoZmxhZ3MpOwotICAgIGVuY29kZXIud3JpdGVVaW50MzIoMCk7ICAvLyBwYWRkaW5n
LgotICAgIGVuY29kZXIud3JpdGVVaW50NjQocmVxdWVzdElEKTsKLSAgfQotCi0gIE1lc3NhZ2VW
MUJ1aWxkZXIucHJvdG90eXBlID0KLSAgICAgIE9iamVjdC5jcmVhdGUoTWVzc2FnZVYwQnVpbGRl
ci5wcm90b3R5cGUpOwotCi0gIE1lc3NhZ2VWMUJ1aWxkZXIucHJvdG90eXBlLmNvbnN0cnVjdG9y
ID0KLSAgICAgIE1lc3NhZ2VWMUJ1aWxkZXI7Ci0KLSAgLy8gTWVzc2FnZVYyIC0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLSAgZnVuY3Rpb24gTWVzc2Fn
ZVYyQnVpbGRlcihtZXNzYWdlTmFtZSwgcGF5bG9hZFNpemUsIGZsYWdzLCByZXF1ZXN0SUQpIHsK
LSAgICAvLyBDdXJyZW50bHksIHdlIGRvbid0IGNvbXB1dGUgdGhlIHBheWxvYWQgc2l6ZSBjb3Jy
ZWN0bHkgYWhlYWQgb2YgdGltZS4KLSAgICAvLyBJbnN0ZWFkLCB3ZSByZXNpemUgdGhlIGJ1ZmZl
ciBhdCB0aGUgZW5kLgotICAgIHZhciBudW1iZXJPZkJ5dGVzID0ga01lc3NhZ2VWMkhlYWRlclNp
emUgKyBwYXlsb2FkU2l6ZTsKLSAgICB0aGlzLmJ1ZmZlciA9IG5ldyBpbnRlcm5hbC5CdWZmZXIo
bnVtYmVyT2ZCeXRlcyk7Ci0gICAgdGhpcy5oYW5kbGVzID0gW107Ci0KLSAgICB0aGlzLnBheWxv
YWQgPSBudWxsOwotICAgIHRoaXMuYXNzb2NpYXRlZEVuZHBvaW50SGFuZGxlcyA9IFtdOwotCi0g
ICAgdGhpcy5lbmNvZGVyID0gdGhpcy5jcmVhdGVFbmNvZGVyKGtNZXNzYWdlVjJIZWFkZXJTaXpl
KTsKLSAgICB0aGlzLmVuY29kZXIud3JpdGVVaW50MzIoa01lc3NhZ2VWMkhlYWRlclNpemUpOwot
ICAgIHRoaXMuZW5jb2Rlci53cml0ZVVpbnQzMigyKTsgIC8vIHZlcnNpb24uCi0gICAgLy8gR2V0
cyBzZXQgdG8gYW4gYXBwcm9wcmlhdGUgaW50ZXJmYWNlSWQgZm9yIHRoZSBlbmRwb2ludCBieSB0
aGUgUm91dGVyLgotICAgIHRoaXMuZW5jb2Rlci53cml0ZVVpbnQzMigwKTsgIC8vIGludGVyZmFj
ZSBJRC4KLSAgICB0aGlzLmVuY29kZXIud3JpdGVVaW50MzIobWVzc2FnZU5hbWUpOwotICAgIHRo
aXMuZW5jb2Rlci53cml0ZVVpbnQzMihmbGFncyk7Ci0gICAgdGhpcy5lbmNvZGVyLndyaXRlVWlu
dDMyKDApOyAgLy8gcGFkZGluZy4KLSAgICB0aGlzLmVuY29kZXIud3JpdGVVaW50NjQocmVxdWVz
dElEKTsKLSAgfQotCi0gIE1lc3NhZ2VWMkJ1aWxkZXIucHJvdG90eXBlLmNyZWF0ZUVuY29kZXIg
PSBmdW5jdGlvbihzaXplKSB7Ci0gICAgdmFyIHBvaW50ZXIgPSB0aGlzLmJ1ZmZlci5hbGxvYyhz
aXplKTsKLSAgICByZXR1cm4gbmV3IEVuY29kZXIodGhpcy5idWZmZXIsIHRoaXMuaGFuZGxlcywK
LSAgICAgICAgdGhpcy5hc3NvY2lhdGVkRW5kcG9pbnRIYW5kbGVzLCBwb2ludGVyKTsKLSAgfTsK
LQotICBNZXNzYWdlVjJCdWlsZGVyLnByb3RvdHlwZS5zZXRQYXlsb2FkID0gZnVuY3Rpb24oY2xz
LCB2YWwpIHsKLSAgICB0aGlzLnBheWxvYWQgPSB7Y2xzOiBjbHMsIHZhbDogdmFsfTsKLSAgfTsK
LQotICBNZXNzYWdlVjJCdWlsZGVyLnByb3RvdHlwZS5maW5pc2ggPSBmdW5jdGlvbigpIHsKLSAg
ICBpZiAoIXRoaXMucGF5bG9hZCkgewotICAgICAgdGhyb3cgbmV3IEVycm9yKCJQYXlsb2FkIG5l
ZWRzIHRvIGJlIHNldCBiZWZvcmUgY2FsbGluZyBmaW5pc2giKTsKLSAgICB9Ci0KLSAgICB0aGlz
LmVuY29kZXIuZW5jb2RlU3RydWN0UG9pbnRlcih0aGlzLnBheWxvYWQuY2xzLCB0aGlzLnBheWxv
YWQudmFsKTsKLSAgICB0aGlzLmVuY29kZXIuZW5jb2RlQXJyYXlQb2ludGVyKFVpbnQzMiwKLSAg
ICAgICAgbmV3IEFycmF5KHRoaXMuYXNzb2NpYXRlZEVuZHBvaW50SGFuZGxlcy5sZW5ndGgpKTsK
LQotICAgIHRoaXMuYnVmZmVyLnRyaW0oKTsKLSAgICB2YXIgbWVzc2FnZSA9IG5ldyBNZXNzYWdl
KHRoaXMuYnVmZmVyLCB0aGlzLmhhbmRsZXMsCi0gICAgICAgIHRoaXMuYXNzb2NpYXRlZEVuZHBv
aW50SGFuZGxlcyk7Ci0gICAgdGhpcy5idWZmZXIgPSBudWxsOwotICAgIHRoaXMuaGFuZGxlcyA9
IG51bGw7Ci0gICAgdGhpcy5lbmNvZGVyID0gbnVsbDsKLSAgICB0aGlzLnBheWxvYWQgPSBudWxs
OwotICAgIHRoaXMuYXNzb2NpYXRlZEVuZHBvaW50SGFuZGxlcyA9IG51bGw7Ci0KLSAgICByZXR1
cm4gbWVzc2FnZTsKLSAgfTsKLQotICAvLyBNZXNzYWdlUmVhZGVyIC0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0gIGZ1bmN0aW9u
IE1lc3NhZ2VSZWFkZXIobWVzc2FnZSkgewotICAgIHRoaXMuZGVjb2RlciA9IG5ldyBEZWNvZGVy
KG1lc3NhZ2UuYnVmZmVyLCBtZXNzYWdlLmhhbmRsZXMsCi0gICAgICAgIG1lc3NhZ2UuYXNzb2Np
YXRlZEVuZHBvaW50SGFuZGxlcywgMCk7Ci0gICAgdmFyIG1lc3NhZ2VIZWFkZXJTaXplID0gdGhp
cy5kZWNvZGVyLnJlYWRVaW50MzIoKTsKLSAgICB0aGlzLnBheWxvYWRTaXplID0gbWVzc2FnZS5i
dWZmZXIuYnl0ZUxlbmd0aCAtIG1lc3NhZ2VIZWFkZXJTaXplOwotICAgIHZhciB2ZXJzaW9uID0g
dGhpcy5kZWNvZGVyLnJlYWRVaW50MzIoKTsKLSAgICB2YXIgaW50ZXJmYWNlX2lkID0gdGhpcy5k
ZWNvZGVyLnJlYWRVaW50MzIoKTsKLSAgICB0aGlzLm1lc3NhZ2VOYW1lID0gdGhpcy5kZWNvZGVy
LnJlYWRVaW50MzIoKTsKLSAgICB0aGlzLmZsYWdzID0gdGhpcy5kZWNvZGVyLnJlYWRVaW50MzIo
KTsKLSAgICAvLyBTa2lwIHRoZSBwYWRkaW5nLgotICAgIHRoaXMuZGVjb2Rlci5za2lwKDQpOwot
ICAgIGlmICh2ZXJzaW9uID49IDEpCi0gICAgICB0aGlzLnJlcXVlc3RJRCA9IHRoaXMuZGVjb2Rl
ci5yZWFkVWludDY0KCk7Ci0gICAgdGhpcy5kZWNvZGVyLnNraXAobWVzc2FnZUhlYWRlclNpemUg
LSB0aGlzLmRlY29kZXIubmV4dCk7Ci0gIH0KLQotICBNZXNzYWdlUmVhZGVyLnByb3RvdHlwZS5k
ZWNvZGVTdHJ1Y3QgPSBmdW5jdGlvbihjbHMpIHsKLSAgICByZXR1cm4gY2xzLmRlY29kZSh0aGlz
LmRlY29kZXIpOwotICB9OwotCi0gIC8vIEJ1aWx0LWluIHR5cGVzIC0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLSAgLy8gVGhpcyB0
eXBlIGlzIG9ubHkgdXNlZCB3aXRoIEFycmF5T2YoUGFja2VkQm9vbCkuCi0gIGZ1bmN0aW9uIFBh
Y2tlZEJvb2woKSB7Ci0gIH0KLQotICBmdW5jdGlvbiBJbnQ4KCkgewotICB9Ci0KLSAgSW50OC5l
bmNvZGVkU2l6ZSA9IDE7Ci0KLSAgSW50OC5kZWNvZGUgPSBmdW5jdGlvbihkZWNvZGVyKSB7Ci0g
ICAgcmV0dXJuIGRlY29kZXIucmVhZEludDgoKTsKLSAgfTsKLQotICBJbnQ4LmVuY29kZSA9IGZ1
bmN0aW9uKGVuY29kZXIsIHZhbCkgewotICAgIGVuY29kZXIud3JpdGVJbnQ4KHZhbCk7Ci0gIH07
Ci0KLSAgVWludDguZW5jb2RlID0gZnVuY3Rpb24oZW5jb2RlciwgdmFsKSB7Ci0gICAgZW5jb2Rl
ci53cml0ZVVpbnQ4KHZhbCk7Ci0gIH07Ci0KLSAgZnVuY3Rpb24gVWludDgoKSB7Ci0gIH0KLQot
ICBVaW50OC5lbmNvZGVkU2l6ZSA9IDE7Ci0KLSAgVWludDguZGVjb2RlID0gZnVuY3Rpb24oZGVj
b2RlcikgewotICAgIHJldHVybiBkZWNvZGVyLnJlYWRVaW50OCgpOwotICB9OwotCi0gIFVpbnQ4
LmVuY29kZSA9IGZ1bmN0aW9uKGVuY29kZXIsIHZhbCkgewotICAgIGVuY29kZXIud3JpdGVVaW50
OCh2YWwpOwotICB9OwotCi0gIGZ1bmN0aW9uIEludDE2KCkgewotICB9Ci0KLSAgSW50MTYuZW5j
b2RlZFNpemUgPSAyOwotCi0gIEludDE2LmRlY29kZSA9IGZ1bmN0aW9uKGRlY29kZXIpIHsKLSAg
ICByZXR1cm4gZGVjb2Rlci5yZWFkSW50MTYoKTsKLSAgfTsKLQotICBJbnQxNi5lbmNvZGUgPSBm
dW5jdGlvbihlbmNvZGVyLCB2YWwpIHsKLSAgICBlbmNvZGVyLndyaXRlSW50MTYodmFsKTsKLSAg
fTsKLQotICBmdW5jdGlvbiBVaW50MTYoKSB7Ci0gIH0KLQotICBVaW50MTYuZW5jb2RlZFNpemUg
PSAyOwotCi0gIFVpbnQxNi5kZWNvZGUgPSBmdW5jdGlvbihkZWNvZGVyKSB7Ci0gICAgcmV0dXJu
IGRlY29kZXIucmVhZFVpbnQxNigpOwotICB9OwotCi0gIFVpbnQxNi5lbmNvZGUgPSBmdW5jdGlv
bihlbmNvZGVyLCB2YWwpIHsKLSAgICBlbmNvZGVyLndyaXRlVWludDE2KHZhbCk7Ci0gIH07Ci0K
LSAgZnVuY3Rpb24gSW50MzIoKSB7Ci0gIH0KLQotICBJbnQzMi5lbmNvZGVkU2l6ZSA9IDQ7Ci0K
LSAgSW50MzIuZGVjb2RlID0gZnVuY3Rpb24oZGVjb2RlcikgewotICAgIHJldHVybiBkZWNvZGVy
LnJlYWRJbnQzMigpOwotICB9OwotCi0gIEludDMyLmVuY29kZSA9IGZ1bmN0aW9uKGVuY29kZXIs
IHZhbCkgewotICAgIGVuY29kZXIud3JpdGVJbnQzMih2YWwpOwotICB9OwotCi0gIGZ1bmN0aW9u
IFVpbnQzMigpIHsKLSAgfQotCi0gIFVpbnQzMi5lbmNvZGVkU2l6ZSA9IDQ7Ci0KLSAgVWludDMy
LmRlY29kZSA9IGZ1bmN0aW9uKGRlY29kZXIpIHsKLSAgICByZXR1cm4gZGVjb2Rlci5yZWFkVWlu
dDMyKCk7Ci0gIH07Ci0KLSAgVWludDMyLmVuY29kZSA9IGZ1bmN0aW9uKGVuY29kZXIsIHZhbCkg
ewotICAgIGVuY29kZXIud3JpdGVVaW50MzIodmFsKTsKLSAgfTsKLQotICBmdW5jdGlvbiBJbnQ2
NCgpIHsKLSAgfQotCi0gIEludDY0LmVuY29kZWRTaXplID0gODsKLQotICBJbnQ2NC5kZWNvZGUg
PSBmdW5jdGlvbihkZWNvZGVyKSB7Ci0gICAgcmV0dXJuIGRlY29kZXIucmVhZEludDY0KCk7Ci0g
IH07Ci0KLSAgSW50NjQuZW5jb2RlID0gZnVuY3Rpb24oZW5jb2RlciwgdmFsKSB7Ci0gICAgZW5j
b2Rlci53cml0ZUludDY0KHZhbCk7Ci0gIH07Ci0KLSAgZnVuY3Rpb24gVWludDY0KCkgewotICB9
Ci0KLSAgVWludDY0LmVuY29kZWRTaXplID0gODsKLQotICBVaW50NjQuZGVjb2RlID0gZnVuY3Rp
b24oZGVjb2RlcikgewotICAgIHJldHVybiBkZWNvZGVyLnJlYWRVaW50NjQoKTsKLSAgfTsKLQot
ICBVaW50NjQuZW5jb2RlID0gZnVuY3Rpb24oZW5jb2RlciwgdmFsKSB7Ci0gICAgZW5jb2Rlci53
cml0ZVVpbnQ2NCh2YWwpOwotICB9OwotCi0gIGZ1bmN0aW9uIFN0cmluZygpIHsKLSAgfTsKLQot
ICBTdHJpbmcuZW5jb2RlZFNpemUgPSA4OwotCi0gIFN0cmluZy5kZWNvZGUgPSBmdW5jdGlvbihk
ZWNvZGVyKSB7Ci0gICAgcmV0dXJuIGRlY29kZXIuZGVjb2RlU3RyaW5nUG9pbnRlcigpOwotICB9
OwotCi0gIFN0cmluZy5lbmNvZGUgPSBmdW5jdGlvbihlbmNvZGVyLCB2YWwpIHsKLSAgICBlbmNv
ZGVyLmVuY29kZVN0cmluZ1BvaW50ZXIodmFsKTsKLSAgfTsKLQotICBmdW5jdGlvbiBOdWxsYWJs
ZVN0cmluZygpIHsKLSAgfQotCi0gIE51bGxhYmxlU3RyaW5nLmVuY29kZWRTaXplID0gU3RyaW5n
LmVuY29kZWRTaXplOwotCi0gIE51bGxhYmxlU3RyaW5nLmRlY29kZSA9IFN0cmluZy5kZWNvZGU7
Ci0KLSAgTnVsbGFibGVTdHJpbmcuZW5jb2RlID0gU3RyaW5nLmVuY29kZTsKLQotICBmdW5jdGlv
biBGbG9hdCgpIHsKLSAgfQotCi0gIEZsb2F0LmVuY29kZWRTaXplID0gNDsKLQotICBGbG9hdC5k
ZWNvZGUgPSBmdW5jdGlvbihkZWNvZGVyKSB7Ci0gICAgcmV0dXJuIGRlY29kZXIucmVhZEZsb2F0
KCk7Ci0gIH07Ci0KLSAgRmxvYXQuZW5jb2RlID0gZnVuY3Rpb24oZW5jb2RlciwgdmFsKSB7Ci0g
ICAgZW5jb2Rlci53cml0ZUZsb2F0KHZhbCk7Ci0gIH07Ci0KLSAgZnVuY3Rpb24gRG91YmxlKCkg
ewotICB9Ci0KLSAgRG91YmxlLmVuY29kZWRTaXplID0gODsKLQotICBEb3VibGUuZGVjb2RlID0g
ZnVuY3Rpb24oZGVjb2RlcikgewotICAgIHJldHVybiBkZWNvZGVyLnJlYWREb3VibGUoKTsKLSAg
fTsKLQotICBEb3VibGUuZW5jb2RlID0gZnVuY3Rpb24oZW5jb2RlciwgdmFsKSB7Ci0gICAgZW5j
b2Rlci53cml0ZURvdWJsZSh2YWwpOwotICB9OwotCi0gIGZ1bmN0aW9uIEVudW0oY2xzKSB7Ci0g
ICAgdGhpcy5jbHMgPSBjbHM7Ci0gIH0KLQotICBFbnVtLnByb3RvdHlwZS5lbmNvZGVkU2l6ZSA9
IDQ7Ci0KLSAgRW51bS5wcm90b3R5cGUuZGVjb2RlID0gZnVuY3Rpb24oZGVjb2RlcikgewotICAg
IHJldHVybiBkZWNvZGVyLnJlYWRJbnQzMigpOwotICB9OwotCi0gIEVudW0ucHJvdG90eXBlLmVu
Y29kZSA9IGZ1bmN0aW9uKGVuY29kZXIsIHZhbCkgewotICAgIGVuY29kZXIud3JpdGVJbnQzMih2
YWwpOwotICB9OwotCi0gIGZ1bmN0aW9uIFBvaW50ZXJUbyhjbHMpIHsKLSAgICB0aGlzLmNscyA9
IGNsczsKLSAgfQotCi0gIFBvaW50ZXJUby5wcm90b3R5cGUuZW5jb2RlZFNpemUgPSA4OwotCi0g
IFBvaW50ZXJUby5wcm90b3R5cGUuZGVjb2RlID0gZnVuY3Rpb24oZGVjb2RlcikgewotICAgIHZh
ciBwb2ludGVyID0gZGVjb2Rlci5kZWNvZGVQb2ludGVyKCk7Ci0gICAgaWYgKCFwb2ludGVyKSB7
Ci0gICAgICByZXR1cm4gbnVsbDsKLSAgICB9Ci0gICAgcmV0dXJuIHRoaXMuY2xzLmRlY29kZShk
ZWNvZGVyLmRlY29kZUFuZENyZWF0ZURlY29kZXIocG9pbnRlcikpOwotICB9OwotCi0gIFBvaW50
ZXJUby5wcm90b3R5cGUuZW5jb2RlID0gZnVuY3Rpb24oZW5jb2RlciwgdmFsKSB7Ci0gICAgaWYg
KCF2YWwpIHsKLSAgICAgIGVuY29kZXIuZW5jb2RlUG9pbnRlcih2YWwpOwotICAgICAgcmV0dXJu
OwotICAgIH0KLSAgICB2YXIgb2JqZWN0RW5jb2RlciA9IGVuY29kZXIuY3JlYXRlQW5kRW5jb2Rl
RW5jb2Rlcih0aGlzLmNscy5lbmNvZGVkU2l6ZSk7Ci0gICAgdGhpcy5jbHMuZW5jb2RlKG9iamVj
dEVuY29kZXIsIHZhbCk7Ci0gIH07Ci0KLSAgZnVuY3Rpb24gTnVsbGFibGVQb2ludGVyVG8oY2xz
KSB7Ci0gICAgUG9pbnRlclRvLmNhbGwodGhpcywgY2xzKTsKLSAgfQotCi0gIE51bGxhYmxlUG9p
bnRlclRvLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoUG9pbnRlclRvLnByb3RvdHlwZSk7Ci0K
LSAgZnVuY3Rpb24gQXJyYXlPZihjbHMsIGxlbmd0aCkgewotICAgIHRoaXMuY2xzID0gY2xzOwot
ICAgIHRoaXMubGVuZ3RoID0gbGVuZ3RoIHx8IDA7Ci0gIH0KLQotICBBcnJheU9mLnByb3RvdHlw
ZS5lbmNvZGVkU2l6ZSA9IDg7Ci0KLSAgQXJyYXlPZi5wcm90b3R5cGUuZGltZW5zaW9ucyA9IGZ1
bmN0aW9uKCkgewotICAgIHJldHVybiBbdGhpcy5sZW5ndGhdLmNvbmNhdCgKLSAgICAgICh0aGlz
LmNscyBpbnN0YW5jZW9mIEFycmF5T2YpID8gdGhpcy5jbHMuZGltZW5zaW9ucygpIDogW10pOwot
ICB9Ci0KLSAgQXJyYXlPZi5wcm90b3R5cGUuZGVjb2RlID0gZnVuY3Rpb24oZGVjb2Rlcikgewot
ICAgIHJldHVybiBkZWNvZGVyLmRlY29kZUFycmF5UG9pbnRlcih0aGlzLmNscyk7Ci0gIH07Ci0K
LSAgQXJyYXlPZi5wcm90b3R5cGUuZW5jb2RlID0gZnVuY3Rpb24oZW5jb2RlciwgdmFsKSB7Ci0g
ICAgZW5jb2Rlci5lbmNvZGVBcnJheVBvaW50ZXIodGhpcy5jbHMsIHZhbCk7Ci0gIH07Ci0KLSAg
ZnVuY3Rpb24gTnVsbGFibGVBcnJheU9mKGNscykgewotICAgIEFycmF5T2YuY2FsbCh0aGlzLCBj
bHMpOwotICB9Ci0KLSAgTnVsbGFibGVBcnJheU9mLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUo
QXJyYXlPZi5wcm90b3R5cGUpOwotCi0gIGZ1bmN0aW9uIEhhbmRsZSgpIHsKLSAgfQotCi0gIEhh
bmRsZS5lbmNvZGVkU2l6ZSA9IDQ7Ci0KLSAgSGFuZGxlLmRlY29kZSA9IGZ1bmN0aW9uKGRlY29k
ZXIpIHsKLSAgICByZXR1cm4gZGVjb2Rlci5kZWNvZGVIYW5kbGUoKTsKLSAgfTsKLQotICBIYW5k
bGUuZW5jb2RlID0gZnVuY3Rpb24oZW5jb2RlciwgdmFsKSB7Ci0gICAgZW5jb2Rlci5lbmNvZGVI
YW5kbGUodmFsKTsKLSAgfTsKLQotICBmdW5jdGlvbiBOdWxsYWJsZUhhbmRsZSgpIHsKLSAgfQot
Ci0gIE51bGxhYmxlSGFuZGxlLmVuY29kZWRTaXplID0gSGFuZGxlLmVuY29kZWRTaXplOwotCi0g
IE51bGxhYmxlSGFuZGxlLmRlY29kZSA9IEhhbmRsZS5kZWNvZGU7Ci0KLSAgTnVsbGFibGVIYW5k
bGUuZW5jb2RlID0gSGFuZGxlLmVuY29kZTsKLQotICBmdW5jdGlvbiBJbnRlcmZhY2UoY2xzKSB7
Ci0gICAgdGhpcy5jbHMgPSBjbHM7Ci0gIH0KLQotICBJbnRlcmZhY2UucHJvdG90eXBlLmVuY29k
ZWRTaXplID0gODsKLQotICBJbnRlcmZhY2UucHJvdG90eXBlLmRlY29kZSA9IGZ1bmN0aW9uKGRl
Y29kZXIpIHsKLSAgICB2YXIgaW50ZXJmYWNlUHRySW5mbyA9IG5ldyBtb2pvLkludGVyZmFjZVB0
ckluZm8oCi0gICAgICAgIGRlY29kZXIuZGVjb2RlSGFuZGxlKCksIGRlY29kZXIucmVhZFVpbnQz
MigpKTsKLSAgICB2YXIgaW50ZXJmYWNlUHRyID0gbmV3IHRoaXMuY2xzKCk7Ci0gICAgaW50ZXJm
YWNlUHRyLnB0ci5iaW5kKGludGVyZmFjZVB0ckluZm8pOwotICAgIHJldHVybiBpbnRlcmZhY2VQ
dHI7Ci0gIH07Ci0KLSAgSW50ZXJmYWNlLnByb3RvdHlwZS5lbmNvZGUgPSBmdW5jdGlvbihlbmNv
ZGVyLCB2YWwpIHsKLSAgICB2YXIgaW50ZXJmYWNlUHRySW5mbyA9Ci0gICAgICAgIHZhbCA/IHZh
bC5wdHIucGFzc0ludGVyZmFjZSgpIDogbmV3IG1vam8uSW50ZXJmYWNlUHRySW5mbyhudWxsLCAw
KTsKLSAgICBlbmNvZGVyLmVuY29kZUhhbmRsZShpbnRlcmZhY2VQdHJJbmZvLmhhbmRsZSk7Ci0g
ICAgZW5jb2Rlci53cml0ZVVpbnQzMihpbnRlcmZhY2VQdHJJbmZvLnZlcnNpb24pOwotICB9Owot
Ci0gIGZ1bmN0aW9uIE51bGxhYmxlSW50ZXJmYWNlKGNscykgewotICAgIEludGVyZmFjZS5jYWxs
KHRoaXMsIGNscyk7Ci0gIH0KLQotICBOdWxsYWJsZUludGVyZmFjZS5wcm90b3R5cGUgPSBPYmpl
Y3QuY3JlYXRlKEludGVyZmFjZS5wcm90b3R5cGUpOwotCi0gIGZ1bmN0aW9uIEFzc29jaWF0ZWRJ
bnRlcmZhY2VQdHJJbmZvKCkgewotICB9Ci0KLSAgQXNzb2NpYXRlZEludGVyZmFjZVB0ckluZm8u
cHJvdG90eXBlLmVuY29kZWRTaXplID0gODsKLQotICBBc3NvY2lhdGVkSW50ZXJmYWNlUHRySW5m
by5kZWNvZGUgPSBmdW5jdGlvbihkZWNvZGVyKSB7Ci0gICAgcmV0dXJuIG5ldyBtb2pvLkFzc29j
aWF0ZWRJbnRlcmZhY2VQdHJJbmZvKAotICAgICAgZGVjb2Rlci5kZWNvZGVBc3NvY2lhdGVkRW5k
cG9pbnRIYW5kbGUoKSwgZGVjb2Rlci5yZWFkVWludDMyKCkpOwotICB9OwotCi0gIEFzc29jaWF0
ZWRJbnRlcmZhY2VQdHJJbmZvLmVuY29kZSA9IGZ1bmN0aW9uKGVuY29kZXIsIHZhbCkgewotICAg
IHZhciBhc3NvY2lhdGVkaW50ZXJmYWNlUHRySW5mbyA9Ci0gICAgICAgIHZhbCA/IHZhbCA6IG5l
dyBtb2pvLkFzc29jaWF0ZWRJbnRlcmZhY2VQdHJJbmZvKG51bGwsIDApOwotICAgIGVuY29kZXIu
ZW5jb2RlQXNzb2NpYXRlZEVuZHBvaW50SGFuZGxlKAotICAgICAgICBhc3NvY2lhdGVkaW50ZXJm
YWNlUHRySW5mby5pbnRlcmZhY2VFbmRwb2ludEhhbmRsZSk7Ci0gICAgZW5jb2Rlci53cml0ZVVp
bnQzMihhc3NvY2lhdGVkaW50ZXJmYWNlUHRySW5mby52ZXJzaW9uKTsKLSAgfTsKLQotICBmdW5j
dGlvbiBOdWxsYWJsZUFzc29jaWF0ZWRJbnRlcmZhY2VQdHJJbmZvKCkgewotICB9Ci0KLSAgTnVs
bGFibGVBc3NvY2lhdGVkSW50ZXJmYWNlUHRySW5mby5lbmNvZGVkU2l6ZSA9Ci0gICAgICBBc3Nv
Y2lhdGVkSW50ZXJmYWNlUHRySW5mby5lbmNvZGVkU2l6ZTsKLQotICBOdWxsYWJsZUFzc29jaWF0
ZWRJbnRlcmZhY2VQdHJJbmZvLmRlY29kZSA9Ci0gICAgICBBc3NvY2lhdGVkSW50ZXJmYWNlUHRy
SW5mby5kZWNvZGU7Ci0KLSAgTnVsbGFibGVBc3NvY2lhdGVkSW50ZXJmYWNlUHRySW5mby5lbmNv
ZGUgPQotICAgICAgQXNzb2NpYXRlZEludGVyZmFjZVB0ckluZm8uZW5jb2RlOwotCi0gIGZ1bmN0
aW9uIEludGVyZmFjZVJlcXVlc3QoKSB7Ci0gIH0KLQotICBJbnRlcmZhY2VSZXF1ZXN0LmVuY29k
ZWRTaXplID0gNDsKLQotICBJbnRlcmZhY2VSZXF1ZXN0LmRlY29kZSA9IGZ1bmN0aW9uKGRlY29k
ZXIpIHsKLSAgICByZXR1cm4gbmV3IG1vam8uSW50ZXJmYWNlUmVxdWVzdChkZWNvZGVyLmRlY29k
ZUhhbmRsZSgpKTsKLSAgfTsKLQotICBJbnRlcmZhY2VSZXF1ZXN0LmVuY29kZSA9IGZ1bmN0aW9u
KGVuY29kZXIsIHZhbCkgewotICAgIGVuY29kZXIuZW5jb2RlSGFuZGxlKHZhbCA/IHZhbC5oYW5k
bGUgOiBudWxsKTsKLSAgfTsKLQotICBmdW5jdGlvbiBOdWxsYWJsZUludGVyZmFjZVJlcXVlc3Qo
KSB7Ci0gIH0KLQotICBOdWxsYWJsZUludGVyZmFjZVJlcXVlc3QuZW5jb2RlZFNpemUgPSBJbnRl
cmZhY2VSZXF1ZXN0LmVuY29kZWRTaXplOwotCi0gIE51bGxhYmxlSW50ZXJmYWNlUmVxdWVzdC5k
ZWNvZGUgPSBJbnRlcmZhY2VSZXF1ZXN0LmRlY29kZTsKLQotICBOdWxsYWJsZUludGVyZmFjZVJl
cXVlc3QuZW5jb2RlID0gSW50ZXJmYWNlUmVxdWVzdC5lbmNvZGU7Ci0KLSAgZnVuY3Rpb24gQXNz
b2NpYXRlZEludGVyZmFjZVJlcXVlc3QoKSB7Ci0gIH0KLQotICBBc3NvY2lhdGVkSW50ZXJmYWNl
UmVxdWVzdC5kZWNvZGUgPSBmdW5jdGlvbihkZWNvZGVyKSB7Ci0gICAgdmFyIGhhbmRsZSA9IGRl
Y29kZXIuZGVjb2RlQXNzb2NpYXRlZEVuZHBvaW50SGFuZGxlKCk7Ci0gICAgcmV0dXJuIG5ldyBt
b2pvLkFzc29jaWF0ZWRJbnRlcmZhY2VSZXF1ZXN0KGhhbmRsZSk7Ci0gIH07Ci0KLSAgQXNzb2Np
YXRlZEludGVyZmFjZVJlcXVlc3QuZW5jb2RlID0gZnVuY3Rpb24oZW5jb2RlciwgdmFsKSB7Ci0g
ICAgZW5jb2Rlci5lbmNvZGVBc3NvY2lhdGVkRW5kcG9pbnRIYW5kbGUoCi0gICAgICAgIHZhbCA/
IHZhbC5pbnRlcmZhY2VFbmRwb2ludEhhbmRsZSA6IG51bGwpOwotICB9OwotCi0gIEFzc29jaWF0
ZWRJbnRlcmZhY2VSZXF1ZXN0LmVuY29kZWRTaXplID0gNDsKLQotICBmdW5jdGlvbiBOdWxsYWJs
ZUFzc29jaWF0ZWRJbnRlcmZhY2VSZXF1ZXN0KCkgewotICB9Ci0KLSAgTnVsbGFibGVBc3NvY2lh
dGVkSW50ZXJmYWNlUmVxdWVzdC5lbmNvZGVkU2l6ZSA9Ci0gICAgICBBc3NvY2lhdGVkSW50ZXJm
YWNlUmVxdWVzdC5lbmNvZGVkU2l6ZTsKLQotICBOdWxsYWJsZUFzc29jaWF0ZWRJbnRlcmZhY2VS
ZXF1ZXN0LmRlY29kZSA9Ci0gICAgICBBc3NvY2lhdGVkSW50ZXJmYWNlUmVxdWVzdC5kZWNvZGU7
Ci0KLSAgTnVsbGFibGVBc3NvY2lhdGVkSW50ZXJmYWNlUmVxdWVzdC5lbmNvZGUgPQotICAgICAg
QXNzb2NpYXRlZEludGVyZmFjZVJlcXVlc3QuZW5jb2RlOwotCi0gIGZ1bmN0aW9uIE1hcE9mKGtl
eUNsYXNzLCB2YWx1ZUNsYXNzKSB7Ci0gICAgdGhpcy5rZXlDbGFzcyA9IGtleUNsYXNzOwotICAg
IHRoaXMudmFsdWVDbGFzcyA9IHZhbHVlQ2xhc3M7Ci0gIH0KLQotICBNYXBPZi5wcm90b3R5cGUu
ZW5jb2RlZFNpemUgPSA4OwotCi0gIE1hcE9mLnByb3RvdHlwZS5kZWNvZGUgPSBmdW5jdGlvbihk
ZWNvZGVyKSB7Ci0gICAgcmV0dXJuIGRlY29kZXIuZGVjb2RlTWFwUG9pbnRlcih0aGlzLmtleUNs
YXNzLCB0aGlzLnZhbHVlQ2xhc3MpOwotICB9OwotCi0gIE1hcE9mLnByb3RvdHlwZS5lbmNvZGUg
PSBmdW5jdGlvbihlbmNvZGVyLCB2YWwpIHsKLSAgICBlbmNvZGVyLmVuY29kZU1hcFBvaW50ZXIo
dGhpcy5rZXlDbGFzcywgdGhpcy52YWx1ZUNsYXNzLCB2YWwpOwotICB9OwotCi0gIGZ1bmN0aW9u
IE51bGxhYmxlTWFwT2Yoa2V5Q2xhc3MsIHZhbHVlQ2xhc3MpIHsKLSAgICBNYXBPZi5jYWxsKHRo
aXMsIGtleUNsYXNzLCB2YWx1ZUNsYXNzKTsKLSAgfQotCi0gIE51bGxhYmxlTWFwT2YucHJvdG90
eXBlID0gT2JqZWN0LmNyZWF0ZShNYXBPZi5wcm90b3R5cGUpOwotCi0gIGludGVybmFsLmFsaWdu
ID0gYWxpZ247Ci0gIGludGVybmFsLmlzQWxpZ25lZCA9IGlzQWxpZ25lZDsKLSAgaW50ZXJuYWwu
TWVzc2FnZSA9IE1lc3NhZ2U7Ci0gIGludGVybmFsLk1lc3NhZ2VWMEJ1aWxkZXIgPSBNZXNzYWdl
VjBCdWlsZGVyOwotICBpbnRlcm5hbC5NZXNzYWdlVjFCdWlsZGVyID0gTWVzc2FnZVYxQnVpbGRl
cjsKLSAgaW50ZXJuYWwuTWVzc2FnZVYyQnVpbGRlciA9IE1lc3NhZ2VWMkJ1aWxkZXI7Ci0gIGlu
dGVybmFsLk1lc3NhZ2VSZWFkZXIgPSBNZXNzYWdlUmVhZGVyOwotICBpbnRlcm5hbC5rQXJyYXlI
ZWFkZXJTaXplID0ga0FycmF5SGVhZGVyU2l6ZTsKLSAgaW50ZXJuYWwua01hcFN0cnVjdFBheWxv
YWRTaXplID0ga01hcFN0cnVjdFBheWxvYWRTaXplOwotICBpbnRlcm5hbC5rU3RydWN0SGVhZGVy
U2l6ZSA9IGtTdHJ1Y3RIZWFkZXJTaXplOwotICBpbnRlcm5hbC5rRW5jb2RlZEludmFsaWRIYW5k
bGVWYWx1ZSA9IGtFbmNvZGVkSW52YWxpZEhhbmRsZVZhbHVlOwotICBpbnRlcm5hbC5rTWVzc2Fn
ZVYwSGVhZGVyU2l6ZSA9IGtNZXNzYWdlVjBIZWFkZXJTaXplOwotICBpbnRlcm5hbC5rTWVzc2Fn
ZVYxSGVhZGVyU2l6ZSA9IGtNZXNzYWdlVjFIZWFkZXJTaXplOwotICBpbnRlcm5hbC5rTWVzc2Fn
ZVYySGVhZGVyU2l6ZSA9IGtNZXNzYWdlVjJIZWFkZXJTaXplOwotICBpbnRlcm5hbC5rTWVzc2Fn
ZVBheWxvYWRJbnRlcmZhY2VJZHNQb2ludGVyT2Zmc2V0ID0KLSAgICAgIGtNZXNzYWdlUGF5bG9h
ZEludGVyZmFjZUlkc1BvaW50ZXJPZmZzZXQ7Ci0gIGludGVybmFsLmtNZXNzYWdlRXhwZWN0c1Jl
c3BvbnNlID0ga01lc3NhZ2VFeHBlY3RzUmVzcG9uc2U7Ci0gIGludGVybmFsLmtNZXNzYWdlSXNS
ZXNwb25zZSA9IGtNZXNzYWdlSXNSZXNwb25zZTsKLSAgaW50ZXJuYWwuSW50OCA9IEludDg7Ci0g
IGludGVybmFsLlVpbnQ4ID0gVWludDg7Ci0gIGludGVybmFsLkludDE2ID0gSW50MTY7Ci0gIGlu
dGVybmFsLlVpbnQxNiA9IFVpbnQxNjsKLSAgaW50ZXJuYWwuSW50MzIgPSBJbnQzMjsKLSAgaW50
ZXJuYWwuVWludDMyID0gVWludDMyOwotICBpbnRlcm5hbC5JbnQ2NCA9IEludDY0OwotICBpbnRl
cm5hbC5VaW50NjQgPSBVaW50NjQ7Ci0gIGludGVybmFsLkZsb2F0ID0gRmxvYXQ7Ci0gIGludGVy
bmFsLkRvdWJsZSA9IERvdWJsZTsKLSAgaW50ZXJuYWwuU3RyaW5nID0gU3RyaW5nOwotICBpbnRl
cm5hbC5FbnVtID0gRW51bTsKLSAgaW50ZXJuYWwuTnVsbGFibGVTdHJpbmcgPSBOdWxsYWJsZVN0
cmluZzsKLSAgaW50ZXJuYWwuUG9pbnRlclRvID0gUG9pbnRlclRvOwotICBpbnRlcm5hbC5OdWxs
YWJsZVBvaW50ZXJUbyA9IE51bGxhYmxlUG9pbnRlclRvOwotICBpbnRlcm5hbC5BcnJheU9mID0g
QXJyYXlPZjsKLSAgaW50ZXJuYWwuTnVsbGFibGVBcnJheU9mID0gTnVsbGFibGVBcnJheU9mOwot
ICBpbnRlcm5hbC5QYWNrZWRCb29sID0gUGFja2VkQm9vbDsKLSAgaW50ZXJuYWwuSGFuZGxlID0g
SGFuZGxlOwotICBpbnRlcm5hbC5OdWxsYWJsZUhhbmRsZSA9IE51bGxhYmxlSGFuZGxlOwotICBp
bnRlcm5hbC5JbnRlcmZhY2UgPSBJbnRlcmZhY2U7Ci0gIGludGVybmFsLk51bGxhYmxlSW50ZXJm
YWNlID0gTnVsbGFibGVJbnRlcmZhY2U7Ci0gIGludGVybmFsLkludGVyZmFjZVJlcXVlc3QgPSBJ
bnRlcmZhY2VSZXF1ZXN0OwotICBpbnRlcm5hbC5OdWxsYWJsZUludGVyZmFjZVJlcXVlc3QgPSBO
dWxsYWJsZUludGVyZmFjZVJlcXVlc3Q7Ci0gIGludGVybmFsLkFzc29jaWF0ZWRJbnRlcmZhY2VQ
dHJJbmZvID0gQXNzb2NpYXRlZEludGVyZmFjZVB0ckluZm87Ci0gIGludGVybmFsLk51bGxhYmxl
QXNzb2NpYXRlZEludGVyZmFjZVB0ckluZm8gPQotICAgICAgTnVsbGFibGVBc3NvY2lhdGVkSW50
ZXJmYWNlUHRySW5mbzsKLSAgaW50ZXJuYWwuQXNzb2NpYXRlZEludGVyZmFjZVJlcXVlc3QgPSBB
c3NvY2lhdGVkSW50ZXJmYWNlUmVxdWVzdDsKLSAgaW50ZXJuYWwuTnVsbGFibGVBc3NvY2lhdGVk
SW50ZXJmYWNlUmVxdWVzdCA9Ci0gICAgICBOdWxsYWJsZUFzc29jaWF0ZWRJbnRlcmZhY2VSZXF1
ZXN0OwotICBpbnRlcm5hbC5NYXBPZiA9IE1hcE9mOwotICBpbnRlcm5hbC5OdWxsYWJsZU1hcE9m
ID0gTnVsbGFibGVNYXBPZjsKLX0pKCk7Ci0vLyBDb3B5cmlnaHQgMjAxNCBUaGUgQ2hyb21pdW0g
QXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2Rl
IGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5k
IGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLShmdW5jdGlvbigpIHsKLSAgdmFyIGludGVybmFsID0g
bW9qby5pbnRlcm5hbDsKLQotICBmdW5jdGlvbiBDb25uZWN0b3IoaGFuZGxlKSB7Ci0gICAgaWYg
KCEoaGFuZGxlIGluc3RhbmNlb2YgTW9qb0hhbmRsZSkpCi0gICAgICB0aHJvdyBuZXcgRXJyb3Io
IkNvbm5lY3Rvcjogbm90IGEgaGFuZGxlICIgKyBoYW5kbGUpOwotICAgIHRoaXMuaGFuZGxlXyA9
IGhhbmRsZTsKLSAgICB0aGlzLmRyb3BXcml0ZXNfID0gZmFsc2U7Ci0gICAgdGhpcy5lcnJvcl8g
PSBmYWxzZTsKLSAgICB0aGlzLmluY29taW5nUmVjZWl2ZXJfID0gbnVsbDsKLSAgICB0aGlzLnJl
YWRXYXRjaGVyXyA9IG51bGw7Ci0gICAgdGhpcy5lcnJvckhhbmRsZXJfID0gbnVsbDsKLSAgICB0
aGlzLnBhdXNlZF8gPSBmYWxzZTsKLQotICAgIHRoaXMud2FpdFRvUmVhZE1vcmUoKTsKLSAgfQot
Ci0gIENvbm5lY3Rvci5wcm90b3R5cGUuY2xvc2UgPSBmdW5jdGlvbigpIHsKLSAgICB0aGlzLmNh
bmNlbFdhaXQoKTsKLSAgICBpZiAodGhpcy5oYW5kbGVfICE9IG51bGwpIHsKLSAgICAgIHRoaXMu
aGFuZGxlXy5jbG9zZSgpOwotICAgICAgdGhpcy5oYW5kbGVfID0gbnVsbDsKLSAgICB9Ci0gIH07
Ci0KLSAgQ29ubmVjdG9yLnByb3RvdHlwZS5wYXVzZUluY29taW5nTWV0aG9kQ2FsbFByb2Nlc3Np
bmcgPSBmdW5jdGlvbigpIHsKLSAgICBpZiAodGhpcy5wYXVzZWRfKSB7Ci0gICAgICByZXR1cm47
Ci0gICAgfQotICAgIHRoaXMucGF1c2VkXz0gdHJ1ZTsKLSAgICB0aGlzLmNhbmNlbFdhaXQoKTsK
LSAgfTsKLQotICBDb25uZWN0b3IucHJvdG90eXBlLnJlc3VtZUluY29taW5nTWV0aG9kQ2FsbFBy
b2Nlc3NpbmcgPSBmdW5jdGlvbigpIHsKLSAgICBpZiAoIXRoaXMucGF1c2VkXykgewotICAgICAg
cmV0dXJuOwotICAgIH0KLSAgICB0aGlzLnBhdXNlZF89IGZhbHNlOwotICAgIHRoaXMud2FpdFRv
UmVhZE1vcmUoKTsKLSAgfTsKLQotICBDb25uZWN0b3IucHJvdG90eXBlLmFjY2VwdCA9IGZ1bmN0
aW9uKG1lc3NhZ2UpIHsKLSAgICBpZiAodGhpcy5lcnJvcl8pCi0gICAgICByZXR1cm4gZmFsc2U7
Ci0KLSAgICBpZiAodGhpcy5kcm9wV3JpdGVzXykKLSAgICAgIHJldHVybiB0cnVlOwotCi0gICAg
dmFyIHJlc3VsdCA9IHRoaXMuaGFuZGxlXy53cml0ZU1lc3NhZ2UoCi0gICAgICAgIG5ldyBVaW50
OEFycmF5KG1lc3NhZ2UuYnVmZmVyLmFycmF5QnVmZmVyKSwgbWVzc2FnZS5oYW5kbGVzKTsKLSAg
ICBzd2l0Y2ggKHJlc3VsdCkgewotICAgICAgY2FzZSBNb2pvLlJFU1VMVF9PSzoKLSAgICAgICAg
Ly8gVGhlIGhhbmRsZXMgd2VyZSBzdWNjZXNzZnVsbHkgdHJhbnNmZXJyZWQsIHNvIHdlIGRvbid0
IG93biB0aGVtCi0gICAgICAgIC8vIGFueW1vcmUuCi0gICAgICAgIG1lc3NhZ2UuaGFuZGxlcyA9
IFtdOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgTW9qby5SRVNVTFRfRkFJTEVEX1BSRUNP
TkRJVElPTjoKLSAgICAgICAgLy8gVGhlcmUncyBubyBwb2ludCBpbiBjb250aW51aW5nIHRvIHdy
aXRlIHRvIHRoaXMgcGlwZSBzaW5jZSB0aGUgb3RoZXIKLSAgICAgICAgLy8gZW5kIGlzIGdvbmUu
IEF2b2lkIHdyaXRpbmcgYW55IGZ1dHVyZSBtZXNzYWdlcy4gSGlkZSB3cml0ZSBmYWlsdXJlcwot
ICAgICAgICAvLyBmcm9tIHRoZSBjYWxsZXIgc2luY2Ugd2UnZCBsaWtlIHRoZW0gdG8gY29udGlu
dWUgY29uc3VtaW5nIGFueQotICAgICAgICAvLyBiYWNrbG9nIG9mIGluY29taW5nIG1lc3NhZ2Vz
IGJlZm9yZSByZWdhcmRpbmcgdGhlIG1lc3NhZ2UgcGlwZSBhcwotICAgICAgICAvLyBjbG9zZWQu
Ci0gICAgICAgIHRoaXMuZHJvcFdyaXRlc18gPSB0cnVlOwotICAgICAgICBicmVhazsKLSAgICAg
IGRlZmF1bHQ6Ci0gICAgICAgIC8vIFRoaXMgcGFydGljdWxhciB3cml0ZSB3YXMgcmVqZWN0ZWQs
IHByZXN1bWFibHkgYmVjYXVzZSBvZiBiYWQgaW5wdXQuCi0gICAgICAgIC8vIFRoZSBwaXBlIGlz
IG5vdCBuZWNlc3NhcmlseSBpbiBhIGJhZCBzdGF0ZS4KLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKLSAgfTsKLQotICBDb25uZWN0b3IucHJvdG90eXBlLnNl
dEluY29taW5nUmVjZWl2ZXIgPSBmdW5jdGlvbihyZWNlaXZlcikgewotICAgIHRoaXMuaW5jb21p
bmdSZWNlaXZlcl8gPSByZWNlaXZlcjsKLSAgfTsKLQotICBDb25uZWN0b3IucHJvdG90eXBlLnNl
dEVycm9ySGFuZGxlciA9IGZ1bmN0aW9uKGhhbmRsZXIpIHsKLSAgICB0aGlzLmVycm9ySGFuZGxl
cl8gPSBoYW5kbGVyOwotICB9OwotCi0gIENvbm5lY3Rvci5wcm90b3R5cGUucmVhZE1vcmVfID0g
ZnVuY3Rpb24ocmVzdWx0KSB7Ci0gICAgZm9yICg7OykgewotICAgICAgaWYgKHRoaXMucGF1c2Vk
XykgewotICAgICAgICByZXR1cm47Ci0gICAgICB9Ci0KLSAgICAgIHZhciByZWFkID0gdGhpcy5o
YW5kbGVfLnJlYWRNZXNzYWdlKCk7Ci0gICAgICBpZiAodGhpcy5oYW5kbGVfID09IG51bGwpIC8v
IFRoZSBjb25uZWN0b3IgaGFzIGJlZW4gY2xvc2VkLgotICAgICAgICByZXR1cm47Ci0gICAgICBp
ZiAocmVhZC5yZXN1bHQgPT0gTW9qby5SRVNVTFRfU0hPVUxEX1dBSVQpCi0gICAgICAgIHJldHVy
bjsKLSAgICAgIGlmIChyZWFkLnJlc3VsdCAhPSBNb2pvLlJFU1VMVF9PSykgewotICAgICAgICB0
aGlzLmhhbmRsZUVycm9yKHJlYWQucmVzdWx0ICE9PSBNb2pvLlJFU1VMVF9GQUlMRURfUFJFQ09O
RElUSU9OLAotICAgICAgICAgICAgZmFsc2UpOwotICAgICAgICByZXR1cm47Ci0gICAgICB9Ci0g
ICAgICB2YXIgbWVzc2FnZUJ1ZmZlciA9IG5ldyBpbnRlcm5hbC5CdWZmZXIocmVhZC5idWZmZXIp
OwotICAgICAgdmFyIG1lc3NhZ2UgPSBuZXcgaW50ZXJuYWwuTWVzc2FnZShtZXNzYWdlQnVmZmVy
LCByZWFkLmhhbmRsZXMpOwotICAgICAgdmFyIHJlY2VpdmVyUmVzdWx0ID0gdGhpcy5pbmNvbWlu
Z1JlY2VpdmVyXyAmJgotICAgICAgICAgIHRoaXMuaW5jb21pbmdSZWNlaXZlcl8uYWNjZXB0KG1l
c3NhZ2UpOwotCi0gICAgICAvLyBEaXNwYXRjaGluZyB0aGUgbWVzc2FnZSBtYXkgaGF2ZSBjbG9z
ZWQgdGhlIGNvbm5lY3Rvci4KLSAgICAgIGlmICh0aGlzLmhhbmRsZV8gPT0gbnVsbCkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgICAvLyBIYW5kbGUgaW52YWxpZCBpbmNvbWluZyBtZXNzYWdlLgot
ICAgICAgaWYgKCFpbnRlcm5hbC5pc1Rlc3RpbmdNb2RlKCkgJiYgIXJlY2VpdmVyUmVzdWx0KSB7
Ci0gICAgICAgIC8vIFRPRE8oeXpzaGVuKTogQ29uc2lkZXIgbm90aWZ5aW5nIHRoZSBlbWJlZGRl
ci4KLSAgICAgICAgdGhpcy5oYW5kbGVFcnJvcih0cnVlLCBmYWxzZSk7Ci0gICAgICB9Ci0gICAg
fQotICB9OwotCi0gIENvbm5lY3Rvci5wcm90b3R5cGUuY2FuY2VsV2FpdCA9IGZ1bmN0aW9uKCkg
ewotICAgIGlmICh0aGlzLnJlYWRXYXRjaGVyXykgewotICAgICAgdGhpcy5yZWFkV2F0Y2hlcl8u
Y2FuY2VsKCk7Ci0gICAgICB0aGlzLnJlYWRXYXRjaGVyXyA9IG51bGw7Ci0gICAgfQotICB9Owot
Ci0gIENvbm5lY3Rvci5wcm90b3R5cGUud2FpdFRvUmVhZE1vcmUgPSBmdW5jdGlvbigpIHsKLSAg
ICBpZiAodGhpcy5oYW5kbGVfKSB7Ci0gICAgICB0aGlzLnJlYWRXYXRjaGVyXyA9IHRoaXMuaGFu
ZGxlXy53YXRjaCh7cmVhZGFibGU6IHRydWV9LAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdGhpcy5yZWFkTW9yZV8uYmluZCh0aGlzKSk7Ci0gICAgfQotICB9
OwotCi0gIENvbm5lY3Rvci5wcm90b3R5cGUuaGFuZGxlRXJyb3IgPSBmdW5jdGlvbihmb3JjZVBp
cGVSZXNldCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZv
cmNlQXN5bmNIYW5kbGVyKSB7Ci0gICAgaWYgKHRoaXMuZXJyb3JfIHx8IHRoaXMuaGFuZGxlXyA9
PT0gbnVsbCkgewotICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmICh0aGlzLnBhdXNlZF8p
IHsKLSAgICAgIC8vIEVuZm9yY2UgY2FsbGluZyB0aGUgZXJyb3IgaGFuZGxlciBhc3luY2hyb25v
dXNseSBpZiB0aGUgdXNlciBoYXMKLSAgICAgIC8vIHBhdXNlZCByZWNlaXZpbmcgbWVzc2FnZXMu
IFdlIG5lZWQgdG8gd2FpdCB1bnRpbCB0aGUgdXNlciBzdGFydHMKLSAgICAgIC8vIHJlY2Vpdmlu
ZyBtZXNzYWdlcyBhZ2Fpbi4KLSAgICAgIGZvcmNlQXN5bmNIYW5kbGVyID0gdHJ1ZTsKLSAgICB9
Ci0KLSAgICBpZiAoIWZvcmNlUGlwZVJlc2V0ICYmIGZvcmNlQXN5bmNIYW5kbGVyKSB7Ci0gICAg
ICBmb3JjZVBpcGVSZXNldCA9IHRydWU7Ci0gICAgfQotCi0gICAgdGhpcy5jYW5jZWxXYWl0KCk7
Ci0gICAgaWYgKGZvcmNlUGlwZVJlc2V0KSB7Ci0gICAgICB0aGlzLmhhbmRsZV8uY2xvc2UoKTsK
LSAgICAgIHZhciBkdW1teVBpcGUgPSBNb2pvLmNyZWF0ZU1lc3NhZ2VQaXBlKCk7Ci0gICAgICB0
aGlzLmhhbmRsZV8gPSBkdW1teVBpcGUuaGFuZGxlMDsKLSAgICB9Ci0KLSAgICBpZiAoZm9yY2VB
c3luY0hhbmRsZXIpIHsKLSAgICAgIGlmICghdGhpcy5wYXVzZWRfKSB7Ci0gICAgICAgIHRoaXMu
d2FpdFRvUmVhZE1vcmUoKTsKLSAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgdGhpcy5lcnJv
cl8gPSB0cnVlOwotICAgICAgaWYgKHRoaXMuZXJyb3JIYW5kbGVyXykgewotICAgICAgICB0aGlz
LmVycm9ySGFuZGxlcl8ub25FcnJvcigpOwotICAgICAgfQotICAgIH0KLSAgfTsKLQotICBpbnRl
cm5hbC5Db25uZWN0b3IgPSBDb25uZWN0b3I7Ci19KSgpOwotLy8gQ29weXJpZ2h0IDIwMTcgVGhl
IENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBz
b3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJl
Ci0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotCi0oZnVuY3Rpb24oKSB7Ci0gIHZhciBp
bnRlcm5hbCA9IG1vam8uaW50ZXJuYWw7Ci0KLSAgZnVuY3Rpb24gdmFsaWRhdGVDb250cm9sUmVx
dWVzdFdpdGhSZXNwb25zZShtZXNzYWdlKSB7Ci0gICAgdmFyIG1lc3NhZ2VWYWxpZGF0b3IgPSBu
ZXcgaW50ZXJuYWwuVmFsaWRhdG9yKG1lc3NhZ2UpOwotICAgIHZhciBlcnJvciA9IG1lc3NhZ2VW
YWxpZGF0b3IudmFsaWRhdGVNZXNzYWdlSXNSZXF1ZXN0RXhwZWN0aW5nUmVzcG9uc2UoKTsKLSAg
ICBpZiAoZXJyb3IgIT09IGludGVybmFsLnZhbGlkYXRpb25FcnJvci5OT05FKSB7Ci0gICAgICB0
aHJvdyBlcnJvcjsKLSAgICB9Ci0KLSAgICBpZiAobWVzc2FnZS5nZXROYW1lKCkgIT0gbW9qby5p
bnRlcmZhY2VDb250cm9sLmtSdW5NZXNzYWdlSWQpIHsKLSAgICAgIHRocm93IG5ldyBFcnJvcigi
Q29udHJvbCBtZXNzYWdlIG5hbWUgaXMgbm90IGtSdW5NZXNzYWdlSWQiKTsKLSAgICB9Ci0KLSAg
ICAvLyBWYWxpZGF0ZSBwYXlsb2FkLgotICAgIGVycm9yID0gbW9qby5pbnRlcmZhY2VDb250cm9s
LlJ1bk1lc3NhZ2VQYXJhbXMudmFsaWRhdGUobWVzc2FnZVZhbGlkYXRvciwKLSAgICAgICAgbWVz
c2FnZS5nZXRIZWFkZXJOdW1CeXRlcygpKTsKLSAgICBpZiAoZXJyb3IgIT0gaW50ZXJuYWwudmFs
aWRhdGlvbkVycm9yLk5PTkUpIHsKLSAgICAgIHRocm93IGVycm9yOwotICAgIH0KLSAgfQotCi0g
IGZ1bmN0aW9uIHZhbGlkYXRlQ29udHJvbFJlcXVlc3RXaXRob3V0UmVzcG9uc2UobWVzc2FnZSkg
ewotICAgIHZhciBtZXNzYWdlVmFsaWRhdG9yID0gbmV3IGludGVybmFsLlZhbGlkYXRvcihtZXNz
YWdlKTsKLSAgICB2YXIgZXJyb3IgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlTWVzc2FnZUlz
UmVxdWVzdFdpdGhvdXRSZXNwb25zZSgpOwotICAgIGlmIChlcnJvciAhPSBpbnRlcm5hbC52YWxp
ZGF0aW9uRXJyb3IuTk9ORSkgewotICAgICAgdGhyb3cgZXJyb3I7Ci0gICAgfQotCi0gICAgaWYg
KG1lc3NhZ2UuZ2V0TmFtZSgpICE9IG1vam8uaW50ZXJmYWNlQ29udHJvbC5rUnVuT3JDbG9zZVBp
cGVNZXNzYWdlSWQpIHsKLSAgICAgIHRocm93IG5ldyBFcnJvcigiQ29udHJvbCBtZXNzYWdlIG5h
bWUgaXMgbm90IGtSdW5PckNsb3NlUGlwZU1lc3NhZ2VJZCIpOwotICAgIH0KLQotICAgIC8vIFZh
bGlkYXRlIHBheWxvYWQuCi0gICAgZXJyb3IgPSBtb2pvLmludGVyZmFjZUNvbnRyb2wuUnVuT3JD
bG9zZVBpcGVNZXNzYWdlUGFyYW1zLnZhbGlkYXRlKAotICAgICAgICBtZXNzYWdlVmFsaWRhdG9y
LCBtZXNzYWdlLmdldEhlYWRlck51bUJ5dGVzKCkpOwotICAgIGlmIChlcnJvciAhPSBpbnRlcm5h
bC52YWxpZGF0aW9uRXJyb3IuTk9ORSkgewotICAgICAgdGhyb3cgZXJyb3I7Ci0gICAgfQotICB9
Ci0KLSAgZnVuY3Rpb24gcnVuT3JDbG9zZVBpcGUobWVzc2FnZSwgaW50ZXJmYWNlVmVyc2lvbikg
ewotICAgIHZhciByZWFkZXIgPSBuZXcgaW50ZXJuYWwuTWVzc2FnZVJlYWRlcihtZXNzYWdlKTsK
LSAgICB2YXIgcnVuT3JDbG9zZVBpcGVNZXNzYWdlUGFyYW1zID0gcmVhZGVyLmRlY29kZVN0cnVj
dCgKLSAgICAgICAgbW9qby5pbnRlcmZhY2VDb250cm9sLlJ1bk9yQ2xvc2VQaXBlTWVzc2FnZVBh
cmFtcyk7Ci0gICAgcmV0dXJuIGludGVyZmFjZVZlcnNpb24gPj0KLSAgICAgICAgcnVuT3JDbG9z
ZVBpcGVNZXNzYWdlUGFyYW1zLmlucHV0LnJlcXVpcmVWZXJzaW9uLnZlcnNpb247Ci0gIH0KLQot
ICBmdW5jdGlvbiBydW4obWVzc2FnZSwgcmVzcG9uZGVyLCBpbnRlcmZhY2VWZXJzaW9uKSB7Ci0g
ICAgdmFyIHJlYWRlciA9IG5ldyBpbnRlcm5hbC5NZXNzYWdlUmVhZGVyKG1lc3NhZ2UpOwotICAg
IHZhciBydW5NZXNzYWdlUGFyYW1zID0KLSAgICAgICAgcmVhZGVyLmRlY29kZVN0cnVjdChtb2pv
LmludGVyZmFjZUNvbnRyb2wuUnVuTWVzc2FnZVBhcmFtcyk7Ci0gICAgdmFyIHJ1bk91dHB1dCA9
IG51bGw7Ci0KLSAgICBpZiAocnVuTWVzc2FnZVBhcmFtcy5pbnB1dC5xdWVyeVZlcnNpb24pIHsK
LSAgICAgIHJ1bk91dHB1dCA9IG5ldyBtb2pvLmludGVyZmFjZUNvbnRyb2wuUnVuT3V0cHV0KCk7
Ci0gICAgICBydW5PdXRwdXQucXVlcnlWZXJzaW9uUmVzdWx0ID0gbmV3Ci0gICAgICAgICAgbW9q
by5pbnRlcmZhY2VDb250cm9sLlF1ZXJ5VmVyc2lvblJlc3VsdCgKLSAgICAgICAgICAgICAgeyd2
ZXJzaW9uJzogaW50ZXJmYWNlVmVyc2lvbn0pOwotICAgIH0KLQotICAgIHZhciBydW5SZXNwb25z
ZU1lc3NhZ2VQYXJhbXMgPSBuZXcKLSAgICAgICAgbW9qby5pbnRlcmZhY2VDb250cm9sLlJ1blJl
c3BvbnNlTWVzc2FnZVBhcmFtcygpOwotICAgIHJ1blJlc3BvbnNlTWVzc2FnZVBhcmFtcy5vdXRw
dXQgPSBydW5PdXRwdXQ7Ci0KLSAgICB2YXIgbWVzc2FnZU5hbWUgPSBtb2pvLmludGVyZmFjZUNv
bnRyb2wua1J1bk1lc3NhZ2VJZDsKLSAgICB2YXIgcGF5bG9hZFNpemUgPQotICAgICAgICBtb2pv
LmludGVyZmFjZUNvbnRyb2wuUnVuUmVzcG9uc2VNZXNzYWdlUGFyYW1zLmVuY29kZWRTaXplOwot
ICAgIHZhciByZXF1ZXN0SUQgPSByZWFkZXIucmVxdWVzdElEOwotICAgIHZhciBidWlsZGVyID0g
bmV3IGludGVybmFsLk1lc3NhZ2VWMUJ1aWxkZXIobWVzc2FnZU5hbWUsCi0gICAgICAgIHBheWxv
YWRTaXplLCBpbnRlcm5hbC5rTWVzc2FnZUlzUmVzcG9uc2UsIHJlcXVlc3RJRCk7Ci0gICAgYnVp
bGRlci5lbmNvZGVTdHJ1Y3QobW9qby5pbnRlcmZhY2VDb250cm9sLlJ1blJlc3BvbnNlTWVzc2Fn
ZVBhcmFtcywKLSAgICAgICAgICAgICAgICAgICAgICAgICBydW5SZXNwb25zZU1lc3NhZ2VQYXJh
bXMpOwotICAgIHJlc3BvbmRlci5hY2NlcHQoYnVpbGRlci5maW5pc2goKSk7Ci0gICAgcmV0dXJu
IHRydWU7Ci0gIH0KLQotICBmdW5jdGlvbiBpc0ludGVyZmFjZUNvbnRyb2xNZXNzYWdlKG1lc3Nh
Z2UpIHsKLSAgICByZXR1cm4gbWVzc2FnZS5nZXROYW1lKCkgPT0gbW9qby5pbnRlcmZhY2VDb250
cm9sLmtSdW5NZXNzYWdlSWQgfHwKLSAgICAgICAgICAgbWVzc2FnZS5nZXROYW1lKCkgPT0gbW9q
by5pbnRlcmZhY2VDb250cm9sLmtSdW5PckNsb3NlUGlwZU1lc3NhZ2VJZDsKLSAgfQotCi0gIGZ1
bmN0aW9uIENvbnRyb2xNZXNzYWdlSGFuZGxlcihpbnRlcmZhY2VWZXJzaW9uKSB7Ci0gICAgdGhp
cy5pbnRlcmZhY2VWZXJzaW9uXyA9IGludGVyZmFjZVZlcnNpb247Ci0gIH0KLQotICBDb250cm9s
TWVzc2FnZUhhbmRsZXIucHJvdG90eXBlLmFjY2VwdCA9IGZ1bmN0aW9uKG1lc3NhZ2UpIHsKLSAg
ICB2YWxpZGF0ZUNvbnRyb2xSZXF1ZXN0V2l0aG91dFJlc3BvbnNlKG1lc3NhZ2UpOwotICAgIHJl
dHVybiBydW5PckNsb3NlUGlwZShtZXNzYWdlLCB0aGlzLmludGVyZmFjZVZlcnNpb25fKTsKLSAg
fTsKLQotICBDb250cm9sTWVzc2FnZUhhbmRsZXIucHJvdG90eXBlLmFjY2VwdFdpdGhSZXNwb25k
ZXIgPSBmdW5jdGlvbihtZXNzYWdlLAotICAgICAgcmVzcG9uZGVyKSB7Ci0gICAgdmFsaWRhdGVD
b250cm9sUmVxdWVzdFdpdGhSZXNwb25zZShtZXNzYWdlKTsKLSAgICByZXR1cm4gcnVuKG1lc3Nh
Z2UsIHJlc3BvbmRlciwgdGhpcy5pbnRlcmZhY2VWZXJzaW9uXyk7Ci0gIH07Ci0KLSAgaW50ZXJu
YWwuQ29udHJvbE1lc3NhZ2VIYW5kbGVyID0gQ29udHJvbE1lc3NhZ2VIYW5kbGVyOwotICBpbnRl
cm5hbC5pc0ludGVyZmFjZUNvbnRyb2xNZXNzYWdlID0gaXNJbnRlcmZhY2VDb250cm9sTWVzc2Fn
ZTsKLX0pKCk7Ci0vLyBDb3B5cmlnaHQgMjAxNyBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5
IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNF
IGZpbGUuCi0KLShmdW5jdGlvbigpIHsKLSAgdmFyIGludGVybmFsID0gbW9qby5pbnRlcm5hbDsK
LQotICBmdW5jdGlvbiBjb25zdHJ1Y3RSdW5PckNsb3NlUGlwZU1lc3NhZ2UocnVuT3JDbG9zZVBp
cGVJbnB1dCkgewotICAgIHZhciBydW5PckNsb3NlUGlwZU1lc3NhZ2VQYXJhbXMgPSBuZXcKLSAg
ICAgICAgbW9qby5pbnRlcmZhY2VDb250cm9sLlJ1bk9yQ2xvc2VQaXBlTWVzc2FnZVBhcmFtcygp
OwotICAgIHJ1bk9yQ2xvc2VQaXBlTWVzc2FnZVBhcmFtcy5pbnB1dCA9IHJ1bk9yQ2xvc2VQaXBl
SW5wdXQ7Ci0KLSAgICB2YXIgbWVzc2FnZU5hbWUgPSBtb2pvLmludGVyZmFjZUNvbnRyb2wua1J1
bk9yQ2xvc2VQaXBlTWVzc2FnZUlkOwotICAgIHZhciBwYXlsb2FkU2l6ZSA9Ci0gICAgICAgIG1v
am8uaW50ZXJmYWNlQ29udHJvbC5SdW5PckNsb3NlUGlwZU1lc3NhZ2VQYXJhbXMuZW5jb2RlZFNp
emU7Ci0gICAgdmFyIGJ1aWxkZXIgPSBuZXcgaW50ZXJuYWwuTWVzc2FnZVYwQnVpbGRlcihtZXNz
YWdlTmFtZSwgcGF5bG9hZFNpemUpOwotICAgIGJ1aWxkZXIuZW5jb2RlU3RydWN0KG1vam8uaW50
ZXJmYWNlQ29udHJvbC5SdW5PckNsb3NlUGlwZU1lc3NhZ2VQYXJhbXMsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgcnVuT3JDbG9zZVBpcGVNZXNzYWdlUGFyYW1zKTsKLSAgICB2YXIgbWVzc2Fn
ZSA9IGJ1aWxkZXIuZmluaXNoKCk7Ci0gICAgcmV0dXJuIG1lc3NhZ2U7Ci0gIH0KLQotICBmdW5j
dGlvbiB2YWxpZGF0ZUNvbnRyb2xSZXNwb25zZShtZXNzYWdlKSB7Ci0gICAgdmFyIG1lc3NhZ2VW
YWxpZGF0b3IgPSBuZXcgaW50ZXJuYWwuVmFsaWRhdG9yKG1lc3NhZ2UpOwotICAgIHZhciBlcnJv
ciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVNZXNzYWdlSXNSZXNwb25zZSgpOwotICAgIGlm
IChlcnJvciAhPSBpbnRlcm5hbC52YWxpZGF0aW9uRXJyb3IuTk9ORSkgewotICAgICAgdGhyb3cg
ZXJyb3I7Ci0gICAgfQotCi0gICAgaWYgKG1lc3NhZ2UuZ2V0TmFtZSgpICE9IG1vam8uaW50ZXJm
YWNlQ29udHJvbC5rUnVuTWVzc2FnZUlkKSB7Ci0gICAgICB0aHJvdyBuZXcgRXJyb3IoIkNvbnRy
b2wgbWVzc2FnZSBuYW1lIGlzIG5vdCBrUnVuTWVzc2FnZUlkIik7Ci0gICAgfQotCi0gICAgLy8g
VmFsaWRhdGUgcGF5bG9hZC4KLSAgICBlcnJvciA9IG1vam8uaW50ZXJmYWNlQ29udHJvbC5SdW5S
ZXNwb25zZU1lc3NhZ2VQYXJhbXMudmFsaWRhdGUoCi0gICAgICAgIG1lc3NhZ2VWYWxpZGF0b3Is
IG1lc3NhZ2UuZ2V0SGVhZGVyTnVtQnl0ZXMoKSk7Ci0gICAgaWYgKGVycm9yICE9IGludGVybmFs
LnZhbGlkYXRpb25FcnJvci5OT05FKSB7Ci0gICAgICB0aHJvdyBlcnJvcjsKLSAgICB9Ci0gIH0K
LQotICBmdW5jdGlvbiBhY2NlcHRSdW5SZXNwb25zZShtZXNzYWdlKSB7Ci0gICAgdmFsaWRhdGVD
b250cm9sUmVzcG9uc2UobWVzc2FnZSk7Ci0KLSAgICB2YXIgcmVhZGVyID0gbmV3IGludGVybmFs
Lk1lc3NhZ2VSZWFkZXIobWVzc2FnZSk7Ci0gICAgdmFyIHJ1blJlc3BvbnNlTWVzc2FnZVBhcmFt
cyA9IHJlYWRlci5kZWNvZGVTdHJ1Y3QoCi0gICAgICAgIG1vam8uaW50ZXJmYWNlQ29udHJvbC5S
dW5SZXNwb25zZU1lc3NhZ2VQYXJhbXMpOwotCi0gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShy
dW5SZXNwb25zZU1lc3NhZ2VQYXJhbXMpOwotICB9Ci0KLSAvKioKLSAgKiBTZW5kcyB0aGUgZ2l2
ZW4gcnVuIG1lc3NhZ2UgdGhyb3VnaCB0aGUgcmVjZWl2ZXIuCi0gICogQWNjZXB0cyB0aGUgcmVz
cG9uc2UgbWVzc2FnZSBmcm9tIHRoZSByZWNlaXZlciBhbmQgZGVjb2RlcyB0aGUgbWVzc2FnZQot
ICAqIHN0cnVjdCB0byBSdW5SZXNwb25zZU1lc3NhZ2VQYXJhbXMuCi0gICoKLSAgKiBAcGFyYW0g
IHtSb3V0ZXJ9IHJlY2VpdmVyLgotICAqIEBwYXJhbSAge1J1bk1lc3NhZ2VQYXJhbXN9IHJ1bk1l
c3NhZ2VQYXJhbXMgdG8gYmUgc2VudCB2aWEgYSBtZXNzYWdlLgotICAqIEByZXR1cm4ge1Byb21p
c2V9IHRoYXQgcmVzb2x2ZXMgdG8gYSBSdW5SZXNwb25zZU1lc3NhZ2VQYXJhbXMuCi0gICovCi0g
IGZ1bmN0aW9uIHNlbmRSdW5NZXNzYWdlKHJlY2VpdmVyLCBydW5NZXNzYWdlUGFyYW1zKSB7Ci0g
ICAgdmFyIG1lc3NhZ2VOYW1lID0gbW9qby5pbnRlcmZhY2VDb250cm9sLmtSdW5NZXNzYWdlSWQ7
Ci0gICAgdmFyIHBheWxvYWRTaXplID0gbW9qby5pbnRlcmZhY2VDb250cm9sLlJ1bk1lc3NhZ2VQ
YXJhbXMuZW5jb2RlZFNpemU7Ci0gICAgLy8gfHJlcXVlc3RJRHwgaXMgc2V0IHRvIDAsIGJ1dCBp
cyBsYXRlciBwcm9wZXJseSBzZXQgYnkgUm91dGVyLgotICAgIHZhciBidWlsZGVyID0gbmV3IGlu
dGVybmFsLk1lc3NhZ2VWMUJ1aWxkZXIobWVzc2FnZU5hbWUsCi0gICAgICAgIHBheWxvYWRTaXpl
LCBpbnRlcm5hbC5rTWVzc2FnZUV4cGVjdHNSZXNwb25zZSwgMCk7Ci0gICAgYnVpbGRlci5lbmNv
ZGVTdHJ1Y3QobW9qby5pbnRlcmZhY2VDb250cm9sLlJ1bk1lc3NhZ2VQYXJhbXMsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgcnVuTWVzc2FnZVBhcmFtcyk7Ci0gICAgdmFyIG1lc3NhZ2UgPSBi
dWlsZGVyLmZpbmlzaCgpOwotCi0gICAgcmV0dXJuIHJlY2VpdmVyLmFjY2VwdEFuZEV4cGVjdFJl
c3BvbnNlKG1lc3NhZ2UpLnRoZW4oYWNjZXB0UnVuUmVzcG9uc2UpOwotICB9Ci0KLSAgZnVuY3Rp
b24gQ29udHJvbE1lc3NhZ2VQcm94eShyZWNlaXZlcikgewotICAgIHRoaXMucmVjZWl2ZXJfID0g
cmVjZWl2ZXI7Ci0gIH0KLQotICBDb250cm9sTWVzc2FnZVByb3h5LnByb3RvdHlwZS5xdWVyeVZl
cnNpb24gPSBmdW5jdGlvbigpIHsKLSAgICB2YXIgcnVuTWVzc2FnZVBhcmFtcyA9IG5ldyBtb2pv
LmludGVyZmFjZUNvbnRyb2wuUnVuTWVzc2FnZVBhcmFtcygpOwotICAgIHJ1bk1lc3NhZ2VQYXJh
bXMuaW5wdXQgPSBuZXcgbW9qby5pbnRlcmZhY2VDb250cm9sLlJ1bklucHV0KCk7Ci0gICAgcnVu
TWVzc2FnZVBhcmFtcy5pbnB1dC5xdWVyeVZlcnNpb24gPQotICAgICAgICBuZXcgbW9qby5pbnRl
cmZhY2VDb250cm9sLlF1ZXJ5VmVyc2lvbigpOwotCi0gICAgcmV0dXJuIHNlbmRSdW5NZXNzYWdl
KHRoaXMucmVjZWl2ZXJfLCBydW5NZXNzYWdlUGFyYW1zKS50aGVuKGZ1bmN0aW9uKAotICAgICAg
ICBydW5SZXNwb25zZU1lc3NhZ2VQYXJhbXMpIHsKLSAgICAgIHJldHVybiBydW5SZXNwb25zZU1l
c3NhZ2VQYXJhbXMub3V0cHV0LnF1ZXJ5VmVyc2lvblJlc3VsdC52ZXJzaW9uOwotICAgIH0pOwot
ICB9OwotCi0gIENvbnRyb2xNZXNzYWdlUHJveHkucHJvdG90eXBlLnJlcXVpcmVWZXJzaW9uID0g
ZnVuY3Rpb24odmVyc2lvbikgewotICAgIHZhciBydW5PckNsb3NlUGlwZUlucHV0ID0gbmV3IG1v
am8uaW50ZXJmYWNlQ29udHJvbC5SdW5PckNsb3NlUGlwZUlucHV0KCk7Ci0gICAgcnVuT3JDbG9z
ZVBpcGVJbnB1dC5yZXF1aXJlVmVyc2lvbiA9Ci0gICAgICAgIG5ldyBtb2pvLmludGVyZmFjZUNv
bnRyb2wuUmVxdWlyZVZlcnNpb24oeyd2ZXJzaW9uJzogdmVyc2lvbn0pOwotICAgIHZhciBtZXNz
YWdlID0gY29uc3RydWN0UnVuT3JDbG9zZVBpcGVNZXNzYWdlKHJ1bk9yQ2xvc2VQaXBlSW5wdXQp
OwotICAgIHRoaXMucmVjZWl2ZXJfLmFjY2VwdChtZXNzYWdlKTsKLSAgfTsKLQotICBpbnRlcm5h
bC5Db250cm9sTWVzc2FnZVByb3h5ID0gQ29udHJvbE1lc3NhZ2VQcm94eTsKLX0pKCk7Ci0vLyBD
b3B5cmlnaHQgMjAxNyBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxp
Y2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLShmdW5j
dGlvbigpIHsKLSAgdmFyIGludGVybmFsID0gbW9qby5pbnRlcm5hbDsKLQotICBmdW5jdGlvbiBJ
bnRlcmZhY2VFbmRwb2ludENsaWVudChpbnRlcmZhY2VFbmRwb2ludEhhbmRsZSwgcmVjZWl2ZXIs
Ci0gICAgICBpbnRlcmZhY2VWZXJzaW9uKSB7Ci0gICAgdGhpcy5jb250cm9sbGVyXyA9IG51bGw7
Ci0gICAgdGhpcy5lbmNvdW50ZXJlZEVycm9yXyA9IGZhbHNlOwotICAgIHRoaXMuaGFuZGxlXyA9
IGludGVyZmFjZUVuZHBvaW50SGFuZGxlOwotICAgIHRoaXMuaW5jb21pbmdSZWNlaXZlcl8gPSBy
ZWNlaXZlcjsKLQotICAgIGlmIChpbnRlcmZhY2VWZXJzaW9uICE9PSB1bmRlZmluZWQpIHsKLSAg
ICAgIHRoaXMuY29udHJvbE1lc3NhZ2VIYW5kbGVyXyA9IG5ldyBpbnRlcm5hbC5Db250cm9sTWVz
c2FnZUhhbmRsZXIoCi0gICAgICAgICAgaW50ZXJmYWNlVmVyc2lvbik7Ci0gICAgfSBlbHNlIHsK
LSAgICAgIHRoaXMuY29udHJvbE1lc3NhZ2VQcm94eV8gPSBuZXcgaW50ZXJuYWwuQ29udHJvbE1l
c3NhZ2VQcm94eSh0aGlzKTsKLSAgICB9Ci0KLSAgICB0aGlzLm5leHRSZXF1ZXN0SURfID0gMDsK
LSAgICB0aGlzLmNvbXBsZXRlcnNfID0gbmV3IE1hcCgpOwotICAgIHRoaXMucGF5bG9hZFZhbGlk
YXRvcnNfID0gW107Ci0gICAgdGhpcy5jb25uZWN0aW9uRXJyb3JIYW5kbGVyXyA9IG51bGw7Ci0K
LSAgICBpZiAoaW50ZXJmYWNlRW5kcG9pbnRIYW5kbGUucGVuZGluZ0Fzc29jaWF0aW9uKCkpIHsK
LSAgICAgIGludGVyZmFjZUVuZHBvaW50SGFuZGxlLnNldEFzc29jaWF0aW9uRXZlbnRIYW5kbGVy
KAotICAgICAgICAgIHRoaXMub25Bc3NvY2lhdGlvbkV2ZW50LmJpbmQodGhpcykpOwotICAgIH0g
ZWxzZSB7Ci0gICAgICB0aGlzLmluaXRDb250cm9sbGVySWZOZWNlc3NhcnlfKCk7Ci0gICAgfQot
ICB9Ci0KLSAgSW50ZXJmYWNlRW5kcG9pbnRDbGllbnQucHJvdG90eXBlLmluaXRDb250cm9sbGVy
SWZOZWNlc3NhcnlfID0gZnVuY3Rpb24oKSB7Ci0gICAgaWYgKHRoaXMuY29udHJvbGxlcl8gfHwg
dGhpcy5oYW5kbGVfLnBlbmRpbmdBc3NvY2lhdGlvbigpKSB7Ci0gICAgICByZXR1cm47Ci0gICAg
fQotCi0gICAgdGhpcy5jb250cm9sbGVyXyA9IHRoaXMuaGFuZGxlXy5ncm91cENvbnRyb2xsZXIo
KS5hdHRhY2hFbmRwb2ludENsaWVudCgKLSAgICAgICAgdGhpcy5oYW5kbGVfLCB0aGlzKTsKLSAg
fTsKLQotICBJbnRlcmZhY2VFbmRwb2ludENsaWVudC5wcm90b3R5cGUub25Bc3NvY2lhdGlvbkV2
ZW50ID0gZnVuY3Rpb24oCi0gICAgICBhc3NvY2lhdGlvbkV2ZW50KSB7Ci0gICAgaWYgKGFzc29j
aWF0aW9uRXZlbnQgPT09IGludGVybmFsLkFzc29jaWF0aW9uRXZlbnQuQVNTT0NJQVRFRCkgewot
ICAgICAgdGhpcy5pbml0Q29udHJvbGxlcklmTmVjZXNzYXJ5XygpOwotICAgIH0gZWxzZSBpZiAo
YXNzb2NpYXRpb25FdmVudCA9PT0KLSAgICAgICAgICBpbnRlcm5hbC5Bc3NvY2lhdGlvbkV2ZW50
LlBFRVJfQ0xPU0VEX0JFRk9SRV9BU1NPQ0lBVElPTikgewotICAgICAgc2V0VGltZW91dCh0aGlz
Lm5vdGlmeUVycm9yLmJpbmQodGhpcywgdGhpcy5oYW5kbGVfLmRpc2Nvbm5lY3RSZWFzb24oKSks
Ci0gICAgICAgICAgICAgICAgIDApOwotICAgIH0KLSAgfTsKLQotICBJbnRlcmZhY2VFbmRwb2lu
dENsaWVudC5wcm90b3R5cGUucGFzc0hhbmRsZSA9IGZ1bmN0aW9uKCkgewotICAgIGlmICghdGhp
cy5oYW5kbGVfLmlzVmFsaWQoKSkgewotICAgICAgcmV0dXJuIG5ldyBpbnRlcm5hbC5JbnRlcmZh
Y2VFbmRwb2ludEhhbmRsZSgpOwotICAgIH0KLQotICAgIC8vIFVzZWQgdG8gY2xlYXIgdGhlIHBy
ZXZpb3VzbHkgc2V0IGNhbGxiYWNrLgotICAgIHRoaXMuaGFuZGxlXy5zZXRBc3NvY2lhdGlvbkV2
ZW50SGFuZGxlcih1bmRlZmluZWQpOwotCi0gICAgaWYgKHRoaXMuY29udHJvbGxlcl8pIHsKLSAg
ICAgIHRoaXMuY29udHJvbGxlcl8gPSBudWxsOwotICAgICAgdGhpcy5oYW5kbGVfLmdyb3VwQ29u
dHJvbGxlcigpLmRldGFjaEVuZHBvaW50Q2xpZW50KHRoaXMuaGFuZGxlXyk7Ci0gICAgfQotICAg
IHZhciBoYW5kbGUgPSB0aGlzLmhhbmRsZV87Ci0gICAgdGhpcy5oYW5kbGVfID0gbnVsbDsKLSAg
ICByZXR1cm4gaGFuZGxlOwotICB9OwotCi0gIEludGVyZmFjZUVuZHBvaW50Q2xpZW50LnByb3Rv
dHlwZS5jbG9zZSA9IGZ1bmN0aW9uKHJlYXNvbikgewotICAgIHZhciBoYW5kbGUgPSB0aGlzLnBh
c3NIYW5kbGUoKTsKLSAgICBoYW5kbGUucmVzZXQocmVhc29uKTsKLSAgfTsKLQotICBJbnRlcmZh
Y2VFbmRwb2ludENsaWVudC5wcm90b3R5cGUuYWNjZXB0ID0gZnVuY3Rpb24obWVzc2FnZSkgewot
ICAgIGlmIChtZXNzYWdlLmFzc29jaWF0ZWRFbmRwb2ludEhhbmRsZXMubGVuZ3RoID4gMCkgewot
ICAgICAgbWVzc2FnZS5zZXJpYWxpemVBc3NvY2lhdGVkRW5kcG9pbnRIYW5kbGVzKAotICAgICAg
ICAgIHRoaXMuaGFuZGxlXy5ncm91cENvbnRyb2xsZXIoKSk7Ci0gICAgfQotCi0gICAgaWYgKHRo
aXMuZW5jb3VudGVyZWRFcnJvcl8pIHsKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAg
ICB0aGlzLmluaXRDb250cm9sbGVySWZOZWNlc3NhcnlfKCk7Ci0gICAgcmV0dXJuIHRoaXMuY29u
dHJvbGxlcl8uc2VuZE1lc3NhZ2UobWVzc2FnZSk7Ci0gIH07Ci0KLSAgSW50ZXJmYWNlRW5kcG9p
bnRDbGllbnQucHJvdG90eXBlLmFjY2VwdEFuZEV4cGVjdFJlc3BvbnNlID0gZnVuY3Rpb24oCi0g
ICAgICBtZXNzYWdlKSB7Ci0gICAgaWYgKG1lc3NhZ2UuYXNzb2NpYXRlZEVuZHBvaW50SGFuZGxl
cy5sZW5ndGggPiAwKSB7Ci0gICAgICBtZXNzYWdlLnNlcmlhbGl6ZUFzc29jaWF0ZWRFbmRwb2lu
dEhhbmRsZXMoCi0gICAgICAgICAgdGhpcy5oYW5kbGVfLmdyb3VwQ29udHJvbGxlcigpKTsKLSAg
ICB9Ci0KLSAgICBpZiAodGhpcy5lbmNvdW50ZXJlZEVycm9yXykgewotICAgICAgcmV0dXJuIFBy
b21pc2UucmVqZWN0KCk7Ci0gICAgfQotCi0gICAgdGhpcy5pbml0Q29udHJvbGxlcklmTmVjZXNz
YXJ5XygpOwotCi0gICAgLy8gUmVzZXJ2ZSAwIGluIGNhc2Ugd2Ugd2FudCBpdCB0byBjb252ZXkg
c3BlY2lhbCBtZWFuaW5nIGluIHRoZSBmdXR1cmUuCi0gICAgdmFyIHJlcXVlc3RJRCA9IHRoaXMu
bmV4dFJlcXVlc3RJRF8rKzsKLSAgICBpZiAocmVxdWVzdElEID09PSAwKQotICAgICAgcmVxdWVz
dElEID0gdGhpcy5uZXh0UmVxdWVzdElEXysrOwotCi0gICAgbWVzc2FnZS5zZXRSZXF1ZXN0SUQo
cmVxdWVzdElEKTsKLSAgICB2YXIgcmVzdWx0ID0gdGhpcy5jb250cm9sbGVyXy5zZW5kTWVzc2Fn
ZShtZXNzYWdlKTsKLSAgICBpZiAoIXJlc3VsdCkKLSAgICAgIHJldHVybiBQcm9taXNlLnJlamVj
dChFcnJvcigiQ29ubmVjdGlvbiBlcnJvciIpKTsKLQotICAgIHZhciBjb21wbGV0ZXIgPSB7fTsK
LSAgICB0aGlzLmNvbXBsZXRlcnNfLnNldChyZXF1ZXN0SUQsIGNvbXBsZXRlcik7Ci0gICAgcmV0
dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkgewotICAgICAgY29tcGxl
dGVyLnJlc29sdmUgPSByZXNvbHZlOwotICAgICAgY29tcGxldGVyLnJlamVjdCA9IHJlamVjdDsK
LSAgICB9KTsKLSAgfTsKLQotICBJbnRlcmZhY2VFbmRwb2ludENsaWVudC5wcm90b3R5cGUuc2V0
UGF5bG9hZFZhbGlkYXRvcnMgPSBmdW5jdGlvbigKLSAgICAgIHBheWxvYWRWYWxpZGF0b3JzKSB7
Ci0gICAgdGhpcy5wYXlsb2FkVmFsaWRhdG9yc18gPSBwYXlsb2FkVmFsaWRhdG9yczsKLSAgfTsK
LQotICBJbnRlcmZhY2VFbmRwb2ludENsaWVudC5wcm90b3R5cGUuc2V0SW5jb21pbmdSZWNlaXZl
ciA9IGZ1bmN0aW9uKHJlY2VpdmVyKSB7Ci0gICAgdGhpcy5pbmNvbWluZ1JlY2VpdmVyXyA9IHJl
Y2VpdmVyOwotICB9OwotCi0gIEludGVyZmFjZUVuZHBvaW50Q2xpZW50LnByb3RvdHlwZS5zZXRD
b25uZWN0aW9uRXJyb3JIYW5kbGVyID0gZnVuY3Rpb24oCi0gICAgICBoYW5kbGVyKSB7Ci0gICAg
dGhpcy5jb25uZWN0aW9uRXJyb3JIYW5kbGVyXyA9IGhhbmRsZXI7Ci0gIH07Ci0KLSAgSW50ZXJm
YWNlRW5kcG9pbnRDbGllbnQucHJvdG90eXBlLmhhbmRsZUluY29taW5nTWVzc2FnZSA9IGZ1bmN0
aW9uKG1lc3NhZ2UsCi0gICAgICBtZXNzYWdlVmFsaWRhdG9yKSB7Ci0gICAgdmFyIG5vRXJyb3Ig
PSBpbnRlcm5hbC52YWxpZGF0aW9uRXJyb3IuTk9ORTsKLSAgICB2YXIgZXJyID0gbm9FcnJvcjsK
LSAgICBmb3IgKHZhciBpID0gMDsgZXJyID09PSBub0Vycm9yICYmIGkgPCB0aGlzLnBheWxvYWRW
YWxpZGF0b3JzXy5sZW5ndGg7ICsraSkKLSAgICAgIGVyciA9IHRoaXMucGF5bG9hZFZhbGlkYXRv
cnNfW2ldKG1lc3NhZ2VWYWxpZGF0b3IpOwotCi0gICAgaWYgKGVyciA9PSBub0Vycm9yKSB7Ci0g
ICAgICByZXR1cm4gdGhpcy5oYW5kbGVWYWxpZEluY29taW5nTWVzc2FnZV8obWVzc2FnZSk7Ci0g
ICAgfSBlbHNlIHsKLSAgICAgIGludGVybmFsLnJlcG9ydFZhbGlkYXRpb25FcnJvcihlcnIpOwot
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgfTsKLQotICBJbnRlcmZhY2VFbmRwb2ludENs
aWVudC5wcm90b3R5cGUuaGFuZGxlVmFsaWRJbmNvbWluZ01lc3NhZ2VfID0gZnVuY3Rpb24oCi0g
ICAgICBtZXNzYWdlKSB7Ci0gICAgaWYgKGludGVybmFsLmlzVGVzdGluZ01vZGUoKSkgewotICAg
ICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgaWYgKHRoaXMuZW5jb3VudGVyZWRFcnJvcl8p
IHsKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICB2YXIgb2sgPSBmYWxzZTsKLQot
ICAgIGlmIChtZXNzYWdlLmV4cGVjdHNSZXNwb25zZSgpKSB7Ci0gICAgICBpZiAoaW50ZXJuYWwu
aXNJbnRlcmZhY2VDb250cm9sTWVzc2FnZShtZXNzYWdlKSAmJgotICAgICAgICAgIHRoaXMuY29u
dHJvbE1lc3NhZ2VIYW5kbGVyXykgewotICAgICAgICBvayA9IHRoaXMuY29udHJvbE1lc3NhZ2VI
YW5kbGVyXy5hY2NlcHRXaXRoUmVzcG9uZGVyKG1lc3NhZ2UsIHRoaXMpOwotICAgICAgfSBlbHNl
IGlmICh0aGlzLmluY29taW5nUmVjZWl2ZXJfKSB7Ci0gICAgICAgIG9rID0gdGhpcy5pbmNvbWlu
Z1JlY2VpdmVyXy5hY2NlcHRXaXRoUmVzcG9uZGVyKG1lc3NhZ2UsIHRoaXMpOwotICAgICAgfQot
ICAgIH0gZWxzZSBpZiAobWVzc2FnZS5pc1Jlc3BvbnNlKCkpIHsKLSAgICAgIHZhciByZWFkZXIg
PSBuZXcgaW50ZXJuYWwuTWVzc2FnZVJlYWRlcihtZXNzYWdlKTsKLSAgICAgIHZhciByZXF1ZXN0
SUQgPSByZWFkZXIucmVxdWVzdElEOwotICAgICAgdmFyIGNvbXBsZXRlciA9IHRoaXMuY29tcGxl
dGVyc18uZ2V0KHJlcXVlc3RJRCk7Ci0gICAgICBpZiAoY29tcGxldGVyKSB7Ci0gICAgICAgIHRo
aXMuY29tcGxldGVyc18uZGVsZXRlKHJlcXVlc3RJRCk7Ci0gICAgICAgIGNvbXBsZXRlci5yZXNv
bHZlKG1lc3NhZ2UpOwotICAgICAgICBvayA9IHRydWU7Ci0gICAgICB9IGVsc2UgewotICAgICAg
ICBjb25zb2xlLmxvZygiVW5leHBlY3RlZCByZXNwb25zZSB3aXRoIHJlcXVlc3QgSUQ6ICIgKyBy
ZXF1ZXN0SUQpOwotICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICBpZiAoaW50ZXJuYWwuaXNJ
bnRlcmZhY2VDb250cm9sTWVzc2FnZShtZXNzYWdlKSAmJgotICAgICAgICAgIHRoaXMuY29udHJv
bE1lc3NhZ2VIYW5kbGVyXykgewotICAgICAgICBvayA9IHRoaXMuY29udHJvbE1lc3NhZ2VIYW5k
bGVyXy5hY2NlcHQobWVzc2FnZSk7Ci0gICAgICB9IGVsc2UgaWYgKHRoaXMuaW5jb21pbmdSZWNl
aXZlcl8pIHsKLSAgICAgICAgb2sgPSB0aGlzLmluY29taW5nUmVjZWl2ZXJfLmFjY2VwdChtZXNz
YWdlKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIG9rOwotICB9OwotCi0gIEludGVyZmFj
ZUVuZHBvaW50Q2xpZW50LnByb3RvdHlwZS5ub3RpZnlFcnJvciA9IGZ1bmN0aW9uKHJlYXNvbikg
ewotICAgIGlmICh0aGlzLmVuY291bnRlcmVkRXJyb3JfKSB7Ci0gICAgICByZXR1cm47Ci0gICAg
fQotICAgIHRoaXMuZW5jb3VudGVyZWRFcnJvcl8gPSB0cnVlOwotCi0gICAgdGhpcy5jb21wbGV0
ZXJzXy5mb3JFYWNoKGZ1bmN0aW9uKHZhbHVlKSB7Ci0gICAgICB2YWx1ZS5yZWplY3QoKTsKLSAg
ICB9KTsKLSAgICB0aGlzLmNvbXBsZXRlcnNfLmNsZWFyKCk7ICAvLyBEcm9wIGFueSByZXNwb25k
ZXJzLgotCi0gICAgaWYgKHRoaXMuY29ubmVjdGlvbkVycm9ySGFuZGxlcl8pIHsKLSAgICAgIHRo
aXMuY29ubmVjdGlvbkVycm9ySGFuZGxlcl8ocmVhc29uKTsKLSAgICB9Ci0gIH07Ci0KLSAgSW50
ZXJmYWNlRW5kcG9pbnRDbGllbnQucHJvdG90eXBlLnF1ZXJ5VmVyc2lvbiA9IGZ1bmN0aW9uKCkg
ewotICAgIHJldHVybiB0aGlzLmNvbnRyb2xNZXNzYWdlUHJveHlfLnF1ZXJ5VmVyc2lvbigpOwot
ICB9OwotCi0gIEludGVyZmFjZUVuZHBvaW50Q2xpZW50LnByb3RvdHlwZS5yZXF1aXJlVmVyc2lv
biA9IGZ1bmN0aW9uKHZlcnNpb24pIHsKLSAgICB0aGlzLmNvbnRyb2xNZXNzYWdlUHJveHlfLnJl
cXVpcmVWZXJzaW9uKHZlcnNpb24pOwotICB9OwotCi0gIEludGVyZmFjZUVuZHBvaW50Q2xpZW50
LnByb3RvdHlwZS5nZXRFbmNvdW50ZXJlZEVycm9yID0gZnVuY3Rpb24oKSB7Ci0gICAgcmV0dXJu
IHRoaXMuZW5jb3VudGVyZWRFcnJvcl87Ci0gIH07Ci0KLSAgaW50ZXJuYWwuSW50ZXJmYWNlRW5k
cG9pbnRDbGllbnQgPSBJbnRlcmZhY2VFbmRwb2ludENsaWVudDsKLX0pKCk7Ci0vLyBDb3B5cmln
aHQgMjAxNyBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVz
ZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2Ug
dGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLShmdW5jdGlvbigp
IHsKLSAgdmFyIGludGVybmFsID0gbW9qby5pbnRlcm5hbDsKLQotICB2YXIgQXNzb2NpYXRpb25F
dmVudCA9IHsKLSAgICAvLyBUaGUgaW50ZXJmYWNlIGhhcyBiZWVuIGFzc29jaWF0ZWQgd2l0aCBh
IG1lc3NhZ2UgcGlwZS4KLSAgICBBU1NPQ0lBVEVEOiAnYXNzb2NpYXRlZCcsCi0gICAgLy8gVGhl
IHBlZXIgb2YgdGhpcyBvYmplY3QgaGFzIGJlZW4gY2xvc2VkIGJlZm9yZSBhc3NvY2lhdGlvbi4K
LSAgICBQRUVSX0NMT1NFRF9CRUZPUkVfQVNTT0NJQVRJT046ICdwZWVyX2Nsb3NlZF9iZWZvcmVf
YXNzb2NpYXRpb24nCi0gIH07Ci0KLSAgZnVuY3Rpb24gU3RhdGUoaW50ZXJmYWNlSWQsIGFzc29j
aWF0ZWRHcm91cENvbnRyb2xsZXIpIHsKLSAgICBpZiAoaW50ZXJmYWNlSWQgPT09IHVuZGVmaW5l
ZCkgewotICAgICAgaW50ZXJmYWNlSWQgPSBpbnRlcm5hbC5rSW52YWxpZEludGVyZmFjZUlkOwot
ICAgIH0KLQotICAgIHRoaXMuaW50ZXJmYWNlSWQgPSBpbnRlcmZhY2VJZDsKLSAgICB0aGlzLmFz
c29jaWF0ZWRHcm91cENvbnRyb2xsZXIgPSBhc3NvY2lhdGVkR3JvdXBDb250cm9sbGVyOwotICAg
IHRoaXMucGVuZGluZ0Fzc29jaWF0aW9uID0gZmFsc2U7Ci0gICAgdGhpcy5kaXNjb25uZWN0UmVh
c29uID0gbnVsbDsKLSAgICB0aGlzLnBlZXJTdGF0ZV8gPSBudWxsOwotICAgIHRoaXMuYXNzb2Np
YXRpb25FdmVudEhhbmRsZXJfID0gbnVsbDsKLSAgfQotCi0gIFN0YXRlLnByb3RvdHlwZS5pbml0
UGVuZGluZ1N0YXRlID0gZnVuY3Rpb24ocGVlcikgewotICAgIHRoaXMucGVuZGluZ0Fzc29jaWF0
aW9uID0gdHJ1ZTsKLSAgICB0aGlzLnBlZXJTdGF0ZV8gPSBwZWVyOwotICB9OwotCi0gIFN0YXRl
LnByb3RvdHlwZS5pc1ZhbGlkID0gZnVuY3Rpb24oKSB7Ci0gICAgcmV0dXJuIHRoaXMucGVuZGlu
Z0Fzc29jaWF0aW9uIHx8Ci0gICAgICAgIGludGVybmFsLmlzVmFsaWRJbnRlcmZhY2VJZCh0aGlz
LmludGVyZmFjZUlkKTsKLSAgfTsKLQotICBTdGF0ZS5wcm90b3R5cGUuY2xvc2UgPSBmdW5jdGlv
bihkaXNjb25uZWN0UmVhc29uKSB7Ci0gICAgdmFyIGNhY2hlZEdyb3VwQ29udHJvbGxlcjsKLSAg
ICB2YXIgY2FjaGVkUGVlclN0YXRlOwotICAgIHZhciBjYWNoZWRJZCA9IGludGVybmFsLmtJbnZh
bGlkSW50ZXJmYWNlSWQ7Ci0KLSAgICBpZiAoIXRoaXMucGVuZGluZ0Fzc29jaWF0aW9uKSB7Ci0g
ICAgICBpZiAoaW50ZXJuYWwuaXNWYWxpZEludGVyZmFjZUlkKHRoaXMuaW50ZXJmYWNlSWQpKSB7
Ci0gICAgICAgIGNhY2hlZEdyb3VwQ29udHJvbGxlciA9IHRoaXMuYXNzb2NpYXRlZEdyb3VwQ29u
dHJvbGxlcjsKLSAgICAgICAgdGhpcy5hc3NvY2lhdGVkR3JvdXBDb250cm9sbGVyID0gbnVsbDsK
LSAgICAgICAgY2FjaGVkSWQgPSB0aGlzLmludGVyZmFjZUlkOwotICAgICAgICB0aGlzLmludGVy
ZmFjZUlkID0gaW50ZXJuYWwua0ludmFsaWRJbnRlcmZhY2VJZDsKLSAgICAgIH0KLSAgICB9IGVs
c2UgewotICAgICAgdGhpcy5wZW5kaW5nQXNzb2NpYXRpb24gPSBmYWxzZTsKLSAgICAgIGNhY2hl
ZFBlZXJTdGF0ZSA9IHRoaXMucGVlclN0YXRlXzsKLSAgICAgIHRoaXMucGVlclN0YXRlXyA9IG51
bGw7Ci0gICAgfQotCi0gICAgaWYgKGNhY2hlZEdyb3VwQ29udHJvbGxlcikgewotICAgICAgY2Fj
aGVkR3JvdXBDb250cm9sbGVyLmNsb3NlRW5kcG9pbnRIYW5kbGUoY2FjaGVkSWQsCi0gICAgICAg
ICAgZGlzY29ubmVjdFJlYXNvbik7Ci0gICAgfSBlbHNlIGlmIChjYWNoZWRQZWVyU3RhdGUpIHsK
LSAgICAgIGNhY2hlZFBlZXJTdGF0ZS5vblBlZXJDbG9zZWRCZWZvcmVBc3NvY2lhdGlvbihkaXNj
b25uZWN0UmVhc29uKTsKLSAgICB9Ci0gIH07Ci0KLSAgU3RhdGUucHJvdG90eXBlLnJ1bkFzc29j
aWF0aW9uRXZlbnRIYW5kbGVyID0gZnVuY3Rpb24oYXNzb2NpYXRpb25FdmVudCkgewotICAgIGlm
ICh0aGlzLmFzc29jaWF0aW9uRXZlbnRIYW5kbGVyXykgewotICAgICAgdmFyIGhhbmRsZXIgPSB0
aGlzLmFzc29jaWF0aW9uRXZlbnRIYW5kbGVyXzsKLSAgICAgIHRoaXMuYXNzb2NpYXRpb25FdmVu
dEhhbmRsZXJfID0gbnVsbDsKLSAgICAgIGhhbmRsZXIoYXNzb2NpYXRpb25FdmVudCk7Ci0gICAg
fQotICB9OwotCi0gIFN0YXRlLnByb3RvdHlwZS5zZXRBc3NvY2lhdGlvbkV2ZW50SGFuZGxlciA9
IGZ1bmN0aW9uKGhhbmRsZXIpIHsKLSAgICBpZiAoIXRoaXMucGVuZGluZ0Fzc29jaWF0aW9uICYm
Ci0gICAgICAgICFpbnRlcm5hbC5pc1ZhbGlkSW50ZXJmYWNlSWQodGhpcy5pbnRlcmZhY2VJZCkp
IHsKLSAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAoIWhhbmRsZXIpIHsKLSAgICAgIHRo
aXMuYXNzb2NpYXRpb25FdmVudEhhbmRsZXJfID0gbnVsbDsKLSAgICAgIHJldHVybjsKLSAgICB9
Ci0KLSAgICB0aGlzLmFzc29jaWF0aW9uRXZlbnRIYW5kbGVyXyA9IGhhbmRsZXI7Ci0gICAgaWYg
KCF0aGlzLnBlbmRpbmdBc3NvY2lhdGlvbikgewotICAgICAgc2V0VGltZW91dCh0aGlzLnJ1bkFz
c29jaWF0aW9uRXZlbnRIYW5kbGVyLmJpbmQodGhpcywKLSAgICAgICAgICBBc3NvY2lhdGlvbkV2
ZW50LkFTU09DSUFURUQpLCAwKTsKLSAgICB9IGVsc2UgaWYgKCF0aGlzLnBlZXJTdGF0ZV8pIHsK
LSAgICAgIHNldFRpbWVvdXQodGhpcy5ydW5Bc3NvY2lhdGlvbkV2ZW50SGFuZGxlci5iaW5kKHRo
aXMsCi0gICAgICAgICAgQXNzb2NpYXRpb25FdmVudC5QRUVSX0NMT1NFRF9CRUZPUkVfQVNTT0NJ
QVRJT04pLCAwKTsKLSAgICB9Ci0gIH07Ci0KLSAgU3RhdGUucHJvdG90eXBlLm5vdGlmeUFzc29j
aWF0aW9uID0gZnVuY3Rpb24oaW50ZXJmYWNlSWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHBlZXJHcm91cENvbnRyb2xsZXIpIHsKLSAgICB2YXIgY2Fj
aGVkUGVlclN0YXRlID0gdGhpcy5wZWVyU3RhdGVfOwotICAgIHRoaXMucGVlclN0YXRlXyA9IG51
bGw7Ci0KLSAgICB0aGlzLnBlbmRpbmdBc3NvY2lhdGlvbiA9IGZhbHNlOwotCi0gICAgaWYgKGNh
Y2hlZFBlZXJTdGF0ZSkgewotICAgICAgY2FjaGVkUGVlclN0YXRlLm9uQXNzb2NpYXRlZChpbnRl
cmZhY2VJZCwgcGVlckdyb3VwQ29udHJvbGxlcik7Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9
Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9OwotCi0gIFN0YXRlLnByb3RvdHlwZS5vbkFzc29jaWF0
ZWQgPSBmdW5jdGlvbihpbnRlcmZhY2VJZCwKLSAgICAgIGFzc29jaWF0ZWRHcm91cENvbnRyb2xs
ZXIpIHsKLSAgICBpZiAoIXRoaXMucGVuZGluZ0Fzc29jaWF0aW9uKSB7Ci0gICAgICByZXR1cm47
Ci0gICAgfQotCi0gICAgdGhpcy5wZW5kaW5nQXNzb2NpYXRpb24gPSBmYWxzZTsKLSAgICB0aGlz
LnBlZXJTdGF0ZV8gPSBudWxsOwotICAgIHRoaXMuaW50ZXJmYWNlSWQgPSBpbnRlcmZhY2VJZDsK
LSAgICB0aGlzLmFzc29jaWF0ZWRHcm91cENvbnRyb2xsZXIgPSBhc3NvY2lhdGVkR3JvdXBDb250
cm9sbGVyOwotICAgIHRoaXMucnVuQXNzb2NpYXRpb25FdmVudEhhbmRsZXIoQXNzb2NpYXRpb25F
dmVudC5BU1NPQ0lBVEVEKTsKLSAgfTsKLQotICBTdGF0ZS5wcm90b3R5cGUub25QZWVyQ2xvc2Vk
QmVmb3JlQXNzb2NpYXRpb24gPSBmdW5jdGlvbihkaXNjb25uZWN0UmVhc29uKSB7Ci0gICAgaWYg
KCF0aGlzLnBlbmRpbmdBc3NvY2lhdGlvbikgewotICAgICAgcmV0dXJuOwotICAgIH0KLQotICAg
IHRoaXMucGVlclN0YXRlXyA9IG51bGw7Ci0gICAgdGhpcy5kaXNjb25uZWN0UmVhc29uID0gZGlz
Y29ubmVjdFJlYXNvbjsKLQotICAgIHRoaXMucnVuQXNzb2NpYXRpb25FdmVudEhhbmRsZXIoCi0g
ICAgICAgIEFzc29jaWF0aW9uRXZlbnQuUEVFUl9DTE9TRURfQkVGT1JFX0FTU09DSUFUSU9OKTsK
LSAgfTsKLQotICBmdW5jdGlvbiBjcmVhdGVQYWlyUGVuZGluZ0Fzc29jaWF0aW9uKCkgewotICAg
IHZhciBoYW5kbGUwID0gbmV3IEludGVyZmFjZUVuZHBvaW50SGFuZGxlKCk7Ci0gICAgdmFyIGhh
bmRsZTEgPSBuZXcgSW50ZXJmYWNlRW5kcG9pbnRIYW5kbGUoKTsKLSAgICBoYW5kbGUwLnN0YXRl
Xy5pbml0UGVuZGluZ1N0YXRlKGhhbmRsZTEuc3RhdGVfKTsKLSAgICBoYW5kbGUxLnN0YXRlXy5p
bml0UGVuZGluZ1N0YXRlKGhhbmRsZTAuc3RhdGVfKTsKLSAgICByZXR1cm4ge2hhbmRsZTA6IGhh
bmRsZTAsIGhhbmRsZTE6IGhhbmRsZTF9OwotICB9Ci0KLSAgZnVuY3Rpb24gSW50ZXJmYWNlRW5k
cG9pbnRIYW5kbGUoaW50ZXJmYWNlSWQsIGFzc29jaWF0ZWRHcm91cENvbnRyb2xsZXIpIHsKLSAg
ICB0aGlzLnN0YXRlXyA9IG5ldyBTdGF0ZShpbnRlcmZhY2VJZCwgYXNzb2NpYXRlZEdyb3VwQ29u
dHJvbGxlcik7Ci0gIH0KLQotICBJbnRlcmZhY2VFbmRwb2ludEhhbmRsZS5wcm90b3R5cGUuaXNW
YWxpZCA9IGZ1bmN0aW9uKCkgewotICAgIHJldHVybiB0aGlzLnN0YXRlXy5pc1ZhbGlkKCk7Ci0g
IH07Ci0KLSAgSW50ZXJmYWNlRW5kcG9pbnRIYW5kbGUucHJvdG90eXBlLnBlbmRpbmdBc3NvY2lh
dGlvbiA9IGZ1bmN0aW9uKCkgewotICAgIHJldHVybiB0aGlzLnN0YXRlXy5wZW5kaW5nQXNzb2Np
YXRpb247Ci0gIH07Ci0KLSAgSW50ZXJmYWNlRW5kcG9pbnRIYW5kbGUucHJvdG90eXBlLmlkID0g
ZnVuY3Rpb24oKSB7Ci0gICAgcmV0dXJuIHRoaXMuc3RhdGVfLmludGVyZmFjZUlkOwotICB9Owot
Ci0gIEludGVyZmFjZUVuZHBvaW50SGFuZGxlLnByb3RvdHlwZS5ncm91cENvbnRyb2xsZXIgPSBm
dW5jdGlvbigpIHsKLSAgICByZXR1cm4gdGhpcy5zdGF0ZV8uYXNzb2NpYXRlZEdyb3VwQ29udHJv
bGxlcjsKLSAgfTsKLQotICBJbnRlcmZhY2VFbmRwb2ludEhhbmRsZS5wcm90b3R5cGUuZGlzY29u
bmVjdFJlYXNvbiA9IGZ1bmN0aW9uKCkgewotICAgIHJldHVybiB0aGlzLnN0YXRlXy5kaXNjb25u
ZWN0UmVhc29uOwotICB9OwotCi0gIEludGVyZmFjZUVuZHBvaW50SGFuZGxlLnByb3RvdHlwZS5z
ZXRBc3NvY2lhdGlvbkV2ZW50SGFuZGxlciA9IGZ1bmN0aW9uKAotICAgICAgaGFuZGxlcikgewot
ICAgIHRoaXMuc3RhdGVfLnNldEFzc29jaWF0aW9uRXZlbnRIYW5kbGVyKGhhbmRsZXIpOwotICB9
OwotCi0gIEludGVyZmFjZUVuZHBvaW50SGFuZGxlLnByb3RvdHlwZS5ub3RpZnlBc3NvY2lhdGlv
biA9IGZ1bmN0aW9uKGludGVyZmFjZUlkLAotICAgICAgcGVlckdyb3VwQ29udHJvbGxlcikgewot
ICAgIHJldHVybiB0aGlzLnN0YXRlXy5ub3RpZnlBc3NvY2lhdGlvbihpbnRlcmZhY2VJZCwgcGVl
ckdyb3VwQ29udHJvbGxlcik7Ci0gIH07Ci0KLSAgSW50ZXJmYWNlRW5kcG9pbnRIYW5kbGUucHJv
dG90eXBlLnJlc2V0ID0gZnVuY3Rpb24ocmVhc29uKSB7Ci0gICAgdGhpcy5zdGF0ZV8uY2xvc2Uo
cmVhc29uKTsKLSAgICB0aGlzLnN0YXRlXyA9IG5ldyBTdGF0ZSgpOwotICB9OwotCi0gIGludGVy
bmFsLkFzc29jaWF0aW9uRXZlbnQgPSBBc3NvY2lhdGlvbkV2ZW50OwotICBpbnRlcm5hbC5JbnRl
cmZhY2VFbmRwb2ludEhhbmRsZSA9IEludGVyZmFjZUVuZHBvaW50SGFuZGxlOwotICBpbnRlcm5h
bC5jcmVhdGVQYWlyUGVuZGluZ0Fzc29jaWF0aW9uID0gY3JlYXRlUGFpclBlbmRpbmdBc3NvY2lh
dGlvbjsKLX0pKCk7Ci0vLyBDb3B5cmlnaHQgMjAxNyBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVk
IGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNF
TlNFIGZpbGUuCi0KLShmdW5jdGlvbigpIHsKLSAgdmFyIGludGVybmFsID0gbW9qby5pbnRlcm5h
bDsKLQotICBmdW5jdGlvbiB2YWxpZGF0ZUNvbnRyb2xSZXF1ZXN0V2l0aG91dFJlc3BvbnNlKG1l
c3NhZ2UpIHsKLSAgICB2YXIgbWVzc2FnZVZhbGlkYXRvciA9IG5ldyBpbnRlcm5hbC5WYWxpZGF0
b3IobWVzc2FnZSk7Ci0gICAgdmFyIGVycm9yID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZU1l
c3NhZ2VJc1JlcXVlc3RXaXRob3V0UmVzcG9uc2UoKTsKLSAgICBpZiAoZXJyb3IgIT0gaW50ZXJu
YWwudmFsaWRhdGlvbkVycm9yLk5PTkUpIHsKLSAgICAgIHRocm93IGVycm9yOwotICAgIH0KLQot
ICAgIGlmIChtZXNzYWdlLmdldE5hbWUoKSAhPSBtb2pvLnBpcGVDb250cm9sLmtSdW5PckNsb3Nl
UGlwZU1lc3NhZ2VJZCkgewotICAgICAgdGhyb3cgbmV3IEVycm9yKCJDb250cm9sIG1lc3NhZ2Ug
bmFtZSBpcyBub3Qga1J1bk9yQ2xvc2VQaXBlTWVzc2FnZUlkIik7Ci0gICAgfQotCi0gICAgLy8g
VmFsaWRhdGUgcGF5bG9hZC4KLSAgICBlcnJvciA9IG1vam8ucGlwZUNvbnRyb2wuUnVuT3JDbG9z
ZVBpcGVNZXNzYWdlUGFyYW1zLnZhbGlkYXRlKAotICAgICAgICBtZXNzYWdlVmFsaWRhdG9yLCBt
ZXNzYWdlLmdldEhlYWRlck51bUJ5dGVzKCkpOwotICAgIGlmIChlcnJvciAhPSBpbnRlcm5hbC52
YWxpZGF0aW9uRXJyb3IuTk9ORSkgewotICAgICAgdGhyb3cgZXJyb3I7Ci0gICAgfQotICB9Ci0K
LSAgZnVuY3Rpb24gcnVuT3JDbG9zZVBpcGUobWVzc2FnZSwgZGVsZWdhdGUpIHsKLSAgICB2YXIg
cmVhZGVyID0gbmV3IGludGVybmFsLk1lc3NhZ2VSZWFkZXIobWVzc2FnZSk7Ci0gICAgdmFyIHJ1
bk9yQ2xvc2VQaXBlTWVzc2FnZVBhcmFtcyA9IHJlYWRlci5kZWNvZGVTdHJ1Y3QoCi0gICAgICAg
IG1vam8ucGlwZUNvbnRyb2wuUnVuT3JDbG9zZVBpcGVNZXNzYWdlUGFyYW1zKTsKLSAgICB2YXIg
ZXZlbnQgPSBydW5PckNsb3NlUGlwZU1lc3NhZ2VQYXJhbXMuaW5wdXQKLSAgICAgICAgLnBlZXJB
c3NvY2lhdGVkRW5kcG9pbnRDbG9zZWRFdmVudDsKLSAgICByZXR1cm4gZGVsZWdhdGUub25QZWVy
QXNzb2NpYXRlZEVuZHBvaW50Q2xvc2VkKGV2ZW50LmlkLAotICAgICAgICBldmVudC5kaXNjb25u
ZWN0UmVhc29uKTsKLSAgfQotCi0gIGZ1bmN0aW9uIGlzUGlwZUNvbnRyb2xNZXNzYWdlKG1lc3Nh
Z2UpIHsKLSAgICByZXR1cm4gIWludGVybmFsLmlzVmFsaWRJbnRlcmZhY2VJZChtZXNzYWdlLmdl
dEludGVyZmFjZUlkKCkpOwotICB9Ci0KLSAgZnVuY3Rpb24gUGlwZUNvbnRyb2xNZXNzYWdlSGFu
ZGxlcihkZWxlZ2F0ZSkgewotICAgIHRoaXMuZGVsZWdhdGVfID0gZGVsZWdhdGU7Ci0gIH0KLQot
ICBQaXBlQ29udHJvbE1lc3NhZ2VIYW5kbGVyLnByb3RvdHlwZS5hY2NlcHQgPSBmdW5jdGlvbiht
ZXNzYWdlKSB7Ci0gICAgdmFsaWRhdGVDb250cm9sUmVxdWVzdFdpdGhvdXRSZXNwb25zZShtZXNz
YWdlKTsKLSAgICByZXR1cm4gcnVuT3JDbG9zZVBpcGUobWVzc2FnZSwgdGhpcy5kZWxlZ2F0ZV8p
OwotICB9OwotCi0gIGludGVybmFsLlBpcGVDb250cm9sTWVzc2FnZUhhbmRsZXIgPSBQaXBlQ29u
dHJvbE1lc3NhZ2VIYW5kbGVyOwotICBpbnRlcm5hbC5pc1BpcGVDb250cm9sTWVzc2FnZSA9IGlz
UGlwZUNvbnRyb2xNZXNzYWdlOwotfSkoKTsKLS8vIENvcHlyaWdodCAyMDE3IFRoZSBDaHJvbWl1
bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNv
ZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91
bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLQotKGZ1bmN0aW9uKCkgewotICB2YXIgaW50ZXJuYWwg
PSBtb2pvLmludGVybmFsOwotCi0gIGZ1bmN0aW9uIGNvbnN0cnVjdFJ1bk9yQ2xvc2VQaXBlTWVz
c2FnZShydW5PckNsb3NlUGlwZUlucHV0KSB7Ci0gICAgdmFyIHJ1bk9yQ2xvc2VQaXBlTWVzc2Fn
ZVBhcmFtcyA9IG5ldwotICAgICAgICBtb2pvLnBpcGVDb250cm9sLlJ1bk9yQ2xvc2VQaXBlTWVz
c2FnZVBhcmFtcygpOwotICAgIHJ1bk9yQ2xvc2VQaXBlTWVzc2FnZVBhcmFtcy5pbnB1dCA9IHJ1
bk9yQ2xvc2VQaXBlSW5wdXQ7Ci0KLSAgICB2YXIgbWVzc2FnZU5hbWUgPSBtb2pvLnBpcGVDb250
cm9sLmtSdW5PckNsb3NlUGlwZU1lc3NhZ2VJZDsKLSAgICB2YXIgcGF5bG9hZFNpemUgPQotICAg
ICAgICBtb2pvLnBpcGVDb250cm9sLlJ1bk9yQ2xvc2VQaXBlTWVzc2FnZVBhcmFtcy5lbmNvZGVk
U2l6ZTsKLQotICAgIHZhciBidWlsZGVyID0gbmV3IGludGVybmFsLk1lc3NhZ2VWMEJ1aWxkZXIo
bWVzc2FnZU5hbWUsIHBheWxvYWRTaXplKTsKLSAgICBidWlsZGVyLmVuY29kZVN0cnVjdChtb2pv
LnBpcGVDb250cm9sLlJ1bk9yQ2xvc2VQaXBlTWVzc2FnZVBhcmFtcywKLSAgICAgICAgICAgICAg
ICAgICAgICAgICBydW5PckNsb3NlUGlwZU1lc3NhZ2VQYXJhbXMpOwotICAgIHZhciBtZXNzYWdl
ID0gYnVpbGRlci5maW5pc2goKTsKLSAgICBtZXNzYWdlLnNldEludGVyZmFjZUlkKGludGVybmFs
LmtJbnZhbGlkSW50ZXJmYWNlSWQpOwotICAgIHJldHVybiBtZXNzYWdlOwotICB9Ci0KLSAgZnVu
Y3Rpb24gUGlwZUNvbnRyb2xNZXNzYWdlUHJveHkocmVjZWl2ZXIpIHsKLSAgICB0aGlzLnJlY2Vp
dmVyXyA9IHJlY2VpdmVyOwotICB9Ci0KLSAgUGlwZUNvbnRyb2xNZXNzYWdlUHJveHkucHJvdG90
eXBlLm5vdGlmeVBlZXJFbmRwb2ludENsb3NlZCA9IGZ1bmN0aW9uKAotICAgICAgaW50ZXJmYWNl
SWQsIHJlYXNvbikgewotICAgIHZhciBtZXNzYWdlID0gdGhpcy5jb25zdHJ1Y3RQZWVyRW5kcG9p
bnRDbG9zZWRNZXNzYWdlKGludGVyZmFjZUlkLCByZWFzb24pOwotICAgIHRoaXMucmVjZWl2ZXJf
LmFjY2VwdChtZXNzYWdlKTsKLSAgfTsKLQotICBQaXBlQ29udHJvbE1lc3NhZ2VQcm94eS5wcm90
b3R5cGUuY29uc3RydWN0UGVlckVuZHBvaW50Q2xvc2VkTWVzc2FnZSA9Ci0gICAgICBmdW5jdGlv
bihpbnRlcmZhY2VJZCwgcmVhc29uKSB7Ci0gICAgdmFyIGV2ZW50ID0gbmV3IG1vam8ucGlwZUNv
bnRyb2wuUGVlckFzc29jaWF0ZWRFbmRwb2ludENsb3NlZEV2ZW50KCk7Ci0gICAgZXZlbnQuaWQg
PSBpbnRlcmZhY2VJZDsKLSAgICBpZiAocmVhc29uKSB7Ci0gICAgICBldmVudC5kaXNjb25uZWN0
UmVhc29uID0gbmV3IG1vam8ucGlwZUNvbnRyb2wuRGlzY29ubmVjdFJlYXNvbih7Ci0gICAgICAg
ICAgY3VzdG9tUmVhc29uOiByZWFzb24uY3VzdG9tUmVhc29uLAotICAgICAgICAgIGRlc2NyaXB0
aW9uOiByZWFzb24uZGVzY3JpcHRpb259KTsKLSAgICB9Ci0gICAgdmFyIHJ1bk9yQ2xvc2VQaXBl
SW5wdXQgPSBuZXcgbW9qby5waXBlQ29udHJvbC5SdW5PckNsb3NlUGlwZUlucHV0KCk7Ci0gICAg
cnVuT3JDbG9zZVBpcGVJbnB1dC5wZWVyQXNzb2NpYXRlZEVuZHBvaW50Q2xvc2VkRXZlbnQgPSBl
dmVudDsKLSAgICByZXR1cm4gY29uc3RydWN0UnVuT3JDbG9zZVBpcGVNZXNzYWdlKHJ1bk9yQ2xv
c2VQaXBlSW5wdXQpOwotICB9OwotCi0gIGludGVybmFsLlBpcGVDb250cm9sTWVzc2FnZVByb3h5
ID0gUGlwZUNvbnRyb2xNZXNzYWdlUHJveHk7Ci19KSgpOwotLy8gQ29weXJpZ2h0IDIwMTQgVGhl
IENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBz
b3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJl
Ci0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotCi0oZnVuY3Rpb24oKSB7Ci0gIHZhciBp
bnRlcm5hbCA9IG1vam8uaW50ZXJuYWw7Ci0KLSAgLyoqCi0gICAqIFRoZSBzdGF0ZSBvZiB8ZW5k
cG9pbnR8LiBJZiBib3RoIHRoZSBlbmRwb2ludCBhbmQgaXRzIHBlZXIgaGF2ZSBiZWVuCi0gICAq
IGNsb3NlZCwgcmVtb3ZlcyBpdCBmcm9tIHxlbmRwb2ludHNffC4KLSAgICogQGVudW0ge3N0cmlu
Z30KLSAgICovCi0gIHZhciBFbmRwb2ludFN0YXRlVXBkYXRlVHlwZSA9IHsKLSAgICBFTkRQT0lO
VF9DTE9TRUQ6ICdlbmRwb2ludF9jbG9zZWQnLAotICAgIFBFRVJfRU5EUE9JTlRfQ0xPU0VEOiAn
cGVlcl9lbmRwb2ludF9jbG9zZWQnCi0gIH07Ci0KLSAgZnVuY3Rpb24gY2hlY2soY29uZGl0aW9u
LCBvdXRwdXQpIHsKLSAgICBpZiAoIWNvbmRpdGlvbikgewotICAgICAgLy8gdGVzdGhhcm5lc3Mu
anMgZG9lcyBub3QgcmV0aHJvdyBlcnJvcnMgc28gdGhlIGVycm9yIHN0YWNrIG5lZWRzIHRvIGJl
Ci0gICAgICAvLyBpbmNsdWRlZCBhcyBhIHN0cmluZyBpbiB0aGUgZXJyb3Igd2UgdGhyb3cgZm9y
IGRlYnVnZ2luZyBsYXlvdXQgdGVzdHMuCi0gICAgICB0aHJvdyBuZXcgRXJyb3IoKG5ldyBFcnJv
cigpKS5zdGFjayk7Ci0gICAgfQotICB9Ci0KLSAgZnVuY3Rpb24gSW50ZXJmYWNlRW5kcG9pbnQo
cm91dGVyLCBpbnRlcmZhY2VJZCkgewotICAgIHRoaXMucm91dGVyXyA9IHJvdXRlcjsKLSAgICB0
aGlzLmlkID0gaW50ZXJmYWNlSWQ7Ci0gICAgdGhpcy5jbG9zZWQgPSBmYWxzZTsKLSAgICB0aGlz
LnBlZXJDbG9zZWQgPSBmYWxzZTsKLSAgICB0aGlzLmhhbmRsZUNyZWF0ZWQgPSBmYWxzZTsKLSAg
ICB0aGlzLmRpc2Nvbm5lY3RSZWFzb24gPSBudWxsOwotICAgIHRoaXMuY2xpZW50ID0gbnVsbDsK
LSAgfQotCi0gIEludGVyZmFjZUVuZHBvaW50LnByb3RvdHlwZS5zZW5kTWVzc2FnZSA9IGZ1bmN0
aW9uKG1lc3NhZ2UpIHsKLSAgICBtZXNzYWdlLnNldEludGVyZmFjZUlkKHRoaXMuaWQpOwotICAg
IHJldHVybiB0aGlzLnJvdXRlcl8uY29ubmVjdG9yXy5hY2NlcHQobWVzc2FnZSk7Ci0gIH07Ci0K
LSAgZnVuY3Rpb24gUm91dGVyKGhhbmRsZSwgc2V0SW50ZXJmYWNlSWROYW1lc3BhY2VCaXQpIHsK
LSAgICBpZiAoIShoYW5kbGUgaW5zdGFuY2VvZiBNb2pvSGFuZGxlKSkgewotICAgICAgdGhyb3cg
bmV3IEVycm9yKCJSb3V0ZXIgY29uc3RydWN0b3I6IE5vdCBhIGhhbmRsZSIpOwotICAgIH0KLSAg
ICBpZiAoc2V0SW50ZXJmYWNlSWROYW1lc3BhY2VCaXQgPT09IHVuZGVmaW5lZCkgewotICAgICAg
c2V0SW50ZXJmYWNlSWROYW1lc3BhY2VCaXQgPSBmYWxzZTsKLSAgICB9Ci0KLSAgICB0aGlzLmNv
bm5lY3Rvcl8gPSBuZXcgaW50ZXJuYWwuQ29ubmVjdG9yKGhhbmRsZSk7Ci0KLSAgICB0aGlzLmNv
bm5lY3Rvcl8uc2V0SW5jb21pbmdSZWNlaXZlcih7Ci0gICAgICAgIGFjY2VwdDogdGhpcy5hY2Nl
cHQuYmluZCh0aGlzKSwKLSAgICB9KTsKLSAgICB0aGlzLmNvbm5lY3Rvcl8uc2V0RXJyb3JIYW5k
bGVyKHsKLSAgICAgICAgb25FcnJvcjogdGhpcy5vblBpcGVDb25uZWN0aW9uRXJyb3IuYmluZCh0
aGlzKSwKLSAgICB9KTsKLQotICAgIHRoaXMuc2V0SW50ZXJmYWNlSWROYW1lc3BhY2VCaXRfID0g
c2V0SW50ZXJmYWNlSWROYW1lc3BhY2VCaXQ7Ci0gICAgLy8gfGNhY2hlZE1lc3NhZ2VEYXRhfCBj
YWNoZXMgaW5mb21hdGlvbiBhYm91dCBhIG1lc3NhZ2UsIHNvIGl0IGNhbiBiZQotICAgIC8vIHBy
b2Nlc3NlZCBsYXRlciBpZiBhIGNsaWVudCBpcyBub3QgeWV0IGF0dGFjaGVkIHRvIHRoZSB0YXJn
ZXQgZW5kcG9pbnQuCi0gICAgdGhpcy5jYWNoZWRNZXNzYWdlRGF0YSA9IG51bGw7Ci0gICAgdGhp
cy5jb250cm9sTWVzc2FnZUhhbmRsZXJfID0gbmV3IGludGVybmFsLlBpcGVDb250cm9sTWVzc2Fn
ZUhhbmRsZXIodGhpcyk7Ci0gICAgdGhpcy5jb250cm9sTWVzc2FnZVByb3h5XyA9Ci0gICAgICAg
IG5ldyBpbnRlcm5hbC5QaXBlQ29udHJvbE1lc3NhZ2VQcm94eSh0aGlzLmNvbm5lY3Rvcl8pOwot
ICAgIHRoaXMubmV4dEludGVyZmFjZUlkVmFsdWVfID0gMTsKLSAgICB0aGlzLmVuY291bnRlcmVk
RXJyb3JfID0gZmFsc2U7Ci0gICAgdGhpcy5lbmRwb2ludHNfID0gbmV3IE1hcCgpOwotICB9Ci0K
LSAgUm91dGVyLnByb3RvdHlwZS5hc3NvY2lhdGVJbnRlcmZhY2UgPSBmdW5jdGlvbihoYW5kbGVU
b1NlbmQpIHsKLSAgICBpZiAoIWhhbmRsZVRvU2VuZC5wZW5kaW5nQXNzb2NpYXRpb24oKSkgewot
ICAgICAgcmV0dXJuIGludGVybmFsLmtJbnZhbGlkSW50ZXJmYWNlSWQ7Ci0gICAgfQotCi0gICAg
dmFyIGlkID0gMDsKLSAgICBkbyB7Ci0gICAgICBpZiAodGhpcy5uZXh0SW50ZXJmYWNlSWRWYWx1
ZV8gPj0gaW50ZXJuYWwua0ludGVyZmFjZUlkTmFtZXNwYWNlTWFzaykgewotICAgICAgICB0aGlz
Lm5leHRJbnRlcmZhY2VJZFZhbHVlXyA9IDE7Ci0gICAgICB9Ci0gICAgICBpZCA9IHRoaXMubmV4
dEludGVyZmFjZUlkVmFsdWVfKys7Ci0gICAgICBpZiAodGhpcy5zZXRJbnRlcmZhY2VJZE5hbWVz
cGFjZUJpdF8pIHsKLSAgICAgICAgaWQgKz0gaW50ZXJuYWwua0ludGVyZmFjZUlkTmFtZXNwYWNl
TWFzazsKLSAgICAgIH0KLSAgICB9IHdoaWxlICh0aGlzLmVuZHBvaW50c18uaGFzKGlkKSk7Ci0K
LSAgICB2YXIgZW5kcG9pbnQgPSBuZXcgSW50ZXJmYWNlRW5kcG9pbnQodGhpcywgaWQpOwotICAg
IHRoaXMuZW5kcG9pbnRzXy5zZXQoaWQsIGVuZHBvaW50KTsKLSAgICBpZiAodGhpcy5lbmNvdW50
ZXJlZEVycm9yXykgewotICAgICAgdGhpcy51cGRhdGVFbmRwb2ludFN0YXRlTWF5UmVtb3ZlKGVu
ZHBvaW50LAotICAgICAgICAgIEVuZHBvaW50U3RhdGVVcGRhdGVUeXBlLlBFRVJfRU5EUE9JTlRf
Q0xPU0VEKTsKLSAgICB9Ci0gICAgZW5kcG9pbnQuaGFuZGxlQ3JlYXRlZCA9IHRydWU7Ci0KLSAg
ICBpZiAoIWhhbmRsZVRvU2VuZC5ub3RpZnlBc3NvY2lhdGlvbihpZCwgdGhpcykpIHsKLSAgICAg
IC8vIFRoZSBwZWVyIGhhbmRsZSBvZiB8aGFuZGxlVG9TZW5kfCwgd2hpY2ggaXMgc3VwcG9zZWQg
dG8gam9pbiB0aGlzCi0gICAgICAvLyBhc3NvY2lhdGVkIGdyb3VwLCBoYXMgYmVlbiBjbG9zZWQu
Ci0gICAgICB0aGlzLnVwZGF0ZUVuZHBvaW50U3RhdGVNYXlSZW1vdmUoZW5kcG9pbnQsCi0gICAg
ICAgICAgRW5kcG9pbnRTdGF0ZVVwZGF0ZVR5cGUuRU5EUE9JTlRfQ0xPU0VEKTsKLQotICAgICAg
cGlwZUNvbnRyb2xNZXNzYWdlcHJveHkubm90aWZ5UGVlckVuZHBvaW50Q2xvc2VkKGlkLAotICAg
ICAgICAgIGhhbmRsZVRvU2VuZC5kaXNjb25uZWN0UmVhc29uKCkpOwotICAgIH0KLQotICAgIHJl
dHVybiBpZDsKLSAgfTsKLQotICBSb3V0ZXIucHJvdG90eXBlLmF0dGFjaEVuZHBvaW50Q2xpZW50
ID0gZnVuY3Rpb24oCi0gICAgICBpbnRlcmZhY2VFbmRwb2ludEhhbmRsZSwgaW50ZXJmYWNlRW5k
cG9pbnRDbGllbnQpIHsKLSAgICBjaGVjayhpbnRlcm5hbC5pc1ZhbGlkSW50ZXJmYWNlSWQoaW50
ZXJmYWNlRW5kcG9pbnRIYW5kbGUuaWQoKSkpOwotICAgIGNoZWNrKGludGVyZmFjZUVuZHBvaW50
Q2xpZW50KTsKLQotICAgIHZhciBlbmRwb2ludCA9IHRoaXMuZW5kcG9pbnRzXy5nZXQoaW50ZXJm
YWNlRW5kcG9pbnRIYW5kbGUuaWQoKSk7Ci0gICAgY2hlY2soZW5kcG9pbnQpOwotICAgIGNoZWNr
KCFlbmRwb2ludC5jbGllbnQpOwotICAgIGNoZWNrKCFlbmRwb2ludC5jbG9zZWQpOwotICAgIGVu
ZHBvaW50LmNsaWVudCA9IGludGVyZmFjZUVuZHBvaW50Q2xpZW50OwotCi0gICAgaWYgKGVuZHBv
aW50LnBlZXJDbG9zZWQpIHsKLSAgICAgIHNldFRpbWVvdXQoZW5kcG9pbnQuY2xpZW50Lm5vdGlm
eUVycm9yLmJpbmQoZW5kcG9pbnQuY2xpZW50KSwgMCk7Ci0gICAgfQotCi0gICAgaWYgKHRoaXMu
Y2FjaGVkTWVzc2FnZURhdGEgJiYgaW50ZXJmYWNlRW5kcG9pbnRIYW5kbGUuaWQoKSA9PT0KLSAg
ICAgICAgdGhpcy5jYWNoZWRNZXNzYWdlRGF0YS5tZXNzYWdlLmdldEludGVyZmFjZUlkKCkpIHsK
LSAgICAgIHNldFRpbWVvdXQoKGZ1bmN0aW9uKCkgewotICAgICAgICBpZiAoIXRoaXMuY2FjaGVk
TWVzc2FnZURhdGEpIHsKLSAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICB2
YXIgdGFyZ2V0RW5kcG9pbnQgPSB0aGlzLmVuZHBvaW50c18uZ2V0KAotICAgICAgICAgICAgdGhp
cy5jYWNoZWRNZXNzYWdlRGF0YS5tZXNzYWdlLmdldEludGVyZmFjZUlkKCkpOwotICAgICAgICAv
LyBDaGVjayB0aGF0IHRoZSB0YXJnZXQgZW5kcG9pbnQncyBjbGllbnQgc3RpbGwgZXhpc3RzLgot
ICAgICAgICBpZiAodGFyZ2V0RW5kcG9pbnQgJiYgdGFyZ2V0RW5kcG9pbnQuY2xpZW50KSB7Ci0g
ICAgICAgICAgdmFyIG1lc3NhZ2UgPSB0aGlzLmNhY2hlZE1lc3NhZ2VEYXRhLm1lc3NhZ2U7Ci0g
ICAgICAgICAgdmFyIG1lc3NhZ2VWYWxpZGF0b3IgPSB0aGlzLmNhY2hlZE1lc3NhZ2VEYXRhLm1l
c3NhZ2VWYWxpZGF0b3I7Ci0gICAgICAgICAgdGhpcy5jYWNoZWRNZXNzYWdlRGF0YSA9IG51bGw7
Ci0gICAgICAgICAgdGhpcy5jb25uZWN0b3JfLnJlc3VtZUluY29taW5nTWV0aG9kQ2FsbFByb2Nl
c3NpbmcoKTsKLSAgICAgICAgICB2YXIgb2sgPSBlbmRwb2ludC5jbGllbnQuaGFuZGxlSW5jb21p
bmdNZXNzYWdlKG1lc3NhZ2UsCi0gICAgICAgICAgICAgIG1lc3NhZ2VWYWxpZGF0b3IpOwotCi0g
ICAgICAgICAgLy8gSGFuZGxlIGludmFsaWQgY2FjaGVkIGluY29taW5nIG1lc3NhZ2UuCi0gICAg
ICAgICAgaWYgKCFpbnRlcm5hbC5pc1Rlc3RpbmdNb2RlKCkgJiYgIW9rKSB7Ci0gICAgICAgICAg
ICB0aGlzLmNvbm5lY3Rvcl8uaGFuZGxlRXJyb3IodHJ1ZSwgdHJ1ZSk7Ci0gICAgICAgICAgfQot
ICAgICAgICB9Ci0gICAgICB9KS5iaW5kKHRoaXMpLCAwKTsKLSAgICB9Ci0KLSAgICByZXR1cm4g
ZW5kcG9pbnQ7Ci0gIH07Ci0KLSAgUm91dGVyLnByb3RvdHlwZS5kZXRhY2hFbmRwb2ludENsaWVu
dCA9IGZ1bmN0aW9uKAotICAgICAgaW50ZXJmYWNlRW5kcG9pbnRIYW5kbGUpIHsKLSAgICBjaGVj
ayhpbnRlcm5hbC5pc1ZhbGlkSW50ZXJmYWNlSWQoaW50ZXJmYWNlRW5kcG9pbnRIYW5kbGUuaWQo
KSkpOwotICAgIHZhciBlbmRwb2ludCA9IHRoaXMuZW5kcG9pbnRzXy5nZXQoaW50ZXJmYWNlRW5k
cG9pbnRIYW5kbGUuaWQoKSk7Ci0gICAgY2hlY2soZW5kcG9pbnQpOwotICAgIGNoZWNrKGVuZHBv
aW50LmNsaWVudCk7Ci0gICAgY2hlY2soIWVuZHBvaW50LmNsb3NlZCk7Ci0KLSAgICBlbmRwb2lu
dC5jbGllbnQgPSBudWxsOwotICB9OwotCi0gIFJvdXRlci5wcm90b3R5cGUuY3JlYXRlTG9jYWxF
bmRwb2ludEhhbmRsZSA9IGZ1bmN0aW9uKAotICAgICAgaW50ZXJmYWNlSWQpIHsKLSAgICBpZiAo
IWludGVybmFsLmlzVmFsaWRJbnRlcmZhY2VJZChpbnRlcmZhY2VJZCkpIHsKLSAgICAgIHJldHVy
biBuZXcgaW50ZXJuYWwuSW50ZXJmYWNlRW5kcG9pbnRIYW5kbGUoKTsKLSAgICB9Ci0KLSAgICAv
LyBVbmxlc3MgaXQgaXMgdGhlIG1hc3RlciBJRCwgfGludGVyZmFjZUlkfCBpcyBmcm9tIHRoZSBy
ZW1vdGUgc2lkZSBhbmQKLSAgICAvLyB0aGVyZWZvcmUgaXRzIG5hbWVzcGFjZSBiaXQgaXMgc3Vw
cG9zZWQgdG8gYmUgZGlmZmVyZW50IHRoYW4gdGhlIHZhbHVlCi0gICAgLy8gdGhhdCB0aGlzIHJv
dXRlciB3b3VsZCB1c2UuCi0gICAgaWYgKCFpbnRlcm5hbC5pc01hc3RlckludGVyZmFjZUlkKGlu
dGVyZmFjZUlkKSAmJgotICAgICAgICB0aGlzLnNldEludGVyZmFjZUlkTmFtZXNwYWNlQml0XyA9
PT0KLSAgICAgICAgICAgIGludGVybmFsLmhhc0ludGVyZmFjZUlkTmFtZXNwYWNlQml0U2V0KGlu
dGVyZmFjZUlkKSkgewotICAgICAgcmV0dXJuIG5ldyBpbnRlcm5hbC5JbnRlcmZhY2VFbmRwb2lu
dEhhbmRsZSgpOwotICAgIH0KLQotICAgIHZhciBlbmRwb2ludCA9IHRoaXMuZW5kcG9pbnRzXy5n
ZXQoaW50ZXJmYWNlSWQpOwotCi0gICAgaWYgKCFlbmRwb2ludCkgewotICAgICAgZW5kcG9pbnQg
PSBuZXcgSW50ZXJmYWNlRW5kcG9pbnQodGhpcywgaW50ZXJmYWNlSWQpOwotICAgICAgdGhpcy5l
bmRwb2ludHNfLnNldChpbnRlcmZhY2VJZCwgZW5kcG9pbnQpOwotCi0gICAgICBjaGVjayghZW5k
cG9pbnQuaGFuZGxlQ3JlYXRlZCk7Ci0KLSAgICAgIGlmICh0aGlzLmVuY291bnRlcmVkRXJyb3Jf
KSB7Ci0gICAgICAgIHRoaXMudXBkYXRlRW5kcG9pbnRTdGF0ZU1heVJlbW92ZShlbmRwb2ludCwK
LSAgICAgICAgICAgIEVuZHBvaW50U3RhdGVVcGRhdGVUeXBlLlBFRVJfRU5EUE9JTlRfQ0xPU0VE
KTsKLSAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgLy8gSWYgdGhlIGVuZHBvaW50IGFscmVh
ZHkgZXhpc3QsIGl0IGlzIGJlY2F1c2Ugd2UgaGF2ZSByZWNlaXZlZCBhCi0gICAgICAvLyBub3Rp
ZmljYXRpb24gdGhhdCB0aGUgcGVlciBlbmRwb2ludCBoYXMgY2xvc2VkLgotICAgICAgY2hlY2so
IWVuZHBvaW50LmNsb3NlZCk7Ci0gICAgICBjaGVjayhlbmRwb2ludC5wZWVyQ2xvc2VkKTsKLQot
ICAgICAgaWYgKGVuZHBvaW50LmhhbmRsZUNyZWF0ZWQpIHsKLSAgICAgICAgcmV0dXJuIG5ldyBp
bnRlcm5hbC5JbnRlcmZhY2VFbmRwb2ludEhhbmRsZSgpOwotICAgICAgfQotICAgIH0KLQotICAg
IGVuZHBvaW50LmhhbmRsZUNyZWF0ZWQgPSB0cnVlOwotICAgIHJldHVybiBuZXcgaW50ZXJuYWwu
SW50ZXJmYWNlRW5kcG9pbnRIYW5kbGUoaW50ZXJmYWNlSWQsIHRoaXMpOwotICB9OwotCi0gIFJv
dXRlci5wcm90b3R5cGUuYWNjZXB0ID0gZnVuY3Rpb24obWVzc2FnZSkgewotICAgIHZhciBtZXNz
YWdlVmFsaWRhdG9yID0gbmV3IGludGVybmFsLlZhbGlkYXRvcihtZXNzYWdlKTsKLSAgICB2YXIg
ZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZU1lc3NhZ2VIZWFkZXIoKTsKLQotICAgIHZh
ciBvayA9IGZhbHNlOwotICAgIGlmIChlcnIgIT09IGludGVybmFsLnZhbGlkYXRpb25FcnJvci5O
T05FKSB7Ci0gICAgICBpbnRlcm5hbC5yZXBvcnRWYWxpZGF0aW9uRXJyb3IoZXJyKTsKLSAgICB9
IGVsc2UgaWYgKG1lc3NhZ2UuZGVzZXJpYWxpemVBc3NvY2lhdGVkRW5kcG9pbnRIYW5kbGVzKHRo
aXMpKSB7Ci0gICAgICBpZiAoaW50ZXJuYWwuaXNQaXBlQ29udHJvbE1lc3NhZ2UobWVzc2FnZSkp
IHsKLSAgICAgICAgb2sgPSB0aGlzLmNvbnRyb2xNZXNzYWdlSGFuZGxlcl8uYWNjZXB0KG1lc3Nh
Z2UpOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgdmFyIGludGVyZmFjZUlkID0gbWVzc2FnZS5n
ZXRJbnRlcmZhY2VJZCgpOwotICAgICAgICB2YXIgZW5kcG9pbnQgPSB0aGlzLmVuZHBvaW50c18u
Z2V0KGludGVyZmFjZUlkKTsKLSAgICAgICAgaWYgKCFlbmRwb2ludCB8fCBlbmRwb2ludC5jbG9z
ZWQpIHsKLSAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICgh
ZW5kcG9pbnQuY2xpZW50KSB7Ci0gICAgICAgICAgLy8gV2UgbmVlZCB0byB3YWl0IHVudGlsIGEg
Y2xpZW50IGlzIGF0dGFjaGVkIGluIG9yZGVyIHRvIGRpc3BhdGNoCi0gICAgICAgICAgLy8gZnVy
dGhlciBtZXNzYWdlcy4KLSAgICAgICAgICB0aGlzLmNhY2hlZE1lc3NhZ2VEYXRhID0ge21lc3Nh
Z2U6IG1lc3NhZ2UsCi0gICAgICAgICAgICAgIG1lc3NhZ2VWYWxpZGF0b3I6IG1lc3NhZ2VWYWxp
ZGF0b3J9OwotICAgICAgICAgIHRoaXMuY29ubmVjdG9yXy5wYXVzZUluY29taW5nTWV0aG9kQ2Fs
bFByb2Nlc3NpbmcoKTsKLSAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgICAg
ICBvayA9IGVuZHBvaW50LmNsaWVudC5oYW5kbGVJbmNvbWluZ01lc3NhZ2UobWVzc2FnZSwgbWVz
c2FnZVZhbGlkYXRvcik7Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiBvazsKLSAgfTsKLQot
ICBSb3V0ZXIucHJvdG90eXBlLmNsb3NlID0gZnVuY3Rpb24oKSB7Ci0gICAgdGhpcy5jb25uZWN0
b3JfLmNsb3NlKCk7Ci0gICAgLy8gQ2xvc2luZyB0aGUgbWVzc2FnZSBwaXBlIHdvbid0IHRyaWdn
ZXIgY29ubmVjdGlvbiBlcnJvciBoYW5kbGVyLgotICAgIC8vIEV4cGxpY2l0bHkgY2FsbCBvblBp
cGVDb25uZWN0aW9uRXJyb3IoKSBzbyB0aGF0IGFzc29jaWF0ZWQgZW5kcG9pbnRzCi0gICAgLy8g
d2lsbCBnZXQgbm90aWZpZWQuCi0gICAgdGhpcy5vblBpcGVDb25uZWN0aW9uRXJyb3IoKTsKLSAg
fTsKLQotICBSb3V0ZXIucHJvdG90eXBlLm9uUGVlckFzc29jaWF0ZWRFbmRwb2ludENsb3NlZCA9
IGZ1bmN0aW9uKGludGVyZmFjZUlkLAotICAgICAgcmVhc29uKSB7Ci0gICAgdmFyIGVuZHBvaW50
ID0gdGhpcy5lbmRwb2ludHNfLmdldChpbnRlcmZhY2VJZCk7Ci0gICAgaWYgKCFlbmRwb2ludCkg
ewotICAgICAgZW5kcG9pbnQgPSBuZXcgSW50ZXJmYWNlRW5kcG9pbnQodGhpcywgaW50ZXJmYWNl
SWQpOwotICAgICAgdGhpcy5lbmRwb2ludHNfLnNldChpbnRlcmZhY2VJZCwgZW5kcG9pbnQpOwot
ICAgIH0KLQotICAgIGlmIChyZWFzb24pIHsKLSAgICAgIGVuZHBvaW50LmRpc2Nvbm5lY3RSZWFz
b24gPSByZWFzb247Ci0gICAgfQotCi0gICAgaWYgKCFlbmRwb2ludC5wZWVyQ2xvc2VkKSB7Ci0g
ICAgICBpZiAoZW5kcG9pbnQuY2xpZW50KSB7Ci0gICAgICAgIHNldFRpbWVvdXQoZW5kcG9pbnQu
Y2xpZW50Lm5vdGlmeUVycm9yLmJpbmQoZW5kcG9pbnQuY2xpZW50LCByZWFzb24pLAotICAgICAg
ICAgICAgICAgICAgIDApOwotICAgICAgfQotICAgICAgdGhpcy51cGRhdGVFbmRwb2ludFN0YXRl
TWF5UmVtb3ZlKGVuZHBvaW50LAotICAgICAgICAgIEVuZHBvaW50U3RhdGVVcGRhdGVUeXBlLlBF
RVJfRU5EUE9JTlRfQ0xPU0VEKTsKLSAgICB9Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH07Ci0KLSAg
Um91dGVyLnByb3RvdHlwZS5vblBpcGVDb25uZWN0aW9uRXJyb3IgPSBmdW5jdGlvbigpIHsKLSAg
ICB0aGlzLmVuY291bnRlcmVkRXJyb3JfID0gdHJ1ZTsKLQotICAgIGZvciAodmFyIGVuZHBvaW50
IG9mIHRoaXMuZW5kcG9pbnRzXy52YWx1ZXMoKSkgewotICAgICAgaWYgKGVuZHBvaW50LmNsaWVu
dCkgewotICAgICAgICBzZXRUaW1lb3V0KAotICAgICAgICAgICAgZW5kcG9pbnQuY2xpZW50Lm5v
dGlmeUVycm9yLmJpbmQoCi0gICAgICAgICAgICAgICAgZW5kcG9pbnQuY2xpZW50LCBlbmRwb2lu
dC5kaXNjb25uZWN0UmVhc29uKSwKLSAgICAgICAgICAgIDApOwotICAgICAgfQotICAgICAgdGhp
cy51cGRhdGVFbmRwb2ludFN0YXRlTWF5UmVtb3ZlKGVuZHBvaW50LAotICAgICAgICAgIEVuZHBv
aW50U3RhdGVVcGRhdGVUeXBlLlBFRVJfRU5EUE9JTlRfQ0xPU0VEKTsKLSAgICB9Ci0gIH07Ci0K
LSAgUm91dGVyLnByb3RvdHlwZS5jbG9zZUVuZHBvaW50SGFuZGxlID0gZnVuY3Rpb24oaW50ZXJm
YWNlSWQsIHJlYXNvbikgewotICAgIGlmICghaW50ZXJuYWwuaXNWYWxpZEludGVyZmFjZUlkKGlu
dGVyZmFjZUlkKSkgewotICAgICAgcmV0dXJuOwotICAgIH0KLSAgICB2YXIgZW5kcG9pbnQgPSB0
aGlzLmVuZHBvaW50c18uZ2V0KGludGVyZmFjZUlkKTsKLSAgICBjaGVjayhlbmRwb2ludCk7Ci0g
ICAgY2hlY2soIWVuZHBvaW50LmNsaWVudCk7Ci0gICAgY2hlY2soIWVuZHBvaW50LmNsb3NlZCk7
Ci0KLSAgICB0aGlzLnVwZGF0ZUVuZHBvaW50U3RhdGVNYXlSZW1vdmUoZW5kcG9pbnQsCi0gICAg
ICAgIEVuZHBvaW50U3RhdGVVcGRhdGVUeXBlLkVORFBPSU5UX0NMT1NFRCk7Ci0KLSAgICBpZiAo
IWludGVybmFsLmlzTWFzdGVySW50ZXJmYWNlSWQoaW50ZXJmYWNlSWQpIHx8IHJlYXNvbikgewot
ICAgICAgdGhpcy5jb250cm9sTWVzc2FnZVByb3h5Xy5ub3RpZnlQZWVyRW5kcG9pbnRDbG9zZWQo
aW50ZXJmYWNlSWQsIHJlYXNvbik7Ci0gICAgfQotCi0gICAgaWYgKHRoaXMuY2FjaGVkTWVzc2Fn
ZURhdGEgJiYgaW50ZXJmYWNlSWQgPT09Ci0gICAgICAgIHRoaXMuY2FjaGVkTWVzc2FnZURhdGEu
bWVzc2FnZS5nZXRJbnRlcmZhY2VJZCgpKSB7Ci0gICAgICB0aGlzLmNhY2hlZE1lc3NhZ2VEYXRh
ID0gbnVsbDsKLSAgICAgIHRoaXMuY29ubmVjdG9yXy5yZXN1bWVJbmNvbWluZ01ldGhvZENhbGxQ
cm9jZXNzaW5nKCk7Ci0gICAgfQotICB9OwotCi0gIFJvdXRlci5wcm90b3R5cGUudXBkYXRlRW5k
cG9pbnRTdGF0ZU1heVJlbW92ZSA9IGZ1bmN0aW9uKGVuZHBvaW50LAotICAgICAgZW5kcG9pbnRT
dGF0ZVVwZGF0ZVR5cGUpIHsKLSAgICBpZiAoZW5kcG9pbnRTdGF0ZVVwZGF0ZVR5cGUgPT09IEVu
ZHBvaW50U3RhdGVVcGRhdGVUeXBlLkVORFBPSU5UX0NMT1NFRCkgewotICAgICAgZW5kcG9pbnQu
Y2xvc2VkID0gdHJ1ZTsKLSAgICB9IGVsc2UgewotICAgICAgZW5kcG9pbnQucGVlckNsb3NlZCA9
IHRydWU7Ci0gICAgfQotICAgIGlmIChlbmRwb2ludC5jbG9zZWQgJiYgZW5kcG9pbnQucGVlckNs
b3NlZCkgewotICAgICAgdGhpcy5lbmRwb2ludHNfLmRlbGV0ZShlbmRwb2ludC5pZCk7Ci0gICAg
fQotICB9OwotCi0gIGludGVybmFsLlJvdXRlciA9IFJvdXRlcjsKLX0pKCk7Ci0vLyBDb3B5cmln
aHQgMjAxNCBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVz
ZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2Ug
dGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLS8qKgotICogRGVm
aW5lcyBmdW5jdGlvbnMgZm9yIHRyYW5zbGF0aW5nIGJldHdlZW4gSmF2YVNjcmlwdCBzdHJpbmdz
IGFuZCBVVEY4IHN0cmluZ3MKLSAqIHN0b3JlZCBpbiBBcnJheUJ1ZmZlcnMuIFRoZXJlIGlzIG11
Y2ggcm9vbSBmb3Igb3B0aW1pemF0aW9uIGluIHRoaXMgY29kZSBpZgotICogaXQgcHJvdmVzIG5l
Y2Vzc2FyeS4KLSAqLwotKGZ1bmN0aW9uKCkgewotICB2YXIgaW50ZXJuYWwgPSBtb2pvLmludGVy
bmFsOwotICB2YXIgdGV4dERlY29kZXIgPSBuZXcgVGV4dERlY29kZXIoJ3V0Zi04Jyk7Ci0gIHZh
ciB0ZXh0RW5jb2RlciA9IG5ldyBUZXh0RW5jb2RlcigndXRmLTgnKTsKLQotICAvKioKLSAgICog
RGVjb2RlcyB0aGUgVVRGOCBzdHJpbmcgZnJvbSB0aGUgZ2l2ZW4gYnVmZmVyLgotICAgKiBAcGFy
YW0ge0FycmF5QnVmZmVyVmlld30gYnVmZmVyIFRoZSBidWZmZXIgY29udGFpbmluZyBVVEY4IHN0
cmluZyBkYXRhLgotICAgKiBAcmV0dXJuIHtzdHJpbmd9IFRoZSBjb3JyZXNwb25kaW5nIEphdmFT
Y3JpcHQgc3RyaW5nLgotICAgKi8KLSAgZnVuY3Rpb24gZGVjb2RlVXRmOFN0cmluZyhidWZmZXIp
IHsKLSAgICByZXR1cm4gdGV4dERlY29kZXIuZGVjb2RlKGJ1ZmZlcik7Ci0gIH0KLQotICAvKioK
LSAgICogRW5jb2RlcyB0aGUgZ2l2ZW4gSmF2YVNjcmlwdCBzdHJpbmcgaW50byBVVEY4LgotICAg
KiBAcGFyYW0ge3N0cmluZ30gc3RyIFRoZSBzdHJpbmcgdG8gZW5jb2RlLgotICAgKiBAcGFyYW0g
e0FycmF5QnVmZmVyVmlld30gb3V0cHV0QnVmZmVyIFRoZSBidWZmZXIgdG8gY29udGFpbiB0aGUg
cmVzdWx0LgotICAgKiBTaG91bGQgYmUgcHJlLWFsbG9jYXRlZCB0byBob2xkIGVub3VnaCBzcGFj
ZS4gVXNlIHx1dGY4TGVuZ3RofCB0byBkZXRlcm1pbmUKLSAgICogaG93IG11Y2ggc3BhY2UgaXMg
cmVxdWlyZWQuCi0gICAqIEByZXR1cm4ge251bWJlcn0gVGhlIG51bWJlciBvZiBieXRlcyB3cml0
dGVuIHRvIHxvdXRwdXRCdWZmZXJ8LgotICAgKi8KLSAgZnVuY3Rpb24gZW5jb2RlVXRmOFN0cmlu
ZyhzdHIsIG91dHB1dEJ1ZmZlcikgewotICAgIGNvbnN0IHV0ZjhCdWZmZXIgPSB0ZXh0RW5jb2Rl
ci5lbmNvZGUoc3RyKTsKLSAgICBpZiAob3V0cHV0QnVmZmVyLmxlbmd0aCA8IHV0ZjhCdWZmZXIu
bGVuZ3RoKQotICAgICAgdGhyb3cgbmV3IEVycm9yKCJCdWZmZXIgdG9vIHNtYWxsIGZvciBlbmNv
ZGVVdGY4U3RyaW5nIik7Ci0gICAgb3V0cHV0QnVmZmVyLnNldCh1dGY4QnVmZmVyKTsKLSAgICBy
ZXR1cm4gdXRmOEJ1ZmZlci5sZW5ndGg7Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJucyB0aGUg
bnVtYmVyIG9mIGJ5dGVzIHRoYXQgYSBVVEY4IGVuY29kaW5nIG9mIHRoZSBKYXZhU2NyaXB0IHN0
cmluZwotICAgKiB8c3RyfCB3b3VsZCBvY2N1cHkuCi0gICAqLwotICBmdW5jdGlvbiB1dGY4TGVu
Z3RoKHN0cikgewotICAgIHJldHVybiB0ZXh0RW5jb2Rlci5lbmNvZGUoc3RyKS5sZW5ndGg7Ci0g
IH0KLQotICBpbnRlcm5hbC5kZWNvZGVVdGY4U3RyaW5nID0gZGVjb2RlVXRmOFN0cmluZzsKLSAg
aW50ZXJuYWwuZW5jb2RlVXRmOFN0cmluZyA9IGVuY29kZVV0ZjhTdHJpbmc7Ci0gIGludGVybmFs
LnV0ZjhMZW5ndGggPSB1dGY4TGVuZ3RoOwotfSkoKTsKLS8vIENvcHlyaWdodCAyMDE0IFRoZSBD
aHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291
cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQot
Ly8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLQotKGZ1bmN0aW9uKCkgewotICB2YXIgaW50
ZXJuYWwgPSBtb2pvLmludGVybmFsOwotCi0gIHZhciB2YWxpZGF0aW9uRXJyb3IgPSB7Ci0gICAg
Tk9ORTogJ1ZBTElEQVRJT05fRVJST1JfTk9ORScsCi0gICAgTUlTQUxJR05FRF9PQkpFQ1Q6ICdW
QUxJREFUSU9OX0VSUk9SX01JU0FMSUdORURfT0JKRUNUJywKLSAgICBJTExFR0FMX01FTU9SWV9S
QU5HRTogJ1ZBTElEQVRJT05fRVJST1JfSUxMRUdBTF9NRU1PUllfUkFOR0UnLAotICAgIFVORVhQ
RUNURURfU1RSVUNUX0hFQURFUjogJ1ZBTElEQVRJT05fRVJST1JfVU5FWFBFQ1RFRF9TVFJVQ1Rf
SEVBREVSJywKLSAgICBVTkVYUEVDVEVEX0FSUkFZX0hFQURFUjogJ1ZBTElEQVRJT05fRVJST1Jf
VU5FWFBFQ1RFRF9BUlJBWV9IRUFERVInLAotICAgIElMTEVHQUxfSEFORExFOiAnVkFMSURBVElP
Tl9FUlJPUl9JTExFR0FMX0hBTkRMRScsCi0gICAgVU5FWFBFQ1RFRF9JTlZBTElEX0hBTkRMRTog
J1ZBTElEQVRJT05fRVJST1JfVU5FWFBFQ1RFRF9JTlZBTElEX0hBTkRMRScsCi0gICAgSUxMRUdB
TF9QT0lOVEVSOiAnVkFMSURBVElPTl9FUlJPUl9JTExFR0FMX1BPSU5URVInLAotICAgIFVORVhQ
RUNURURfTlVMTF9QT0lOVEVSOiAnVkFMSURBVElPTl9FUlJPUl9VTkVYUEVDVEVEX05VTExfUE9J
TlRFUicsCi0gICAgSUxMRUdBTF9JTlRFUkZBQ0VfSUQ6ICdWQUxJREFUSU9OX0VSUk9SX0lMTEVH
QUxfSU5URVJGQUNFX0lEJywKLSAgICBVTkVYUEVDVEVEX0lOVkFMSURfSU5URVJGQUNFX0lEOgot
ICAgICAgICAnVkFMSURBVElPTl9FUlJPUl9VTkVYUEVDVEVEX0lOVkFMSURfSU5URVJGQUNFX0lE
JywKLSAgICBNRVNTQUdFX0hFQURFUl9JTlZBTElEX0ZMQUdTOgotICAgICAgICAnVkFMSURBVElP
Tl9FUlJPUl9NRVNTQUdFX0hFQURFUl9JTlZBTElEX0ZMQUdTJywKLSAgICBNRVNTQUdFX0hFQURF
Ul9NSVNTSU5HX1JFUVVFU1RfSUQ6Ci0gICAgICAgICdWQUxJREFUSU9OX0VSUk9SX01FU1NBR0Vf
SEVBREVSX01JU1NJTkdfUkVRVUVTVF9JRCcsCi0gICAgRElGRkVSRU5UX1NJWkVEX0FSUkFZU19J
Tl9NQVA6Ci0gICAgICAgICdWQUxJREFUSU9OX0VSUk9SX0RJRkZFUkVOVF9TSVpFRF9BUlJBWVNf
SU5fTUFQJywKLSAgICBJTlZBTElEX1VOSU9OX1NJWkU6ICdWQUxJREFUSU9OX0VSUk9SX0lOVkFM
SURfVU5JT05fU0laRScsCi0gICAgVU5FWFBFQ1RFRF9OVUxMX1VOSU9OOiAnVkFMSURBVElPTl9F
UlJPUl9VTkVYUEVDVEVEX05VTExfVU5JT04nLAotICAgIFVOS05PV05fRU5VTV9WQUxVRTogJ1ZB
TElEQVRJT05fRVJST1JfVU5LTk9XTl9FTlVNX1ZBTFVFJywKLSAgfTsKLQotICB2YXIgTlVMTF9N
T0pPX1BPSU5URVIgPSAiTlVMTF9NT0pPX1BPSU5URVIiOwotICB2YXIgZ1ZhbGlkYXRpb25FcnJv
ck9ic2VydmVyID0gbnVsbDsKLQotICBmdW5jdGlvbiByZXBvcnRWYWxpZGF0aW9uRXJyb3IoZXJy
b3IpIHsKLSAgICBpZiAoZ1ZhbGlkYXRpb25FcnJvck9ic2VydmVyKSB7Ci0gICAgICBnVmFsaWRh
dGlvbkVycm9yT2JzZXJ2ZXIubGFzdEVycm9yID0gZXJyb3I7Ci0gICAgfSBlbHNlIHsKLSAgICAg
IGNvbnNvbGUud2FybignSW52YWxpZCBtZXNzYWdlOiAnICsgZXJyb3IpOwotICAgIH0KLSAgfQot
Ci0gIHZhciBWYWxpZGF0aW9uRXJyb3JPYnNlcnZlckZvclRlc3RpbmcgPSAoZnVuY3Rpb24oKSB7
Ci0gICAgZnVuY3Rpb24gT2JzZXJ2ZXIoKSB7Ci0gICAgICB0aGlzLmxhc3RFcnJvciA9IHZhbGlk
YXRpb25FcnJvci5OT05FOwotICAgIH0KLQotICAgIE9ic2VydmVyLnByb3RvdHlwZS5yZXNldCA9
IGZ1bmN0aW9uKCkgewotICAgICAgdGhpcy5sYXN0RXJyb3IgPSB2YWxpZGF0aW9uRXJyb3IuTk9O
RTsKLSAgICB9OwotCi0gICAgcmV0dXJuIHsKLSAgICAgIGdldEluc3RhbmNlOiBmdW5jdGlvbigp
IHsKLSAgICAgICAgaWYgKCFnVmFsaWRhdGlvbkVycm9yT2JzZXJ2ZXIpIHsKLSAgICAgICAgICBn
VmFsaWRhdGlvbkVycm9yT2JzZXJ2ZXIgPSBuZXcgT2JzZXJ2ZXIoKTsKLSAgICAgICAgfQotICAg
ICAgICByZXR1cm4gZ1ZhbGlkYXRpb25FcnJvck9ic2VydmVyOwotICAgICAgfQotICAgIH07Ci0g
IH0pKCk7Ci0KLSAgZnVuY3Rpb24gaXNUZXN0aW5nTW9kZSgpIHsKLSAgICByZXR1cm4gQm9vbGVh
bihnVmFsaWRhdGlvbkVycm9yT2JzZXJ2ZXIpOwotICB9Ci0KLSAgZnVuY3Rpb24gY2xlYXJUZXN0
aW5nTW9kZSgpIHsKLSAgICBnVmFsaWRhdGlvbkVycm9yT2JzZXJ2ZXIgPSBudWxsOwotICB9Ci0K
LSAgZnVuY3Rpb24gaXNFbnVtQ2xhc3MoY2xzKSB7Ci0gICAgcmV0dXJuIGNscyBpbnN0YW5jZW9m
IGludGVybmFsLkVudW07Ci0gIH0KLQotICBmdW5jdGlvbiBpc1N0cmluZ0NsYXNzKGNscykgewot
ICAgIHJldHVybiBjbHMgPT09IGludGVybmFsLlN0cmluZyB8fCBjbHMgPT09IGludGVybmFsLk51
bGxhYmxlU3RyaW5nOwotICB9Ci0KLSAgZnVuY3Rpb24gaXNIYW5kbGVDbGFzcyhjbHMpIHsKLSAg
ICByZXR1cm4gY2xzID09PSBpbnRlcm5hbC5IYW5kbGUgfHwgY2xzID09PSBpbnRlcm5hbC5OdWxs
YWJsZUhhbmRsZTsKLSAgfQotCi0gIGZ1bmN0aW9uIGlzSW50ZXJmYWNlQ2xhc3MoY2xzKSB7Ci0g
ICAgcmV0dXJuIGNscyBpbnN0YW5jZW9mIGludGVybmFsLkludGVyZmFjZTsKLSAgfQotCi0gIGZ1
bmN0aW9uIGlzSW50ZXJmYWNlUmVxdWVzdENsYXNzKGNscykgewotICAgIHJldHVybiBjbHMgPT09
IGludGVybmFsLkludGVyZmFjZVJlcXVlc3QgfHwKLSAgICAgICAgY2xzID09PSBpbnRlcm5hbC5O
dWxsYWJsZUludGVyZmFjZVJlcXVlc3Q7Ci0gIH0KLQotICBmdW5jdGlvbiBpc0Fzc29jaWF0ZWRJ
bnRlcmZhY2VDbGFzcyhjbHMpIHsKLSAgICByZXR1cm4gY2xzID09PSBpbnRlcm5hbC5Bc3NvY2lh
dGVkSW50ZXJmYWNlUHRySW5mbyB8fAotICAgICAgICBjbHMgPT09IGludGVybmFsLk51bGxhYmxl
QXNzb2NpYXRlZEludGVyZmFjZVB0ckluZm87Ci0gIH0KLQotICBmdW5jdGlvbiBpc0Fzc29jaWF0
ZWRJbnRlcmZhY2VSZXF1ZXN0Q2xhc3MoY2xzKSB7Ci0gICAgcmV0dXJuIGNscyA9PT0gaW50ZXJu
YWwuQXNzb2NpYXRlZEludGVyZmFjZVJlcXVlc3QgfHwKLSAgICAgICAgY2xzID09PSBpbnRlcm5h
bC5OdWxsYWJsZUFzc29jaWF0ZWRJbnRlcmZhY2VSZXF1ZXN0OwotICB9Ci0KLSAgZnVuY3Rpb24g
aXNOdWxsYWJsZSh0eXBlKSB7Ci0gICAgcmV0dXJuIHR5cGUgPT09IGludGVybmFsLk51bGxhYmxl
U3RyaW5nIHx8Ci0gICAgICAgIHR5cGUgPT09IGludGVybmFsLk51bGxhYmxlSGFuZGxlIHx8Ci0g
ICAgICAgIHR5cGUgPT09IGludGVybmFsLk51bGxhYmxlQXNzb2NpYXRlZEludGVyZmFjZVB0cklu
Zm8gfHwKLSAgICAgICAgdHlwZSA9PT0gaW50ZXJuYWwuTnVsbGFibGVBc3NvY2lhdGVkSW50ZXJm
YWNlUmVxdWVzdCB8fAotICAgICAgICB0eXBlID09PSBpbnRlcm5hbC5OdWxsYWJsZUludGVyZmFj
ZSB8fAotICAgICAgICB0eXBlID09PSBpbnRlcm5hbC5OdWxsYWJsZUludGVyZmFjZVJlcXVlc3Qg
fHwKLSAgICAgICAgdHlwZSBpbnN0YW5jZW9mIGludGVybmFsLk51bGxhYmxlQXJyYXlPZiB8fAot
ICAgICAgICB0eXBlIGluc3RhbmNlb2YgaW50ZXJuYWwuTnVsbGFibGVQb2ludGVyVG87Ci0gIH0K
LQotICBmdW5jdGlvbiBWYWxpZGF0b3IobWVzc2FnZSkgewotICAgIHRoaXMubWVzc2FnZSA9IG1l
c3NhZ2U7Ci0gICAgdGhpcy5vZmZzZXQgPSAwOwotICAgIHRoaXMuaGFuZGxlSW5kZXggPSAwOwot
ICAgIHRoaXMuYXNzb2NpYXRlZEVuZHBvaW50SGFuZGxlSW5kZXggPSAwOwotICAgIHRoaXMucGF5
bG9hZEludGVyZmFjZUlkcyA9IG51bGw7Ci0gICAgdGhpcy5vZmZzZXRMaW1pdCA9IHRoaXMubWVz
c2FnZS5idWZmZXIuYnl0ZUxlbmd0aDsKLSAgfQotCi0gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShW
YWxpZGF0b3IucHJvdG90eXBlLCAiaGFuZGxlSW5kZXhMaW1pdCIsIHsKLSAgICBnZXQ6IGZ1bmN0
aW9uKCkgeyByZXR1cm4gdGhpcy5tZXNzYWdlLmhhbmRsZXMubGVuZ3RoOyB9Ci0gIH0pOwotCi0g
IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShWYWxpZGF0b3IucHJvdG90eXBlLCAiYXNzb2NpYXRlZEhh
bmRsZUluZGV4TGltaXQiLCB7Ci0gICAgZ2V0OiBmdW5jdGlvbigpIHsKLSAgICAgIHJldHVybiB0
aGlzLnBheWxvYWRJbnRlcmZhY2VJZHMgPyB0aGlzLnBheWxvYWRJbnRlcmZhY2VJZHMubGVuZ3Ro
IDogMDsKLSAgICB9Ci0gIH0pOwotCi0gIC8vIFRydWUgaWYgd2UgY2FuIHNhZmVseSBhbGxvY2F0
ZSBhIGJsb2NrIG9mIGJ5dGVzIGZyb20gc3RhcnQgdG8KLSAgLy8gdG8gc3RhcnQgKyBudW1CeXRl
cy4KLSAgVmFsaWRhdG9yLnByb3RvdHlwZS5pc1ZhbGlkUmFuZ2UgPSBmdW5jdGlvbihzdGFydCwg
bnVtQnl0ZXMpIHsKLSAgICAvLyBPbmx5IHBvc2l0aXZlIEphdmFTY3JpcHQgaW50ZWdlcnMgdGhh
dCBhcmUgbGVzcyB0aGFuIDJeNTMKLSAgICAvLyAoTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIpIGNh
biBiZSByZXByZXNlbnRlZCBleGFjdGx5LgotICAgIGlmIChzdGFydCA8IHRoaXMub2Zmc2V0IHx8
IG51bUJ5dGVzIDw9IDAgfHwKLSAgICAgICAgIU51bWJlci5pc1NhZmVJbnRlZ2VyKHN0YXJ0KSB8
fAotICAgICAgICAhTnVtYmVyLmlzU2FmZUludGVnZXIobnVtQnl0ZXMpKQotICAgICAgcmV0dXJu
IGZhbHNlOwotCi0gICAgdmFyIG5ld09mZnNldCA9IHN0YXJ0ICsgbnVtQnl0ZXM7Ci0gICAgaWYg
KCFOdW1iZXIuaXNTYWZlSW50ZWdlcihuZXdPZmZzZXQpIHx8IG5ld09mZnNldCA+IHRoaXMub2Zm
c2V0TGltaXQpCi0gICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLSAgfTsK
LQotICBWYWxpZGF0b3IucHJvdG90eXBlLmNsYWltUmFuZ2UgPSBmdW5jdGlvbihzdGFydCwgbnVt
Qnl0ZXMpIHsKLSAgICBpZiAodGhpcy5pc1ZhbGlkUmFuZ2Uoc3RhcnQsIG51bUJ5dGVzKSkgewot
ICAgICAgdGhpcy5vZmZzZXQgPSBzdGFydCArIG51bUJ5dGVzOwotICAgICAgcmV0dXJuIHRydWU7
Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLSAgfTsKLQotICBWYWxpZGF0b3IucHJvdG90eXBl
LmNsYWltSGFuZGxlID0gZnVuY3Rpb24oaW5kZXgpIHsKLSAgICBpZiAoaW5kZXggPT09IGludGVy
bmFsLmtFbmNvZGVkSW52YWxpZEhhbmRsZVZhbHVlKQotICAgICAgcmV0dXJuIHRydWU7Ci0KLSAg
ICBpZiAoaW5kZXggPCB0aGlzLmhhbmRsZUluZGV4IHx8IGluZGV4ID49IHRoaXMuaGFuZGxlSW5k
ZXhMaW1pdCkKLSAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIC8vIFRoaXMgaXMgc2FmZSBiZWNh
dXNlIGhhbmRsZSBpbmRpY2VzIGFyZSB1aW50MzIuCi0gICAgdGhpcy5oYW5kbGVJbmRleCA9IGlu
ZGV4ICsgMTsKLSAgICByZXR1cm4gdHJ1ZTsKLSAgfTsKLQotICBWYWxpZGF0b3IucHJvdG90eXBl
LmNsYWltQXNzb2NpYXRlZEVuZHBvaW50SGFuZGxlID0gZnVuY3Rpb24oaW5kZXgpIHsKLSAgICBp
ZiAoaW5kZXggPT09IGludGVybmFsLmtFbmNvZGVkSW52YWxpZEhhbmRsZVZhbHVlKSB7Ci0gICAg
ICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBpZiAoaW5kZXggPCB0aGlzLmFzc29jaWF0ZWRF
bmRwb2ludEhhbmRsZUluZGV4IHx8Ci0gICAgICAgIGluZGV4ID49IHRoaXMuYXNzb2NpYXRlZEhh
bmRsZUluZGV4TGltaXQpIHsKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICAvLyBU
aGlzIGlzIHNhZmUgYmVjYXVzZSBoYW5kbGUgaW5kaWNlcyBhcmUgdWludDMyLgotICAgIHRoaXMu
YXNzb2NpYXRlZEVuZHBvaW50SGFuZGxlSW5kZXggPSBpbmRleCArIDE7Ci0gICAgcmV0dXJuIHRy
dWU7Ci0gIH07Ci0KLSAgVmFsaWRhdG9yLnByb3RvdHlwZS52YWxpZGF0ZUVudW0gPSBmdW5jdGlv
bihvZmZzZXQsIGVudW1DbGFzcykgewotICAgIC8vIE5vdGU6IEFzc3VtZXMgdGhhdCBlbnVtcyBh
cmUgYWx3YXlzIDMyIGJpdHMhIEJ1dCB0aGlzIG1hdGNoZXMKLSAgICAvLyBtb2pvbTo6Z2VuZXJh
dGU6OnBhY2s6OlBhY2tlZEZpZWxkOjpHZXRTaXplRm9yS2luZCwgc28gaXQgc2hvdWxkIGJlIG9r
YXkuCi0gICAgdmFyIHZhbHVlID0gdGhpcy5tZXNzYWdlLmJ1ZmZlci5nZXRJbnQzMihvZmZzZXQp
OwotICAgIHJldHVybiBlbnVtQ2xhc3MudmFsaWRhdGUodmFsdWUpOwotICB9Ci0KLSAgVmFsaWRh
dG9yLnByb3RvdHlwZS52YWxpZGF0ZUhhbmRsZSA9IGZ1bmN0aW9uKG9mZnNldCwgbnVsbGFibGUp
IHsKLSAgICB2YXIgaW5kZXggPSB0aGlzLm1lc3NhZ2UuYnVmZmVyLmdldFVpbnQzMihvZmZzZXQp
OwotCi0gICAgaWYgKGluZGV4ID09PSBpbnRlcm5hbC5rRW5jb2RlZEludmFsaWRIYW5kbGVWYWx1
ZSkKLSAgICAgIHJldHVybiBudWxsYWJsZSA/Ci0gICAgICAgICAgdmFsaWRhdGlvbkVycm9yLk5P
TkUgOiB2YWxpZGF0aW9uRXJyb3IuVU5FWFBFQ1RFRF9JTlZBTElEX0hBTkRMRTsKLQotICAgIGlm
ICghdGhpcy5jbGFpbUhhbmRsZShpbmRleCkpCi0gICAgICByZXR1cm4gdmFsaWRhdGlvbkVycm9y
LklMTEVHQUxfSEFORExFOwotCi0gICAgcmV0dXJuIHZhbGlkYXRpb25FcnJvci5OT05FOwotICB9
OwotCi0gIFZhbGlkYXRvci5wcm90b3R5cGUudmFsaWRhdGVBc3NvY2lhdGVkRW5kcG9pbnRIYW5k
bGUgPSBmdW5jdGlvbihvZmZzZXQsCi0gICAgICBudWxsYWJsZSkgewotICAgIHZhciBpbmRleCA9
IHRoaXMubWVzc2FnZS5idWZmZXIuZ2V0VWludDMyKG9mZnNldCk7Ci0KLSAgICBpZiAoaW5kZXgg
PT09IGludGVybmFsLmtFbmNvZGVkSW52YWxpZEhhbmRsZVZhbHVlKSB7Ci0gICAgICByZXR1cm4g
bnVsbGFibGUgPyB2YWxpZGF0aW9uRXJyb3IuTk9ORSA6Ci0gICAgICAgICAgdmFsaWRhdGlvbkVy
cm9yLlVORVhQRUNURURfSU5WQUxJRF9JTlRFUkZBQ0VfSUQ7Ci0gICAgfQotCi0gICAgaWYgKCF0
aGlzLmNsYWltQXNzb2NpYXRlZEVuZHBvaW50SGFuZGxlKGluZGV4KSkgewotICAgICAgcmV0dXJu
IHZhbGlkYXRpb25FcnJvci5JTExFR0FMX0lOVEVSRkFDRV9JRDsKLSAgICB9Ci0KLSAgICByZXR1
cm4gdmFsaWRhdGlvbkVycm9yLk5PTkU7Ci0gIH07Ci0KLSAgVmFsaWRhdG9yLnByb3RvdHlwZS52
YWxpZGF0ZUludGVyZmFjZSA9IGZ1bmN0aW9uKG9mZnNldCwgbnVsbGFibGUpIHsKLSAgICByZXR1
cm4gdGhpcy52YWxpZGF0ZUhhbmRsZShvZmZzZXQsIG51bGxhYmxlKTsKLSAgfTsKLQotICBWYWxp
ZGF0b3IucHJvdG90eXBlLnZhbGlkYXRlSW50ZXJmYWNlUmVxdWVzdCA9IGZ1bmN0aW9uKG9mZnNl
dCwgbnVsbGFibGUpIHsKLSAgICByZXR1cm4gdGhpcy52YWxpZGF0ZUhhbmRsZShvZmZzZXQsIG51
bGxhYmxlKTsKLSAgfTsKLQotICBWYWxpZGF0b3IucHJvdG90eXBlLnZhbGlkYXRlQXNzb2NpYXRl
ZEludGVyZmFjZSA9IGZ1bmN0aW9uKG9mZnNldCwKLSAgICAgIG51bGxhYmxlKSB7Ci0gICAgcmV0
dXJuIHRoaXMudmFsaWRhdGVBc3NvY2lhdGVkRW5kcG9pbnRIYW5kbGUob2Zmc2V0LCBudWxsYWJs
ZSk7Ci0gIH07Ci0KLSAgVmFsaWRhdG9yLnByb3RvdHlwZS52YWxpZGF0ZUFzc29jaWF0ZWRJbnRl
cmZhY2VSZXF1ZXN0ID0gZnVuY3Rpb24oCi0gICAgICBvZmZzZXQsIG51bGxhYmxlKSB7Ci0gICAg
cmV0dXJuIHRoaXMudmFsaWRhdGVBc3NvY2lhdGVkRW5kcG9pbnRIYW5kbGUob2Zmc2V0LCBudWxs
YWJsZSk7Ci0gIH07Ci0KLSAgVmFsaWRhdG9yLnByb3RvdHlwZS52YWxpZGF0ZVN0cnVjdEhlYWRl
ciA9IGZ1bmN0aW9uKG9mZnNldCwgbWluTnVtQnl0ZXMpIHsKLSAgICBpZiAoIWludGVybmFsLmlz
QWxpZ25lZChvZmZzZXQpKQotICAgICAgcmV0dXJuIHZhbGlkYXRpb25FcnJvci5NSVNBTElHTkVE
X09CSkVDVDsKLQotICAgIGlmICghdGhpcy5pc1ZhbGlkUmFuZ2Uob2Zmc2V0LCBpbnRlcm5hbC5r
U3RydWN0SGVhZGVyU2l6ZSkpCi0gICAgICByZXR1cm4gdmFsaWRhdGlvbkVycm9yLklMTEVHQUxf
TUVNT1JZX1JBTkdFOwotCi0gICAgdmFyIG51bUJ5dGVzID0gdGhpcy5tZXNzYWdlLmJ1ZmZlci5n
ZXRVaW50MzIob2Zmc2V0KTsKLQotICAgIGlmIChudW1CeXRlcyA8IG1pbk51bUJ5dGVzKQotICAg
ICAgcmV0dXJuIHZhbGlkYXRpb25FcnJvci5VTkVYUEVDVEVEX1NUUlVDVF9IRUFERVI7Ci0KLSAg
ICBpZiAoIXRoaXMuY2xhaW1SYW5nZShvZmZzZXQsIG51bUJ5dGVzKSkKLSAgICAgIHJldHVybiB2
YWxpZGF0aW9uRXJyb3IuSUxMRUdBTF9NRU1PUllfUkFOR0U7Ci0KLSAgICByZXR1cm4gdmFsaWRh
dGlvbkVycm9yLk5PTkU7Ci0gIH07Ci0KLSAgVmFsaWRhdG9yLnByb3RvdHlwZS52YWxpZGF0ZVN0
cnVjdFZlcnNpb24gPSBmdW5jdGlvbihvZmZzZXQsIHZlcnNpb25TaXplcykgewotICAgIHZhciBu
dW1CeXRlcyA9IHRoaXMubWVzc2FnZS5idWZmZXIuZ2V0VWludDMyKG9mZnNldCk7Ci0gICAgdmFy
IHZlcnNpb24gPSB0aGlzLm1lc3NhZ2UuYnVmZmVyLmdldFVpbnQzMihvZmZzZXQgKyA0KTsKLQot
ICAgIGlmICh2ZXJzaW9uIDw9IHZlcnNpb25TaXplc1t2ZXJzaW9uU2l6ZXMubGVuZ3RoIC0gMV0u
dmVyc2lvbikgewotICAgICAgLy8gU2NhbiBpbiByZXZlcnNlIG9yZGVyIHRvIG9wdGltaXplIGZv
ciBtb3JlIHJlY2VudCB2ZXJzaW9uU2l6ZXMuCi0gICAgICBmb3IgKHZhciBpID0gdmVyc2lvblNp
emVzLmxlbmd0aCAtIDE7IGkgPj0gMDsgLS1pKSB7Ci0gICAgICAgIGlmICh2ZXJzaW9uID49IHZl
cnNpb25TaXplc1tpXS52ZXJzaW9uKSB7Ci0gICAgICAgICAgaWYgKG51bUJ5dGVzID09IHZlcnNp
b25TaXplc1tpXS5udW1CeXRlcykKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIHJldHVy
biB2YWxpZGF0aW9uRXJyb3IuVU5FWFBFQ1RFRF9TVFJVQ1RfSEVBREVSOwotICAgICAgICB9Ci0g
ICAgICB9Ci0gICAgfSBlbHNlIGlmIChudW1CeXRlcyA8IHZlcnNpb25TaXplc1t2ZXJzaW9uU2l6
ZXMubGVuZ3RoLTFdLm51bUJ5dGVzKSB7Ci0gICAgICByZXR1cm4gdmFsaWRhdGlvbkVycm9yLlVO
RVhQRUNURURfU1RSVUNUX0hFQURFUjsKLSAgICB9Ci0KLSAgICByZXR1cm4gdmFsaWRhdGlvbkVy
cm9yLk5PTkU7Ci0gIH07Ci0KLSAgVmFsaWRhdG9yLnByb3RvdHlwZS5pc0ZpZWxkSW5TdHJ1Y3RW
ZXJzaW9uID0gZnVuY3Rpb24ob2Zmc2V0LCBmaWVsZFZlcnNpb24pIHsKLSAgICB2YXIgc3RydWN0
VmVyc2lvbiA9IHRoaXMubWVzc2FnZS5idWZmZXIuZ2V0VWludDMyKG9mZnNldCArIDQpOwotICAg
IHJldHVybiBmaWVsZFZlcnNpb24gPD0gc3RydWN0VmVyc2lvbjsKLSAgfTsKLQotICBWYWxpZGF0
b3IucHJvdG90eXBlLnZhbGlkYXRlTWVzc2FnZUhlYWRlciA9IGZ1bmN0aW9uKCkgewotICAgIHZh
ciBlcnIgPSB0aGlzLnZhbGlkYXRlU3RydWN0SGVhZGVyKDAsIGludGVybmFsLmtNZXNzYWdlVjBI
ZWFkZXJTaXplKTsKLSAgICBpZiAoZXJyICE9IHZhbGlkYXRpb25FcnJvci5OT05FKSB7Ci0gICAg
ICByZXR1cm4gZXJyOwotICAgIH0KLQotICAgIHZhciBudW1CeXRlcyA9IHRoaXMubWVzc2FnZS5n
ZXRIZWFkZXJOdW1CeXRlcygpOwotICAgIHZhciB2ZXJzaW9uID0gdGhpcy5tZXNzYWdlLmdldEhl
YWRlclZlcnNpb24oKTsKLQotICAgIHZhciB2YWxpZFZlcnNpb25BbmROdW1CeXRlcyA9Ci0gICAg
ICAgICh2ZXJzaW9uID09IDAgJiYgbnVtQnl0ZXMgPT0gaW50ZXJuYWwua01lc3NhZ2VWMEhlYWRl
clNpemUpIHx8Ci0gICAgICAgICh2ZXJzaW9uID09IDEgJiYgbnVtQnl0ZXMgPT0gaW50ZXJuYWwu
a01lc3NhZ2VWMUhlYWRlclNpemUpIHx8Ci0gICAgICAgICh2ZXJzaW9uID09IDIgJiYgbnVtQnl0
ZXMgPT0gaW50ZXJuYWwua01lc3NhZ2VWMkhlYWRlclNpemUpIHx8Ci0gICAgICAgICh2ZXJzaW9u
ID4gMiAmJiBudW1CeXRlcyA+PSBpbnRlcm5hbC5rTWVzc2FnZVYySGVhZGVyU2l6ZSk7Ci0KLSAg
ICBpZiAoIXZhbGlkVmVyc2lvbkFuZE51bUJ5dGVzKSB7Ci0gICAgICByZXR1cm4gdmFsaWRhdGlv
bkVycm9yLlVORVhQRUNURURfU1RSVUNUX0hFQURFUjsKLSAgICB9Ci0KLSAgICB2YXIgZXhwZWN0
c1Jlc3BvbnNlID0gdGhpcy5tZXNzYWdlLmV4cGVjdHNSZXNwb25zZSgpOwotICAgIHZhciBpc1Jl
c3BvbnNlID0gdGhpcy5tZXNzYWdlLmlzUmVzcG9uc2UoKTsKLQotICAgIGlmICh2ZXJzaW9uID09
IDAgJiYgKGV4cGVjdHNSZXNwb25zZSB8fCBpc1Jlc3BvbnNlKSkgewotICAgICAgcmV0dXJuIHZh
bGlkYXRpb25FcnJvci5NRVNTQUdFX0hFQURFUl9NSVNTSU5HX1JFUVVFU1RfSUQ7Ci0gICAgfQot
Ci0gICAgaWYgKGlzUmVzcG9uc2UgJiYgZXhwZWN0c1Jlc3BvbnNlKSB7Ci0gICAgICByZXR1cm4g
dmFsaWRhdGlvbkVycm9yLk1FU1NBR0VfSEVBREVSX0lOVkFMSURfRkxBR1M7Ci0gICAgfQotCi0g
ICAgaWYgKHZlcnNpb24gPCAyKSB7Ci0gICAgICByZXR1cm4gdmFsaWRhdGlvbkVycm9yLk5PTkU7
Ci0gICAgfQotCi0gICAgdmFyIGVyciA9IHRoaXMudmFsaWRhdGVBcnJheVBvaW50ZXIoCi0gICAg
ICAgIGludGVybmFsLmtNZXNzYWdlUGF5bG9hZEludGVyZmFjZUlkc1BvaW50ZXJPZmZzZXQsCi0g
ICAgICAgIGludGVybmFsLlVpbnQzMi5lbmNvZGVkU2l6ZSwgaW50ZXJuYWwuVWludDMyLCB0cnVl
LCBbMF0sIDApOwotCi0gICAgaWYgKGVyciAhPSB2YWxpZGF0aW9uRXJyb3IuTk9ORSkgewotICAg
ICAgcmV0dXJuIGVycjsKLSAgICB9Ci0KLSAgICB0aGlzLnBheWxvYWRJbnRlcmZhY2VJZHMgPSB0
aGlzLm1lc3NhZ2UuZ2V0UGF5bG9hZEludGVyZmFjZUlkcygpOwotICAgIGlmICh0aGlzLnBheWxv
YWRJbnRlcmZhY2VJZHMpIHsKLSAgICAgIGZvciAodmFyIGludGVyZmFjZUlkIG9mIHRoaXMucGF5
bG9hZEludGVyZmFjZUlkcykgewotICAgICAgICBpZiAoIWludGVybmFsLmlzVmFsaWRJbnRlcmZh
Y2VJZChpbnRlcmZhY2VJZCkgfHwKLSAgICAgICAgICAgIGludGVybmFsLmlzTWFzdGVySW50ZXJm
YWNlSWQoaW50ZXJmYWNlSWQpKSB7Ci0gICAgICAgICAgcmV0dXJuIHZhbGlkYXRpb25FcnJvci5J
TExFR0FMX0lOVEVSRkFDRV9JRDsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLQotICAgIC8v
IFNldCBvZmZzZXQgdG8gdGhlIHN0YXJ0IG9mIHRoZSBwYXlsb2FkIGFuZCBvZmZzZXRMaW1pdCB0
byB0aGUgc3RhcnQgb2YKLSAgICAvLyB0aGUgcGF5bG9hZCBpbnRlcmZhY2UgSWRzIHNvIHRoYXQg
cGF5bG9hZCBjYW4gYmUgdmFsaWRhdGVkIHVzaW5nIHRoZQotICAgIC8vIHNhbWUgbWVzc2FnZVZh
bGlkYXRvci4KLSAgICB0aGlzLm9mZnNldCA9IHRoaXMubWVzc2FnZS5nZXRIZWFkZXJOdW1CeXRl
cygpOwotICAgIHRoaXMub2Zmc2V0TGltaXQgPSB0aGlzLmRlY29kZVBvaW50ZXIoCi0gICAgICAg
IGludGVybmFsLmtNZXNzYWdlUGF5bG9hZEludGVyZmFjZUlkc1BvaW50ZXJPZmZzZXQpOwotCi0g
ICAgcmV0dXJuIHZhbGlkYXRpb25FcnJvci5OT05FOwotICB9OwotCi0gIFZhbGlkYXRvci5wcm90
b3R5cGUudmFsaWRhdGVNZXNzYWdlSXNSZXF1ZXN0V2l0aG91dFJlc3BvbnNlID0gZnVuY3Rpb24o
KSB7Ci0gICAgaWYgKHRoaXMubWVzc2FnZS5pc1Jlc3BvbnNlKCkgfHwgdGhpcy5tZXNzYWdlLmV4
cGVjdHNSZXNwb25zZSgpKSB7Ci0gICAgICByZXR1cm4gdmFsaWRhdGlvbkVycm9yLk1FU1NBR0Vf
SEVBREVSX0lOVkFMSURfRkxBR1M7Ci0gICAgfQotICAgIHJldHVybiB2YWxpZGF0aW9uRXJyb3Iu
Tk9ORTsKLSAgfTsKLQotICBWYWxpZGF0b3IucHJvdG90eXBlLnZhbGlkYXRlTWVzc2FnZUlzUmVx
dWVzdEV4cGVjdGluZ1Jlc3BvbnNlID0gZnVuY3Rpb24oKSB7Ci0gICAgaWYgKHRoaXMubWVzc2Fn
ZS5pc1Jlc3BvbnNlKCkgfHwgIXRoaXMubWVzc2FnZS5leHBlY3RzUmVzcG9uc2UoKSkgewotICAg
ICAgcmV0dXJuIHZhbGlkYXRpb25FcnJvci5NRVNTQUdFX0hFQURFUl9JTlZBTElEX0ZMQUdTOwot
ICAgIH0KLSAgICByZXR1cm4gdmFsaWRhdGlvbkVycm9yLk5PTkU7Ci0gIH07Ci0KLSAgVmFsaWRh
dG9yLnByb3RvdHlwZS52YWxpZGF0ZU1lc3NhZ2VJc1Jlc3BvbnNlID0gZnVuY3Rpb24oKSB7Ci0g
ICAgaWYgKHRoaXMubWVzc2FnZS5leHBlY3RzUmVzcG9uc2UoKSB8fCAhdGhpcy5tZXNzYWdlLmlz
UmVzcG9uc2UoKSkgewotICAgICAgcmV0dXJuIHZhbGlkYXRpb25FcnJvci5NRVNTQUdFX0hFQURF
Ul9JTlZBTElEX0ZMQUdTOwotICAgIH0KLSAgICByZXR1cm4gdmFsaWRhdGlvbkVycm9yLk5PTkU7
Ci0gIH07Ci0KLSAgLy8gUmV0dXJucyB0aGUgbWVzc2FnZS5idWZmZXIgcmVsYXRpdmUgb2Zmc2V0
IHRoaXMgcG9pbnRlciAicG9pbnRzIHRvIiwKLSAgLy8gTlVMTF9NT0pPX1BPSU5URVIgaWYgdGhl
IHBvaW50ZXIgcmVwcmVzZW50cyBhIG51bGwsIG9yIEpTIG51bGwgaWYgdGhlCi0gIC8vIHBvaW50
ZXIncyB2YWx1ZSBpcyBub3QgdmFsaWQuCi0gIFZhbGlkYXRvci5wcm90b3R5cGUuZGVjb2RlUG9p
bnRlciA9IGZ1bmN0aW9uKG9mZnNldCkgewotICAgIHZhciBwb2ludGVyVmFsdWUgPSB0aGlzLm1l
c3NhZ2UuYnVmZmVyLmdldFVpbnQ2NChvZmZzZXQpOwotICAgIGlmIChwb2ludGVyVmFsdWUgPT09
IDApCi0gICAgICByZXR1cm4gTlVMTF9NT0pPX1BPSU5URVI7Ci0gICAgdmFyIGJ1ZmZlck9mZnNl
dCA9IG9mZnNldCArIHBvaW50ZXJWYWx1ZTsKLSAgICByZXR1cm4gTnVtYmVyLmlzU2FmZUludGVn
ZXIoYnVmZmVyT2Zmc2V0KSA/IGJ1ZmZlck9mZnNldCA6IG51bGw7Ci0gIH07Ci0KLSAgVmFsaWRh
dG9yLnByb3RvdHlwZS5kZWNvZGVVbmlvblNpemUgPSBmdW5jdGlvbihvZmZzZXQpIHsKLSAgICBy
ZXR1cm4gdGhpcy5tZXNzYWdlLmJ1ZmZlci5nZXRVaW50MzIob2Zmc2V0KTsKLSAgfTsKLQotICBW
YWxpZGF0b3IucHJvdG90eXBlLmRlY29kZVVuaW9uVGFnID0gZnVuY3Rpb24ob2Zmc2V0KSB7Ci0g
ICAgcmV0dXJuIHRoaXMubWVzc2FnZS5idWZmZXIuZ2V0VWludDMyKG9mZnNldCArIDQpOwotICB9
OwotCi0gIFZhbGlkYXRvci5wcm90b3R5cGUudmFsaWRhdGVBcnJheVBvaW50ZXIgPSBmdW5jdGlv
bigKLSAgICAgIG9mZnNldCwgZWxlbWVudFNpemUsIGVsZW1lbnRUeXBlLCBudWxsYWJsZSwgZXhw
ZWN0ZWREaW1lbnNpb25TaXplcywKLSAgICAgIGN1cnJlbnREaW1lbnNpb24pIHsKLSAgICB2YXIg
YXJyYXlPZmZzZXQgPSB0aGlzLmRlY29kZVBvaW50ZXIob2Zmc2V0KTsKLSAgICBpZiAoYXJyYXlP
ZmZzZXQgPT09IG51bGwpCi0gICAgICByZXR1cm4gdmFsaWRhdGlvbkVycm9yLklMTEVHQUxfUE9J
TlRFUjsKLQotICAgIGlmIChhcnJheU9mZnNldCA9PT0gTlVMTF9NT0pPX1BPSU5URVIpCi0gICAg
ICByZXR1cm4gbnVsbGFibGUgPwotICAgICAgICAgIHZhbGlkYXRpb25FcnJvci5OT05FIDogdmFs
aWRhdGlvbkVycm9yLlVORVhQRUNURURfTlVMTF9QT0lOVEVSOwotCi0gICAgcmV0dXJuIHRoaXMu
dmFsaWRhdGVBcnJheShhcnJheU9mZnNldCwgZWxlbWVudFNpemUsIGVsZW1lbnRUeXBlLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWREaW1lbnNpb25TaXplcywgY3VycmVu
dERpbWVuc2lvbik7Ci0gIH07Ci0KLSAgVmFsaWRhdG9yLnByb3RvdHlwZS52YWxpZGF0ZVN0cnVj
dFBvaW50ZXIgPSBmdW5jdGlvbigKLSAgICAgIG9mZnNldCwgc3RydWN0Q2xhc3MsIG51bGxhYmxl
KSB7Ci0gICAgdmFyIHN0cnVjdE9mZnNldCA9IHRoaXMuZGVjb2RlUG9pbnRlcihvZmZzZXQpOwot
ICAgIGlmIChzdHJ1Y3RPZmZzZXQgPT09IG51bGwpCi0gICAgICByZXR1cm4gdmFsaWRhdGlvbkVy
cm9yLklMTEVHQUxfUE9JTlRFUjsKLQotICAgIGlmIChzdHJ1Y3RPZmZzZXQgPT09IE5VTExfTU9K
T19QT0lOVEVSKQotICAgICAgcmV0dXJuIG51bGxhYmxlID8KLSAgICAgICAgICB2YWxpZGF0aW9u
RXJyb3IuTk9ORSA6IHZhbGlkYXRpb25FcnJvci5VTkVYUEVDVEVEX05VTExfUE9JTlRFUjsKLQot
ICAgIHJldHVybiBzdHJ1Y3RDbGFzcy52YWxpZGF0ZSh0aGlzLCBzdHJ1Y3RPZmZzZXQpOwotICB9
OwotCi0gIFZhbGlkYXRvci5wcm90b3R5cGUudmFsaWRhdGVVbmlvbiA9IGZ1bmN0aW9uKAotICAg
ICAgb2Zmc2V0LCB1bmlvbkNsYXNzLCBudWxsYWJsZSkgewotICAgIHZhciBzaXplID0gdGhpcy5t
ZXNzYWdlLmJ1ZmZlci5nZXRVaW50MzIob2Zmc2V0KTsKLSAgICBpZiAoc2l6ZSA9PSAwKSB7Ci0g
ICAgICByZXR1cm4gbnVsbGFibGUgPwotICAgICAgICAgIHZhbGlkYXRpb25FcnJvci5OT05FIDog
dmFsaWRhdGlvbkVycm9yLlVORVhQRUNURURfTlVMTF9VTklPTjsKLSAgICB9Ci0KLSAgICByZXR1
cm4gdW5pb25DbGFzcy52YWxpZGF0ZSh0aGlzLCBvZmZzZXQpOwotICB9OwotCi0gIFZhbGlkYXRv
ci5wcm90b3R5cGUudmFsaWRhdGVOZXN0ZWRVbmlvbiA9IGZ1bmN0aW9uKAotICAgICAgb2Zmc2V0
LCB1bmlvbkNsYXNzLCBudWxsYWJsZSkgewotICAgIHZhciB1bmlvbk9mZnNldCA9IHRoaXMuZGVj
b2RlUG9pbnRlcihvZmZzZXQpOwotICAgIGlmICh1bmlvbk9mZnNldCA9PT0gbnVsbCkKLSAgICAg
IHJldHVybiB2YWxpZGF0aW9uRXJyb3IuSUxMRUdBTF9QT0lOVEVSOwotCi0gICAgaWYgKHVuaW9u
T2Zmc2V0ID09PSBOVUxMX01PSk9fUE9JTlRFUikKLSAgICAgIHJldHVybiBudWxsYWJsZSA/Ci0g
ICAgICAgICAgdmFsaWRhdGlvbkVycm9yLk5PTkUgOiB2YWxpZGF0aW9uRXJyb3IuVU5FWFBFQ1RF
RF9OVUxMX1VOSU9OOwotCi0gICAgcmV0dXJuIHRoaXMudmFsaWRhdGVVbmlvbih1bmlvbk9mZnNl
dCwgdW5pb25DbGFzcywgbnVsbGFibGUpOwotICB9OwotCi0gIC8vIFRoaXMgbWV0aG9kIGFzc3Vt
ZXMgdGhhdCB0aGUgYXJyYXkgYXQgYXJyYXlQb2ludGVyT2Zmc2V0IGhhcwotICAvLyBiZWVuIHZh
bGlkYXRlZC4KLQotICBWYWxpZGF0b3IucHJvdG90eXBlLmFycmF5TGVuZ3RoID0gZnVuY3Rpb24o
YXJyYXlQb2ludGVyT2Zmc2V0KSB7Ci0gICAgdmFyIGFycmF5T2Zmc2V0ID0gdGhpcy5kZWNvZGVQ
b2ludGVyKGFycmF5UG9pbnRlck9mZnNldCk7Ci0gICAgcmV0dXJuIHRoaXMubWVzc2FnZS5idWZm
ZXIuZ2V0VWludDMyKGFycmF5T2Zmc2V0ICsgNCk7Ci0gIH07Ci0KLSAgVmFsaWRhdG9yLnByb3Rv
dHlwZS52YWxpZGF0ZU1hcFBvaW50ZXIgPSBmdW5jdGlvbigKLSAgICAgIG9mZnNldCwgbWFwSXNO
dWxsYWJsZSwga2V5Q2xhc3MsIHZhbHVlQ2xhc3MsIHZhbHVlSXNOdWxsYWJsZSkgewotICAgIC8v
IFZhbGlkYXRlIHRoZSBpbXBsaWNpdCBtYXAgc3RydWN0OgotICAgIC8vIHN0cnVjdCB7YXJyYXk8
a2V5Q2xhc3M+IGtleXM7IGFycmF5PHZhbHVlQ2xhc3M+IHZhbHVlc307Ci0gICAgdmFyIHN0cnVj
dE9mZnNldCA9IHRoaXMuZGVjb2RlUG9pbnRlcihvZmZzZXQpOwotICAgIGlmIChzdHJ1Y3RPZmZz
ZXQgPT09IG51bGwpCi0gICAgICByZXR1cm4gdmFsaWRhdGlvbkVycm9yLklMTEVHQUxfUE9JTlRF
UjsKLQotICAgIGlmIChzdHJ1Y3RPZmZzZXQgPT09IE5VTExfTU9KT19QT0lOVEVSKQotICAgICAg
cmV0dXJuIG1hcElzTnVsbGFibGUgPwotICAgICAgICAgIHZhbGlkYXRpb25FcnJvci5OT05FIDog
dmFsaWRhdGlvbkVycm9yLlVORVhQRUNURURfTlVMTF9QT0lOVEVSOwotCi0gICAgdmFyIG1hcEVu
Y29kZWRTaXplID0gaW50ZXJuYWwua1N0cnVjdEhlYWRlclNpemUgKwotICAgICAgICAgICAgICAg
ICAgICAgICAgIGludGVybmFsLmtNYXBTdHJ1Y3RQYXlsb2FkU2l6ZTsKLSAgICB2YXIgZXJyID0g
dGhpcy52YWxpZGF0ZVN0cnVjdEhlYWRlcihzdHJ1Y3RPZmZzZXQsIG1hcEVuY29kZWRTaXplKTsK
LSAgICBpZiAoZXJyICE9PSB2YWxpZGF0aW9uRXJyb3IuTk9ORSkKLSAgICAgICAgcmV0dXJuIGVy
cjsKLQotICAgIC8vIFZhbGlkYXRlIHRoZSBrZXlzIGFycmF5LgotICAgIHZhciBrZXlzQXJyYXlQ
b2ludGVyT2Zmc2V0ID0gc3RydWN0T2Zmc2V0ICsgaW50ZXJuYWwua1N0cnVjdEhlYWRlclNpemU7
Ci0gICAgZXJyID0gdGhpcy52YWxpZGF0ZUFycmF5UG9pbnRlcigKLSAgICAgICAga2V5c0FycmF5
UG9pbnRlck9mZnNldCwga2V5Q2xhc3MuZW5jb2RlZFNpemUsIGtleUNsYXNzLCBmYWxzZSwgWzBd
LCAwKTsKLSAgICBpZiAoZXJyICE9PSB2YWxpZGF0aW9uRXJyb3IuTk9ORSkKLSAgICAgICAgcmV0
dXJuIGVycjsKLQotICAgIC8vIFZhbGlkYXRlIHRoZSB2YWx1ZXMgYXJyYXkuCi0gICAgdmFyIHZh
bHVlc0FycmF5UG9pbnRlck9mZnNldCA9IGtleXNBcnJheVBvaW50ZXJPZmZzZXQgKyA4OwotICAg
IHZhciB2YWx1ZXNBcnJheURpbWVuc2lvbnMgPSBbMF07IC8vIFZhbGlkYXRlIHRoZSBhY3R1YWwg
bGVuZ3RoIGJlbG93LgotICAgIGlmICh2YWx1ZUNsYXNzIGluc3RhbmNlb2YgaW50ZXJuYWwuQXJy
YXlPZikKLSAgICAgIHZhbHVlc0FycmF5RGltZW5zaW9ucyA9Ci0gICAgICAgICAgdmFsdWVzQXJy
YXlEaW1lbnNpb25zLmNvbmNhdCh2YWx1ZUNsYXNzLmRpbWVuc2lvbnMoKSk7Ci0gICAgdmFyIGVy
ciA9IHRoaXMudmFsaWRhdGVBcnJheVBvaW50ZXIodmFsdWVzQXJyYXlQb2ludGVyT2Zmc2V0LAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlQ2xhc3MuZW5jb2Rl
ZFNpemUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVDbGFz
cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZUlzTnVsbGFi
bGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVzQXJyYXlE
aW1lbnNpb25zLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDApOwot
ICAgIGlmIChlcnIgIT09IHZhbGlkYXRpb25FcnJvci5OT05FKQotICAgICAgICByZXR1cm4gZXJy
OwotCi0gICAgLy8gVmFsaWRhdGUgdGhlIGxlbmd0aHMgb2YgdGhlIGtleXMgYW5kIHZhbHVlcyBh
cnJheXMuCi0gICAgdmFyIGtleXNBcnJheUxlbmd0aCA9IHRoaXMuYXJyYXlMZW5ndGgoa2V5c0Fy
cmF5UG9pbnRlck9mZnNldCk7Ci0gICAgdmFyIHZhbHVlc0FycmF5TGVuZ3RoID0gdGhpcy5hcnJh
eUxlbmd0aCh2YWx1ZXNBcnJheVBvaW50ZXJPZmZzZXQpOwotICAgIGlmIChrZXlzQXJyYXlMZW5n
dGggIT0gdmFsdWVzQXJyYXlMZW5ndGgpCi0gICAgICByZXR1cm4gdmFsaWRhdGlvbkVycm9yLkRJ
RkZFUkVOVF9TSVpFRF9BUlJBWVNfSU5fTUFQOwotCi0gICAgcmV0dXJuIHZhbGlkYXRpb25FcnJv
ci5OT05FOwotICB9OwotCi0gIFZhbGlkYXRvci5wcm90b3R5cGUudmFsaWRhdGVTdHJpbmdQb2lu
dGVyID0gZnVuY3Rpb24ob2Zmc2V0LCBudWxsYWJsZSkgewotICAgIHJldHVybiB0aGlzLnZhbGlk
YXRlQXJyYXlQb2ludGVyKAotICAgICAgICBvZmZzZXQsIGludGVybmFsLlVpbnQ4LmVuY29kZWRT
aXplLCBpbnRlcm5hbC5VaW50OCwgbnVsbGFibGUsIFswXSwgMCk7Ci0gIH07Ci0KLSAgLy8gU2lt
aWxhciB0byBBcnJheV9EYXRhPFQ+OjpWYWxpZGF0ZSgpCi0gIC8vIG1vam8vcHVibGljL2NwcC9i
aW5kaW5ncy9saWIvYXJyYXlfaW50ZXJuYWwuaAotCi0gIFZhbGlkYXRvci5wcm90b3R5cGUudmFs
aWRhdGVBcnJheSA9Ci0gICAgICBmdW5jdGlvbiAob2Zmc2V0LCBlbGVtZW50U2l6ZSwgZWxlbWVu
dFR5cGUsIGV4cGVjdGVkRGltZW5zaW9uU2l6ZXMsCi0gICAgICAgICAgICAgICAgY3VycmVudERp
bWVuc2lvbikgewotICAgIGlmICghaW50ZXJuYWwuaXNBbGlnbmVkKG9mZnNldCkpCi0gICAgICBy
ZXR1cm4gdmFsaWRhdGlvbkVycm9yLk1JU0FMSUdORURfT0JKRUNUOwotCi0gICAgaWYgKCF0aGlz
LmlzVmFsaWRSYW5nZShvZmZzZXQsIGludGVybmFsLmtBcnJheUhlYWRlclNpemUpKQotICAgICAg
cmV0dXJuIHZhbGlkYXRpb25FcnJvci5JTExFR0FMX01FTU9SWV9SQU5HRTsKLQotICAgIHZhciBu
dW1CeXRlcyA9IHRoaXMubWVzc2FnZS5idWZmZXIuZ2V0VWludDMyKG9mZnNldCk7Ci0gICAgdmFy
IG51bUVsZW1lbnRzID0gdGhpcy5tZXNzYWdlLmJ1ZmZlci5nZXRVaW50MzIob2Zmc2V0ICsgNCk7
Ci0KLSAgICAvLyBOb3RlOiB0aGlzIGNvbXB1dGF0aW9uIGlzICJzYWZlIiBiZWNhdXNlIGVsZW1l
bnRTaXplIDw9IDggYW5kCi0gICAgLy8gbnVtRWxlbWVudHMgaXMgYSB1aW50MzIuCi0gICAgdmFy
IGVsZW1lbnRzVG90YWxTaXplID0gKGVsZW1lbnRUeXBlID09PSBpbnRlcm5hbC5QYWNrZWRCb29s
KSA/Ci0gICAgICAgIE1hdGguY2VpbChudW1FbGVtZW50cyAvIDgpIDogKGVsZW1lbnRTaXplICog
bnVtRWxlbWVudHMpOwotCi0gICAgaWYgKG51bUJ5dGVzIDwgaW50ZXJuYWwua0FycmF5SGVhZGVy
U2l6ZSArIGVsZW1lbnRzVG90YWxTaXplKQotICAgICAgcmV0dXJuIHZhbGlkYXRpb25FcnJvci5V
TkVYUEVDVEVEX0FSUkFZX0hFQURFUjsKLQotICAgIGlmIChleHBlY3RlZERpbWVuc2lvblNpemVz
W2N1cnJlbnREaW1lbnNpb25dICE9IDAgJiYKLSAgICAgICAgbnVtRWxlbWVudHMgIT0gZXhwZWN0
ZWREaW1lbnNpb25TaXplc1tjdXJyZW50RGltZW5zaW9uXSkgewotICAgICAgcmV0dXJuIHZhbGlk
YXRpb25FcnJvci5VTkVYUEVDVEVEX0FSUkFZX0hFQURFUjsKLSAgICB9Ci0KLSAgICBpZiAoIXRo
aXMuY2xhaW1SYW5nZShvZmZzZXQsIG51bUJ5dGVzKSkKLSAgICAgIHJldHVybiB2YWxpZGF0aW9u
RXJyb3IuSUxMRUdBTF9NRU1PUllfUkFOR0U7Ci0KLSAgICAvLyBWYWxpZGF0ZSB0aGUgYXJyYXkn
cyBlbGVtZW50cyBpZiB0aGV5IGFyZSBwb2ludGVycyBvciBoYW5kbGVzLgotCi0gICAgdmFyIGVs
ZW1lbnRzT2Zmc2V0ID0gb2Zmc2V0ICsgaW50ZXJuYWwua0FycmF5SGVhZGVyU2l6ZTsKLSAgICB2
YXIgbnVsbGFibGUgPSBpc051bGxhYmxlKGVsZW1lbnRUeXBlKTsKLQotICAgIGlmIChpc0hhbmRs
ZUNsYXNzKGVsZW1lbnRUeXBlKSkKLSAgICAgIHJldHVybiB0aGlzLnZhbGlkYXRlSGFuZGxlRWxl
bWVudHMoZWxlbWVudHNPZmZzZXQsIG51bUVsZW1lbnRzLCBudWxsYWJsZSk7Ci0gICAgaWYgKGlz
SW50ZXJmYWNlQ2xhc3MoZWxlbWVudFR5cGUpKQotICAgICAgcmV0dXJuIHRoaXMudmFsaWRhdGVJ
bnRlcmZhY2VFbGVtZW50cygKLSAgICAgICAgICBlbGVtZW50c09mZnNldCwgbnVtRWxlbWVudHMs
IG51bGxhYmxlKTsKLSAgICBpZiAoaXNJbnRlcmZhY2VSZXF1ZXN0Q2xhc3MoZWxlbWVudFR5cGUp
KQotICAgICAgcmV0dXJuIHRoaXMudmFsaWRhdGVJbnRlcmZhY2VSZXF1ZXN0RWxlbWVudHMoCi0g
ICAgICAgICAgZWxlbWVudHNPZmZzZXQsIG51bUVsZW1lbnRzLCBudWxsYWJsZSk7Ci0gICAgaWYg
KGlzQXNzb2NpYXRlZEludGVyZmFjZUNsYXNzKGVsZW1lbnRUeXBlKSkKLSAgICAgIHJldHVybiB0
aGlzLnZhbGlkYXRlQXNzb2NpYXRlZEludGVyZmFjZUVsZW1lbnRzKAotICAgICAgICAgIGVsZW1l
bnRzT2Zmc2V0LCBudW1FbGVtZW50cywgbnVsbGFibGUpOwotICAgIGlmIChpc0Fzc29jaWF0ZWRJ
bnRlcmZhY2VSZXF1ZXN0Q2xhc3MoZWxlbWVudFR5cGUpKQotICAgICAgcmV0dXJuIHRoaXMudmFs
aWRhdGVBc3NvY2lhdGVkSW50ZXJmYWNlUmVxdWVzdEVsZW1lbnRzKAotICAgICAgICAgIGVsZW1l
bnRzT2Zmc2V0LCBudW1FbGVtZW50cywgbnVsbGFibGUpOwotICAgIGlmIChpc1N0cmluZ0NsYXNz
KGVsZW1lbnRUeXBlKSkKLSAgICAgIHJldHVybiB0aGlzLnZhbGlkYXRlQXJyYXlFbGVtZW50cygK
LSAgICAgICAgICBlbGVtZW50c09mZnNldCwgbnVtRWxlbWVudHMsIGludGVybmFsLlVpbnQ4LCBu
dWxsYWJsZSwgWzBdLCAwKTsKLSAgICBpZiAoZWxlbWVudFR5cGUgaW5zdGFuY2VvZiBpbnRlcm5h
bC5Qb2ludGVyVG8pCi0gICAgICByZXR1cm4gdGhpcy52YWxpZGF0ZVN0cnVjdEVsZW1lbnRzKAot
ICAgICAgICAgIGVsZW1lbnRzT2Zmc2V0LCBudW1FbGVtZW50cywgZWxlbWVudFR5cGUuY2xzLCBu
dWxsYWJsZSk7Ci0gICAgaWYgKGVsZW1lbnRUeXBlIGluc3RhbmNlb2YgaW50ZXJuYWwuQXJyYXlP
ZikKLSAgICAgIHJldHVybiB0aGlzLnZhbGlkYXRlQXJyYXlFbGVtZW50cygKLSAgICAgICAgICBl
bGVtZW50c09mZnNldCwgbnVtRWxlbWVudHMsIGVsZW1lbnRUeXBlLmNscywgbnVsbGFibGUsCi0g
ICAgICAgICAgZXhwZWN0ZWREaW1lbnNpb25TaXplcywgY3VycmVudERpbWVuc2lvbiArIDEpOwot
ICAgIGlmIChpc0VudW1DbGFzcyhlbGVtZW50VHlwZSkpCi0gICAgICByZXR1cm4gdGhpcy52YWxp
ZGF0ZUVudW1FbGVtZW50cyhlbGVtZW50c09mZnNldCwgbnVtRWxlbWVudHMsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50VHlwZS5jbHMpOwotCi0gICAgcmV0
dXJuIHZhbGlkYXRpb25FcnJvci5OT05FOwotICB9OwotCi0gIC8vIE5vdGU6IHRoZSB8b2Zmc2V0
ICsgaSAqIGVsZW1lbnRTaXplfCBjb21wdXRhdGlvbiBpbiB0aGUgdmFsaWRhdGVGb29FbGVtZW50
cwotICAvLyBtZXRob2RzIGJlbG93IGlzICJzYWZlIiBiZWNhdXNlIGVsZW1lbnRTaXplIDw9IDgs
IG9mZnNldCBhbmQKLSAgLy8gbnVtRWxlbWVudHMgYXJlIHVpbnQzMiwgYW5kIDAgPD0gaSA8IG51
bUVsZW1lbnRzLgotCi0gIFZhbGlkYXRvci5wcm90b3R5cGUudmFsaWRhdGVIYW5kbGVFbGVtZW50
cyA9Ci0gICAgICBmdW5jdGlvbihvZmZzZXQsIG51bUVsZW1lbnRzLCBudWxsYWJsZSkgewotICAg
IHZhciBlbGVtZW50U2l6ZSA9IGludGVybmFsLkhhbmRsZS5lbmNvZGVkU2l6ZTsKLSAgICBmb3Ig
KHZhciBpID0gMDsgaSA8IG51bUVsZW1lbnRzOyBpKyspIHsKLSAgICAgIHZhciBlbGVtZW50T2Zm
c2V0ID0gb2Zmc2V0ICsgaSAqIGVsZW1lbnRTaXplOwotICAgICAgdmFyIGVyciA9IHRoaXMudmFs
aWRhdGVIYW5kbGUoZWxlbWVudE9mZnNldCwgbnVsbGFibGUpOwotICAgICAgaWYgKGVyciAhPSB2
YWxpZGF0aW9uRXJyb3IuTk9ORSkKLSAgICAgICAgcmV0dXJuIGVycjsKLSAgICB9Ci0gICAgcmV0
dXJuIHZhbGlkYXRpb25FcnJvci5OT05FOwotICB9OwotCi0gIFZhbGlkYXRvci5wcm90b3R5cGUu
dmFsaWRhdGVJbnRlcmZhY2VFbGVtZW50cyA9Ci0gICAgICBmdW5jdGlvbihvZmZzZXQsIG51bUVs
ZW1lbnRzLCBudWxsYWJsZSkgewotICAgIHZhciBlbGVtZW50U2l6ZSA9IGludGVybmFsLkludGVy
ZmFjZS5wcm90b3R5cGUuZW5jb2RlZFNpemU7Ci0gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBudW1F
bGVtZW50czsgaSsrKSB7Ci0gICAgICB2YXIgZWxlbWVudE9mZnNldCA9IG9mZnNldCArIGkgKiBl
bGVtZW50U2l6ZTsKLSAgICAgIHZhciBlcnIgPSB0aGlzLnZhbGlkYXRlSW50ZXJmYWNlKGVsZW1l
bnRPZmZzZXQsIG51bGxhYmxlKTsKLSAgICAgIGlmIChlcnIgIT0gdmFsaWRhdGlvbkVycm9yLk5P
TkUpCi0gICAgICAgIHJldHVybiBlcnI7Ci0gICAgfQotICAgIHJldHVybiB2YWxpZGF0aW9uRXJy
b3IuTk9ORTsKLSAgfTsKLQotICBWYWxpZGF0b3IucHJvdG90eXBlLnZhbGlkYXRlSW50ZXJmYWNl
UmVxdWVzdEVsZW1lbnRzID0KLSAgICAgIGZ1bmN0aW9uKG9mZnNldCwgbnVtRWxlbWVudHMsIG51
bGxhYmxlKSB7Ci0gICAgdmFyIGVsZW1lbnRTaXplID0gaW50ZXJuYWwuSW50ZXJmYWNlUmVxdWVz
dC5lbmNvZGVkU2l6ZTsKLSAgICBmb3IgKHZhciBpID0gMDsgaSA8IG51bUVsZW1lbnRzOyBpKysp
IHsKLSAgICAgIHZhciBlbGVtZW50T2Zmc2V0ID0gb2Zmc2V0ICsgaSAqIGVsZW1lbnRTaXplOwot
ICAgICAgdmFyIGVyciA9IHRoaXMudmFsaWRhdGVJbnRlcmZhY2VSZXF1ZXN0KGVsZW1lbnRPZmZz
ZXQsIG51bGxhYmxlKTsKLSAgICAgIGlmIChlcnIgIT0gdmFsaWRhdGlvbkVycm9yLk5PTkUpCi0g
ICAgICAgIHJldHVybiBlcnI7Ci0gICAgfQotICAgIHJldHVybiB2YWxpZGF0aW9uRXJyb3IuTk9O
RTsKLSAgfTsKLQotICBWYWxpZGF0b3IucHJvdG90eXBlLnZhbGlkYXRlQXNzb2NpYXRlZEludGVy
ZmFjZUVsZW1lbnRzID0KLSAgICAgIGZ1bmN0aW9uKG9mZnNldCwgbnVtRWxlbWVudHMsIG51bGxh
YmxlKSB7Ci0gICAgdmFyIGVsZW1lbnRTaXplID0gaW50ZXJuYWwuQXNzb2NpYXRlZEludGVyZmFj
ZVB0ckluZm8ucHJvdG90eXBlLmVuY29kZWRTaXplOwotICAgIGZvciAodmFyIGkgPSAwOyBpIDwg
bnVtRWxlbWVudHM7IGkrKykgewotICAgICAgdmFyIGVsZW1lbnRPZmZzZXQgPSBvZmZzZXQgKyBp
ICogZWxlbWVudFNpemU7Ci0gICAgICB2YXIgZXJyID0gdGhpcy52YWxpZGF0ZUFzc29jaWF0ZWRJ
bnRlcmZhY2UoZWxlbWVudE9mZnNldCwgbnVsbGFibGUpOwotICAgICAgaWYgKGVyciAhPSB2YWxp
ZGF0aW9uRXJyb3IuTk9ORSkgewotICAgICAgICByZXR1cm4gZXJyOwotICAgICAgfQotICAgIH0K
LSAgICByZXR1cm4gdmFsaWRhdGlvbkVycm9yLk5PTkU7Ci0gIH07Ci0KLSAgVmFsaWRhdG9yLnBy
b3RvdHlwZS52YWxpZGF0ZUFzc29jaWF0ZWRJbnRlcmZhY2VSZXF1ZXN0RWxlbWVudHMgPQotICAg
ICAgZnVuY3Rpb24ob2Zmc2V0LCBudW1FbGVtZW50cywgbnVsbGFibGUpIHsKLSAgICB2YXIgZWxl
bWVudFNpemUgPSBpbnRlcm5hbC5Bc3NvY2lhdGVkSW50ZXJmYWNlUmVxdWVzdC5lbmNvZGVkU2l6
ZTsKLSAgICBmb3IgKHZhciBpID0gMDsgaSA8IG51bUVsZW1lbnRzOyBpKyspIHsKLSAgICAgIHZh
ciBlbGVtZW50T2Zmc2V0ID0gb2Zmc2V0ICsgaSAqIGVsZW1lbnRTaXplOwotICAgICAgdmFyIGVy
ciA9IHRoaXMudmFsaWRhdGVBc3NvY2lhdGVkSW50ZXJmYWNlUmVxdWVzdChlbGVtZW50T2Zmc2V0
LAotICAgICAgICAgIG51bGxhYmxlKTsKLSAgICAgIGlmIChlcnIgIT0gdmFsaWRhdGlvbkVycm9y
Lk5PTkUpIHsKLSAgICAgICAgcmV0dXJuIGVycjsKLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJu
IHZhbGlkYXRpb25FcnJvci5OT05FOwotICB9OwotCi0gIC8vIFRoZSBlbGVtZW50Q2xhc3MgcGFy
YW1ldGVyIGlzIHRoZSBlbGVtZW50IHR5cGUgb2YgdGhlIGVsZW1lbnQgYXJyYXlzLgotICBWYWxp
ZGF0b3IucHJvdG90eXBlLnZhbGlkYXRlQXJyYXlFbGVtZW50cyA9Ci0gICAgICBmdW5jdGlvbihv
ZmZzZXQsIG51bUVsZW1lbnRzLCBlbGVtZW50Q2xhc3MsIG51bGxhYmxlLAotICAgICAgICAgICAg
ICAgZXhwZWN0ZWREaW1lbnNpb25TaXplcywgY3VycmVudERpbWVuc2lvbikgewotICAgIHZhciBl
bGVtZW50U2l6ZSA9IGludGVybmFsLlBvaW50ZXJUby5wcm90b3R5cGUuZW5jb2RlZFNpemU7Ci0g
ICAgZm9yICh2YXIgaSA9IDA7IGkgPCBudW1FbGVtZW50czsgaSsrKSB7Ci0gICAgICB2YXIgZWxl
bWVudE9mZnNldCA9IG9mZnNldCArIGkgKiBlbGVtZW50U2l6ZTsKLSAgICAgIHZhciBlcnIgPSB0
aGlzLnZhbGlkYXRlQXJyYXlQb2ludGVyKAotICAgICAgICAgIGVsZW1lbnRPZmZzZXQsIGVsZW1l
bnRDbGFzcy5lbmNvZGVkU2l6ZSwgZWxlbWVudENsYXNzLCBudWxsYWJsZSwKLSAgICAgICAgICBl
eHBlY3RlZERpbWVuc2lvblNpemVzLCBjdXJyZW50RGltZW5zaW9uKTsKLSAgICAgIGlmIChlcnIg
IT0gdmFsaWRhdGlvbkVycm9yLk5PTkUpCi0gICAgICAgIHJldHVybiBlcnI7Ci0gICAgfQotICAg
IHJldHVybiB2YWxpZGF0aW9uRXJyb3IuTk9ORTsKLSAgfTsKLQotICBWYWxpZGF0b3IucHJvdG90
eXBlLnZhbGlkYXRlU3RydWN0RWxlbWVudHMgPQotICAgICAgZnVuY3Rpb24ob2Zmc2V0LCBudW1F
bGVtZW50cywgc3RydWN0Q2xhc3MsIG51bGxhYmxlKSB7Ci0gICAgdmFyIGVsZW1lbnRTaXplID0g
aW50ZXJuYWwuUG9pbnRlclRvLnByb3RvdHlwZS5lbmNvZGVkU2l6ZTsKLSAgICBmb3IgKHZhciBp
ID0gMDsgaSA8IG51bUVsZW1lbnRzOyBpKyspIHsKLSAgICAgIHZhciBlbGVtZW50T2Zmc2V0ID0g
b2Zmc2V0ICsgaSAqIGVsZW1lbnRTaXplOwotICAgICAgdmFyIGVyciA9Ci0gICAgICAgICAgdGhp
cy52YWxpZGF0ZVN0cnVjdFBvaW50ZXIoZWxlbWVudE9mZnNldCwgc3RydWN0Q2xhc3MsIG51bGxh
YmxlKTsKLSAgICAgIGlmIChlcnIgIT0gdmFsaWRhdGlvbkVycm9yLk5PTkUpCi0gICAgICAgIHJl
dHVybiBlcnI7Ci0gICAgfQotICAgIHJldHVybiB2YWxpZGF0aW9uRXJyb3IuTk9ORTsKLSAgfTsK
LQotICBWYWxpZGF0b3IucHJvdG90eXBlLnZhbGlkYXRlRW51bUVsZW1lbnRzID0KLSAgICAgIGZ1
bmN0aW9uKG9mZnNldCwgbnVtRWxlbWVudHMsIGVudW1DbGFzcykgewotICAgIHZhciBlbGVtZW50
U2l6ZSA9IGludGVybmFsLkVudW0ucHJvdG90eXBlLmVuY29kZWRTaXplOwotICAgIGZvciAodmFy
IGkgPSAwOyBpIDwgbnVtRWxlbWVudHM7IGkrKykgewotICAgICAgdmFyIGVsZW1lbnRPZmZzZXQg
PSBvZmZzZXQgKyBpICogZWxlbWVudFNpemU7Ci0gICAgICB2YXIgZXJyID0gdGhpcy52YWxpZGF0
ZUVudW0oZWxlbWVudE9mZnNldCwgZW51bUNsYXNzKTsKLSAgICAgIGlmIChlcnIgIT0gdmFsaWRh
dGlvbkVycm9yLk5PTkUpCi0gICAgICAgIHJldHVybiBlcnI7Ci0gICAgfQotICAgIHJldHVybiB2
YWxpZGF0aW9uRXJyb3IuTk9ORTsKLSAgfTsKLQotICBpbnRlcm5hbC52YWxpZGF0aW9uRXJyb3Ig
PSB2YWxpZGF0aW9uRXJyb3I7Ci0gIGludGVybmFsLlZhbGlkYXRvciA9IFZhbGlkYXRvcjsKLSAg
aW50ZXJuYWwuVmFsaWRhdGlvbkVycm9yT2JzZXJ2ZXJGb3JUZXN0aW5nID0KLSAgICAgIFZhbGlk
YXRpb25FcnJvck9ic2VydmVyRm9yVGVzdGluZzsKLSAgaW50ZXJuYWwucmVwb3J0VmFsaWRhdGlv
bkVycm9yID0gcmVwb3J0VmFsaWRhdGlvbkVycm9yOwotICBpbnRlcm5hbC5pc1Rlc3RpbmdNb2Rl
ID0gaXNUZXN0aW5nTW9kZTsKLSAgaW50ZXJuYWwuY2xlYXJUZXN0aW5nTW9kZSA9IGNsZWFyVGVz
dGluZ01vZGU7Ci19KSgpOwotLy8gQ29weXJpZ2h0IDIwMTQgVGhlIENocm9taXVtIEF1dGhvcnMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zl
cm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUg
TElDRU5TRSBmaWxlLgotCi0ndXNlIHN0cmljdCc7Ci0KLShmdW5jdGlvbigpIHsKLSAgdmFyIG1v
am9tSWQgPSAnbW9qby9wdWJsaWMvaW50ZXJmYWNlcy9iaW5kaW5ncy9pbnRlcmZhY2VfY29udHJv
bF9tZXNzYWdlcy5tb2pvbSc7Ci0gIGlmIChtb2pvLmludGVybmFsLmlzTW9qb21Mb2FkZWQobW9q
b21JZCkpIHsKLSAgICBjb25zb2xlLndhcm4oJ1RoZSBmb2xsb3dpbmcgbW9qb20gaXMgbG9hZGVk
IG11bHRpcGxlIHRpbWVzOiAnICsgbW9qb21JZCk7Ci0gICAgcmV0dXJuOwotICB9Ci0gIG1vam8u
aW50ZXJuYWwubWFya01vam9tTG9hZGVkKG1vam9tSWQpOwotICB2YXIgYmluZGluZ3MgPSBtb2pv
OwotICB2YXIgYXNzb2NpYXRlZEJpbmRpbmdzID0gbW9qbzsKLSAgdmFyIGNvZGVjID0gbW9qby5p
bnRlcm5hbDsKLSAgdmFyIHZhbGlkYXRvciA9IG1vam8uaW50ZXJuYWw7Ci0KLSAgdmFyIGV4cG9y
dHMgPSBtb2pvLmludGVybmFsLmV4cG9zZU5hbWVzcGFjZSgnbW9qby5pbnRlcmZhY2VDb250cm9s
Jyk7Ci0KLQotICB2YXIga1J1bk1lc3NhZ2VJZCA9IDB4RkZGRkZGRkY7Ci0gIHZhciBrUnVuT3JD
bG9zZVBpcGVNZXNzYWdlSWQgPSAweEZGRkZGRkZFOwotCi0gIGZ1bmN0aW9uIFJ1bk1lc3NhZ2VQ
YXJhbXModmFsdWVzKSB7Ci0gICAgdGhpcy5pbml0RGVmYXVsdHNfKCk7Ci0gICAgdGhpcy5pbml0
RmllbGRzXyh2YWx1ZXMpOwotICB9Ci0KLQotICBSdW5NZXNzYWdlUGFyYW1zLnByb3RvdHlwZS5p
bml0RGVmYXVsdHNfID0gZnVuY3Rpb24oKSB7Ci0gICAgdGhpcy5pbnB1dCA9IG51bGw7Ci0gIH07
Ci0gIFJ1bk1lc3NhZ2VQYXJhbXMucHJvdG90eXBlLmluaXRGaWVsZHNfID0gZnVuY3Rpb24oZmll
bGRzKSB7Ci0gICAgZm9yKHZhciBmaWVsZCBpbiBmaWVsZHMpIHsKLSAgICAgICAgaWYgKHRoaXMu
aGFzT3duUHJvcGVydHkoZmllbGQpKQotICAgICAgICAgIHRoaXNbZmllbGRdID0gZmllbGRzW2Zp
ZWxkXTsKLSAgICB9Ci0gIH07Ci0KLSAgUnVuTWVzc2FnZVBhcmFtcy52YWxpZGF0ZSA9IGZ1bmN0
aW9uKG1lc3NhZ2VWYWxpZGF0b3IsIG9mZnNldCkgewotICAgIHZhciBlcnI7Ci0gICAgZXJyID0g
bWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdEhlYWRlcihvZmZzZXQsIGNvZGVjLmtTdHJ1
Y3RIZWFkZXJTaXplKTsKLSAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9y
Lk5PTkUpCi0gICAgICAgIHJldHVybiBlcnI7Ci0KLSAgICB2YXIga1ZlcnNpb25TaXplcyA9IFsK
LSAgICAgIHt2ZXJzaW9uOiAwLCBudW1CeXRlczogMjR9Ci0gICAgXTsKLSAgICBlcnIgPSBtZXNz
YWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0VmVyc2lvbihvZmZzZXQsIGtWZXJzaW9uU2l6ZXMp
OwotICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKLSAgICAg
ICAgcmV0dXJuIGVycjsKLQotCi0gICAgLy8gdmFsaWRhdGUgUnVuTWVzc2FnZVBhcmFtcy5pbnB1
dAotICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVVbmlvbihvZmZzZXQgKyBjb2Rl
Yy5rU3RydWN0SGVhZGVyU2l6ZSArIDAsIFJ1bklucHV0LCBmYWxzZSk7Ci0gICAgaWYgKGVyciAh
PT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQotICAgICAgICByZXR1cm4gZXJyOwot
Ci0gICAgcmV0dXJuIHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORTsKLSAgfTsKLQotICBS
dW5NZXNzYWdlUGFyYW1zLmVuY29kZWRTaXplID0gY29kZWMua1N0cnVjdEhlYWRlclNpemUgKyAx
NjsKLQotICBSdW5NZXNzYWdlUGFyYW1zLmRlY29kZSA9IGZ1bmN0aW9uKGRlY29kZXIpIHsKLSAg
ICB2YXIgcGFja2VkOwotICAgIHZhciB2YWwgPSBuZXcgUnVuTWVzc2FnZVBhcmFtcygpOwotICAg
IHZhciBudW1iZXJPZkJ5dGVzID0gZGVjb2Rlci5yZWFkVWludDMyKCk7Ci0gICAgdmFyIHZlcnNp
b24gPSBkZWNvZGVyLnJlYWRVaW50MzIoKTsKLSAgICB2YWwuaW5wdXQgPSBkZWNvZGVyLmRlY29k
ZVN0cnVjdChSdW5JbnB1dCk7Ci0gICAgcmV0dXJuIHZhbDsKLSAgfTsKLQotICBSdW5NZXNzYWdl
UGFyYW1zLmVuY29kZSA9IGZ1bmN0aW9uKGVuY29kZXIsIHZhbCkgewotICAgIHZhciBwYWNrZWQ7
Ci0gICAgZW5jb2Rlci53cml0ZVVpbnQzMihSdW5NZXNzYWdlUGFyYW1zLmVuY29kZWRTaXplKTsK
LSAgICBlbmNvZGVyLndyaXRlVWludDMyKDApOwotICAgIGVuY29kZXIuZW5jb2RlU3RydWN0KFJ1
bklucHV0LCB2YWwuaW5wdXQpOwotICB9OwotICBmdW5jdGlvbiBSdW5SZXNwb25zZU1lc3NhZ2VQ
YXJhbXModmFsdWVzKSB7Ci0gICAgdGhpcy5pbml0RGVmYXVsdHNfKCk7Ci0gICAgdGhpcy5pbml0
RmllbGRzXyh2YWx1ZXMpOwotICB9Ci0KLQotICBSdW5SZXNwb25zZU1lc3NhZ2VQYXJhbXMucHJv
dG90eXBlLmluaXREZWZhdWx0c18gPSBmdW5jdGlvbigpIHsKLSAgICB0aGlzLm91dHB1dCA9IG51
bGw7Ci0gIH07Ci0gIFJ1blJlc3BvbnNlTWVzc2FnZVBhcmFtcy5wcm90b3R5cGUuaW5pdEZpZWxk
c18gPSBmdW5jdGlvbihmaWVsZHMpIHsKLSAgICBmb3IodmFyIGZpZWxkIGluIGZpZWxkcykgewot
ICAgICAgICBpZiAodGhpcy5oYXNPd25Qcm9wZXJ0eShmaWVsZCkpCi0gICAgICAgICAgdGhpc1tm
aWVsZF0gPSBmaWVsZHNbZmllbGRdOwotICAgIH0KLSAgfTsKLQotICBSdW5SZXNwb25zZU1lc3Nh
Z2VQYXJhbXMudmFsaWRhdGUgPSBmdW5jdGlvbihtZXNzYWdlVmFsaWRhdG9yLCBvZmZzZXQpIHsK
LSAgICB2YXIgZXJyOwotICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RI
ZWFkZXIob2Zmc2V0LCBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSk7Ci0gICAgaWYgKGVyciAhPT0g
dmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQotICAgICAgICByZXR1cm4gZXJyOwotCi0g
ICAgdmFyIGtWZXJzaW9uU2l6ZXMgPSBbCi0gICAgICB7dmVyc2lvbjogMCwgbnVtQnl0ZXM6IDI0
fQotICAgIF07Ci0gICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdFZlcnNp
b24ob2Zmc2V0LCBrVmVyc2lvblNpemVzKTsKLSAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFs
aWRhdGlvbkVycm9yLk5PTkUpCi0gICAgICAgIHJldHVybiBlcnI7Ci0KLQotICAgIC8vIHZhbGlk
YXRlIFJ1blJlc3BvbnNlTWVzc2FnZVBhcmFtcy5vdXRwdXQKLSAgICBlcnIgPSBtZXNzYWdlVmFs
aWRhdG9yLnZhbGlkYXRlVW5pb24ob2Zmc2V0ICsgY29kZWMua1N0cnVjdEhlYWRlclNpemUgKyAw
LCBSdW5PdXRwdXQsIHRydWUpOwotICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9u
RXJyb3IuTk9ORSkKLSAgICAgICAgcmV0dXJuIGVycjsKLQotICAgIHJldHVybiB2YWxpZGF0b3Iu
dmFsaWRhdGlvbkVycm9yLk5PTkU7Ci0gIH07Ci0KLSAgUnVuUmVzcG9uc2VNZXNzYWdlUGFyYW1z
LmVuY29kZWRTaXplID0gY29kZWMua1N0cnVjdEhlYWRlclNpemUgKyAxNjsKLQotICBSdW5SZXNw
b25zZU1lc3NhZ2VQYXJhbXMuZGVjb2RlID0gZnVuY3Rpb24oZGVjb2RlcikgewotICAgIHZhciBw
YWNrZWQ7Ci0gICAgdmFyIHZhbCA9IG5ldyBSdW5SZXNwb25zZU1lc3NhZ2VQYXJhbXMoKTsKLSAg
ICB2YXIgbnVtYmVyT2ZCeXRlcyA9IGRlY29kZXIucmVhZFVpbnQzMigpOwotICAgIHZhciB2ZXJz
aW9uID0gZGVjb2Rlci5yZWFkVWludDMyKCk7Ci0gICAgdmFsLm91dHB1dCA9IGRlY29kZXIuZGVj
b2RlU3RydWN0KFJ1bk91dHB1dCk7Ci0gICAgcmV0dXJuIHZhbDsKLSAgfTsKLQotICBSdW5SZXNw
b25zZU1lc3NhZ2VQYXJhbXMuZW5jb2RlID0gZnVuY3Rpb24oZW5jb2RlciwgdmFsKSB7Ci0gICAg
dmFyIHBhY2tlZDsKLSAgICBlbmNvZGVyLndyaXRlVWludDMyKFJ1blJlc3BvbnNlTWVzc2FnZVBh
cmFtcy5lbmNvZGVkU2l6ZSk7Ci0gICAgZW5jb2Rlci53cml0ZVVpbnQzMigwKTsKLSAgICBlbmNv
ZGVyLmVuY29kZVN0cnVjdChSdW5PdXRwdXQsIHZhbC5vdXRwdXQpOwotICB9OwotICBmdW5jdGlv
biBRdWVyeVZlcnNpb24odmFsdWVzKSB7Ci0gICAgdGhpcy5pbml0RGVmYXVsdHNfKCk7Ci0gICAg
dGhpcy5pbml0RmllbGRzXyh2YWx1ZXMpOwotICB9Ci0KLQotICBRdWVyeVZlcnNpb24ucHJvdG90
eXBlLmluaXREZWZhdWx0c18gPSBmdW5jdGlvbigpIHsKLSAgfTsKLSAgUXVlcnlWZXJzaW9uLnBy
b3RvdHlwZS5pbml0RmllbGRzXyA9IGZ1bmN0aW9uKGZpZWxkcykgewotICAgIGZvcih2YXIgZmll
bGQgaW4gZmllbGRzKSB7Ci0gICAgICAgIGlmICh0aGlzLmhhc093blByb3BlcnR5KGZpZWxkKSkK
LSAgICAgICAgICB0aGlzW2ZpZWxkXSA9IGZpZWxkc1tmaWVsZF07Ci0gICAgfQotICB9OwotCi0g
IFF1ZXJ5VmVyc2lvbi52YWxpZGF0ZSA9IGZ1bmN0aW9uKG1lc3NhZ2VWYWxpZGF0b3IsIG9mZnNl
dCkgewotICAgIHZhciBlcnI7Ci0gICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0
cnVjdEhlYWRlcihvZmZzZXQsIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplKTsKLSAgICBpZiAoZXJy
ICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCi0gICAgICAgIHJldHVybiBlcnI7
Ci0KLSAgICB2YXIga1ZlcnNpb25TaXplcyA9IFsKLSAgICAgIHt2ZXJzaW9uOiAwLCBudW1CeXRl
czogOH0KLSAgICBdOwotICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RW
ZXJzaW9uKG9mZnNldCwga1ZlcnNpb25TaXplcyk7Ci0gICAgaWYgKGVyciAhPT0gdmFsaWRhdG9y
LnZhbGlkYXRpb25FcnJvci5OT05FKQotICAgICAgICByZXR1cm4gZXJyOwotCi0gICAgcmV0dXJu
IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORTsKLSAgfTsKLQotICBRdWVyeVZlcnNpb24u
ZW5jb2RlZFNpemUgPSBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDA7Ci0KLSAgUXVlcnlWZXJz
aW9uLmRlY29kZSA9IGZ1bmN0aW9uKGRlY29kZXIpIHsKLSAgICB2YXIgcGFja2VkOwotICAgIHZh
ciB2YWwgPSBuZXcgUXVlcnlWZXJzaW9uKCk7Ci0gICAgdmFyIG51bWJlck9mQnl0ZXMgPSBkZWNv
ZGVyLnJlYWRVaW50MzIoKTsKLSAgICB2YXIgdmVyc2lvbiA9IGRlY29kZXIucmVhZFVpbnQzMigp
OwotICAgIHJldHVybiB2YWw7Ci0gIH07Ci0KLSAgUXVlcnlWZXJzaW9uLmVuY29kZSA9IGZ1bmN0
aW9uKGVuY29kZXIsIHZhbCkgewotICAgIHZhciBwYWNrZWQ7Ci0gICAgZW5jb2Rlci53cml0ZVVp
bnQzMihRdWVyeVZlcnNpb24uZW5jb2RlZFNpemUpOwotICAgIGVuY29kZXIud3JpdGVVaW50MzIo
MCk7Ci0gIH07Ci0gIGZ1bmN0aW9uIFF1ZXJ5VmVyc2lvblJlc3VsdCh2YWx1ZXMpIHsKLSAgICB0
aGlzLmluaXREZWZhdWx0c18oKTsKLSAgICB0aGlzLmluaXRGaWVsZHNfKHZhbHVlcyk7Ci0gIH0K
LQotCi0gIFF1ZXJ5VmVyc2lvblJlc3VsdC5wcm90b3R5cGUuaW5pdERlZmF1bHRzXyA9IGZ1bmN0
aW9uKCkgewotICAgIHRoaXMudmVyc2lvbiA9IDA7Ci0gIH07Ci0gIFF1ZXJ5VmVyc2lvblJlc3Vs
dC5wcm90b3R5cGUuaW5pdEZpZWxkc18gPSBmdW5jdGlvbihmaWVsZHMpIHsKLSAgICBmb3IodmFy
IGZpZWxkIGluIGZpZWxkcykgewotICAgICAgICBpZiAodGhpcy5oYXNPd25Qcm9wZXJ0eShmaWVs
ZCkpCi0gICAgICAgICAgdGhpc1tmaWVsZF0gPSBmaWVsZHNbZmllbGRdOwotICAgIH0KLSAgfTsK
LQotICBRdWVyeVZlcnNpb25SZXN1bHQudmFsaWRhdGUgPSBmdW5jdGlvbihtZXNzYWdlVmFsaWRh
dG9yLCBvZmZzZXQpIHsKLSAgICB2YXIgZXJyOwotICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3Iu
dmFsaWRhdGVTdHJ1Y3RIZWFkZXIob2Zmc2V0LCBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSk7Ci0g
ICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQotICAgICAgICBy
ZXR1cm4gZXJyOwotCi0gICAgdmFyIGtWZXJzaW9uU2l6ZXMgPSBbCi0gICAgICB7dmVyc2lvbjog
MCwgbnVtQnl0ZXM6IDE2fQotICAgIF07Ci0gICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxp
ZGF0ZVN0cnVjdFZlcnNpb24ob2Zmc2V0LCBrVmVyc2lvblNpemVzKTsKLSAgICBpZiAoZXJyICE9
PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCi0gICAgICAgIHJldHVybiBlcnI7Ci0K
LQotICAgIHJldHVybiB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkU7Ci0gIH07Ci0KLSAg
UXVlcnlWZXJzaW9uUmVzdWx0LmVuY29kZWRTaXplID0gY29kZWMua1N0cnVjdEhlYWRlclNpemUg
KyA4OwotCi0gIFF1ZXJ5VmVyc2lvblJlc3VsdC5kZWNvZGUgPSBmdW5jdGlvbihkZWNvZGVyKSB7
Ci0gICAgdmFyIHBhY2tlZDsKLSAgICB2YXIgdmFsID0gbmV3IFF1ZXJ5VmVyc2lvblJlc3VsdCgp
OwotICAgIHZhciBudW1iZXJPZkJ5dGVzID0gZGVjb2Rlci5yZWFkVWludDMyKCk7Ci0gICAgdmFy
IHZlcnNpb24gPSBkZWNvZGVyLnJlYWRVaW50MzIoKTsKLSAgICB2YWwudmVyc2lvbiA9IGRlY29k
ZXIuZGVjb2RlU3RydWN0KGNvZGVjLlVpbnQzMik7Ci0gICAgZGVjb2Rlci5za2lwKDEpOwotICAg
IGRlY29kZXIuc2tpcCgxKTsKLSAgICBkZWNvZGVyLnNraXAoMSk7Ci0gICAgZGVjb2Rlci5za2lw
KDEpOwotICAgIHJldHVybiB2YWw7Ci0gIH07Ci0KLSAgUXVlcnlWZXJzaW9uUmVzdWx0LmVuY29k
ZSA9IGZ1bmN0aW9uKGVuY29kZXIsIHZhbCkgewotICAgIHZhciBwYWNrZWQ7Ci0gICAgZW5jb2Rl
ci53cml0ZVVpbnQzMihRdWVyeVZlcnNpb25SZXN1bHQuZW5jb2RlZFNpemUpOwotICAgIGVuY29k
ZXIud3JpdGVVaW50MzIoMCk7Ci0gICAgZW5jb2Rlci5lbmNvZGVTdHJ1Y3QoY29kZWMuVWludDMy
LCB2YWwudmVyc2lvbik7Ci0gICAgZW5jb2Rlci5za2lwKDEpOwotICAgIGVuY29kZXIuc2tpcCgx
KTsKLSAgICBlbmNvZGVyLnNraXAoMSk7Ci0gICAgZW5jb2Rlci5za2lwKDEpOwotICB9OwotICBm
dW5jdGlvbiBGbHVzaEZvclRlc3RpbmcodmFsdWVzKSB7Ci0gICAgdGhpcy5pbml0RGVmYXVsdHNf
KCk7Ci0gICAgdGhpcy5pbml0RmllbGRzXyh2YWx1ZXMpOwotICB9Ci0KLQotICBGbHVzaEZvclRl
c3RpbmcucHJvdG90eXBlLmluaXREZWZhdWx0c18gPSBmdW5jdGlvbigpIHsKLSAgfTsKLSAgRmx1
c2hGb3JUZXN0aW5nLnByb3RvdHlwZS5pbml0RmllbGRzXyA9IGZ1bmN0aW9uKGZpZWxkcykgewot
ICAgIGZvcih2YXIgZmllbGQgaW4gZmllbGRzKSB7Ci0gICAgICAgIGlmICh0aGlzLmhhc093blBy
b3BlcnR5KGZpZWxkKSkKLSAgICAgICAgICB0aGlzW2ZpZWxkXSA9IGZpZWxkc1tmaWVsZF07Ci0g
ICAgfQotICB9OwotCi0gIEZsdXNoRm9yVGVzdGluZy52YWxpZGF0ZSA9IGZ1bmN0aW9uKG1lc3Nh
Z2VWYWxpZGF0b3IsIG9mZnNldCkgewotICAgIHZhciBlcnI7Ci0gICAgZXJyID0gbWVzc2FnZVZh
bGlkYXRvci52YWxpZGF0ZVN0cnVjdEhlYWRlcihvZmZzZXQsIGNvZGVjLmtTdHJ1Y3RIZWFkZXJT
aXplKTsKLSAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCi0g
ICAgICAgIHJldHVybiBlcnI7Ci0KLSAgICB2YXIga1ZlcnNpb25TaXplcyA9IFsKLSAgICAgIHt2
ZXJzaW9uOiAwLCBudW1CeXRlczogOH0KLSAgICBdOwotICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0
b3IudmFsaWRhdGVTdHJ1Y3RWZXJzaW9uKG9mZnNldCwga1ZlcnNpb25TaXplcyk7Ci0gICAgaWYg
KGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQotICAgICAgICByZXR1cm4g
ZXJyOwotCi0gICAgcmV0dXJuIHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORTsKLSAgfTsK
LQotICBGbHVzaEZvclRlc3RpbmcuZW5jb2RlZFNpemUgPSBjb2RlYy5rU3RydWN0SGVhZGVyU2l6
ZSArIDA7Ci0KLSAgRmx1c2hGb3JUZXN0aW5nLmRlY29kZSA9IGZ1bmN0aW9uKGRlY29kZXIpIHsK
LSAgICB2YXIgcGFja2VkOwotICAgIHZhciB2YWwgPSBuZXcgRmx1c2hGb3JUZXN0aW5nKCk7Ci0g
ICAgdmFyIG51bWJlck9mQnl0ZXMgPSBkZWNvZGVyLnJlYWRVaW50MzIoKTsKLSAgICB2YXIgdmVy
c2lvbiA9IGRlY29kZXIucmVhZFVpbnQzMigpOwotICAgIHJldHVybiB2YWw7Ci0gIH07Ci0KLSAg
Rmx1c2hGb3JUZXN0aW5nLmVuY29kZSA9IGZ1bmN0aW9uKGVuY29kZXIsIHZhbCkgewotICAgIHZh
ciBwYWNrZWQ7Ci0gICAgZW5jb2Rlci53cml0ZVVpbnQzMihGbHVzaEZvclRlc3RpbmcuZW5jb2Rl
ZFNpemUpOwotICAgIGVuY29kZXIud3JpdGVVaW50MzIoMCk7Ci0gIH07Ci0gIGZ1bmN0aW9uIFJ1
bk9yQ2xvc2VQaXBlTWVzc2FnZVBhcmFtcyh2YWx1ZXMpIHsKLSAgICB0aGlzLmluaXREZWZhdWx0
c18oKTsKLSAgICB0aGlzLmluaXRGaWVsZHNfKHZhbHVlcyk7Ci0gIH0KLQotCi0gIFJ1bk9yQ2xv
c2VQaXBlTWVzc2FnZVBhcmFtcy5wcm90b3R5cGUuaW5pdERlZmF1bHRzXyA9IGZ1bmN0aW9uKCkg
ewotICAgIHRoaXMuaW5wdXQgPSBudWxsOwotICB9OwotICBSdW5PckNsb3NlUGlwZU1lc3NhZ2VQ
YXJhbXMucHJvdG90eXBlLmluaXRGaWVsZHNfID0gZnVuY3Rpb24oZmllbGRzKSB7Ci0gICAgZm9y
KHZhciBmaWVsZCBpbiBmaWVsZHMpIHsKLSAgICAgICAgaWYgKHRoaXMuaGFzT3duUHJvcGVydHko
ZmllbGQpKQotICAgICAgICAgIHRoaXNbZmllbGRdID0gZmllbGRzW2ZpZWxkXTsKLSAgICB9Ci0g
IH07Ci0KLSAgUnVuT3JDbG9zZVBpcGVNZXNzYWdlUGFyYW1zLnZhbGlkYXRlID0gZnVuY3Rpb24o
bWVzc2FnZVZhbGlkYXRvciwgb2Zmc2V0KSB7Ci0gICAgdmFyIGVycjsKLSAgICBlcnIgPSBtZXNz
YWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0SGVhZGVyKG9mZnNldCwgY29kZWMua1N0cnVjdEhl
YWRlclNpemUpOwotICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9O
RSkKLSAgICAgICAgcmV0dXJuIGVycjsKLQotICAgIHZhciBrVmVyc2lvblNpemVzID0gWwotICAg
ICAge3ZlcnNpb246IDAsIG51bUJ5dGVzOiAyNH0KLSAgICBdOwotICAgIGVyciA9IG1lc3NhZ2VW
YWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RWZXJzaW9uKG9mZnNldCwga1ZlcnNpb25TaXplcyk7Ci0g
ICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQotICAgICAgICBy
ZXR1cm4gZXJyOwotCi0KLSAgICAvLyB2YWxpZGF0ZSBSdW5PckNsb3NlUGlwZU1lc3NhZ2VQYXJh
bXMuaW5wdXQKLSAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlVW5pb24ob2Zmc2V0
ICsgY29kZWMua1N0cnVjdEhlYWRlclNpemUgKyAwLCBSdW5PckNsb3NlUGlwZUlucHV0LCBmYWxz
ZSk7Ci0gICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQotICAg
ICAgICByZXR1cm4gZXJyOwotCi0gICAgcmV0dXJuIHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3Iu
Tk9ORTsKLSAgfTsKLQotICBSdW5PckNsb3NlUGlwZU1lc3NhZ2VQYXJhbXMuZW5jb2RlZFNpemUg
PSBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDE2OwotCi0gIFJ1bk9yQ2xvc2VQaXBlTWVzc2Fn
ZVBhcmFtcy5kZWNvZGUgPSBmdW5jdGlvbihkZWNvZGVyKSB7Ci0gICAgdmFyIHBhY2tlZDsKLSAg
ICB2YXIgdmFsID0gbmV3IFJ1bk9yQ2xvc2VQaXBlTWVzc2FnZVBhcmFtcygpOwotICAgIHZhciBu
dW1iZXJPZkJ5dGVzID0gZGVjb2Rlci5yZWFkVWludDMyKCk7Ci0gICAgdmFyIHZlcnNpb24gPSBk
ZWNvZGVyLnJlYWRVaW50MzIoKTsKLSAgICB2YWwuaW5wdXQgPSBkZWNvZGVyLmRlY29kZVN0cnVj
dChSdW5PckNsb3NlUGlwZUlucHV0KTsKLSAgICByZXR1cm4gdmFsOwotICB9OwotCi0gIFJ1bk9y
Q2xvc2VQaXBlTWVzc2FnZVBhcmFtcy5lbmNvZGUgPSBmdW5jdGlvbihlbmNvZGVyLCB2YWwpIHsK
LSAgICB2YXIgcGFja2VkOwotICAgIGVuY29kZXIud3JpdGVVaW50MzIoUnVuT3JDbG9zZVBpcGVN
ZXNzYWdlUGFyYW1zLmVuY29kZWRTaXplKTsKLSAgICBlbmNvZGVyLndyaXRlVWludDMyKDApOwot
ICAgIGVuY29kZXIuZW5jb2RlU3RydWN0KFJ1bk9yQ2xvc2VQaXBlSW5wdXQsIHZhbC5pbnB1dCk7
Ci0gIH07Ci0gIGZ1bmN0aW9uIFJlcXVpcmVWZXJzaW9uKHZhbHVlcykgewotICAgIHRoaXMuaW5p
dERlZmF1bHRzXygpOwotICAgIHRoaXMuaW5pdEZpZWxkc18odmFsdWVzKTsKLSAgfQotCi0KLSAg
UmVxdWlyZVZlcnNpb24ucHJvdG90eXBlLmluaXREZWZhdWx0c18gPSBmdW5jdGlvbigpIHsKLSAg
ICB0aGlzLnZlcnNpb24gPSAwOwotICB9OwotICBSZXF1aXJlVmVyc2lvbi5wcm90b3R5cGUuaW5p
dEZpZWxkc18gPSBmdW5jdGlvbihmaWVsZHMpIHsKLSAgICBmb3IodmFyIGZpZWxkIGluIGZpZWxk
cykgewotICAgICAgICBpZiAodGhpcy5oYXNPd25Qcm9wZXJ0eShmaWVsZCkpCi0gICAgICAgICAg
dGhpc1tmaWVsZF0gPSBmaWVsZHNbZmllbGRdOwotICAgIH0KLSAgfTsKLQotICBSZXF1aXJlVmVy
c2lvbi52YWxpZGF0ZSA9IGZ1bmN0aW9uKG1lc3NhZ2VWYWxpZGF0b3IsIG9mZnNldCkgewotICAg
IHZhciBlcnI7Ci0gICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdEhlYWRl
cihvZmZzZXQsIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplKTsKLSAgICBpZiAoZXJyICE9PSB2YWxp
ZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCi0gICAgICAgIHJldHVybiBlcnI7Ci0KLSAgICB2
YXIga1ZlcnNpb25TaXplcyA9IFsKLSAgICAgIHt2ZXJzaW9uOiAwLCBudW1CeXRlczogMTZ9Ci0g
ICAgXTsKLSAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0VmVyc2lvbihv
ZmZzZXQsIGtWZXJzaW9uU2l6ZXMpOwotICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0
aW9uRXJyb3IuTk9ORSkKLSAgICAgICAgcmV0dXJuIGVycjsKLQotCi0gICAgcmV0dXJuIHZhbGlk
YXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORTsKLSAgfTsKLQotICBSZXF1aXJlVmVyc2lvbi5lbmNv
ZGVkU2l6ZSA9IGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgODsKLQotICBSZXF1aXJlVmVyc2lv
bi5kZWNvZGUgPSBmdW5jdGlvbihkZWNvZGVyKSB7Ci0gICAgdmFyIHBhY2tlZDsKLSAgICB2YXIg
dmFsID0gbmV3IFJlcXVpcmVWZXJzaW9uKCk7Ci0gICAgdmFyIG51bWJlck9mQnl0ZXMgPSBkZWNv
ZGVyLnJlYWRVaW50MzIoKTsKLSAgICB2YXIgdmVyc2lvbiA9IGRlY29kZXIucmVhZFVpbnQzMigp
OwotICAgIHZhbC52ZXJzaW9uID0gZGVjb2Rlci5kZWNvZGVTdHJ1Y3QoY29kZWMuVWludDMyKTsK
LSAgICBkZWNvZGVyLnNraXAoMSk7Ci0gICAgZGVjb2Rlci5za2lwKDEpOwotICAgIGRlY29kZXIu
c2tpcCgxKTsKLSAgICBkZWNvZGVyLnNraXAoMSk7Ci0gICAgcmV0dXJuIHZhbDsKLSAgfTsKLQot
ICBSZXF1aXJlVmVyc2lvbi5lbmNvZGUgPSBmdW5jdGlvbihlbmNvZGVyLCB2YWwpIHsKLSAgICB2
YXIgcGFja2VkOwotICAgIGVuY29kZXIud3JpdGVVaW50MzIoUmVxdWlyZVZlcnNpb24uZW5jb2Rl
ZFNpemUpOwotICAgIGVuY29kZXIud3JpdGVVaW50MzIoMCk7Ci0gICAgZW5jb2Rlci5lbmNvZGVT
dHJ1Y3QoY29kZWMuVWludDMyLCB2YWwudmVyc2lvbik7Ci0gICAgZW5jb2Rlci5za2lwKDEpOwot
ICAgIGVuY29kZXIuc2tpcCgxKTsKLSAgICBlbmNvZGVyLnNraXAoMSk7Ci0gICAgZW5jb2Rlci5z
a2lwKDEpOwotICB9OwotCi0gIGZ1bmN0aW9uIFJ1bklucHV0KHZhbHVlKSB7Ci0gICAgdGhpcy5p
bml0RGVmYXVsdF8oKTsKLSAgICB0aGlzLmluaXRWYWx1ZV8odmFsdWUpOwotICB9Ci0KLQotICBS
dW5JbnB1dC5UYWdzID0gewotICAgIHF1ZXJ5VmVyc2lvbjogMCwKLSAgICBmbHVzaEZvclRlc3Rp
bmc6IDEsCi0gIH07Ci0KLSAgUnVuSW5wdXQucHJvdG90eXBlLmluaXREZWZhdWx0XyA9IGZ1bmN0
aW9uKCkgewotICAgIHRoaXMuJGRhdGEgPSBudWxsOwotICAgIHRoaXMuJHRhZyA9IHVuZGVmaW5l
ZDsKLSAgfQotCi0gIFJ1bklucHV0LnByb3RvdHlwZS5pbml0VmFsdWVfID0gZnVuY3Rpb24odmFs
dWUpIHsKLSAgICBpZiAodmFsdWUgPT0gdW5kZWZpbmVkKSB7Ci0gICAgICByZXR1cm47Ci0gICAg
fQotCi0gICAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyh2YWx1ZSk7Ci0gICAgaWYgKGtleXMubGVu
Z3RoID09IDApIHsKLSAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAoa2V5cy5sZW5ndGgg
PiAxKSB7Ci0gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCJZb3UgbWF5IHNldCBvbmx5IG9uZSBt
ZW1iZXIgb24gYSB1bmlvbi4iKTsKLSAgICB9Ci0KLSAgICB2YXIgZmllbGRzID0gWwotICAgICAg
ICAicXVlcnlWZXJzaW9uIiwKLSAgICAgICAgImZsdXNoRm9yVGVzdGluZyIsCi0gICAgXTsKLQot
ICAgIGlmIChmaWVsZHMuaW5kZXhPZihrZXlzWzBdKSA8IDApIHsKLSAgICAgIHRocm93IG5ldyBS
ZWZlcmVuY2VFcnJvcihrZXlzWzBdICsgIiBpcyBub3QgYSBSdW5JbnB1dCBtZW1iZXIuIik7Ci0K
LSAgICB9Ci0KLSAgICB0aGlzW2tleXNbMF1dID0gdmFsdWVba2V5c1swXV07Ci0gIH0KLSAgT2Jq
ZWN0LmRlZmluZVByb3BlcnR5KFJ1bklucHV0LnByb3RvdHlwZSwgInF1ZXJ5VmVyc2lvbiIsIHsK
LSAgICBnZXQ6IGZ1bmN0aW9uKCkgewotICAgICAgaWYgKHRoaXMuJHRhZyAhPSBSdW5JbnB1dC5U
YWdzLnF1ZXJ5VmVyc2lvbikgewotICAgICAgICB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoCi0g
ICAgICAgICAgICAiUnVuSW5wdXQucXVlcnlWZXJzaW9uIGlzIG5vdCBjdXJyZW50bHkgc2V0LiIp
OwotICAgICAgfQotICAgICAgcmV0dXJuIHRoaXMuJGRhdGE7Ci0gICAgfSwKLQotICAgIHNldDog
ZnVuY3Rpb24odmFsdWUpIHsKLSAgICAgIHRoaXMuJHRhZyA9IFJ1bklucHV0LlRhZ3MucXVlcnlW
ZXJzaW9uOwotICAgICAgdGhpcy4kZGF0YSA9IHZhbHVlOwotICAgIH0KLSAgfSk7Ci0gIE9iamVj
dC5kZWZpbmVQcm9wZXJ0eShSdW5JbnB1dC5wcm90b3R5cGUsICJmbHVzaEZvclRlc3RpbmciLCB7
Ci0gICAgZ2V0OiBmdW5jdGlvbigpIHsKLSAgICAgIGlmICh0aGlzLiR0YWcgIT0gUnVuSW5wdXQu
VGFncy5mbHVzaEZvclRlc3RpbmcpIHsKLSAgICAgICAgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9y
KAotICAgICAgICAgICAgIlJ1bklucHV0LmZsdXNoRm9yVGVzdGluZyBpcyBub3QgY3VycmVudGx5
IHNldC4iKTsKLSAgICAgIH0KLSAgICAgIHJldHVybiB0aGlzLiRkYXRhOwotICAgIH0sCi0KLSAg
ICBzZXQ6IGZ1bmN0aW9uKHZhbHVlKSB7Ci0gICAgICB0aGlzLiR0YWcgPSBSdW5JbnB1dC5UYWdz
LmZsdXNoRm9yVGVzdGluZzsKLSAgICAgIHRoaXMuJGRhdGEgPSB2YWx1ZTsKLSAgICB9Ci0gIH0p
OwotCi0KLSAgICBSdW5JbnB1dC5lbmNvZGUgPSBmdW5jdGlvbihlbmNvZGVyLCB2YWwpIHsKLSAg
ICAgIGlmICh2YWwgPT0gbnVsbCkgewotICAgICAgICBlbmNvZGVyLndyaXRlVWludDY0KDApOwot
ICAgICAgICBlbmNvZGVyLndyaXRlVWludDY0KDApOwotICAgICAgICByZXR1cm47Ci0gICAgICB9
Ci0gICAgICBpZiAodmFsLiR0YWcgPT0gdW5kZWZpbmVkKSB7Ci0gICAgICAgIHRocm93IG5ldyBU
eXBlRXJyb3IoIkNhbm5vdCBlbmNvZGUgdW5pb25zIHdpdGggYW4gdW5rbm93biBtZW1iZXIgc2V0
LiIpOwotICAgICAgfQotCi0gICAgICBlbmNvZGVyLndyaXRlVWludDMyKDE2KTsKLSAgICAgIGVu
Y29kZXIud3JpdGVVaW50MzIodmFsLiR0YWcpOwotICAgICAgc3dpdGNoICh2YWwuJHRhZykgewot
ICAgICAgICBjYXNlIFJ1bklucHV0LlRhZ3MucXVlcnlWZXJzaW9uOgotICAgICAgICAgIGVuY29k
ZXIuZW5jb2RlU3RydWN0UG9pbnRlcihRdWVyeVZlcnNpb24sIHZhbC5xdWVyeVZlcnNpb24pOwot
ICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFJ1bklucHV0LlRhZ3MuZmx1c2hGb3JUZXN0
aW5nOgotICAgICAgICAgIGVuY29kZXIuZW5jb2RlU3RydWN0UG9pbnRlcihGbHVzaEZvclRlc3Rp
bmcsIHZhbC5mbHVzaEZvclRlc3RpbmcpOwotICAgICAgICAgIGJyZWFrOwotICAgICAgfQotICAg
ICAgZW5jb2Rlci5hbGlnbigpOwotICAgIH07Ci0KLQotICAgIFJ1bklucHV0LmRlY29kZSA9IGZ1
bmN0aW9uKGRlY29kZXIpIHsKLSAgICAgIHZhciBzaXplID0gZGVjb2Rlci5yZWFkVWludDMyKCk7
Ci0gICAgICBpZiAoc2l6ZSA9PSAwKSB7Ci0gICAgICAgIGRlY29kZXIucmVhZFVpbnQzMigpOwot
ICAgICAgICBkZWNvZGVyLnJlYWRVaW50NjQoKTsKLSAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAg
ICB9Ci0KLSAgICAgIHZhciByZXN1bHQgPSBuZXcgUnVuSW5wdXQoKTsKLSAgICAgIHZhciB0YWcg
PSBkZWNvZGVyLnJlYWRVaW50MzIoKTsKLSAgICAgIHN3aXRjaCAodGFnKSB7Ci0gICAgICAgIGNh
c2UgUnVuSW5wdXQuVGFncy5xdWVyeVZlcnNpb246Ci0gICAgICAgICAgcmVzdWx0LnF1ZXJ5VmVy
c2lvbiA9IGRlY29kZXIuZGVjb2RlU3RydWN0UG9pbnRlcihRdWVyeVZlcnNpb24pOwotICAgICAg
ICAgIGJyZWFrOwotICAgICAgICBjYXNlIFJ1bklucHV0LlRhZ3MuZmx1c2hGb3JUZXN0aW5nOgot
ICAgICAgICAgIHJlc3VsdC5mbHVzaEZvclRlc3RpbmcgPSBkZWNvZGVyLmRlY29kZVN0cnVjdFBv
aW50ZXIoRmx1c2hGb3JUZXN0aW5nKTsKLSAgICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICAg
IGRlY29kZXIuYWxpZ24oKTsKLQotICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9OwotCi0KLSAg
ICBSdW5JbnB1dC52YWxpZGF0ZSA9IGZ1bmN0aW9uKG1lc3NhZ2VWYWxpZGF0b3IsIG9mZnNldCkg
ewotICAgICAgdmFyIHNpemUgPSBtZXNzYWdlVmFsaWRhdG9yLmRlY29kZVVuaW9uU2l6ZShvZmZz
ZXQpOwotICAgICAgaWYgKHNpemUgIT0gMTYpIHsKLSAgICAgICAgcmV0dXJuIHZhbGlkYXRvci52
YWxpZGF0aW9uRXJyb3IuSU5WQUxJRF9VTklPTl9TSVpFOwotICAgICAgfQotCi0gICAgICB2YXIg
dGFnID0gbWVzc2FnZVZhbGlkYXRvci5kZWNvZGVVbmlvblRhZyhvZmZzZXQpOwotICAgICAgdmFy
IGRhdGFfb2Zmc2V0ID0gb2Zmc2V0ICsgODsKLSAgICAgIHZhciBlcnI7Ci0gICAgICBzd2l0Y2gg
KHRhZykgewotICAgICAgICBjYXNlIFJ1bklucHV0LlRhZ3MucXVlcnlWZXJzaW9uOgotICAgICAg
ICAgIAotCi0gICAgLy8gdmFsaWRhdGUgUnVuSW5wdXQucXVlcnlWZXJzaW9uCi0gICAgZXJyID0g
bWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdFBvaW50ZXIoZGF0YV9vZmZzZXQsIFF1ZXJ5
VmVyc2lvbiwgZmFsc2UpOwotICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJy
b3IuTk9ORSkKLSAgICAgICAgcmV0dXJuIGVycjsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAg
Y2FzZSBSdW5JbnB1dC5UYWdzLmZsdXNoRm9yVGVzdGluZzoKLSAgICAgICAgICAKLQotICAgIC8v
IHZhbGlkYXRlIFJ1bklucHV0LmZsdXNoRm9yVGVzdGluZwotICAgIGVyciA9IG1lc3NhZ2VWYWxp
ZGF0b3IudmFsaWRhdGVTdHJ1Y3RQb2ludGVyKGRhdGFfb2Zmc2V0LCBGbHVzaEZvclRlc3Rpbmcs
IGZhbHNlKTsKLSAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUp
Ci0gICAgICAgIHJldHVybiBlcnI7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0KLSAgICAg
IHJldHVybiB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkU7Ci0gICAgfTsKLQotICBSdW5J
bnB1dC5lbmNvZGVkU2l6ZSA9IDE2OwotCi0gIGZ1bmN0aW9uIFJ1bk91dHB1dCh2YWx1ZSkgewot
ICAgIHRoaXMuaW5pdERlZmF1bHRfKCk7Ci0gICAgdGhpcy5pbml0VmFsdWVfKHZhbHVlKTsKLSAg
fQotCi0KLSAgUnVuT3V0cHV0LlRhZ3MgPSB7Ci0gICAgcXVlcnlWZXJzaW9uUmVzdWx0OiAwLAot
ICB9OwotCi0gIFJ1bk91dHB1dC5wcm90b3R5cGUuaW5pdERlZmF1bHRfID0gZnVuY3Rpb24oKSB7
Ci0gICAgdGhpcy4kZGF0YSA9IG51bGw7Ci0gICAgdGhpcy4kdGFnID0gdW5kZWZpbmVkOwotICB9
Ci0KLSAgUnVuT3V0cHV0LnByb3RvdHlwZS5pbml0VmFsdWVfID0gZnVuY3Rpb24odmFsdWUpIHsK
LSAgICBpZiAodmFsdWUgPT0gdW5kZWZpbmVkKSB7Ci0gICAgICByZXR1cm47Ci0gICAgfQotCi0g
ICAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyh2YWx1ZSk7Ci0gICAgaWYgKGtleXMubGVuZ3RoID09
IDApIHsKLSAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAoa2V5cy5sZW5ndGggPiAxKSB7
Ci0gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCJZb3UgbWF5IHNldCBvbmx5IG9uZSBtZW1iZXIg
b24gYSB1bmlvbi4iKTsKLSAgICB9Ci0KLSAgICB2YXIgZmllbGRzID0gWwotICAgICAgICAicXVl
cnlWZXJzaW9uUmVzdWx0IiwKLSAgICBdOwotCi0gICAgaWYgKGZpZWxkcy5pbmRleE9mKGtleXNb
MF0pIDwgMCkgewotICAgICAgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKGtleXNbMF0gKyAiIGlz
IG5vdCBhIFJ1bk91dHB1dCBtZW1iZXIuIik7Ci0KLSAgICB9Ci0KLSAgICB0aGlzW2tleXNbMF1d
ID0gdmFsdWVba2V5c1swXV07Ci0gIH0KLSAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFJ1bk91dHB1
dC5wcm90b3R5cGUsICJxdWVyeVZlcnNpb25SZXN1bHQiLCB7Ci0gICAgZ2V0OiBmdW5jdGlvbigp
IHsKLSAgICAgIGlmICh0aGlzLiR0YWcgIT0gUnVuT3V0cHV0LlRhZ3MucXVlcnlWZXJzaW9uUmVz
dWx0KSB7Ci0gICAgICAgIHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcigKLSAgICAgICAgICAgICJS
dW5PdXRwdXQucXVlcnlWZXJzaW9uUmVzdWx0IGlzIG5vdCBjdXJyZW50bHkgc2V0LiIpOwotICAg
ICAgfQotICAgICAgcmV0dXJuIHRoaXMuJGRhdGE7Ci0gICAgfSwKLQotICAgIHNldDogZnVuY3Rp
b24odmFsdWUpIHsKLSAgICAgIHRoaXMuJHRhZyA9IFJ1bk91dHB1dC5UYWdzLnF1ZXJ5VmVyc2lv
blJlc3VsdDsKLSAgICAgIHRoaXMuJGRhdGEgPSB2YWx1ZTsKLSAgICB9Ci0gIH0pOwotCi0KLSAg
ICBSdW5PdXRwdXQuZW5jb2RlID0gZnVuY3Rpb24oZW5jb2RlciwgdmFsKSB7Ci0gICAgICBpZiAo
dmFsID09IG51bGwpIHsKLSAgICAgICAgZW5jb2Rlci53cml0ZVVpbnQ2NCgwKTsKLSAgICAgICAg
ZW5jb2Rlci53cml0ZVVpbnQ2NCgwKTsKLSAgICAgICAgcmV0dXJuOwotICAgICAgfQotICAgICAg
aWYgKHZhbC4kdGFnID09IHVuZGVmaW5lZCkgewotICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9y
KCJDYW5ub3QgZW5jb2RlIHVuaW9ucyB3aXRoIGFuIHVua25vd24gbWVtYmVyIHNldC4iKTsKLSAg
ICAgIH0KLQotICAgICAgZW5jb2Rlci53cml0ZVVpbnQzMigxNik7Ci0gICAgICBlbmNvZGVyLndy
aXRlVWludDMyKHZhbC4kdGFnKTsKLSAgICAgIHN3aXRjaCAodmFsLiR0YWcpIHsKLSAgICAgICAg
Y2FzZSBSdW5PdXRwdXQuVGFncy5xdWVyeVZlcnNpb25SZXN1bHQ6Ci0gICAgICAgICAgZW5jb2Rl
ci5lbmNvZGVTdHJ1Y3RQb2ludGVyKFF1ZXJ5VmVyc2lvblJlc3VsdCwgdmFsLnF1ZXJ5VmVyc2lv
blJlc3VsdCk7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgICBlbmNvZGVyLmFsaWdu
KCk7Ci0gICAgfTsKLQotCi0gICAgUnVuT3V0cHV0LmRlY29kZSA9IGZ1bmN0aW9uKGRlY29kZXIp
IHsKLSAgICAgIHZhciBzaXplID0gZGVjb2Rlci5yZWFkVWludDMyKCk7Ci0gICAgICBpZiAoc2l6
ZSA9PSAwKSB7Ci0gICAgICAgIGRlY29kZXIucmVhZFVpbnQzMigpOwotICAgICAgICBkZWNvZGVy
LnJlYWRVaW50NjQoKTsKLSAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICB9Ci0KLSAgICAgIHZh
ciByZXN1bHQgPSBuZXcgUnVuT3V0cHV0KCk7Ci0gICAgICB2YXIgdGFnID0gZGVjb2Rlci5yZWFk
VWludDMyKCk7Ci0gICAgICBzd2l0Y2ggKHRhZykgewotICAgICAgICBjYXNlIFJ1bk91dHB1dC5U
YWdzLnF1ZXJ5VmVyc2lvblJlc3VsdDoKLSAgICAgICAgICByZXN1bHQucXVlcnlWZXJzaW9uUmVz
dWx0ID0gZGVjb2Rlci5kZWNvZGVTdHJ1Y3RQb2ludGVyKFF1ZXJ5VmVyc2lvblJlc3VsdCk7Ci0g
ICAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgICBkZWNvZGVyLmFsaWduKCk7Ci0KLSAgICAg
IHJldHVybiByZXN1bHQ7Ci0gICAgfTsKLQotCi0gICAgUnVuT3V0cHV0LnZhbGlkYXRlID0gZnVu
Y3Rpb24obWVzc2FnZVZhbGlkYXRvciwgb2Zmc2V0KSB7Ci0gICAgICB2YXIgc2l6ZSA9IG1lc3Nh
Z2VWYWxpZGF0b3IuZGVjb2RlVW5pb25TaXplKG9mZnNldCk7Ci0gICAgICBpZiAoc2l6ZSAhPSAx
NikgewotICAgICAgICByZXR1cm4gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5JTlZBTElEX1VO
SU9OX1NJWkU7Ci0gICAgICB9Ci0KLSAgICAgIHZhciB0YWcgPSBtZXNzYWdlVmFsaWRhdG9yLmRl
Y29kZVVuaW9uVGFnKG9mZnNldCk7Ci0gICAgICB2YXIgZGF0YV9vZmZzZXQgPSBvZmZzZXQgKyA4
OwotICAgICAgdmFyIGVycjsKLSAgICAgIHN3aXRjaCAodGFnKSB7Ci0gICAgICAgIGNhc2UgUnVu
T3V0cHV0LlRhZ3MucXVlcnlWZXJzaW9uUmVzdWx0OgotICAgICAgICAgIAotCi0gICAgLy8gdmFs
aWRhdGUgUnVuT3V0cHV0LnF1ZXJ5VmVyc2lvblJlc3VsdAotICAgIGVyciA9IG1lc3NhZ2VWYWxp
ZGF0b3IudmFsaWRhdGVTdHJ1Y3RQb2ludGVyKGRhdGFfb2Zmc2V0LCBRdWVyeVZlcnNpb25SZXN1
bHQsIGZhbHNlKTsKLSAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5P
TkUpCi0gICAgICAgIHJldHVybiBlcnI7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0KLSAg
ICAgIHJldHVybiB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkU7Ci0gICAgfTsKLQotICBS
dW5PdXRwdXQuZW5jb2RlZFNpemUgPSAxNjsKLQotICBmdW5jdGlvbiBSdW5PckNsb3NlUGlwZUlu
cHV0KHZhbHVlKSB7Ci0gICAgdGhpcy5pbml0RGVmYXVsdF8oKTsKLSAgICB0aGlzLmluaXRWYWx1
ZV8odmFsdWUpOwotICB9Ci0KLQotICBSdW5PckNsb3NlUGlwZUlucHV0LlRhZ3MgPSB7Ci0gICAg
cmVxdWlyZVZlcnNpb246IDAsCi0gIH07Ci0KLSAgUnVuT3JDbG9zZVBpcGVJbnB1dC5wcm90b3R5
cGUuaW5pdERlZmF1bHRfID0gZnVuY3Rpb24oKSB7Ci0gICAgdGhpcy4kZGF0YSA9IG51bGw7Ci0g
ICAgdGhpcy4kdGFnID0gdW5kZWZpbmVkOwotICB9Ci0KLSAgUnVuT3JDbG9zZVBpcGVJbnB1dC5w
cm90b3R5cGUuaW5pdFZhbHVlXyA9IGZ1bmN0aW9uKHZhbHVlKSB7Ci0gICAgaWYgKHZhbHVlID09
IHVuZGVmaW5lZCkgewotICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIHZhciBrZXlzID0gT2Jq
ZWN0LmtleXModmFsdWUpOwotICAgIGlmIChrZXlzLmxlbmd0aCA9PSAwKSB7Ci0gICAgICByZXR1
cm47Ci0gICAgfQotCi0gICAgaWYgKGtleXMubGVuZ3RoID4gMSkgewotICAgICAgdGhyb3cgbmV3
IFR5cGVFcnJvcigiWW91IG1heSBzZXQgb25seSBvbmUgbWVtYmVyIG9uIGEgdW5pb24uIik7Ci0g
ICAgfQotCi0gICAgdmFyIGZpZWxkcyA9IFsKLSAgICAgICAgInJlcXVpcmVWZXJzaW9uIiwKLSAg
ICBdOwotCi0gICAgaWYgKGZpZWxkcy5pbmRleE9mKGtleXNbMF0pIDwgMCkgewotICAgICAgdGhy
b3cgbmV3IFJlZmVyZW5jZUVycm9yKGtleXNbMF0gKyAiIGlzIG5vdCBhIFJ1bk9yQ2xvc2VQaXBl
SW5wdXQgbWVtYmVyLiIpOwotCi0gICAgfQotCi0gICAgdGhpc1trZXlzWzBdXSA9IHZhbHVlW2tl
eXNbMF1dOwotICB9Ci0gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShSdW5PckNsb3NlUGlwZUlucHV0
LnByb3RvdHlwZSwgInJlcXVpcmVWZXJzaW9uIiwgewotICAgIGdldDogZnVuY3Rpb24oKSB7Ci0g
ICAgICBpZiAodGhpcy4kdGFnICE9IFJ1bk9yQ2xvc2VQaXBlSW5wdXQuVGFncy5yZXF1aXJlVmVy
c2lvbikgewotICAgICAgICB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoCi0gICAgICAgICAgICAi
UnVuT3JDbG9zZVBpcGVJbnB1dC5yZXF1aXJlVmVyc2lvbiBpcyBub3QgY3VycmVudGx5IHNldC4i
KTsKLSAgICAgIH0KLSAgICAgIHJldHVybiB0aGlzLiRkYXRhOwotICAgIH0sCi0KLSAgICBzZXQ6
IGZ1bmN0aW9uKHZhbHVlKSB7Ci0gICAgICB0aGlzLiR0YWcgPSBSdW5PckNsb3NlUGlwZUlucHV0
LlRhZ3MucmVxdWlyZVZlcnNpb247Ci0gICAgICB0aGlzLiRkYXRhID0gdmFsdWU7Ci0gICAgfQot
ICB9KTsKLQotCi0gICAgUnVuT3JDbG9zZVBpcGVJbnB1dC5lbmNvZGUgPSBmdW5jdGlvbihlbmNv
ZGVyLCB2YWwpIHsKLSAgICAgIGlmICh2YWwgPT0gbnVsbCkgewotICAgICAgICBlbmNvZGVyLndy
aXRlVWludDY0KDApOwotICAgICAgICBlbmNvZGVyLndyaXRlVWludDY0KDApOwotICAgICAgICBy
ZXR1cm47Ci0gICAgICB9Ci0gICAgICBpZiAodmFsLiR0YWcgPT0gdW5kZWZpbmVkKSB7Ci0gICAg
ICAgIHRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBlbmNvZGUgdW5pb25zIHdpdGggYW4gdW5r
bm93biBtZW1iZXIgc2V0LiIpOwotICAgICAgfQotCi0gICAgICBlbmNvZGVyLndyaXRlVWludDMy
KDE2KTsKLSAgICAgIGVuY29kZXIud3JpdGVVaW50MzIodmFsLiR0YWcpOwotICAgICAgc3dpdGNo
ICh2YWwuJHRhZykgewotICAgICAgICBjYXNlIFJ1bk9yQ2xvc2VQaXBlSW5wdXQuVGFncy5yZXF1
aXJlVmVyc2lvbjoKLSAgICAgICAgICBlbmNvZGVyLmVuY29kZVN0cnVjdFBvaW50ZXIoUmVxdWly
ZVZlcnNpb24sIHZhbC5yZXF1aXJlVmVyc2lvbik7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICB9
Ci0gICAgICBlbmNvZGVyLmFsaWduKCk7Ci0gICAgfTsKLQotCi0gICAgUnVuT3JDbG9zZVBpcGVJ
bnB1dC5kZWNvZGUgPSBmdW5jdGlvbihkZWNvZGVyKSB7Ci0gICAgICB2YXIgc2l6ZSA9IGRlY29k
ZXIucmVhZFVpbnQzMigpOwotICAgICAgaWYgKHNpemUgPT0gMCkgewotICAgICAgICBkZWNvZGVy
LnJlYWRVaW50MzIoKTsKLSAgICAgICAgZGVjb2Rlci5yZWFkVWludDY0KCk7Ci0gICAgICAgIHJl
dHVybiBudWxsOwotICAgICAgfQotCi0gICAgICB2YXIgcmVzdWx0ID0gbmV3IFJ1bk9yQ2xvc2VQ
aXBlSW5wdXQoKTsKLSAgICAgIHZhciB0YWcgPSBkZWNvZGVyLnJlYWRVaW50MzIoKTsKLSAgICAg
IHN3aXRjaCAodGFnKSB7Ci0gICAgICAgIGNhc2UgUnVuT3JDbG9zZVBpcGVJbnB1dC5UYWdzLnJl
cXVpcmVWZXJzaW9uOgotICAgICAgICAgIHJlc3VsdC5yZXF1aXJlVmVyc2lvbiA9IGRlY29kZXIu
ZGVjb2RlU3RydWN0UG9pbnRlcihSZXF1aXJlVmVyc2lvbik7Ci0gICAgICAgICAgYnJlYWs7Ci0g
ICAgICB9Ci0gICAgICBkZWNvZGVyLmFsaWduKCk7Ci0KLSAgICAgIHJldHVybiByZXN1bHQ7Ci0g
ICAgfTsKLQotCi0gICAgUnVuT3JDbG9zZVBpcGVJbnB1dC52YWxpZGF0ZSA9IGZ1bmN0aW9uKG1l
c3NhZ2VWYWxpZGF0b3IsIG9mZnNldCkgewotICAgICAgdmFyIHNpemUgPSBtZXNzYWdlVmFsaWRh
dG9yLmRlY29kZVVuaW9uU2l6ZShvZmZzZXQpOwotICAgICAgaWYgKHNpemUgIT0gMTYpIHsKLSAg
ICAgICAgcmV0dXJuIHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuSU5WQUxJRF9VTklPTl9TSVpF
OwotICAgICAgfQotCi0gICAgICB2YXIgdGFnID0gbWVzc2FnZVZhbGlkYXRvci5kZWNvZGVVbmlv
blRhZyhvZmZzZXQpOwotICAgICAgdmFyIGRhdGFfb2Zmc2V0ID0gb2Zmc2V0ICsgODsKLSAgICAg
IHZhciBlcnI7Ci0gICAgICBzd2l0Y2ggKHRhZykgewotICAgICAgICBjYXNlIFJ1bk9yQ2xvc2VQ
aXBlSW5wdXQuVGFncy5yZXF1aXJlVmVyc2lvbjoKLSAgICAgICAgICAKLQotICAgIC8vIHZhbGlk
YXRlIFJ1bk9yQ2xvc2VQaXBlSW5wdXQucmVxdWlyZVZlcnNpb24KLSAgICBlcnIgPSBtZXNzYWdl
VmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0UG9pbnRlcihkYXRhX29mZnNldCwgUmVxdWlyZVZlcnNp
b24sIGZhbHNlKTsKLSAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5P
TkUpCi0gICAgICAgIHJldHVybiBlcnI7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0KLSAg
ICAgIHJldHVybiB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkU7Ci0gICAgfTsKLQotICBS
dW5PckNsb3NlUGlwZUlucHV0LmVuY29kZWRTaXplID0gMTY7Ci0gIGV4cG9ydHMua1J1bk1lc3Nh
Z2VJZCA9IGtSdW5NZXNzYWdlSWQ7Ci0gIGV4cG9ydHMua1J1bk9yQ2xvc2VQaXBlTWVzc2FnZUlk
ID0ga1J1bk9yQ2xvc2VQaXBlTWVzc2FnZUlkOwotICBleHBvcnRzLlJ1bk1lc3NhZ2VQYXJhbXMg
PSBSdW5NZXNzYWdlUGFyYW1zOwotICBleHBvcnRzLlJ1blJlc3BvbnNlTWVzc2FnZVBhcmFtcyA9
IFJ1blJlc3BvbnNlTWVzc2FnZVBhcmFtczsKLSAgZXhwb3J0cy5RdWVyeVZlcnNpb24gPSBRdWVy
eVZlcnNpb247Ci0gIGV4cG9ydHMuUXVlcnlWZXJzaW9uUmVzdWx0ID0gUXVlcnlWZXJzaW9uUmVz
dWx0OwotICBleHBvcnRzLkZsdXNoRm9yVGVzdGluZyA9IEZsdXNoRm9yVGVzdGluZzsKLSAgZXhw
b3J0cy5SdW5PckNsb3NlUGlwZU1lc3NhZ2VQYXJhbXMgPSBSdW5PckNsb3NlUGlwZU1lc3NhZ2VQ
YXJhbXM7Ci0gIGV4cG9ydHMuUmVxdWlyZVZlcnNpb24gPSBSZXF1aXJlVmVyc2lvbjsKLSAgZXhw
b3J0cy5SdW5JbnB1dCA9IFJ1bklucHV0OwotICBleHBvcnRzLlJ1bk91dHB1dCA9IFJ1bk91dHB1
dDsKLSAgZXhwb3J0cy5SdW5PckNsb3NlUGlwZUlucHV0ID0gUnVuT3JDbG9zZVBpcGVJbnB1dDsK
LX0pKCk7Ly8gQ29weXJpZ2h0IDIwMTQgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJT
RC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxl
LgotCi0ndXNlIHN0cmljdCc7Ci0KLShmdW5jdGlvbigpIHsKLSAgdmFyIG1vam9tSWQgPSAnbW9q
by9wdWJsaWMvaW50ZXJmYWNlcy9iaW5kaW5ncy9waXBlX2NvbnRyb2xfbWVzc2FnZXMubW9qb20n
OwotICBpZiAobW9qby5pbnRlcm5hbC5pc01vam9tTG9hZGVkKG1vam9tSWQpKSB7Ci0gICAgY29u
c29sZS53YXJuKCdUaGUgZm9sbG93aW5nIG1vam9tIGlzIGxvYWRlZCBtdWx0aXBsZSB0aW1lczog
JyArIG1vam9tSWQpOwotICAgIHJldHVybjsKLSAgfQotICBtb2pvLmludGVybmFsLm1hcmtNb2pv
bUxvYWRlZChtb2pvbUlkKTsKLSAgdmFyIGJpbmRpbmdzID0gbW9qbzsKLSAgdmFyIGFzc29jaWF0
ZWRCaW5kaW5ncyA9IG1vam87Ci0gIHZhciBjb2RlYyA9IG1vam8uaW50ZXJuYWw7Ci0gIHZhciB2
YWxpZGF0b3IgPSBtb2pvLmludGVybmFsOwotCi0gIHZhciBleHBvcnRzID0gbW9qby5pbnRlcm5h
bC5leHBvc2VOYW1lc3BhY2UoJ21vam8ucGlwZUNvbnRyb2wnKTsKLQotCi0gIHZhciBrUnVuT3JD
bG9zZVBpcGVNZXNzYWdlSWQgPSAweEZGRkZGRkZFOwotCi0gIGZ1bmN0aW9uIFJ1bk9yQ2xvc2VQ
aXBlTWVzc2FnZVBhcmFtcyh2YWx1ZXMpIHsKLSAgICB0aGlzLmluaXREZWZhdWx0c18oKTsKLSAg
ICB0aGlzLmluaXRGaWVsZHNfKHZhbHVlcyk7Ci0gIH0KLQotCi0gIFJ1bk9yQ2xvc2VQaXBlTWVz
c2FnZVBhcmFtcy5wcm90b3R5cGUuaW5pdERlZmF1bHRzXyA9IGZ1bmN0aW9uKCkgewotICAgIHRo
aXMuaW5wdXQgPSBudWxsOwotICB9OwotICBSdW5PckNsb3NlUGlwZU1lc3NhZ2VQYXJhbXMucHJv
dG90eXBlLmluaXRGaWVsZHNfID0gZnVuY3Rpb24oZmllbGRzKSB7Ci0gICAgZm9yKHZhciBmaWVs
ZCBpbiBmaWVsZHMpIHsKLSAgICAgICAgaWYgKHRoaXMuaGFzT3duUHJvcGVydHkoZmllbGQpKQot
ICAgICAgICAgIHRoaXNbZmllbGRdID0gZmllbGRzW2ZpZWxkXTsKLSAgICB9Ci0gIH07Ci0KLSAg
UnVuT3JDbG9zZVBpcGVNZXNzYWdlUGFyYW1zLnZhbGlkYXRlID0gZnVuY3Rpb24obWVzc2FnZVZh
bGlkYXRvciwgb2Zmc2V0KSB7Ci0gICAgdmFyIGVycjsKLSAgICBlcnIgPSBtZXNzYWdlVmFsaWRh
dG9yLnZhbGlkYXRlU3RydWN0SGVhZGVyKG9mZnNldCwgY29kZWMua1N0cnVjdEhlYWRlclNpemUp
OwotICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKLSAgICAg
ICAgcmV0dXJuIGVycjsKLQotICAgIHZhciBrVmVyc2lvblNpemVzID0gWwotICAgICAge3ZlcnNp
b246IDAsIG51bUJ5dGVzOiAyNH0KLSAgICBdOwotICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3Iu
dmFsaWRhdGVTdHJ1Y3RWZXJzaW9uKG9mZnNldCwga1ZlcnNpb25TaXplcyk7Ci0gICAgaWYgKGVy
ciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQotICAgICAgICByZXR1cm4gZXJy
OwotCi0KLSAgICAvLyB2YWxpZGF0ZSBSdW5PckNsb3NlUGlwZU1lc3NhZ2VQYXJhbXMuaW5wdXQK
LSAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlVW5pb24ob2Zmc2V0ICsgY29kZWMu
a1N0cnVjdEhlYWRlclNpemUgKyAwLCBSdW5PckNsb3NlUGlwZUlucHV0LCBmYWxzZSk7Ci0gICAg
aWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQotICAgICAgICByZXR1
cm4gZXJyOwotCi0gICAgcmV0dXJuIHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORTsKLSAg
fTsKLQotICBSdW5PckNsb3NlUGlwZU1lc3NhZ2VQYXJhbXMuZW5jb2RlZFNpemUgPSBjb2RlYy5r
U3RydWN0SGVhZGVyU2l6ZSArIDE2OwotCi0gIFJ1bk9yQ2xvc2VQaXBlTWVzc2FnZVBhcmFtcy5k
ZWNvZGUgPSBmdW5jdGlvbihkZWNvZGVyKSB7Ci0gICAgdmFyIHBhY2tlZDsKLSAgICB2YXIgdmFs
ID0gbmV3IFJ1bk9yQ2xvc2VQaXBlTWVzc2FnZVBhcmFtcygpOwotICAgIHZhciBudW1iZXJPZkJ5
dGVzID0gZGVjb2Rlci5yZWFkVWludDMyKCk7Ci0gICAgdmFyIHZlcnNpb24gPSBkZWNvZGVyLnJl
YWRVaW50MzIoKTsKLSAgICB2YWwuaW5wdXQgPSBkZWNvZGVyLmRlY29kZVN0cnVjdChSdW5PckNs
b3NlUGlwZUlucHV0KTsKLSAgICByZXR1cm4gdmFsOwotICB9OwotCi0gIFJ1bk9yQ2xvc2VQaXBl
TWVzc2FnZVBhcmFtcy5lbmNvZGUgPSBmdW5jdGlvbihlbmNvZGVyLCB2YWwpIHsKLSAgICB2YXIg
cGFja2VkOwotICAgIGVuY29kZXIud3JpdGVVaW50MzIoUnVuT3JDbG9zZVBpcGVNZXNzYWdlUGFy
YW1zLmVuY29kZWRTaXplKTsKLSAgICBlbmNvZGVyLndyaXRlVWludDMyKDApOwotICAgIGVuY29k
ZXIuZW5jb2RlU3RydWN0KFJ1bk9yQ2xvc2VQaXBlSW5wdXQsIHZhbC5pbnB1dCk7Ci0gIH07Ci0g
IGZ1bmN0aW9uIERpc2Nvbm5lY3RSZWFzb24odmFsdWVzKSB7Ci0gICAgdGhpcy5pbml0RGVmYXVs
dHNfKCk7Ci0gICAgdGhpcy5pbml0RmllbGRzXyh2YWx1ZXMpOwotICB9Ci0KLQotICBEaXNjb25u
ZWN0UmVhc29uLnByb3RvdHlwZS5pbml0RGVmYXVsdHNfID0gZnVuY3Rpb24oKSB7Ci0gICAgdGhp
cy5jdXN0b21SZWFzb24gPSAwOwotICAgIHRoaXMuZGVzY3JpcHRpb24gPSBudWxsOwotICB9Owot
ICBEaXNjb25uZWN0UmVhc29uLnByb3RvdHlwZS5pbml0RmllbGRzXyA9IGZ1bmN0aW9uKGZpZWxk
cykgewotICAgIGZvcih2YXIgZmllbGQgaW4gZmllbGRzKSB7Ci0gICAgICAgIGlmICh0aGlzLmhh
c093blByb3BlcnR5KGZpZWxkKSkKLSAgICAgICAgICB0aGlzW2ZpZWxkXSA9IGZpZWxkc1tmaWVs
ZF07Ci0gICAgfQotICB9OwotCi0gIERpc2Nvbm5lY3RSZWFzb24udmFsaWRhdGUgPSBmdW5jdGlv
bihtZXNzYWdlVmFsaWRhdG9yLCBvZmZzZXQpIHsKLSAgICB2YXIgZXJyOwotICAgIGVyciA9IG1l
c3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RIZWFkZXIob2Zmc2V0LCBjb2RlYy5rU3RydWN0
SGVhZGVyU2l6ZSk7Ci0gICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5O
T05FKQotICAgICAgICByZXR1cm4gZXJyOwotCi0gICAgdmFyIGtWZXJzaW9uU2l6ZXMgPSBbCi0g
ICAgICB7dmVyc2lvbjogMCwgbnVtQnl0ZXM6IDI0fQotICAgIF07Ci0gICAgZXJyID0gbWVzc2Fn
ZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdFZlcnNpb24ob2Zmc2V0LCBrVmVyc2lvblNpemVzKTsK
LSAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCi0gICAgICAg
IHJldHVybiBlcnI7Ci0KLQotCi0gICAgLy8gdmFsaWRhdGUgRGlzY29ubmVjdFJlYXNvbi5kZXNj
cmlwdGlvbgotICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJpbmdQb2ludGVy
KG9mZnNldCArIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgOCwgZmFsc2UpCi0gICAgaWYgKGVy
ciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQotICAgICAgICByZXR1cm4gZXJy
OwotCi0gICAgcmV0dXJuIHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORTsKLSAgfTsKLQot
ICBEaXNjb25uZWN0UmVhc29uLmVuY29kZWRTaXplID0gY29kZWMua1N0cnVjdEhlYWRlclNpemUg
KyAxNjsKLQotICBEaXNjb25uZWN0UmVhc29uLmRlY29kZSA9IGZ1bmN0aW9uKGRlY29kZXIpIHsK
LSAgICB2YXIgcGFja2VkOwotICAgIHZhciB2YWwgPSBuZXcgRGlzY29ubmVjdFJlYXNvbigpOwot
ICAgIHZhciBudW1iZXJPZkJ5dGVzID0gZGVjb2Rlci5yZWFkVWludDMyKCk7Ci0gICAgdmFyIHZl
cnNpb24gPSBkZWNvZGVyLnJlYWRVaW50MzIoKTsKLSAgICB2YWwuY3VzdG9tUmVhc29uID0gZGVj
b2Rlci5kZWNvZGVTdHJ1Y3QoY29kZWMuVWludDMyKTsKLSAgICBkZWNvZGVyLnNraXAoMSk7Ci0g
ICAgZGVjb2Rlci5za2lwKDEpOwotICAgIGRlY29kZXIuc2tpcCgxKTsKLSAgICBkZWNvZGVyLnNr
aXAoMSk7Ci0gICAgdmFsLmRlc2NyaXB0aW9uID0gZGVjb2Rlci5kZWNvZGVTdHJ1Y3QoY29kZWMu
U3RyaW5nKTsKLSAgICByZXR1cm4gdmFsOwotICB9OwotCi0gIERpc2Nvbm5lY3RSZWFzb24uZW5j
b2RlID0gZnVuY3Rpb24oZW5jb2RlciwgdmFsKSB7Ci0gICAgdmFyIHBhY2tlZDsKLSAgICBlbmNv
ZGVyLndyaXRlVWludDMyKERpc2Nvbm5lY3RSZWFzb24uZW5jb2RlZFNpemUpOwotICAgIGVuY29k
ZXIud3JpdGVVaW50MzIoMCk7Ci0gICAgZW5jb2Rlci5lbmNvZGVTdHJ1Y3QoY29kZWMuVWludDMy
LCB2YWwuY3VzdG9tUmVhc29uKTsKLSAgICBlbmNvZGVyLnNraXAoMSk7Ci0gICAgZW5jb2Rlci5z
a2lwKDEpOwotICAgIGVuY29kZXIuc2tpcCgxKTsKLSAgICBlbmNvZGVyLnNraXAoMSk7Ci0gICAg
ZW5jb2Rlci5lbmNvZGVTdHJ1Y3QoY29kZWMuU3RyaW5nLCB2YWwuZGVzY3JpcHRpb24pOwotICB9
OwotICBmdW5jdGlvbiBQZWVyQXNzb2NpYXRlZEVuZHBvaW50Q2xvc2VkRXZlbnQodmFsdWVzKSB7
Ci0gICAgdGhpcy5pbml0RGVmYXVsdHNfKCk7Ci0gICAgdGhpcy5pbml0RmllbGRzXyh2YWx1ZXMp
OwotICB9Ci0KLQotICBQZWVyQXNzb2NpYXRlZEVuZHBvaW50Q2xvc2VkRXZlbnQucHJvdG90eXBl
LmluaXREZWZhdWx0c18gPSBmdW5jdGlvbigpIHsKLSAgICB0aGlzLmlkID0gMDsKLSAgICB0aGlz
LmRpc2Nvbm5lY3RSZWFzb24gPSBudWxsOwotICB9OwotICBQZWVyQXNzb2NpYXRlZEVuZHBvaW50
Q2xvc2VkRXZlbnQucHJvdG90eXBlLmluaXRGaWVsZHNfID0gZnVuY3Rpb24oZmllbGRzKSB7Ci0g
ICAgZm9yKHZhciBmaWVsZCBpbiBmaWVsZHMpIHsKLSAgICAgICAgaWYgKHRoaXMuaGFzT3duUHJv
cGVydHkoZmllbGQpKQotICAgICAgICAgIHRoaXNbZmllbGRdID0gZmllbGRzW2ZpZWxkXTsKLSAg
ICB9Ci0gIH07Ci0KLSAgUGVlckFzc29jaWF0ZWRFbmRwb2ludENsb3NlZEV2ZW50LnZhbGlkYXRl
ID0gZnVuY3Rpb24obWVzc2FnZVZhbGlkYXRvciwgb2Zmc2V0KSB7Ci0gICAgdmFyIGVycjsKLSAg
ICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0SGVhZGVyKG9mZnNldCwgY29k
ZWMua1N0cnVjdEhlYWRlclNpemUpOwotICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0
aW9uRXJyb3IuTk9ORSkKLSAgICAgICAgcmV0dXJuIGVycjsKLQotICAgIHZhciBrVmVyc2lvblNp
emVzID0gWwotICAgICAge3ZlcnNpb246IDAsIG51bUJ5dGVzOiAyNH0KLSAgICBdOwotICAgIGVy
ciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RWZXJzaW9uKG9mZnNldCwga1ZlcnNp
b25TaXplcyk7Ci0gICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05F
KQotICAgICAgICByZXR1cm4gZXJyOwotCi0KLQotICAgIC8vIHZhbGlkYXRlIFBlZXJBc3NvY2lh
dGVkRW5kcG9pbnRDbG9zZWRFdmVudC5kaXNjb25uZWN0UmVhc29uCi0gICAgZXJyID0gbWVzc2Fn
ZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdFBvaW50ZXIob2Zmc2V0ICsgY29kZWMua1N0cnVjdEhl
YWRlclNpemUgKyA4LCBEaXNjb25uZWN0UmVhc29uLCB0cnVlKTsKLSAgICBpZiAoZXJyICE9PSB2
YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCi0gICAgICAgIHJldHVybiBlcnI7Ci0KLSAg
ICByZXR1cm4gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FOwotICB9OwotCi0gIFBlZXJB
c3NvY2lhdGVkRW5kcG9pbnRDbG9zZWRFdmVudC5lbmNvZGVkU2l6ZSA9IGNvZGVjLmtTdHJ1Y3RI
ZWFkZXJTaXplICsgMTY7Ci0KLSAgUGVlckFzc29jaWF0ZWRFbmRwb2ludENsb3NlZEV2ZW50LmRl
Y29kZSA9IGZ1bmN0aW9uKGRlY29kZXIpIHsKLSAgICB2YXIgcGFja2VkOwotICAgIHZhciB2YWwg
PSBuZXcgUGVlckFzc29jaWF0ZWRFbmRwb2ludENsb3NlZEV2ZW50KCk7Ci0gICAgdmFyIG51bWJl
ck9mQnl0ZXMgPSBkZWNvZGVyLnJlYWRVaW50MzIoKTsKLSAgICB2YXIgdmVyc2lvbiA9IGRlY29k
ZXIucmVhZFVpbnQzMigpOwotICAgIHZhbC5pZCA9IGRlY29kZXIuZGVjb2RlU3RydWN0KGNvZGVj
LlVpbnQzMik7Ci0gICAgZGVjb2Rlci5za2lwKDEpOwotICAgIGRlY29kZXIuc2tpcCgxKTsKLSAg
ICBkZWNvZGVyLnNraXAoMSk7Ci0gICAgZGVjb2Rlci5za2lwKDEpOwotICAgIHZhbC5kaXNjb25u
ZWN0UmVhc29uID0gZGVjb2Rlci5kZWNvZGVTdHJ1Y3RQb2ludGVyKERpc2Nvbm5lY3RSZWFzb24p
OwotICAgIHJldHVybiB2YWw7Ci0gIH07Ci0KLSAgUGVlckFzc29jaWF0ZWRFbmRwb2ludENsb3Nl
ZEV2ZW50LmVuY29kZSA9IGZ1bmN0aW9uKGVuY29kZXIsIHZhbCkgewotICAgIHZhciBwYWNrZWQ7
Ci0gICAgZW5jb2Rlci53cml0ZVVpbnQzMihQZWVyQXNzb2NpYXRlZEVuZHBvaW50Q2xvc2VkRXZl
bnQuZW5jb2RlZFNpemUpOwotICAgIGVuY29kZXIud3JpdGVVaW50MzIoMCk7Ci0gICAgZW5jb2Rl
ci5lbmNvZGVTdHJ1Y3QoY29kZWMuVWludDMyLCB2YWwuaWQpOwotICAgIGVuY29kZXIuc2tpcCgx
KTsKLSAgICBlbmNvZGVyLnNraXAoMSk7Ci0gICAgZW5jb2Rlci5za2lwKDEpOwotICAgIGVuY29k
ZXIuc2tpcCgxKTsKLSAgICBlbmNvZGVyLmVuY29kZVN0cnVjdFBvaW50ZXIoRGlzY29ubmVjdFJl
YXNvbiwgdmFsLmRpc2Nvbm5lY3RSZWFzb24pOwotICB9OwotCi0gIGZ1bmN0aW9uIFJ1bk9yQ2xv
c2VQaXBlSW5wdXQodmFsdWUpIHsKLSAgICB0aGlzLmluaXREZWZhdWx0XygpOwotICAgIHRoaXMu
aW5pdFZhbHVlXyh2YWx1ZSk7Ci0gIH0KLQotCi0gIFJ1bk9yQ2xvc2VQaXBlSW5wdXQuVGFncyA9
IHsKLSAgICBwZWVyQXNzb2NpYXRlZEVuZHBvaW50Q2xvc2VkRXZlbnQ6IDAsCi0gIH07Ci0KLSAg
UnVuT3JDbG9zZVBpcGVJbnB1dC5wcm90b3R5cGUuaW5pdERlZmF1bHRfID0gZnVuY3Rpb24oKSB7
Ci0gICAgdGhpcy4kZGF0YSA9IG51bGw7Ci0gICAgdGhpcy4kdGFnID0gdW5kZWZpbmVkOwotICB9
Ci0KLSAgUnVuT3JDbG9zZVBpcGVJbnB1dC5wcm90b3R5cGUuaW5pdFZhbHVlXyA9IGZ1bmN0aW9u
KHZhbHVlKSB7Ci0gICAgaWYgKHZhbHVlID09IHVuZGVmaW5lZCkgewotICAgICAgcmV0dXJuOwot
ICAgIH0KLQotICAgIHZhciBrZXlzID0gT2JqZWN0LmtleXModmFsdWUpOwotICAgIGlmIChrZXlz
Lmxlbmd0aCA9PSAwKSB7Ci0gICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKGtleXMubGVu
Z3RoID4gMSkgewotICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigiWW91IG1heSBzZXQgb25seSBv
bmUgbWVtYmVyIG9uIGEgdW5pb24uIik7Ci0gICAgfQotCi0gICAgdmFyIGZpZWxkcyA9IFsKLSAg
ICAgICAgInBlZXJBc3NvY2lhdGVkRW5kcG9pbnRDbG9zZWRFdmVudCIsCi0gICAgXTsKLQotICAg
IGlmIChmaWVsZHMuaW5kZXhPZihrZXlzWzBdKSA8IDApIHsKLSAgICAgIHRocm93IG5ldyBSZWZl
cmVuY2VFcnJvcihrZXlzWzBdICsgIiBpcyBub3QgYSBSdW5PckNsb3NlUGlwZUlucHV0IG1lbWJl
ci4iKTsKLQotICAgIH0KLQotICAgIHRoaXNba2V5c1swXV0gPSB2YWx1ZVtrZXlzWzBdXTsKLSAg
fQotICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUnVuT3JDbG9zZVBpcGVJbnB1dC5wcm90b3R5cGUs
ICJwZWVyQXNzb2NpYXRlZEVuZHBvaW50Q2xvc2VkRXZlbnQiLCB7Ci0gICAgZ2V0OiBmdW5jdGlv
bigpIHsKLSAgICAgIGlmICh0aGlzLiR0YWcgIT0gUnVuT3JDbG9zZVBpcGVJbnB1dC5UYWdzLnBl
ZXJBc3NvY2lhdGVkRW5kcG9pbnRDbG9zZWRFdmVudCkgewotICAgICAgICB0aHJvdyBuZXcgUmVm
ZXJlbmNlRXJyb3IoCi0gICAgICAgICAgICAiUnVuT3JDbG9zZVBpcGVJbnB1dC5wZWVyQXNzb2Np
YXRlZEVuZHBvaW50Q2xvc2VkRXZlbnQgaXMgbm90IGN1cnJlbnRseSBzZXQuIik7Ci0gICAgICB9
Ci0gICAgICByZXR1cm4gdGhpcy4kZGF0YTsKLSAgICB9LAotCi0gICAgc2V0OiBmdW5jdGlvbih2
YWx1ZSkgewotICAgICAgdGhpcy4kdGFnID0gUnVuT3JDbG9zZVBpcGVJbnB1dC5UYWdzLnBlZXJB
c3NvY2lhdGVkRW5kcG9pbnRDbG9zZWRFdmVudDsKLSAgICAgIHRoaXMuJGRhdGEgPSB2YWx1ZTsK
LSAgICB9Ci0gIH0pOwotCi0KLSAgICBSdW5PckNsb3NlUGlwZUlucHV0LmVuY29kZSA9IGZ1bmN0
aW9uKGVuY29kZXIsIHZhbCkgewotICAgICAgaWYgKHZhbCA9PSBudWxsKSB7Ci0gICAgICAgIGVu
Y29kZXIud3JpdGVVaW50NjQoMCk7Ci0gICAgICAgIGVuY29kZXIud3JpdGVVaW50NjQoMCk7Ci0g
ICAgICAgIHJldHVybjsKLSAgICAgIH0KLSAgICAgIGlmICh2YWwuJHRhZyA9PSB1bmRlZmluZWQp
IHsKLSAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGVuY29kZSB1bmlvbnMgd2l0
aCBhbiB1bmtub3duIG1lbWJlciBzZXQuIik7Ci0gICAgICB9Ci0KLSAgICAgIGVuY29kZXIud3Jp
dGVVaW50MzIoMTYpOwotICAgICAgZW5jb2Rlci53cml0ZVVpbnQzMih2YWwuJHRhZyk7Ci0gICAg
ICBzd2l0Y2ggKHZhbC4kdGFnKSB7Ci0gICAgICAgIGNhc2UgUnVuT3JDbG9zZVBpcGVJbnB1dC5U
YWdzLnBlZXJBc3NvY2lhdGVkRW5kcG9pbnRDbG9zZWRFdmVudDoKLSAgICAgICAgICBlbmNvZGVy
LmVuY29kZVN0cnVjdFBvaW50ZXIoUGVlckFzc29jaWF0ZWRFbmRwb2ludENsb3NlZEV2ZW50LCB2
YWwucGVlckFzc29jaWF0ZWRFbmRwb2ludENsb3NlZEV2ZW50KTsKLSAgICAgICAgICBicmVhazsK
LSAgICAgIH0KLSAgICAgIGVuY29kZXIuYWxpZ24oKTsKLSAgICB9OwotCi0KLSAgICBSdW5PckNs
b3NlUGlwZUlucHV0LmRlY29kZSA9IGZ1bmN0aW9uKGRlY29kZXIpIHsKLSAgICAgIHZhciBzaXpl
ID0gZGVjb2Rlci5yZWFkVWludDMyKCk7Ci0gICAgICBpZiAoc2l6ZSA9PSAwKSB7Ci0gICAgICAg
IGRlY29kZXIucmVhZFVpbnQzMigpOwotICAgICAgICBkZWNvZGVyLnJlYWRVaW50NjQoKTsKLSAg
ICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICB9Ci0KLSAgICAgIHZhciByZXN1bHQgPSBuZXcgUnVu
T3JDbG9zZVBpcGVJbnB1dCgpOwotICAgICAgdmFyIHRhZyA9IGRlY29kZXIucmVhZFVpbnQzMigp
OwotICAgICAgc3dpdGNoICh0YWcpIHsKLSAgICAgICAgY2FzZSBSdW5PckNsb3NlUGlwZUlucHV0
LlRhZ3MucGVlckFzc29jaWF0ZWRFbmRwb2ludENsb3NlZEV2ZW50OgotICAgICAgICAgIHJlc3Vs
dC5wZWVyQXNzb2NpYXRlZEVuZHBvaW50Q2xvc2VkRXZlbnQgPSBkZWNvZGVyLmRlY29kZVN0cnVj
dFBvaW50ZXIoUGVlckFzc29jaWF0ZWRFbmRwb2ludENsb3NlZEV2ZW50KTsKLSAgICAgICAgICBi
cmVhazsKLSAgICAgIH0KLSAgICAgIGRlY29kZXIuYWxpZ24oKTsKLQotICAgICAgcmV0dXJuIHJl
c3VsdDsKLSAgICB9OwotCi0KLSAgICBSdW5PckNsb3NlUGlwZUlucHV0LnZhbGlkYXRlID0gZnVu
Y3Rpb24obWVzc2FnZVZhbGlkYXRvciwgb2Zmc2V0KSB7Ci0gICAgICB2YXIgc2l6ZSA9IG1lc3Nh
Z2VWYWxpZGF0b3IuZGVjb2RlVW5pb25TaXplKG9mZnNldCk7Ci0gICAgICBpZiAoc2l6ZSAhPSAx
NikgewotICAgICAgICByZXR1cm4gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5JTlZBTElEX1VO
SU9OX1NJWkU7Ci0gICAgICB9Ci0KLSAgICAgIHZhciB0YWcgPSBtZXNzYWdlVmFsaWRhdG9yLmRl
Y29kZVVuaW9uVGFnKG9mZnNldCk7Ci0gICAgICB2YXIgZGF0YV9vZmZzZXQgPSBvZmZzZXQgKyA4
OwotICAgICAgdmFyIGVycjsKLSAgICAgIHN3aXRjaCAodGFnKSB7Ci0gICAgICAgIGNhc2UgUnVu
T3JDbG9zZVBpcGVJbnB1dC5UYWdzLnBlZXJBc3NvY2lhdGVkRW5kcG9pbnRDbG9zZWRFdmVudDoK
LSAgICAgICAgICAKLQotICAgIC8vIHZhbGlkYXRlIFJ1bk9yQ2xvc2VQaXBlSW5wdXQucGVlckFz
c29jaWF0ZWRFbmRwb2ludENsb3NlZEV2ZW50Ci0gICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52
YWxpZGF0ZVN0cnVjdFBvaW50ZXIoZGF0YV9vZmZzZXQsIFBlZXJBc3NvY2lhdGVkRW5kcG9pbnRD
bG9zZWRFdmVudCwgZmFsc2UpOwotICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9u
RXJyb3IuTk9ORSkKLSAgICAgICAgcmV0dXJuIGVycjsKLSAgICAgICAgICBicmVhazsKLSAgICAg
IH0KLQotICAgICAgcmV0dXJuIHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORTsKLSAgICB9
OwotCi0gIFJ1bk9yQ2xvc2VQaXBlSW5wdXQuZW5jb2RlZFNpemUgPSAxNjsKLSAgZXhwb3J0cy5r
UnVuT3JDbG9zZVBpcGVNZXNzYWdlSWQgPSBrUnVuT3JDbG9zZVBpcGVNZXNzYWdlSWQ7Ci0gIGV4
cG9ydHMuUnVuT3JDbG9zZVBpcGVNZXNzYWdlUGFyYW1zID0gUnVuT3JDbG9zZVBpcGVNZXNzYWdl
UGFyYW1zOwotICBleHBvcnRzLkRpc2Nvbm5lY3RSZWFzb24gPSBEaXNjb25uZWN0UmVhc29uOwot
ICBleHBvcnRzLlBlZXJBc3NvY2lhdGVkRW5kcG9pbnRDbG9zZWRFdmVudCA9IFBlZXJBc3NvY2lh
dGVkRW5kcG9pbnRDbG9zZWRFdmVudDsKLSAgZXhwb3J0cy5SdW5PckNsb3NlUGlwZUlucHV0ID0g
UnVuT3JDbG9zZVBpcGVJbnB1dDsKLX0pKCk7CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbXBv
cnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS9tb2pvX2JpbmRp
bmdzLmpzLmhlYWRlcnMgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRl
c3RzL3Jlc291cmNlcy9jaHJvbWl1bS9tb2pvX2JpbmRpbmdzLmpzLmhlYWRlcnMKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY4MDVjMzIzZGY1YTk3NTIzMTY0OGI4MzBlMzNjZTE4M2Mz
Y2JiZDMuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvTGF5
b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21p
dW0vbW9qb19iaW5kaW5ncy5qcy5oZWFkZXJzCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAot
Q29udGVudC1UeXBlOiB0ZXh0L2phdmFzY3JpcHQ7IGNoYXJzZXQ9dXRmLTgKZGlmZiAtLWdpdCBh
L0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2No
cm9taXVtL21vam9fd2ViX3Rlc3RfaGVscGVyX3Rlc3QubW9qb20uanMgYi9MYXlvdXRUZXN0cy9p
bXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS9tb2pvX3dl
Yl90ZXN0X2hlbHBlcl90ZXN0Lm1vam9tLmpzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCBjZmJhZDA4Njg5ODc3OGI5MjBjMmQ3NTA4OTBjODcwZTA4MmRjNjBhLi4wMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3cz
Yy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL21vam9fd2ViX3Rlc3RfaGVs
cGVyX3Rlc3QubW9qb20uanMKKysrIC9kZXYvbnVsbApAQCAtMSwyNjQgKzAsMCBAQAotLy8gQ29w
eXJpZ2h0IDIwMTQgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0v
LyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNl
bnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotCi0ndXNlIHN0
cmljdCc7Ci0KLShmdW5jdGlvbigpIHsKLSAgdmFyIG1vam9tSWQgPSAnY29udGVudC90ZXN0L2Rh
dGEvbW9qb193ZWJfdGVzdF9oZWxwZXJfdGVzdC5tb2pvbSc7Ci0gIGlmIChtb2pvLmludGVybmFs
LmlzTW9qb21Mb2FkZWQobW9qb21JZCkpIHsKLSAgICBjb25zb2xlLndhcm4oJ1RoZSBmb2xsb3dp
bmcgbW9qb20gaXMgbG9hZGVkIG11bHRpcGxlIHRpbWVzOiAnICsgbW9qb21JZCk7Ci0gICAgcmV0
dXJuOwotICB9Ci0gIG1vam8uaW50ZXJuYWwubWFya01vam9tTG9hZGVkKG1vam9tSWQpOwotCi0g
IC8vIFRPRE8oeXpzaGVuKTogRGVmaW5lIHRoZXNlIGFsaWFzZXMgdG8gbWluaW1pemUgdGhlIGRp
ZmZlcmVuY2VzIGJldHdlZW4gdGhlCi0gIC8vIG9sZC9uZXcgbW9kZXMuIFJlbW92ZSB0aGVtIHdo
ZW4gdGhlIG9sZCBtb2RlIGdvZXMgYXdheS4KLSAgdmFyIGJpbmRpbmdzID0gbW9qbzsKLSAgdmFy
IGFzc29jaWF0ZWRCaW5kaW5ncyA9IG1vam87Ci0gIHZhciBjb2RlYyA9IG1vam8uaW50ZXJuYWw7
Ci0gIHZhciB2YWxpZGF0b3IgPSBtb2pvLmludGVybmFsOwotCi0gIHZhciBleHBvcnRzID0gbW9q
by5pbnRlcm5hbC5leHBvc2VOYW1lc3BhY2UoJ2NvbnRlbnQubW9qb20nKTsKLQotCi0KLSAgZnVu
Y3Rpb24gTW9qb1dlYlRlc3RIZWxwZXJfUmV2ZXJzZV9QYXJhbXModmFsdWVzKSB7Ci0gICAgdGhp
cy5pbml0RGVmYXVsdHNfKCk7Ci0gICAgdGhpcy5pbml0RmllbGRzXyh2YWx1ZXMpOwotICB9Ci0K
LQotICBNb2pvV2ViVGVzdEhlbHBlcl9SZXZlcnNlX1BhcmFtcy5wcm90b3R5cGUuaW5pdERlZmF1
bHRzXyA9IGZ1bmN0aW9uKCkgewotICAgIHRoaXMubWVzc2FnZSA9IG51bGw7Ci0gIH07Ci0gIE1v
am9XZWJUZXN0SGVscGVyX1JldmVyc2VfUGFyYW1zLnByb3RvdHlwZS5pbml0RmllbGRzXyA9IGZ1
bmN0aW9uKGZpZWxkcykgewotICAgIGZvcih2YXIgZmllbGQgaW4gZmllbGRzKSB7Ci0gICAgICAg
IGlmICh0aGlzLmhhc093blByb3BlcnR5KGZpZWxkKSkKLSAgICAgICAgICB0aGlzW2ZpZWxkXSA9
IGZpZWxkc1tmaWVsZF07Ci0gICAgfQotICB9OwotCi0gIE1vam9XZWJUZXN0SGVscGVyX1JldmVy
c2VfUGFyYW1zLnZhbGlkYXRlID0gZnVuY3Rpb24obWVzc2FnZVZhbGlkYXRvciwgb2Zmc2V0KSB7
Ci0gICAgdmFyIGVycjsKLSAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0
SGVhZGVyKG9mZnNldCwgY29kZWMua1N0cnVjdEhlYWRlclNpemUpOwotICAgIGlmIChlcnIgIT09
IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKLSAgICAgICAgcmV0dXJuIGVycjsKLQot
ICAgIHZhciBrVmVyc2lvblNpemVzID0gWwotICAgICAge3ZlcnNpb246IDAsIG51bUJ5dGVzOiAx
Nn0KLSAgICBdOwotICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RWZXJz
aW9uKG9mZnNldCwga1ZlcnNpb25TaXplcyk7Ci0gICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZh
bGlkYXRpb25FcnJvci5OT05FKQotICAgICAgICByZXR1cm4gZXJyOwotCi0KLSAgICAvLyB2YWxp
ZGF0ZSBNb2pvV2ViVGVzdEhlbHBlcl9SZXZlcnNlX1BhcmFtcy5tZXNzYWdlCi0gICAgZXJyID0g
bWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cmluZ1BvaW50ZXIob2Zmc2V0ICsgY29kZWMua1N0
cnVjdEhlYWRlclNpemUgKyAwLCBmYWxzZSkKLSAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFs
aWRhdGlvbkVycm9yLk5PTkUpCi0gICAgICAgIHJldHVybiBlcnI7Ci0KLSAgICByZXR1cm4gdmFs
aWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FOwotICB9OwotCi0gIE1vam9XZWJUZXN0SGVscGVy
X1JldmVyc2VfUGFyYW1zLmVuY29kZWRTaXplID0gY29kZWMua1N0cnVjdEhlYWRlclNpemUgKyA4
OwotCi0gIE1vam9XZWJUZXN0SGVscGVyX1JldmVyc2VfUGFyYW1zLmRlY29kZSA9IGZ1bmN0aW9u
KGRlY29kZXIpIHsKLSAgICB2YXIgcGFja2VkOwotICAgIHZhciB2YWwgPSBuZXcgTW9qb1dlYlRl
c3RIZWxwZXJfUmV2ZXJzZV9QYXJhbXMoKTsKLSAgICB2YXIgbnVtYmVyT2ZCeXRlcyA9IGRlY29k
ZXIucmVhZFVpbnQzMigpOwotICAgIHZhciB2ZXJzaW9uID0gZGVjb2Rlci5yZWFkVWludDMyKCk7
Ci0gICAgdmFsLm1lc3NhZ2UgPSBkZWNvZGVyLmRlY29kZVN0cnVjdChjb2RlYy5TdHJpbmcpOwot
ICAgIHJldHVybiB2YWw7Ci0gIH07Ci0KLSAgTW9qb1dlYlRlc3RIZWxwZXJfUmV2ZXJzZV9QYXJh
bXMuZW5jb2RlID0gZnVuY3Rpb24oZW5jb2RlciwgdmFsKSB7Ci0gICAgdmFyIHBhY2tlZDsKLSAg
ICBlbmNvZGVyLndyaXRlVWludDMyKE1vam9XZWJUZXN0SGVscGVyX1JldmVyc2VfUGFyYW1zLmVu
Y29kZWRTaXplKTsKLSAgICBlbmNvZGVyLndyaXRlVWludDMyKDApOwotICAgIGVuY29kZXIuZW5j
b2RlU3RydWN0KGNvZGVjLlN0cmluZywgdmFsLm1lc3NhZ2UpOwotICB9OwotICBmdW5jdGlvbiBN
b2pvV2ViVGVzdEhlbHBlcl9SZXZlcnNlX1Jlc3BvbnNlUGFyYW1zKHZhbHVlcykgewotICAgIHRo
aXMuaW5pdERlZmF1bHRzXygpOwotICAgIHRoaXMuaW5pdEZpZWxkc18odmFsdWVzKTsKLSAgfQot
Ci0KLSAgTW9qb1dlYlRlc3RIZWxwZXJfUmV2ZXJzZV9SZXNwb25zZVBhcmFtcy5wcm90b3R5cGUu
aW5pdERlZmF1bHRzXyA9IGZ1bmN0aW9uKCkgewotICAgIHRoaXMucmV2ZXJzZWQgPSBudWxsOwot
ICB9OwotICBNb2pvV2ViVGVzdEhlbHBlcl9SZXZlcnNlX1Jlc3BvbnNlUGFyYW1zLnByb3RvdHlw
ZS5pbml0RmllbGRzXyA9IGZ1bmN0aW9uKGZpZWxkcykgewotICAgIGZvcih2YXIgZmllbGQgaW4g
ZmllbGRzKSB7Ci0gICAgICAgIGlmICh0aGlzLmhhc093blByb3BlcnR5KGZpZWxkKSkKLSAgICAg
ICAgICB0aGlzW2ZpZWxkXSA9IGZpZWxkc1tmaWVsZF07Ci0gICAgfQotICB9OwotCi0gIE1vam9X
ZWJUZXN0SGVscGVyX1JldmVyc2VfUmVzcG9uc2VQYXJhbXMudmFsaWRhdGUgPSBmdW5jdGlvbiht
ZXNzYWdlVmFsaWRhdG9yLCBvZmZzZXQpIHsKLSAgICB2YXIgZXJyOwotICAgIGVyciA9IG1lc3Nh
Z2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RIZWFkZXIob2Zmc2V0LCBjb2RlYy5rU3RydWN0SGVh
ZGVyU2l6ZSk7Ci0gICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05F
KQotICAgICAgICByZXR1cm4gZXJyOwotCi0gICAgdmFyIGtWZXJzaW9uU2l6ZXMgPSBbCi0gICAg
ICB7dmVyc2lvbjogMCwgbnVtQnl0ZXM6IDE2fQotICAgIF07Ci0gICAgZXJyID0gbWVzc2FnZVZh
bGlkYXRvci52YWxpZGF0ZVN0cnVjdFZlcnNpb24ob2Zmc2V0LCBrVmVyc2lvblNpemVzKTsKLSAg
ICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCi0gICAgICAgIHJl
dHVybiBlcnI7Ci0KLQotICAgIC8vIHZhbGlkYXRlIE1vam9XZWJUZXN0SGVscGVyX1JldmVyc2Vf
UmVzcG9uc2VQYXJhbXMucmV2ZXJzZWQKLSAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlk
YXRlU3RyaW5nUG9pbnRlcihvZmZzZXQgKyBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDAsIGZh
bHNlKQotICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKLSAg
ICAgICAgcmV0dXJuIGVycjsKLQotICAgIHJldHVybiB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9y
Lk5PTkU7Ci0gIH07Ci0KLSAgTW9qb1dlYlRlc3RIZWxwZXJfUmV2ZXJzZV9SZXNwb25zZVBhcmFt
cy5lbmNvZGVkU2l6ZSA9IGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgODsKLQotICBNb2pvV2Vi
VGVzdEhlbHBlcl9SZXZlcnNlX1Jlc3BvbnNlUGFyYW1zLmRlY29kZSA9IGZ1bmN0aW9uKGRlY29k
ZXIpIHsKLSAgICB2YXIgcGFja2VkOwotICAgIHZhciB2YWwgPSBuZXcgTW9qb1dlYlRlc3RIZWxw
ZXJfUmV2ZXJzZV9SZXNwb25zZVBhcmFtcygpOwotICAgIHZhciBudW1iZXJPZkJ5dGVzID0gZGVj
b2Rlci5yZWFkVWludDMyKCk7Ci0gICAgdmFyIHZlcnNpb24gPSBkZWNvZGVyLnJlYWRVaW50MzIo
KTsKLSAgICB2YWwucmV2ZXJzZWQgPSBkZWNvZGVyLmRlY29kZVN0cnVjdChjb2RlYy5TdHJpbmcp
OwotICAgIHJldHVybiB2YWw7Ci0gIH07Ci0KLSAgTW9qb1dlYlRlc3RIZWxwZXJfUmV2ZXJzZV9S
ZXNwb25zZVBhcmFtcy5lbmNvZGUgPSBmdW5jdGlvbihlbmNvZGVyLCB2YWwpIHsKLSAgICB2YXIg
cGFja2VkOwotICAgIGVuY29kZXIud3JpdGVVaW50MzIoTW9qb1dlYlRlc3RIZWxwZXJfUmV2ZXJz
ZV9SZXNwb25zZVBhcmFtcy5lbmNvZGVkU2l6ZSk7Ci0gICAgZW5jb2Rlci53cml0ZVVpbnQzMigw
KTsKLSAgICBlbmNvZGVyLmVuY29kZVN0cnVjdChjb2RlYy5TdHJpbmcsIHZhbC5yZXZlcnNlZCk7
Ci0gIH07Ci0gIHZhciBrTW9qb1dlYlRlc3RIZWxwZXJfUmV2ZXJzZV9OYW1lID0gMDsKLQotICBm
dW5jdGlvbiBNb2pvV2ViVGVzdEhlbHBlclB0cihoYW5kbGVPclB0ckluZm8pIHsKLSAgICB0aGlz
LnB0ciA9IG5ldyBiaW5kaW5ncy5JbnRlcmZhY2VQdHJDb250cm9sbGVyKE1vam9XZWJUZXN0SGVs
cGVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aGFuZGxlT3JQdHJJbmZvKTsKLSAgfQotCi0gIGZ1bmN0aW9uIE1vam9XZWJUZXN0SGVscGVyQXNz
b2NpYXRlZFB0cihhc3NvY2lhdGVkSW50ZXJmYWNlUHRySW5mbykgewotICAgIHRoaXMucHRyID0g
bmV3IGFzc29jaWF0ZWRCaW5kaW5ncy5Bc3NvY2lhdGVkSW50ZXJmYWNlUHRyQ29udHJvbGxlcigK
LSAgICAgICAgTW9qb1dlYlRlc3RIZWxwZXIsIGFzc29jaWF0ZWRJbnRlcmZhY2VQdHJJbmZvKTsK
LSAgfQotCi0gIE1vam9XZWJUZXN0SGVscGVyQXNzb2NpYXRlZFB0ci5wcm90b3R5cGUgPQotICAg
ICAgT2JqZWN0LmNyZWF0ZShNb2pvV2ViVGVzdEhlbHBlclB0ci5wcm90b3R5cGUpOwotICBNb2pv
V2ViVGVzdEhlbHBlckFzc29jaWF0ZWRQdHIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0KLSAgICAg
IE1vam9XZWJUZXN0SGVscGVyQXNzb2NpYXRlZFB0cjsKLQotICBmdW5jdGlvbiBNb2pvV2ViVGVz
dEhlbHBlclByb3h5KHJlY2VpdmVyKSB7Ci0gICAgdGhpcy5yZWNlaXZlcl8gPSByZWNlaXZlcjsK
LSAgfQotICBNb2pvV2ViVGVzdEhlbHBlclB0ci5wcm90b3R5cGUucmV2ZXJzZSA9IGZ1bmN0aW9u
KCkgewotICAgIHJldHVybiBNb2pvV2ViVGVzdEhlbHBlclByb3h5LnByb3RvdHlwZS5yZXZlcnNl
Ci0gICAgICAgIC5hcHBseSh0aGlzLnB0ci5nZXRQcm94eSgpLCBhcmd1bWVudHMpOwotICB9Owot
Ci0gIE1vam9XZWJUZXN0SGVscGVyUHJveHkucHJvdG90eXBlLnJldmVyc2UgPSBmdW5jdGlvbiht
ZXNzYWdlKSB7Ci0gICAgdmFyIHBhcmFtcyA9IG5ldyBNb2pvV2ViVGVzdEhlbHBlcl9SZXZlcnNl
X1BhcmFtcygpOwotICAgIHBhcmFtcy5tZXNzYWdlID0gbWVzc2FnZTsKLSAgICByZXR1cm4gbmV3
IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7Ci0gICAgICB2YXIgYnVpbGRlciA9
IG5ldyBjb2RlYy5NZXNzYWdlVjFCdWlsZGVyKAotICAgICAgICAgIGtNb2pvV2ViVGVzdEhlbHBl
cl9SZXZlcnNlX05hbWUsCi0gICAgICAgICAgY29kZWMuYWxpZ24oTW9qb1dlYlRlc3RIZWxwZXJf
UmV2ZXJzZV9QYXJhbXMuZW5jb2RlZFNpemUpLAotICAgICAgICAgIGNvZGVjLmtNZXNzYWdlRXhw
ZWN0c1Jlc3BvbnNlLCAwKTsKLSAgICAgIGJ1aWxkZXIuZW5jb2RlU3RydWN0KE1vam9XZWJUZXN0
SGVscGVyX1JldmVyc2VfUGFyYW1zLCBwYXJhbXMpOwotICAgICAgdmFyIG1lc3NhZ2UgPSBidWls
ZGVyLmZpbmlzaCgpOwotICAgICAgdGhpcy5yZWNlaXZlcl8uYWNjZXB0QW5kRXhwZWN0UmVzcG9u
c2UobWVzc2FnZSkudGhlbihmdW5jdGlvbihtZXNzYWdlKSB7Ci0gICAgICAgIHZhciByZWFkZXIg
PSBuZXcgY29kZWMuTWVzc2FnZVJlYWRlcihtZXNzYWdlKTsKLSAgICAgICAgdmFyIHJlc3BvbnNl
UGFyYW1zID0KLSAgICAgICAgICAgIHJlYWRlci5kZWNvZGVTdHJ1Y3QoTW9qb1dlYlRlc3RIZWxw
ZXJfUmV2ZXJzZV9SZXNwb25zZVBhcmFtcyk7Ci0gICAgICAgIHJlc29sdmUocmVzcG9uc2VQYXJh
bXMpOwotICAgICAgfSkuY2F0Y2goZnVuY3Rpb24ocmVzdWx0KSB7Ci0gICAgICAgIHJlamVjdChF
cnJvcigiQ29ubmVjdGlvbiBlcnJvcjogIiArIHJlc3VsdCkpOwotICAgICAgfSk7Ci0gICAgfS5i
aW5kKHRoaXMpKTsKLSAgfTsKLQotICBmdW5jdGlvbiBNb2pvV2ViVGVzdEhlbHBlclN0dWIoZGVs
ZWdhdGUpIHsKLSAgICB0aGlzLmRlbGVnYXRlXyA9IGRlbGVnYXRlOwotICB9Ci0gIE1vam9XZWJU
ZXN0SGVscGVyU3R1Yi5wcm90b3R5cGUucmV2ZXJzZSA9IGZ1bmN0aW9uKG1lc3NhZ2UpIHsKLSAg
ICByZXR1cm4gdGhpcy5kZWxlZ2F0ZV8gJiYgdGhpcy5kZWxlZ2F0ZV8ucmV2ZXJzZSAmJiB0aGlz
LmRlbGVnYXRlXy5yZXZlcnNlKG1lc3NhZ2UpOwotICB9Ci0KLSAgTW9qb1dlYlRlc3RIZWxwZXJT
dHViLnByb3RvdHlwZS5hY2NlcHQgPSBmdW5jdGlvbihtZXNzYWdlKSB7Ci0gICAgdmFyIHJlYWRl
ciA9IG5ldyBjb2RlYy5NZXNzYWdlUmVhZGVyKG1lc3NhZ2UpOwotICAgIHN3aXRjaCAocmVhZGVy
Lm1lc3NhZ2VOYW1lKSB7Ci0gICAgZGVmYXVsdDoKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9
Ci0gIH07Ci0KLSAgTW9qb1dlYlRlc3RIZWxwZXJTdHViLnByb3RvdHlwZS5hY2NlcHRXaXRoUmVz
cG9uZGVyID0KLSAgICAgIGZ1bmN0aW9uKG1lc3NhZ2UsIHJlc3BvbmRlcikgewotICAgIHZhciBy
ZWFkZXIgPSBuZXcgY29kZWMuTWVzc2FnZVJlYWRlcihtZXNzYWdlKTsKLSAgICBzd2l0Y2ggKHJl
YWRlci5tZXNzYWdlTmFtZSkgewotICAgIGNhc2Uga01vam9XZWJUZXN0SGVscGVyX1JldmVyc2Vf
TmFtZToKLSAgICAgIHZhciBwYXJhbXMgPSByZWFkZXIuZGVjb2RlU3RydWN0KE1vam9XZWJUZXN0
SGVscGVyX1JldmVyc2VfUGFyYW1zKTsKLSAgICAgIHRoaXMucmV2ZXJzZShwYXJhbXMubWVzc2Fn
ZSkudGhlbihmdW5jdGlvbihyZXNwb25zZSkgewotICAgICAgICB2YXIgcmVzcG9uc2VQYXJhbXMg
PQotICAgICAgICAgICAgbmV3IE1vam9XZWJUZXN0SGVscGVyX1JldmVyc2VfUmVzcG9uc2VQYXJh
bXMoKTsKLSAgICAgICAgcmVzcG9uc2VQYXJhbXMucmV2ZXJzZWQgPSByZXNwb25zZS5yZXZlcnNl
ZDsKLSAgICAgICAgdmFyIGJ1aWxkZXIgPSBuZXcgY29kZWMuTWVzc2FnZVYxQnVpbGRlcigKLSAg
ICAgICAgICAgIGtNb2pvV2ViVGVzdEhlbHBlcl9SZXZlcnNlX05hbWUsCi0gICAgICAgICAgICBj
b2RlYy5hbGlnbihNb2pvV2ViVGVzdEhlbHBlcl9SZXZlcnNlX1Jlc3BvbnNlUGFyYW1zLmVuY29k
ZWRTaXplKSwKLSAgICAgICAgICAgIGNvZGVjLmtNZXNzYWdlSXNSZXNwb25zZSwgcmVhZGVyLnJl
cXVlc3RJRCk7Ci0gICAgICAgIGJ1aWxkZXIuZW5jb2RlU3RydWN0KE1vam9XZWJUZXN0SGVscGVy
X1JldmVyc2VfUmVzcG9uc2VQYXJhbXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJl
c3BvbnNlUGFyYW1zKTsKLSAgICAgICAgdmFyIG1lc3NhZ2UgPSBidWlsZGVyLmZpbmlzaCgpOwot
ICAgICAgICByZXNwb25kZXIuYWNjZXB0KG1lc3NhZ2UpOwotICAgICAgfSk7Ci0gICAgICByZXR1
cm4gdHJ1ZTsKLSAgICBkZWZhdWx0OgotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgfTsK
LQotICBmdW5jdGlvbiB2YWxpZGF0ZU1vam9XZWJUZXN0SGVscGVyUmVxdWVzdChtZXNzYWdlVmFs
aWRhdG9yKSB7Ci0gICAgdmFyIG1lc3NhZ2UgPSBtZXNzYWdlVmFsaWRhdG9yLm1lc3NhZ2U7Ci0g
ICAgdmFyIHBhcmFtc0NsYXNzID0gbnVsbDsKLSAgICBzd2l0Y2ggKG1lc3NhZ2UuZ2V0TmFtZSgp
KSB7Ci0gICAgICBjYXNlIGtNb2pvV2ViVGVzdEhlbHBlcl9SZXZlcnNlX05hbWU6Ci0gICAgICAg
IGlmIChtZXNzYWdlLmV4cGVjdHNSZXNwb25zZSgpKQotICAgICAgICAgIHBhcmFtc0NsYXNzID0g
TW9qb1dlYlRlc3RIZWxwZXJfUmV2ZXJzZV9QYXJhbXM7Ci0gICAgICBicmVhazsKLSAgICB9Ci0g
ICAgaWYgKHBhcmFtc0NsYXNzID09PSBudWxsKQotICAgICAgcmV0dXJuIHZhbGlkYXRvci52YWxp
ZGF0aW9uRXJyb3IuTk9ORTsKLSAgICByZXR1cm4gcGFyYW1zQ2xhc3MudmFsaWRhdGUobWVzc2Fn
ZVZhbGlkYXRvciwgbWVzc2FnZVZhbGlkYXRvci5tZXNzYWdlLmdldEhlYWRlck51bUJ5dGVzKCkp
OwotICB9Ci0KLSAgZnVuY3Rpb24gdmFsaWRhdGVNb2pvV2ViVGVzdEhlbHBlclJlc3BvbnNlKG1l
c3NhZ2VWYWxpZGF0b3IpIHsKLSAgIHZhciBtZXNzYWdlID0gbWVzc2FnZVZhbGlkYXRvci5tZXNz
YWdlOwotICAgdmFyIHBhcmFtc0NsYXNzID0gbnVsbDsKLSAgIHN3aXRjaCAobWVzc2FnZS5nZXRO
YW1lKCkpIHsKLSAgICAgIGNhc2Uga01vam9XZWJUZXN0SGVscGVyX1JldmVyc2VfTmFtZToKLSAg
ICAgICAgaWYgKG1lc3NhZ2UuaXNSZXNwb25zZSgpKQotICAgICAgICAgIHBhcmFtc0NsYXNzID0g
TW9qb1dlYlRlc3RIZWxwZXJfUmV2ZXJzZV9SZXNwb25zZVBhcmFtczsKLSAgICAgICAgYnJlYWs7
Ci0gICAgfQotICAgIGlmIChwYXJhbXNDbGFzcyA9PT0gbnVsbCkKLSAgICAgIHJldHVybiB2YWxp
ZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkU7Ci0gICAgcmV0dXJuIHBhcmFtc0NsYXNzLnZhbGlk
YXRlKG1lc3NhZ2VWYWxpZGF0b3IsIG1lc3NhZ2VWYWxpZGF0b3IubWVzc2FnZS5nZXRIZWFkZXJO
dW1CeXRlcygpKTsKLSAgfQotCi0gIHZhciBNb2pvV2ViVGVzdEhlbHBlciA9IHsKLSAgICBuYW1l
OiAnY29udGVudC5tb2pvbS5Nb2pvV2ViVGVzdEhlbHBlcicsCi0gICAga1ZlcnNpb246IDAsCi0g
ICAgcHRyQ2xhc3M6IE1vam9XZWJUZXN0SGVscGVyUHRyLAotICAgIHByb3h5Q2xhc3M6IE1vam9X
ZWJUZXN0SGVscGVyUHJveHksCi0gICAgc3R1YkNsYXNzOiBNb2pvV2ViVGVzdEhlbHBlclN0dWIs
Ci0gICAgdmFsaWRhdGVSZXF1ZXN0OiB2YWxpZGF0ZU1vam9XZWJUZXN0SGVscGVyUmVxdWVzdCwK
LSAgICB2YWxpZGF0ZVJlc3BvbnNlOiB2YWxpZGF0ZU1vam9XZWJUZXN0SGVscGVyUmVzcG9uc2Us
Ci0gIH07Ci0gIE1vam9XZWJUZXN0SGVscGVyU3R1Yi5wcm90b3R5cGUudmFsaWRhdG9yID0gdmFs
aWRhdGVNb2pvV2ViVGVzdEhlbHBlclJlcXVlc3Q7Ci0gIE1vam9XZWJUZXN0SGVscGVyUHJveHku
cHJvdG90eXBlLnZhbGlkYXRvciA9IHZhbGlkYXRlTW9qb1dlYlRlc3RIZWxwZXJSZXNwb25zZTsK
LSAgZXhwb3J0cy5Nb2pvV2ViVGVzdEhlbHBlciA9IE1vam9XZWJUZXN0SGVscGVyOwotICBleHBv
cnRzLk1vam9XZWJUZXN0SGVscGVyUHRyID0gTW9qb1dlYlRlc3RIZWxwZXJQdHI7Ci0gIGV4cG9y
dHMuTW9qb1dlYlRlc3RIZWxwZXJBc3NvY2lhdGVkUHRyID0gTW9qb1dlYlRlc3RIZWxwZXJBc3Nv
Y2lhdGVkUHRyOwotfSkoKTsKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93
ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL21vam9fd2ViX3Rlc3RfaGVscGVy
X3Rlc3QubW9qb20uanMuaGVhZGVycyBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxh
dGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL21vam9fd2ViX3Rlc3RfaGVscGVyX3Rlc3Qu
bW9qb20uanMuaGVhZGVycwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjgwNWMzMjNk
ZjVhOTc1MjMxNjQ4YjgzMGUzM2NlMTgzYzNjYmJkMy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMAotLS0gYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRm
b3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS9tb2pvX3dlYl90ZXN0X2hlbHBlcl90ZXN0Lm1v
am9tLmpzLmhlYWRlcnMKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi1Db250ZW50LVR5cGU6
IHRleHQvamF2YXNjcmlwdDsgY2hhcnNldD11dGYtOApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMv
aW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vbmZjLW1v
Y2suanMgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291
cmNlcy9jaHJvbWl1bS9uZmMtbW9jay5qcwppbmRleCAxYTdlMTU4MTllNjdjZTBiYzlkMWRiODQx
Y2I0ZjA5MTM2NGU4MTM4Li5hYTk0MjU3ZTJhMzk0ZDAyNzk3MmYyZmQ2ODNlNjcyZWVhZmM4ZDVl
IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3Rz
L3Jlc291cmNlcy9jaHJvbWl1bS9uZmMtbW9jay5qcworKysgYi9MYXlvdXRUZXN0cy9pbXBvcnRl
ZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS9uZmMtbW9jay5qcwpA
QCAtOTQsMTAgKzk0LDEwIEBAIGZ1bmN0aW9uIGNvbXBhcmVOREVGUmVjb3Jkcyhwcm92aWRlZFJl
Y29yZCwgcmVjZWl2ZWRSZWNvcmQpIHsKIC8vIENvbXBhcmVzIE5ERUZXcml0ZU9wdGlvbnMgc3Ry
dWN0dXJlcyB0aGF0IHdlcmUgcHJvdmlkZWQgdG8gQVBJIGFuZAogLy8gcmVjZWl2ZWQgYnkgdGhl
IG1vY2sgbW9qbyBzZXJ2aWNlLgogZnVuY3Rpb24gYXNzZXJ0TkRFRldyaXRlT3B0aW9uc0VxdWFs
KHByb3ZpZGVkLCByZWNlaXZlZCkgewotICBpZiAocHJvdmlkZWQuaWdub3JlUmVhZCAhPT0gdW5k
ZWZpbmVkKQotICAgIGFzc2VydF9lcXVhbHMocHJvdmlkZWQuaWdub3JlUmVhZCwgISFyZWNlaXZl
ZC5pZ25vcmVSZWFkKTsKKyAgaWYgKHByb3ZpZGVkLm92ZXJ3cml0ZSAhPT0gdW5kZWZpbmVkKQor
ICAgIGFzc2VydF9lcXVhbHMocHJvdmlkZWQub3ZlcndyaXRlLCAhIXJlY2VpdmVkLm92ZXJ3cml0
ZSk7CiAgIGVsc2UKLSAgICBhc3NlcnRfZXF1YWxzKCEhcmVjZWl2ZWQuaWdub3JlX3JlYWQsIHRy
dWUpOworICAgIGFzc2VydF9lcXVhbHMoISFyZWNlaXZlZC5vdmVyd3JpdGUsIHRydWUpOwogfQog
CiAvLyBDb21wYXJlcyBOREVGUmVhZGVyT3B0aW9ucyBzdHJ1Y3R1cmVzIHRoYXQgd2VyZSBwcm92
aWRlZCB0byBBUEkgYW5kCkBAIC0xMTgsMzMgKzExOCw2IEBAIGZ1bmN0aW9uIGFzc2VydE5ERUZS
ZWFkZXJPcHRpb25zRXF1YWwocHJvdmlkZWQsIHJlY2VpdmVkKSB7CiAgIH0KIH0KIAotLy8gQ2hl
Y2tzIHdoZXRoZXIgTkRFRlJlYWRlck9wdGlvbnMgYXJlIG1hdGNoZWQgd2l0aCBnaXZlbiBtZXNz
YWdlLgotZnVuY3Rpb24gbWF0Y2hlc1dhdGNoT3B0aW9ucyhtZXNzYWdlLCBvcHRpb25zKSB7Ci0g
IC8vIEEgbWVzc2FnZSB3aXRoIG5vIHJlY29yZHMgaXMgdG8gbm90aWZ5IHRoYXQgdGhlIHRhZyBp
cyBhbHJlYWR5IGZvcm1hdHRlZCB0bwotICAvLyBzdXBwb3J0IE5ERUYgYnV0IGRvZXMgbm90IGNv
bnRhaW4gYSBtZXNzYWdlIHlldC4gV2UgYWx3YXlzIGRpc3BhdGNoIGl0IGZvcgotICAvLyBhbGwg
b3B0aW9ucy4KLSAgaWYgKG1lc3NhZ2UucmVjb3Jkcy5sZW5ndGggPT0gMCkKLSAgICByZXR1cm4g
dHJ1ZTsKLQotICBmb3IgKGxldCByZWNvcmQgb2YgbWVzc2FnZS5yZWNvcmRzKSB7Ci0gICAgaWYg
KG9wdGlvbnMuaWQgIT0gbnVsbCAmJiBvcHRpb25zLmlkICE9PSByZWNvcmQuaWQpIHsKLSAgICAg
IGNvbnRpbnVlOwotICAgIH0KLSAgICBpZiAob3B0aW9ucy5yZWNvcmRUeXBlICE9IG51bGwgJiYK
LSAgICAgICAgb3B0aW9ucy5yZWNvcmRUeXBlICE9PSByZWNvcmQucmVjb3JkVHlwZSkgewotICAg
ICAgY29udGludWU7Ci0gICAgfQotICAgIGlmIChvcHRpb25zLm1lZGlhVHlwZSAhPSBudWxsICYm
IG9wdGlvbnMubWVkaWFUeXBlICE9PSByZWNvcmQubWVkaWFUeXBlKSB7Ci0gICAgICBjb250aW51
ZTsKLSAgICB9Ci0KLSAgICAvLyBGb3VuZCBvbmUgcmVjb3JkIG1hdGNoZXMsIG1lYW5zIHRoZSBt
ZXNzYWdlIG1hdGNoZXMuCi0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLQotICByZXR1cm4gZmFsc2U7
Ci19Ci0KIGZ1bmN0aW9uIGNyZWF0ZU5ERUZFcnJvcih0eXBlKSB7CiAgIHJldHVybiB7CiAgICAg
ZXJyb3I6IHR5cGUgIT0gbnVsbCA/CkBAIC0yMjAsMjMgKzE5MywyMSBAQCB2YXIgV2ViTkZDVGVz
dCA9ICgoKSA9PiB7CiAgICAgICB0aGlzLmNsaWVudF8gPSBjbGllbnQ7CiAgICAgfQogCi0gICAg
YXN5bmMgd2F0Y2gob3B0aW9ucywgaWQpIHsKKyAgICBhc3luYyB3YXRjaChpZCkgewogICAgICAg
YXNzZXJ0X3RydWUoaWQgPiAwKTsKICAgICAgIGxldCBlcnJvciA9IHRoaXMuZ2V0SFdFcnJvcigp
OwogICAgICAgaWYgKGVycm9yKSB7CiAgICAgICAgIHJldHVybiBlcnJvcjsKICAgICAgIH0KIAot
ICAgICAgdGhpcy53YXRjaGVyc18ucHVzaCh7aWQ6IGlkLCBvcHRpb25zOiBvcHRpb25zfSk7Cisg
ICAgICB0aGlzLndhdGNoZXJzXy5wdXNoKHtpZDogaWR9KTsKICAgICAgIC8vIElnbm9yZXMgcmVh
ZGluZyBpZiBORkMgb3BlcmF0aW9uIGlzIHN1c3BlbmRlZAogICAgICAgLy8gb3IgdGhlIE5GQyB0
YWcgZG9lcyBub3QgZXhwb3NlIE5ERUYgdGVjaG5vbG9neS4KICAgICAgIGlmICghdGhpcy5vcGVy
YXRpb25zX3N1c3BlbmRlZF8pIHsKICAgICAgICAgLy8gVHJpZ2dlcnMgb25XYXRjaCBpZiB0aGUg
bmV3IHdhdGNoZXIgbWF0Y2hlcyBleGlzdGluZyBtZXNzYWdlcy4KICAgICAgICAgZm9yIChsZXQg
bWVzc2FnZSBvZiB0aGlzLnJlYWRpbmdfbWVzc2FnZXNfKSB7Ci0gICAgICAgICAgaWYgKG1hdGNo
ZXNXYXRjaE9wdGlvbnMobWVzc2FnZSwgb3B0aW9ucykpIHsKLSAgICAgICAgICAgIHRoaXMuY2xp
ZW50Xy5vbldhdGNoKAotICAgICAgICAgICAgICAgIFtpZF0sIGZha2VfdGFnX3NlcmlhbF9udW1i
ZXIsIHRvTW9qb05ERUZNZXNzYWdlKG1lc3NhZ2UpKTsKLSAgICAgICAgICB9CisgICAgICAgICAg
dGhpcy5jbGllbnRfLm9uV2F0Y2goCisgICAgICAgICAgICAgIFtpZF0sIGZha2VfdGFnX3Nlcmlh
bF9udW1iZXIsIHRvTW9qb05ERUZNZXNzYWdlKG1lc3NhZ2UpKTsKICAgICAgICAgfQogICAgICAg
fQogCkBAIC0zMTksMTYgKzI5MCwxNSBAQCB2YXIgV2ViTkZDVGVzdCA9ICgoKSA9PiB7CiAgICAg
ICB0aGlzLnJlYWRpbmdfbWVzc2FnZXNfLnB1c2gobWVzc2FnZSk7CiAgICAgICAvLyBJZ25vcmVz
IHJlYWRpbmcgaWYgTkZDIG9wZXJhdGlvbiBpcyBzdXNwZW5kZWQuCiAgICAgICBpZih0aGlzLm9w
ZXJhdGlvbnNfc3VzcGVuZGVkXykgcmV0dXJuOwotICAgICAgLy8gSWdub3JlcyByZWFkaW5nIGlm
IE5ERUZXcml0ZU9wdGlvbnMuaWdub3JlUmVhZCBpcyB0cnVlLgotICAgICAgaWYgKHRoaXMucGVu
ZGluZ193cml0ZV9vcHRpb25zXyAmJiB0aGlzLnBlbmRpbmdfd3JpdGVfb3B0aW9uc18uaWdub3Jl
UmVhZCkKKyAgICAgIC8vIHdoZW4gb3ZlcndyaXRlIGlzIGZhbHNlLCB0aGUgd3JpdGUgYWxnb3Jp
dGhtIHdpbGwgcmVhZCB0aGUgTkZDIHRhZworICAgICAgLy8gdG8gZGV0ZXJtaW5lIGlmIGl0IGhh
cyBOREVGIHJlY29yZHMgb24gaXQuCisgICAgICBpZiAodGhpcy5wZW5kaW5nX3dyaXRlX29wdGlv
bnNfICYmIHRoaXMucGVuZGluZ193cml0ZV9vcHRpb25zXy5vdmVyd3JpdGUpCiAgICAgICAgIHJl
dHVybjsKICAgICAgIC8vIFRyaWdnZXJzIG9uV2F0Y2ggaWYgdGhlIG5ldyBtZXNzYWdlIG1hdGNo
ZXMgZXhpc3Rpbmcgd2F0Y2hlcnMuCiAgICAgICBmb3IgKGxldCB3YXRjaGVyIG9mIHRoaXMud2F0
Y2hlcnNfKSB7Ci0gICAgICAgIGlmIChtYXRjaGVzV2F0Y2hPcHRpb25zKG1lc3NhZ2UsIHdhdGNo
ZXIub3B0aW9ucykpIHsKLSAgICAgICAgICB0aGlzLmNsaWVudF8ub25XYXRjaCgKLSAgICAgICAg
ICAgICAgW3dhdGNoZXIuaWRdLCBmYWtlX3RhZ19zZXJpYWxfbnVtYmVyLAotICAgICAgICAgICAg
ICB0b01vam9OREVGTWVzc2FnZShtZXNzYWdlKSk7Ci0gICAgICAgIH0KKyAgICAgICAgdGhpcy5j
bGllbnRfLm9uV2F0Y2goCisgICAgICAgICAgICBbd2F0Y2hlci5pZF0sIGZha2VfdGFnX3Nlcmlh
bF9udW1iZXIsCisgICAgICAgICAgICB0b01vam9OREVGTWVzc2FnZShtZXNzYWdlKSk7CiAgICAg
ICB9CiAgICAgfQogCkBAIC0zNDQsMTEgKzMxNCw5IEBAIHZhciBXZWJORkNUZXN0ID0gKCgpID0+
IHsKICAgICAgIC8vIFJlc3VtZXMgcGVuZGluZyBORkMgcmVhZGluZy4KICAgICAgIGZvciAobGV0
IHdhdGNoZXIgb2YgdGhpcy53YXRjaGVyc18pIHsKICAgICAgICAgZm9yIChsZXQgbWVzc2FnZSBv
ZiB0aGlzLnJlYWRpbmdfbWVzc2FnZXNfKSB7Ci0gICAgICAgICAgaWYgKG1hdGNoZXNXYXRjaE9w
dGlvbnMobWVzc2FnZSwgd2F0Y2hlci5vcHRpb25zKSkgewotICAgICAgICAgICAgdGhpcy5jbGll
bnRfLm9uV2F0Y2goCi0gICAgICAgICAgICAgICAgW3dhdGNoZXIuaWRdLCBmYWtlX3RhZ19zZXJp
YWxfbnVtYmVyLAotICAgICAgICAgICAgICAgIHRvTW9qb05ERUZNZXNzYWdlKG1lc3NhZ2UpKTsK
LSAgICAgICAgICB9CisgICAgICAgICAgdGhpcy5jbGllbnRfLm9uV2F0Y2goCisgICAgICAgICAg
ICAgIFt3YXRjaGVyLmlkXSwgZmFrZV90YWdfc2VyaWFsX251bWJlciwKKyAgICAgICAgICAgICAg
dG9Nb2pvTkRFRk1lc3NhZ2UobWVzc2FnZSkpOwogICAgICAgICB9CiAgICAgICB9CiAgICAgICAv
LyBSZXN1bWVzIHBlbmRpbmcgcHVzaCBvcGVyYXRpb24uCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0
cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS9zZW5z
b3IubW9qb20uanMgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3Rz
L3Jlc291cmNlcy9jaHJvbWl1bS9zZW5zb3IubW9qb20uanMKZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDc1NzhkZDZkNjRmMGU5MWQ5NGM5ZGNjMzI0MzJmZDJjZWFkZDM4YjYuLjAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvTGF5b3V0VGVzdHMvaW1w
b3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vc2Vuc29yLm1v
am9tLmpzCisrKyAvZGV2L251bGwKQEAgLTEsMTA3NCArMCwwIEBACi0vLyBDb3B5cmlnaHQgMjAx
NCBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0
aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBj
YW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLSd1c2Ugc3RyaWN0JzsKLQot
KGZ1bmN0aW9uKCkgewotICB2YXIgbW9qb21JZCA9ICdzZXJ2aWNlcy9kZXZpY2UvcHVibGljL21v
am9tL3NlbnNvci5tb2pvbSc7Ci0gIGlmIChtb2pvLmludGVybmFsLmlzTW9qb21Mb2FkZWQobW9q
b21JZCkpIHsKLSAgICBjb25zb2xlLndhcm4oJ1RoZSBmb2xsb3dpbmcgbW9qb20gaXMgbG9hZGVk
IG11bHRpcGxlIHRpbWVzOiAnICsgbW9qb21JZCk7Ci0gICAgcmV0dXJuOwotICB9Ci0gIG1vam8u
aW50ZXJuYWwubWFya01vam9tTG9hZGVkKG1vam9tSWQpOwotICB2YXIgYmluZGluZ3MgPSBtb2pv
OwotICB2YXIgYXNzb2NpYXRlZEJpbmRpbmdzID0gbW9qbzsKLSAgdmFyIGNvZGVjID0gbW9qby5p
bnRlcm5hbDsKLSAgdmFyIHZhbGlkYXRvciA9IG1vam8uaW50ZXJuYWw7Ci0KLSAgdmFyIGV4cG9y
dHMgPSBtb2pvLmludGVybmFsLmV4cG9zZU5hbWVzcGFjZSgnZGV2aWNlLm1vam9tJyk7Ci0KLQot
ICB2YXIgU2Vuc29yVHlwZSA9IHt9OwotICBTZW5zb3JUeXBlLkFNQklFTlRfTElHSFQgPSAwOwot
ICBTZW5zb3JUeXBlLlBST1hJTUlUWSA9IFNlbnNvclR5cGUuQU1CSUVOVF9MSUdIVCArIDE7Ci0g
IFNlbnNvclR5cGUuQUNDRUxFUk9NRVRFUiA9IFNlbnNvclR5cGUuUFJPWElNSVRZICsgMTsKLSAg
U2Vuc29yVHlwZS5MSU5FQVJfQUNDRUxFUkFUSU9OID0gU2Vuc29yVHlwZS5BQ0NFTEVST01FVEVS
ICsgMTsKLSAgU2Vuc29yVHlwZS5HWVJPU0NPUEUgPSBTZW5zb3JUeXBlLkxJTkVBUl9BQ0NFTEVS
QVRJT04gKyAxOwotICBTZW5zb3JUeXBlLk1BR05FVE9NRVRFUiA9IFNlbnNvclR5cGUuR1lST1ND
T1BFICsgMTsKLSAgU2Vuc29yVHlwZS5QUkVTU1VSRSA9IFNlbnNvclR5cGUuTUFHTkVUT01FVEVS
ICsgMTsKLSAgU2Vuc29yVHlwZS5BQlNPTFVURV9PUklFTlRBVElPTl9FVUxFUl9BTkdMRVMgPSBT
ZW5zb3JUeXBlLlBSRVNTVVJFICsgMTsKLSAgU2Vuc29yVHlwZS5BQlNPTFVURV9PUklFTlRBVElP
Tl9RVUFURVJOSU9OID0gU2Vuc29yVHlwZS5BQlNPTFVURV9PUklFTlRBVElPTl9FVUxFUl9BTkdM
RVMgKyAxOwotICBTZW5zb3JUeXBlLlJFTEFUSVZFX09SSUVOVEFUSU9OX0VVTEVSX0FOR0xFUyA9
IFNlbnNvclR5cGUuQUJTT0xVVEVfT1JJRU5UQVRJT05fUVVBVEVSTklPTiArIDE7Ci0gIFNlbnNv
clR5cGUuUkVMQVRJVkVfT1JJRU5UQVRJT05fUVVBVEVSTklPTiA9IFNlbnNvclR5cGUuUkVMQVRJ
VkVfT1JJRU5UQVRJT05fRVVMRVJfQU5HTEVTICsgMTsKLSAgU2Vuc29yVHlwZS5NSU5fVkFMVUUg
PSAwLAotICBTZW5zb3JUeXBlLk1BWF9WQUxVRSA9IDEwLAotCi0gIFNlbnNvclR5cGUuaXNLbm93
bkVudW1WYWx1ZSA9IGZ1bmN0aW9uKHZhbHVlKSB7Ci0gICAgc3dpdGNoICh2YWx1ZSkgewotICAg
IGNhc2UgMDoKLSAgICBjYXNlIDE6Ci0gICAgY2FzZSAyOgotICAgIGNhc2UgMzoKLSAgICBjYXNl
IDQ6Ci0gICAgY2FzZSA1OgotICAgIGNhc2UgNjoKLSAgICBjYXNlIDc6Ci0gICAgY2FzZSA4Ogot
ICAgIGNhc2UgOToKLSAgICBjYXNlIDEwOgotICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAg
IHJldHVybiBmYWxzZTsKLSAgfTsKLQotICBTZW5zb3JUeXBlLnZhbGlkYXRlID0gZnVuY3Rpb24o
ZW51bVZhbHVlKSB7Ci0gICAgdmFyIGlzRXh0ZW5zaWJsZSA9IGZhbHNlOwotICAgIGlmIChpc0V4
dGVuc2libGUgfHwgdGhpcy5pc0tub3duRW51bVZhbHVlKGVudW1WYWx1ZSkpCi0gICAgICByZXR1
cm4gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FOwotCi0gICAgcmV0dXJuIHZhbGlkYXRv
ci52YWxpZGF0aW9uRXJyb3IuVU5LTk9XTl9FTlVNX1ZBTFVFOwotICB9OwotICB2YXIgUmVwb3J0
aW5nTW9kZSA9IHt9OwotICBSZXBvcnRpbmdNb2RlLk9OX0NIQU5HRSA9IDA7Ci0gIFJlcG9ydGlu
Z01vZGUuQ09OVElOVU9VUyA9IFJlcG9ydGluZ01vZGUuT05fQ0hBTkdFICsgMTsKLSAgUmVwb3J0
aW5nTW9kZS5NSU5fVkFMVUUgPSAwLAotICBSZXBvcnRpbmdNb2RlLk1BWF9WQUxVRSA9IDEsCi0K
LSAgUmVwb3J0aW5nTW9kZS5pc0tub3duRW51bVZhbHVlID0gZnVuY3Rpb24odmFsdWUpIHsKLSAg
ICBzd2l0Y2ggKHZhbHVlKSB7Ci0gICAgY2FzZSAwOgotICAgIGNhc2UgMToKLSAgICAgIHJldHVy
biB0cnVlOwotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci0gIH07Ci0KLSAgUmVwb3J0aW5nTW9k
ZS52YWxpZGF0ZSA9IGZ1bmN0aW9uKGVudW1WYWx1ZSkgewotICAgIHZhciBpc0V4dGVuc2libGUg
PSBmYWxzZTsKLSAgICBpZiAoaXNFeHRlbnNpYmxlIHx8IHRoaXMuaXNLbm93bkVudW1WYWx1ZShl
bnVtVmFsdWUpKQotICAgICAgcmV0dXJuIHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORTsK
LQotICAgIHJldHVybiB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLlVOS05PV05fRU5VTV9WQUxV
RTsKLSAgfTsKLQotICBmdW5jdGlvbiBTZW5zb3JDb25maWd1cmF0aW9uKHZhbHVlcykgewotICAg
IHRoaXMuaW5pdERlZmF1bHRzXygpOwotICAgIHRoaXMuaW5pdEZpZWxkc18odmFsdWVzKTsKLSAg
fQotCi0KLSAgU2Vuc29yQ29uZmlndXJhdGlvbi5wcm90b3R5cGUuaW5pdERlZmF1bHRzXyA9IGZ1
bmN0aW9uKCkgewotICAgIHRoaXMuZnJlcXVlbmN5ID0gMDsKLSAgfTsKLSAgU2Vuc29yQ29uZmln
dXJhdGlvbi5wcm90b3R5cGUuaW5pdEZpZWxkc18gPSBmdW5jdGlvbihmaWVsZHMpIHsKLSAgICBm
b3IodmFyIGZpZWxkIGluIGZpZWxkcykgewotICAgICAgICBpZiAodGhpcy5oYXNPd25Qcm9wZXJ0
eShmaWVsZCkpCi0gICAgICAgICAgdGhpc1tmaWVsZF0gPSBmaWVsZHNbZmllbGRdOwotICAgIH0K
LSAgfTsKLQotICBTZW5zb3JDb25maWd1cmF0aW9uLnZhbGlkYXRlID0gZnVuY3Rpb24obWVzc2Fn
ZVZhbGlkYXRvciwgb2Zmc2V0KSB7Ci0gICAgdmFyIGVycjsKLSAgICBlcnIgPSBtZXNzYWdlVmFs
aWRhdG9yLnZhbGlkYXRlU3RydWN0SGVhZGVyKG9mZnNldCwgY29kZWMua1N0cnVjdEhlYWRlclNp
emUpOwotICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKLSAg
ICAgICAgcmV0dXJuIGVycjsKLQotICAgIHZhciBrVmVyc2lvblNpemVzID0gWwotICAgICAge3Zl
cnNpb246IDAsIG51bUJ5dGVzOiAxNn0KLSAgICBdOwotICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0
b3IudmFsaWRhdGVTdHJ1Y3RWZXJzaW9uKG9mZnNldCwga1ZlcnNpb25TaXplcyk7Ci0gICAgaWYg
KGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQotICAgICAgICByZXR1cm4g
ZXJyOwotCi0KLSAgICByZXR1cm4gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FOwotICB9
OwotCi0gIFNlbnNvckNvbmZpZ3VyYXRpb24uZW5jb2RlZFNpemUgPSBjb2RlYy5rU3RydWN0SGVh
ZGVyU2l6ZSArIDg7Ci0KLSAgU2Vuc29yQ29uZmlndXJhdGlvbi5kZWNvZGUgPSBmdW5jdGlvbihk
ZWNvZGVyKSB7Ci0gICAgdmFyIHBhY2tlZDsKLSAgICB2YXIgdmFsID0gbmV3IFNlbnNvckNvbmZp
Z3VyYXRpb24oKTsKLSAgICB2YXIgbnVtYmVyT2ZCeXRlcyA9IGRlY29kZXIucmVhZFVpbnQzMigp
OwotICAgIHZhciB2ZXJzaW9uID0gZGVjb2Rlci5yZWFkVWludDMyKCk7Ci0gICAgdmFsLmZyZXF1
ZW5jeSA9IGRlY29kZXIuZGVjb2RlU3RydWN0KGNvZGVjLkRvdWJsZSk7Ci0gICAgcmV0dXJuIHZh
bDsKLSAgfTsKLQotICBTZW5zb3JDb25maWd1cmF0aW9uLmVuY29kZSA9IGZ1bmN0aW9uKGVuY29k
ZXIsIHZhbCkgewotICAgIHZhciBwYWNrZWQ7Ci0gICAgZW5jb2Rlci53cml0ZVVpbnQzMihTZW5z
b3JDb25maWd1cmF0aW9uLmVuY29kZWRTaXplKTsKLSAgICBlbmNvZGVyLndyaXRlVWludDMyKDAp
OwotICAgIGVuY29kZXIuZW5jb2RlU3RydWN0KGNvZGVjLkRvdWJsZSwgdmFsLmZyZXF1ZW5jeSk7
Ci0gIH07Ci0gIGZ1bmN0aW9uIFNlbnNvcl9HZXREZWZhdWx0Q29uZmlndXJhdGlvbl9QYXJhbXMo
dmFsdWVzKSB7Ci0gICAgdGhpcy5pbml0RGVmYXVsdHNfKCk7Ci0gICAgdGhpcy5pbml0RmllbGRz
Xyh2YWx1ZXMpOwotICB9Ci0KLQotICBTZW5zb3JfR2V0RGVmYXVsdENvbmZpZ3VyYXRpb25fUGFy
YW1zLnByb3RvdHlwZS5pbml0RGVmYXVsdHNfID0gZnVuY3Rpb24oKSB7Ci0gIH07Ci0gIFNlbnNv
cl9HZXREZWZhdWx0Q29uZmlndXJhdGlvbl9QYXJhbXMucHJvdG90eXBlLmluaXRGaWVsZHNfID0g
ZnVuY3Rpb24oZmllbGRzKSB7Ci0gICAgZm9yKHZhciBmaWVsZCBpbiBmaWVsZHMpIHsKLSAgICAg
ICAgaWYgKHRoaXMuaGFzT3duUHJvcGVydHkoZmllbGQpKQotICAgICAgICAgIHRoaXNbZmllbGRd
ID0gZmllbGRzW2ZpZWxkXTsKLSAgICB9Ci0gIH07Ci0KLSAgU2Vuc29yX0dldERlZmF1bHRDb25m
aWd1cmF0aW9uX1BhcmFtcy52YWxpZGF0ZSA9IGZ1bmN0aW9uKG1lc3NhZ2VWYWxpZGF0b3IsIG9m
ZnNldCkgewotICAgIHZhciBlcnI7Ci0gICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0
ZVN0cnVjdEhlYWRlcihvZmZzZXQsIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplKTsKLSAgICBpZiAo
ZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCi0gICAgICAgIHJldHVybiBl
cnI7Ci0KLSAgICB2YXIga1ZlcnNpb25TaXplcyA9IFsKLSAgICAgIHt2ZXJzaW9uOiAwLCBudW1C
eXRlczogOH0KLSAgICBdOwotICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1
Y3RWZXJzaW9uKG9mZnNldCwga1ZlcnNpb25TaXplcyk7Ci0gICAgaWYgKGVyciAhPT0gdmFsaWRh
dG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQotICAgICAgICByZXR1cm4gZXJyOwotCi0gICAgcmV0
dXJuIHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORTsKLSAgfTsKLQotICBTZW5zb3JfR2V0
RGVmYXVsdENvbmZpZ3VyYXRpb25fUGFyYW1zLmVuY29kZWRTaXplID0gY29kZWMua1N0cnVjdEhl
YWRlclNpemUgKyAwOwotCi0gIFNlbnNvcl9HZXREZWZhdWx0Q29uZmlndXJhdGlvbl9QYXJhbXMu
ZGVjb2RlID0gZnVuY3Rpb24oZGVjb2RlcikgewotICAgIHZhciBwYWNrZWQ7Ci0gICAgdmFyIHZh
bCA9IG5ldyBTZW5zb3JfR2V0RGVmYXVsdENvbmZpZ3VyYXRpb25fUGFyYW1zKCk7Ci0gICAgdmFy
IG51bWJlck9mQnl0ZXMgPSBkZWNvZGVyLnJlYWRVaW50MzIoKTsKLSAgICB2YXIgdmVyc2lvbiA9
IGRlY29kZXIucmVhZFVpbnQzMigpOwotICAgIHJldHVybiB2YWw7Ci0gIH07Ci0KLSAgU2Vuc29y
X0dldERlZmF1bHRDb25maWd1cmF0aW9uX1BhcmFtcy5lbmNvZGUgPSBmdW5jdGlvbihlbmNvZGVy
LCB2YWwpIHsKLSAgICB2YXIgcGFja2VkOwotICAgIGVuY29kZXIud3JpdGVVaW50MzIoU2Vuc29y
X0dldERlZmF1bHRDb25maWd1cmF0aW9uX1BhcmFtcy5lbmNvZGVkU2l6ZSk7Ci0gICAgZW5jb2Rl
ci53cml0ZVVpbnQzMigwKTsKLSAgfTsKLSAgZnVuY3Rpb24gU2Vuc29yX0dldERlZmF1bHRDb25m
aWd1cmF0aW9uX1Jlc3BvbnNlUGFyYW1zKHZhbHVlcykgewotICAgIHRoaXMuaW5pdERlZmF1bHRz
XygpOwotICAgIHRoaXMuaW5pdEZpZWxkc18odmFsdWVzKTsKLSAgfQotCi0KLSAgU2Vuc29yX0dl
dERlZmF1bHRDb25maWd1cmF0aW9uX1Jlc3BvbnNlUGFyYW1zLnByb3RvdHlwZS5pbml0RGVmYXVs
dHNfID0gZnVuY3Rpb24oKSB7Ci0gICAgdGhpcy5jb25maWd1cmF0aW9uID0gbnVsbDsKLSAgfTsK
LSAgU2Vuc29yX0dldERlZmF1bHRDb25maWd1cmF0aW9uX1Jlc3BvbnNlUGFyYW1zLnByb3RvdHlw
ZS5pbml0RmllbGRzXyA9IGZ1bmN0aW9uKGZpZWxkcykgewotICAgIGZvcih2YXIgZmllbGQgaW4g
ZmllbGRzKSB7Ci0gICAgICAgIGlmICh0aGlzLmhhc093blByb3BlcnR5KGZpZWxkKSkKLSAgICAg
ICAgICB0aGlzW2ZpZWxkXSA9IGZpZWxkc1tmaWVsZF07Ci0gICAgfQotICB9OwotCi0gIFNlbnNv
cl9HZXREZWZhdWx0Q29uZmlndXJhdGlvbl9SZXNwb25zZVBhcmFtcy52YWxpZGF0ZSA9IGZ1bmN0
aW9uKG1lc3NhZ2VWYWxpZGF0b3IsIG9mZnNldCkgewotICAgIHZhciBlcnI7Ci0gICAgZXJyID0g
bWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdEhlYWRlcihvZmZzZXQsIGNvZGVjLmtTdHJ1
Y3RIZWFkZXJTaXplKTsKLSAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9y
Lk5PTkUpCi0gICAgICAgIHJldHVybiBlcnI7Ci0KLSAgICB2YXIga1ZlcnNpb25TaXplcyA9IFsK
LSAgICAgIHt2ZXJzaW9uOiAwLCBudW1CeXRlczogMTZ9Ci0gICAgXTsKLSAgICBlcnIgPSBtZXNz
YWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0VmVyc2lvbihvZmZzZXQsIGtWZXJzaW9uU2l6ZXMp
OwotICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKLSAgICAg
ICAgcmV0dXJuIGVycjsKLQotCi0gICAgLy8gdmFsaWRhdGUgU2Vuc29yX0dldERlZmF1bHRDb25m
aWd1cmF0aW9uX1Jlc3BvbnNlUGFyYW1zLmNvbmZpZ3VyYXRpb24KLSAgICBlcnIgPSBtZXNzYWdl
VmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0UG9pbnRlcihvZmZzZXQgKyBjb2RlYy5rU3RydWN0SGVh
ZGVyU2l6ZSArIDAsIFNlbnNvckNvbmZpZ3VyYXRpb24sIGZhbHNlKTsKLSAgICBpZiAoZXJyICE9
PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCi0gICAgICAgIHJldHVybiBlcnI7Ci0K
LSAgICByZXR1cm4gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FOwotICB9OwotCi0gIFNl
bnNvcl9HZXREZWZhdWx0Q29uZmlndXJhdGlvbl9SZXNwb25zZVBhcmFtcy5lbmNvZGVkU2l6ZSA9
IGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgODsKLQotICBTZW5zb3JfR2V0RGVmYXVsdENvbmZp
Z3VyYXRpb25fUmVzcG9uc2VQYXJhbXMuZGVjb2RlID0gZnVuY3Rpb24oZGVjb2RlcikgewotICAg
IHZhciBwYWNrZWQ7Ci0gICAgdmFyIHZhbCA9IG5ldyBTZW5zb3JfR2V0RGVmYXVsdENvbmZpZ3Vy
YXRpb25fUmVzcG9uc2VQYXJhbXMoKTsKLSAgICB2YXIgbnVtYmVyT2ZCeXRlcyA9IGRlY29kZXIu
cmVhZFVpbnQzMigpOwotICAgIHZhciB2ZXJzaW9uID0gZGVjb2Rlci5yZWFkVWludDMyKCk7Ci0g
ICAgdmFsLmNvbmZpZ3VyYXRpb24gPSBkZWNvZGVyLmRlY29kZVN0cnVjdFBvaW50ZXIoU2Vuc29y
Q29uZmlndXJhdGlvbik7Ci0gICAgcmV0dXJuIHZhbDsKLSAgfTsKLQotICBTZW5zb3JfR2V0RGVm
YXVsdENvbmZpZ3VyYXRpb25fUmVzcG9uc2VQYXJhbXMuZW5jb2RlID0gZnVuY3Rpb24oZW5jb2Rl
ciwgdmFsKSB7Ci0gICAgdmFyIHBhY2tlZDsKLSAgICBlbmNvZGVyLndyaXRlVWludDMyKFNlbnNv
cl9HZXREZWZhdWx0Q29uZmlndXJhdGlvbl9SZXNwb25zZVBhcmFtcy5lbmNvZGVkU2l6ZSk7Ci0g
ICAgZW5jb2Rlci53cml0ZVVpbnQzMigwKTsKLSAgICBlbmNvZGVyLmVuY29kZVN0cnVjdFBvaW50
ZXIoU2Vuc29yQ29uZmlndXJhdGlvbiwgdmFsLmNvbmZpZ3VyYXRpb24pOwotICB9OwotICBmdW5j
dGlvbiBTZW5zb3JfQWRkQ29uZmlndXJhdGlvbl9QYXJhbXModmFsdWVzKSB7Ci0gICAgdGhpcy5p
bml0RGVmYXVsdHNfKCk7Ci0gICAgdGhpcy5pbml0RmllbGRzXyh2YWx1ZXMpOwotICB9Ci0KLQot
ICBTZW5zb3JfQWRkQ29uZmlndXJhdGlvbl9QYXJhbXMucHJvdG90eXBlLmluaXREZWZhdWx0c18g
PSBmdW5jdGlvbigpIHsKLSAgICB0aGlzLmNvbmZpZ3VyYXRpb24gPSBudWxsOwotICB9OwotICBT
ZW5zb3JfQWRkQ29uZmlndXJhdGlvbl9QYXJhbXMucHJvdG90eXBlLmluaXRGaWVsZHNfID0gZnVu
Y3Rpb24oZmllbGRzKSB7Ci0gICAgZm9yKHZhciBmaWVsZCBpbiBmaWVsZHMpIHsKLSAgICAgICAg
aWYgKHRoaXMuaGFzT3duUHJvcGVydHkoZmllbGQpKQotICAgICAgICAgIHRoaXNbZmllbGRdID0g
ZmllbGRzW2ZpZWxkXTsKLSAgICB9Ci0gIH07Ci0KLSAgU2Vuc29yX0FkZENvbmZpZ3VyYXRpb25f
UGFyYW1zLnZhbGlkYXRlID0gZnVuY3Rpb24obWVzc2FnZVZhbGlkYXRvciwgb2Zmc2V0KSB7Ci0g
ICAgdmFyIGVycjsKLSAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0SGVh
ZGVyKG9mZnNldCwgY29kZWMua1N0cnVjdEhlYWRlclNpemUpOwotICAgIGlmIChlcnIgIT09IHZh
bGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKLSAgICAgICAgcmV0dXJuIGVycjsKLQotICAg
IHZhciBrVmVyc2lvblNpemVzID0gWwotICAgICAge3ZlcnNpb246IDAsIG51bUJ5dGVzOiAxNn0K
LSAgICBdOwotICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RWZXJzaW9u
KG9mZnNldCwga1ZlcnNpb25TaXplcyk7Ci0gICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlk
YXRpb25FcnJvci5OT05FKQotICAgICAgICByZXR1cm4gZXJyOwotCi0KLSAgICAvLyB2YWxpZGF0
ZSBTZW5zb3JfQWRkQ29uZmlndXJhdGlvbl9QYXJhbXMuY29uZmlndXJhdGlvbgotICAgIGVyciA9
IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RQb2ludGVyKG9mZnNldCArIGNvZGVjLmtT
dHJ1Y3RIZWFkZXJTaXplICsgMCwgU2Vuc29yQ29uZmlndXJhdGlvbiwgZmFsc2UpOwotICAgIGlm
IChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKLSAgICAgICAgcmV0dXJu
IGVycjsKLQotICAgIHJldHVybiB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkU7Ci0gIH07
Ci0KLSAgU2Vuc29yX0FkZENvbmZpZ3VyYXRpb25fUGFyYW1zLmVuY29kZWRTaXplID0gY29kZWMu
a1N0cnVjdEhlYWRlclNpemUgKyA4OwotCi0gIFNlbnNvcl9BZGRDb25maWd1cmF0aW9uX1BhcmFt
cy5kZWNvZGUgPSBmdW5jdGlvbihkZWNvZGVyKSB7Ci0gICAgdmFyIHBhY2tlZDsKLSAgICB2YXIg
dmFsID0gbmV3IFNlbnNvcl9BZGRDb25maWd1cmF0aW9uX1BhcmFtcygpOwotICAgIHZhciBudW1i
ZXJPZkJ5dGVzID0gZGVjb2Rlci5yZWFkVWludDMyKCk7Ci0gICAgdmFyIHZlcnNpb24gPSBkZWNv
ZGVyLnJlYWRVaW50MzIoKTsKLSAgICB2YWwuY29uZmlndXJhdGlvbiA9IGRlY29kZXIuZGVjb2Rl
U3RydWN0UG9pbnRlcihTZW5zb3JDb25maWd1cmF0aW9uKTsKLSAgICByZXR1cm4gdmFsOwotICB9
OwotCi0gIFNlbnNvcl9BZGRDb25maWd1cmF0aW9uX1BhcmFtcy5lbmNvZGUgPSBmdW5jdGlvbihl
bmNvZGVyLCB2YWwpIHsKLSAgICB2YXIgcGFja2VkOwotICAgIGVuY29kZXIud3JpdGVVaW50MzIo
U2Vuc29yX0FkZENvbmZpZ3VyYXRpb25fUGFyYW1zLmVuY29kZWRTaXplKTsKLSAgICBlbmNvZGVy
LndyaXRlVWludDMyKDApOwotICAgIGVuY29kZXIuZW5jb2RlU3RydWN0UG9pbnRlcihTZW5zb3JD
b25maWd1cmF0aW9uLCB2YWwuY29uZmlndXJhdGlvbik7Ci0gIH07Ci0gIGZ1bmN0aW9uIFNlbnNv
cl9BZGRDb25maWd1cmF0aW9uX1Jlc3BvbnNlUGFyYW1zKHZhbHVlcykgewotICAgIHRoaXMuaW5p
dERlZmF1bHRzXygpOwotICAgIHRoaXMuaW5pdEZpZWxkc18odmFsdWVzKTsKLSAgfQotCi0KLSAg
U2Vuc29yX0FkZENvbmZpZ3VyYXRpb25fUmVzcG9uc2VQYXJhbXMucHJvdG90eXBlLmluaXREZWZh
dWx0c18gPSBmdW5jdGlvbigpIHsKLSAgICB0aGlzLnN1Y2Nlc3MgPSBmYWxzZTsKLSAgfTsKLSAg
U2Vuc29yX0FkZENvbmZpZ3VyYXRpb25fUmVzcG9uc2VQYXJhbXMucHJvdG90eXBlLmluaXRGaWVs
ZHNfID0gZnVuY3Rpb24oZmllbGRzKSB7Ci0gICAgZm9yKHZhciBmaWVsZCBpbiBmaWVsZHMpIHsK
LSAgICAgICAgaWYgKHRoaXMuaGFzT3duUHJvcGVydHkoZmllbGQpKQotICAgICAgICAgIHRoaXNb
ZmllbGRdID0gZmllbGRzW2ZpZWxkXTsKLSAgICB9Ci0gIH07Ci0KLSAgU2Vuc29yX0FkZENvbmZp
Z3VyYXRpb25fUmVzcG9uc2VQYXJhbXMudmFsaWRhdGUgPSBmdW5jdGlvbihtZXNzYWdlVmFsaWRh
dG9yLCBvZmZzZXQpIHsKLSAgICB2YXIgZXJyOwotICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3Iu
dmFsaWRhdGVTdHJ1Y3RIZWFkZXIob2Zmc2V0LCBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSk7Ci0g
ICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQotICAgICAgICBy
ZXR1cm4gZXJyOwotCi0gICAgdmFyIGtWZXJzaW9uU2l6ZXMgPSBbCi0gICAgICB7dmVyc2lvbjog
MCwgbnVtQnl0ZXM6IDE2fQotICAgIF07Ci0gICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxp
ZGF0ZVN0cnVjdFZlcnNpb24ob2Zmc2V0LCBrVmVyc2lvblNpemVzKTsKLSAgICBpZiAoZXJyICE9
PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCi0gICAgICAgIHJldHVybiBlcnI7Ci0K
LQotICAgIHJldHVybiB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkU7Ci0gIH07Ci0KLSAg
U2Vuc29yX0FkZENvbmZpZ3VyYXRpb25fUmVzcG9uc2VQYXJhbXMuZW5jb2RlZFNpemUgPSBjb2Rl
Yy5rU3RydWN0SGVhZGVyU2l6ZSArIDg7Ci0KLSAgU2Vuc29yX0FkZENvbmZpZ3VyYXRpb25fUmVz
cG9uc2VQYXJhbXMuZGVjb2RlID0gZnVuY3Rpb24oZGVjb2RlcikgewotICAgIHZhciBwYWNrZWQ7
Ci0gICAgdmFyIHZhbCA9IG5ldyBTZW5zb3JfQWRkQ29uZmlndXJhdGlvbl9SZXNwb25zZVBhcmFt
cygpOwotICAgIHZhciBudW1iZXJPZkJ5dGVzID0gZGVjb2Rlci5yZWFkVWludDMyKCk7Ci0gICAg
dmFyIHZlcnNpb24gPSBkZWNvZGVyLnJlYWRVaW50MzIoKTsKLSAgICBwYWNrZWQgPSBkZWNvZGVy
LnJlYWRVaW50OCgpOwotICAgIHZhbC5zdWNjZXNzID0gKHBhY2tlZCA+PiAwKSAmIDEgPyB0cnVl
IDogZmFsc2U7Ci0gICAgZGVjb2Rlci5za2lwKDEpOwotICAgIGRlY29kZXIuc2tpcCgxKTsKLSAg
ICBkZWNvZGVyLnNraXAoMSk7Ci0gICAgZGVjb2Rlci5za2lwKDEpOwotICAgIGRlY29kZXIuc2tp
cCgxKTsKLSAgICBkZWNvZGVyLnNraXAoMSk7Ci0gICAgZGVjb2Rlci5za2lwKDEpOwotICAgIHJl
dHVybiB2YWw7Ci0gIH07Ci0KLSAgU2Vuc29yX0FkZENvbmZpZ3VyYXRpb25fUmVzcG9uc2VQYXJh
bXMuZW5jb2RlID0gZnVuY3Rpb24oZW5jb2RlciwgdmFsKSB7Ci0gICAgdmFyIHBhY2tlZDsKLSAg
ICBlbmNvZGVyLndyaXRlVWludDMyKFNlbnNvcl9BZGRDb25maWd1cmF0aW9uX1Jlc3BvbnNlUGFy
YW1zLmVuY29kZWRTaXplKTsKLSAgICBlbmNvZGVyLndyaXRlVWludDMyKDApOwotICAgIHBhY2tl
ZCA9IDA7Ci0gICAgcGFja2VkIHw9ICh2YWwuc3VjY2VzcyAmIDEpIDw8IDAKLSAgICBlbmNvZGVy
LndyaXRlVWludDgocGFja2VkKTsKLSAgICBlbmNvZGVyLnNraXAoMSk7Ci0gICAgZW5jb2Rlci5z
a2lwKDEpOwotICAgIGVuY29kZXIuc2tpcCgxKTsKLSAgICBlbmNvZGVyLnNraXAoMSk7Ci0gICAg
ZW5jb2Rlci5za2lwKDEpOwotICAgIGVuY29kZXIuc2tpcCgxKTsKLSAgICBlbmNvZGVyLnNraXAo
MSk7Ci0gIH07Ci0gIGZ1bmN0aW9uIFNlbnNvcl9SZW1vdmVDb25maWd1cmF0aW9uX1BhcmFtcyh2
YWx1ZXMpIHsKLSAgICB0aGlzLmluaXREZWZhdWx0c18oKTsKLSAgICB0aGlzLmluaXRGaWVsZHNf
KHZhbHVlcyk7Ci0gIH0KLQotCi0gIFNlbnNvcl9SZW1vdmVDb25maWd1cmF0aW9uX1BhcmFtcy5w
cm90b3R5cGUuaW5pdERlZmF1bHRzXyA9IGZ1bmN0aW9uKCkgewotICAgIHRoaXMuY29uZmlndXJh
dGlvbiA9IG51bGw7Ci0gIH07Ci0gIFNlbnNvcl9SZW1vdmVDb25maWd1cmF0aW9uX1BhcmFtcy5w
cm90b3R5cGUuaW5pdEZpZWxkc18gPSBmdW5jdGlvbihmaWVsZHMpIHsKLSAgICBmb3IodmFyIGZp
ZWxkIGluIGZpZWxkcykgewotICAgICAgICBpZiAodGhpcy5oYXNPd25Qcm9wZXJ0eShmaWVsZCkp
Ci0gICAgICAgICAgdGhpc1tmaWVsZF0gPSBmaWVsZHNbZmllbGRdOwotICAgIH0KLSAgfTsKLQot
ICBTZW5zb3JfUmVtb3ZlQ29uZmlndXJhdGlvbl9QYXJhbXMudmFsaWRhdGUgPSBmdW5jdGlvbiht
ZXNzYWdlVmFsaWRhdG9yLCBvZmZzZXQpIHsKLSAgICB2YXIgZXJyOwotICAgIGVyciA9IG1lc3Nh
Z2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RIZWFkZXIob2Zmc2V0LCBjb2RlYy5rU3RydWN0SGVh
ZGVyU2l6ZSk7Ci0gICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05F
KQotICAgICAgICByZXR1cm4gZXJyOwotCi0gICAgdmFyIGtWZXJzaW9uU2l6ZXMgPSBbCi0gICAg
ICB7dmVyc2lvbjogMCwgbnVtQnl0ZXM6IDE2fQotICAgIF07Ci0gICAgZXJyID0gbWVzc2FnZVZh
bGlkYXRvci52YWxpZGF0ZVN0cnVjdFZlcnNpb24ob2Zmc2V0LCBrVmVyc2lvblNpemVzKTsKLSAg
ICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCi0gICAgICAgIHJl
dHVybiBlcnI7Ci0KLQotICAgIC8vIHZhbGlkYXRlIFNlbnNvcl9SZW1vdmVDb25maWd1cmF0aW9u
X1BhcmFtcy5jb25maWd1cmF0aW9uCi0gICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0
ZVN0cnVjdFBvaW50ZXIob2Zmc2V0ICsgY29kZWMua1N0cnVjdEhlYWRlclNpemUgKyAwLCBTZW5z
b3JDb25maWd1cmF0aW9uLCBmYWxzZSk7Ci0gICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlk
YXRpb25FcnJvci5OT05FKQotICAgICAgICByZXR1cm4gZXJyOwotCi0gICAgcmV0dXJuIHZhbGlk
YXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORTsKLSAgfTsKLQotICBTZW5zb3JfUmVtb3ZlQ29uZmln
dXJhdGlvbl9QYXJhbXMuZW5jb2RlZFNpemUgPSBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDg7
Ci0KLSAgU2Vuc29yX1JlbW92ZUNvbmZpZ3VyYXRpb25fUGFyYW1zLmRlY29kZSA9IGZ1bmN0aW9u
KGRlY29kZXIpIHsKLSAgICB2YXIgcGFja2VkOwotICAgIHZhciB2YWwgPSBuZXcgU2Vuc29yX1Jl
bW92ZUNvbmZpZ3VyYXRpb25fUGFyYW1zKCk7Ci0gICAgdmFyIG51bWJlck9mQnl0ZXMgPSBkZWNv
ZGVyLnJlYWRVaW50MzIoKTsKLSAgICB2YXIgdmVyc2lvbiA9IGRlY29kZXIucmVhZFVpbnQzMigp
OwotICAgIHZhbC5jb25maWd1cmF0aW9uID0gZGVjb2Rlci5kZWNvZGVTdHJ1Y3RQb2ludGVyKFNl
bnNvckNvbmZpZ3VyYXRpb24pOwotICAgIHJldHVybiB2YWw7Ci0gIH07Ci0KLSAgU2Vuc29yX1Jl
bW92ZUNvbmZpZ3VyYXRpb25fUGFyYW1zLmVuY29kZSA9IGZ1bmN0aW9uKGVuY29kZXIsIHZhbCkg
ewotICAgIHZhciBwYWNrZWQ7Ci0gICAgZW5jb2Rlci53cml0ZVVpbnQzMihTZW5zb3JfUmVtb3Zl
Q29uZmlndXJhdGlvbl9QYXJhbXMuZW5jb2RlZFNpemUpOwotICAgIGVuY29kZXIud3JpdGVVaW50
MzIoMCk7Ci0gICAgZW5jb2Rlci5lbmNvZGVTdHJ1Y3RQb2ludGVyKFNlbnNvckNvbmZpZ3VyYXRp
b24sIHZhbC5jb25maWd1cmF0aW9uKTsKLSAgfTsKLSAgZnVuY3Rpb24gU2Vuc29yX1N1c3BlbmRf
UGFyYW1zKHZhbHVlcykgewotICAgIHRoaXMuaW5pdERlZmF1bHRzXygpOwotICAgIHRoaXMuaW5p
dEZpZWxkc18odmFsdWVzKTsKLSAgfQotCi0KLSAgU2Vuc29yX1N1c3BlbmRfUGFyYW1zLnByb3Rv
dHlwZS5pbml0RGVmYXVsdHNfID0gZnVuY3Rpb24oKSB7Ci0gIH07Ci0gIFNlbnNvcl9TdXNwZW5k
X1BhcmFtcy5wcm90b3R5cGUuaW5pdEZpZWxkc18gPSBmdW5jdGlvbihmaWVsZHMpIHsKLSAgICBm
b3IodmFyIGZpZWxkIGluIGZpZWxkcykgewotICAgICAgICBpZiAodGhpcy5oYXNPd25Qcm9wZXJ0
eShmaWVsZCkpCi0gICAgICAgICAgdGhpc1tmaWVsZF0gPSBmaWVsZHNbZmllbGRdOwotICAgIH0K
LSAgfTsKLQotICBTZW5zb3JfU3VzcGVuZF9QYXJhbXMudmFsaWRhdGUgPSBmdW5jdGlvbihtZXNz
YWdlVmFsaWRhdG9yLCBvZmZzZXQpIHsKLSAgICB2YXIgZXJyOwotICAgIGVyciA9IG1lc3NhZ2VW
YWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RIZWFkZXIob2Zmc2V0LCBjb2RlYy5rU3RydWN0SGVhZGVy
U2l6ZSk7Ci0gICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQot
ICAgICAgICByZXR1cm4gZXJyOwotCi0gICAgdmFyIGtWZXJzaW9uU2l6ZXMgPSBbCi0gICAgICB7
dmVyc2lvbjogMCwgbnVtQnl0ZXM6IDh9Ci0gICAgXTsKLSAgICBlcnIgPSBtZXNzYWdlVmFsaWRh
dG9yLnZhbGlkYXRlU3RydWN0VmVyc2lvbihvZmZzZXQsIGtWZXJzaW9uU2l6ZXMpOwotICAgIGlm
IChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKLSAgICAgICAgcmV0dXJu
IGVycjsKLQotICAgIHJldHVybiB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkU7Ci0gIH07
Ci0KLSAgU2Vuc29yX1N1c3BlbmRfUGFyYW1zLmVuY29kZWRTaXplID0gY29kZWMua1N0cnVjdEhl
YWRlclNpemUgKyAwOwotCi0gIFNlbnNvcl9TdXNwZW5kX1BhcmFtcy5kZWNvZGUgPSBmdW5jdGlv
bihkZWNvZGVyKSB7Ci0gICAgdmFyIHBhY2tlZDsKLSAgICB2YXIgdmFsID0gbmV3IFNlbnNvcl9T
dXNwZW5kX1BhcmFtcygpOwotICAgIHZhciBudW1iZXJPZkJ5dGVzID0gZGVjb2Rlci5yZWFkVWlu
dDMyKCk7Ci0gICAgdmFyIHZlcnNpb24gPSBkZWNvZGVyLnJlYWRVaW50MzIoKTsKLSAgICByZXR1
cm4gdmFsOwotICB9OwotCi0gIFNlbnNvcl9TdXNwZW5kX1BhcmFtcy5lbmNvZGUgPSBmdW5jdGlv
bihlbmNvZGVyLCB2YWwpIHsKLSAgICB2YXIgcGFja2VkOwotICAgIGVuY29kZXIud3JpdGVVaW50
MzIoU2Vuc29yX1N1c3BlbmRfUGFyYW1zLmVuY29kZWRTaXplKTsKLSAgICBlbmNvZGVyLndyaXRl
VWludDMyKDApOwotICB9OwotICBmdW5jdGlvbiBTZW5zb3JfUmVzdW1lX1BhcmFtcyh2YWx1ZXMp
IHsKLSAgICB0aGlzLmluaXREZWZhdWx0c18oKTsKLSAgICB0aGlzLmluaXRGaWVsZHNfKHZhbHVl
cyk7Ci0gIH0KLQotCi0gIFNlbnNvcl9SZXN1bWVfUGFyYW1zLnByb3RvdHlwZS5pbml0RGVmYXVs
dHNfID0gZnVuY3Rpb24oKSB7Ci0gIH07Ci0gIFNlbnNvcl9SZXN1bWVfUGFyYW1zLnByb3RvdHlw
ZS5pbml0RmllbGRzXyA9IGZ1bmN0aW9uKGZpZWxkcykgewotICAgIGZvcih2YXIgZmllbGQgaW4g
ZmllbGRzKSB7Ci0gICAgICAgIGlmICh0aGlzLmhhc093blByb3BlcnR5KGZpZWxkKSkKLSAgICAg
ICAgICB0aGlzW2ZpZWxkXSA9IGZpZWxkc1tmaWVsZF07Ci0gICAgfQotICB9OwotCi0gIFNlbnNv
cl9SZXN1bWVfUGFyYW1zLnZhbGlkYXRlID0gZnVuY3Rpb24obWVzc2FnZVZhbGlkYXRvciwgb2Zm
c2V0KSB7Ci0gICAgdmFyIGVycjsKLSAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRl
U3RydWN0SGVhZGVyKG9mZnNldCwgY29kZWMua1N0cnVjdEhlYWRlclNpemUpOwotICAgIGlmIChl
cnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKLSAgICAgICAgcmV0dXJuIGVy
cjsKLQotICAgIHZhciBrVmVyc2lvblNpemVzID0gWwotICAgICAge3ZlcnNpb246IDAsIG51bUJ5
dGVzOiA4fQotICAgIF07Ci0gICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVj
dFZlcnNpb24ob2Zmc2V0LCBrVmVyc2lvblNpemVzKTsKLSAgICBpZiAoZXJyICE9PSB2YWxpZGF0
b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCi0gICAgICAgIHJldHVybiBlcnI7Ci0KLSAgICByZXR1
cm4gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FOwotICB9OwotCi0gIFNlbnNvcl9SZXN1
bWVfUGFyYW1zLmVuY29kZWRTaXplID0gY29kZWMua1N0cnVjdEhlYWRlclNpemUgKyAwOwotCi0g
IFNlbnNvcl9SZXN1bWVfUGFyYW1zLmRlY29kZSA9IGZ1bmN0aW9uKGRlY29kZXIpIHsKLSAgICB2
YXIgcGFja2VkOwotICAgIHZhciB2YWwgPSBuZXcgU2Vuc29yX1Jlc3VtZV9QYXJhbXMoKTsKLSAg
ICB2YXIgbnVtYmVyT2ZCeXRlcyA9IGRlY29kZXIucmVhZFVpbnQzMigpOwotICAgIHZhciB2ZXJz
aW9uID0gZGVjb2Rlci5yZWFkVWludDMyKCk7Ci0gICAgcmV0dXJuIHZhbDsKLSAgfTsKLQotICBT
ZW5zb3JfUmVzdW1lX1BhcmFtcy5lbmNvZGUgPSBmdW5jdGlvbihlbmNvZGVyLCB2YWwpIHsKLSAg
ICB2YXIgcGFja2VkOwotICAgIGVuY29kZXIud3JpdGVVaW50MzIoU2Vuc29yX1Jlc3VtZV9QYXJh
bXMuZW5jb2RlZFNpemUpOwotICAgIGVuY29kZXIud3JpdGVVaW50MzIoMCk7Ci0gIH07Ci0gIGZ1
bmN0aW9uIFNlbnNvcl9Db25maWd1cmVSZWFkaW5nQ2hhbmdlTm90aWZpY2F0aW9uc19QYXJhbXMo
dmFsdWVzKSB7Ci0gICAgdGhpcy5pbml0RGVmYXVsdHNfKCk7Ci0gICAgdGhpcy5pbml0RmllbGRz
Xyh2YWx1ZXMpOwotICB9Ci0KLQotICBTZW5zb3JfQ29uZmlndXJlUmVhZGluZ0NoYW5nZU5vdGlm
aWNhdGlvbnNfUGFyYW1zLnByb3RvdHlwZS5pbml0RGVmYXVsdHNfID0gZnVuY3Rpb24oKSB7Ci0g
ICAgdGhpcy5lbmFibGVkID0gZmFsc2U7Ci0gIH07Ci0gIFNlbnNvcl9Db25maWd1cmVSZWFkaW5n
Q2hhbmdlTm90aWZpY2F0aW9uc19QYXJhbXMucHJvdG90eXBlLmluaXRGaWVsZHNfID0gZnVuY3Rp
b24oZmllbGRzKSB7Ci0gICAgZm9yKHZhciBmaWVsZCBpbiBmaWVsZHMpIHsKLSAgICAgICAgaWYg
KHRoaXMuaGFzT3duUHJvcGVydHkoZmllbGQpKQotICAgICAgICAgIHRoaXNbZmllbGRdID0gZmll
bGRzW2ZpZWxkXTsKLSAgICB9Ci0gIH07Ci0KLSAgU2Vuc29yX0NvbmZpZ3VyZVJlYWRpbmdDaGFu
Z2VOb3RpZmljYXRpb25zX1BhcmFtcy52YWxpZGF0ZSA9IGZ1bmN0aW9uKG1lc3NhZ2VWYWxpZGF0
b3IsIG9mZnNldCkgewotICAgIHZhciBlcnI7Ci0gICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52
YWxpZGF0ZVN0cnVjdEhlYWRlcihvZmZzZXQsIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplKTsKLSAg
ICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCi0gICAgICAgIHJl
dHVybiBlcnI7Ci0KLSAgICB2YXIga1ZlcnNpb25TaXplcyA9IFsKLSAgICAgIHt2ZXJzaW9uOiAw
LCBudW1CeXRlczogMTZ9Ci0gICAgXTsKLSAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlk
YXRlU3RydWN0VmVyc2lvbihvZmZzZXQsIGtWZXJzaW9uU2l6ZXMpOwotICAgIGlmIChlcnIgIT09
IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKLSAgICAgICAgcmV0dXJuIGVycjsKLQot
Ci0gICAgcmV0dXJuIHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORTsKLSAgfTsKLQotICBT
ZW5zb3JfQ29uZmlndXJlUmVhZGluZ0NoYW5nZU5vdGlmaWNhdGlvbnNfUGFyYW1zLmVuY29kZWRT
aXplID0gY29kZWMua1N0cnVjdEhlYWRlclNpemUgKyA4OwotCi0gIFNlbnNvcl9Db25maWd1cmVS
ZWFkaW5nQ2hhbmdlTm90aWZpY2F0aW9uc19QYXJhbXMuZGVjb2RlID0gZnVuY3Rpb24oZGVjb2Rl
cikgewotICAgIHZhciBwYWNrZWQ7Ci0gICAgdmFyIHZhbCA9IG5ldyBTZW5zb3JfQ29uZmlndXJl
UmVhZGluZ0NoYW5nZU5vdGlmaWNhdGlvbnNfUGFyYW1zKCk7Ci0gICAgdmFyIG51bWJlck9mQnl0
ZXMgPSBkZWNvZGVyLnJlYWRVaW50MzIoKTsKLSAgICB2YXIgdmVyc2lvbiA9IGRlY29kZXIucmVh
ZFVpbnQzMigpOwotICAgIHBhY2tlZCA9IGRlY29kZXIucmVhZFVpbnQ4KCk7Ci0gICAgdmFsLmVu
YWJsZWQgPSAocGFja2VkID4+IDApICYgMSA/IHRydWUgOiBmYWxzZTsKLSAgICBkZWNvZGVyLnNr
aXAoMSk7Ci0gICAgZGVjb2Rlci5za2lwKDEpOwotICAgIGRlY29kZXIuc2tpcCgxKTsKLSAgICBk
ZWNvZGVyLnNraXAoMSk7Ci0gICAgZGVjb2Rlci5za2lwKDEpOwotICAgIGRlY29kZXIuc2tpcCgx
KTsKLSAgICBkZWNvZGVyLnNraXAoMSk7Ci0gICAgcmV0dXJuIHZhbDsKLSAgfTsKLQotICBTZW5z
b3JfQ29uZmlndXJlUmVhZGluZ0NoYW5nZU5vdGlmaWNhdGlvbnNfUGFyYW1zLmVuY29kZSA9IGZ1
bmN0aW9uKGVuY29kZXIsIHZhbCkgewotICAgIHZhciBwYWNrZWQ7Ci0gICAgZW5jb2Rlci53cml0
ZVVpbnQzMihTZW5zb3JfQ29uZmlndXJlUmVhZGluZ0NoYW5nZU5vdGlmaWNhdGlvbnNfUGFyYW1z
LmVuY29kZWRTaXplKTsKLSAgICBlbmNvZGVyLndyaXRlVWludDMyKDApOwotICAgIHBhY2tlZCA9
IDA7Ci0gICAgcGFja2VkIHw9ICh2YWwuZW5hYmxlZCAmIDEpIDw8IDAKLSAgICBlbmNvZGVyLndy
aXRlVWludDgocGFja2VkKTsKLSAgICBlbmNvZGVyLnNraXAoMSk7Ci0gICAgZW5jb2Rlci5za2lw
KDEpOwotICAgIGVuY29kZXIuc2tpcCgxKTsKLSAgICBlbmNvZGVyLnNraXAoMSk7Ci0gICAgZW5j
b2Rlci5za2lwKDEpOwotICAgIGVuY29kZXIuc2tpcCgxKTsKLSAgICBlbmNvZGVyLnNraXAoMSk7
Ci0gIH07Ci0gIGZ1bmN0aW9uIFNlbnNvckNsaWVudF9SYWlzZUVycm9yX1BhcmFtcyh2YWx1ZXMp
IHsKLSAgICB0aGlzLmluaXREZWZhdWx0c18oKTsKLSAgICB0aGlzLmluaXRGaWVsZHNfKHZhbHVl
cyk7Ci0gIH0KLQotCi0gIFNlbnNvckNsaWVudF9SYWlzZUVycm9yX1BhcmFtcy5wcm90b3R5cGUu
aW5pdERlZmF1bHRzXyA9IGZ1bmN0aW9uKCkgewotICB9OwotICBTZW5zb3JDbGllbnRfUmFpc2VF
cnJvcl9QYXJhbXMucHJvdG90eXBlLmluaXRGaWVsZHNfID0gZnVuY3Rpb24oZmllbGRzKSB7Ci0g
ICAgZm9yKHZhciBmaWVsZCBpbiBmaWVsZHMpIHsKLSAgICAgICAgaWYgKHRoaXMuaGFzT3duUHJv
cGVydHkoZmllbGQpKQotICAgICAgICAgIHRoaXNbZmllbGRdID0gZmllbGRzW2ZpZWxkXTsKLSAg
ICB9Ci0gIH07Ci0KLSAgU2Vuc29yQ2xpZW50X1JhaXNlRXJyb3JfUGFyYW1zLnZhbGlkYXRlID0g
ZnVuY3Rpb24obWVzc2FnZVZhbGlkYXRvciwgb2Zmc2V0KSB7Ci0gICAgdmFyIGVycjsKLSAgICBl
cnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0SGVhZGVyKG9mZnNldCwgY29kZWMu
a1N0cnVjdEhlYWRlclNpemUpOwotICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9u
RXJyb3IuTk9ORSkKLSAgICAgICAgcmV0dXJuIGVycjsKLQotICAgIHZhciBrVmVyc2lvblNpemVz
ID0gWwotICAgICAge3ZlcnNpb246IDAsIG51bUJ5dGVzOiA4fQotICAgIF07Ci0gICAgZXJyID0g
bWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdFZlcnNpb24ob2Zmc2V0LCBrVmVyc2lvblNp
emVzKTsKLSAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCi0g
ICAgICAgIHJldHVybiBlcnI7Ci0KLSAgICByZXR1cm4gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJv
ci5OT05FOwotICB9OwotCi0gIFNlbnNvckNsaWVudF9SYWlzZUVycm9yX1BhcmFtcy5lbmNvZGVk
U2l6ZSA9IGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgMDsKLQotICBTZW5zb3JDbGllbnRfUmFp
c2VFcnJvcl9QYXJhbXMuZGVjb2RlID0gZnVuY3Rpb24oZGVjb2RlcikgewotICAgIHZhciBwYWNr
ZWQ7Ci0gICAgdmFyIHZhbCA9IG5ldyBTZW5zb3JDbGllbnRfUmFpc2VFcnJvcl9QYXJhbXMoKTsK
LSAgICB2YXIgbnVtYmVyT2ZCeXRlcyA9IGRlY29kZXIucmVhZFVpbnQzMigpOwotICAgIHZhciB2
ZXJzaW9uID0gZGVjb2Rlci5yZWFkVWludDMyKCk7Ci0gICAgcmV0dXJuIHZhbDsKLSAgfTsKLQot
ICBTZW5zb3JDbGllbnRfUmFpc2VFcnJvcl9QYXJhbXMuZW5jb2RlID0gZnVuY3Rpb24oZW5jb2Rl
ciwgdmFsKSB7Ci0gICAgdmFyIHBhY2tlZDsKLSAgICBlbmNvZGVyLndyaXRlVWludDMyKFNlbnNv
ckNsaWVudF9SYWlzZUVycm9yX1BhcmFtcy5lbmNvZGVkU2l6ZSk7Ci0gICAgZW5jb2Rlci53cml0
ZVVpbnQzMigwKTsKLSAgfTsKLSAgZnVuY3Rpb24gU2Vuc29yQ2xpZW50X1NlbnNvclJlYWRpbmdD
aGFuZ2VkX1BhcmFtcyh2YWx1ZXMpIHsKLSAgICB0aGlzLmluaXREZWZhdWx0c18oKTsKLSAgICB0
aGlzLmluaXRGaWVsZHNfKHZhbHVlcyk7Ci0gIH0KLQotCi0gIFNlbnNvckNsaWVudF9TZW5zb3JS
ZWFkaW5nQ2hhbmdlZF9QYXJhbXMucHJvdG90eXBlLmluaXREZWZhdWx0c18gPSBmdW5jdGlvbigp
IHsKLSAgfTsKLSAgU2Vuc29yQ2xpZW50X1NlbnNvclJlYWRpbmdDaGFuZ2VkX1BhcmFtcy5wcm90
b3R5cGUuaW5pdEZpZWxkc18gPSBmdW5jdGlvbihmaWVsZHMpIHsKLSAgICBmb3IodmFyIGZpZWxk
IGluIGZpZWxkcykgewotICAgICAgICBpZiAodGhpcy5oYXNPd25Qcm9wZXJ0eShmaWVsZCkpCi0g
ICAgICAgICAgdGhpc1tmaWVsZF0gPSBmaWVsZHNbZmllbGRdOwotICAgIH0KLSAgfTsKLQotICBT
ZW5zb3JDbGllbnRfU2Vuc29yUmVhZGluZ0NoYW5nZWRfUGFyYW1zLnZhbGlkYXRlID0gZnVuY3Rp
b24obWVzc2FnZVZhbGlkYXRvciwgb2Zmc2V0KSB7Ci0gICAgdmFyIGVycjsKLSAgICBlcnIgPSBt
ZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0SGVhZGVyKG9mZnNldCwgY29kZWMua1N0cnVj
dEhlYWRlclNpemUpOwotICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3Iu
Tk9ORSkKLSAgICAgICAgcmV0dXJuIGVycjsKLQotICAgIHZhciBrVmVyc2lvblNpemVzID0gWwot
ICAgICAge3ZlcnNpb246IDAsIG51bUJ5dGVzOiA4fQotICAgIF07Ci0gICAgZXJyID0gbWVzc2Fn
ZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdFZlcnNpb24ob2Zmc2V0LCBrVmVyc2lvblNpemVzKTsK
LSAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCi0gICAgICAg
IHJldHVybiBlcnI7Ci0KLSAgICByZXR1cm4gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05F
OwotICB9OwotCi0gIFNlbnNvckNsaWVudF9TZW5zb3JSZWFkaW5nQ2hhbmdlZF9QYXJhbXMuZW5j
b2RlZFNpemUgPSBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDA7Ci0KLSAgU2Vuc29yQ2xpZW50
X1NlbnNvclJlYWRpbmdDaGFuZ2VkX1BhcmFtcy5kZWNvZGUgPSBmdW5jdGlvbihkZWNvZGVyKSB7
Ci0gICAgdmFyIHBhY2tlZDsKLSAgICB2YXIgdmFsID0gbmV3IFNlbnNvckNsaWVudF9TZW5zb3JS
ZWFkaW5nQ2hhbmdlZF9QYXJhbXMoKTsKLSAgICB2YXIgbnVtYmVyT2ZCeXRlcyA9IGRlY29kZXIu
cmVhZFVpbnQzMigpOwotICAgIHZhciB2ZXJzaW9uID0gZGVjb2Rlci5yZWFkVWludDMyKCk7Ci0g
ICAgcmV0dXJuIHZhbDsKLSAgfTsKLQotICBTZW5zb3JDbGllbnRfU2Vuc29yUmVhZGluZ0NoYW5n
ZWRfUGFyYW1zLmVuY29kZSA9IGZ1bmN0aW9uKGVuY29kZXIsIHZhbCkgewotICAgIHZhciBwYWNr
ZWQ7Ci0gICAgZW5jb2Rlci53cml0ZVVpbnQzMihTZW5zb3JDbGllbnRfU2Vuc29yUmVhZGluZ0No
YW5nZWRfUGFyYW1zLmVuY29kZWRTaXplKTsKLSAgICBlbmNvZGVyLndyaXRlVWludDMyKDApOwot
ICB9OwotICB2YXIga1NlbnNvcl9HZXREZWZhdWx0Q29uZmlndXJhdGlvbl9OYW1lID0gMDsKLSAg
dmFyIGtTZW5zb3JfQWRkQ29uZmlndXJhdGlvbl9OYW1lID0gMTsKLSAgdmFyIGtTZW5zb3JfUmVt
b3ZlQ29uZmlndXJhdGlvbl9OYW1lID0gMjsKLSAgdmFyIGtTZW5zb3JfU3VzcGVuZF9OYW1lID0g
MzsKLSAgdmFyIGtTZW5zb3JfUmVzdW1lX05hbWUgPSA0OwotICB2YXIga1NlbnNvcl9Db25maWd1
cmVSZWFkaW5nQ2hhbmdlTm90aWZpY2F0aW9uc19OYW1lID0gNTsKLQotICBmdW5jdGlvbiBTZW5z
b3JQdHIoaGFuZGxlT3JQdHJJbmZvKSB7Ci0gICAgdGhpcy5wdHIgPSBuZXcgYmluZGluZ3MuSW50
ZXJmYWNlUHRyQ29udHJvbGxlcihTZW5zb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVPclB0ckluZm8pOwotICB9Ci0KLSAgZnVuY3Rp
b24gU2Vuc29yQXNzb2NpYXRlZFB0cihhc3NvY2lhdGVkSW50ZXJmYWNlUHRySW5mbykgewotICAg
IHRoaXMucHRyID0gbmV3IGFzc29jaWF0ZWRCaW5kaW5ncy5Bc3NvY2lhdGVkSW50ZXJmYWNlUHRy
Q29udHJvbGxlcigKLSAgICAgICAgU2Vuc29yLCBhc3NvY2lhdGVkSW50ZXJmYWNlUHRySW5mbyk7
Ci0gIH0KLQotICBTZW5zb3JBc3NvY2lhdGVkUHRyLnByb3RvdHlwZSA9Ci0gICAgICBPYmplY3Qu
Y3JlYXRlKFNlbnNvclB0ci5wcm90b3R5cGUpOwotICBTZW5zb3JBc3NvY2lhdGVkUHRyLnByb3Rv
dHlwZS5jb25zdHJ1Y3RvciA9Ci0gICAgICBTZW5zb3JBc3NvY2lhdGVkUHRyOwotCi0gIGZ1bmN0
aW9uIFNlbnNvclByb3h5KHJlY2VpdmVyKSB7Ci0gICAgdGhpcy5yZWNlaXZlcl8gPSByZWNlaXZl
cjsKLSAgfQotICBTZW5zb3JQdHIucHJvdG90eXBlLmdldERlZmF1bHRDb25maWd1cmF0aW9uID0g
ZnVuY3Rpb24oKSB7Ci0gICAgcmV0dXJuIFNlbnNvclByb3h5LnByb3RvdHlwZS5nZXREZWZhdWx0
Q29uZmlndXJhdGlvbgotICAgICAgICAuYXBwbHkodGhpcy5wdHIuZ2V0UHJveHkoKSwgYXJndW1l
bnRzKTsKLSAgfTsKLQotICBTZW5zb3JQcm94eS5wcm90b3R5cGUuZ2V0RGVmYXVsdENvbmZpZ3Vy
YXRpb24gPSBmdW5jdGlvbigpIHsKLSAgICB2YXIgcGFyYW1zXyA9IG5ldyBTZW5zb3JfR2V0RGVm
YXVsdENvbmZpZ3VyYXRpb25fUGFyYW1zKCk7Ci0gICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0
aW9uKHJlc29sdmUsIHJlamVjdCkgewotICAgICAgdmFyIGJ1aWxkZXIgPSBuZXcgY29kZWMuTWVz
c2FnZVYxQnVpbGRlcigKLSAgICAgICAgICBrU2Vuc29yX0dldERlZmF1bHRDb25maWd1cmF0aW9u
X05hbWUsCi0gICAgICAgICAgY29kZWMuYWxpZ24oU2Vuc29yX0dldERlZmF1bHRDb25maWd1cmF0
aW9uX1BhcmFtcy5lbmNvZGVkU2l6ZSksCi0gICAgICAgICAgY29kZWMua01lc3NhZ2VFeHBlY3Rz
UmVzcG9uc2UsIDApOwotICAgICAgYnVpbGRlci5lbmNvZGVTdHJ1Y3QoU2Vuc29yX0dldERlZmF1
bHRDb25maWd1cmF0aW9uX1BhcmFtcywgcGFyYW1zXyk7Ci0gICAgICB2YXIgbWVzc2FnZSA9IGJ1
aWxkZXIuZmluaXNoKCk7Ci0gICAgICB0aGlzLnJlY2VpdmVyXy5hY2NlcHRBbmRFeHBlY3RSZXNw
b25zZShtZXNzYWdlKS50aGVuKGZ1bmN0aW9uKG1lc3NhZ2UpIHsKLSAgICAgICAgdmFyIHJlYWRl
ciA9IG5ldyBjb2RlYy5NZXNzYWdlUmVhZGVyKG1lc3NhZ2UpOwotICAgICAgICB2YXIgcmVzcG9u
c2VQYXJhbXMgPQotICAgICAgICAgICAgcmVhZGVyLmRlY29kZVN0cnVjdChTZW5zb3JfR2V0RGVm
YXVsdENvbmZpZ3VyYXRpb25fUmVzcG9uc2VQYXJhbXMpOwotICAgICAgICByZXNvbHZlKHJlc3Bv
bnNlUGFyYW1zKTsKLSAgICAgIH0pLmNhdGNoKGZ1bmN0aW9uKHJlc3VsdCkgewotICAgICAgICBy
ZWplY3QoRXJyb3IoIkNvbm5lY3Rpb24gZXJyb3I6ICIgKyByZXN1bHQpKTsKLSAgICAgIH0pOwot
ICAgIH0uYmluZCh0aGlzKSk7Ci0gIH07Ci0gIFNlbnNvclB0ci5wcm90b3R5cGUuYWRkQ29uZmln
dXJhdGlvbiA9IGZ1bmN0aW9uKCkgewotICAgIHJldHVybiBTZW5zb3JQcm94eS5wcm90b3R5cGUu
YWRkQ29uZmlndXJhdGlvbgotICAgICAgICAuYXBwbHkodGhpcy5wdHIuZ2V0UHJveHkoKSwgYXJn
dW1lbnRzKTsKLSAgfTsKLQotICBTZW5zb3JQcm94eS5wcm90b3R5cGUuYWRkQ29uZmlndXJhdGlv
biA9IGZ1bmN0aW9uKGNvbmZpZ3VyYXRpb24pIHsKLSAgICB2YXIgcGFyYW1zXyA9IG5ldyBTZW5z
b3JfQWRkQ29uZmlndXJhdGlvbl9QYXJhbXMoKTsKLSAgICBwYXJhbXNfLmNvbmZpZ3VyYXRpb24g
PSBjb25maWd1cmF0aW9uOwotICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZl
LCByZWplY3QpIHsKLSAgICAgIHZhciBidWlsZGVyID0gbmV3IGNvZGVjLk1lc3NhZ2VWMUJ1aWxk
ZXIoCi0gICAgICAgICAga1NlbnNvcl9BZGRDb25maWd1cmF0aW9uX05hbWUsCi0gICAgICAgICAg
Y29kZWMuYWxpZ24oU2Vuc29yX0FkZENvbmZpZ3VyYXRpb25fUGFyYW1zLmVuY29kZWRTaXplKSwK
LSAgICAgICAgICBjb2RlYy5rTWVzc2FnZUV4cGVjdHNSZXNwb25zZSwgMCk7Ci0gICAgICBidWls
ZGVyLmVuY29kZVN0cnVjdChTZW5zb3JfQWRkQ29uZmlndXJhdGlvbl9QYXJhbXMsIHBhcmFtc18p
OwotICAgICAgdmFyIG1lc3NhZ2UgPSBidWlsZGVyLmZpbmlzaCgpOwotICAgICAgdGhpcy5yZWNl
aXZlcl8uYWNjZXB0QW5kRXhwZWN0UmVzcG9uc2UobWVzc2FnZSkudGhlbihmdW5jdGlvbihtZXNz
YWdlKSB7Ci0gICAgICAgIHZhciByZWFkZXIgPSBuZXcgY29kZWMuTWVzc2FnZVJlYWRlcihtZXNz
YWdlKTsKLSAgICAgICAgdmFyIHJlc3BvbnNlUGFyYW1zID0KLSAgICAgICAgICAgIHJlYWRlci5k
ZWNvZGVTdHJ1Y3QoU2Vuc29yX0FkZENvbmZpZ3VyYXRpb25fUmVzcG9uc2VQYXJhbXMpOwotICAg
ICAgICByZXNvbHZlKHJlc3BvbnNlUGFyYW1zKTsKLSAgICAgIH0pLmNhdGNoKGZ1bmN0aW9uKHJl
c3VsdCkgewotICAgICAgICByZWplY3QoRXJyb3IoIkNvbm5lY3Rpb24gZXJyb3I6ICIgKyByZXN1
bHQpKTsKLSAgICAgIH0pOwotICAgIH0uYmluZCh0aGlzKSk7Ci0gIH07Ci0gIFNlbnNvclB0ci5w
cm90b3R5cGUucmVtb3ZlQ29uZmlndXJhdGlvbiA9IGZ1bmN0aW9uKCkgewotICAgIHJldHVybiBT
ZW5zb3JQcm94eS5wcm90b3R5cGUucmVtb3ZlQ29uZmlndXJhdGlvbgotICAgICAgICAuYXBwbHko
dGhpcy5wdHIuZ2V0UHJveHkoKSwgYXJndW1lbnRzKTsKLSAgfTsKLQotICBTZW5zb3JQcm94eS5w
cm90b3R5cGUucmVtb3ZlQ29uZmlndXJhdGlvbiA9IGZ1bmN0aW9uKGNvbmZpZ3VyYXRpb24pIHsK
LSAgICB2YXIgcGFyYW1zXyA9IG5ldyBTZW5zb3JfUmVtb3ZlQ29uZmlndXJhdGlvbl9QYXJhbXMo
KTsKLSAgICBwYXJhbXNfLmNvbmZpZ3VyYXRpb24gPSBjb25maWd1cmF0aW9uOwotICAgIHZhciBi
dWlsZGVyID0gbmV3IGNvZGVjLk1lc3NhZ2VWMEJ1aWxkZXIoCi0gICAgICAgIGtTZW5zb3JfUmVt
b3ZlQ29uZmlndXJhdGlvbl9OYW1lLAotICAgICAgICBjb2RlYy5hbGlnbihTZW5zb3JfUmVtb3Zl
Q29uZmlndXJhdGlvbl9QYXJhbXMuZW5jb2RlZFNpemUpKTsKLSAgICBidWlsZGVyLmVuY29kZVN0
cnVjdChTZW5zb3JfUmVtb3ZlQ29uZmlndXJhdGlvbl9QYXJhbXMsIHBhcmFtc18pOwotICAgIHZh
ciBtZXNzYWdlID0gYnVpbGRlci5maW5pc2goKTsKLSAgICB0aGlzLnJlY2VpdmVyXy5hY2NlcHQo
bWVzc2FnZSk7Ci0gIH07Ci0gIFNlbnNvclB0ci5wcm90b3R5cGUuc3VzcGVuZCA9IGZ1bmN0aW9u
KCkgewotICAgIHJldHVybiBTZW5zb3JQcm94eS5wcm90b3R5cGUuc3VzcGVuZAotICAgICAgICAu
YXBwbHkodGhpcy5wdHIuZ2V0UHJveHkoKSwgYXJndW1lbnRzKTsKLSAgfTsKLQotICBTZW5zb3JQ
cm94eS5wcm90b3R5cGUuc3VzcGVuZCA9IGZ1bmN0aW9uKCkgewotICAgIHZhciBwYXJhbXNfID0g
bmV3IFNlbnNvcl9TdXNwZW5kX1BhcmFtcygpOwotICAgIHZhciBidWlsZGVyID0gbmV3IGNvZGVj
Lk1lc3NhZ2VWMEJ1aWxkZXIoCi0gICAgICAgIGtTZW5zb3JfU3VzcGVuZF9OYW1lLAotICAgICAg
ICBjb2RlYy5hbGlnbihTZW5zb3JfU3VzcGVuZF9QYXJhbXMuZW5jb2RlZFNpemUpKTsKLSAgICBi
dWlsZGVyLmVuY29kZVN0cnVjdChTZW5zb3JfU3VzcGVuZF9QYXJhbXMsIHBhcmFtc18pOwotICAg
IHZhciBtZXNzYWdlID0gYnVpbGRlci5maW5pc2goKTsKLSAgICB0aGlzLnJlY2VpdmVyXy5hY2Nl
cHQobWVzc2FnZSk7Ci0gIH07Ci0gIFNlbnNvclB0ci5wcm90b3R5cGUucmVzdW1lID0gZnVuY3Rp
b24oKSB7Ci0gICAgcmV0dXJuIFNlbnNvclByb3h5LnByb3RvdHlwZS5yZXN1bWUKLSAgICAgICAg
LmFwcGx5KHRoaXMucHRyLmdldFByb3h5KCksIGFyZ3VtZW50cyk7Ci0gIH07Ci0KLSAgU2Vuc29y
UHJveHkucHJvdG90eXBlLnJlc3VtZSA9IGZ1bmN0aW9uKCkgewotICAgIHZhciBwYXJhbXNfID0g
bmV3IFNlbnNvcl9SZXN1bWVfUGFyYW1zKCk7Ci0gICAgdmFyIGJ1aWxkZXIgPSBuZXcgY29kZWMu
TWVzc2FnZVYwQnVpbGRlcigKLSAgICAgICAga1NlbnNvcl9SZXN1bWVfTmFtZSwKLSAgICAgICAg
Y29kZWMuYWxpZ24oU2Vuc29yX1Jlc3VtZV9QYXJhbXMuZW5jb2RlZFNpemUpKTsKLSAgICBidWls
ZGVyLmVuY29kZVN0cnVjdChTZW5zb3JfUmVzdW1lX1BhcmFtcywgcGFyYW1zXyk7Ci0gICAgdmFy
IG1lc3NhZ2UgPSBidWlsZGVyLmZpbmlzaCgpOwotICAgIHRoaXMucmVjZWl2ZXJfLmFjY2VwdCht
ZXNzYWdlKTsKLSAgfTsKLSAgU2Vuc29yUHRyLnByb3RvdHlwZS5jb25maWd1cmVSZWFkaW5nQ2hh
bmdlTm90aWZpY2F0aW9ucyA9IGZ1bmN0aW9uKCkgewotICAgIHJldHVybiBTZW5zb3JQcm94eS5w
cm90b3R5cGUuY29uZmlndXJlUmVhZGluZ0NoYW5nZU5vdGlmaWNhdGlvbnMKLSAgICAgICAgLmFw
cGx5KHRoaXMucHRyLmdldFByb3h5KCksIGFyZ3VtZW50cyk7Ci0gIH07Ci0KLSAgU2Vuc29yUHJv
eHkucHJvdG90eXBlLmNvbmZpZ3VyZVJlYWRpbmdDaGFuZ2VOb3RpZmljYXRpb25zID0gZnVuY3Rp
b24oZW5hYmxlZCkgewotICAgIHZhciBwYXJhbXNfID0gbmV3IFNlbnNvcl9Db25maWd1cmVSZWFk
aW5nQ2hhbmdlTm90aWZpY2F0aW9uc19QYXJhbXMoKTsKLSAgICBwYXJhbXNfLmVuYWJsZWQgPSBl
bmFibGVkOwotICAgIHZhciBidWlsZGVyID0gbmV3IGNvZGVjLk1lc3NhZ2VWMEJ1aWxkZXIoCi0g
ICAgICAgIGtTZW5zb3JfQ29uZmlndXJlUmVhZGluZ0NoYW5nZU5vdGlmaWNhdGlvbnNfTmFtZSwK
LSAgICAgICAgY29kZWMuYWxpZ24oU2Vuc29yX0NvbmZpZ3VyZVJlYWRpbmdDaGFuZ2VOb3RpZmlj
YXRpb25zX1BhcmFtcy5lbmNvZGVkU2l6ZSkpOwotICAgIGJ1aWxkZXIuZW5jb2RlU3RydWN0KFNl
bnNvcl9Db25maWd1cmVSZWFkaW5nQ2hhbmdlTm90aWZpY2F0aW9uc19QYXJhbXMsIHBhcmFtc18p
OwotICAgIHZhciBtZXNzYWdlID0gYnVpbGRlci5maW5pc2goKTsKLSAgICB0aGlzLnJlY2VpdmVy
Xy5hY2NlcHQobWVzc2FnZSk7Ci0gIH07Ci0KLSAgZnVuY3Rpb24gU2Vuc29yU3R1YihkZWxlZ2F0
ZSkgewotICAgIHRoaXMuZGVsZWdhdGVfID0gZGVsZWdhdGU7Ci0gIH0KLSAgU2Vuc29yU3R1Yi5w
cm90b3R5cGUuZ2V0RGVmYXVsdENvbmZpZ3VyYXRpb24gPSBmdW5jdGlvbigpIHsKLSAgICByZXR1
cm4gdGhpcy5kZWxlZ2F0ZV8gJiYgdGhpcy5kZWxlZ2F0ZV8uZ2V0RGVmYXVsdENvbmZpZ3VyYXRp
b24gJiYgdGhpcy5kZWxlZ2F0ZV8uZ2V0RGVmYXVsdENvbmZpZ3VyYXRpb24oKTsKLSAgfQotICBT
ZW5zb3JTdHViLnByb3RvdHlwZS5hZGRDb25maWd1cmF0aW9uID0gZnVuY3Rpb24oY29uZmlndXJh
dGlvbikgewotICAgIHJldHVybiB0aGlzLmRlbGVnYXRlXyAmJiB0aGlzLmRlbGVnYXRlXy5hZGRD
b25maWd1cmF0aW9uICYmIHRoaXMuZGVsZWdhdGVfLmFkZENvbmZpZ3VyYXRpb24oY29uZmlndXJh
dGlvbik7Ci0gIH0KLSAgU2Vuc29yU3R1Yi5wcm90b3R5cGUucmVtb3ZlQ29uZmlndXJhdGlvbiA9
IGZ1bmN0aW9uKGNvbmZpZ3VyYXRpb24pIHsKLSAgICByZXR1cm4gdGhpcy5kZWxlZ2F0ZV8gJiYg
dGhpcy5kZWxlZ2F0ZV8ucmVtb3ZlQ29uZmlndXJhdGlvbiAmJiB0aGlzLmRlbGVnYXRlXy5yZW1v
dmVDb25maWd1cmF0aW9uKGNvbmZpZ3VyYXRpb24pOwotICB9Ci0gIFNlbnNvclN0dWIucHJvdG90
eXBlLnN1c3BlbmQgPSBmdW5jdGlvbigpIHsKLSAgICByZXR1cm4gdGhpcy5kZWxlZ2F0ZV8gJiYg
dGhpcy5kZWxlZ2F0ZV8uc3VzcGVuZCAmJiB0aGlzLmRlbGVnYXRlXy5zdXNwZW5kKCk7Ci0gIH0K
LSAgU2Vuc29yU3R1Yi5wcm90b3R5cGUucmVzdW1lID0gZnVuY3Rpb24oKSB7Ci0gICAgcmV0dXJu
IHRoaXMuZGVsZWdhdGVfICYmIHRoaXMuZGVsZWdhdGVfLnJlc3VtZSAmJiB0aGlzLmRlbGVnYXRl
Xy5yZXN1bWUoKTsKLSAgfQotICBTZW5zb3JTdHViLnByb3RvdHlwZS5jb25maWd1cmVSZWFkaW5n
Q2hhbmdlTm90aWZpY2F0aW9ucyA9IGZ1bmN0aW9uKGVuYWJsZWQpIHsKLSAgICByZXR1cm4gdGhp
cy5kZWxlZ2F0ZV8gJiYgdGhpcy5kZWxlZ2F0ZV8uY29uZmlndXJlUmVhZGluZ0NoYW5nZU5vdGlm
aWNhdGlvbnMgJiYgdGhpcy5kZWxlZ2F0ZV8uY29uZmlndXJlUmVhZGluZ0NoYW5nZU5vdGlmaWNh
dGlvbnMoZW5hYmxlZCk7Ci0gIH0KLQotICBTZW5zb3JTdHViLnByb3RvdHlwZS5hY2NlcHQgPSBm
dW5jdGlvbihtZXNzYWdlKSB7Ci0gICAgdmFyIHJlYWRlciA9IG5ldyBjb2RlYy5NZXNzYWdlUmVh
ZGVyKG1lc3NhZ2UpOwotICAgIHN3aXRjaCAocmVhZGVyLm1lc3NhZ2VOYW1lKSB7Ci0gICAgY2Fz
ZSBrU2Vuc29yX1JlbW92ZUNvbmZpZ3VyYXRpb25fTmFtZToKLSAgICAgIHZhciBwYXJhbXMgPSBy
ZWFkZXIuZGVjb2RlU3RydWN0KFNlbnNvcl9SZW1vdmVDb25maWd1cmF0aW9uX1BhcmFtcyk7Ci0g
ICAgICB0aGlzLnJlbW92ZUNvbmZpZ3VyYXRpb24ocGFyYW1zLmNvbmZpZ3VyYXRpb24pOwotICAg
ICAgcmV0dXJuIHRydWU7Ci0gICAgY2FzZSBrU2Vuc29yX1N1c3BlbmRfTmFtZToKLSAgICAgIHZh
ciBwYXJhbXMgPSByZWFkZXIuZGVjb2RlU3RydWN0KFNlbnNvcl9TdXNwZW5kX1BhcmFtcyk7Ci0g
ICAgICB0aGlzLnN1c3BlbmQoKTsKLSAgICAgIHJldHVybiB0cnVlOwotICAgIGNhc2Uga1NlbnNv
cl9SZXN1bWVfTmFtZToKLSAgICAgIHZhciBwYXJhbXMgPSByZWFkZXIuZGVjb2RlU3RydWN0KFNl
bnNvcl9SZXN1bWVfUGFyYW1zKTsKLSAgICAgIHRoaXMucmVzdW1lKCk7Ci0gICAgICByZXR1cm4g
dHJ1ZTsKLSAgICBjYXNlIGtTZW5zb3JfQ29uZmlndXJlUmVhZGluZ0NoYW5nZU5vdGlmaWNhdGlv
bnNfTmFtZToKLSAgICAgIHZhciBwYXJhbXMgPSByZWFkZXIuZGVjb2RlU3RydWN0KFNlbnNvcl9D
b25maWd1cmVSZWFkaW5nQ2hhbmdlTm90aWZpY2F0aW9uc19QYXJhbXMpOwotICAgICAgdGhpcy5j
b25maWd1cmVSZWFkaW5nQ2hhbmdlTm90aWZpY2F0aW9ucyhwYXJhbXMuZW5hYmxlZCk7Ci0gICAg
ICByZXR1cm4gdHJ1ZTsKLSAgICBkZWZhdWx0OgotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0K
LSAgfTsKLQotICBTZW5zb3JTdHViLnByb3RvdHlwZS5hY2NlcHRXaXRoUmVzcG9uZGVyID0KLSAg
ICAgIGZ1bmN0aW9uKG1lc3NhZ2UsIHJlc3BvbmRlcikgewotICAgIHZhciByZWFkZXIgPSBuZXcg
Y29kZWMuTWVzc2FnZVJlYWRlcihtZXNzYWdlKTsKLSAgICBzd2l0Y2ggKHJlYWRlci5tZXNzYWdl
TmFtZSkgewotICAgIGNhc2Uga1NlbnNvcl9HZXREZWZhdWx0Q29uZmlndXJhdGlvbl9OYW1lOgot
ICAgICAgdmFyIHBhcmFtcyA9IHJlYWRlci5kZWNvZGVTdHJ1Y3QoU2Vuc29yX0dldERlZmF1bHRD
b25maWd1cmF0aW9uX1BhcmFtcyk7Ci0gICAgICB0aGlzLmdldERlZmF1bHRDb25maWd1cmF0aW9u
KCkudGhlbihmdW5jdGlvbihyZXNwb25zZSkgewotICAgICAgICB2YXIgcmVzcG9uc2VQYXJhbXMg
PQotICAgICAgICAgICAgbmV3IFNlbnNvcl9HZXREZWZhdWx0Q29uZmlndXJhdGlvbl9SZXNwb25z
ZVBhcmFtcygpOwotICAgICAgICByZXNwb25zZVBhcmFtcy5jb25maWd1cmF0aW9uID0gcmVzcG9u
c2UuY29uZmlndXJhdGlvbjsKLSAgICAgICAgdmFyIGJ1aWxkZXIgPSBuZXcgY29kZWMuTWVzc2Fn
ZVYxQnVpbGRlcigKLSAgICAgICAgICAgIGtTZW5zb3JfR2V0RGVmYXVsdENvbmZpZ3VyYXRpb25f
TmFtZSwKLSAgICAgICAgICAgIGNvZGVjLmFsaWduKFNlbnNvcl9HZXREZWZhdWx0Q29uZmlndXJh
dGlvbl9SZXNwb25zZVBhcmFtcy5lbmNvZGVkU2l6ZSksCi0gICAgICAgICAgICBjb2RlYy5rTWVz
c2FnZUlzUmVzcG9uc2UsIHJlYWRlci5yZXF1ZXN0SUQpOwotICAgICAgICBidWlsZGVyLmVuY29k
ZVN0cnVjdChTZW5zb3JfR2V0RGVmYXVsdENvbmZpZ3VyYXRpb25fUmVzcG9uc2VQYXJhbXMsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlUGFyYW1zKTsKLSAgICAgICAgdmFy
IG1lc3NhZ2UgPSBidWlsZGVyLmZpbmlzaCgpOwotICAgICAgICByZXNwb25kZXIuYWNjZXB0KG1l
c3NhZ2UpOwotICAgICAgfSk7Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICBjYXNlIGtTZW5zb3Jf
QWRkQ29uZmlndXJhdGlvbl9OYW1lOgotICAgICAgdmFyIHBhcmFtcyA9IHJlYWRlci5kZWNvZGVT
dHJ1Y3QoU2Vuc29yX0FkZENvbmZpZ3VyYXRpb25fUGFyYW1zKTsKLSAgICAgIHRoaXMuYWRkQ29u
ZmlndXJhdGlvbihwYXJhbXMuY29uZmlndXJhdGlvbikudGhlbihmdW5jdGlvbihyZXNwb25zZSkg
ewotICAgICAgICB2YXIgcmVzcG9uc2VQYXJhbXMgPQotICAgICAgICAgICAgbmV3IFNlbnNvcl9B
ZGRDb25maWd1cmF0aW9uX1Jlc3BvbnNlUGFyYW1zKCk7Ci0gICAgICAgIHJlc3BvbnNlUGFyYW1z
LnN1Y2Nlc3MgPSByZXNwb25zZS5zdWNjZXNzOwotICAgICAgICB2YXIgYnVpbGRlciA9IG5ldyBj
b2RlYy5NZXNzYWdlVjFCdWlsZGVyKAotICAgICAgICAgICAga1NlbnNvcl9BZGRDb25maWd1cmF0
aW9uX05hbWUsCi0gICAgICAgICAgICBjb2RlYy5hbGlnbihTZW5zb3JfQWRkQ29uZmlndXJhdGlv
bl9SZXNwb25zZVBhcmFtcy5lbmNvZGVkU2l6ZSksCi0gICAgICAgICAgICBjb2RlYy5rTWVzc2Fn
ZUlzUmVzcG9uc2UsIHJlYWRlci5yZXF1ZXN0SUQpOwotICAgICAgICBidWlsZGVyLmVuY29kZVN0
cnVjdChTZW5zb3JfQWRkQ29uZmlndXJhdGlvbl9SZXNwb25zZVBhcmFtcywKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcmVzcG9uc2VQYXJhbXMpOwotICAgICAgICB2YXIgbWVzc2FnZSA9
IGJ1aWxkZXIuZmluaXNoKCk7Ci0gICAgICAgIHJlc3BvbmRlci5hY2NlcHQobWVzc2FnZSk7Ci0g
ICAgICB9KTsKLSAgICAgIHJldHVybiB0cnVlOwotICAgIGRlZmF1bHQ6Ci0gICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgfQotICB9OwotCi0gIGZ1bmN0aW9uIHZhbGlkYXRlU2Vuc29yUmVxdWVzdCht
ZXNzYWdlVmFsaWRhdG9yKSB7Ci0gICAgdmFyIG1lc3NhZ2UgPSBtZXNzYWdlVmFsaWRhdG9yLm1l
c3NhZ2U7Ci0gICAgdmFyIHBhcmFtc0NsYXNzID0gbnVsbDsKLSAgICBzd2l0Y2ggKG1lc3NhZ2Uu
Z2V0TmFtZSgpKSB7Ci0gICAgICBjYXNlIGtTZW5zb3JfR2V0RGVmYXVsdENvbmZpZ3VyYXRpb25f
TmFtZToKLSAgICAgICAgaWYgKG1lc3NhZ2UuZXhwZWN0c1Jlc3BvbnNlKCkpCi0gICAgICAgICAg
cGFyYW1zQ2xhc3MgPSBTZW5zb3JfR2V0RGVmYXVsdENvbmZpZ3VyYXRpb25fUGFyYW1zOwotICAg
ICAgYnJlYWs7Ci0gICAgICBjYXNlIGtTZW5zb3JfQWRkQ29uZmlndXJhdGlvbl9OYW1lOgotICAg
ICAgICBpZiAobWVzc2FnZS5leHBlY3RzUmVzcG9uc2UoKSkKLSAgICAgICAgICBwYXJhbXNDbGFz
cyA9IFNlbnNvcl9BZGRDb25maWd1cmF0aW9uX1BhcmFtczsKLSAgICAgIGJyZWFrOwotICAgICAg
Y2FzZSBrU2Vuc29yX1JlbW92ZUNvbmZpZ3VyYXRpb25fTmFtZToKLSAgICAgICAgaWYgKCFtZXNz
YWdlLmV4cGVjdHNSZXNwb25zZSgpICYmICFtZXNzYWdlLmlzUmVzcG9uc2UoKSkKLSAgICAgICAg
ICBwYXJhbXNDbGFzcyA9IFNlbnNvcl9SZW1vdmVDb25maWd1cmF0aW9uX1BhcmFtczsKLSAgICAg
IGJyZWFrOwotICAgICAgY2FzZSBrU2Vuc29yX1N1c3BlbmRfTmFtZToKLSAgICAgICAgaWYgKCFt
ZXNzYWdlLmV4cGVjdHNSZXNwb25zZSgpICYmICFtZXNzYWdlLmlzUmVzcG9uc2UoKSkKLSAgICAg
ICAgICBwYXJhbXNDbGFzcyA9IFNlbnNvcl9TdXNwZW5kX1BhcmFtczsKLSAgICAgIGJyZWFrOwot
ICAgICAgY2FzZSBrU2Vuc29yX1Jlc3VtZV9OYW1lOgotICAgICAgICBpZiAoIW1lc3NhZ2UuZXhw
ZWN0c1Jlc3BvbnNlKCkgJiYgIW1lc3NhZ2UuaXNSZXNwb25zZSgpKQotICAgICAgICAgIHBhcmFt
c0NsYXNzID0gU2Vuc29yX1Jlc3VtZV9QYXJhbXM7Ci0gICAgICBicmVhazsKLSAgICAgIGNhc2Ug
a1NlbnNvcl9Db25maWd1cmVSZWFkaW5nQ2hhbmdlTm90aWZpY2F0aW9uc19OYW1lOgotICAgICAg
ICBpZiAoIW1lc3NhZ2UuZXhwZWN0c1Jlc3BvbnNlKCkgJiYgIW1lc3NhZ2UuaXNSZXNwb25zZSgp
KQotICAgICAgICAgIHBhcmFtc0NsYXNzID0gU2Vuc29yX0NvbmZpZ3VyZVJlYWRpbmdDaGFuZ2VO
b3RpZmljYXRpb25zX1BhcmFtczsKLSAgICAgIGJyZWFrOwotICAgIH0KLSAgICBpZiAocGFyYW1z
Q2xhc3MgPT09IG51bGwpCi0gICAgICByZXR1cm4gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5O
T05FOwotICAgIHJldHVybiBwYXJhbXNDbGFzcy52YWxpZGF0ZShtZXNzYWdlVmFsaWRhdG9yLCBt
ZXNzYWdlVmFsaWRhdG9yLm1lc3NhZ2UuZ2V0SGVhZGVyTnVtQnl0ZXMoKSk7Ci0gIH0KLQotICBm
dW5jdGlvbiB2YWxpZGF0ZVNlbnNvclJlc3BvbnNlKG1lc3NhZ2VWYWxpZGF0b3IpIHsKLSAgIHZh
ciBtZXNzYWdlID0gbWVzc2FnZVZhbGlkYXRvci5tZXNzYWdlOwotICAgdmFyIHBhcmFtc0NsYXNz
ID0gbnVsbDsKLSAgIHN3aXRjaCAobWVzc2FnZS5nZXROYW1lKCkpIHsKLSAgICAgIGNhc2Uga1Nl
bnNvcl9HZXREZWZhdWx0Q29uZmlndXJhdGlvbl9OYW1lOgotICAgICAgICBpZiAobWVzc2FnZS5p
c1Jlc3BvbnNlKCkpCi0gICAgICAgICAgcGFyYW1zQ2xhc3MgPSBTZW5zb3JfR2V0RGVmYXVsdENv
bmZpZ3VyYXRpb25fUmVzcG9uc2VQYXJhbXM7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBr
U2Vuc29yX0FkZENvbmZpZ3VyYXRpb25fTmFtZToKLSAgICAgICAgaWYgKG1lc3NhZ2UuaXNSZXNw
b25zZSgpKQotICAgICAgICAgIHBhcmFtc0NsYXNzID0gU2Vuc29yX0FkZENvbmZpZ3VyYXRpb25f
UmVzcG9uc2VQYXJhbXM7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBpZiAocGFyYW1zQ2xh
c3MgPT09IG51bGwpCi0gICAgICByZXR1cm4gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05F
OwotICAgIHJldHVybiBwYXJhbXNDbGFzcy52YWxpZGF0ZShtZXNzYWdlVmFsaWRhdG9yLCBtZXNz
YWdlVmFsaWRhdG9yLm1lc3NhZ2UuZ2V0SGVhZGVyTnVtQnl0ZXMoKSk7Ci0gIH0KLQotICB2YXIg
U2Vuc29yID0gewotICAgIG5hbWU6ICdkZXZpY2UubW9qb20uU2Vuc29yJywKLSAgICBrVmVyc2lv
bjogMCwKLSAgICBwdHJDbGFzczogU2Vuc29yUHRyLAotICAgIHByb3h5Q2xhc3M6IFNlbnNvclBy
b3h5LAotICAgIHN0dWJDbGFzczogU2Vuc29yU3R1YiwKLSAgICB2YWxpZGF0ZVJlcXVlc3Q6IHZh
bGlkYXRlU2Vuc29yUmVxdWVzdCwKLSAgICB2YWxpZGF0ZVJlc3BvbnNlOiB2YWxpZGF0ZVNlbnNv
clJlc3BvbnNlLAotICB9OwotICBTZW5zb3JTdHViLnByb3RvdHlwZS52YWxpZGF0b3IgPSB2YWxp
ZGF0ZVNlbnNvclJlcXVlc3Q7Ci0gIFNlbnNvclByb3h5LnByb3RvdHlwZS52YWxpZGF0b3IgPSB2
YWxpZGF0ZVNlbnNvclJlc3BvbnNlOwotICB2YXIga1NlbnNvckNsaWVudF9SYWlzZUVycm9yX05h
bWUgPSAwOwotICB2YXIga1NlbnNvckNsaWVudF9TZW5zb3JSZWFkaW5nQ2hhbmdlZF9OYW1lID0g
MTsKLQotICBmdW5jdGlvbiBTZW5zb3JDbGllbnRQdHIoaGFuZGxlT3JQdHJJbmZvKSB7Ci0gICAg
dGhpcy5wdHIgPSBuZXcgYmluZGluZ3MuSW50ZXJmYWNlUHRyQ29udHJvbGxlcihTZW5zb3JDbGll
bnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBo
YW5kbGVPclB0ckluZm8pOwotICB9Ci0KLSAgZnVuY3Rpb24gU2Vuc29yQ2xpZW50QXNzb2NpYXRl
ZFB0cihhc3NvY2lhdGVkSW50ZXJmYWNlUHRySW5mbykgewotICAgIHRoaXMucHRyID0gbmV3IGFz
c29jaWF0ZWRCaW5kaW5ncy5Bc3NvY2lhdGVkSW50ZXJmYWNlUHRyQ29udHJvbGxlcigKLSAgICAg
ICAgU2Vuc29yQ2xpZW50LCBhc3NvY2lhdGVkSW50ZXJmYWNlUHRySW5mbyk7Ci0gIH0KLQotICBT
ZW5zb3JDbGllbnRBc3NvY2lhdGVkUHRyLnByb3RvdHlwZSA9Ci0gICAgICBPYmplY3QuY3JlYXRl
KFNlbnNvckNsaWVudFB0ci5wcm90b3R5cGUpOwotICBTZW5zb3JDbGllbnRBc3NvY2lhdGVkUHRy
LnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9Ci0gICAgICBTZW5zb3JDbGllbnRBc3NvY2lhdGVkUHRy
OwotCi0gIGZ1bmN0aW9uIFNlbnNvckNsaWVudFByb3h5KHJlY2VpdmVyKSB7Ci0gICAgdGhpcy5y
ZWNlaXZlcl8gPSByZWNlaXZlcjsKLSAgfQotICBTZW5zb3JDbGllbnRQdHIucHJvdG90eXBlLnJh
aXNlRXJyb3IgPSBmdW5jdGlvbigpIHsKLSAgICByZXR1cm4gU2Vuc29yQ2xpZW50UHJveHkucHJv
dG90eXBlLnJhaXNlRXJyb3IKLSAgICAgICAgLmFwcGx5KHRoaXMucHRyLmdldFByb3h5KCksIGFy
Z3VtZW50cyk7Ci0gIH07Ci0KLSAgU2Vuc29yQ2xpZW50UHJveHkucHJvdG90eXBlLnJhaXNlRXJy
b3IgPSBmdW5jdGlvbigpIHsKLSAgICB2YXIgcGFyYW1zXyA9IG5ldyBTZW5zb3JDbGllbnRfUmFp
c2VFcnJvcl9QYXJhbXMoKTsKLSAgICB2YXIgYnVpbGRlciA9IG5ldyBjb2RlYy5NZXNzYWdlVjBC
dWlsZGVyKAotICAgICAgICBrU2Vuc29yQ2xpZW50X1JhaXNlRXJyb3JfTmFtZSwKLSAgICAgICAg
Y29kZWMuYWxpZ24oU2Vuc29yQ2xpZW50X1JhaXNlRXJyb3JfUGFyYW1zLmVuY29kZWRTaXplKSk7
Ci0gICAgYnVpbGRlci5lbmNvZGVTdHJ1Y3QoU2Vuc29yQ2xpZW50X1JhaXNlRXJyb3JfUGFyYW1z
LCBwYXJhbXNfKTsKLSAgICB2YXIgbWVzc2FnZSA9IGJ1aWxkZXIuZmluaXNoKCk7Ci0gICAgdGhp
cy5yZWNlaXZlcl8uYWNjZXB0KG1lc3NhZ2UpOwotICB9OwotICBTZW5zb3JDbGllbnRQdHIucHJv
dG90eXBlLnNlbnNvclJlYWRpbmdDaGFuZ2VkID0gZnVuY3Rpb24oKSB7Ci0gICAgcmV0dXJuIFNl
bnNvckNsaWVudFByb3h5LnByb3RvdHlwZS5zZW5zb3JSZWFkaW5nQ2hhbmdlZAotICAgICAgICAu
YXBwbHkodGhpcy5wdHIuZ2V0UHJveHkoKSwgYXJndW1lbnRzKTsKLSAgfTsKLQotICBTZW5zb3JD
bGllbnRQcm94eS5wcm90b3R5cGUuc2Vuc29yUmVhZGluZ0NoYW5nZWQgPSBmdW5jdGlvbigpIHsK
LSAgICB2YXIgcGFyYW1zXyA9IG5ldyBTZW5zb3JDbGllbnRfU2Vuc29yUmVhZGluZ0NoYW5nZWRf
UGFyYW1zKCk7Ci0gICAgdmFyIGJ1aWxkZXIgPSBuZXcgY29kZWMuTWVzc2FnZVYwQnVpbGRlcigK
LSAgICAgICAga1NlbnNvckNsaWVudF9TZW5zb3JSZWFkaW5nQ2hhbmdlZF9OYW1lLAotICAgICAg
ICBjb2RlYy5hbGlnbihTZW5zb3JDbGllbnRfU2Vuc29yUmVhZGluZ0NoYW5nZWRfUGFyYW1zLmVu
Y29kZWRTaXplKSk7Ci0gICAgYnVpbGRlci5lbmNvZGVTdHJ1Y3QoU2Vuc29yQ2xpZW50X1NlbnNv
clJlYWRpbmdDaGFuZ2VkX1BhcmFtcywgcGFyYW1zXyk7Ci0gICAgdmFyIG1lc3NhZ2UgPSBidWls
ZGVyLmZpbmlzaCgpOwotICAgIHRoaXMucmVjZWl2ZXJfLmFjY2VwdChtZXNzYWdlKTsKLSAgfTsK
LQotICBmdW5jdGlvbiBTZW5zb3JDbGllbnRTdHViKGRlbGVnYXRlKSB7Ci0gICAgdGhpcy5kZWxl
Z2F0ZV8gPSBkZWxlZ2F0ZTsKLSAgfQotICBTZW5zb3JDbGllbnRTdHViLnByb3RvdHlwZS5yYWlz
ZUVycm9yID0gZnVuY3Rpb24oKSB7Ci0gICAgcmV0dXJuIHRoaXMuZGVsZWdhdGVfICYmIHRoaXMu
ZGVsZWdhdGVfLnJhaXNlRXJyb3IgJiYgdGhpcy5kZWxlZ2F0ZV8ucmFpc2VFcnJvcigpOwotICB9
Ci0gIFNlbnNvckNsaWVudFN0dWIucHJvdG90eXBlLnNlbnNvclJlYWRpbmdDaGFuZ2VkID0gZnVu
Y3Rpb24oKSB7Ci0gICAgcmV0dXJuIHRoaXMuZGVsZWdhdGVfICYmIHRoaXMuZGVsZWdhdGVfLnNl
bnNvclJlYWRpbmdDaGFuZ2VkICYmIHRoaXMuZGVsZWdhdGVfLnNlbnNvclJlYWRpbmdDaGFuZ2Vk
KCk7Ci0gIH0KLQotICBTZW5zb3JDbGllbnRTdHViLnByb3RvdHlwZS5hY2NlcHQgPSBmdW5jdGlv
bihtZXNzYWdlKSB7Ci0gICAgdmFyIHJlYWRlciA9IG5ldyBjb2RlYy5NZXNzYWdlUmVhZGVyKG1l
c3NhZ2UpOwotICAgIHN3aXRjaCAocmVhZGVyLm1lc3NhZ2VOYW1lKSB7Ci0gICAgY2FzZSBrU2Vu
c29yQ2xpZW50X1JhaXNlRXJyb3JfTmFtZToKLSAgICAgIHZhciBwYXJhbXMgPSByZWFkZXIuZGVj
b2RlU3RydWN0KFNlbnNvckNsaWVudF9SYWlzZUVycm9yX1BhcmFtcyk7Ci0gICAgICB0aGlzLnJh
aXNlRXJyb3IoKTsKLSAgICAgIHJldHVybiB0cnVlOwotICAgIGNhc2Uga1NlbnNvckNsaWVudF9T
ZW5zb3JSZWFkaW5nQ2hhbmdlZF9OYW1lOgotICAgICAgdmFyIHBhcmFtcyA9IHJlYWRlci5kZWNv
ZGVTdHJ1Y3QoU2Vuc29yQ2xpZW50X1NlbnNvclJlYWRpbmdDaGFuZ2VkX1BhcmFtcyk7Ci0gICAg
ICB0aGlzLnNlbnNvclJlYWRpbmdDaGFuZ2VkKCk7Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICBk
ZWZhdWx0OgotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgfTsKLQotICBTZW5zb3JDbGll
bnRTdHViLnByb3RvdHlwZS5hY2NlcHRXaXRoUmVzcG9uZGVyID0KLSAgICAgIGZ1bmN0aW9uKG1l
c3NhZ2UsIHJlc3BvbmRlcikgewotICAgIHZhciByZWFkZXIgPSBuZXcgY29kZWMuTWVzc2FnZVJl
YWRlcihtZXNzYWdlKTsKLSAgICBzd2l0Y2ggKHJlYWRlci5tZXNzYWdlTmFtZSkgewotICAgIGRl
ZmF1bHQ6Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICB9OwotCi0gIGZ1bmN0aW9uIHZh
bGlkYXRlU2Vuc29yQ2xpZW50UmVxdWVzdChtZXNzYWdlVmFsaWRhdG9yKSB7Ci0gICAgdmFyIG1l
c3NhZ2UgPSBtZXNzYWdlVmFsaWRhdG9yLm1lc3NhZ2U7Ci0gICAgdmFyIHBhcmFtc0NsYXNzID0g
bnVsbDsKLSAgICBzd2l0Y2ggKG1lc3NhZ2UuZ2V0TmFtZSgpKSB7Ci0gICAgICBjYXNlIGtTZW5z
b3JDbGllbnRfUmFpc2VFcnJvcl9OYW1lOgotICAgICAgICBpZiAoIW1lc3NhZ2UuZXhwZWN0c1Jl
c3BvbnNlKCkgJiYgIW1lc3NhZ2UuaXNSZXNwb25zZSgpKQotICAgICAgICAgIHBhcmFtc0NsYXNz
ID0gU2Vuc29yQ2xpZW50X1JhaXNlRXJyb3JfUGFyYW1zOwotICAgICAgYnJlYWs7Ci0gICAgICBj
YXNlIGtTZW5zb3JDbGllbnRfU2Vuc29yUmVhZGluZ0NoYW5nZWRfTmFtZToKLSAgICAgICAgaWYg
KCFtZXNzYWdlLmV4cGVjdHNSZXNwb25zZSgpICYmICFtZXNzYWdlLmlzUmVzcG9uc2UoKSkKLSAg
ICAgICAgICBwYXJhbXNDbGFzcyA9IFNlbnNvckNsaWVudF9TZW5zb3JSZWFkaW5nQ2hhbmdlZF9Q
YXJhbXM7Ci0gICAgICBicmVhazsKLSAgICB9Ci0gICAgaWYgKHBhcmFtc0NsYXNzID09PSBudWxs
KQotICAgICAgcmV0dXJuIHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORTsKLSAgICByZXR1
cm4gcGFyYW1zQ2xhc3MudmFsaWRhdGUobWVzc2FnZVZhbGlkYXRvciwgbWVzc2FnZVZhbGlkYXRv
ci5tZXNzYWdlLmdldEhlYWRlck51bUJ5dGVzKCkpOwotICB9Ci0KLSAgZnVuY3Rpb24gdmFsaWRh
dGVTZW5zb3JDbGllbnRSZXNwb25zZShtZXNzYWdlVmFsaWRhdG9yKSB7Ci0gICAgcmV0dXJuIHZh
bGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORTsKLSAgfQotCi0gIHZhciBTZW5zb3JDbGllbnQg
PSB7Ci0gICAgbmFtZTogJ2RldmljZS5tb2pvbS5TZW5zb3JDbGllbnQnLAotICAgIGtWZXJzaW9u
OiAwLAotICAgIHB0ckNsYXNzOiBTZW5zb3JDbGllbnRQdHIsCi0gICAgcHJveHlDbGFzczogU2Vu
c29yQ2xpZW50UHJveHksCi0gICAgc3R1YkNsYXNzOiBTZW5zb3JDbGllbnRTdHViLAotICAgIHZh
bGlkYXRlUmVxdWVzdDogdmFsaWRhdGVTZW5zb3JDbGllbnRSZXF1ZXN0LAotICAgIHZhbGlkYXRl
UmVzcG9uc2U6IG51bGwsCi0gIH07Ci0gIFNlbnNvckNsaWVudFN0dWIucHJvdG90eXBlLnZhbGlk
YXRvciA9IHZhbGlkYXRlU2Vuc29yQ2xpZW50UmVxdWVzdDsKLSAgU2Vuc29yQ2xpZW50UHJveHku
cHJvdG90eXBlLnZhbGlkYXRvciA9IG51bGw7Ci0gIGV4cG9ydHMuU2Vuc29yVHlwZSA9IFNlbnNv
clR5cGU7Ci0gIGV4cG9ydHMuUmVwb3J0aW5nTW9kZSA9IFJlcG9ydGluZ01vZGU7Ci0gIGV4cG9y
dHMuU2Vuc29yQ29uZmlndXJhdGlvbiA9IFNlbnNvckNvbmZpZ3VyYXRpb247Ci0gIGV4cG9ydHMu
U2Vuc29yID0gU2Vuc29yOwotICBleHBvcnRzLlNlbnNvclB0ciA9IFNlbnNvclB0cjsKLSAgZXhw
b3J0cy5TZW5zb3JBc3NvY2lhdGVkUHRyID0gU2Vuc29yQXNzb2NpYXRlZFB0cjsKLSAgZXhwb3J0
cy5TZW5zb3JDbGllbnQgPSBTZW5zb3JDbGllbnQ7Ci0gIGV4cG9ydHMuU2Vuc29yQ2xpZW50UHRy
ID0gU2Vuc29yQ2xpZW50UHRyOwotICBleHBvcnRzLlNlbnNvckNsaWVudEFzc29jaWF0ZWRQdHIg
PSBTZW5zb3JDbGllbnRBc3NvY2lhdGVkUHRyOwotfSkoKTsKXCBObyBuZXdsaW5lIGF0IGVuZCBv
ZiBmaWxlCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3Jt
LXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS9zZW5zb3JfcHJvdmlkZXIubW9qb20uanMgYi9MYXlv
dXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1
bS9zZW5zb3JfcHJvdmlkZXIubW9qb20uanMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IGQ4MmIxNWEzMDRhMjQzOWY1MjA2ZTViYzg2YjkxYzUxZmNmOTRiZDguLjAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNj
L3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vc2Vuc29yX3Byb3ZpZGVyLm1v
am9tLmpzCisrKyAvZGV2L251bGwKQEAgLTEsNDI5ICswLDAgQEAKLS8vIENvcHlyaWdodCAyMDE0
IFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRo
aXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNh
biBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLQotJ3VzZSBzdHJpY3QnOwotCi0o
ZnVuY3Rpb24oKSB7Ci0gIHZhciBtb2pvbUlkID0gJ3NlcnZpY2VzL2RldmljZS9wdWJsaWMvbW9q
b20vc2Vuc29yX3Byb3ZpZGVyLm1vam9tJzsKLSAgaWYgKG1vam8uaW50ZXJuYWwuaXNNb2pvbUxv
YWRlZChtb2pvbUlkKSkgewotICAgIGNvbnNvbGUud2FybignVGhlIGZvbGxvd2luZyBtb2pvbSBp
cyBsb2FkZWQgbXVsdGlwbGUgdGltZXM6ICcgKyBtb2pvbUlkKTsKLSAgICByZXR1cm47Ci0gIH0K
LSAgbW9qby5pbnRlcm5hbC5tYXJrTW9qb21Mb2FkZWQobW9qb21JZCk7Ci0gIHZhciBiaW5kaW5n
cyA9IG1vam87Ci0gIHZhciBhc3NvY2lhdGVkQmluZGluZ3MgPSBtb2pvOwotICB2YXIgY29kZWMg
PSBtb2pvLmludGVybmFsOwotICB2YXIgdmFsaWRhdG9yID0gbW9qby5pbnRlcm5hbDsKLQotICB2
YXIgZXhwb3J0cyA9IG1vam8uaW50ZXJuYWwuZXhwb3NlTmFtZXNwYWNlKCdkZXZpY2UubW9qb20n
KTsKLSAgdmFyIHNlbnNvciQgPQotICAgICAgbW9qby5pbnRlcm5hbC5leHBvc2VOYW1lc3BhY2Uo
J2RldmljZS5tb2pvbScpOwotICBpZiAobW9qby5jb25maWcuYXV0b0xvYWRNb2pvbURlcHMpIHsK
LSAgICBtb2pvLmludGVybmFsLmxvYWRNb2pvbUlmTmVjZXNzYXJ5KAotICAgICAgICAnc2Vydmlj
ZXMvZGV2aWNlL3B1YmxpYy9tb2pvbS9zZW5zb3IubW9qb20nLCAnc2Vuc29yLm1vam9tLmpzJyk7
Ci0gIH0KLQotCi0gIHZhciBTZW5zb3JDcmVhdGlvblJlc3VsdCA9IHt9OwotICBTZW5zb3JDcmVh
dGlvblJlc3VsdC5TVUNDRVNTID0gMDsKLSAgU2Vuc29yQ3JlYXRpb25SZXN1bHQuRVJST1JfTk9U
X0FWQUlMQUJMRSA9IFNlbnNvckNyZWF0aW9uUmVzdWx0LlNVQ0NFU1MgKyAxOwotICBTZW5zb3JD
cmVhdGlvblJlc3VsdC5FUlJPUl9OT1RfQUxMT1dFRCA9IFNlbnNvckNyZWF0aW9uUmVzdWx0LkVS
Uk9SX05PVF9BVkFJTEFCTEUgKyAxOwotCi0gIFNlbnNvckNyZWF0aW9uUmVzdWx0LmlzS25vd25F
bnVtVmFsdWUgPSBmdW5jdGlvbih2YWx1ZSkgewotICAgIHN3aXRjaCAodmFsdWUpIHsKLSAgICBj
YXNlIDA6Ci0gICAgY2FzZSAxOgotICAgIGNhc2UgMjoKLSAgICAgIHJldHVybiB0cnVlOwotICAg
IH0KLSAgICByZXR1cm4gZmFsc2U7Ci0gIH07Ci0KLSAgU2Vuc29yQ3JlYXRpb25SZXN1bHQudmFs
aWRhdGUgPSBmdW5jdGlvbihlbnVtVmFsdWUpIHsKLSAgICB2YXIgaXNFeHRlbnNpYmxlID0gZmFs
c2U7Ci0gICAgaWYgKGlzRXh0ZW5zaWJsZSB8fCB0aGlzLmlzS25vd25FbnVtVmFsdWUoZW51bVZh
bHVlKSkKLSAgICAgIHJldHVybiB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkU7Ci0KLSAg
ICByZXR1cm4gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5VTktOT1dOX0VOVU1fVkFMVUU7Ci0g
IH07Ci0KLSAgZnVuY3Rpb24gU2Vuc29ySW5pdFBhcmFtcyh2YWx1ZXMpIHsKLSAgICB0aGlzLmlu
aXREZWZhdWx0c18oKTsKLSAgICB0aGlzLmluaXRGaWVsZHNfKHZhbHVlcyk7Ci0gIH0KLQotCi0g
IFNlbnNvckluaXRQYXJhbXMua1JlYWRCdWZmZXJTaXplRm9yVGVzdHMgPSA0ODsKLSAgU2Vuc29y
SW5pdFBhcmFtcy5wcm90b3R5cGUuaW5pdERlZmF1bHRzXyA9IGZ1bmN0aW9uKCkgewotICAgIHRo
aXMuc2Vuc29yID0gbmV3IHNlbnNvciQuU2Vuc29yUHRyKCk7Ci0gICAgdGhpcy5jbGllbnRSZWNl
aXZlciA9IG5ldyBiaW5kaW5ncy5JbnRlcmZhY2VSZXF1ZXN0KCk7Ci0gICAgdGhpcy5tZW1vcnkg
PSBudWxsOwotICAgIHRoaXMuYnVmZmVyT2Zmc2V0ID0gMDsKLSAgICB0aGlzLm1vZGUgPSAwOwot
ICAgIHRoaXMuZGVmYXVsdENvbmZpZ3VyYXRpb24gPSBudWxsOwotICAgIHRoaXMubWF4aW11bUZy
ZXF1ZW5jeSA9IDA7Ci0gICAgdGhpcy5taW5pbXVtRnJlcXVlbmN5ID0gMDsKLSAgfTsKLSAgU2Vu
c29ySW5pdFBhcmFtcy5wcm90b3R5cGUuaW5pdEZpZWxkc18gPSBmdW5jdGlvbihmaWVsZHMpIHsK
LSAgICBmb3IodmFyIGZpZWxkIGluIGZpZWxkcykgewotICAgICAgICBpZiAodGhpcy5oYXNPd25Q
cm9wZXJ0eShmaWVsZCkpCi0gICAgICAgICAgdGhpc1tmaWVsZF0gPSBmaWVsZHNbZmllbGRdOwot
ICAgIH0KLSAgfTsKLQotICBTZW5zb3JJbml0UGFyYW1zLnZhbGlkYXRlID0gZnVuY3Rpb24obWVz
c2FnZVZhbGlkYXRvciwgb2Zmc2V0KSB7Ci0gICAgdmFyIGVycjsKLSAgICBlcnIgPSBtZXNzYWdl
VmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0SGVhZGVyKG9mZnNldCwgY29kZWMua1N0cnVjdEhlYWRl
clNpemUpOwotICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkK
LSAgICAgICAgcmV0dXJuIGVycjsKLQotICAgIHZhciBrVmVyc2lvblNpemVzID0gWwotICAgICAg
e3ZlcnNpb246IDAsIG51bUJ5dGVzOiA2NH0KLSAgICBdOwotICAgIGVyciA9IG1lc3NhZ2VWYWxp
ZGF0b3IudmFsaWRhdGVTdHJ1Y3RWZXJzaW9uKG9mZnNldCwga1ZlcnNpb25TaXplcyk7Ci0gICAg
aWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQotICAgICAgICByZXR1
cm4gZXJyOwotCi0KLSAgICAvLyB2YWxpZGF0ZSBTZW5zb3JJbml0UGFyYW1zLnNlbnNvcgotICAg
IGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVJbnRlcmZhY2Uob2Zmc2V0ICsgY29kZWMu
a1N0cnVjdEhlYWRlclNpemUgKyAwLCBmYWxzZSk7Ci0gICAgaWYgKGVyciAhPT0gdmFsaWRhdG9y
LnZhbGlkYXRpb25FcnJvci5OT05FKQotICAgICAgICByZXR1cm4gZXJyOwotCi0KLSAgICAvLyB2
YWxpZGF0ZSBTZW5zb3JJbml0UGFyYW1zLmNsaWVudFJlY2VpdmVyCi0gICAgZXJyID0gbWVzc2Fn
ZVZhbGlkYXRvci52YWxpZGF0ZUludGVyZmFjZVJlcXVlc3Qob2Zmc2V0ICsgY29kZWMua1N0cnVj
dEhlYWRlclNpemUgKyA4LCBmYWxzZSkKLSAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRh
dGlvbkVycm9yLk5PTkUpCi0gICAgICAgIHJldHVybiBlcnI7Ci0KLQotICAgIC8vIHZhbGlkYXRl
IFNlbnNvckluaXRQYXJhbXMubWVtb3J5Ci0gICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxp
ZGF0ZUhhbmRsZShvZmZzZXQgKyBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDEyLCBmYWxzZSkK
LSAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCi0gICAgICAg
IHJldHVybiBlcnI7Ci0KLQotCi0gICAgLy8gdmFsaWRhdGUgU2Vuc29ySW5pdFBhcmFtcy5tb2Rl
Ci0gICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZUVudW0ob2Zmc2V0ICsgY29kZWMu
a1N0cnVjdEhlYWRlclNpemUgKyAyNCwgc2Vuc29yJC5SZXBvcnRpbmdNb2RlKTsKLSAgICBpZiAo
ZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCi0gICAgICAgIHJldHVybiBl
cnI7Ci0KLQotICAgIC8vIHZhbGlkYXRlIFNlbnNvckluaXRQYXJhbXMuZGVmYXVsdENvbmZpZ3Vy
YXRpb24KLSAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0UG9pbnRlcihv
ZmZzZXQgKyBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDMyLCBzZW5zb3IkLlNlbnNvckNvbmZp
Z3VyYXRpb24sIGZhbHNlKTsKLSAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVy
cm9yLk5PTkUpCi0gICAgICAgIHJldHVybiBlcnI7Ci0KLQotCi0gICAgcmV0dXJuIHZhbGlkYXRv
ci52YWxpZGF0aW9uRXJyb3IuTk9ORTsKLSAgfTsKLQotICBTZW5zb3JJbml0UGFyYW1zLmVuY29k
ZWRTaXplID0gY29kZWMua1N0cnVjdEhlYWRlclNpemUgKyA1NjsKLQotICBTZW5zb3JJbml0UGFy
YW1zLmRlY29kZSA9IGZ1bmN0aW9uKGRlY29kZXIpIHsKLSAgICB2YXIgcGFja2VkOwotICAgIHZh
ciB2YWwgPSBuZXcgU2Vuc29ySW5pdFBhcmFtcygpOwotICAgIHZhciBudW1iZXJPZkJ5dGVzID0g
ZGVjb2Rlci5yZWFkVWludDMyKCk7Ci0gICAgdmFyIHZlcnNpb24gPSBkZWNvZGVyLnJlYWRVaW50
MzIoKTsKLSAgICB2YWwuc2Vuc29yID0gZGVjb2Rlci5kZWNvZGVTdHJ1Y3QobmV3IGNvZGVjLklu
dGVyZmFjZShzZW5zb3IkLlNlbnNvclB0cikpOwotICAgIHZhbC5jbGllbnRSZWNlaXZlciA9IGRl
Y29kZXIuZGVjb2RlU3RydWN0KGNvZGVjLkludGVyZmFjZVJlcXVlc3QpOwotICAgIHZhbC5tZW1v
cnkgPSBkZWNvZGVyLmRlY29kZVN0cnVjdChjb2RlYy5IYW5kbGUpOwotICAgIHZhbC5idWZmZXJP
ZmZzZXQgPSBkZWNvZGVyLmRlY29kZVN0cnVjdChjb2RlYy5VaW50NjQpOwotICAgIHZhbC5tb2Rl
ID0gZGVjb2Rlci5kZWNvZGVTdHJ1Y3QoY29kZWMuSW50MzIpOwotICAgIGRlY29kZXIuc2tpcCgx
KTsKLSAgICBkZWNvZGVyLnNraXAoMSk7Ci0gICAgZGVjb2Rlci5za2lwKDEpOwotICAgIGRlY29k
ZXIuc2tpcCgxKTsKLSAgICB2YWwuZGVmYXVsdENvbmZpZ3VyYXRpb24gPSBkZWNvZGVyLmRlY29k
ZVN0cnVjdFBvaW50ZXIoc2Vuc29yJC5TZW5zb3JDb25maWd1cmF0aW9uKTsKLSAgICB2YWwubWF4
aW11bUZyZXF1ZW5jeSA9IGRlY29kZXIuZGVjb2RlU3RydWN0KGNvZGVjLkRvdWJsZSk7Ci0gICAg
dmFsLm1pbmltdW1GcmVxdWVuY3kgPSBkZWNvZGVyLmRlY29kZVN0cnVjdChjb2RlYy5Eb3VibGUp
OwotICAgIHJldHVybiB2YWw7Ci0gIH07Ci0KLSAgU2Vuc29ySW5pdFBhcmFtcy5lbmNvZGUgPSBm
dW5jdGlvbihlbmNvZGVyLCB2YWwpIHsKLSAgICB2YXIgcGFja2VkOwotICAgIGVuY29kZXIud3Jp
dGVVaW50MzIoU2Vuc29ySW5pdFBhcmFtcy5lbmNvZGVkU2l6ZSk7Ci0gICAgZW5jb2Rlci53cml0
ZVVpbnQzMigwKTsKLSAgICBlbmNvZGVyLmVuY29kZVN0cnVjdChuZXcgY29kZWMuSW50ZXJmYWNl
KHNlbnNvciQuU2Vuc29yUHRyKSwgdmFsLnNlbnNvcik7Ci0gICAgZW5jb2Rlci5lbmNvZGVTdHJ1
Y3QoY29kZWMuSW50ZXJmYWNlUmVxdWVzdCwgdmFsLmNsaWVudFJlY2VpdmVyKTsKLSAgICBlbmNv
ZGVyLmVuY29kZVN0cnVjdChjb2RlYy5IYW5kbGUsIHZhbC5tZW1vcnkpOwotICAgIGVuY29kZXIu
ZW5jb2RlU3RydWN0KGNvZGVjLlVpbnQ2NCwgdmFsLmJ1ZmZlck9mZnNldCk7Ci0gICAgZW5jb2Rl
ci5lbmNvZGVTdHJ1Y3QoY29kZWMuSW50MzIsIHZhbC5tb2RlKTsKLSAgICBlbmNvZGVyLnNraXAo
MSk7Ci0gICAgZW5jb2Rlci5za2lwKDEpOwotICAgIGVuY29kZXIuc2tpcCgxKTsKLSAgICBlbmNv
ZGVyLnNraXAoMSk7Ci0gICAgZW5jb2Rlci5lbmNvZGVTdHJ1Y3RQb2ludGVyKHNlbnNvciQuU2Vu
c29yQ29uZmlndXJhdGlvbiwgdmFsLmRlZmF1bHRDb25maWd1cmF0aW9uKTsKLSAgICBlbmNvZGVy
LmVuY29kZVN0cnVjdChjb2RlYy5Eb3VibGUsIHZhbC5tYXhpbXVtRnJlcXVlbmN5KTsKLSAgICBl
bmNvZGVyLmVuY29kZVN0cnVjdChjb2RlYy5Eb3VibGUsIHZhbC5taW5pbXVtRnJlcXVlbmN5KTsK
LSAgfTsKLSAgZnVuY3Rpb24gU2Vuc29yUHJvdmlkZXJfR2V0U2Vuc29yX1BhcmFtcyh2YWx1ZXMp
IHsKLSAgICB0aGlzLmluaXREZWZhdWx0c18oKTsKLSAgICB0aGlzLmluaXRGaWVsZHNfKHZhbHVl
cyk7Ci0gIH0KLQotCi0gIFNlbnNvclByb3ZpZGVyX0dldFNlbnNvcl9QYXJhbXMucHJvdG90eXBl
LmluaXREZWZhdWx0c18gPSBmdW5jdGlvbigpIHsKLSAgICB0aGlzLnR5cGUgPSAwOwotICB9Owot
ICBTZW5zb3JQcm92aWRlcl9HZXRTZW5zb3JfUGFyYW1zLnByb3RvdHlwZS5pbml0RmllbGRzXyA9
IGZ1bmN0aW9uKGZpZWxkcykgewotICAgIGZvcih2YXIgZmllbGQgaW4gZmllbGRzKSB7Ci0gICAg
ICAgIGlmICh0aGlzLmhhc093blByb3BlcnR5KGZpZWxkKSkKLSAgICAgICAgICB0aGlzW2ZpZWxk
XSA9IGZpZWxkc1tmaWVsZF07Ci0gICAgfQotICB9OwotCi0gIFNlbnNvclByb3ZpZGVyX0dldFNl
bnNvcl9QYXJhbXMudmFsaWRhdGUgPSBmdW5jdGlvbihtZXNzYWdlVmFsaWRhdG9yLCBvZmZzZXQp
IHsKLSAgICB2YXIgZXJyOwotICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1
Y3RIZWFkZXIob2Zmc2V0LCBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSk7Ci0gICAgaWYgKGVyciAh
PT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQotICAgICAgICByZXR1cm4gZXJyOwot
Ci0gICAgdmFyIGtWZXJzaW9uU2l6ZXMgPSBbCi0gICAgICB7dmVyc2lvbjogMCwgbnVtQnl0ZXM6
IDE2fQotICAgIF07Ci0gICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdFZl
cnNpb24ob2Zmc2V0LCBrVmVyc2lvblNpemVzKTsKLSAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3Iu
dmFsaWRhdGlvbkVycm9yLk5PTkUpCi0gICAgICAgIHJldHVybiBlcnI7Ci0KLQotICAgIC8vIHZh
bGlkYXRlIFNlbnNvclByb3ZpZGVyX0dldFNlbnNvcl9QYXJhbXMudHlwZQotICAgIGVyciA9IG1l
c3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVFbnVtKG9mZnNldCArIGNvZGVjLmtTdHJ1Y3RIZWFkZXJT
aXplICsgMCwgc2Vuc29yJC5TZW5zb3JUeXBlKTsKLSAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3Iu
dmFsaWRhdGlvbkVycm9yLk5PTkUpCi0gICAgICAgIHJldHVybiBlcnI7Ci0KLSAgICByZXR1cm4g
dmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FOwotICB9OwotCi0gIFNlbnNvclByb3ZpZGVy
X0dldFNlbnNvcl9QYXJhbXMuZW5jb2RlZFNpemUgPSBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSAr
IDg7Ci0KLSAgU2Vuc29yUHJvdmlkZXJfR2V0U2Vuc29yX1BhcmFtcy5kZWNvZGUgPSBmdW5jdGlv
bihkZWNvZGVyKSB7Ci0gICAgdmFyIHBhY2tlZDsKLSAgICB2YXIgdmFsID0gbmV3IFNlbnNvclBy
b3ZpZGVyX0dldFNlbnNvcl9QYXJhbXMoKTsKLSAgICB2YXIgbnVtYmVyT2ZCeXRlcyA9IGRlY29k
ZXIucmVhZFVpbnQzMigpOwotICAgIHZhciB2ZXJzaW9uID0gZGVjb2Rlci5yZWFkVWludDMyKCk7
Ci0gICAgdmFsLnR5cGUgPSBkZWNvZGVyLmRlY29kZVN0cnVjdChjb2RlYy5JbnQzMik7Ci0gICAg
ZGVjb2Rlci5za2lwKDEpOwotICAgIGRlY29kZXIuc2tpcCgxKTsKLSAgICBkZWNvZGVyLnNraXAo
MSk7Ci0gICAgZGVjb2Rlci5za2lwKDEpOwotICAgIHJldHVybiB2YWw7Ci0gIH07Ci0KLSAgU2Vu
c29yUHJvdmlkZXJfR2V0U2Vuc29yX1BhcmFtcy5lbmNvZGUgPSBmdW5jdGlvbihlbmNvZGVyLCB2
YWwpIHsKLSAgICB2YXIgcGFja2VkOwotICAgIGVuY29kZXIud3JpdGVVaW50MzIoU2Vuc29yUHJv
dmlkZXJfR2V0U2Vuc29yX1BhcmFtcy5lbmNvZGVkU2l6ZSk7Ci0gICAgZW5jb2Rlci53cml0ZVVp
bnQzMigwKTsKLSAgICBlbmNvZGVyLmVuY29kZVN0cnVjdChjb2RlYy5JbnQzMiwgdmFsLnR5cGUp
OwotICAgIGVuY29kZXIuc2tpcCgxKTsKLSAgICBlbmNvZGVyLnNraXAoMSk7Ci0gICAgZW5jb2Rl
ci5za2lwKDEpOwotICAgIGVuY29kZXIuc2tpcCgxKTsKLSAgfTsKLSAgZnVuY3Rpb24gU2Vuc29y
UHJvdmlkZXJfR2V0U2Vuc29yX1Jlc3BvbnNlUGFyYW1zKHZhbHVlcykgewotICAgIHRoaXMuaW5p
dERlZmF1bHRzXygpOwotICAgIHRoaXMuaW5pdEZpZWxkc18odmFsdWVzKTsKLSAgfQotCi0KLSAg
U2Vuc29yUHJvdmlkZXJfR2V0U2Vuc29yX1Jlc3BvbnNlUGFyYW1zLnByb3RvdHlwZS5pbml0RGVm
YXVsdHNfID0gZnVuY3Rpb24oKSB7Ci0gICAgdGhpcy5yZXN1bHQgPSAwOwotICAgIHRoaXMuaW5p
dFBhcmFtcyA9IG51bGw7Ci0gIH07Ci0gIFNlbnNvclByb3ZpZGVyX0dldFNlbnNvcl9SZXNwb25z
ZVBhcmFtcy5wcm90b3R5cGUuaW5pdEZpZWxkc18gPSBmdW5jdGlvbihmaWVsZHMpIHsKLSAgICBm
b3IodmFyIGZpZWxkIGluIGZpZWxkcykgewotICAgICAgICBpZiAodGhpcy5oYXNPd25Qcm9wZXJ0
eShmaWVsZCkpCi0gICAgICAgICAgdGhpc1tmaWVsZF0gPSBmaWVsZHNbZmllbGRdOwotICAgIH0K
LSAgfTsKLQotICBTZW5zb3JQcm92aWRlcl9HZXRTZW5zb3JfUmVzcG9uc2VQYXJhbXMudmFsaWRh
dGUgPSBmdW5jdGlvbihtZXNzYWdlVmFsaWRhdG9yLCBvZmZzZXQpIHsKLSAgICB2YXIgZXJyOwot
ICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RIZWFkZXIob2Zmc2V0LCBj
b2RlYy5rU3RydWN0SGVhZGVyU2l6ZSk7Ci0gICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlk
YXRpb25FcnJvci5OT05FKQotICAgICAgICByZXR1cm4gZXJyOwotCi0gICAgdmFyIGtWZXJzaW9u
U2l6ZXMgPSBbCi0gICAgICB7dmVyc2lvbjogMCwgbnVtQnl0ZXM6IDI0fQotICAgIF07Ci0gICAg
ZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdFZlcnNpb24ob2Zmc2V0LCBrVmVy
c2lvblNpemVzKTsKLSAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5P
TkUpCi0gICAgICAgIHJldHVybiBlcnI7Ci0KLQotICAgIC8vIHZhbGlkYXRlIFNlbnNvclByb3Zp
ZGVyX0dldFNlbnNvcl9SZXNwb25zZVBhcmFtcy5yZXN1bHQKLSAgICBlcnIgPSBtZXNzYWdlVmFs
aWRhdG9yLnZhbGlkYXRlRW51bShvZmZzZXQgKyBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDAs
IFNlbnNvckNyZWF0aW9uUmVzdWx0KTsKLSAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRh
dGlvbkVycm9yLk5PTkUpCi0gICAgICAgIHJldHVybiBlcnI7Ci0KLQotICAgIC8vIHZhbGlkYXRl
IFNlbnNvclByb3ZpZGVyX0dldFNlbnNvcl9SZXNwb25zZVBhcmFtcy5pbml0UGFyYW1zCi0gICAg
ZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdFBvaW50ZXIob2Zmc2V0ICsgY29k
ZWMua1N0cnVjdEhlYWRlclNpemUgKyA4LCBTZW5zb3JJbml0UGFyYW1zLCB0cnVlKTsKLSAgICBp
ZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCi0gICAgICAgIHJldHVy
biBlcnI7Ci0KLSAgICByZXR1cm4gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FOwotICB9
OwotCi0gIFNlbnNvclByb3ZpZGVyX0dldFNlbnNvcl9SZXNwb25zZVBhcmFtcy5lbmNvZGVkU2l6
ZSA9IGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgMTY7Ci0KLSAgU2Vuc29yUHJvdmlkZXJfR2V0
U2Vuc29yX1Jlc3BvbnNlUGFyYW1zLmRlY29kZSA9IGZ1bmN0aW9uKGRlY29kZXIpIHsKLSAgICB2
YXIgcGFja2VkOwotICAgIHZhciB2YWwgPSBuZXcgU2Vuc29yUHJvdmlkZXJfR2V0U2Vuc29yX1Jl
c3BvbnNlUGFyYW1zKCk7Ci0gICAgdmFyIG51bWJlck9mQnl0ZXMgPSBkZWNvZGVyLnJlYWRVaW50
MzIoKTsKLSAgICB2YXIgdmVyc2lvbiA9IGRlY29kZXIucmVhZFVpbnQzMigpOwotICAgIHZhbC5y
ZXN1bHQgPSBkZWNvZGVyLmRlY29kZVN0cnVjdChjb2RlYy5JbnQzMik7Ci0gICAgZGVjb2Rlci5z
a2lwKDEpOwotICAgIGRlY29kZXIuc2tpcCgxKTsKLSAgICBkZWNvZGVyLnNraXAoMSk7Ci0gICAg
ZGVjb2Rlci5za2lwKDEpOwotICAgIHZhbC5pbml0UGFyYW1zID0gZGVjb2Rlci5kZWNvZGVTdHJ1
Y3RQb2ludGVyKFNlbnNvckluaXRQYXJhbXMpOwotICAgIHJldHVybiB2YWw7Ci0gIH07Ci0KLSAg
U2Vuc29yUHJvdmlkZXJfR2V0U2Vuc29yX1Jlc3BvbnNlUGFyYW1zLmVuY29kZSA9IGZ1bmN0aW9u
KGVuY29kZXIsIHZhbCkgewotICAgIHZhciBwYWNrZWQ7Ci0gICAgZW5jb2Rlci53cml0ZVVpbnQz
MihTZW5zb3JQcm92aWRlcl9HZXRTZW5zb3JfUmVzcG9uc2VQYXJhbXMuZW5jb2RlZFNpemUpOwot
ICAgIGVuY29kZXIud3JpdGVVaW50MzIoMCk7Ci0gICAgZW5jb2Rlci5lbmNvZGVTdHJ1Y3QoY29k
ZWMuSW50MzIsIHZhbC5yZXN1bHQpOwotICAgIGVuY29kZXIuc2tpcCgxKTsKLSAgICBlbmNvZGVy
LnNraXAoMSk7Ci0gICAgZW5jb2Rlci5za2lwKDEpOwotICAgIGVuY29kZXIuc2tpcCgxKTsKLSAg
ICBlbmNvZGVyLmVuY29kZVN0cnVjdFBvaW50ZXIoU2Vuc29ySW5pdFBhcmFtcywgdmFsLmluaXRQ
YXJhbXMpOwotICB9OwotICB2YXIga1NlbnNvclByb3ZpZGVyX0dldFNlbnNvcl9OYW1lID0gMDsK
LQotICBmdW5jdGlvbiBTZW5zb3JQcm92aWRlclB0cihoYW5kbGVPclB0ckluZm8pIHsKLSAgICB0
aGlzLnB0ciA9IG5ldyBiaW5kaW5ncy5JbnRlcmZhY2VQdHJDb250cm9sbGVyKFNlbnNvclByb3Zp
ZGVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aGFuZGxlT3JQdHJJbmZvKTsKLSAgfQotCi0gIGZ1bmN0aW9uIFNlbnNvclByb3ZpZGVyQXNzb2Np
YXRlZFB0cihhc3NvY2lhdGVkSW50ZXJmYWNlUHRySW5mbykgewotICAgIHRoaXMucHRyID0gbmV3
IGFzc29jaWF0ZWRCaW5kaW5ncy5Bc3NvY2lhdGVkSW50ZXJmYWNlUHRyQ29udHJvbGxlcigKLSAg
ICAgICAgU2Vuc29yUHJvdmlkZXIsIGFzc29jaWF0ZWRJbnRlcmZhY2VQdHJJbmZvKTsKLSAgfQot
Ci0gIFNlbnNvclByb3ZpZGVyQXNzb2NpYXRlZFB0ci5wcm90b3R5cGUgPQotICAgICAgT2JqZWN0
LmNyZWF0ZShTZW5zb3JQcm92aWRlclB0ci5wcm90b3R5cGUpOwotICBTZW5zb3JQcm92aWRlckFz
c29jaWF0ZWRQdHIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0KLSAgICAgIFNlbnNvclByb3ZpZGVy
QXNzb2NpYXRlZFB0cjsKLQotICBmdW5jdGlvbiBTZW5zb3JQcm92aWRlclByb3h5KHJlY2VpdmVy
KSB7Ci0gICAgdGhpcy5yZWNlaXZlcl8gPSByZWNlaXZlcjsKLSAgfQotICBTZW5zb3JQcm92aWRl
clB0ci5wcm90b3R5cGUuZ2V0U2Vuc29yID0gZnVuY3Rpb24oKSB7Ci0gICAgcmV0dXJuIFNlbnNv
clByb3ZpZGVyUHJveHkucHJvdG90eXBlLmdldFNlbnNvcgotICAgICAgICAuYXBwbHkodGhpcy5w
dHIuZ2V0UHJveHkoKSwgYXJndW1lbnRzKTsKLSAgfTsKLQotICBTZW5zb3JQcm92aWRlclByb3h5
LnByb3RvdHlwZS5nZXRTZW5zb3IgPSBmdW5jdGlvbih0eXBlKSB7Ci0gICAgdmFyIHBhcmFtcyA9
IG5ldyBTZW5zb3JQcm92aWRlcl9HZXRTZW5zb3JfUGFyYW1zKCk7Ci0gICAgcGFyYW1zLnR5cGUg
PSB0eXBlOwotICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3Qp
IHsKLSAgICAgIHZhciBidWlsZGVyID0gbmV3IGNvZGVjLk1lc3NhZ2VWMUJ1aWxkZXIoCi0gICAg
ICAgICAga1NlbnNvclByb3ZpZGVyX0dldFNlbnNvcl9OYW1lLAotICAgICAgICAgIGNvZGVjLmFs
aWduKFNlbnNvclByb3ZpZGVyX0dldFNlbnNvcl9QYXJhbXMuZW5jb2RlZFNpemUpLAotICAgICAg
ICAgIGNvZGVjLmtNZXNzYWdlRXhwZWN0c1Jlc3BvbnNlLCAwKTsKLSAgICAgIGJ1aWxkZXIuZW5j
b2RlU3RydWN0KFNlbnNvclByb3ZpZGVyX0dldFNlbnNvcl9QYXJhbXMsIHBhcmFtcyk7Ci0gICAg
ICB2YXIgbWVzc2FnZSA9IGJ1aWxkZXIuZmluaXNoKCk7Ci0gICAgICB0aGlzLnJlY2VpdmVyXy5h
Y2NlcHRBbmRFeHBlY3RSZXNwb25zZShtZXNzYWdlKS50aGVuKGZ1bmN0aW9uKG1lc3NhZ2UpIHsK
LSAgICAgICAgdmFyIHJlYWRlciA9IG5ldyBjb2RlYy5NZXNzYWdlUmVhZGVyKG1lc3NhZ2UpOwot
ICAgICAgICB2YXIgcmVzcG9uc2VQYXJhbXMgPQotICAgICAgICAgICAgcmVhZGVyLmRlY29kZVN0
cnVjdChTZW5zb3JQcm92aWRlcl9HZXRTZW5zb3JfUmVzcG9uc2VQYXJhbXMpOwotICAgICAgICBy
ZXNvbHZlKHJlc3BvbnNlUGFyYW1zKTsKLSAgICAgIH0pLmNhdGNoKGZ1bmN0aW9uKHJlc3VsdCkg
ewotICAgICAgICByZWplY3QoRXJyb3IoIkNvbm5lY3Rpb24gZXJyb3I6ICIgKyByZXN1bHQpKTsK
LSAgICAgIH0pOwotICAgIH0uYmluZCh0aGlzKSk7Ci0gIH07Ci0KLSAgZnVuY3Rpb24gU2Vuc29y
UHJvdmlkZXJTdHViKGRlbGVnYXRlKSB7Ci0gICAgdGhpcy5kZWxlZ2F0ZV8gPSBkZWxlZ2F0ZTsK
LSAgfQotICBTZW5zb3JQcm92aWRlclN0dWIucHJvdG90eXBlLmdldFNlbnNvciA9IGZ1bmN0aW9u
KHR5cGUpIHsKLSAgICByZXR1cm4gdGhpcy5kZWxlZ2F0ZV8gJiYgdGhpcy5kZWxlZ2F0ZV8uZ2V0
U2Vuc29yICYmIHRoaXMuZGVsZWdhdGVfLmdldFNlbnNvcih0eXBlKTsKLSAgfQotCi0gIFNlbnNv
clByb3ZpZGVyU3R1Yi5wcm90b3R5cGUuYWNjZXB0ID0gZnVuY3Rpb24obWVzc2FnZSkgewotICAg
IHZhciByZWFkZXIgPSBuZXcgY29kZWMuTWVzc2FnZVJlYWRlcihtZXNzYWdlKTsKLSAgICBzd2l0
Y2ggKHJlYWRlci5tZXNzYWdlTmFtZSkgewotICAgIGRlZmF1bHQ6Ci0gICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgfQotICB9OwotCi0gIFNlbnNvclByb3ZpZGVyU3R1Yi5wcm90b3R5cGUuYWNjZXB0
V2l0aFJlc3BvbmRlciA9Ci0gICAgICBmdW5jdGlvbihtZXNzYWdlLCByZXNwb25kZXIpIHsKLSAg
ICB2YXIgcmVhZGVyID0gbmV3IGNvZGVjLk1lc3NhZ2VSZWFkZXIobWVzc2FnZSk7Ci0gICAgc3dp
dGNoIChyZWFkZXIubWVzc2FnZU5hbWUpIHsKLSAgICBjYXNlIGtTZW5zb3JQcm92aWRlcl9HZXRT
ZW5zb3JfTmFtZToKLSAgICAgIHZhciBwYXJhbXMgPSByZWFkZXIuZGVjb2RlU3RydWN0KFNlbnNv
clByb3ZpZGVyX0dldFNlbnNvcl9QYXJhbXMpOwotICAgICAgdGhpcy5nZXRTZW5zb3IocGFyYW1z
LnR5cGUpLnRoZW4oZnVuY3Rpb24ocmVzcG9uc2UpIHsKLSAgICAgICAgdmFyIHJlc3BvbnNlUGFy
YW1zID0KLSAgICAgICAgICAgIG5ldyBTZW5zb3JQcm92aWRlcl9HZXRTZW5zb3JfUmVzcG9uc2VQ
YXJhbXMoKTsKLSAgICAgICAgcmVzcG9uc2VQYXJhbXMucmVzdWx0ID0gcmVzcG9uc2UucmVzdWx0
OwotICAgICAgICByZXNwb25zZVBhcmFtcy5pbml0UGFyYW1zID0gcmVzcG9uc2UuaW5pdFBhcmFt
czsKLSAgICAgICAgdmFyIGJ1aWxkZXIgPSBuZXcgY29kZWMuTWVzc2FnZVYxQnVpbGRlcigKLSAg
ICAgICAgICAgIGtTZW5zb3JQcm92aWRlcl9HZXRTZW5zb3JfTmFtZSwKLSAgICAgICAgICAgIGNv
ZGVjLmFsaWduKFNlbnNvclByb3ZpZGVyX0dldFNlbnNvcl9SZXNwb25zZVBhcmFtcy5lbmNvZGVk
U2l6ZSksCi0gICAgICAgICAgICBjb2RlYy5rTWVzc2FnZUlzUmVzcG9uc2UsIHJlYWRlci5yZXF1
ZXN0SUQpOwotICAgICAgICBidWlsZGVyLmVuY29kZVN0cnVjdChTZW5zb3JQcm92aWRlcl9HZXRT
ZW5zb3JfUmVzcG9uc2VQYXJhbXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3Bv
bnNlUGFyYW1zKTsKLSAgICAgICAgdmFyIG1lc3NhZ2UgPSBidWlsZGVyLmZpbmlzaCgpOwotICAg
ICAgICByZXNwb25kZXIuYWNjZXB0KG1lc3NhZ2UpOwotICAgICAgfSk7Ci0gICAgICByZXR1cm4g
dHJ1ZTsKLSAgICBkZWZhdWx0OgotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgfTsKLQot
ICBmdW5jdGlvbiB2YWxpZGF0ZVNlbnNvclByb3ZpZGVyUmVxdWVzdChtZXNzYWdlVmFsaWRhdG9y
KSB7Ci0gICAgdmFyIG1lc3NhZ2UgPSBtZXNzYWdlVmFsaWRhdG9yLm1lc3NhZ2U7Ci0gICAgdmFy
IHBhcmFtc0NsYXNzID0gbnVsbDsKLSAgICBzd2l0Y2ggKG1lc3NhZ2UuZ2V0TmFtZSgpKSB7Ci0g
ICAgICBjYXNlIGtTZW5zb3JQcm92aWRlcl9HZXRTZW5zb3JfTmFtZToKLSAgICAgICAgaWYgKG1l
c3NhZ2UuZXhwZWN0c1Jlc3BvbnNlKCkpCi0gICAgICAgICAgcGFyYW1zQ2xhc3MgPSBTZW5zb3JQ
cm92aWRlcl9HZXRTZW5zb3JfUGFyYW1zOwotICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGlmIChw
YXJhbXNDbGFzcyA9PT0gbnVsbCkKLSAgICAgIHJldHVybiB2YWxpZGF0b3IudmFsaWRhdGlvbkVy
cm9yLk5PTkU7Ci0gICAgcmV0dXJuIHBhcmFtc0NsYXNzLnZhbGlkYXRlKG1lc3NhZ2VWYWxpZGF0
b3IsIG1lc3NhZ2VWYWxpZGF0b3IubWVzc2FnZS5nZXRIZWFkZXJOdW1CeXRlcygpKTsKLSAgfQot
Ci0gIGZ1bmN0aW9uIHZhbGlkYXRlU2Vuc29yUHJvdmlkZXJSZXNwb25zZShtZXNzYWdlVmFsaWRh
dG9yKSB7Ci0gICB2YXIgbWVzc2FnZSA9IG1lc3NhZ2VWYWxpZGF0b3IubWVzc2FnZTsKLSAgIHZh
ciBwYXJhbXNDbGFzcyA9IG51bGw7Ci0gICBzd2l0Y2ggKG1lc3NhZ2UuZ2V0TmFtZSgpKSB7Ci0g
ICAgICBjYXNlIGtTZW5zb3JQcm92aWRlcl9HZXRTZW5zb3JfTmFtZToKLSAgICAgICAgaWYgKG1l
c3NhZ2UuaXNSZXNwb25zZSgpKQotICAgICAgICAgIHBhcmFtc0NsYXNzID0gU2Vuc29yUHJvdmlk
ZXJfR2V0U2Vuc29yX1Jlc3BvbnNlUGFyYW1zOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAg
aWYgKHBhcmFtc0NsYXNzID09PSBudWxsKQotICAgICAgcmV0dXJuIHZhbGlkYXRvci52YWxpZGF0
aW9uRXJyb3IuTk9ORTsKLSAgICByZXR1cm4gcGFyYW1zQ2xhc3MudmFsaWRhdGUobWVzc2FnZVZh
bGlkYXRvciwgbWVzc2FnZVZhbGlkYXRvci5tZXNzYWdlLmdldEhlYWRlck51bUJ5dGVzKCkpOwot
ICB9Ci0KLSAgdmFyIFNlbnNvclByb3ZpZGVyID0gewotICAgIG5hbWU6ICdkZXZpY2UubW9qb20u
U2Vuc29yUHJvdmlkZXInLAotICAgIGtWZXJzaW9uOiAwLAotICAgIHB0ckNsYXNzOiBTZW5zb3JQ
cm92aWRlclB0ciwKLSAgICBwcm94eUNsYXNzOiBTZW5zb3JQcm92aWRlclByb3h5LAotICAgIHN0
dWJDbGFzczogU2Vuc29yUHJvdmlkZXJTdHViLAotICAgIHZhbGlkYXRlUmVxdWVzdDogdmFsaWRh
dGVTZW5zb3JQcm92aWRlclJlcXVlc3QsCi0gICAgdmFsaWRhdGVSZXNwb25zZTogdmFsaWRhdGVT
ZW5zb3JQcm92aWRlclJlc3BvbnNlLAotICB9OwotICBTZW5zb3JQcm92aWRlclN0dWIucHJvdG90
eXBlLnZhbGlkYXRvciA9IHZhbGlkYXRlU2Vuc29yUHJvdmlkZXJSZXF1ZXN0OwotICBTZW5zb3JQ
cm92aWRlclByb3h5LnByb3RvdHlwZS52YWxpZGF0b3IgPSB2YWxpZGF0ZVNlbnNvclByb3ZpZGVy
UmVzcG9uc2U7Ci0gIGV4cG9ydHMuU2Vuc29yQ3JlYXRpb25SZXN1bHQgPSBTZW5zb3JDcmVhdGlv
blJlc3VsdDsKLSAgZXhwb3J0cy5TZW5zb3JJbml0UGFyYW1zID0gU2Vuc29ySW5pdFBhcmFtczsK
LSAgZXhwb3J0cy5TZW5zb3JQcm92aWRlciA9IFNlbnNvclByb3ZpZGVyOwotICBleHBvcnRzLlNl
bnNvclByb3ZpZGVyUHRyID0gU2Vuc29yUHJvdmlkZXJQdHI7Ci0gIGV4cG9ydHMuU2Vuc29yUHJv
dmlkZXJBc3NvY2lhdGVkUHRyID0gU2Vuc29yUHJvdmlkZXJBc3NvY2lhdGVkUHRyOwotfSkoKTsK
ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMv
cmVzb3VyY2VzL2Nocm9taXVtL3N0cmluZzE2Lm1vam9tLmpzIGIvTGF5b3V0VGVzdHMvaW1wb3J0
ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vc3RyaW5nMTYubW9q
b20uanMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI1Mzc3ZTY2NTcxYjE0NTkwN2E0
OTBkMTdjNjczYTVhYmQwMjMxNzEuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAKLS0tIGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9y
ZXNvdXJjZXMvY2hyb21pdW0vc3RyaW5nMTYubW9qb20uanMKKysrIC9kZXYvbnVsbApAQCAtMSwx
NDEgKzAsMCBAQAotLy8gQ29weXJpZ2h0IDIwMTQgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBi
eSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5T
RSBmaWxlLgotCi0ndXNlIHN0cmljdCc7Ci0KLShmdW5jdGlvbigpIHsKLSAgdmFyIG1vam9tSWQg
PSAnbW9qby9wdWJsaWMvbW9qb20vYmFzZS9zdHJpbmcxNi5tb2pvbSc7Ci0gIGlmIChtb2pvLmlu
dGVybmFsLmlzTW9qb21Mb2FkZWQobW9qb21JZCkpIHsKLSAgICBjb25zb2xlLndhcm4oJ1RoZSBm
b2xsb3dpbmcgbW9qb20gaXMgbG9hZGVkIG11bHRpcGxlIHRpbWVzOiAnICsgbW9qb21JZCk7Ci0g
ICAgcmV0dXJuOwotICB9Ci0gIG1vam8uaW50ZXJuYWwubWFya01vam9tTG9hZGVkKG1vam9tSWQp
OwotICB2YXIgYmluZGluZ3MgPSBtb2pvOwotICB2YXIgYXNzb2NpYXRlZEJpbmRpbmdzID0gbW9q
bzsKLSAgdmFyIGNvZGVjID0gbW9qby5pbnRlcm5hbDsKLSAgdmFyIHZhbGlkYXRvciA9IG1vam8u
aW50ZXJuYWw7Ci0KLSAgdmFyIGV4cG9ydHMgPSBtb2pvLmludGVybmFsLmV4cG9zZU5hbWVzcGFj
ZSgnbW9qb0Jhc2UubW9qb20nKTsKLSAgdmFyIGJpZ19idWZmZXIkID0KLSAgICAgIG1vam8uaW50
ZXJuYWwuZXhwb3NlTmFtZXNwYWNlKCdtb2pvQmFzZS5tb2pvbScpOwotICBpZiAobW9qby5jb25m
aWcuYXV0b0xvYWRNb2pvbURlcHMpIHsKLSAgICBtb2pvLmludGVybmFsLmxvYWRNb2pvbUlmTmVj
ZXNzYXJ5KAotICAgICAgICAnbW9qby9wdWJsaWMvbW9qb20vYmFzZS9iaWdfYnVmZmVyLm1vam9t
JywgJ2JpZ19idWZmZXIubW9qb20uanMnKTsKLSAgfQotCi0KLQotICBmdW5jdGlvbiBTdHJpbmcx
Nih2YWx1ZXMpIHsKLSAgICB0aGlzLmluaXREZWZhdWx0c18oKTsKLSAgICB0aGlzLmluaXRGaWVs
ZHNfKHZhbHVlcyk7Ci0gIH0KLQotCi0gIFN0cmluZzE2LnByb3RvdHlwZS5pbml0RGVmYXVsdHNf
ID0gZnVuY3Rpb24oKSB7Ci0gICAgdGhpcy5kYXRhID0gbnVsbDsKLSAgfTsKLSAgU3RyaW5nMTYu
cHJvdG90eXBlLmluaXRGaWVsZHNfID0gZnVuY3Rpb24oZmllbGRzKSB7Ci0gICAgZm9yKHZhciBm
aWVsZCBpbiBmaWVsZHMpIHsKLSAgICAgICAgaWYgKHRoaXMuaGFzT3duUHJvcGVydHkoZmllbGQp
KQotICAgICAgICAgIHRoaXNbZmllbGRdID0gZmllbGRzW2ZpZWxkXTsKLSAgICB9Ci0gIH07Ci0K
LSAgU3RyaW5nMTYudmFsaWRhdGUgPSBmdW5jdGlvbihtZXNzYWdlVmFsaWRhdG9yLCBvZmZzZXQp
IHsKLSAgICB2YXIgZXJyOwotICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1
Y3RIZWFkZXIob2Zmc2V0LCBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSk7Ci0gICAgaWYgKGVyciAh
PT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQotICAgICAgICByZXR1cm4gZXJyOwot
Ci0gICAgdmFyIGtWZXJzaW9uU2l6ZXMgPSBbCi0gICAgICB7dmVyc2lvbjogMCwgbnVtQnl0ZXM6
IDE2fQotICAgIF07Ci0gICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdFZl
cnNpb24ob2Zmc2V0LCBrVmVyc2lvblNpemVzKTsKLSAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3Iu
dmFsaWRhdGlvbkVycm9yLk5PTkUpCi0gICAgICAgIHJldHVybiBlcnI7Ci0KLQotICAgIC8vIHZh
bGlkYXRlIFN0cmluZzE2LmRhdGEKLSAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRl
QXJyYXlQb2ludGVyKG9mZnNldCArIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgMCwgMiwgY29k
ZWMuVWludDE2LCBmYWxzZSwgWzBdLCAwKTsKLSAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFs
aWRhdGlvbkVycm9yLk5PTkUpCi0gICAgICAgIHJldHVybiBlcnI7Ci0KLSAgICByZXR1cm4gdmFs
aWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FOwotICB9OwotCi0gIFN0cmluZzE2LmVuY29kZWRT
aXplID0gY29kZWMua1N0cnVjdEhlYWRlclNpemUgKyA4OwotCi0gIFN0cmluZzE2LmRlY29kZSA9
IGZ1bmN0aW9uKGRlY29kZXIpIHsKLSAgICB2YXIgcGFja2VkOwotICAgIHZhciB2YWwgPSBuZXcg
U3RyaW5nMTYoKTsKLSAgICB2YXIgbnVtYmVyT2ZCeXRlcyA9IGRlY29kZXIucmVhZFVpbnQzMigp
OwotICAgIHZhciB2ZXJzaW9uID0gZGVjb2Rlci5yZWFkVWludDMyKCk7Ci0gICAgdmFsLmRhdGEg
PSBkZWNvZGVyLmRlY29kZUFycmF5UG9pbnRlcihjb2RlYy5VaW50MTYpOwotICAgIHJldHVybiB2
YWw7Ci0gIH07Ci0KLSAgU3RyaW5nMTYuZW5jb2RlID0gZnVuY3Rpb24oZW5jb2RlciwgdmFsKSB7
Ci0gICAgdmFyIHBhY2tlZDsKLSAgICBlbmNvZGVyLndyaXRlVWludDMyKFN0cmluZzE2LmVuY29k
ZWRTaXplKTsKLSAgICBlbmNvZGVyLndyaXRlVWludDMyKDApOwotICAgIGVuY29kZXIuZW5jb2Rl
QXJyYXlQb2ludGVyKGNvZGVjLlVpbnQxNiwgdmFsLmRhdGEpOwotICB9OwotICBmdW5jdGlvbiBC
aWdTdHJpbmcxNih2YWx1ZXMpIHsKLSAgICB0aGlzLmluaXREZWZhdWx0c18oKTsKLSAgICB0aGlz
LmluaXRGaWVsZHNfKHZhbHVlcyk7Ci0gIH0KLQotCi0gIEJpZ1N0cmluZzE2LnByb3RvdHlwZS5p
bml0RGVmYXVsdHNfID0gZnVuY3Rpb24oKSB7Ci0gICAgdGhpcy5kYXRhID0gbnVsbDsKLSAgfTsK
LSAgQmlnU3RyaW5nMTYucHJvdG90eXBlLmluaXRGaWVsZHNfID0gZnVuY3Rpb24oZmllbGRzKSB7
Ci0gICAgZm9yKHZhciBmaWVsZCBpbiBmaWVsZHMpIHsKLSAgICAgICAgaWYgKHRoaXMuaGFzT3du
UHJvcGVydHkoZmllbGQpKQotICAgICAgICAgIHRoaXNbZmllbGRdID0gZmllbGRzW2ZpZWxkXTsK
LSAgICB9Ci0gIH07Ci0KLSAgQmlnU3RyaW5nMTYudmFsaWRhdGUgPSBmdW5jdGlvbihtZXNzYWdl
VmFsaWRhdG9yLCBvZmZzZXQpIHsKLSAgICB2YXIgZXJyOwotICAgIGVyciA9IG1lc3NhZ2VWYWxp
ZGF0b3IudmFsaWRhdGVTdHJ1Y3RIZWFkZXIob2Zmc2V0LCBjb2RlYy5rU3RydWN0SGVhZGVyU2l6
ZSk7Ci0gICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQotICAg
ICAgICByZXR1cm4gZXJyOwotCi0gICAgdmFyIGtWZXJzaW9uU2l6ZXMgPSBbCi0gICAgICB7dmVy
c2lvbjogMCwgbnVtQnl0ZXM6IDI0fQotICAgIF07Ci0gICAgZXJyID0gbWVzc2FnZVZhbGlkYXRv
ci52YWxpZGF0ZVN0cnVjdFZlcnNpb24ob2Zmc2V0LCBrVmVyc2lvblNpemVzKTsKLSAgICBpZiAo
ZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCi0gICAgICAgIHJldHVybiBl
cnI7Ci0KLQotICAgIC8vIHZhbGlkYXRlIEJpZ1N0cmluZzE2LmRhdGEKLSAgICBlcnIgPSBtZXNz
YWdlVmFsaWRhdG9yLnZhbGlkYXRlVW5pb24ob2Zmc2V0ICsgY29kZWMua1N0cnVjdEhlYWRlclNp
emUgKyAwLCBiaWdfYnVmZmVyJC5CaWdCdWZmZXIsIGZhbHNlKTsKLSAgICBpZiAoZXJyICE9PSB2
YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCi0gICAgICAgIHJldHVybiBlcnI7Ci0KLSAg
ICByZXR1cm4gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FOwotICB9OwotCi0gIEJpZ1N0
cmluZzE2LmVuY29kZWRTaXplID0gY29kZWMua1N0cnVjdEhlYWRlclNpemUgKyAxNjsKLQotICBC
aWdTdHJpbmcxNi5kZWNvZGUgPSBmdW5jdGlvbihkZWNvZGVyKSB7Ci0gICAgdmFyIHBhY2tlZDsK
LSAgICB2YXIgdmFsID0gbmV3IEJpZ1N0cmluZzE2KCk7Ci0gICAgdmFyIG51bWJlck9mQnl0ZXMg
PSBkZWNvZGVyLnJlYWRVaW50MzIoKTsKLSAgICB2YXIgdmVyc2lvbiA9IGRlY29kZXIucmVhZFVp
bnQzMigpOwotICAgIHZhbC5kYXRhID0gZGVjb2Rlci5kZWNvZGVTdHJ1Y3QoYmlnX2J1ZmZlciQu
QmlnQnVmZmVyKTsKLSAgICByZXR1cm4gdmFsOwotICB9OwotCi0gIEJpZ1N0cmluZzE2LmVuY29k
ZSA9IGZ1bmN0aW9uKGVuY29kZXIsIHZhbCkgewotICAgIHZhciBwYWNrZWQ7Ci0gICAgZW5jb2Rl
ci53cml0ZVVpbnQzMihCaWdTdHJpbmcxNi5lbmNvZGVkU2l6ZSk7Ci0gICAgZW5jb2Rlci53cml0
ZVVpbnQzMigwKTsKLSAgICBlbmNvZGVyLmVuY29kZVN0cnVjdChiaWdfYnVmZmVyJC5CaWdCdWZm
ZXIsIHZhbC5kYXRhKTsKLSAgfTsKLSAgZXhwb3J0cy5TdHJpbmcxNiA9IFN0cmluZzE2OwotICBl
eHBvcnRzLkJpZ1N0cmluZzE2ID0gQmlnU3RyaW5nMTY7Ci19KSgpOwpcIE5vIG5ld2xpbmUgYXQg
ZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxh
dGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL3N0cmluZzE2Lm1vam9tLmpzLmhlYWRlcnMg
Yi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9j
aHJvbWl1bS9zdHJpbmcxNi5tb2pvbS5qcy5oZWFkZXJzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCA2ODA1YzMyM2RmNWE5NzUyMzE2NDhiODMwZTMzY2UxODNjM2NiYmQzLi4wMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL0xheW91dFRlc3RzL2ltcG9y
dGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL3N0cmluZzE2Lm1v
am9tLmpzLmhlYWRlcnMKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi1Db250ZW50LVR5cGU6
IHRleHQvamF2YXNjcmlwdDsgY2hhcnNldD11dGYtOApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMv
aW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vdXJsLm1v
am9tLmpzIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNv
dXJjZXMvY2hyb21pdW0vdXJsLm1vam9tLmpzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCBjNWVlZTFmMmFlYjQwNjljNTk1OTE0ZWUwMjJhOWU1MDliOWRhNTQ1Li4wMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3cz
Yy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL3VybC5tb2pvbS5qcworKysg
L2Rldi9udWxsCkBAIC0xLDc5ICswLDAgQEAKLS8vIENvcHlyaWdodCAyMDE0IFRoZSBDaHJvbWl1
bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNv
ZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91
bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLQotJ3VzZSBzdHJpY3QnOwotCi0oZnVuY3Rpb24oKSB7
Ci0gIHZhciBtb2pvbUlkID0gJ3VybC9tb2pvbS91cmwubW9qb20nOwotICBpZiAobW9qby5pbnRl
cm5hbC5pc01vam9tTG9hZGVkKG1vam9tSWQpKSB7Ci0gICAgY29uc29sZS53YXJuKCdUaGUgZm9s
bG93aW5nIG1vam9tIGlzIGxvYWRlZCBtdWx0aXBsZSB0aW1lczogJyArIG1vam9tSWQpOwotICAg
IHJldHVybjsKLSAgfQotICBtb2pvLmludGVybmFsLm1hcmtNb2pvbUxvYWRlZChtb2pvbUlkKTsK
LSAgdmFyIGJpbmRpbmdzID0gbW9qbzsKLSAgdmFyIGFzc29jaWF0ZWRCaW5kaW5ncyA9IG1vam87
Ci0gIHZhciBjb2RlYyA9IG1vam8uaW50ZXJuYWw7Ci0gIHZhciB2YWxpZGF0b3IgPSBtb2pvLmlu
dGVybmFsOwotCi0gIHZhciBleHBvcnRzID0gbW9qby5pbnRlcm5hbC5leHBvc2VOYW1lc3BhY2Uo
J3VybC5tb2pvbScpOwotCi0KLQotICBmdW5jdGlvbiBVcmwodmFsdWVzKSB7Ci0gICAgdGhpcy5p
bml0RGVmYXVsdHNfKCk7Ci0gICAgdGhpcy5pbml0RmllbGRzXyh2YWx1ZXMpOwotICB9Ci0KLQot
ICBVcmwucHJvdG90eXBlLmluaXREZWZhdWx0c18gPSBmdW5jdGlvbigpIHsKLSAgICB0aGlzLnVy
bCA9IG51bGw7Ci0gIH07Ci0gIFVybC5wcm90b3R5cGUuaW5pdEZpZWxkc18gPSBmdW5jdGlvbihm
aWVsZHMpIHsKLSAgICBmb3IodmFyIGZpZWxkIGluIGZpZWxkcykgewotICAgICAgICBpZiAodGhp
cy5oYXNPd25Qcm9wZXJ0eShmaWVsZCkpCi0gICAgICAgICAgdGhpc1tmaWVsZF0gPSBmaWVsZHNb
ZmllbGRdOwotICAgIH0KLSAgfTsKLQotICBVcmwudmFsaWRhdGUgPSBmdW5jdGlvbihtZXNzYWdl
VmFsaWRhdG9yLCBvZmZzZXQpIHsKLSAgICB2YXIgZXJyOwotICAgIGVyciA9IG1lc3NhZ2VWYWxp
ZGF0b3IudmFsaWRhdGVTdHJ1Y3RIZWFkZXIob2Zmc2V0LCBjb2RlYy5rU3RydWN0SGVhZGVyU2l6
ZSk7Ci0gICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQotICAg
ICAgICByZXR1cm4gZXJyOwotCi0gICAgdmFyIGtWZXJzaW9uU2l6ZXMgPSBbCi0gICAgICB7dmVy
c2lvbjogMCwgbnVtQnl0ZXM6IDE2fQotICAgIF07Ci0gICAgZXJyID0gbWVzc2FnZVZhbGlkYXRv
ci52YWxpZGF0ZVN0cnVjdFZlcnNpb24ob2Zmc2V0LCBrVmVyc2lvblNpemVzKTsKLSAgICBpZiAo
ZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCi0gICAgICAgIHJldHVybiBl
cnI7Ci0KLQotICAgIC8vIHZhbGlkYXRlIFVybC51cmwKLSAgICBlcnIgPSBtZXNzYWdlVmFsaWRh
dG9yLnZhbGlkYXRlU3RyaW5nUG9pbnRlcihvZmZzZXQgKyBjb2RlYy5rU3RydWN0SGVhZGVyU2l6
ZSArIDAsIGZhbHNlKQotICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3Iu
Tk9ORSkKLSAgICAgICAgcmV0dXJuIGVycjsKLQotICAgIHJldHVybiB2YWxpZGF0b3IudmFsaWRh
dGlvbkVycm9yLk5PTkU7Ci0gIH07Ci0KLSAgVXJsLmVuY29kZWRTaXplID0gY29kZWMua1N0cnVj
dEhlYWRlclNpemUgKyA4OwotCi0gIFVybC5kZWNvZGUgPSBmdW5jdGlvbihkZWNvZGVyKSB7Ci0g
ICAgdmFyIHBhY2tlZDsKLSAgICB2YXIgdmFsID0gbmV3IFVybCgpOwotICAgIHZhciBudW1iZXJP
ZkJ5dGVzID0gZGVjb2Rlci5yZWFkVWludDMyKCk7Ci0gICAgdmFyIHZlcnNpb24gPSBkZWNvZGVy
LnJlYWRVaW50MzIoKTsKLSAgICB2YWwudXJsID0gZGVjb2Rlci5kZWNvZGVTdHJ1Y3QoY29kZWMu
U3RyaW5nKTsKLSAgICByZXR1cm4gdmFsOwotICB9OwotCi0gIFVybC5lbmNvZGUgPSBmdW5jdGlv
bihlbmNvZGVyLCB2YWwpIHsKLSAgICB2YXIgcGFja2VkOwotICAgIGVuY29kZXIud3JpdGVVaW50
MzIoVXJsLmVuY29kZWRTaXplKTsKLSAgICBlbmNvZGVyLndyaXRlVWludDMyKDApOwotICAgIGVu
Y29kZXIuZW5jb2RlU3RydWN0KGNvZGVjLlN0cmluZywgdmFsLnVybCk7Ci0gIH07Ci0gIGV4cG9y
dHMuVXJsID0gVXJsOwotfSkoKTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1n
aXQgYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNl
cy9jaHJvbWl1bS93M2MtaW1wb3J0LmxvZyBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWIt
cGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL3czYy1pbXBvcnQubG9nCmluZGV4IGUy
ZDBhMDlkZTFlOWEyMDdjYmNhYTFiNTc2MjNkZTY5Zjg0NWQ3MjcuLjkwYTI2NWJkMDY4Y2FlMmQw
OTlmMmQwNTM0OTQyZGRmMDY4ZjI1ZDkgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2ltcG9ydGVk
L3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL3czYy1pbXBvcnQubG9n
CisrKyBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3Vy
Y2VzL2Nocm9taXVtL3czYy1pbXBvcnQubG9nCkBAIC0xNSw0NCArMTUsMjMgQEAgTm9uZQogLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tCiBMaXN0IG9mIGZpbGVzOgogL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93
ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL1JFQURNRS5tZAotL0xheW91dFRl
c3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL2Jp
Z19idWZmZXIubW9qb20uanMKLS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3Jt
LXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS9iaWdfYnVmZmVyLm1vam9tLmpzLmhlYWRlcnMKIC9M
YXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9jaHJv
bWl1bS9jb250YWN0c19tYW5hZ2VyX21vY2suanMKLS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mv
d2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS9kZXZpY2UubW9qb20uanMKLS9M
YXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9jaHJv
bWl1bS9kZXZpY2UubW9qb20uanMuaGVhZGVycwotL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93
ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL2RldmljZV9lbnVtZXJhdGlvbl9v
cHRpb25zLm1vam9tLmpzCi0vTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10
ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vZGV2aWNlX2VudW1lcmF0aW9uX29wdGlvbnMubW9qb20u
anMuaGVhZGVycwotL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMv
cmVzb3VyY2VzL2Nocm9taXVtL2RldmljZV9tYW5hZ2VyX2NsaWVudC5tb2pvbS5qcwotL0xheW91
dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVt
L2RldmljZV9tYW5hZ2VyX2NsaWVudC5tb2pvbS5qcy5oZWFkZXJzCiAvTGF5b3V0VGVzdHMvaW1w
b3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vZW5hYmxlLWh5
cGVybGluay1hdWRpdGluZy5qcwogL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZv
cm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL2dlbmVyaWNfc2Vuc29yX21vY2tzLmpzCiAvTGF5
b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21p
dW0vZ2VuZXJpY19zZW5zb3JfbW9ja3MuanMuaGVhZGVycwotL0xheW91dFRlc3RzL2ltcG9ydGVk
L3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL2ltYWdlX2NhcHR1cmUt
bW9qb20uanMuaGVhZGVycwotL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0t
dGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL2ltYWdlX2NhcHR1cmUubW9qb20uanMKIC9MYXlvdXRU
ZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS9t
b2NrLWJhcmNvZGVkZXRlY3Rpb24uanMKIC9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBs
YXRmb3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS9tb2NrLWJhcmNvZGVkZXRlY3Rpb24uanMu
aGVhZGVycwogL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVz
b3VyY2VzL2Nocm9taXVtL21vY2stZmFjZWRldGVjdGlvbi5qcwogL0xheW91dFRlc3RzL2ltcG9y
dGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL21vY2stZmFjZWRl
dGVjdGlvbi5qcy5oZWFkZXJzCisvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9y
bS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vbW9jay1pZGxlLWRldGVjdGlvbi5qcwogL0xheW91
dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVt
L21vY2staW1hZ2VjYXB0dXJlLmpzCiAvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0
Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vbW9jay1zY3JlZW5lbnVtZXJhdGlvbi5qcwog
L0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2No
cm9taXVtL21vY2stc2NyZWVuZW51bWVyYXRpb24uanMuaGVhZGVyCi0vTGF5b3V0VGVzdHMvaW1w
b3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vbW9jay1zbXMt
cmVjZWl2ZXIuanMKIC9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3Rz
L3Jlc291cmNlcy9jaHJvbWl1bS9tb2NrLXRleHRkZXRlY3Rpb24uanMKIC9MYXlvdXRUZXN0cy9p
bXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS9tb2NrLXRl
eHRkZXRlY3Rpb24uanMuaGVhZGVycwotL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxh
dGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL21vam9fYmluZGluZ3MuanMKLS9MYXlvdXRU
ZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS9t
b2pvX2JpbmRpbmdzLmpzLmhlYWRlcnMKLS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBs
YXRmb3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS9tb2pvX3dlYl90ZXN0X2hlbHBlcl90ZXN0
Lm1vam9tLmpzCi0vTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9y
ZXNvdXJjZXMvY2hyb21pdW0vbW9qb193ZWJfdGVzdF9oZWxwZXJfdGVzdC5tb2pvbS5qcy5oZWFk
ZXJzCiAvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJj
ZXMvY2hyb21pdW0vbmZjLW1vY2suanMKLS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBs
YXRmb3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS9zZW5zb3IubW9qb20uanMKLS9MYXlvdXRU
ZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS9z
ZW5zb3JfcHJvdmlkZXIubW9qb20uanMKLS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBs
YXRmb3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS9zdHJpbmcxNi5tb2pvbS5qcwotL0xheW91
dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVt
L3N0cmluZzE2Lm1vam9tLmpzLmhlYWRlcnMKLS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2Vi
LXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS91cmwubW9qb20uanMKIC9MYXlvdXRU
ZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS93
ZWItYmx1ZXRvb3RoLXRlc3QuanMKIC9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRm
b3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS93ZWItYmx1ZXRvb3RoLXRlc3QuanMuaGVhZGVy
cwotL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2Vz
L2Nocm9taXVtL3dlYl91c2Jfc2VydmljZS5tb2pvbS5qcwotL0xheW91dFRlc3RzL2ltcG9ydGVk
L3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL3dlYl91c2Jfc2Vydmlj
ZS5tb2pvbS5qcy5oZWFkZXJzCiAvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9y
bS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vd2VidXNiLWNoaWxkLXRlc3QuanMKIC9MYXlvdXRU
ZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS93
ZWJ1c2ItY2hpbGQtdGVzdC5qcy5oZWFkZXJzCiAvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dl
Yi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vd2VidXNiLXRlc3QuanMKZGlmZiAt
LWdpdCBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3Vy
Y2VzL2Nocm9taXVtL3dlYi1ibHVldG9vdGgtdGVzdC5qcyBiL0xheW91dFRlc3RzL2ltcG9ydGVk
L3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL3dlYi1ibHVldG9vdGgt
dGVzdC5qcwppbmRleCBiNjM2NThlMmU3NTMyMThkNTA1MDhiNDExOTlmYzZmZjE4NzExZGJmLi5h
YTRiODBkMjgzMWMzYzY5ZWYxNmQ3MDE2YjQxZDgxOGJkNThiZDdiIDEwMDY0NAotLS0gYS9MYXlv
dXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1
bS93ZWItYmx1ZXRvb3RoLXRlc3QuanMKKysrIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dl
Yi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vd2ViLWJsdWV0b290aC10ZXN0Lmpz
CkBAIC0zOCwxMCArMzgsMTcgQEAgZnVuY3Rpb24gY2Fub25pY2FsaXplQW5kQ29udmVydFRvTW9q
b1VVSUQodXVpZHMpIHsKIAogLy8gQ29udmVydHMgV2ViSURMIGEgcmVjb3JkPERPTVN0cmluZywg
QnVmZmVyU291cmNlPiB0byBhIG1hcDxLLCBhcnJheTx1aW50OD4+IHRvCiAvLyB1c2UgZm9yIE1v
am8sIHdoZXJlIHRoZSB2YWx1ZSBmb3IgSyBpcyBjYWxjdWxhdGVkIHVzaW5nIGtleUZuLgotZnVu
Y3Rpb24gY29udmVydFRvTW9qb01hcChyZWNvcmQsIGtleUZuKSB7CitmdW5jdGlvbiBjb252ZXJ0
VG9Nb2pvTWFwKHJlY29yZCwga2V5Rm4sIGlzTnVtYmVyS2V5ID0gZmFsc2UpIHsKICAgbGV0IG1h
cCA9IG5ldyBNYXAoKTsKICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJp
ZXMocmVjb3JkKSkgewogICAgIGxldCBidWZmZXIgPSBBcnJheUJ1ZmZlci5pc1ZpZXcodmFsdWUp
ID8gdmFsdWUuYnVmZmVyIDogdmFsdWU7CisgICAgaWYgKGlzTnVtYmVyS2V5KSB7CisgICAgICBs
ZXQgbnVtYmVyS2V5ID0gcGFyc2VJbnQoa2V5KTsKKyAgICAgIGlmIChOdW1iZXIuaXNOYU4obnVt
YmVyS2V5KSkKKyAgICAgICAgdGhyb3cgYE1hcCBrZXkgJHtrZXl9IGlzIG5vdCBhIG51bWJlcmA7
CisgICAgICBtYXAuc2V0KGtleUZuKG51bWJlcktleSksIEFycmF5LmZyb20obmV3IFVpbnQ4QXJy
YXkoYnVmZmVyKSkpOworICAgICAgY29udGludWU7CisgICAgfQogICAgIG1hcC5zZXQoa2V5Rm4o
a2V5KSwgQXJyYXkuZnJvbShuZXcgVWludDhBcnJheShidWZmZXIpKSk7CiAgIH0KICAgcmV0dXJu
IG1hcDsKQEAgLTIxMSwxNSArMjE4LDE3IEBAIGNsYXNzIEZha2VDZW50cmFsIHsKICAgICAvLyBD
b252ZXJ0IG1hbnVmYWN0dXJlckRhdGEgZnJvbSBhIHJlY29yZDxET01TdHJpbmcsIEJ1ZmZlclNv
dXJjZT4gaW50byBhCiAgICAgLy8gbWFwPHVpbnQ4LCBhcnJheTx1aW50OD4+IGZvciBNb2pvLgog
ICAgIGlmICgnbWFudWZhY3R1cmVyRGF0YScgaW4gc2NhblJlc3VsdC5zY2FuUmVjb3JkKSB7Ci0g
ICAgICBjbG9uZWRTY2FuUmVzdWx0LnNjYW5SZWNvcmQubWFudWZhY3R1cmVyRGF0YSA9Ci0gICAg
ICAgICAgY29udmVydFRvTW9qb01hcChzY2FuUmVzdWx0LnNjYW5SZWNvcmQubWFudWZhY3R1cmVy
RGF0YSwgTnVtYmVyKTsKKyAgICAgIGNsb25lZFNjYW5SZXN1bHQuc2NhblJlY29yZC5tYW51ZmFj
dHVyZXJEYXRhID0gY29udmVydFRvTW9qb01hcCgKKyAgICAgICAgICBzY2FuUmVzdWx0LnNjYW5S
ZWNvcmQubWFudWZhY3R1cmVyRGF0YSwgTnVtYmVyLAorICAgICAgICAgIHRydWUgLyogaXNOdW1i
ZXJLZXkgKi8pOwogICAgIH0KIAogICAgIC8vIENvbnZlcnQgc2VydmljZURhdGEgZnJvbSBhIHJl
Y29yZDxET01TdHJpbmcsIEJ1ZmZlclNvdXJjZT4gaW50byBhCiAgICAgLy8gbWFwPHN0cmluZywg
YXJyYXk8dWludDg+PiBmb3IgTW9qby4KICAgICBpZiAoJ3NlcnZpY2VEYXRhJyBpbiBzY2FuUmVz
dWx0LnNjYW5SZWNvcmQpIHsKICAgICAgIGNsb25lZFNjYW5SZXN1bHQuc2NhblJlY29yZC5zZXJ2
aWNlRGF0YS5zZXJ2aWNlRGF0YSA9IGNvbnZlcnRUb01vam9NYXAoCi0gICAgICAgICAgc2NhblJl
c3VsdC5zY2FuUmVjb3JkLnNlcnZpY2VEYXRhLCBCbHVldG9vdGhVVUlELmdldFNlcnZpY2UpOwor
ICAgICAgICAgIHNjYW5SZXN1bHQuc2NhblJlY29yZC5zZXJ2aWNlRGF0YSwgQmx1ZXRvb3RoVVVJ
RC5nZXRTZXJ2aWNlLAorICAgICAgICAgIGZhbHNlIC8qIGlzTnVtYmVyS2V5ICovKTsKICAgICB9
CiAKICAgICBhd2FpdCB0aGlzLmZha2VfY2VudHJhbF9wdHJfLnNpbXVsYXRlQWR2ZXJ0aXNlbWVu
dFJlY2VpdmVkKApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0
Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vd2ViX3VzYl9zZXJ2aWNlLm1vam9tLmpzIGIv
TGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hy
b21pdW0vd2ViX3VzYl9zZXJ2aWNlLm1vam9tLmpzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCBhNGEwMTdiMWRlMTc4YzBjNTFhZGRiODc4ZDI1N2I4YjFhNzQwMzM0Li4wMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL0xheW91dFRlc3RzL2ltcG9ydGVk
L3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL3dlYl91c2Jfc2Vydmlj
ZS5tb2pvbS5qcworKysgL2Rldi9udWxsCkBAIC0xLDYxNCArMCwwIEBACi0vLyBDb3B5cmlnaHQg
MjAxNCBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBv
ZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhh
dCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLSd1c2Ugc3RyaWN0JzsK
LQotKGZ1bmN0aW9uKCkgewotICB2YXIgbW9qb21JZCA9ICd0aGlyZF9wYXJ0eS9ibGluay9wdWJs
aWMvbW9qb20vdXNiL3dlYl91c2Jfc2VydmljZS5tb2pvbSc7Ci0gIGlmIChtb2pvLmludGVybmFs
LmlzTW9qb21Mb2FkZWQobW9qb21JZCkpIHsKLSAgICBjb25zb2xlLndhcm4oJ1RoZSBmb2xsb3dp
bmcgbW9qb20gaXMgbG9hZGVkIG11bHRpcGxlIHRpbWVzOiAnICsgbW9qb21JZCk7Ci0gICAgcmV0
dXJuOwotICB9Ci0gIG1vam8uaW50ZXJuYWwubWFya01vam9tTG9hZGVkKG1vam9tSWQpOwotICB2
YXIgYmluZGluZ3MgPSBtb2pvOwotICB2YXIgYXNzb2NpYXRlZEJpbmRpbmdzID0gbW9qbzsKLSAg
dmFyIGNvZGVjID0gbW9qby5pbnRlcm5hbDsKLSAgdmFyIHZhbGlkYXRvciA9IG1vam8uaW50ZXJu
YWw7Ci0KLSAgdmFyIGV4cG9ydHMgPSBtb2pvLmludGVybmFsLmV4cG9zZU5hbWVzcGFjZSgnYmxp
bmsubW9qb20nKTsKLSAgdmFyIGRldmljZSQgPQotICAgICAgbW9qby5pbnRlcm5hbC5leHBvc2VO
YW1lc3BhY2UoJ2RldmljZS5tb2pvbScpOwotICBpZiAobW9qby5jb25maWcuYXV0b0xvYWRNb2pv
bURlcHMpIHsKLSAgICBtb2pvLmludGVybmFsLmxvYWRNb2pvbUlmTmVjZXNzYXJ5KAotICAgICAg
ICAnZGV2aWNlL3VzYi9wdWJsaWMvbW9qb20vZGV2aWNlLm1vam9tJywgJy4uLy4uLy4uLy4uLy4u
L2RldmljZS91c2IvcHVibGljL21vam9tL2RldmljZS5tb2pvbS5qcycpOwotICB9Ci0gIHZhciBk
ZXZpY2VfZW51bWVyYXRpb25fb3B0aW9ucyQgPQotICAgICAgbW9qby5pbnRlcm5hbC5leHBvc2VO
YW1lc3BhY2UoJ2RldmljZS5tb2pvbScpOwotICBpZiAobW9qby5jb25maWcuYXV0b0xvYWRNb2pv
bURlcHMpIHsKLSAgICBtb2pvLmludGVybmFsLmxvYWRNb2pvbUlmTmVjZXNzYXJ5KAotICAgICAg
ICAnZGV2aWNlL3VzYi9wdWJsaWMvbW9qb20vZGV2aWNlX2VudW1lcmF0aW9uX29wdGlvbnMubW9q
b20nLCAnLi4vLi4vLi4vLi4vLi4vZGV2aWNlL3VzYi9wdWJsaWMvbW9qb20vZGV2aWNlX2VudW1l
cmF0aW9uX29wdGlvbnMubW9qb20uanMnKTsKLSAgfQotICB2YXIgZGV2aWNlX21hbmFnZXJfY2xp
ZW50JCA9Ci0gICAgICBtb2pvLmludGVybmFsLmV4cG9zZU5hbWVzcGFjZSgnZGV2aWNlLm1vam9t
Jyk7Ci0gIGlmIChtb2pvLmNvbmZpZy5hdXRvTG9hZE1vam9tRGVwcykgewotICAgIG1vam8uaW50
ZXJuYWwubG9hZE1vam9tSWZOZWNlc3NhcnkoCi0gICAgICAgICdkZXZpY2UvdXNiL3B1YmxpYy9t
b2pvbS9kZXZpY2VfbWFuYWdlcl9jbGllbnQubW9qb20nLCAnLi4vLi4vLi4vLi4vLi4vZGV2aWNl
L3VzYi9wdWJsaWMvbW9qb20vZGV2aWNlX21hbmFnZXJfY2xpZW50Lm1vam9tLmpzJyk7Ci0gIH0K
LQotCi0KLSAgZnVuY3Rpb24gV2ViVXNiU2VydmljZV9HZXREZXZpY2VzX1BhcmFtcyh2YWx1ZXMp
IHsKLSAgICB0aGlzLmluaXREZWZhdWx0c18oKTsKLSAgICB0aGlzLmluaXRGaWVsZHNfKHZhbHVl
cyk7Ci0gIH0KLQotCi0gIFdlYlVzYlNlcnZpY2VfR2V0RGV2aWNlc19QYXJhbXMucHJvdG90eXBl
LmluaXREZWZhdWx0c18gPSBmdW5jdGlvbigpIHsKLSAgfTsKLSAgV2ViVXNiU2VydmljZV9HZXRE
ZXZpY2VzX1BhcmFtcy5wcm90b3R5cGUuaW5pdEZpZWxkc18gPSBmdW5jdGlvbihmaWVsZHMpIHsK
LSAgICBmb3IodmFyIGZpZWxkIGluIGZpZWxkcykgewotICAgICAgICBpZiAodGhpcy5oYXNPd25Q
cm9wZXJ0eShmaWVsZCkpCi0gICAgICAgICAgdGhpc1tmaWVsZF0gPSBmaWVsZHNbZmllbGRdOwot
ICAgIH0KLSAgfTsKLQotICBXZWJVc2JTZXJ2aWNlX0dldERldmljZXNfUGFyYW1zLnZhbGlkYXRl
ID0gZnVuY3Rpb24obWVzc2FnZVZhbGlkYXRvciwgb2Zmc2V0KSB7Ci0gICAgdmFyIGVycjsKLSAg
ICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0SGVhZGVyKG9mZnNldCwgY29k
ZWMua1N0cnVjdEhlYWRlclNpemUpOwotICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0
aW9uRXJyb3IuTk9ORSkKLSAgICAgICAgcmV0dXJuIGVycjsKLQotICAgIHZhciBrVmVyc2lvblNp
emVzID0gWwotICAgICAge3ZlcnNpb246IDAsIG51bUJ5dGVzOiA4fQotICAgIF07Ci0gICAgZXJy
ID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdFZlcnNpb24ob2Zmc2V0LCBrVmVyc2lv
blNpemVzKTsKLSAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUp
Ci0gICAgICAgIHJldHVybiBlcnI7Ci0KLSAgICByZXR1cm4gdmFsaWRhdG9yLnZhbGlkYXRpb25F
cnJvci5OT05FOwotICB9OwotCi0gIFdlYlVzYlNlcnZpY2VfR2V0RGV2aWNlc19QYXJhbXMuZW5j
b2RlZFNpemUgPSBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDA7Ci0KLSAgV2ViVXNiU2Vydmlj
ZV9HZXREZXZpY2VzX1BhcmFtcy5kZWNvZGUgPSBmdW5jdGlvbihkZWNvZGVyKSB7Ci0gICAgdmFy
IHBhY2tlZDsKLSAgICB2YXIgdmFsID0gbmV3IFdlYlVzYlNlcnZpY2VfR2V0RGV2aWNlc19QYXJh
bXMoKTsKLSAgICB2YXIgbnVtYmVyT2ZCeXRlcyA9IGRlY29kZXIucmVhZFVpbnQzMigpOwotICAg
IHZhciB2ZXJzaW9uID0gZGVjb2Rlci5yZWFkVWludDMyKCk7Ci0gICAgcmV0dXJuIHZhbDsKLSAg
fTsKLQotICBXZWJVc2JTZXJ2aWNlX0dldERldmljZXNfUGFyYW1zLmVuY29kZSA9IGZ1bmN0aW9u
KGVuY29kZXIsIHZhbCkgewotICAgIHZhciBwYWNrZWQ7Ci0gICAgZW5jb2Rlci53cml0ZVVpbnQz
MihXZWJVc2JTZXJ2aWNlX0dldERldmljZXNfUGFyYW1zLmVuY29kZWRTaXplKTsKLSAgICBlbmNv
ZGVyLndyaXRlVWludDMyKDApOwotICB9OwotICBmdW5jdGlvbiBXZWJVc2JTZXJ2aWNlX0dldERl
dmljZXNfUmVzcG9uc2VQYXJhbXModmFsdWVzKSB7Ci0gICAgdGhpcy5pbml0RGVmYXVsdHNfKCk7
Ci0gICAgdGhpcy5pbml0RmllbGRzXyh2YWx1ZXMpOwotICB9Ci0KLQotICBXZWJVc2JTZXJ2aWNl
X0dldERldmljZXNfUmVzcG9uc2VQYXJhbXMucHJvdG90eXBlLmluaXREZWZhdWx0c18gPSBmdW5j
dGlvbigpIHsKLSAgICB0aGlzLnJlc3VsdHMgPSBudWxsOwotICB9OwotICBXZWJVc2JTZXJ2aWNl
X0dldERldmljZXNfUmVzcG9uc2VQYXJhbXMucHJvdG90eXBlLmluaXRGaWVsZHNfID0gZnVuY3Rp
b24oZmllbGRzKSB7Ci0gICAgZm9yKHZhciBmaWVsZCBpbiBmaWVsZHMpIHsKLSAgICAgICAgaWYg
KHRoaXMuaGFzT3duUHJvcGVydHkoZmllbGQpKQotICAgICAgICAgIHRoaXNbZmllbGRdID0gZmll
bGRzW2ZpZWxkXTsKLSAgICB9Ci0gIH07Ci0KLSAgV2ViVXNiU2VydmljZV9HZXREZXZpY2VzX1Jl
c3BvbnNlUGFyYW1zLnZhbGlkYXRlID0gZnVuY3Rpb24obWVzc2FnZVZhbGlkYXRvciwgb2Zmc2V0
KSB7Ci0gICAgdmFyIGVycjsKLSAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3Ry
dWN0SGVhZGVyKG9mZnNldCwgY29kZWMua1N0cnVjdEhlYWRlclNpemUpOwotICAgIGlmIChlcnIg
IT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKLSAgICAgICAgcmV0dXJuIGVycjsK
LQotICAgIHZhciBrVmVyc2lvblNpemVzID0gWwotICAgICAge3ZlcnNpb246IDAsIG51bUJ5dGVz
OiAxNn0KLSAgICBdOwotICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RW
ZXJzaW9uKG9mZnNldCwga1ZlcnNpb25TaXplcyk7Ci0gICAgaWYgKGVyciAhPT0gdmFsaWRhdG9y
LnZhbGlkYXRpb25FcnJvci5OT05FKQotICAgICAgICByZXR1cm4gZXJyOwotCi0KLSAgICAvLyB2
YWxpZGF0ZSBXZWJVc2JTZXJ2aWNlX0dldERldmljZXNfUmVzcG9uc2VQYXJhbXMucmVzdWx0cwot
ICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVBcnJheVBvaW50ZXIob2Zmc2V0ICsg
Y29kZWMua1N0cnVjdEhlYWRlclNpemUgKyAwLCA4LCBuZXcgY29kZWMuUG9pbnRlclRvKGRldmlj
ZSQuVXNiRGV2aWNlSW5mbyksIGZhbHNlLCBbMF0sIDApOwotICAgIGlmIChlcnIgIT09IHZhbGlk
YXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKLSAgICAgICAgcmV0dXJuIGVycjsKLQotICAgIHJl
dHVybiB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkU7Ci0gIH07Ci0KLSAgV2ViVXNiU2Vy
dmljZV9HZXREZXZpY2VzX1Jlc3BvbnNlUGFyYW1zLmVuY29kZWRTaXplID0gY29kZWMua1N0cnVj
dEhlYWRlclNpemUgKyA4OwotCi0gIFdlYlVzYlNlcnZpY2VfR2V0RGV2aWNlc19SZXNwb25zZVBh
cmFtcy5kZWNvZGUgPSBmdW5jdGlvbihkZWNvZGVyKSB7Ci0gICAgdmFyIHBhY2tlZDsKLSAgICB2
YXIgdmFsID0gbmV3IFdlYlVzYlNlcnZpY2VfR2V0RGV2aWNlc19SZXNwb25zZVBhcmFtcygpOwot
ICAgIHZhciBudW1iZXJPZkJ5dGVzID0gZGVjb2Rlci5yZWFkVWludDMyKCk7Ci0gICAgdmFyIHZl
cnNpb24gPSBkZWNvZGVyLnJlYWRVaW50MzIoKTsKLSAgICB2YWwucmVzdWx0cyA9IGRlY29kZXIu
ZGVjb2RlQXJyYXlQb2ludGVyKG5ldyBjb2RlYy5Qb2ludGVyVG8oZGV2aWNlJC5Vc2JEZXZpY2VJ
bmZvKSk7Ci0gICAgcmV0dXJuIHZhbDsKLSAgfTsKLQotICBXZWJVc2JTZXJ2aWNlX0dldERldmlj
ZXNfUmVzcG9uc2VQYXJhbXMuZW5jb2RlID0gZnVuY3Rpb24oZW5jb2RlciwgdmFsKSB7Ci0gICAg
dmFyIHBhY2tlZDsKLSAgICBlbmNvZGVyLndyaXRlVWludDMyKFdlYlVzYlNlcnZpY2VfR2V0RGV2
aWNlc19SZXNwb25zZVBhcmFtcy5lbmNvZGVkU2l6ZSk7Ci0gICAgZW5jb2Rlci53cml0ZVVpbnQz
MigwKTsKLSAgICBlbmNvZGVyLmVuY29kZUFycmF5UG9pbnRlcihuZXcgY29kZWMuUG9pbnRlclRv
KGRldmljZSQuVXNiRGV2aWNlSW5mbyksIHZhbC5yZXN1bHRzKTsKLSAgfTsKLSAgZnVuY3Rpb24g
V2ViVXNiU2VydmljZV9HZXREZXZpY2VfUGFyYW1zKHZhbHVlcykgewotICAgIHRoaXMuaW5pdERl
ZmF1bHRzXygpOwotICAgIHRoaXMuaW5pdEZpZWxkc18odmFsdWVzKTsKLSAgfQotCi0KLSAgV2Vi
VXNiU2VydmljZV9HZXREZXZpY2VfUGFyYW1zLnByb3RvdHlwZS5pbml0RGVmYXVsdHNfID0gZnVu
Y3Rpb24oKSB7Ci0gICAgdGhpcy5ndWlkID0gbnVsbDsKLSAgICB0aGlzLmRldmljZVJlcXVlc3Rk
ID0gbmV3IGJpbmRpbmdzLkludGVyZmFjZVJlcXVlc3QoKTsKLSAgfTsKLSAgV2ViVXNiU2Vydmlj
ZV9HZXREZXZpY2VfUGFyYW1zLnByb3RvdHlwZS5pbml0RmllbGRzXyA9IGZ1bmN0aW9uKGZpZWxk
cykgewotICAgIGZvcih2YXIgZmllbGQgaW4gZmllbGRzKSB7Ci0gICAgICAgIGlmICh0aGlzLmhh
c093blByb3BlcnR5KGZpZWxkKSkKLSAgICAgICAgICB0aGlzW2ZpZWxkXSA9IGZpZWxkc1tmaWVs
ZF07Ci0gICAgfQotICB9OwotCi0gIFdlYlVzYlNlcnZpY2VfR2V0RGV2aWNlX1BhcmFtcy52YWxp
ZGF0ZSA9IGZ1bmN0aW9uKG1lc3NhZ2VWYWxpZGF0b3IsIG9mZnNldCkgewotICAgIHZhciBlcnI7
Ci0gICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdEhlYWRlcihvZmZzZXQs
IGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplKTsKLSAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFs
aWRhdGlvbkVycm9yLk5PTkUpCi0gICAgICAgIHJldHVybiBlcnI7Ci0KLSAgICB2YXIga1ZlcnNp
b25TaXplcyA9IFsKLSAgICAgIHt2ZXJzaW9uOiAwLCBudW1CeXRlczogMjR9Ci0gICAgXTsKLSAg
ICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0VmVyc2lvbihvZmZzZXQsIGtW
ZXJzaW9uU2l6ZXMpOwotICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3Iu
Tk9ORSkKLSAgICAgICAgcmV0dXJuIGVycjsKLQotCi0gICAgLy8gdmFsaWRhdGUgV2ViVXNiU2Vy
dmljZV9HZXREZXZpY2VfUGFyYW1zLmd1aWQKLSAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZh
bGlkYXRlU3RyaW5nUG9pbnRlcihvZmZzZXQgKyBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDAs
IGZhbHNlKQotICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkK
LSAgICAgICAgcmV0dXJuIGVycjsKLQotCi0gICAgLy8gdmFsaWRhdGUgV2ViVXNiU2VydmljZV9H
ZXREZXZpY2VfUGFyYW1zLmRldmljZVJlcXVlc3RkCi0gICAgZXJyID0gbWVzc2FnZVZhbGlkYXRv
ci52YWxpZGF0ZUludGVyZmFjZVJlcXVlc3Qob2Zmc2V0ICsgY29kZWMua1N0cnVjdEhlYWRlclNp
emUgKyA4LCBmYWxzZSkKLSAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9y
Lk5PTkUpCi0gICAgICAgIHJldHVybiBlcnI7Ci0KLSAgICByZXR1cm4gdmFsaWRhdG9yLnZhbGlk
YXRpb25FcnJvci5OT05FOwotICB9OwotCi0gIFdlYlVzYlNlcnZpY2VfR2V0RGV2aWNlX1BhcmFt
cy5lbmNvZGVkU2l6ZSA9IGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgMTY7Ci0KLSAgV2ViVXNi
U2VydmljZV9HZXREZXZpY2VfUGFyYW1zLmRlY29kZSA9IGZ1bmN0aW9uKGRlY29kZXIpIHsKLSAg
ICB2YXIgcGFja2VkOwotICAgIHZhciB2YWwgPSBuZXcgV2ViVXNiU2VydmljZV9HZXREZXZpY2Vf
UGFyYW1zKCk7Ci0gICAgdmFyIG51bWJlck9mQnl0ZXMgPSBkZWNvZGVyLnJlYWRVaW50MzIoKTsK
LSAgICB2YXIgdmVyc2lvbiA9IGRlY29kZXIucmVhZFVpbnQzMigpOwotICAgIHZhbC5ndWlkID0g
ZGVjb2Rlci5kZWNvZGVTdHJ1Y3QoY29kZWMuU3RyaW5nKTsKLSAgICB2YWwuZGV2aWNlUmVxdWVz
dGQgPSBkZWNvZGVyLmRlY29kZVN0cnVjdChjb2RlYy5JbnRlcmZhY2VSZXF1ZXN0KTsKLSAgICBk
ZWNvZGVyLnNraXAoMSk7Ci0gICAgZGVjb2Rlci5za2lwKDEpOwotICAgIGRlY29kZXIuc2tpcCgx
KTsKLSAgICBkZWNvZGVyLnNraXAoMSk7Ci0gICAgcmV0dXJuIHZhbDsKLSAgfTsKLQotICBXZWJV
c2JTZXJ2aWNlX0dldERldmljZV9QYXJhbXMuZW5jb2RlID0gZnVuY3Rpb24oZW5jb2RlciwgdmFs
KSB7Ci0gICAgdmFyIHBhY2tlZDsKLSAgICBlbmNvZGVyLndyaXRlVWludDMyKFdlYlVzYlNlcnZp
Y2VfR2V0RGV2aWNlX1BhcmFtcy5lbmNvZGVkU2l6ZSk7Ci0gICAgZW5jb2Rlci53cml0ZVVpbnQz
MigwKTsKLSAgICBlbmNvZGVyLmVuY29kZVN0cnVjdChjb2RlYy5TdHJpbmcsIHZhbC5ndWlkKTsK
LSAgICBlbmNvZGVyLmVuY29kZVN0cnVjdChjb2RlYy5JbnRlcmZhY2VSZXF1ZXN0LCB2YWwuZGV2
aWNlUmVxdWVzdGQpOwotICAgIGVuY29kZXIuc2tpcCgxKTsKLSAgICBlbmNvZGVyLnNraXAoMSk7
Ci0gICAgZW5jb2Rlci5za2lwKDEpOwotICAgIGVuY29kZXIuc2tpcCgxKTsKLSAgfTsKLSAgZnVu
Y3Rpb24gV2ViVXNiU2VydmljZV9HZXRQZXJtaXNzaW9uX1BhcmFtcyh2YWx1ZXMpIHsKLSAgICB0
aGlzLmluaXREZWZhdWx0c18oKTsKLSAgICB0aGlzLmluaXRGaWVsZHNfKHZhbHVlcyk7Ci0gIH0K
LQotCi0gIFdlYlVzYlNlcnZpY2VfR2V0UGVybWlzc2lvbl9QYXJhbXMucHJvdG90eXBlLmluaXRE
ZWZhdWx0c18gPSBmdW5jdGlvbigpIHsKLSAgICB0aGlzLmRldmljZUZpbHRlcnMgPSBudWxsOwot
ICB9OwotICBXZWJVc2JTZXJ2aWNlX0dldFBlcm1pc3Npb25fUGFyYW1zLnByb3RvdHlwZS5pbml0
RmllbGRzXyA9IGZ1bmN0aW9uKGZpZWxkcykgewotICAgIGZvcih2YXIgZmllbGQgaW4gZmllbGRz
KSB7Ci0gICAgICAgIGlmICh0aGlzLmhhc093blByb3BlcnR5KGZpZWxkKSkKLSAgICAgICAgICB0
aGlzW2ZpZWxkXSA9IGZpZWxkc1tmaWVsZF07Ci0gICAgfQotICB9OwotCi0gIFdlYlVzYlNlcnZp
Y2VfR2V0UGVybWlzc2lvbl9QYXJhbXMudmFsaWRhdGUgPSBmdW5jdGlvbihtZXNzYWdlVmFsaWRh
dG9yLCBvZmZzZXQpIHsKLSAgICB2YXIgZXJyOwotICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3Iu
dmFsaWRhdGVTdHJ1Y3RIZWFkZXIob2Zmc2V0LCBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSk7Ci0g
ICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQotICAgICAgICBy
ZXR1cm4gZXJyOwotCi0gICAgdmFyIGtWZXJzaW9uU2l6ZXMgPSBbCi0gICAgICB7dmVyc2lvbjog
MCwgbnVtQnl0ZXM6IDE2fQotICAgIF07Ci0gICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxp
ZGF0ZVN0cnVjdFZlcnNpb24ob2Zmc2V0LCBrVmVyc2lvblNpemVzKTsKLSAgICBpZiAoZXJyICE9
PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCi0gICAgICAgIHJldHVybiBlcnI7Ci0K
LQotICAgIC8vIHZhbGlkYXRlIFdlYlVzYlNlcnZpY2VfR2V0UGVybWlzc2lvbl9QYXJhbXMuZGV2
aWNlRmlsdGVycwotICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVBcnJheVBvaW50
ZXIob2Zmc2V0ICsgY29kZWMua1N0cnVjdEhlYWRlclNpemUgKyAwLCA4LCBuZXcgY29kZWMuUG9p
bnRlclRvKGRldmljZV9lbnVtZXJhdGlvbl9vcHRpb25zJC5Vc2JEZXZpY2VGaWx0ZXIpLCBmYWxz
ZSwgWzBdLCAwKTsKLSAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5P
TkUpCi0gICAgICAgIHJldHVybiBlcnI7Ci0KLSAgICByZXR1cm4gdmFsaWRhdG9yLnZhbGlkYXRp
b25FcnJvci5OT05FOwotICB9OwotCi0gIFdlYlVzYlNlcnZpY2VfR2V0UGVybWlzc2lvbl9QYXJh
bXMuZW5jb2RlZFNpemUgPSBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDg7Ci0KLSAgV2ViVXNi
U2VydmljZV9HZXRQZXJtaXNzaW9uX1BhcmFtcy5kZWNvZGUgPSBmdW5jdGlvbihkZWNvZGVyKSB7
Ci0gICAgdmFyIHBhY2tlZDsKLSAgICB2YXIgdmFsID0gbmV3IFdlYlVzYlNlcnZpY2VfR2V0UGVy
bWlzc2lvbl9QYXJhbXMoKTsKLSAgICB2YXIgbnVtYmVyT2ZCeXRlcyA9IGRlY29kZXIucmVhZFVp
bnQzMigpOwotICAgIHZhciB2ZXJzaW9uID0gZGVjb2Rlci5yZWFkVWludDMyKCk7Ci0gICAgdmFs
LmRldmljZUZpbHRlcnMgPSBkZWNvZGVyLmRlY29kZUFycmF5UG9pbnRlcihuZXcgY29kZWMuUG9p
bnRlclRvKGRldmljZV9lbnVtZXJhdGlvbl9vcHRpb25zJC5Vc2JEZXZpY2VGaWx0ZXIpKTsKLSAg
ICByZXR1cm4gdmFsOwotICB9OwotCi0gIFdlYlVzYlNlcnZpY2VfR2V0UGVybWlzc2lvbl9QYXJh
bXMuZW5jb2RlID0gZnVuY3Rpb24oZW5jb2RlciwgdmFsKSB7Ci0gICAgdmFyIHBhY2tlZDsKLSAg
ICBlbmNvZGVyLndyaXRlVWludDMyKFdlYlVzYlNlcnZpY2VfR2V0UGVybWlzc2lvbl9QYXJhbXMu
ZW5jb2RlZFNpemUpOwotICAgIGVuY29kZXIud3JpdGVVaW50MzIoMCk7Ci0gICAgZW5jb2Rlci5l
bmNvZGVBcnJheVBvaW50ZXIobmV3IGNvZGVjLlBvaW50ZXJUbyhkZXZpY2VfZW51bWVyYXRpb25f
b3B0aW9ucyQuVXNiRGV2aWNlRmlsdGVyKSwgdmFsLmRldmljZUZpbHRlcnMpOwotICB9OwotICBm
dW5jdGlvbiBXZWJVc2JTZXJ2aWNlX0dldFBlcm1pc3Npb25fUmVzcG9uc2VQYXJhbXModmFsdWVz
KSB7Ci0gICAgdGhpcy5pbml0RGVmYXVsdHNfKCk7Ci0gICAgdGhpcy5pbml0RmllbGRzXyh2YWx1
ZXMpOwotICB9Ci0KLQotICBXZWJVc2JTZXJ2aWNlX0dldFBlcm1pc3Npb25fUmVzcG9uc2VQYXJh
bXMucHJvdG90eXBlLmluaXREZWZhdWx0c18gPSBmdW5jdGlvbigpIHsKLSAgICB0aGlzLnJlc3Vs
dCA9IG51bGw7Ci0gIH07Ci0gIFdlYlVzYlNlcnZpY2VfR2V0UGVybWlzc2lvbl9SZXNwb25zZVBh
cmFtcy5wcm90b3R5cGUuaW5pdEZpZWxkc18gPSBmdW5jdGlvbihmaWVsZHMpIHsKLSAgICBmb3Io
dmFyIGZpZWxkIGluIGZpZWxkcykgewotICAgICAgICBpZiAodGhpcy5oYXNPd25Qcm9wZXJ0eShm
aWVsZCkpCi0gICAgICAgICAgdGhpc1tmaWVsZF0gPSBmaWVsZHNbZmllbGRdOwotICAgIH0KLSAg
fTsKLQotICBXZWJVc2JTZXJ2aWNlX0dldFBlcm1pc3Npb25fUmVzcG9uc2VQYXJhbXMudmFsaWRh
dGUgPSBmdW5jdGlvbihtZXNzYWdlVmFsaWRhdG9yLCBvZmZzZXQpIHsKLSAgICB2YXIgZXJyOwot
ICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RIZWFkZXIob2Zmc2V0LCBj
b2RlYy5rU3RydWN0SGVhZGVyU2l6ZSk7Ci0gICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlk
YXRpb25FcnJvci5OT05FKQotICAgICAgICByZXR1cm4gZXJyOwotCi0gICAgdmFyIGtWZXJzaW9u
U2l6ZXMgPSBbCi0gICAgICB7dmVyc2lvbjogMCwgbnVtQnl0ZXM6IDE2fQotICAgIF07Ci0gICAg
ZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdFZlcnNpb24ob2Zmc2V0LCBrVmVy
c2lvblNpemVzKTsKLSAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5P
TkUpCi0gICAgICAgIHJldHVybiBlcnI7Ci0KLQotICAgIC8vIHZhbGlkYXRlIFdlYlVzYlNlcnZp
Y2VfR2V0UGVybWlzc2lvbl9SZXNwb25zZVBhcmFtcy5yZXN1bHQKLSAgICBlcnIgPSBtZXNzYWdl
VmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0UG9pbnRlcihvZmZzZXQgKyBjb2RlYy5rU3RydWN0SGVh
ZGVyU2l6ZSArIDAsIGRldmljZSQuVXNiRGV2aWNlSW5mbywgdHJ1ZSk7Ci0gICAgaWYgKGVyciAh
PT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQotICAgICAgICByZXR1cm4gZXJyOwot
Ci0gICAgcmV0dXJuIHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORTsKLSAgfTsKLQotICBX
ZWJVc2JTZXJ2aWNlX0dldFBlcm1pc3Npb25fUmVzcG9uc2VQYXJhbXMuZW5jb2RlZFNpemUgPSBj
b2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDg7Ci0KLSAgV2ViVXNiU2VydmljZV9HZXRQZXJtaXNz
aW9uX1Jlc3BvbnNlUGFyYW1zLmRlY29kZSA9IGZ1bmN0aW9uKGRlY29kZXIpIHsKLSAgICB2YXIg
cGFja2VkOwotICAgIHZhciB2YWwgPSBuZXcgV2ViVXNiU2VydmljZV9HZXRQZXJtaXNzaW9uX1Jl
c3BvbnNlUGFyYW1zKCk7Ci0gICAgdmFyIG51bWJlck9mQnl0ZXMgPSBkZWNvZGVyLnJlYWRVaW50
MzIoKTsKLSAgICB2YXIgdmVyc2lvbiA9IGRlY29kZXIucmVhZFVpbnQzMigpOwotICAgIHZhbC5y
ZXN1bHQgPSBkZWNvZGVyLmRlY29kZVN0cnVjdFBvaW50ZXIoZGV2aWNlJC5Vc2JEZXZpY2VJbmZv
KTsKLSAgICByZXR1cm4gdmFsOwotICB9OwotCi0gIFdlYlVzYlNlcnZpY2VfR2V0UGVybWlzc2lv
bl9SZXNwb25zZVBhcmFtcy5lbmNvZGUgPSBmdW5jdGlvbihlbmNvZGVyLCB2YWwpIHsKLSAgICB2
YXIgcGFja2VkOwotICAgIGVuY29kZXIud3JpdGVVaW50MzIoV2ViVXNiU2VydmljZV9HZXRQZXJt
aXNzaW9uX1Jlc3BvbnNlUGFyYW1zLmVuY29kZWRTaXplKTsKLSAgICBlbmNvZGVyLndyaXRlVWlu
dDMyKDApOwotICAgIGVuY29kZXIuZW5jb2RlU3RydWN0UG9pbnRlcihkZXZpY2UkLlVzYkRldmlj
ZUluZm8sIHZhbC5yZXN1bHQpOwotICB9OwotICBmdW5jdGlvbiBXZWJVc2JTZXJ2aWNlX1NldENs
aWVudF9QYXJhbXModmFsdWVzKSB7Ci0gICAgdGhpcy5pbml0RGVmYXVsdHNfKCk7Ci0gICAgdGhp
cy5pbml0RmllbGRzXyh2YWx1ZXMpOwotICB9Ci0KLQotICBXZWJVc2JTZXJ2aWNlX1NldENsaWVu
dF9QYXJhbXMucHJvdG90eXBlLmluaXREZWZhdWx0c18gPSBmdW5jdGlvbigpIHsKLSAgICB0aGlz
LmNsaWVudCA9IG5ldyBhc3NvY2lhdGVkQmluZGluZ3MuQXNzb2NpYXRlZEludGVyZmFjZVB0cklu
Zm8oKTsKLSAgfTsKLSAgV2ViVXNiU2VydmljZV9TZXRDbGllbnRfUGFyYW1zLnByb3RvdHlwZS5p
bml0RmllbGRzXyA9IGZ1bmN0aW9uKGZpZWxkcykgewotICAgIGZvcih2YXIgZmllbGQgaW4gZmll
bGRzKSB7Ci0gICAgICAgIGlmICh0aGlzLmhhc093blByb3BlcnR5KGZpZWxkKSkKLSAgICAgICAg
ICB0aGlzW2ZpZWxkXSA9IGZpZWxkc1tmaWVsZF07Ci0gICAgfQotICB9OwotCi0gIFdlYlVzYlNl
cnZpY2VfU2V0Q2xpZW50X1BhcmFtcy52YWxpZGF0ZSA9IGZ1bmN0aW9uKG1lc3NhZ2VWYWxpZGF0
b3IsIG9mZnNldCkgewotICAgIHZhciBlcnI7Ci0gICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52
YWxpZGF0ZVN0cnVjdEhlYWRlcihvZmZzZXQsIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplKTsKLSAg
ICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCi0gICAgICAgIHJl
dHVybiBlcnI7Ci0KLSAgICB2YXIga1ZlcnNpb25TaXplcyA9IFsKLSAgICAgIHt2ZXJzaW9uOiAw
LCBudW1CeXRlczogMTZ9Ci0gICAgXTsKLSAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlk
YXRlU3RydWN0VmVyc2lvbihvZmZzZXQsIGtWZXJzaW9uU2l6ZXMpOwotICAgIGlmIChlcnIgIT09
IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKLSAgICAgICAgcmV0dXJuIGVycjsKLQot
Ci0gICAgLy8gdmFsaWRhdGUgV2ViVXNiU2VydmljZV9TZXRDbGllbnRfUGFyYW1zLmNsaWVudAot
ICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVBc3NvY2lhdGVkSW50ZXJmYWNlKG9m
ZnNldCArIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgMCwgZmFsc2UpOwotICAgIGlmIChlcnIg
IT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKLSAgICAgICAgcmV0dXJuIGVycjsK
LQotICAgIHJldHVybiB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkU7Ci0gIH07Ci0KLSAg
V2ViVXNiU2VydmljZV9TZXRDbGllbnRfUGFyYW1zLmVuY29kZWRTaXplID0gY29kZWMua1N0cnVj
dEhlYWRlclNpemUgKyA4OwotCi0gIFdlYlVzYlNlcnZpY2VfU2V0Q2xpZW50X1BhcmFtcy5kZWNv
ZGUgPSBmdW5jdGlvbihkZWNvZGVyKSB7Ci0gICAgdmFyIHBhY2tlZDsKLSAgICB2YXIgdmFsID0g
bmV3IFdlYlVzYlNlcnZpY2VfU2V0Q2xpZW50X1BhcmFtcygpOwotICAgIHZhciBudW1iZXJPZkJ5
dGVzID0gZGVjb2Rlci5yZWFkVWludDMyKCk7Ci0gICAgdmFyIHZlcnNpb24gPSBkZWNvZGVyLnJl
YWRVaW50MzIoKTsKLSAgICB2YWwuY2xpZW50ID0gZGVjb2Rlci5kZWNvZGVTdHJ1Y3QoY29kZWMu
QXNzb2NpYXRlZEludGVyZmFjZVB0ckluZm8pOwotICAgIHJldHVybiB2YWw7Ci0gIH07Ci0KLSAg
V2ViVXNiU2VydmljZV9TZXRDbGllbnRfUGFyYW1zLmVuY29kZSA9IGZ1bmN0aW9uKGVuY29kZXIs
IHZhbCkgewotICAgIHZhciBwYWNrZWQ7Ci0gICAgZW5jb2Rlci53cml0ZVVpbnQzMihXZWJVc2JT
ZXJ2aWNlX1NldENsaWVudF9QYXJhbXMuZW5jb2RlZFNpemUpOwotICAgIGVuY29kZXIud3JpdGVV
aW50MzIoMCk7Ci0gICAgZW5jb2Rlci5lbmNvZGVTdHJ1Y3QoY29kZWMuQXNzb2NpYXRlZEludGVy
ZmFjZVB0ckluZm8sIHZhbC5jbGllbnQpOwotICB9OwotICB2YXIga1dlYlVzYlNlcnZpY2VfR2V0
RGV2aWNlc19OYW1lID0gMDsKLSAgdmFyIGtXZWJVc2JTZXJ2aWNlX0dldERldmljZV9OYW1lID0g
MTsKLSAgdmFyIGtXZWJVc2JTZXJ2aWNlX0dldFBlcm1pc3Npb25fTmFtZSA9IDI7Ci0gIHZhciBr
V2ViVXNiU2VydmljZV9TZXRDbGllbnRfTmFtZSA9IDM7Ci0KLSAgZnVuY3Rpb24gV2ViVXNiU2Vy
dmljZVB0cihoYW5kbGVPclB0ckluZm8pIHsKLSAgICB0aGlzLnB0ciA9IG5ldyBiaW5kaW5ncy5J
bnRlcmZhY2VQdHJDb250cm9sbGVyKFdlYlVzYlNlcnZpY2UsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVPclB0ckluZm8pOwotICB9Ci0K
LSAgZnVuY3Rpb24gV2ViVXNiU2VydmljZUFzc29jaWF0ZWRQdHIoYXNzb2NpYXRlZEludGVyZmFj
ZVB0ckluZm8pIHsKLSAgICB0aGlzLnB0ciA9IG5ldyBhc3NvY2lhdGVkQmluZGluZ3MuQXNzb2Np
YXRlZEludGVyZmFjZVB0ckNvbnRyb2xsZXIoCi0gICAgICAgIFdlYlVzYlNlcnZpY2UsIGFzc29j
aWF0ZWRJbnRlcmZhY2VQdHJJbmZvKTsKLSAgfQotCi0gIFdlYlVzYlNlcnZpY2VBc3NvY2lhdGVk
UHRyLnByb3RvdHlwZSA9Ci0gICAgICBPYmplY3QuY3JlYXRlKFdlYlVzYlNlcnZpY2VQdHIucHJv
dG90eXBlKTsKLSAgV2ViVXNiU2VydmljZUFzc29jaWF0ZWRQdHIucHJvdG90eXBlLmNvbnN0cnVj
dG9yID0KLSAgICAgIFdlYlVzYlNlcnZpY2VBc3NvY2lhdGVkUHRyOwotCi0gIGZ1bmN0aW9uIFdl
YlVzYlNlcnZpY2VQcm94eShyZWNlaXZlcikgewotICAgIHRoaXMucmVjZWl2ZXJfID0gcmVjZWl2
ZXI7Ci0gIH0KLSAgV2ViVXNiU2VydmljZVB0ci5wcm90b3R5cGUuZ2V0RGV2aWNlcyA9IGZ1bmN0
aW9uKCkgewotICAgIHJldHVybiBXZWJVc2JTZXJ2aWNlUHJveHkucHJvdG90eXBlLmdldERldmlj
ZXMKLSAgICAgICAgLmFwcGx5KHRoaXMucHRyLmdldFByb3h5KCksIGFyZ3VtZW50cyk7Ci0gIH07
Ci0KLSAgV2ViVXNiU2VydmljZVByb3h5LnByb3RvdHlwZS5nZXREZXZpY2VzID0gZnVuY3Rpb24o
KSB7Ci0gICAgdmFyIHBhcmFtc18gPSBuZXcgV2ViVXNiU2VydmljZV9HZXREZXZpY2VzX1BhcmFt
cygpOwotICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3QpIHsK
LSAgICAgIHZhciBidWlsZGVyID0gbmV3IGNvZGVjLk1lc3NhZ2VWMUJ1aWxkZXIoCi0gICAgICAg
ICAga1dlYlVzYlNlcnZpY2VfR2V0RGV2aWNlc19OYW1lLAotICAgICAgICAgIGNvZGVjLmFsaWdu
KFdlYlVzYlNlcnZpY2VfR2V0RGV2aWNlc19QYXJhbXMuZW5jb2RlZFNpemUpLAotICAgICAgICAg
IGNvZGVjLmtNZXNzYWdlRXhwZWN0c1Jlc3BvbnNlLCAwKTsKLSAgICAgIGJ1aWxkZXIuZW5jb2Rl
U3RydWN0KFdlYlVzYlNlcnZpY2VfR2V0RGV2aWNlc19QYXJhbXMsIHBhcmFtc18pOwotICAgICAg
dmFyIG1lc3NhZ2UgPSBidWlsZGVyLmZpbmlzaCgpOwotICAgICAgdGhpcy5yZWNlaXZlcl8uYWNj
ZXB0QW5kRXhwZWN0UmVzcG9uc2UobWVzc2FnZSkudGhlbihmdW5jdGlvbihtZXNzYWdlKSB7Ci0g
ICAgICAgIHZhciByZWFkZXIgPSBuZXcgY29kZWMuTWVzc2FnZVJlYWRlcihtZXNzYWdlKTsKLSAg
ICAgICAgdmFyIHJlc3BvbnNlUGFyYW1zID0KLSAgICAgICAgICAgIHJlYWRlci5kZWNvZGVTdHJ1
Y3QoV2ViVXNiU2VydmljZV9HZXREZXZpY2VzX1Jlc3BvbnNlUGFyYW1zKTsKLSAgICAgICAgcmVz
b2x2ZShyZXNwb25zZVBhcmFtcyk7Ci0gICAgICB9KS5jYXRjaChmdW5jdGlvbihyZXN1bHQpIHsK
LSAgICAgICAgcmVqZWN0KEVycm9yKCJDb25uZWN0aW9uIGVycm9yOiAiICsgcmVzdWx0KSk7Ci0g
ICAgICB9KTsKLSAgICB9LmJpbmQodGhpcykpOwotICB9OwotICBXZWJVc2JTZXJ2aWNlUHRyLnBy
b3RvdHlwZS5nZXREZXZpY2UgPSBmdW5jdGlvbigpIHsKLSAgICByZXR1cm4gV2ViVXNiU2Vydmlj
ZVByb3h5LnByb3RvdHlwZS5nZXREZXZpY2UKLSAgICAgICAgLmFwcGx5KHRoaXMucHRyLmdldFBy
b3h5KCksIGFyZ3VtZW50cyk7Ci0gIH07Ci0KLSAgV2ViVXNiU2VydmljZVByb3h5LnByb3RvdHlw
ZS5nZXREZXZpY2UgPSBmdW5jdGlvbihndWlkLCBkZXZpY2VSZXF1ZXN0ZCkgewotICAgIHZhciBw
YXJhbXNfID0gbmV3IFdlYlVzYlNlcnZpY2VfR2V0RGV2aWNlX1BhcmFtcygpOwotICAgIHBhcmFt
c18uZ3VpZCA9IGd1aWQ7Ci0gICAgcGFyYW1zXy5kZXZpY2VSZXF1ZXN0ZCA9IGRldmljZVJlcXVl
c3RkOwotICAgIHZhciBidWlsZGVyID0gbmV3IGNvZGVjLk1lc3NhZ2VWMEJ1aWxkZXIoCi0gICAg
ICAgIGtXZWJVc2JTZXJ2aWNlX0dldERldmljZV9OYW1lLAotICAgICAgICBjb2RlYy5hbGlnbihX
ZWJVc2JTZXJ2aWNlX0dldERldmljZV9QYXJhbXMuZW5jb2RlZFNpemUpKTsKLSAgICBidWlsZGVy
LmVuY29kZVN0cnVjdChXZWJVc2JTZXJ2aWNlX0dldERldmljZV9QYXJhbXMsIHBhcmFtc18pOwot
ICAgIHZhciBtZXNzYWdlID0gYnVpbGRlci5maW5pc2goKTsKLSAgICB0aGlzLnJlY2VpdmVyXy5h
Y2NlcHQobWVzc2FnZSk7Ci0gIH07Ci0gIFdlYlVzYlNlcnZpY2VQdHIucHJvdG90eXBlLmdldFBl
cm1pc3Npb24gPSBmdW5jdGlvbigpIHsKLSAgICByZXR1cm4gV2ViVXNiU2VydmljZVByb3h5LnBy
b3RvdHlwZS5nZXRQZXJtaXNzaW9uCi0gICAgICAgIC5hcHBseSh0aGlzLnB0ci5nZXRQcm94eSgp
LCBhcmd1bWVudHMpOwotICB9OwotCi0gIFdlYlVzYlNlcnZpY2VQcm94eS5wcm90b3R5cGUuZ2V0
UGVybWlzc2lvbiA9IGZ1bmN0aW9uKGRldmljZUZpbHRlcnMpIHsKLSAgICB2YXIgcGFyYW1zXyA9
IG5ldyBXZWJVc2JTZXJ2aWNlX0dldFBlcm1pc3Npb25fUGFyYW1zKCk7Ci0gICAgcGFyYW1zXy5k
ZXZpY2VGaWx0ZXJzID0gZGV2aWNlRmlsdGVyczsKLSAgICByZXR1cm4gbmV3IFByb21pc2UoZnVu
Y3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7Ci0gICAgICB2YXIgYnVpbGRlciA9IG5ldyBjb2RlYy5N
ZXNzYWdlVjFCdWlsZGVyKAotICAgICAgICAgIGtXZWJVc2JTZXJ2aWNlX0dldFBlcm1pc3Npb25f
TmFtZSwKLSAgICAgICAgICBjb2RlYy5hbGlnbihXZWJVc2JTZXJ2aWNlX0dldFBlcm1pc3Npb25f
UGFyYW1zLmVuY29kZWRTaXplKSwKLSAgICAgICAgICBjb2RlYy5rTWVzc2FnZUV4cGVjdHNSZXNw
b25zZSwgMCk7Ci0gICAgICBidWlsZGVyLmVuY29kZVN0cnVjdChXZWJVc2JTZXJ2aWNlX0dldFBl
cm1pc3Npb25fUGFyYW1zLCBwYXJhbXNfKTsKLSAgICAgIHZhciBtZXNzYWdlID0gYnVpbGRlci5m
aW5pc2goKTsKLSAgICAgIHRoaXMucmVjZWl2ZXJfLmFjY2VwdEFuZEV4cGVjdFJlc3BvbnNlKG1l
c3NhZ2UpLnRoZW4oZnVuY3Rpb24obWVzc2FnZSkgewotICAgICAgICB2YXIgcmVhZGVyID0gbmV3
IGNvZGVjLk1lc3NhZ2VSZWFkZXIobWVzc2FnZSk7Ci0gICAgICAgIHZhciByZXNwb25zZVBhcmFt
cyA9Ci0gICAgICAgICAgICByZWFkZXIuZGVjb2RlU3RydWN0KFdlYlVzYlNlcnZpY2VfR2V0UGVy
bWlzc2lvbl9SZXNwb25zZVBhcmFtcyk7Ci0gICAgICAgIHJlc29sdmUocmVzcG9uc2VQYXJhbXMp
OwotICAgICAgfSkuY2F0Y2goZnVuY3Rpb24ocmVzdWx0KSB7Ci0gICAgICAgIHJlamVjdChFcnJv
cigiQ29ubmVjdGlvbiBlcnJvcjogIiArIHJlc3VsdCkpOwotICAgICAgfSk7Ci0gICAgfS5iaW5k
KHRoaXMpKTsKLSAgfTsKLSAgV2ViVXNiU2VydmljZVB0ci5wcm90b3R5cGUuc2V0Q2xpZW50ID0g
ZnVuY3Rpb24oKSB7Ci0gICAgcmV0dXJuIFdlYlVzYlNlcnZpY2VQcm94eS5wcm90b3R5cGUuc2V0
Q2xpZW50Ci0gICAgICAgIC5hcHBseSh0aGlzLnB0ci5nZXRQcm94eSgpLCBhcmd1bWVudHMpOwot
ICB9OwotCi0gIFdlYlVzYlNlcnZpY2VQcm94eS5wcm90b3R5cGUuc2V0Q2xpZW50ID0gZnVuY3Rp
b24oY2xpZW50KSB7Ci0gICAgdmFyIHBhcmFtc18gPSBuZXcgV2ViVXNiU2VydmljZV9TZXRDbGll
bnRfUGFyYW1zKCk7Ci0gICAgcGFyYW1zXy5jbGllbnQgPSBjbGllbnQ7Ci0gICAgdmFyIGJ1aWxk
ZXIgPSBuZXcgY29kZWMuTWVzc2FnZVYyQnVpbGRlcigKLSAgICAgICAga1dlYlVzYlNlcnZpY2Vf
U2V0Q2xpZW50X05hbWUsCi0gICAgICAgIGNvZGVjLmFsaWduKFdlYlVzYlNlcnZpY2VfU2V0Q2xp
ZW50X1BhcmFtcy5lbmNvZGVkU2l6ZSkpOwotICAgIGJ1aWxkZXIuc2V0UGF5bG9hZChXZWJVc2JT
ZXJ2aWNlX1NldENsaWVudF9QYXJhbXMsIHBhcmFtc18pOwotICAgIHZhciBtZXNzYWdlID0gYnVp
bGRlci5maW5pc2goKTsKLSAgICB0aGlzLnJlY2VpdmVyXy5hY2NlcHQobWVzc2FnZSk7Ci0gIH07
Ci0KLSAgZnVuY3Rpb24gV2ViVXNiU2VydmljZVN0dWIoZGVsZWdhdGUpIHsKLSAgICB0aGlzLmRl
bGVnYXRlXyA9IGRlbGVnYXRlOwotICB9Ci0gIFdlYlVzYlNlcnZpY2VTdHViLnByb3RvdHlwZS5n
ZXREZXZpY2VzID0gZnVuY3Rpb24oKSB7Ci0gICAgcmV0dXJuIHRoaXMuZGVsZWdhdGVfICYmIHRo
aXMuZGVsZWdhdGVfLmdldERldmljZXMgJiYgdGhpcy5kZWxlZ2F0ZV8uZ2V0RGV2aWNlcygpOwot
ICB9Ci0gIFdlYlVzYlNlcnZpY2VTdHViLnByb3RvdHlwZS5nZXREZXZpY2UgPSBmdW5jdGlvbihn
dWlkLCBkZXZpY2VSZXF1ZXN0ZCkgewotICAgIHJldHVybiB0aGlzLmRlbGVnYXRlXyAmJiB0aGlz
LmRlbGVnYXRlXy5nZXREZXZpY2UgJiYgdGhpcy5kZWxlZ2F0ZV8uZ2V0RGV2aWNlKGd1aWQsIGRl
dmljZVJlcXVlc3RkKTsKLSAgfQotICBXZWJVc2JTZXJ2aWNlU3R1Yi5wcm90b3R5cGUuZ2V0UGVy
bWlzc2lvbiA9IGZ1bmN0aW9uKGRldmljZUZpbHRlcnMpIHsKLSAgICByZXR1cm4gdGhpcy5kZWxl
Z2F0ZV8gJiYgdGhpcy5kZWxlZ2F0ZV8uZ2V0UGVybWlzc2lvbiAmJiB0aGlzLmRlbGVnYXRlXy5n
ZXRQZXJtaXNzaW9uKGRldmljZUZpbHRlcnMpOwotICB9Ci0gIFdlYlVzYlNlcnZpY2VTdHViLnBy
b3RvdHlwZS5zZXRDbGllbnQgPSBmdW5jdGlvbihjbGllbnQpIHsKLSAgICByZXR1cm4gdGhpcy5k
ZWxlZ2F0ZV8gJiYgdGhpcy5kZWxlZ2F0ZV8uc2V0Q2xpZW50ICYmIHRoaXMuZGVsZWdhdGVfLnNl
dENsaWVudChjbGllbnQpOwotICB9Ci0KLSAgV2ViVXNiU2VydmljZVN0dWIucHJvdG90eXBlLmFj
Y2VwdCA9IGZ1bmN0aW9uKG1lc3NhZ2UpIHsKLSAgICB2YXIgcmVhZGVyID0gbmV3IGNvZGVjLk1l
c3NhZ2VSZWFkZXIobWVzc2FnZSk7Ci0gICAgc3dpdGNoIChyZWFkZXIubWVzc2FnZU5hbWUpIHsK
LSAgICBjYXNlIGtXZWJVc2JTZXJ2aWNlX0dldERldmljZV9OYW1lOgotICAgICAgdmFyIHBhcmFt
cyA9IHJlYWRlci5kZWNvZGVTdHJ1Y3QoV2ViVXNiU2VydmljZV9HZXREZXZpY2VfUGFyYW1zKTsK
LSAgICAgIHRoaXMuZ2V0RGV2aWNlKHBhcmFtcy5ndWlkLCBwYXJhbXMuZGV2aWNlUmVxdWVzdGQp
OwotICAgICAgcmV0dXJuIHRydWU7Ci0gICAgY2FzZSBrV2ViVXNiU2VydmljZV9TZXRDbGllbnRf
TmFtZToKLSAgICAgIHZhciBwYXJhbXMgPSByZWFkZXIuZGVjb2RlU3RydWN0KFdlYlVzYlNlcnZp
Y2VfU2V0Q2xpZW50X1BhcmFtcyk7Ci0gICAgICB0aGlzLnNldENsaWVudChwYXJhbXMuY2xpZW50
KTsKLSAgICAgIHJldHVybiB0cnVlOwotICAgIGRlZmF1bHQ6Ci0gICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgfQotICB9OwotCi0gIFdlYlVzYlNlcnZpY2VTdHViLnByb3RvdHlwZS5hY2NlcHRXaXRo
UmVzcG9uZGVyID0KLSAgICAgIGZ1bmN0aW9uKG1lc3NhZ2UsIHJlc3BvbmRlcikgewotICAgIHZh
ciByZWFkZXIgPSBuZXcgY29kZWMuTWVzc2FnZVJlYWRlcihtZXNzYWdlKTsKLSAgICBzd2l0Y2gg
KHJlYWRlci5tZXNzYWdlTmFtZSkgewotICAgIGNhc2Uga1dlYlVzYlNlcnZpY2VfR2V0RGV2aWNl
c19OYW1lOgotICAgICAgdmFyIHBhcmFtcyA9IHJlYWRlci5kZWNvZGVTdHJ1Y3QoV2ViVXNiU2Vy
dmljZV9HZXREZXZpY2VzX1BhcmFtcyk7Ci0gICAgICB0aGlzLmdldERldmljZXMoKS50aGVuKGZ1
bmN0aW9uKHJlc3BvbnNlKSB7Ci0gICAgICAgIHZhciByZXNwb25zZVBhcmFtcyA9Ci0gICAgICAg
ICAgICBuZXcgV2ViVXNiU2VydmljZV9HZXREZXZpY2VzX1Jlc3BvbnNlUGFyYW1zKCk7Ci0gICAg
ICAgIHJlc3BvbnNlUGFyYW1zLnJlc3VsdHMgPSByZXNwb25zZS5yZXN1bHRzOwotICAgICAgICB2
YXIgYnVpbGRlciA9IG5ldyBjb2RlYy5NZXNzYWdlVjFCdWlsZGVyKAotICAgICAgICAgICAga1dl
YlVzYlNlcnZpY2VfR2V0RGV2aWNlc19OYW1lLAotICAgICAgICAgICAgY29kZWMuYWxpZ24oV2Vi
VXNiU2VydmljZV9HZXREZXZpY2VzX1Jlc3BvbnNlUGFyYW1zLmVuY29kZWRTaXplKSwKLSAgICAg
ICAgICAgIGNvZGVjLmtNZXNzYWdlSXNSZXNwb25zZSwgcmVhZGVyLnJlcXVlc3RJRCk7Ci0gICAg
ICAgIGJ1aWxkZXIuZW5jb2RlU3RydWN0KFdlYlVzYlNlcnZpY2VfR2V0RGV2aWNlc19SZXNwb25z
ZVBhcmFtcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2VQYXJhbXMpOwot
ICAgICAgICB2YXIgbWVzc2FnZSA9IGJ1aWxkZXIuZmluaXNoKCk7Ci0gICAgICAgIHJlc3BvbmRl
ci5hY2NlcHQobWVzc2FnZSk7Ci0gICAgICB9KTsKLSAgICAgIHJldHVybiB0cnVlOwotICAgIGNh
c2Uga1dlYlVzYlNlcnZpY2VfR2V0UGVybWlzc2lvbl9OYW1lOgotICAgICAgdmFyIHBhcmFtcyA9
IHJlYWRlci5kZWNvZGVTdHJ1Y3QoV2ViVXNiU2VydmljZV9HZXRQZXJtaXNzaW9uX1BhcmFtcyk7
Ci0gICAgICB0aGlzLmdldFBlcm1pc3Npb24ocGFyYW1zLmRldmljZUZpbHRlcnMpLnRoZW4oZnVu
Y3Rpb24ocmVzcG9uc2UpIHsKLSAgICAgICAgdmFyIHJlc3BvbnNlUGFyYW1zID0KLSAgICAgICAg
ICAgIG5ldyBXZWJVc2JTZXJ2aWNlX0dldFBlcm1pc3Npb25fUmVzcG9uc2VQYXJhbXMoKTsKLSAg
ICAgICAgcmVzcG9uc2VQYXJhbXMucmVzdWx0ID0gcmVzcG9uc2UucmVzdWx0OwotICAgICAgICB2
YXIgYnVpbGRlciA9IG5ldyBjb2RlYy5NZXNzYWdlVjFCdWlsZGVyKAotICAgICAgICAgICAga1dl
YlVzYlNlcnZpY2VfR2V0UGVybWlzc2lvbl9OYW1lLAotICAgICAgICAgICAgY29kZWMuYWxpZ24o
V2ViVXNiU2VydmljZV9HZXRQZXJtaXNzaW9uX1Jlc3BvbnNlUGFyYW1zLmVuY29kZWRTaXplKSwK
LSAgICAgICAgICAgIGNvZGVjLmtNZXNzYWdlSXNSZXNwb25zZSwgcmVhZGVyLnJlcXVlc3RJRCk7
Ci0gICAgICAgIGJ1aWxkZXIuZW5jb2RlU3RydWN0KFdlYlVzYlNlcnZpY2VfR2V0UGVybWlzc2lv
bl9SZXNwb25zZVBhcmFtcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2VQ
YXJhbXMpOwotICAgICAgICB2YXIgbWVzc2FnZSA9IGJ1aWxkZXIuZmluaXNoKCk7Ci0gICAgICAg
IHJlc3BvbmRlci5hY2NlcHQobWVzc2FnZSk7Ci0gICAgICB9KTsKLSAgICAgIHJldHVybiB0cnVl
OwotICAgIGRlZmF1bHQ6Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICB9OwotCi0gIGZ1
bmN0aW9uIHZhbGlkYXRlV2ViVXNiU2VydmljZVJlcXVlc3QobWVzc2FnZVZhbGlkYXRvcikgewot
ICAgIHZhciBtZXNzYWdlID0gbWVzc2FnZVZhbGlkYXRvci5tZXNzYWdlOwotICAgIHZhciBwYXJh
bXNDbGFzcyA9IG51bGw7Ci0gICAgc3dpdGNoIChtZXNzYWdlLmdldE5hbWUoKSkgewotICAgICAg
Y2FzZSBrV2ViVXNiU2VydmljZV9HZXREZXZpY2VzX05hbWU6Ci0gICAgICAgIGlmIChtZXNzYWdl
LmV4cGVjdHNSZXNwb25zZSgpKQotICAgICAgICAgIHBhcmFtc0NsYXNzID0gV2ViVXNiU2Vydmlj
ZV9HZXREZXZpY2VzX1BhcmFtczsKLSAgICAgIGJyZWFrOwotICAgICAgY2FzZSBrV2ViVXNiU2Vy
dmljZV9HZXREZXZpY2VfTmFtZToKLSAgICAgICAgaWYgKCFtZXNzYWdlLmV4cGVjdHNSZXNwb25z
ZSgpICYmICFtZXNzYWdlLmlzUmVzcG9uc2UoKSkKLSAgICAgICAgICBwYXJhbXNDbGFzcyA9IFdl
YlVzYlNlcnZpY2VfR2V0RGV2aWNlX1BhcmFtczsKLSAgICAgIGJyZWFrOwotICAgICAgY2FzZSBr
V2ViVXNiU2VydmljZV9HZXRQZXJtaXNzaW9uX05hbWU6Ci0gICAgICAgIGlmIChtZXNzYWdlLmV4
cGVjdHNSZXNwb25zZSgpKQotICAgICAgICAgIHBhcmFtc0NsYXNzID0gV2ViVXNiU2VydmljZV9H
ZXRQZXJtaXNzaW9uX1BhcmFtczsKLSAgICAgIGJyZWFrOwotICAgICAgY2FzZSBrV2ViVXNiU2Vy
dmljZV9TZXRDbGllbnRfTmFtZToKLSAgICAgICAgaWYgKCFtZXNzYWdlLmV4cGVjdHNSZXNwb25z
ZSgpICYmICFtZXNzYWdlLmlzUmVzcG9uc2UoKSkKLSAgICAgICAgICBwYXJhbXNDbGFzcyA9IFdl
YlVzYlNlcnZpY2VfU2V0Q2xpZW50X1BhcmFtczsKLSAgICAgIGJyZWFrOwotICAgIH0KLSAgICBp
ZiAocGFyYW1zQ2xhc3MgPT09IG51bGwpCi0gICAgICByZXR1cm4gdmFsaWRhdG9yLnZhbGlkYXRp
b25FcnJvci5OT05FOwotICAgIHJldHVybiBwYXJhbXNDbGFzcy52YWxpZGF0ZShtZXNzYWdlVmFs
aWRhdG9yLCBtZXNzYWdlVmFsaWRhdG9yLm1lc3NhZ2UuZ2V0SGVhZGVyTnVtQnl0ZXMoKSk7Ci0g
IH0KLQotICBmdW5jdGlvbiB2YWxpZGF0ZVdlYlVzYlNlcnZpY2VSZXNwb25zZShtZXNzYWdlVmFs
aWRhdG9yKSB7Ci0gICB2YXIgbWVzc2FnZSA9IG1lc3NhZ2VWYWxpZGF0b3IubWVzc2FnZTsKLSAg
IHZhciBwYXJhbXNDbGFzcyA9IG51bGw7Ci0gICBzd2l0Y2ggKG1lc3NhZ2UuZ2V0TmFtZSgpKSB7
Ci0gICAgICBjYXNlIGtXZWJVc2JTZXJ2aWNlX0dldERldmljZXNfTmFtZToKLSAgICAgICAgaWYg
KG1lc3NhZ2UuaXNSZXNwb25zZSgpKQotICAgICAgICAgIHBhcmFtc0NsYXNzID0gV2ViVXNiU2Vy
dmljZV9HZXREZXZpY2VzX1Jlc3BvbnNlUGFyYW1zOwotICAgICAgICBicmVhazsKLSAgICAgIGNh
c2Uga1dlYlVzYlNlcnZpY2VfR2V0UGVybWlzc2lvbl9OYW1lOgotICAgICAgICBpZiAobWVzc2Fn
ZS5pc1Jlc3BvbnNlKCkpCi0gICAgICAgICAgcGFyYW1zQ2xhc3MgPSBXZWJVc2JTZXJ2aWNlX0dl
dFBlcm1pc3Npb25fUmVzcG9uc2VQYXJhbXM7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBp
ZiAocGFyYW1zQ2xhc3MgPT09IG51bGwpCi0gICAgICByZXR1cm4gdmFsaWRhdG9yLnZhbGlkYXRp
b25FcnJvci5OT05FOwotICAgIHJldHVybiBwYXJhbXNDbGFzcy52YWxpZGF0ZShtZXNzYWdlVmFs
aWRhdG9yLCBtZXNzYWdlVmFsaWRhdG9yLm1lc3NhZ2UuZ2V0SGVhZGVyTnVtQnl0ZXMoKSk7Ci0g
IH0KLQotICB2YXIgV2ViVXNiU2VydmljZSA9IHsKLSAgICBuYW1lOiAnYmxpbmsubW9qb20uV2Vi
VXNiU2VydmljZScsCi0gICAga1ZlcnNpb246IDAsCi0gICAgcHRyQ2xhc3M6IFdlYlVzYlNlcnZp
Y2VQdHIsCi0gICAgcHJveHlDbGFzczogV2ViVXNiU2VydmljZVByb3h5LAotICAgIHN0dWJDbGFz
czogV2ViVXNiU2VydmljZVN0dWIsCi0gICAgdmFsaWRhdGVSZXF1ZXN0OiB2YWxpZGF0ZVdlYlVz
YlNlcnZpY2VSZXF1ZXN0LAotICAgIHZhbGlkYXRlUmVzcG9uc2U6IHZhbGlkYXRlV2ViVXNiU2Vy
dmljZVJlc3BvbnNlLAotICB9OwotICBXZWJVc2JTZXJ2aWNlU3R1Yi5wcm90b3R5cGUudmFsaWRh
dG9yID0gdmFsaWRhdGVXZWJVc2JTZXJ2aWNlUmVxdWVzdDsKLSAgV2ViVXNiU2VydmljZVByb3h5
LnByb3RvdHlwZS52YWxpZGF0b3IgPSB2YWxpZGF0ZVdlYlVzYlNlcnZpY2VSZXNwb25zZTsKLSAg
ZXhwb3J0cy5XZWJVc2JTZXJ2aWNlID0gV2ViVXNiU2VydmljZTsKLSAgZXhwb3J0cy5XZWJVc2JT
ZXJ2aWNlUHRyID0gV2ViVXNiU2VydmljZVB0cjsKLSAgZXhwb3J0cy5XZWJVc2JTZXJ2aWNlQXNz
b2NpYXRlZFB0ciA9IFdlYlVzYlNlcnZpY2VBc3NvY2lhdGVkUHRyOwotfSkoKTsKXCBObyBuZXds
aW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mv
d2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS93ZWJfdXNiX3NlcnZpY2UubW9q
b20uanMuaGVhZGVycyBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVz
dHMvcmVzb3VyY2VzL2Nocm9taXVtL3dlYl91c2Jfc2VydmljZS5tb2pvbS5qcy5oZWFkZXJzCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ODA1YzMyM2RmNWE5NzUyMzE2NDhiODMwZTMz
Y2UxODNjM2NiYmQzLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0t
LSBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2Vz
L2Nocm9taXVtL3dlYl91c2Jfc2VydmljZS5tb2pvbS5qcy5oZWFkZXJzCisrKyAvZGV2L251bGwK
QEAgLTEgKzAsMCBAQAotQ29udGVudC1UeXBlOiB0ZXh0L2phdmFzY3JpcHQ7IGNoYXJzZXQ9dXRm
LTgKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVz
dHMvcmVzb3VyY2VzL2Nocm9taXVtL3dlYnhyLXRlc3QuanMgYi9MYXlvdXRUZXN0cy9pbXBvcnRl
ZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS93ZWJ4ci10ZXN0Lmpz
CmluZGV4IDNlY2IxOGU1NTU2NzEwY2Q3ZjlkNGJjNmE5MmE0MTk0OWRlNzI1YzEuLjAxZDJlYzIz
Mzk2YTlmYmUyMWQyNWZiYTkwZGM4ZGNkMGY5YmQwZDMgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3Rz
L2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL3dlYnhy
LXRlc3QuanMKKysrIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0
cy9yZXNvdXJjZXMvY2hyb21pdW0vd2VieHItdGVzdC5qcwpAQCAtMTMsNiArMTMsOCBAQCBjb25z
dCBkZWZhdWx0X3N0YWdlX3BhcmFtZXRlcnMgPSB7CiAgIGJvdW5kczogbnVsbAogfTsKIAorY29u
c3QgZGVmYXVsdF9mcmFtZWJ1ZmZlcl9zY2FsZSA9IDAuNzsKKwogZnVuY3Rpb24gZ2V0TWF0cml4
RnJvbVRyYW5zZm9ybSh0cmFuc2Zvcm0pIHsKICAgY29uc3QgeCA9IHRyYW5zZm9ybS5vcmllbnRh
dGlvblswXTsKICAgY29uc3QgeSA9IHRyYW5zZm9ybS5vcmllbnRhdGlvblsxXTsKQEAgLTYzLDYg
KzY1LDIxIEBAIGNsYXNzIENocm9tZVhSVGVzdCB7CiAgIH0KIAogICBzaW11bGF0ZVVzZXJBY3Rp
dmF0aW9uKGNhbGxiYWNrKSB7CisgICAgaWYgKHdpbmRvdy50b3AgIT09IHdpbmRvdykgeworICAg
ICAgLy8gdGVzdF9kcml2ZXIuY2xpY2sgb25seSB3b3JrcyBmb3IgdGhlIHRvcGxldmVsIGZyYW1l
LiBUaGlzIGFsdGVybmF0ZQorICAgICAgLy8gQ2hyb21lLXNwZWNpZmljIG1ldGhvZCBpcyBzdWZm
aWNpZW50IGZvciBzdGFydGluZyBhbiBYUiBzZXNzaW9uIGluIGFuCisgICAgICAvLyBpZnJhbWUs
IGFuZCBpcyB1c2VkIGluIHBsYXRmb3JtLXNwZWNpZmljIHRlc3RzLgorICAgICAgLy8KKyAgICAg
IC8vIFRPRE8oaHR0cHM6Ly9naXRodWIuY29tL3dlYi1wbGF0Zm9ybS10ZXN0cy93cHQvaXNzdWVz
LzIwMjgyKTogdXNlCisgICAgICAvLyBhIGNyb3NzLXBsYXRmb3JtIG1ldGhvZCBpZiBhdmFpbGFi
bGUuCisgICAgICB4cl9kZWJ1Zygnc2ltdWxhdGVVc2VyQWN0aXZhdGlvbicsICd1c2UgZXZlbnRT
ZW5kZXInKTsKKyAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgY2FsbGJh
Y2spOworICAgICAgZXZlbnRTZW5kZXIubW91c2VNb3ZlVG8oMCwgMCk7CisgICAgICBldmVudFNl
bmRlci5tb3VzZURvd24oKTsKKyAgICAgIGV2ZW50U2VuZGVyLm1vdXNlVXAoKTsKKyAgICAgIGRv
Y3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgY2FsbGJhY2spOworICAgICAgcmV0
dXJuOworICAgIH0KICAgICBjb25zdCBidXR0b24gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdi
dXR0b24nKTsKICAgICBidXR0b24udGV4dENvbnRlbnQgPSAnY2xpY2sgdG8gY29udGludWUgdGVz
dCc7CiAgICAgYnV0dG9uLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snOwpAQCAtMjAyLDggKzIxOSwx
MyBAQCBjbGFzcyBNb2NrVlJTZXJ2aWNlIHsKICAgLy8gT25seSBoYW5kbGVzIGFzeW5jaHJvbm91
cyBjYWxscyB0byBtYWtlWHJDb21wYXRpYmxlLiBTeW5jaHJvbm91cyBjYWxscyBhcmUKICAgLy8g
bm90IHN1cHBvcnRlZCBpbiBKYXZhc2NyaXB0LgogICBtYWtlWHJDb21wYXRpYmxlKCkgeworICAg
IGlmICh0aGlzLnJ1bnRpbWVzXy5sZW5ndGggPT0gMCkgeworICAgICAgcmV0dXJuIFByb21pc2Uu
cmVzb2x2ZSh7CisgICAgICAgIHhyQ29tcGF0aWJsZVJlc3VsdDogZGV2aWNlLm1vam9tLlhyQ29t
cGF0aWJsZVJlc3VsdC5rTm9EZXZpY2VBdmFpbGFibGUKKyAgICAgIH0pOworICAgIH0KICAgICBy
ZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHsKLSAgICAgIHhyX2NvbXBhdGlibGVfcmVzdWx0OiBkZXZp
Y2UubW9qb20uWHJDb21wYXRpYmxlUmVzdWx0LmtBbHJlYWR5Q29tcGF0aWJsZQorICAgICAgeHJD
b21wYXRpYmxlUmVzdWx0OiBkZXZpY2UubW9qb20uWHJDb21wYXRpYmxlUmVzdWx0LmtBbHJlYWR5
Q29tcGF0aWJsZQogICAgIH0pOwogICB9CiB9CkBAIC0yNzksNiArMzAxLDIzIEBAIGNsYXNzIEZh
a2VYUkFuY2hvckNvbnRyb2xsZXIgewogICB9CiB9CiAKKy8vIEludGVybmFsIG9ubHkgZm9yIG5v
dywgbmVlZHMgdG8gYmUgbW92ZWQgaW50byBXZWJYUiBUZXN0IEFQSS4KK2NsYXNzIEZha2VYUkhp
dFRlc3RTb3VyY2VDb250cm9sbGVyIHsKKyAgY29uc3RydWN0b3IoaWQpIHsKKyAgICB0aGlzLmlk
XyA9IGlkOworICAgIHRoaXMuZGVsZXRlZF8gPSBmYWxzZTsKKyAgfQorCisgIGdldCBkZWxldGVk
KCkgeworICAgIHJldHVybiB0aGlzLmRlbGV0ZWRfOworICB9CisKKyAgLy8gSW50ZXJuYWwgc2V0
dGVyOgorICBzZXQgZGVsZXRlZCh2YWx1ZSkgeworICAgIHRoaXMuZGVsZXRlZF8gPSB2YWx1ZTsK
KyAgfQorfQorCiAvLyBJbXBsZW1lbnRzIFhSRnJhbWVEYXRhUHJvdmlkZXIgYW5kIFhSUHJlc2Vu
dGF0aW9uUHJvdmlkZXIuIE1haW50YWlucyBhIG1vY2sKIC8vIGZvciBYUlByZXNlbnRhdGlvblBy
b3ZpZGVyLiBJbXBsZW1lbnRzIEZha2VYUkRldmljZSB0ZXN0IEFQSS4KIGNsYXNzIE1vY2tSdW50
aW1lIHsKQEAgLTMwMiw2ICszNDEsMTcgQEAgY2xhc3MgTW9ja1J1bnRpbWUgewogICAgICJpbW1l
cnNpdmUtYXIiOiBkZXZpY2UubW9qb20uWFJTZXNzaW9uTW9kZS5rSW1tZXJzaXZlQXIsCiAgIH07
CiAKKyAgc3RhdGljIGVudmlyb25tZW50QmxlbmRNb2RlVG9Nb2pvTWFwID0geworICAgICJvcGFx
dWUiOiBkZXZpY2UubW9qb20uWFJFbnZpcm9ubWVudEJsZW5kTW9kZS5rT3BhcXVlLAorICAgICJh
bHBoYS1ibGVuZCI6IGRldmljZS5tb2pvbS5YUkVudmlyb25tZW50QmxlbmRNb2RlLmtBbHBoYUJs
ZW5kLAorICAgICJhZGRpdGl2ZSI6IGRldmljZS5tb2pvbS5YUkVudmlyb25tZW50QmxlbmRNb2Rl
LmtBZGRpdGl2ZSwKKyAgfTsKKworICBzdGF0aWMgaW50ZXJhY3Rpb25Nb2RlVG9Nb2pvTWFwID0g
eworICAgICJzY3JlZW4tc3BhY2UiOiBkZXZpY2UubW9qb20uWFJJbnRlcmFjdGlvbk1vZGUua1Nj
cmVlblNwYWNlLAorICAgICJ3b3JsZC1zcGFjZSI6IGRldmljZS5tb2pvbS5YUkludGVyYWN0aW9u
TW9kZS5rV29ybGRTcGFjZSwKKyAgfTsKKwogICBjb25zdHJ1Y3RvcihmYWtlRGV2aWNlSW5pdCwg
c2VydmljZSkgewogICAgIHRoaXMuc2Vzc2lvbkNsaWVudF8gPSBuZXcgZGV2aWNlLm1vam9tLlhS
U2Vzc2lvbkNsaWVudFB0cigpOwogICAgIHRoaXMucHJlc2VudGF0aW9uX3Byb3ZpZGVyXyA9IG5l
dyBNb2NrWFJQcmVzZW50YXRpb25Qcm92aWRlcigpOwpAQCAtMzExLDcgKzM2MSw3IEBAIGNsYXNz
IE1vY2tSdW50aW1lIHsKICAgICB0aGlzLmJvdW5kc18gPSBudWxsOwogICAgIHRoaXMuc2VuZF9t
b2pvX3NwYWNlX3Jlc2V0XyA9IGZhbHNlOwogICAgIHRoaXMuc3RhZ2VQYXJhbWV0ZXJzXyA9IG51
bGw7Ci0gICAgdGhpcy5zdGFnZVBhcmFtZXRlcnNVcGRhdGVkXyA9IGZhbHNlOworICAgIHRoaXMu
c3RhZ2VQYXJhbWV0ZXJzSWRfID0gMTsKIAogICAgIHRoaXMuc2VydmljZV8gPSBzZXJ2aWNlOwog
CkBAIC0zNzksNiArNDI5LDEwIEBAIGNsYXNzIE1vY2tSdW50aW1lIHsKICAgICAgIHRoaXMud29y
bGRfID0gZmFrZURldmljZUluaXQud29ybGQ7CiAgICAgfQogCisgICAgdGhpcy5kZWZhdWx0RnJh
bWVidWZmZXJTY2FsZV8gPSBkZWZhdWx0X2ZyYW1lYnVmZmVyX3NjYWxlOworICAgIHRoaXMuZW52
aXJvbWVudEJsZW5kTW9kZV8gPSB0aGlzLl9jb252ZXJ0QmxlbmRNb2RlVG9FbnVtKGZha2VEZXZp
Y2VJbml0LmVudmlyb25tZW50QmxlbmRNb2RlKTsKKyAgICB0aGlzLmludGVyYWN0aW9uTW9kZV8g
PSB0aGlzLl9jb252ZXJ0SW50ZXJhY3Rpb25Nb2RlVG9FbnVtKGZha2VEZXZpY2VJbml0LmludGVy
YWN0aW9uTW9kZSk7CisKICAgICAvLyBUaGlzIGFwcHJvcHJpYXRlbHkgaGFuZGxlcyBpZiB0aGUg
Y29vcmRpbmF0ZXMgYXJlIG51bGwKICAgICB0aGlzLnNldEJvdW5kc0dlb21ldHJ5KGZha2VEZXZp
Y2VJbml0LmJvdW5kc0Nvb3JkaW5hdGVzKTsKIApAQCAtNDAwLDYgKzQ1NCwyNiBAQCBjbGFzcyBN
b2NrUnVudGltZSB7CiAgICAgcmV0dXJuIHNlc3Npb25Nb2Rlcy5tYXAobW9kZSA9PiB0aGlzLl9j
b252ZXJ0TW9kZVRvRW51bShtb2RlKSk7CiAgIH0KIAorICBfY29udmVydEJsZW5kTW9kZVRvRW51
bShibGVuZE1vZGUpIHsKKyAgICBpZiAoYmxlbmRNb2RlIGluIE1vY2tSdW50aW1lLmVudmlyb25t
ZW50QmxlbmRNb2RlVG9Nb2pvTWFwKSB7CisgICAgICByZXR1cm4gTW9ja1J1bnRpbWUuZW52aXJv
bm1lbnRCbGVuZE1vZGVUb01vam9NYXBbYmxlbmRNb2RlXTsKKyAgICB9IGVsc2UgeworICAgICAg
aWYgKHRoaXMuc3VwcG9ydGVkTW9kZXNfLmluY2x1ZGVzKGRldmljZS5tb2pvbS5YUlNlc3Npb25N
b2RlLmtJbW1lcnNpdmVBcikpIHsKKyAgICAgICAgcmV0dXJuIGRldmljZS5tb2pvbS5YUkVudmly
b25tZW50QmxlbmRNb2RlLmtBZGRpdGl2ZTsKKyAgICAgIH0gZWxzZSBpZiAodGhpcy5zdXBwb3J0
ZWRNb2Rlc18uaW5jbHVkZXMoZGV2aWNlLm1vam9tLlhSU2Vzc2lvbk1vZGUua0ltbWVyc2l2ZVZy
KSkgeworICAgICAgICByZXR1cm4gZGV2aWNlLm1vam9tLlhSRW52aXJvbm1lbnRCbGVuZE1vZGUu
a09wYXF1ZTsKKyAgICAgIH0KKyAgICB9CisgIH0KKworICBfY29udmVydEludGVyYWN0aW9uTW9k
ZVRvRW51bShpbnRlcmFjdGlvbk1vZGUpIHsKKyAgICBpZiAoaW50ZXJhY3Rpb25Nb2RlIGluIE1v
Y2tSdW50aW1lLmludGVyYWN0aW9uTW9kZVRvTW9qb01hcCkgeworICAgICAgcmV0dXJuIE1vY2tS
dW50aW1lLmludGVyYWN0aW9uTW9kZVRvTW9qb01hcFtpbnRlcmFjdGlvbk1vZGVdOworICAgIH0g
ZWxzZSB7CisgICAgICByZXR1cm4gZGV2aWNlLm1vam9tLlhSSW50ZXJhY3Rpb25Nb2RlLmtXb3Js
ZFNwYWNlOworICAgIH0KKyAgfQorCiAgIC8vIFRlc3QgQVBJIG1ldGhvZHMuCiAgIGRpc2Nvbm5l
Y3QoKSB7CiAgICAgdGhpcy5zZXJ2aWNlXy5yZW1vdmVSdW50aW1lKHRoaXMpOwpAQCAtNTExLDEx
ICs1ODUsNyBAQCBjbGFzcyBNb2NrUnVudGltZSB7CiAKICAgb25TdGFnZVBhcmFtZXRlcnNVcGRh
dGVkKCkgewogICAgIC8vIEluZGljYXRlIGZvciB0aGUgZnJhbWUgbG9vcCB0aGF0IHRoZSBzdGFn
ZSBwYXJhbWV0ZXJzIGhhdmUgYmVlbiB1cGRhdGVkLgotICAgIHRoaXMuc3RhZ2VQYXJhbWV0ZXJz
VXBkYXRlZF8gPSB0cnVlOwotICAgIHRoaXMuZGlzcGxheUluZm9fLnN0YWdlUGFyYW1ldGVycyA9
IHRoaXMuc3RhZ2VQYXJhbWV0ZXJzXzsKLSAgICBpZiAodGhpcy5zZXNzaW9uQ2xpZW50Xy5wdHIu
aXNCb3VuZCgpKSB7Ci0gICAgICB0aGlzLnNlc3Npb25DbGllbnRfLm9uQ2hhbmdlZCh0aGlzLmRp
c3BsYXlJbmZvXyk7Ci0gICAgfQorICAgIHRoaXMuc3RhZ2VQYXJhbWV0ZXJzSWRfKys7CiAgIH0K
IAogICBzaW11bGF0ZVJlc2V0UG9zZSgpIHsKQEAgLTUzNSw2ICs2MDUsMTAgQEAgY2xhc3MgTW9j
a1J1bnRpbWUgewogICAgIHRoaXMuYW5jaG9yX2NyZWF0aW9uX2NhbGxiYWNrXyA9IGNhbGxiYWNr
OwogICB9CiAKKyAgc2V0SGl0VGVzdFNvdXJjZUNyZWF0aW9uQ2FsbGJhY2soY2FsbGJhY2spIHsK
KyAgICB0aGlzLmhpdF90ZXN0X3NvdXJjZV9jcmVhdGlvbl9jYWxsYmFja18gPSBjYWxsYmFjazsK
KyAgfQorCiAgIC8vIEhlbHBlciBtZXRob2RzCiAgIGdldE5vbkltbWVyc2l2ZURpc3BsYXlJbmZv
KCkgewogICAgIGNvbnN0IGRpc3BsYXlJbmZvID0gdGhpcy5nZXRJbW1lcnNpdmVEaXNwbGF5SW5m
bygpOwpAQCAtNTg0LDggKzY1OCw3IEBAIGNsYXNzIE1vY2tSdW50aW1lIHsKICAgICAgICAgfSks
CiAgICAgICAgIHJlbmRlcldpZHRoOiAyMCwKICAgICAgICAgcmVuZGVySGVpZ2h0OiAyMAotICAg
ICAgfSwKLSAgICAgIHdlYnhyRGVmYXVsdEZyYW1lYnVmZmVyU2NhbGU6IDAuNywKKyAgICAgIH0K
ICAgICB9OwogICB9CiAKQEAgLTY3OSw4ICs3NTIsNiBAQCBjbGFzcyBNb2NrUnVudGltZSB7CiAg
ICAgICAgIGNvbnN0IG1vam9fc3BhY2VfcmVzZXQgPSB0aGlzLnNlbmRfbW9qb19zcGFjZV9yZXNl
dF87CiAgICAgICAgIHRoaXMuc2VuZF9tb2pvX3NwYWNlX3Jlc2V0XyA9IGZhbHNlOwogCi0gICAg
ICAgIGNvbnN0IHN0YWdlX3BhcmFtZXRlcnNfdXBkYXRlZCA9IHRoaXMuc3RhZ2VQYXJhbWV0ZXJz
VXBkYXRlZF87Ci0gICAgICAgIHRoaXMuc3RhZ2VQYXJhbWV0ZXJzVXBkYXRlZF8gPSBmYWxzZTsK
ICAgICAgICAgaWYgKHRoaXMucG9zZV8pIHsKICAgICAgICAgICB0aGlzLnBvc2VfLnBvc2VJbmRl
eCsrOwogICAgICAgICB9CkBAIC03MDksNyArNzgwLDcgQEAgY2xhc3MgTW9ja1J1bnRpbWUgewog
ICAgICAgICAgIGJ1ZmZlckhvbGRlcjogbnVsbCwKICAgICAgICAgICBidWZmZXJTaXplOiB7fSwK
ICAgICAgICAgICBzdGFnZVBhcmFtZXRlcnM6IHRoaXMuc3RhZ2VQYXJhbWV0ZXJzXywKLSAgICAg
ICAgICBzdGFnZVBhcmFtZXRlcnNVcGRhdGVkOiBzdGFnZV9wYXJhbWV0ZXJzX3VwZGF0ZWQsCisg
ICAgICAgICAgc3RhZ2VQYXJhbWV0ZXJzSWQ6IHRoaXMuc3RhZ2VQYXJhbWV0ZXJzSWRfLAogICAg
ICAgICB9OwogCiAgICAgICAgIHRoaXMubmV4dF9mcmFtZV9pZF8rKzsKQEAgLTc3MiwxNCArODQz
LDI5IEBAIGNsYXNzIE1vY2tSdW50aW1lIHsKICAgICAgIH0pOwogICAgIH0KIAotICAgIC8vIFN0
b3JlIHRoZSBzdWJzY3JpcHRpb24gaW5mb3JtYXRpb24gYXMtaXM6CisgICAgLy8gUmVzZXJ2ZSB0
aGUgaWQgZm9yIGhpdCB0ZXN0IHNvdXJjZToKICAgICBjb25zdCBpZCA9IHRoaXMubmV4dF9oaXRf
dGVzdF9pZF8rKzsKLSAgICB0aGlzLmhpdFRlc3RTdWJzY3JpcHRpb25zXy5zZXQoaWQsIHsgbmF0
aXZlT3JpZ2luSW5mb3JtYXRpb24sIGVudGl0eVR5cGVzLCByYXkgfSk7CisgICAgY29uc3QgaGl0
VGVzdFBhcmFtZXRlcnMgPSB7IGlzVHJhbnNpZW50OiBmYWxzZSwgcHJvZmlsZU5hbWU6IG51bGwg
fTsKKyAgICBjb25zdCBjb250cm9sbGVyID0gbmV3IEZha2VYUkhpdFRlc3RTb3VyY2VDb250cm9s
bGVyKGlkKTsKIAotICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoewotICAgICAgcmVzdWx0IDog
ZGV2aWNlLm1vam9tLlN1YnNjcmliZVRvSGl0VGVzdFJlc3VsdC5TVUNDRVNTLAotICAgICAgc3Vi
c2NyaXB0aW9uSWQgOiBpZAotICAgIH0pOworCisgICAgcmV0dXJuIHRoaXMuX3Nob3VsZEhpdFRl
c3RTb3VyY2VDcmVhdGlvblN1Y2NlZWQoaGl0VGVzdFBhcmFtZXRlcnMsIGNvbnRyb2xsZXIpCisg
ICAgICAudGhlbigoc3VjY2VlZGVkKSA9PiB7CisgICAgICAgIGlmKHN1Y2NlZWRlZCkgeworICAg
ICAgICAgIC8vIFN0b3JlIHRoZSBzdWJzY3JpcHRpb24gaW5mb3JtYXRpb24gYXMtaXMgKGluY2x1
ZGluZyBjb250cm9sbGVyKToKKyAgICAgICAgICB0aGlzLmhpdFRlc3RTdWJzY3JpcHRpb25zXy5z
ZXQoaWQsIHsgbmF0aXZlT3JpZ2luSW5mb3JtYXRpb24sIGVudGl0eVR5cGVzLCByYXksIGNvbnRy
b2xsZXIgfSk7CisKKyAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHsKKyAgICAgICAg
ICAgIHJlc3VsdCA6IGRldmljZS5tb2pvbS5TdWJzY3JpYmVUb0hpdFRlc3RSZXN1bHQuU1VDQ0VT
UywKKyAgICAgICAgICAgIHN1YnNjcmlwdGlvbklkIDogaWQKKyAgICAgICAgICB9KTsKKyAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHsKKyAgICAgICAg
ICAgIHJlc3VsdCA6IGRldmljZS5tb2pvbS5TdWJzY3JpYmVUb0hpdFRlc3RSZXN1bHQuRkFJTFVS
RV9HRU5FUklDLAorICAgICAgICAgICAgc3Vic2NyaXB0aW9uSWQgOiAwCisgICAgICAgICAgfSk7
CisgICAgICAgIH0KKyAgICAgIH0pOwogICB9CiAKICAgc3Vic2NyaWJlVG9IaXRUZXN0Rm9yVHJh
bnNpZW50SW5wdXQocHJvZmlsZU5hbWUsIGVudGl0eVR5cGVzLCByYXkpewpAQCAtNzkxLDE0ICs4
NzcsNDUgQEAgY2xhc3MgTW9ja1J1bnRpbWUgewogICAgICAgfSk7CiAgICAgfQogCi0gICAgLy8g
U3RvcmUgdGhlIHN1YnNjcmlwdGlvbiBpbmZvcm1hdGlvbiBhcy1pczoKICAgICBjb25zdCBpZCA9
IHRoaXMubmV4dF9oaXRfdGVzdF9pZF8rKzsKLSAgICB0aGlzLnRyYW5zaWVudEhpdFRlc3RTdWJz
Y3JpcHRpb25zXy5zZXQoaWQsIHsgcHJvZmlsZU5hbWUsIGVudGl0eVR5cGVzLCByYXkgfSk7Cisg
ICAgY29uc3QgaGl0VGVzdFBhcmFtZXRlcnMgPSB7IGlzVHJhbnNpZW50OiB0cnVlLCBwcm9maWxl
TmFtZTogcHJvZmlsZU5hbWUgfTsKKyAgICBjb25zdCBjb250cm9sbGVyID0gbmV3IEZha2VYUkhp
dFRlc3RTb3VyY2VDb250cm9sbGVyKGlkKTsKKworICAgIC8vIENoZWNrIGlmIHdlIGhhdmUgaGl0
IHRlc3Qgc291cmNlIGNyZWF0aW9uIGNhbGxiYWNrLgorICAgIC8vIElmIHllcywgYXNrIGl0IGlm
IHRoZSBoaXQgdGVzdCBzb3VyY2UgY3JlYXRpb24gc2hvdWxkIHN1Y2NlZWQuCisgICAgLy8gSWYg
bm8sIGZvciBiYWNrLWNvbXBhdCwgYXNzdW1lIHRoZSBoaXQgdGVzdCBzb3VyY2UgY3JlYXRpb24g
c3VjY2VlZGVkLgorICAgIHJldHVybiB0aGlzLl9zaG91bGRIaXRUZXN0U291cmNlQ3JlYXRpb25T
dWNjZWVkKGhpdFRlc3RQYXJhbWV0ZXJzLCBjb250cm9sbGVyKQorICAgICAgLnRoZW4oKHN1Y2Nl
ZWRlZCkgPT4geworICAgICAgICBpZihzdWNjZWVkZWQpIHsKKyAgICAgICAgICAvLyBTdG9yZSB0
aGUgc3Vic2NyaXB0aW9uIGluZm9ybWF0aW9uIGFzLWlzIChpbmNsdWRpbmcgY29udHJvbGxlcik6
CisgICAgICAgICAgdGhpcy50cmFuc2llbnRIaXRUZXN0U3Vic2NyaXB0aW9uc18uc2V0KGlkLCB7
IHByb2ZpbGVOYW1lLCBlbnRpdHlUeXBlcywgcmF5LCBjb250cm9sbGVyIH0pOworCisgICAgICAg
ICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh7CisgICAgICAgICAgICByZXN1bHQgOiBkZXZpY2Uu
bW9qb20uU3Vic2NyaWJlVG9IaXRUZXN0UmVzdWx0LlNVQ0NFU1MsCisgICAgICAgICAgICBzdWJz
Y3JpcHRpb25JZCA6IGlkCisgICAgICAgICAgfSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh7CisgICAgICAgICAgICByZXN1bHQgOiBkZXZpY2Uu
bW9qb20uU3Vic2NyaWJlVG9IaXRUZXN0UmVzdWx0LkZBSUxVUkVfR0VORVJJQywKKyAgICAgICAg
ICAgIHN1YnNjcmlwdGlvbklkIDogMAorICAgICAgICAgIH0pOworICAgICAgICB9CisgICAgICB9
KTsKKyAgfQogCi0gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh7Ci0gICAgICByZXN1bHQgOiBk
ZXZpY2UubW9qb20uU3Vic2NyaWJlVG9IaXRUZXN0UmVzdWx0LlNVQ0NFU1MsCi0gICAgICBzdWJz
Y3JpcHRpb25JZCA6IGlkCi0gICAgfSk7CisgIHVuc3Vic2NyaWJlRnJvbUhpdFRlc3Qoc3Vic2Ny
aXB0aW9uSWQpIHsKKyAgICBsZXQgY29udHJvbGxlciA9IG51bGw7CisgICAgaWYodGhpcy50cmFu
c2llbnRIaXRUZXN0U3Vic2NyaXB0aW9uc18uaGFzKHN1YnNjcmlwdGlvbklkKSl7CisgICAgICBj
b250cm9sbGVyID0gdGhpcy50cmFuc2llbnRIaXRUZXN0U3Vic2NyaXB0aW9uc18uZ2V0KHN1YnNj
cmlwdGlvbklkKS5jb250cm9sbGVyOworICAgICAgdGhpcy50cmFuc2llbnRIaXRUZXN0U3Vic2Ny
aXB0aW9uc18uZGVsZXRlKHN1YnNjcmlwdGlvbklkKTsKKyAgICB9IGVsc2UgaWYodGhpcy5oaXRU
ZXN0U3Vic2NyaXB0aW9uc18uaGFzKHN1YnNjcmlwdGlvbklkKSl7CisgICAgICBjb250cm9sbGVy
ID0gdGhpcy5oaXRUZXN0U3Vic2NyaXB0aW9uc18uZ2V0KHN1YnNjcmlwdGlvbklkKS5jb250cm9s
bGVyOworICAgICAgdGhpcy5oaXRUZXN0U3Vic2NyaXB0aW9uc18uZGVsZXRlKHN1YnNjcmlwdGlv
bklkKTsKKyAgICB9CisKKyAgICBpZihjb250cm9sbGVyKSB7CisgICAgICBjb250cm9sbGVyLmRl
bGV0ZWQgPSB0cnVlOworICAgIH0KICAgfQogCiAgIGNyZWF0ZUFuY2hvcihuYXRpdmVPcmlnaW5J
bmZvcm1hdGlvbiwgbmF0aXZlT3JpZ2luRnJvbUFuY2hvcikgewpAQCAtOTI2LDYgKzEwNDMsMTIg
QEAgY2xhc3MgTW9ja1J1bnRpbWUgewogICAgICAgICAgICAgY2xpZW50UmVjZWl2ZXI6IGNsaWVu
dFJlY2VpdmVyLAogICAgICAgICAgICAgZGlzcGxheUluZm86IHRoaXMuZGlzcGxheUluZm9fLAog
ICAgICAgICAgICAgZW5hYmxlZEZlYXR1cmVzOiBlbmFibGVkX2ZlYXR1cmVzLAorICAgICAgICAg
ICAgZGV2aWNlQ29uZmlnOiB7CisgICAgICAgICAgICAgIGRlZmF1bHRGcmFtZWJ1ZmZlclNjYWxl
OiB0aGlzLmRlZmF1bHRGcmFtZWJ1ZmZlclNjYWxlXywKKyAgICAgICAgICAgICAgc3VwcG9ydHNW
aWV3cG9ydFNjYWxpbmc6IHRydWUKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICBlbnZpcm9t
ZW50QmxlbmRNb2RlOiB0aGlzLmVudmlyb21lbnRCbGVuZE1vZGVfLAorICAgICAgICAgICAgaW50
ZXJhY3Rpb25Nb2RlOiB0aGlzLmludGVyYWN0aW9uTW9kZV8KICAgICAgICAgICB9CiAgICAgICAg
IH0pOwogICAgICAgfSBlbHNlIHsKQEAgLTk5Nyw2ICsxMTIwLDE3IEBAIGNsYXNzIE1vY2tSdW50
aW1lIHsKIAogICAvLyBQcml2YXRlIGZ1bmN0aW9ucyAtIGhpdCB0ZXN0IGltcGxlbWVudGF0aW9u
OgogCisgIC8vIFJldHVybnMgYSBQcm9taXNlPGJvb2w+IHRoYXQgc2lnbmlmaWVzIHdoZXRoZXIg
aGl0IHRlc3Qgc291cmNlIGNyZWF0aW9uIHNob3VsZCBzdWNjZWVkLgorICAvLyBJZiB3ZSBoYXZl
IGEgaGl0IHRlc3Qgc291cmNlIGNyZWF0aW9uIGNhbGxiYWNrIGluc3RhbGxlZCwgaW52b2tlIGl0
IGFuZCByZXR1cm4gaXRzIHJlc3VsdC4KKyAgLy8gSWYgaXQncyBub3QgaW5zdGFsbGVkLCBmb3Ig
YmFjay1jb21wYXQganVzdCByZXR1cm4gYSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgdG8gdHJ1ZS4K
KyAgX3Nob3VsZEhpdFRlc3RTb3VyY2VDcmVhdGlvblN1Y2NlZWQoaGl0VGVzdFBhcmFtZXRlcnMs
IGNvbnRyb2xsZXIpIHsKKyAgICBpZih0aGlzLmhpdF90ZXN0X3NvdXJjZV9jcmVhdGlvbl9jYWxs
YmFja18pIHsKKyAgICAgIHJldHVybiB0aGlzLmhpdF90ZXN0X3NvdXJjZV9jcmVhdGlvbl9jYWxs
YmFja18oaGl0VGVzdFBhcmFtZXRlcnMsIGNvbnRyb2xsZXIpOworICAgIH0gZWxzZSB7CisgICAg
ICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRydWUpOworICAgIH0KKyAgfQorCiAgIC8vIE1vZGlm
aWVzIHBhc3NlZCBpbiBmcmFtZURhdGEgdG8gYWRkIGhpdCB0ZXN0IHJlc3VsdHMuCiAgIF9jYWxj
dWxhdGVIaXRUZXN0UmVzdWx0cyhmcmFtZURhdGEpIHsKICAgICBpZiAoIXRoaXMuc3VwcG9ydGVk
TW9kZXNfLmluY2x1ZGVzKGRldmljZS5tb2pvbS5YUlNlc3Npb25Nb2RlLmtJbW1lcnNpdmVBcikp
IHsKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVz
dHMvcmVzb3VyY2VzL2lkbGhhcm5lc3MuanMgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2Vi
LXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9pZGxoYXJuZXNzLmpzCmluZGV4IDI1YzE5M2I1NWU1
Yjc2ZmZmNmRjMTgwMjY4MzU3YTExYTI3YWJjMDguLjk5NGEwZDgyZWY0NDRiZjQ1NjZkYzI3YTgx
NDg3ZTcwZDllMjg0ZWEgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWIt
cGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2lkbGhhcm5lc3MuanMKKysrIGIvTGF5b3V0VGVzdHMv
aW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvaWRsaGFybmVzcy5qcwpA
QCAtMjUzNCw2ICsyNTM0LDEwIEBAIElkbEludGVyZmFjZS5wcm90b3R5cGUuZG9fbWVtYmVyX29w
ZXJhdGlvbl9hc3NlcnRzID0gZnVuY3Rpb24obWVtYmVySG9sZGVyT2JqZWN0CiAgICAgICAgIG1l
bWJlckhvbGRlck9iamVjdFttZW1iZXIubmFtZV0ubGVuZ3RoLAogICAgICAgICBtaW5PdmVybG9h
ZExlbmd0aChjdG9ycyksCiAgICAgICAgICJwcm9wZXJ0eSBoYXMgd3JvbmcgLmxlbmd0aCIpOwor
ICAgIGFzc2VydF9lcXVhbHMoCisgICAgICAgIG1lbWJlckhvbGRlck9iamVjdFttZW1iZXIubmFt
ZV0ubmFtZSwKKyAgICAgICAgbWVtYmVyLm5hbWUsCisgICAgICAgICJwcm9wZXJ0eSBoYXMgd3Jv
bmcgLm5hbWUiKTsKIAogICAgIC8vIE1ha2Ugc29tZSBzdWl0YWJsZSBhcmd1bWVudHMKICAgICB2
YXIgYXJncyA9IG1lbWJlci5hcmd1bWVudHMubWFwKGZ1bmN0aW9uKGFyZykgewpAQCAtMzQzMywx
NiArMzQzNyw2MCBAQCBJZGxOYW1lc3BhY2UucHJvdG90eXBlLnRlc3RfbWVtYmVyX2F0dHJpYnV0
ZSA9IGZ1bmN0aW9uIChtZW1iZXIpCiAgICAgfS5iaW5kKHRoaXMpKTsKIH07CiAKLUlkbE5hbWVz
cGFjZS5wcm90b3R5cGUudGVzdCA9IGZ1bmN0aW9uICgpCitJZGxOYW1lc3BhY2UucHJvdG90eXBl
LnRlc3Rfc2VsZiA9IGZ1bmN0aW9uICgpCiB7CiAgICAgLyoqCiAgICAgICogVE9ETyhsdWtlYmpl
cnJpbmcpOiBBc3NlcnQ6CiAgICAgICogLSAiTm90ZSB0aGF0IHVubGlrZSBpbnRlcmZhY2VzIG9y
IGRpY3Rpb25hcmllcywgbmFtZXNwYWNlcyBkbyBub3QgY3JlYXRlIHR5cGVzLiIKLSAgICAgKiAt
ICJPZiB0aGUgZXh0ZW5kZWQgYXR0cmlidXRlcyBkZWZpbmVkIGluIHRoaXMgc3BlY2lmaWNhdGlv
biwgb25seSB0aGUKLSAgICAgKiAgICAgW0V4cG9zZWRdIGFuZCBbU2VjdXJlQ29udGV4dF0gZXh0
ZW5kZWQgYXR0cmlidXRlcyBhcmUgYXBwbGljYWJsZSB0byBuYW1lc3BhY2VzLiIKLSAgICAgKiAt
ICJOYW1lc3BhY2VzIG11c3QgYmUgYW5ub3RhdGVkIHdpdGggdGhlIFtFeHBvc2VkXSBleHRlbmRl
ZCBhdHRyaWJ1dGUuIgogICAgICAqLwogCisgICAgc3Vic2V0VGVzdEJ5S2V5KHRoaXMubmFtZSwg
dGVzdCwgKCkgPT4geworICAgICAgICBhc3NlcnRfdHJ1ZSh0aGlzLmV4dEF0dHJzLmV2ZXJ5KG8g
PT4gby5uYW1lID09PSAiRXhwb3NlZCIgfHwgby5uYW1lID09PSAiU2VjdXJlQ29udGV4dCIpLAor
ICAgICAgICAgICAgIk9ubHkgdGhlIFtFeHBvc2VkXSBhbmQgW1NlY3VyZUNvbnRleHRdIGV4dGVu
ZGVkIGF0dHJpYnV0ZXMgYXJlIGFwcGxpY2FibGUgdG8gbmFtZXNwYWNlcyIpOworICAgICAgICBh
c3NlcnRfdHJ1ZSh0aGlzLmhhc19leHRlbmRlZF9hdHRyaWJ1dGUoIkV4cG9zZWQiKSwKKyAgICAg
ICAgICAgICJOYW1lc3BhY2VzIG11c3QgYmUgYW5ub3RhdGVkIHdpdGggdGhlIFtFeHBvc2VkXSBl
eHRlbmRlZCBhdHRyaWJ1dGUiKTsKKyAgICB9LCBgJHt0aGlzLm5hbWV9IG5hbWVzcGFjZTogZXh0
ZW5kZWQgYXR0cmlidXRlc2ApOworCisgICAgY29uc3QgbmFtZXNwYWNlT2JqZWN0ID0gc2VsZlt0
aGlzLm5hbWVdOworCisgICAgc3Vic2V0VGVzdEJ5S2V5KHRoaXMubmFtZSwgdGVzdCwgKCkgPT4g
eworICAgICAgICBjb25zdCBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihz
ZWxmLCB0aGlzLm5hbWUpOworICAgICAgICBhc3NlcnRfZXF1YWxzKGRlc2MudmFsdWUsIG5hbWVz
cGFjZU9iamVjdCwgYHdyb25nIHZhbHVlIGZvciAke3RoaXMubmFtZX0gbmFtZXNwYWNlIG9iamVj
dGApOworICAgICAgICBhc3NlcnRfdHJ1ZShkZXNjLndyaXRhYmxlLCAibmFtZXNwYWNlIG9iamVj
dCBzaG91bGQgYmUgd3JpdGFibGUiKTsKKyAgICAgICAgYXNzZXJ0X2ZhbHNlKGRlc2MuZW51bWVy
YWJsZSwgIm5hbWVzcGFjZSBvYmplY3Qgc2hvdWxkIG5vdCBiZSBlbnVtZXJhYmxlIik7CisgICAg
ICAgIGFzc2VydF90cnVlKGRlc2MuY29uZmlndXJhYmxlLCAibmFtZXNwYWNlIG9iamVjdCBzaG91
bGQgYmUgY29uZmlndXJhYmxlIik7CisgICAgICAgIGFzc2VydF9mYWxzZSgiZ2V0IiBpbiBkZXNj
LCAibmFtZXNwYWNlIG9iamVjdCBzaG91bGQgbm90IGhhdmUgYSBnZXR0ZXIiKTsKKyAgICAgICAg
YXNzZXJ0X2ZhbHNlKCJzZXQiIGluIGRlc2MsICJuYW1lc3BhY2Ugb2JqZWN0IHNob3VsZCBub3Qg
aGF2ZSBhIHNldHRlciIpOworICAgIH0sIGAke3RoaXMubmFtZX0gbmFtZXNwYWNlOiBwcm9wZXJ0
eSBkZXNjcmlwdG9yYCk7CisKKyAgICBzdWJzZXRUZXN0QnlLZXkodGhpcy5uYW1lLCB0ZXN0LCAo
KSA9PiB7CisgICAgICAgIGFzc2VydF90cnVlKE9iamVjdC5pc0V4dGVuc2libGUobmFtZXNwYWNl
T2JqZWN0KSk7CisgICAgfSwgYCR7dGhpcy5uYW1lfSBuYW1lc3BhY2U6IFtbRXh0ZW5zaWJsZV1d
IGlzIHRydWVgKTsKKworICAgIHN1YnNldFRlc3RCeUtleSh0aGlzLm5hbWUsIHRlc3QsICgpID0+
IHsKKyAgICAgICAgYXNzZXJ0X3RydWUobmFtZXNwYWNlT2JqZWN0IGluc3RhbmNlb2YgT2JqZWN0
KTsKKworICAgICAgICBpZiAodGhpcy5uYW1lID09PSAiY29uc29sZSIpIHsKKyAgICAgICAgICAg
IC8vIGh0dHBzOi8vY29uc29sZS5zcGVjLndoYXR3Zy5vcmcvI2NvbnNvbGUtbmFtZXNwYWNlCisg
ICAgICAgICAgICBjb25zdCBuYW1lc3BhY2VQcm90b3R5cGUgPSBPYmplY3QuZ2V0UHJvdG90eXBl
T2YobmFtZXNwYWNlT2JqZWN0KTsKKyAgICAgICAgICAgIGFzc2VydF9lcXVhbHMoUmVmbGVjdC5v
d25LZXlzKG5hbWVzcGFjZVByb3RvdHlwZSkubGVuZ3RoLCAwKTsKKyAgICAgICAgICAgIGFzc2Vy
dF9lcXVhbHMoT2JqZWN0LmdldFByb3RvdHlwZU9mKG5hbWVzcGFjZVByb3RvdHlwZSksIE9iamVj
dC5wcm90b3R5cGUpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgYXNzZXJ0X2VxdWFs
cyhPYmplY3QuZ2V0UHJvdG90eXBlT2YobmFtZXNwYWNlT2JqZWN0KSwgT2JqZWN0LnByb3RvdHlw
ZSk7CisgICAgICAgIH0KKyAgICB9LCBgJHt0aGlzLm5hbWV9IG5hbWVzcGFjZTogW1tQcm90b3R5
cGVdXSBpcyBPYmplY3QucHJvdG90eXBlYCk7CisKKyAgICBzdWJzZXRUZXN0QnlLZXkodGhpcy5u
YW1lLCB0ZXN0LCAoKSA9PiB7CisgICAgICAgIGFzc2VydF9lcXVhbHModHlwZW9mIG5hbWVzcGFj
ZU9iamVjdCwgIm9iamVjdCIpOworICAgIH0sIGAke3RoaXMubmFtZX0gbmFtZXNwYWNlOiB0eXBl
b2YgaXMgIm9iamVjdCJgKTsKK307CisKK0lkbE5hbWVzcGFjZS5wcm90b3R5cGUudGVzdCA9IGZ1
bmN0aW9uICgpCit7CisgICAgaWYgKCF0aGlzLnVudGVzdGVkKSB7CisgICAgICAgIHRoaXMudGVz
dF9zZWxmKCk7CisgICAgfQorCiAgICAgZm9yIChjb25zdCB2IG9mIE9iamVjdC52YWx1ZXModGhp
cy5tZW1iZXJzKSkgewogICAgICAgICBzd2l0Y2ggKHYudHlwZSkgewogCmRpZmYgLS1naXQgYS9M
YXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0
LW9ubHktYXBpLmpzIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0
cy9yZXNvdXJjZXMvdGVzdC1vbmx5LWFwaS5qcwppbmRleCA1Mzg5MWQyMWJkNGVhNTdmNzg4ZDM1
MjVhN2JiOTE0NWUxNjhmMmM3Li5lZjY2ZTBlNzMzZjljNjgwMDQxMjlkMjRiM2M5YWQxMmI5YWEw
NzA4IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRl
c3RzL3Jlc291cmNlcy90ZXN0LW9ubHktYXBpLmpzCisrKyBiL0xheW91dFRlc3RzL2ltcG9ydGVk
L3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3Qtb25seS1hcGkuanMKQEAgLTIz
LDcgKzIzLDcgQEAgZnVuY3Rpb24gbG9hZFNjcmlwdChwYXRoKSB7CiAgICAgc2NyaXB0LmFzeW5j
ID0gZmFsc2U7CiAgICAgY29uc3QgcCA9IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+
IHsKICAgICAgIHNjcmlwdC5vbmxvYWQgPSAoKSA9PiB7IHJlc29sdmUoKTsgfTsKLSAgICAgIHNj
cmlwdC5vbmVycm9yID0gZSA9PiB7IHJlamVjdChlKTsgfTsKKyAgICAgIHNjcmlwdC5vbmVycm9y
ID0gZSA9PiB7IHJlamVjdChgRXJyb3IgbG9hZGluZyAke3BhdGh9YCk7IH07CiAgICAgfSkKICAg
ICBkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKHNjcmlwdCk7CiAgICAgcmV0dXJuIHA7CkBAIC0z
MSw3ICszMSw3IEBAIGZ1bmN0aW9uIGxvYWRTY3JpcHQocGF0aCkgewogfQogCiAvKioKLSAqIEEg
aGVscGVyIGZvciBDaHJvbWl1bS1iYXNlZCBicm93c2VycyB0byBsb2FkIE1vam8gSlMgYmluZGlu
Z2RzCisgKiBBIGhlbHBlciBmb3IgQ2hyb21pdW0tYmFzZWQgYnJvd3NlcnMgdG8gbG9hZCBNb2pv
IEpTIGJpbmRpbmdzCiAgKgogICogVGhpcyBpcyBhbiBhc3luYyBmdW5jdGlvbiB0aGF0IHdvcmtz
IGluIGJvdGggd29ya2VycyBhbmQgd2luZG93cy4gSXQgZmlyc3QKICAqIGxvYWRzIG1vam9fYmlu
ZGluZ3MuanMsIGRpc2FibGVzIGF1dG9tYXRpYyBkZXBlbmRlbmN5IGxvYWRpbmcsIGFuZCBsb2Fk
cyBhbGwKQEAgLTM5LDE1ICszOSwyMiBAQCBmdW5jdGlvbiBsb2FkU2NyaXB0KHBhdGgpIHsKICAq
IHN1Y2Nlc3NmdWxseSwgb3IgcmVqZWN0cyBpZiBhbnkgZXhjZXB0aW9uIGlzIHJhaXNlZC4gSWYg
dGVzdGhhcm5lc3MuanMgaXMKICAqIHVzZWQsIGFuIHVuY2F1Z2h0IGV4Y2VwdGlvbiB3aWxsIHRl
cm1pbmF0ZSB0aGUgdGVzdCB3aXRoIGEgaGFybmVzcyBlcnJvcgogICogKHVubGVzcyBgYWxsb3df
dW5jYXVnaHRfZXhjZXB0aW9uYCBpcyB0cnVlKSwgd2hpY2ggaXMgdXN1YWxseSB0aGUgZGVzaXJl
ZAotICogYmVoYXZpb3VyLiBPbmx5IGNhbGwgdGhpcyBmdW5jdGlvbiBpZiBpc0Nocm9taXVtQmFz
ZWQgPT09IHRydWUuCisgKiBiZWhhdmlvdXIuCisgKgorICogVGhpcyBmdW5jdGlvbiBhbHNvIHdv
cmtzIHdpdGggQmxpbmsgd2ViIHRlc3RzIGxvYWRlZCBmcm9tIGZpbGU6Ly8sIGluIHdoaWNoCisg
KiBjYXNlIGZpbGU6Ly8gd2lsbCBiZSBwcmVwZW5kZWQgdG8gYWxsICcvZ2VuLy4uLicgVVJMcy4K
KyAqCisgKiBPbmx5IGNhbGwgdGhpcyBmdW5jdGlvbiBpZiBpc0Nocm9taXVtQmFzZWQgPT09IHRy
dWUuCiAgKgogICogQHBhcmFtIHtBcnJheS48c3RyaW5nPn0gcmVzb3VyY2VzIC0gQSBsaXN0IG9m
IHNjcmlwdHMgdG8gbG9hZDogTW9qbyBKUwotICogICBiaW5kaW5ncyBzaG91bGQgYmUgb2YgdGhl
IGZvcm0gJy9nZW4vLi4vKi5tb2pvbS5qcycsIHRoZSBvcmRlcmluZyBvZiB3aGljaAotICogICBk
b2VzIG5vdCBtYXR0ZXIuIERvIG5vdCBpbmNsdWRlIG1vam9fYmluZGluZ3MuanMgaW4gdGhpcyBs
aXN0LiBZb3UgbWF5Ci0gKiAgIGluY2x1ZGUgb3RoZXIgbm9uLW1vam9tLmpzIHNjcmlwdHMgZm9y
IGNvbnZlbmllbmNlLgorICogICBiaW5kaW5ncyBzaG91bGQgYmUgb2YgdGhlIGZvcm0gJy9nZW4v
Li4vKi5tb2pvbS5qcycgb3IKKyAqICAgJy9nZW4vLi4vKi5tb2pvbS1saXRlLmpzJyAocmVxdWly
ZXMgYGxpdGVgIHRvIGJlIHRydWUpOyB0aGUgb3JkZXIgZG9lcyBub3QKKyAqICAgbWF0dGVyLiBE
byBub3QgaW5jbHVkZSAnbW9qb19iaW5kaW5ncy5qcycgb3IgJ21vam9fYmluZGluZ3NfbGl0ZS5q
cycuCisgKiBAcGFyYW0ge2Jvb2xlYW49fSBsaXRlIC0gV2hldGhlciB0aGUgbGl0ZSBiaW5kaW5n
cyAoKi5tb2pvbS1saXRlLmpzKSBhcmUgdXNlZAorICogICAoZGVmYXVsdCBpcyBmYWxzZSkuCiAg
KiBAcmV0dXJucyB7UHJvbWlzZX0KICAqLwotYXN5bmMgZnVuY3Rpb24gbG9hZE1vam9SZXNvdXJj
ZXMocmVzb3VyY2VzKSB7Cithc3luYyBmdW5jdGlvbiBsb2FkTW9qb1Jlc291cmNlcyhyZXNvdXJj
ZXMsIGxpdGUgPSBmYWxzZSkgewogICBpZiAoIWlzQ2hyb21pdW1CYXNlZCkgewogICAgIHRocm93
IG5ldyBFcnJvcignTW9qb0pTIG5vdCBlbmFibGVkOyBzdGFydCBDaHJvbWUgd2l0aCAtLWVuYWJs
ZS1ibGluay1mZWF0dXJlcz1Nb2pvSlMsTW9qb0pTVGVzdCcpOwogICB9CkBAIC01NSwxNCArNjIs
MzkgQEAgYXN5bmMgZnVuY3Rpb24gbG9hZE1vam9SZXNvdXJjZXMocmVzb3VyY2VzKSB7CiAgICAg
cmV0dXJuOwogICB9CiAKLSAgLy8gV2Ugd2FudCB0byBsb2FkIG1vam9fYmluZGluZ3MuanMgc2Vw
YXJhdGVseSB0byBzZXQgbW9qby5jb25maWcuCi0gIGlmIChyZXNvdXJjZXMuc29tZShwID0+IHAu
ZW5kc1dpdGgoJy9tb2pvX2JpbmRpbmdzLmpzJykpKSB7Ci0gICAgdGhyb3cgbmV3IEVycm9yKCdE
byBub3QgbG9hZCBtb2pvX2JpbmRpbmdzLmpzIGV4cGxpY2l0bHkuJyk7CisgIGxldCBnZW5QcmVm
aXggPSAnJzsKKyAgaWYgKHNlbGYubG9jYXRpb24ucGF0aG5hbWUuaW5jbHVkZXMoJy93ZWJfdGVz
dHMvJykpIHsKKyAgICAvLyBCbGluayBpbnRlcm5hbCB3ZWIgdGVzdHMKKyAgICBnZW5QcmVmaXgg
PSAnZmlsZTovLyc7CisgIH0KKworICBmb3IgKGNvbnN0IHBhdGggb2YgcmVzb3VyY2VzKSB7Cisg
ICAgLy8gV2Ugd2FudCB0byBsb2FkIG1vam9fYmluZGluZ3MuanMgc2VwYXJhdGVseSB0byBzZXQg
bW9qby5jb25maWcuCisgICAgaWYgKHBhdGguZW5kc1dpdGgoJy9tb2pvX2JpbmRpbmdzLmpzJykp
IHsKKyAgICAgIHRocm93IG5ldyBFcnJvcignRG8gbm90IGxvYWQgbW9qb19iaW5kaW5ncy5qcyBl
eHBsaWNpdGx5LicpOworICAgIH0KKyAgICBpZiAocGF0aC5lbmRzV2l0aCgnL21vam9fYmluZGlu
Z3NfbGl0ZS5qcycpKSB7CisgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0RvIG5vdCBsb2FkIG1vam9f
YmluZGluZ3NfbGl0ZS5qcyBleHBsaWNpdGx5LicpOworICAgIH0KKyAgICBpZiAobGl0ZSkgewor
ICAgICAgaWYgKCEgL15cL2dlblwvLipcLm1vam9tLWxpdGVcLmpzJC8udGVzdChwYXRoKSkgewor
ICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVucmVjb2duaXplZCByZXNvdXJjZSBwYXRoOiAke3Bh
dGh9YCk7CisgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgIGlmICghIC9eXC9nZW5cLy4qXC5t
b2pvbVwuanMkLy50ZXN0KHBhdGgpKSB7CisgICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5yZWNv
Z25pemVkIHJlc291cmNlIHBhdGg6ICR7cGF0aH1gKTsKKyAgICAgIH0KKyAgICB9CisgIH0KKwor
ICBpZiAobGl0ZSkgeworICAgIGF3YWl0IGxvYWRTY3JpcHQoZ2VuUHJlZml4ICsgJy9nZW4vbGF5
b3V0X3Rlc3RfZGF0YS9tb2pvL3B1YmxpYy9qcy9tb2pvX2JpbmRpbmdzX2xpdGUuanMnKTsKKyAg
fSBlbHNlIHsKKyAgICBhd2FpdCBsb2FkU2NyaXB0KGdlblByZWZpeCArICcvZ2VuL2xheW91dF90
ZXN0X2RhdGEvbW9qby9wdWJsaWMvanMvbW9qb19iaW5kaW5ncy5qcycpOworICAgIG1vam8uY29u
ZmlnLmF1dG9Mb2FkTW9qb21EZXBzID0gZmFsc2U7CiAgIH0KLSAgYXdhaXQgbG9hZFNjcmlwdCgn
L2dlbi9sYXlvdXRfdGVzdF9kYXRhL21vam8vcHVibGljL2pzL21vam9fYmluZGluZ3MuanMnKTsK
LSAgbW9qby5jb25maWcuYXV0b0xvYWRNb2pvbURlcHMgPSBmYWxzZTsKIAogICBmb3IgKGNvbnN0
IHBhdGggb2YgcmVzb3VyY2VzKSB7Ci0gICAgYXdhaXQgbG9hZFNjcmlwdChwYXRoKTsKKyAgICBh
d2FpdCBsb2FkU2NyaXB0KGdlblByZWZpeCArIHBhdGgpOwogICB9CiB9CmRpZmYgLS1naXQgYS9M
YXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0
LW9ubHktYXBpLm0uanMgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRl
c3RzL3Jlc291cmNlcy90ZXN0LW9ubHktYXBpLm0uanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOTg0ZjYzNWFiYWMw
MDI3MjMwNGM3OGYyZjViYjk5YjM5N2IyNzUyMwotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRl
c3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3Qtb25seS1h
cGkubS5qcwpAQCAtMCwwICsxLDUgQEAKKy8qIFdoZXRoZXIgdGhlIGJyb3dzZXIgaXMgQ2hyb21p
dW0tYmFzZWQgd2l0aCBNb2pvSlMgZW5hYmxlZCAqLworZXhwb3J0IGNvbnN0IGlzQ2hyb21pdW1C
YXNlZCA9ICdNb2pvSW50ZXJmYWNlSW50ZXJjZXB0b3InIGluIHNlbGY7CisKKy8qIFdoZXRoZXIg
dGhlIGJyb3dzZXIgaXMgV2ViS2l0LWJhc2VkIHdpdGggaW50ZXJuYWwgdGVzdC1vbmx5IEFQSSBl
bmFibGVkICovCitleHBvcnQgY29uc3QgaXNXZWJLaXRCYXNlZCA9ICFpc0Nocm9taXVtQmFzZWQg
JiYgJ2ludGVybmFscycgaW4gc2VsZjsKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2ltcG9ydGVk
L3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3Qtb25seS1hcGkubS5qcy5oZWFk
ZXJzIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJj
ZXMvdGVzdC1vbmx5LWFwaS5tLmpzLmhlYWRlcnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNWU4ZjY0MGM2NjU5ZDE3
NmVhY2E0YzcxY2MxNzk4YjcyODU1NDBiNwotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3Rz
L2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3Qtb25seS1hcGku
bS5qcy5oZWFkZXJzCkBAIC0wLDAgKzEsMiBAQAorQ29udGVudC1UeXBlOiB0ZXh0L2phdmFzY3Jp
cHQ7IGNoYXJzZXQ9dXRmLTgKK0NhY2hlLUNvbnRyb2w6IG1heC1hZ2U9MzYwMApkaWZmIC0tZ2l0
IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMv
dGVzdC9jb25mdGVzdC5weSBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0t
dGVzdHMvcmVzb3VyY2VzL3Rlc3QvY29uZnRlc3QucHkKaW5kZXggYTlmNDIwM2YyNzljYmFkYjcw
MjQ1NmIxZDcxZDZhYTYwZWQ1ZDBlZi4uMWJhZjY2MjJiMDU5OWM0NGZiODVkMjY3Mjg4MDMxYTA1
ZTQyNDNkYyAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9y
bS10ZXN0cy9yZXNvdXJjZXMvdGVzdC9jb25mdGVzdC5weQorKysgYi9MYXlvdXRUZXN0cy9pbXBv
cnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L2NvbmZ0ZXN0LnB5CkBA
IC0yNSw2ICsyNSw3IEBAIGltcG9ydCB3ZWJkcml2ZXIKIAogZGVmIHB5dGVzdF9hZGRvcHRpb24o
cGFyc2VyKToKICAgICBwYXJzZXIuYWRkb3B0aW9uKCItLWJpbmFyeSIsIGFjdGlvbj0ic3RvcmUi
LCBkZWZhdWx0PU5vbmUsIGhlbHA9InBhdGggdG8gYnJvd3NlciBiaW5hcnkiKQorICAgIHBhcnNl
ci5hZGRvcHRpb24oIi0taGVhZGxlc3MiLCBhY3Rpb249InN0b3JlX3RydWUiLCBkZWZhdWx0PUZh
bHNlLCBoZWxwPSJydW4gYnJvd3NlciBpbiBoZWFkbGVzcyBtb2RlIikKIAogCiBkZWYgcHl0ZXN0
X2NvbGxlY3RfZmlsZShwYXRoLCBwYXJlbnQpOgpAQCAtNDUsOSArNDYsMTEgQEAgZGVmIHB5dGVz
dF9jb25maWd1cmUoY29uZmlnKToKICAgICBjb25maWcucHJvYyA9IHN1YnByb2Nlc3MuUG9wZW4o
WyJnZWNrb2RyaXZlciJdKQogICAgIGNvbmZpZy5hZGRfY2xlYW51cChjb25maWcucHJvYy5raWxs
KQogCi0gICAgY2FwYWJpbGl0aWVzID0geyJhbHdheXNNYXRjaCI6IHsiYWNjZXB0SW5zZWN1cmVD
ZXJ0cyI6IFRydWV9fQorICAgIGNhcGFiaWxpdGllcyA9IHsiYWx3YXlzTWF0Y2giOiB7ImFjY2Vw
dEluc2VjdXJlQ2VydHMiOiBUcnVlLCAibW96OmZpcmVmb3hPcHRpb25zIjoge319fQogICAgIGlm
IGNvbmZpZy5nZXRvcHRpb24oIi0tYmluYXJ5Iik6Ci0gICAgICAgIGNhcGFiaWxpdGllc1siYWx3
YXlzTWF0Y2giXVsibW96OmZpcmVmb3hPcHRpb25zIl0gPSB7ImJpbmFyeSI6IGNvbmZpZy5nZXRv
cHRpb24oIi0tYmluYXJ5Iil9CisgICAgICAgIGNhcGFiaWxpdGllc1siYWx3YXlzTWF0Y2giXVsi
bW96OmZpcmVmb3hPcHRpb25zIl1bImJpbmFyeSJdID0gY29uZmlnLmdldG9wdGlvbigiLS1iaW5h
cnkiKQorICAgIGlmIGNvbmZpZy5nZXRvcHRpb24oIi0taGVhZGxlc3MiKToKKyAgICAgICAgY2Fw
YWJpbGl0aWVzWyJhbHdheXNNYXRjaCJdWyJtb3o6ZmlyZWZveE9wdGlvbnMiXVsiYXJncyJdID0g
WyItLWhlYWRsZXNzIl0KIAogICAgIGNvbmZpZy5kcml2ZXIgPSB3ZWJkcml2ZXIuU2Vzc2lvbigi
bG9jYWxob3N0IiwgNDQ0NCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y2FwYWJpbGl0aWVzPWNhcGFiaWxpdGllcykKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2ltcG9y
dGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rpb25h
bC9pZGxoYXJuZXNzL0lkbE5hbWVzcGFjZS90ZXN0X2F0dHJpYnV0ZS5odG1sIGIvTGF5b3V0VGVz
dHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9m
dW5jdGlvbmFsL2lkbGhhcm5lc3MvSWRsTmFtZXNwYWNlL3Rlc3RfYXR0cmlidXRlLmh0bWwKaW5k
ZXggOGMxZjUxNzIxNjU0NGU3ODIyOTM5MmNjNmYzM2ViMDZjNzc5NjBiMy4uY2E1ZWRmNDcyM2Q1
YjVjMjA1NWMyZjAyNGQ5NTFlOTgxMjRjOGNkOSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvaW1w
b3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9mdW5jdGlv
bmFsL2lkbGhhcm5lc3MvSWRsTmFtZXNwYWNlL3Rlc3RfYXR0cmlidXRlLmh0bWwKKysrIGIvTGF5
b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90
ZXN0cy9mdW5jdGlvbmFsL2lkbGhhcm5lc3MvSWRsTmFtZXNwYWNlL3Rlc3RfYXR0cmlidXRlLmh0
bWwKQEAgLTE2LDEzICsxNiwxOSBAQAogPHNjcmlwdD4KICJ1c2Ugc3RyaWN0IjsKIAotc2VsZi5m
b28gPSB7Ci0gIHRydXRoOiB0cnVlCi19OworT2JqZWN0LmRlZmluZVByb3BlcnR5KHNlbGYsICJm
b28iLCB7CisgIHZhbHVlOiB7CisgICAgdHJ1dGg6IHRydWUsCisgIH0sCisgIHdyaXRhYmxlOiB0
cnVlLAorICBlbnVtZXJhYmxlOiBmYWxzZSwKKyAgY29uZmlndXJhYmxlOiB0cnVlLAorfSk7CiAK
IHZhciBpZGxBcnJheSA9IG5ldyBJZGxBcnJheSgpOwotaWRsQXJyYXkuYWRkX2lkbHMoCi1gbmFt
ZXNwYWNlIGZvbyB7CitpZGxBcnJheS5hZGRfaWRscyhgCitbRXhwb3NlZD1XaW5kb3ddCituYW1l
c3BhY2UgZm9vIHsKICAgcmVhZG9ubHkgYXR0cmlidXRlIGJvb2wgdHJ1dGg7CiAgIHJlYWRvbmx5
IGF0dHJpYnV0ZSBib29sIGxpZXM7CiB9O2ApOwpAQCAtMzUsNiArNDEsMzYgQEAgaWRsQXJyYXku
dGVzdCgpOwogICAgICJtZXNzYWdlIjogbnVsbAogICB9LAogICAic3VtbWFyaXplZF90ZXN0cyI6
IFsKKyAgICB7CisgICAgICAibmFtZSI6ICJmb28gbmFtZXNwYWNlOiBleHRlbmRlZCBhdHRyaWJ1
dGVzIiwKKyAgICAgICJzdGF0dXNfc3RyaW5nIjogIlBBU1MiLAorICAgICAgInByb3BlcnRpZXMi
OiB7fSwKKyAgICAgICJtZXNzYWdlIjogbnVsbAorICAgIH0sCisgICAgeworICAgICAgIm5hbWUi
OiAiZm9vIG5hbWVzcGFjZTogcHJvcGVydHkgZGVzY3JpcHRvciIsCisgICAgICAic3RhdHVzX3N0
cmluZyI6ICJQQVNTIiwKKyAgICAgICJwcm9wZXJ0aWVzIjoge30sCisgICAgICAibWVzc2FnZSI6
IG51bGwKKyAgICB9LAorICAgIHsKKyAgICAgICJuYW1lIjogImZvbyBuYW1lc3BhY2U6IFtbRXh0
ZW5zaWJsZV1dIGlzIHRydWUiLAorICAgICAgInN0YXR1c19zdHJpbmciOiAiUEFTUyIsCisgICAg
ICAicHJvcGVydGllcyI6IHt9LAorICAgICAgIm1lc3NhZ2UiOiBudWxsCisgICAgfSwKKyAgICB7
CisgICAgICAibmFtZSI6ICJmb28gbmFtZXNwYWNlOiBbW1Byb3RvdHlwZV1dIGlzIE9iamVjdC5w
cm90b3R5cGUiLAorICAgICAgInN0YXR1c19zdHJpbmciOiAiUEFTUyIsCisgICAgICAicHJvcGVy
dGllcyI6IHt9LAorICAgICAgIm1lc3NhZ2UiOiBudWxsCisgICAgfSwKKyAgICB7CisgICAgICAi
bmFtZSI6ICJmb28gbmFtZXNwYWNlOiB0eXBlb2YgaXMgXCJvYmplY3RcIiIsCisgICAgICAic3Rh
dHVzX3N0cmluZyI6ICJQQVNTIiwKKyAgICAgICJwcm9wZXJ0aWVzIjoge30sCisgICAgICAibWVz
c2FnZSI6IG51bGwKKyAgICB9LAogICAgIHsKICAgICAgICJuYW1lIjogImZvbyBuYW1lc3BhY2U6
IGF0dHJpYnV0ZSB0cnV0aCIsCiAgICAgICAic3RhdHVzX3N0cmluZyI6ICJQQVNTIiwKZGlmZiAt
LWdpdCBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3Vy
Y2VzL3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC9pZGxoYXJuZXNzL0lkbE5hbWVzcGFjZS90ZXN0X29w
ZXJhdGlvbi5odG1sIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0
cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9mdW5jdGlvbmFsL2lkbGhhcm5lc3MvSWRsTmFtZXNwYWNl
L3Rlc3Rfb3BlcmF0aW9uLmh0bWwKaW5kZXggMWI5OTU1MjlkMjM5Y2EwOWUyODk2ZDY1MzIyNjI0
M2I1ODFhY2IyZS4uNjBkN2Q0N2M5ZWVhNjRhODFkNTM5YWZhNmZkM2FjZDcyNTgxYzAwYiAxMDA2
NDQKLS0tIGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNv
dXJjZXMvdGVzdC90ZXN0cy9mdW5jdGlvbmFsL2lkbGhhcm5lc3MvSWRsTmFtZXNwYWNlL3Rlc3Rf
b3BlcmF0aW9uLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9y
bS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9mdW5jdGlvbmFsL2lkbGhhcm5lc3MvSWRsTmFt
ZXNwYWNlL3Rlc3Rfb3BlcmF0aW9uLmh0bWwKQEAgLTE2LDM4ICsxNiw1NyBAQAogPHNjcmlwdD4K
ICJ1c2Ugc3RyaWN0IjsKIAotc2VsZi5mb28gPSB7Ci0gIFRydXRoOiBmdW5jdGlvbigpIHt9LAot
fTsKLU9iamVjdC5kZWZpbmVQcm9wZXJ0eShzZWxmLmZvbywgIlRydXRoIiwgeyB3cml0YWJsZTog
dHJ1ZSB9KTsKK09iamVjdC5kZWZpbmVQcm9wZXJ0eShzZWxmLCAiZm9vIiwgeworICB2YWx1ZTog
T2JqZWN0LmRlZmluZVByb3BlcnR5KHt9LCAiVHJ1dGgiLCB7CisgICAgdmFsdWU6IGZ1bmN0aW9u
KCkge30sCisgICAgd3JpdGFibGU6IHRydWUsCisgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICBj
b25maWd1cmFibGU6IHRydWUsCisgIH0pLAorICB3cml0YWJsZTogdHJ1ZSwKKyAgZW51bWVyYWJs
ZTogZmFsc2UsCisgIGNvbmZpZ3VyYWJsZTogdHJ1ZSwKK30pOwogCi1zZWxmLmJhciA9IHsKLSAg
VHJ1dGg6IGZ1bmN0aW9uKCkge30sCi19Ci1PYmplY3QuZGVmaW5lUHJvcGVydHkoc2VsZi5iYXIs
ICJUcnV0aCIsIHsKLSAgd3JpdGFibGU6IGZhbHNlLAotICBjb25maWd1cmFibGU6IGZhbHNlLAor
T2JqZWN0LmRlZmluZVByb3BlcnR5KHNlbGYsICJiYXIiLCB7CisgIHZhbHVlOiBPYmplY3QuZGVm
aW5lUHJvcGVydHkoe30sICJUcnV0aCIsIHsKKyAgICB2YWx1ZTogZnVuY3Rpb24oKSB7fSwKKyAg
ICB3cml0YWJsZTogZmFsc2UsCisgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICBjb25maWd1cmFi
bGU6IGZhbHNlLAorICB9KSwKKyAgd3JpdGFibGU6IHRydWUsCisgIGVudW1lcmFibGU6IGZhbHNl
LAorICBjb25maWd1cmFibGU6IHRydWUsCiB9KTsKIAotc2VsZi5iYXogPSB7Ci0gIExvbmdTdG9y
eTogZnVuY3Rpb24oaGVybywgLi4uZGV0YWlscykgewotICAgIHJldHVybiBgJHtoZXJvfSB3ZW50
IGFuZCAke2RldGFpbHMuam9pbignLCB0aGVuJyl9YAotICB9LAotICBTaG9ydFN0b3J5OiBmdW5j
dGlvbiguLi5kZXRhaWxzKSB7Ci0gICAgcmV0dXJuIGAke2RldGFpbHMuam9pbignLiAnKX1gOwor
T2JqZWN0LmRlZmluZVByb3BlcnR5KHNlbGYsICJiYXoiLCB7CisgIHZhbHVlOiB7CisgICAgTG9u
Z1N0b3J5OiBmdW5jdGlvbihoZXJvLCAuLi5kZXRhaWxzKSB7CisgICAgICByZXR1cm4gYCR7aGVy
b30gd2VudCBhbmQgJHtkZXRhaWxzLmpvaW4oJywgdGhlbicpfWAKKyAgICB9LAorICAgIFNob3J0
U3Rvcnk6IGZ1bmN0aW9uKC4uLmRldGFpbHMpIHsKKyAgICAgIHJldHVybiBgJHtkZXRhaWxzLmpv
aW4oJy4gJyl9YDsKKyAgICB9LAogICB9LAotfTsKKyAgd3JpdGFibGU6IHRydWUsCisgIGVudW1l
cmFibGU6IGZhbHNlLAorICBjb25maWd1cmFibGU6IHRydWUsCit9KTsKIAogdmFyIGlkbEFycmF5
ID0gbmV3IElkbEFycmF5KCk7Ci1pZGxBcnJheS5hZGRfaWRscygKLWBuYW1lc3BhY2UgZm9vIHsK
K2lkbEFycmF5LmFkZF9pZGxzKGAKK1tFeHBvc2VkPVdpbmRvd10KK25hbWVzcGFjZSBmb28gewog
ICB2b2lkIFRydXRoKCk7CiAgIHZvaWQgTGllcygpOwogfTsKK1tFeHBvc2VkPVdpbmRvd10KIG5h
bWVzcGFjZSBiYXIgewogICBbTGVnYWN5VW5mb3JnZWFibGVdCiAgIHZvaWQgVHJ1dGgoKTsKIH07
CitbRXhwb3NlZD1XaW5kb3ddCiBuYW1lc3BhY2UgYmF6IHsKICAgRE9NU3RyaW5nIExvbmdTdG9y
eShhbnkgaGVybywgRE9NU3RyaW5nLi4uIGRldGFpbHMpOwogICBET01TdHJpbmcgU2hvcnRTdG9y
eShET01TdHJpbmcuLi4gZGV0YWlscyk7CkBAIC02MiwxOSArODEsMzEgQEAgaWRsQXJyYXkudGVz
dCgpOwogICB9LAogICAic3VtbWFyaXplZF90ZXN0cyI6IFsKICAgICB7Ci0gICAgICAibmFtZSI6
ICJiYXIgbmFtZXNwYWNlOiBvcGVyYXRpb24gVHJ1dGgoKSIsCisgICAgICAibmFtZSI6ICJmb28g
bmFtZXNwYWNlOiBleHRlbmRlZCBhdHRyaWJ1dGVzIiwKICAgICAgICJzdGF0dXNfc3RyaW5nIjog
IlBBU1MiLAogICAgICAgInByb3BlcnRpZXMiOiB7fSwKICAgICAgICJtZXNzYWdlIjogbnVsbAog
ICAgIH0sCiAgICAgewotICAgICAgIm5hbWUiOiAiYmF6IG5hbWVzcGFjZTogb3BlcmF0aW9uIExv
bmdTdG9yeShhbnksIERPTVN0cmluZy4uLikiLAorICAgICAgIm5hbWUiOiAiZm9vIG5hbWVzcGFj
ZTogcHJvcGVydHkgZGVzY3JpcHRvciIsCiAgICAgICAic3RhdHVzX3N0cmluZyI6ICJQQVNTIiwK
ICAgICAgICJwcm9wZXJ0aWVzIjoge30sCiAgICAgICAibWVzc2FnZSI6IG51bGwKICAgICB9LAog
ICAgIHsKLSAgICAgICJuYW1lIjogImJheiBuYW1lc3BhY2U6IG9wZXJhdGlvbiBTaG9ydFN0b3J5
KERPTVN0cmluZy4uLikiLAorICAgICAgIm5hbWUiOiAiZm9vIG5hbWVzcGFjZTogW1tFeHRlbnNp
YmxlXV0gaXMgdHJ1ZSIsCisgICAgICAic3RhdHVzX3N0cmluZyI6ICJQQVNTIiwKKyAgICAgICJw
cm9wZXJ0aWVzIjoge30sCisgICAgICAibWVzc2FnZSI6IG51bGwKKyAgICB9LAorICAgIHsKKyAg
ICAgICJuYW1lIjogImZvbyBuYW1lc3BhY2U6IFtbUHJvdG90eXBlXV0gaXMgT2JqZWN0LnByb3Rv
dHlwZSIsCisgICAgICAic3RhdHVzX3N0cmluZyI6ICJQQVNTIiwKKyAgICAgICJwcm9wZXJ0aWVz
Ijoge30sCisgICAgICAibWVzc2FnZSI6IG51bGwKKyAgICB9LAorICAgIHsKKyAgICAgICJuYW1l
IjogImZvbyBuYW1lc3BhY2U6IHR5cGVvZiBpcyBcIm9iamVjdFwiIiwKICAgICAgICJzdGF0dXNf
c3RyaW5nIjogIlBBU1MiLAogICAgICAgInByb3BlcnRpZXMiOiB7fSwKICAgICAgICJtZXNzYWdl
IjogbnVsbApAQCAtOTAsNiArMTIxLDg2IEBAIGlkbEFycmF5LnRlc3QoKTsKICAgICAgICJzdGF0
dXNfc3RyaW5nIjogIkZBSUwiLAogICAgICAgInByb3BlcnRpZXMiOiB7fSwKICAgICAgICJtZXNz
YWdlIjogImFzc2VydF9vd25fcHJvcGVydHk6IG5hbWVzcGFjZSBvYmplY3QgbWlzc2luZyBvcGVy
YXRpb24gXCJMaWVzXCIgZXhwZWN0ZWQgcHJvcGVydHkgXCJMaWVzXCIgbWlzc2luZyIKKyAgICB9
LAorCisgICAgeworICAgICAgIm5hbWUiOiAiYmFyIG5hbWVzcGFjZTogZXh0ZW5kZWQgYXR0cmli
dXRlcyIsCisgICAgICAic3RhdHVzX3N0cmluZyI6ICJQQVNTIiwKKyAgICAgICJwcm9wZXJ0aWVz
Ijoge30sCisgICAgICAibWVzc2FnZSI6IG51bGwKKyAgICB9LAorICAgIHsKKyAgICAgICJuYW1l
IjogImJhciBuYW1lc3BhY2U6IHByb3BlcnR5IGRlc2NyaXB0b3IiLAorICAgICAgInN0YXR1c19z
dHJpbmciOiAiUEFTUyIsCisgICAgICAicHJvcGVydGllcyI6IHt9LAorICAgICAgIm1lc3NhZ2Ui
OiBudWxsCisgICAgfSwKKyAgICB7CisgICAgICAibmFtZSI6ICJiYXIgbmFtZXNwYWNlOiBbW0V4
dGVuc2libGVdXSBpcyB0cnVlIiwKKyAgICAgICJzdGF0dXNfc3RyaW5nIjogIlBBU1MiLAorICAg
ICAgInByb3BlcnRpZXMiOiB7fSwKKyAgICAgICJtZXNzYWdlIjogbnVsbAorICAgIH0sCisgICAg
eworICAgICAgIm5hbWUiOiAiYmFyIG5hbWVzcGFjZTogW1tQcm90b3R5cGVdXSBpcyBPYmplY3Qu
cHJvdG90eXBlIiwKKyAgICAgICJzdGF0dXNfc3RyaW5nIjogIlBBU1MiLAorICAgICAgInByb3Bl
cnRpZXMiOiB7fSwKKyAgICAgICJtZXNzYWdlIjogbnVsbAorICAgIH0sCisgICAgeworICAgICAg
Im5hbWUiOiAiYmFyIG5hbWVzcGFjZTogdHlwZW9mIGlzIFwib2JqZWN0XCIiLAorICAgICAgInN0
YXR1c19zdHJpbmciOiAiUEFTUyIsCisgICAgICAicHJvcGVydGllcyI6IHt9LAorICAgICAgIm1l
c3NhZ2UiOiBudWxsCisgICAgfSwKKyAgICB7CisgICAgICAibmFtZSI6ICJiYXIgbmFtZXNwYWNl
OiBvcGVyYXRpb24gVHJ1dGgoKSIsCisgICAgICAic3RhdHVzX3N0cmluZyI6ICJQQVNTIiwKKyAg
ICAgICJwcm9wZXJ0aWVzIjoge30sCisgICAgICAibWVzc2FnZSI6IG51bGwKKyAgICB9LAorCisg
ICAgeworICAgICAgIm5hbWUiOiAiYmF6IG5hbWVzcGFjZTogZXh0ZW5kZWQgYXR0cmlidXRlcyIs
CisgICAgICAic3RhdHVzX3N0cmluZyI6ICJQQVNTIiwKKyAgICAgICJwcm9wZXJ0aWVzIjoge30s
CisgICAgICAibWVzc2FnZSI6IG51bGwKKyAgICB9LAorICAgIHsKKyAgICAgICJuYW1lIjogImJh
eiBuYW1lc3BhY2U6IHByb3BlcnR5IGRlc2NyaXB0b3IiLAorICAgICAgInN0YXR1c19zdHJpbmci
OiAiUEFTUyIsCisgICAgICAicHJvcGVydGllcyI6IHt9LAorICAgICAgIm1lc3NhZ2UiOiBudWxs
CisgICAgfSwKKyAgICB7CisgICAgICAibmFtZSI6ICJiYXogbmFtZXNwYWNlOiBbW0V4dGVuc2li
bGVdXSBpcyB0cnVlIiwKKyAgICAgICJzdGF0dXNfc3RyaW5nIjogIlBBU1MiLAorICAgICAgInBy
b3BlcnRpZXMiOiB7fSwKKyAgICAgICJtZXNzYWdlIjogbnVsbAorICAgIH0sCisgICAgeworICAg
ICAgIm5hbWUiOiAiYmF6IG5hbWVzcGFjZTogW1tQcm90b3R5cGVdXSBpcyBPYmplY3QucHJvdG90
eXBlIiwKKyAgICAgICJzdGF0dXNfc3RyaW5nIjogIlBBU1MiLAorICAgICAgInByb3BlcnRpZXMi
OiB7fSwKKyAgICAgICJtZXNzYWdlIjogbnVsbAorICAgIH0sCisgICAgeworICAgICAgIm5hbWUi
OiAiYmF6IG5hbWVzcGFjZTogdHlwZW9mIGlzIFwib2JqZWN0XCIiLAorICAgICAgInN0YXR1c19z
dHJpbmciOiAiUEFTUyIsCisgICAgICAicHJvcGVydGllcyI6IHt9LAorICAgICAgIm1lc3NhZ2Ui
OiBudWxsCisgICAgfSwKKyAgICB7CisgICAgICAibmFtZSI6ICJiYXogbmFtZXNwYWNlOiBvcGVy
YXRpb24gTG9uZ1N0b3J5KGFueSwgRE9NU3RyaW5nLi4uKSIsCisgICAgICAic3RhdHVzX3N0cmlu
ZyI6ICJQQVNTIiwKKyAgICAgICJwcm9wZXJ0aWVzIjoge30sCisgICAgICAibWVzc2FnZSI6IG51
bGwKKyAgICB9LAorICAgIHsKKyAgICAgICJuYW1lIjogImJheiBuYW1lc3BhY2U6IG9wZXJhdGlv
biBTaG9ydFN0b3J5KERPTVN0cmluZy4uLikiLAorICAgICAgInN0YXR1c19zdHJpbmciOiAiUEFT
UyIsCisgICAgICAicHJvcGVydGllcyI6IHt9LAorICAgICAgIm1lc3NhZ2UiOiBudWxsCiAgICAg
fQogICBdLAogICAidHlwZSI6ICJjb21wbGV0ZSIKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2lt
cG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rp
b25hbC9uby10aXRsZS5odG1sIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9y
bS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9mdW5jdGlvbmFsL25vLXRpdGxlLmh0bWwKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uYmFlZmI4MWJmOGZhYzUxZTI3NjdlMmU2MjM4ODdjZDBiOTZkOGYxZAotLS0gL2Rl
di9udWxsCisrKyBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMv
cmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC9uby10aXRsZS5odG1sCkBAIC0wLDAgKzEs
MTQ5IEBACis8IURPQ1RZUEUgSFRNTD4KKzxodG1sPgorPGhlYWQ+Cis8bWV0YSBuYW1lPSJ2YXJp
YW50IiBjb250ZW50PSIiPgorPG1ldGEgbmFtZT0idmFyaWFudCIgY29udGVudD0iP2tlZXAtcHJv
bWlzZSI+Cis8dGl0bGU+VGVzdHMgd2l0aCBubyB0aXRsZTwvdGl0bGU+Cis8c2NyaXB0IHNyYz0i
Li4vLi4vdmFyaWFudHMuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPHNjcmlwdCBzcmM9Ii9yZXNv
dXJjZXMvdGVzdGhhcm5lc3MuanMiPjwvc2NyaXB0PgorCis8Ym9keT4KKzxoMT5UZXN0cyB3aXRo
IG5vIHRpdGxlPC9oMT4KKzxkaXYgaWQ9ImxvZyI+PC9kaXY+Cis8c2NyaXB0PgorICB0ZXN0KGZ1
bmN0aW9uKCl7YXNzZXJ0X3RydWUodHJ1ZSwgJzEnKX0pOworICB0ZXN0KCgpPT5hc3NlcnRfdHJ1
ZSh0cnVlLCAnMicpKTsKKyAgdGVzdCgoKSA9PiBhc3NlcnRfdHJ1ZSh0cnVlLCAnMycpKTsKKyAg
dGVzdCgoKSA9PiBhc3NlcnRfdHJ1ZSh0cnVlLCAnMycpKTsgIC8vIHRlc3QgZHVwbGljYXRlIGJl
aGF2aW91cgorICB0ZXN0KCgpID0+IGFzc2VydF90cnVlKHRydWUsICczJykpOyAgLy8gdGVzdCBk
dXBsaWNhdGUgYmVoYXZpb3VyCisgIHRlc3QoKCkgPT4geworICAgICAgYXNzZXJ0X3RydWUodHJ1
ZSwgJzQnKTsKKyAgfSk7CisgIHRlc3QoKCkgPT4geyBhc3NlcnRfdHJ1ZSh0cnVlLCAnNScpIH0p
OworICB0ZXN0KCgpID0+IHsgYXNzZXJ0X3RydWUodHJ1ZSwgJzYnKSB9ICAgKTsKKyAgdGVzdCgo
KSA9PiB7IGFzc2VydF90cnVlKHRydWUsICc3Jyk7IH0pOworICB0ZXN0KCgpID0+IHt9KTsKKyAg
dGVzdCgoKSA9PiB7IH0pOworICB0ZXN0KCgpID0+IHs7Ozs7fSk7CisgIHRlc3QoKCkgPT4geyA7
IDsgOyA7IH0pOworICB0ZXN0KCgpPT57fSk7CisgIHRlc3QoKCk9PnsgfSk7CisgIHRlc3QoKCk9
Pns7Ozs7fSk7CisgIHRlc3QoKCk9PnsgOyA7IDsgOyB9KTsKKzwvc2NyaXB0PgorPHNjcmlwdCB0
eXBlPSJ0ZXh0L2pzb24iIGlkPSJleHBlY3RlZCI+Cit7CisgICJzdW1tYXJpemVkX3N0YXR1cyI6
IHsKKyAgICAic3RhdHVzX3N0cmluZyI6ICJPSyIsCisgICAgIm1lc3NhZ2UiOiBudWxsCisgIH0s
CisgICJzdW1tYXJpemVkX3Rlc3RzIjogWworICAgIHsKKyAgICAgICJzdGF0dXNfc3RyaW5nIjog
IlBBU1MiLAorICAgICAgIm5hbWUiOiAiVGVzdHMgd2l0aCBubyB0aXRsZSIsCisgICAgICAicHJv
cGVydGllcyI6IHt9LAorICAgICAgIm1lc3NhZ2UiOiBudWxsCisgICAgfSwKKyAgICB7CisgICAg
ICAic3RhdHVzX3N0cmluZyI6ICJQQVNTIiwKKyAgICAgICJuYW1lIjogImFzc2VydF90cnVlKHRy
dWUsICcyJykiLAorICAgICAgInByb3BlcnRpZXMiOiB7fSwKKyAgICAgICJtZXNzYWdlIjogbnVs
bAorICAgIH0sCisgICAgeworICAgICAgInN0YXR1c19zdHJpbmciOiAiUEFTUyIsCisgICAgICAi
bmFtZSI6ICJhc3NlcnRfdHJ1ZSh0cnVlLCAnMycpIiwKKyAgICAgICJwcm9wZXJ0aWVzIjoge30s
CisgICAgICAibWVzc2FnZSI6IG51bGwKKyAgICB9LAorICAgIHsKKyAgICAgICJzdGF0dXNfc3Ry
aW5nIjogIlBBU1MiLAorICAgICAgIm5hbWUiOiAiYXNzZXJ0X3RydWUodHJ1ZSwgJzMnKSAxIiwK
KyAgICAgICJwcm9wZXJ0aWVzIjoge30sCisgICAgICAibWVzc2FnZSI6IG51bGwKKyAgICB9LAor
ICAgIHsKKyAgICAgICJzdGF0dXNfc3RyaW5nIjogIlBBU1MiLAorICAgICAgIm5hbWUiOiAiYXNz
ZXJ0X3RydWUodHJ1ZSwgJzMnKSAyIiwKKyAgICAgICJwcm9wZXJ0aWVzIjoge30sCisgICAgICAi
bWVzc2FnZSI6IG51bGwKKyAgICB9LAorICAgIHsKKyAgICAgICJzdGF0dXNfc3RyaW5nIjogIlBB
U1MiLAorICAgICAgIm5hbWUiOiAiVGVzdHMgd2l0aCBubyB0aXRsZSAxIiwKKyAgICAgICJwcm9w
ZXJ0aWVzIjoge30sCisgICAgICAibWVzc2FnZSI6IG51bGwKKyAgICB9LAorICAgIHsKKyAgICAg
ICJzdGF0dXNfc3RyaW5nIjogIlBBU1MiLAorICAgICAgIm5hbWUiOiAiYXNzZXJ0X3RydWUodHJ1
ZSwgJzUnKSIsCisgICAgICAicHJvcGVydGllcyI6IHt9LAorICAgICAgIm1lc3NhZ2UiOiBudWxs
CisgICAgfSwKKyAgICB7CisgICAgICAic3RhdHVzX3N0cmluZyI6ICJQQVNTIiwKKyAgICAgICJu
YW1lIjogImFzc2VydF90cnVlKHRydWUsICc2JykiLAorICAgICAgInByb3BlcnRpZXMiOiB7fSwK
KyAgICAgICJtZXNzYWdlIjogbnVsbAorICAgIH0sCisgICAgeworICAgICAgInN0YXR1c19zdHJp
bmciOiAiUEFTUyIsCisgICAgICAibmFtZSI6ICJhc3NlcnRfdHJ1ZSh0cnVlLCAnNycpIiwKKyAg
ICAgICJwcm9wZXJ0aWVzIjoge30sCisgICAgICAibWVzc2FnZSI6IG51bGwKKyAgICB9LAorICAg
IHsKKyAgICAgICJzdGF0dXNfc3RyaW5nIjogIlBBU1MiLAorICAgICAgIm5hbWUiOiAiVGVzdHMg
d2l0aCBubyB0aXRsZSAyIiwKKyAgICAgICJwcm9wZXJ0aWVzIjoge30sCisgICAgICAibWVzc2Fn
ZSI6IG51bGwKKyAgICB9LAorICAgIHsKKyAgICAgICJzdGF0dXNfc3RyaW5nIjogIlBBU1MiLAor
ICAgICAgIm5hbWUiOiAiVGVzdHMgd2l0aCBubyB0aXRsZSAzIiwKKyAgICAgICJwcm9wZXJ0aWVz
Ijoge30sCisgICAgICAibWVzc2FnZSI6IG51bGwKKyAgICB9LAorICAgIHsKKyAgICAgICJzdGF0
dXNfc3RyaW5nIjogIlBBU1MiLAorICAgICAgIm5hbWUiOiAiVGVzdHMgd2l0aCBubyB0aXRsZSA0
IiwKKyAgICAgICJwcm9wZXJ0aWVzIjoge30sCisgICAgICAibWVzc2FnZSI6IG51bGwKKyAgICB9
LAorICAgIHsKKyAgICAgICJzdGF0dXNfc3RyaW5nIjogIlBBU1MiLAorICAgICAgIm5hbWUiOiAi
VGVzdHMgd2l0aCBubyB0aXRsZSA1IiwKKyAgICAgICJwcm9wZXJ0aWVzIjoge30sCisgICAgICAi
bWVzc2FnZSI6IG51bGwKKyAgICB9LAorICAgIHsKKyAgICAgICJzdGF0dXNfc3RyaW5nIjogIlBB
U1MiLAorICAgICAgIm5hbWUiOiAiVGVzdHMgd2l0aCBubyB0aXRsZSA2IiwKKyAgICAgICJwcm9w
ZXJ0aWVzIjoge30sCisgICAgICAibWVzc2FnZSI6IG51bGwKKyAgICB9LAorICAgIHsKKyAgICAg
ICJzdGF0dXNfc3RyaW5nIjogIlBBU1MiLAorICAgICAgIm5hbWUiOiAiVGVzdHMgd2l0aCBubyB0
aXRsZSA3IiwKKyAgICAgICJwcm9wZXJ0aWVzIjoge30sCisgICAgICAibWVzc2FnZSI6IG51bGwK
KyAgICB9LAorICAgIHsKKyAgICAgICJzdGF0dXNfc3RyaW5nIjogIlBBU1MiLAorICAgICAgIm5h
bWUiOiAiVGVzdHMgd2l0aCBubyB0aXRsZSA4IiwKKyAgICAgICJwcm9wZXJ0aWVzIjoge30sCisg
ICAgICAibWVzc2FnZSI6IG51bGwKKyAgICB9LAorICAgIHsKKyAgICAgICJzdGF0dXNfc3RyaW5n
IjogIlBBU1MiLAorICAgICAgIm5hbWUiOiAiVGVzdHMgd2l0aCBubyB0aXRsZSA5IiwKKyAgICAg
ICJwcm9wZXJ0aWVzIjoge30sCisgICAgICAibWVzc2FnZSI6IG51bGwKKyAgICB9CisgIF0sCisg
ICJ0eXBlIjogImNvbXBsZXRlIgorfQorPC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYg
LS1naXQgYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291
cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvdzNjLWltcG9ydC5sb2cgYi9MYXlvdXRUZXN0cy9p
bXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0
aW9uYWwvdzNjLWltcG9ydC5sb2cKaW5kZXggZjc4YjE0MTI4ZDg0YmIzZmY0YzAwMDhlNGU5MDFj
M2I4MTU4ZTQ5Yi4uMTJiODBjMTMwNDg2YTMzOGJkYzY2ODc3ZTU1ZThmZTliZDFjNTQ4NSAxMDA2
NDQKLS0tIGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNv
dXJjZXMvdGVzdC90ZXN0cy9mdW5jdGlvbmFsL3czYy1pbXBvcnQubG9nCisrKyBiL0xheW91dFRl
c3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMv
ZnVuY3Rpb25hbC93M2MtaW1wb3J0LmxvZwpAQCAtMzYsNiArMzYsNyBAQCBMaXN0IG9mIGZpbGVz
OgogL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2Vz
L3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC9pZnJhbWUtY29uc29saWRhdGUtdGVzdHMuaHRtbAogL0xh
eW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3Qv
dGVzdHMvZnVuY3Rpb25hbC9pZnJhbWUtbXNnLmh0bWwKIC9MYXlvdXRUZXN0cy9pbXBvcnRlZC93
M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvbG9n
LWluc2VydGlvbi5odG1sCisvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10
ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9mdW5jdGlvbmFsL25vLXRpdGxlLmh0bWwKIC9MYXlv
dXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rl
c3RzL2Z1bmN0aW9uYWwvb3JkZXIuaHRtbAogL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWIt
cGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC9wcm9taXNlLWFz
eW5jLmh0bWwKIC9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jl
c291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvcHJvbWlzZS13aXRoLXN5bmMuaHRtbApkaWZm
IC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNv
dXJjZXMvdGVzdC90ZXN0cy91bml0L2Fzc2VydF9vYmplY3RfZXF1YWxzLmh0bWwgYi9MYXlvdXRU
ZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3Rz
L3VuaXQvYXNzZXJ0X29iamVjdF9lcXVhbHMuaHRtbAppbmRleCAxOTI5NmI4MjkzZjI1MDU1YTIx
MDBlYmQ4ODRkYzlkYmJkNzk5OWZmLi4zMTNkNzdiOTc3MTU2ZGZjOGE2ZTMxY2NjZTU0NzA2NGYy
YzQxNjQ4IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3Jt
LXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL3VuaXQvYXNzZXJ0X29iamVjdF9lcXVhbHMuaHRt
bAorKysgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291
cmNlcy90ZXN0L3Rlc3RzL3VuaXQvYXNzZXJ0X29iamVjdF9lcXVhbHMuaHRtbApAQCAtNDMsNyAr
NDMsNyBAQCB0ZXN0KGZ1bmN0aW9uKCkgewogICB2YXIgZXhwZWN0ZWQgPSB7fTsKICAgT2JqZWN0
LmRlZmluZVByb3BlcnR5KGFjdHVhbCwgJ2EnLCB7IHZhbHVlOiAxLCBlbnVtZXJhYmxlOiBmYWxz
ZSB9KTsKIAotICBhc3NlcnRfdHJ1ZShhY3R1YWwuYSAhPT0gZXhwZWN0ZWQuYSk7CisgIGFzc2Vy
dF9ub3RfZXF1YWxzKGFjdHVhbC5hLCBleHBlY3RlZC5hKTsKICAgYXNzZXJ0X29iamVjdF9lcXVh
bHMoYWN0dWFsLCBleHBlY3RlZCk7CiB9LCAnbm9uLWVudW1lcmFibGUgcHJvcGVydGllcyBpbiBh
Y3R1YWwgdmFsdWUgaWdub3JlZCcpOwogCkBAIC01Miw3ICs1Miw3IEBAIHRlc3QoZnVuY3Rpb24o
KSB7CiAgIHZhciBleHBlY3RlZCA9IHt9OwogICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwZWN0
ZWQsICdhJywgeyB2YWx1ZTogMSwgZW51bWVyYWJsZTogZmFsc2UgfSk7CiAKLSAgYXNzZXJ0X3Ry
dWUoYWN0dWFsLmEgIT09IGV4cGVjdGVkLmEpOworICBhc3NlcnRfbm90X2VxdWFscyhhY3R1YWwu
YSwgZXhwZWN0ZWQuYSk7CiAgIGFzc2VydF9vYmplY3RfZXF1YWxzKGFjdHVhbCwgZXhwZWN0ZWQp
OwogfSwgJ25vbi1lbnVtZXJhYmxlIHByb3BlcnRpZXMgaW4gZXhwZWN0ZWQgdmFsdWUgaWdub3Jl
ZCcpOwogCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3Jt
LXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL3VuaXQvYXN5bmMtdGVzdC1yZXR1cm4tcmVzdHJp
Y3Rpb25zLmh0bWwgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3Rz
L3Jlc291cmNlcy90ZXN0L3Rlc3RzL3VuaXQvYXN5bmMtdGVzdC1yZXR1cm4tcmVzdHJpY3Rpb25z
Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uMGZkZTJlMjQyMjNmMDE3NTMyOTQ2NTZlYTFiYWE0MjdjM2ZmOWY0
YQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZv
cm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvdW5pdC9hc3luYy10ZXN0LXJldHVybi1yZXN0
cmljdGlvbnMuaHRtbApAQCAtMCwwICsxLDEzNSBAQAorPCFET0NUWVBFIEhUTUw+Cis8aHRtbD4K
KzxoZWFkPgorICA8bWV0YSBjaGFyc2V0PSJ1dGYtOCI+CisgIDxzY3JpcHQgc3JjPSIvcmVzb3Vy
Y2VzL3Rlc3RoYXJuZXNzLmpzIj48L3NjcmlwdD4KKyAgPHRpdGxlPlJlc3RyaWN0aW9ucyBvbiBy
ZXR1cm4gdmFsdWUgZnJvbSBgYXN5bmNfdGVzdGA8L3RpdGxlPgorPC9oZWFkPgorPGJvZHk+Cis8
c2NyaXB0PgorZnVuY3Rpb24gbWFrZVRlc3QoLi4uYm9kaWVzKSB7CisgIGNvbnN0IGNsb3NlU2Ny
aXB0ID0gJzwnICsgJy9zY3JpcHQ+JzsKKyAgbGV0IHNyYyA9IGAKKzwhRE9DVFlQRSBIVE1MPgor
PGh0bWw+Cis8aGVhZD4KKzx0aXRsZT5Eb2N1bWVudCB0aXRsZTwvdGl0bGU+Cis8c2NyaXB0IHNy
Yz0iL3Jlc291cmNlcy90ZXN0aGFybmVzcy5qcz8ke01hdGgucmFuZG9tKCl9Ij4ke2Nsb3NlU2Ny
aXB0fQorPC9oZWFkPgorCis8Ym9keT4KKzxkaXYgaWQ9ImxvZyI+PC9kaXY+YDsKKyAgYm9kaWVz
LmZvckVhY2goKGJvZHkpID0+IHsKKyAgICBzcmMgKz0gJzxzY3JpcHQ+KCcgKyBib2R5ICsgJyko
KTsnICsgY2xvc2VTY3JpcHQ7CisgIH0pOworCisgIGNvbnN0IGlmcmFtZSA9IGRvY3VtZW50LmNy
ZWF0ZUVsZW1lbnQoJ2lmcmFtZScpOworCisgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoaWZy
YW1lKTsKKyAgaWZyYW1lLmNvbnRlbnREb2N1bWVudC53cml0ZShzcmMpOworCisgIHJldHVybiBu
ZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4geworICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdt
ZXNzYWdlJywgZnVuY3Rpb24gb25NZXNzYWdlKGUpIHsKKyAgICAgIGlmIChlLnNvdXJjZSAhPT0g
aWZyYW1lLmNvbnRlbnRXaW5kb3cpIHsKKyAgICAgICAgcmV0dXJuOworICAgICAgfQorICAgICAg
aWYgKCFlLmRhdGEgfHwgZS5kYXRhLnR5cGUgIT09J2NvbXBsZXRlJykgeworICAgICAgICByZXR1
cm47CisgICAgICB9CisgICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcignbWVzc2FnZScs
IG9uTWVzc2FnZSk7CisgICAgICByZXNvbHZlKGUuZGF0YSk7CisgICAgfSk7CisKKyAgICBpZnJh
bWUuY29udGVudERvY3VtZW50LmNsb3NlKCk7CisgIH0pLnRoZW4oKHsgdGVzdHMsIHN0YXR1cyB9
KSA9PiB7CisgICAgY29uc3Qgc3VtbWFyeSA9IHsKKyAgICAgIGhhcm5lc3M6IHsKKyAgICAgICAg
c3RhdHVzOiBnZXRFbnVtUHJvcChzdGF0dXMsIHN0YXR1cy5zdGF0dXMpLAorICAgICAgICBtZXNz
YWdlOiBzdGF0dXMubWVzc2FnZQorICAgICAgfSwKKyAgICAgIHRlc3RzOiB7fQorICAgIH07CisK
KyAgICB0ZXN0cy5mb3JFYWNoKCh0ZXN0KSA9PiB7CisgICAgICBzdW1tYXJ5LnRlc3RzW3Rlc3Qu
bmFtZV0gPSBnZXRFbnVtUHJvcCh0ZXN0LCB0ZXN0LnN0YXR1cyk7CisgICAgfSk7CisKKyAgICBy
ZXR1cm4gc3VtbWFyeTsKKyAgfSk7Cit9CisKK2Z1bmN0aW9uIGdldEVudW1Qcm9wKG9iamVjdCwg
dmFsdWUpIHsKKyAgZm9yIChsZXQgcHJvcGVydHkgaW4gb2JqZWN0KSB7CisgICAgaWYgKCEvXltB
LVpdKyQvLnRlc3QocHJvcGVydHkpKSB7CisgICAgICBjb250aW51ZTsKKyAgICB9CisKKyAgICBp
ZiAob2JqZWN0W3Byb3BlcnR5XSA9PT0gdmFsdWUpIHsKKyAgICAgIHJldHVybiBwcm9wZXJ0eTsK
KyAgICB9CisgIH0KK30KKworcHJvbWlzZV90ZXN0KCgpID0+IHsKKyAgcmV0dXJuIG1ha2VUZXN0
KAorICAgICAgKCkgPT4geworICAgICAgICBhc3luY190ZXN0KCh0KSA9PiB7dC5kb25lKCk7IHJl
dHVybiB1bmRlZmluZWQ7fSwgJ2JlZm9yZScpOworICAgICAgICBhc3luY190ZXN0KCh0KSA9PiB7
dC5kb25lKCk7IHJldHVybiBudWxsO30sICdudWxsJyk7CisgICAgICAgIGFzeW5jX3Rlc3QoKHQp
ID0+IHt0LmRvbmUoKTsgcmV0dXJuIHVuZGVmaW5lZDt9LCAnYWZ0ZXInKTsKKyAgICAgIH0KKyAg
ICApLnRoZW4oKHtoYXJuZXNzLCB0ZXN0c30pID0+IHsKKyAgICAgIGFzc2VydF9lcXVhbHMoaGFy
bmVzcy5zdGF0dXMsICdFUlJPUicpOworICAgICAgYXNzZXJ0X2VxdWFscygKKyAgICAgICAgaGFy
bmVzcy5tZXNzYWdlLAorICAgICAgICAnVGVzdCBuYW1lZCAibnVsbCIgcGFzc2VkIGEgZnVuY3Rp
b24gdG8gYGFzeW5jX3Rlc3RgIHRoYXQgcmV0dXJuZWQgYSB2YWx1ZS4nCisgICAgICApOworICAg
ICAgYXNzZXJ0X2VxdWFscyh0ZXN0cy5iZWZvcmUsICdQQVNTJyk7CisgICAgICBhc3NlcnRfZXF1
YWxzKHRlc3RzLm51bGwsICdQQVNTJyk7CisgICAgICAvLyBUaGlzIHRlc3QgZGlkIG5vdCBnZXQg
dGhlIGNoYW5jZSB0byBzdGFydC4KKyAgICAgIGFzc2VydF9lcXVhbHModGVzdHMuYWZ0ZXIsIHVu
ZGVmaW5lZCk7CisgICAgfSk7Cit9LCAndGVzdCByZXR1cm5pbmcgYG51bGxgJyk7CisKK3Byb21p
c2VfdGVzdCgoKSA9PiB7CisgIHJldHVybiBtYWtlVGVzdCgKKyAgICAgICgpID0+IHsKKyAgICAg
ICAgYXN5bmNfdGVzdCgodCkgPT4ge3QuZG9uZSgpOyByZXR1cm4gdW5kZWZpbmVkO30sICdiZWZv
cmUnKTsKKyAgICAgICAgYXN5bmNfdGVzdCgodCkgPT4ge3QuZG9uZSgpOyByZXR1cm4ge307fSwg
J29iamVjdCcpOworICAgICAgICBhc3luY190ZXN0KCh0KSA9PiB7dC5kb25lKCk7IHJldHVybiB1
bmRlZmluZWQ7fSwgJ2FmdGVyJyk7CisgICAgICB9CisgICAgKS50aGVuKCh7aGFybmVzcywgdGVz
dHN9KSA9PiB7CisgICAgICBhc3NlcnRfZXF1YWxzKGhhcm5lc3Muc3RhdHVzLCAnRVJST1InKTsK
KyAgICAgIGFzc2VydF9lcXVhbHMoCisgICAgICAgIGhhcm5lc3MubWVzc2FnZSwKKyAgICAgICAg
J1Rlc3QgbmFtZWQgIm9iamVjdCIgcGFzc2VkIGEgZnVuY3Rpb24gdG8gYGFzeW5jX3Rlc3RgIHRo
YXQgcmV0dXJuZWQgYSB2YWx1ZS4nCisgICAgICApOworICAgICAgYXNzZXJ0X2VxdWFscyh0ZXN0
cy5iZWZvcmUsICdQQVNTJyk7CisgICAgICBhc3NlcnRfZXF1YWxzKHRlc3RzLm9iamVjdCwgJ1BB
U1MnKTsKKyAgICAgIC8vIFRoaXMgdGVzdCBkaWQgbm90IGdldCB0aGUgY2hhbmNlIHRvIHN0YXJ0
LgorICAgICAgYXNzZXJ0X2VxdWFscyh0ZXN0cy5hZnRlciwgdW5kZWZpbmVkKTsKKyAgICB9KTsK
K30sICd0ZXN0IHJldHVybmluZyBhbiBvcmRpbmFyeSBvYmplY3QnKTsKKworcHJvbWlzZV90ZXN0
KCgpID0+IHsKKyAgcmV0dXJuIG1ha2VUZXN0KAorICAgICAgKCkgPT4geworICAgICAgICBhc3lu
Y190ZXN0KCh0KSA9PiB7dC5kb25lKCk7IHJldHVybiB1bmRlZmluZWQ7fSwgJ2JlZm9yZScpOwor
ICAgICAgICBhc3luY190ZXN0KCh0KSA9PiB7dC5kb25lKCk7IHJldHVybiBQcm9taXNlLnJlc29s
dmUoNSk7fSwgJ3RoZW5hYmxlJyk7CisgICAgICAgIGFzeW5jX3Rlc3QoKHQpID0+IHt0LmRvbmUo
KTsgcmV0dXJuIHVuZGVmaW5lZDt9LCAnYWZ0ZXInKTsKKyAgICAgIH0KKyAgICApLnRoZW4oKHto
YXJuZXNzLCB0ZXN0c30pID0+IHsKKyAgICAgIGFzc2VydF9lcXVhbHMoaGFybmVzcy5zdGF0dXMs
ICdFUlJPUicpOworICAgICAgYXNzZXJ0X2VxdWFscygKKyAgICAgICAgaGFybmVzcy5tZXNzYWdl
LAorICAgICAgICAnVGVzdCBuYW1lZCAidGhlbmFibGUiIHBhc3NlZCBhIGZ1bmN0aW9uIHRvIGBh
c3luY190ZXN0YCB0aGF0IHJldHVybmVkIGEgdmFsdWUuICcgKworICAgICAgICAnQ29uc2lkZXIg
dXNpbmcgYHByb21pc2VfdGVzdGAgaW5zdGVhZCB3aGVuIHVzaW5nIFByb21pc2VzIG9yIGFzeW5j
L2F3YWl0LicKKyAgICAgICk7CisgICAgICBhc3NlcnRfZXF1YWxzKHRlc3RzLmJlZm9yZSwgJ1BB
U1MnKTsKKyAgICAgIGFzc2VydF9lcXVhbHModGVzdHMudGhlbmFibGUsICdQQVNTJyk7CisgICAg
ICAvLyBUaGlzIHRlc3QgZGlkIG5vdCBnZXQgYSBjaGFuY2UgdG8gc3RhcnQuCisgICAgICBhc3Nl
cnRfZXF1YWxzKHRlc3RzLmFmdGVyLCB1bmRlZmluZWQpOworICAgIH0pOworfSwgJ3Rlc3QgcmV0
dXJuaW5nIGEgdGhlbmFibGUgb2JqZWN0Jyk7Cis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4K
ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMv
cmVzb3VyY2VzL3Rlc3QvdGVzdHMvdW5pdC9iYXNpYy5odG1sIGIvTGF5b3V0VGVzdHMvaW1wb3J0
ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy91bml0L2Jhc2lj
Lmh0bWwKaW5kZXggZDkwN2M3YmI5ZmJmNGZhNGRjNjc0YmQ1N2U2YTg1NmI2OGVkMTNlYS4uZDUy
MDgyZjJlMDc2ZGUwNDU4YjY4OTc1MDUyM2IzZDEwNjQ2ZjRlMCAxMDA2NDQKLS0tIGEvTGF5b3V0
VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0
cy91bml0L2Jhc2ljLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0
Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy91bml0L2Jhc2ljLmh0bWwKQEAgLTI4LDcg
KzI4LDcgQEAKICAgICAgICAgICAgIFdlYklETDIucGFyc2UoIkknbSBhIHN5bnRheCBlcnJvciIp
OwogICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJXZWIgSURMIGRpZG4ndCB0aHJvdyIpOwog
ICAgICAgICB9IGNhdGNoIChlKSB7Ci0gICAgICAgICAgICBhc3NlcnRfdHJ1ZShlLm5hbWUgPT09
ICJXZWJJRExQYXJzZUVycm9yIik7CisgICAgICAgICAgICBhc3NlcnRfZXF1YWxzKGUubmFtZSwg
IldlYklETFBhcnNlRXJyb3IiKTsKICAgICAgICAgfQogICAgIH0sICdXZWJJREwyIHBhcnNlIG1l
dGhvZCBzaG91bGQgYmFpbCBvbiBpbmNvcnJlY3QgV2ViSURMJyk7CiAgICAgdGVzdChmdW5jdGlv
bigpIHsKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0t
dGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvdW5pdC9leGNlcHRpb25hbC1jYXNlcy5odG1sIGIv
TGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVz
dC90ZXN0cy91bml0L2V4Y2VwdGlvbmFsLWNhc2VzLmh0bWwKaW5kZXggMmJlNGRhY2FhZWM4YWU1
M2U2M2Q3MDRlODQyZDMyOTY4YTQyNGI0Yi4uNDA1NGQwMzExZDJkZTVhODNjNDNiYzA3NmQwZjc5
ZThjNjAxZTQ3NCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0
Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy91bml0L2V4Y2VwdGlvbmFsLWNhc2VzLmh0
bWwKKysrIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNv
dXJjZXMvdGVzdC90ZXN0cy91bml0L2V4Y2VwdGlvbmFsLWNhc2VzLmh0bWwKQEAgLTEyNyw3ICsx
MjcsNyBAQCBwcm9taXNlX3Rlc3QoKCkgPT4gewogICAgICAgICBhc3luY190ZXN0KCh0KSA9PiB7
CiAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7CiAgICAgICAgICAgICBzZXRUaW1lb3V0KCgp
ID0+IHQuZG9uZSgpLCAwKTsKLSAgICAgICAgICAgIGFzeW5jX3Rlc3QoKHQpID0+IHNldFRpbWVv
dXQodC5kb25lLmJpbmQodCksIDApLCAnYWZ0ZXInKTsKKyAgICAgICAgICAgIGFzeW5jX3Rlc3Qo
KHQpID0+IHsgc2V0VGltZW91dCh0LmRvbmUuYmluZCh0KSwgMCk7IH0sICdhZnRlcicpOwogICAg
ICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCd0aGlzIGVycm9yIGlzIGV4cGVjdGVkJyk7CiAgICAg
ICAgICAgfSwgMCk7CiAgICAgICAgIH0sICdkdXJpbmcnKTsKQEAgLTIwNSw3ICsyMDUsNyBAQCBp
ZiAoJ29udW5oYW5kbGVkcmVqZWN0aW9uJyBpbiB3aW5kb3cpIHsKIAogICAgICAgICAgICAgd2lu
ZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3VuaGFuZGxlZHJlamVjdGlvbicsICgpID0+IHsKICAgICAg
ICAgICAgIHNldFRpbWVvdXQoKCkgPT4gdC5kb25lKCksIDApOwotICAgICAgICAgICAgICBhc3lu
Y190ZXN0KCh0KSA9PiBzZXRUaW1lb3V0KHQuZG9uZS5iaW5kKHQpLCAwKSwgJ2FmdGVyJyk7Cisg
ICAgICAgICAgICAgIGFzeW5jX3Rlc3QoKHQpID0+IHsgc2V0VGltZW91dCh0LmRvbmUuYmluZCh0
KSwgMCk7IH0sICdhZnRlcicpOwogICAgICAgICAgICAgICB0LmRvbmUoKTsKICAgICAgICAgICAg
IH0pOwogICAgICAgICAgIH0sICdkdXJpbmcnKTsKQEAgLTI2MSwxMCArMjYxLDEwIEBAIGlmICgn
b251bmhhbmRsZWRyZWplY3Rpb24nIGluIHdpbmRvdykgewogICAgIHJldHVybiBtYWtlVGVzdCgK
ICAgICAgICAgKCkgPT4gewogICAgICAgICAgIHNldHVwKHsgZXhwbGljaXRfZG9uZTogdHJ1ZSB9
KTsKLSAgICAgICAgICBhc3luY190ZXN0KCh0KSA9PiBzZXRUaW1lb3V0KHQuZG9uZS5iaW5kKHQp
LCAwKSwgJ2JlZm9yZScpOworICAgICAgICAgIGFzeW5jX3Rlc3QoKHQpID0+IHsgc2V0VGltZW91
dCh0LmRvbmUuYmluZCh0KSwgMCk7IH0sICdiZWZvcmUnKTsKICAgICAgICAgICBQcm9taXNlLnJl
amVjdChuZXcgRXJyb3IoJ3RoaXMgZXJyb3IgaXMgZXhwZWN0ZWQnKSk7CiAgICAgICAgICAgd2lu
ZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3VuaGFuZGxlZHJlamVjdGlvbicsICgpID0+IHsKLSAgICAg
ICAgICAgIGFzeW5jX3Rlc3QoKHQpID0+IHNldFRpbWVvdXQodC5kb25lLmJpbmQodCksIDApLCAn
YWZ0ZXInKTsKKyAgICAgICAgICAgIGFzeW5jX3Rlc3QoKHQpID0+IHsgc2V0VGltZW91dCh0LmRv
bmUuYmluZCh0KSwgMCk7IH0sICdhZnRlcicpOwogICAgICAgICAgICAgZG9uZSgpOwogICAgICAg
ICAgIH0pOwogICAgICAgICB9CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mv
d2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL3VuaXQvdGVzdC1yZXR1cm4t
cmVzdHJpY3Rpb25zLmh0bWwgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3Jt
LXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL3VuaXQvdGVzdC1yZXR1cm4tcmVzdHJpY3Rpb25z
Lmh0bWwKaW5kZXggYjg0NmQ0ZGM0MzAwYTk5MGVkZjdhOTA1ZjMwMWRjYWY3NWJlZTE4Yy4uMDI5
NWM1MjE0ZGMyMmJlYmE5NzkxY2FmOGNkZmZjODY5ZTA3ZjFkOCAxMDA2NDQKLS0tIGEvTGF5b3V0
VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0
cy91bml0L3Rlc3QtcmV0dXJuLXJlc3RyaWN0aW9ucy5odG1sCisrKyBiL0xheW91dFRlc3RzL2lt
cG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvdW5pdC90
ZXN0LXJldHVybi1yZXN0cmljdGlvbnMuaHRtbApAQCAtODEsNyArODEsNyBAQCBwcm9taXNlX3Rl
c3QoKCkgPT4gewogICAgICAgYXNzZXJ0X2VxdWFscyhoYXJuZXNzLnN0YXR1cywgJ0VSUk9SJyk7
CiAgICAgICBhc3NlcnRfZXF1YWxzKAogICAgICAgICBoYXJuZXNzLm1lc3NhZ2UsCi0gICAgICAg
ICdUZXN0IG5hbWVkICJudWxsIiBpbmFwcHJvcHJpYXRlbHkgcmV0dXJuZWQgYSB2YWx1ZScKKyAg
ICAgICAgJ1Rlc3QgbmFtZWQgIm51bGwiIHBhc3NlZCBhIGZ1bmN0aW9uIHRvIGB0ZXN0YCB0aGF0
IHJldHVybmVkIGEgdmFsdWUuJwogICAgICAgKTsKICAgICAgIGFzc2VydF9lcXVhbHModGVzdHMu
YmVmb3JlLCAnUEFTUycpOwogICAgICAgYXNzZXJ0X2VxdWFscyh0ZXN0cy5udWxsLCAnUEFTUycp
OwpAQCAtMTAwLDcgKzEwMCw3IEBAIHByb21pc2VfdGVzdCgoKSA9PiB7CiAgICAgICBhc3NlcnRf
ZXF1YWxzKGhhcm5lc3Muc3RhdHVzLCAnRVJST1InKTsKICAgICAgIGFzc2VydF9lcXVhbHMoCiAg
ICAgICAgIGhhcm5lc3MubWVzc2FnZSwKLSAgICAgICAgJ1Rlc3QgbmFtZWQgIm9iamVjdCIgaW5h
cHByb3ByaWF0ZWx5IHJldHVybmVkIGEgdmFsdWUnCisgICAgICAgICdUZXN0IG5hbWVkICJvYmpl
Y3QiIHBhc3NlZCBhIGZ1bmN0aW9uIHRvIGB0ZXN0YCB0aGF0IHJldHVybmVkIGEgdmFsdWUuJwog
ICAgICAgKTsKICAgICAgIGFzc2VydF9lcXVhbHModGVzdHMuYmVmb3JlLCAnUEFTUycpOwogICAg
ICAgYXNzZXJ0X2VxdWFscyh0ZXN0cy5vYmplY3QsICdQQVNTJyk7CkBAIC0xMTIsMTQgKzExMiwx
NSBAQCBwcm9taXNlX3Rlc3QoKCkgPT4gewogICByZXR1cm4gbWFrZVRlc3QoCiAgICAgICAoKSA9
PiB7CiAgICAgICAgIHRlc3QoKCkgPT4gdW5kZWZpbmVkLCAnYmVmb3JlJyk7Ci0gICAgICAgIHRl
c3QoKCkgPT4gKHsgdGhlbigpIHt9IH0pLCAndGhlbmFibGUnKTsKKyAgICAgICAgdGVzdCgoKSA9
PiBQcm9taXNlLnJlc29sdmUoNSksICd0aGVuYWJsZScpOwogICAgICAgICB0ZXN0KCgpID0+IHVu
ZGVmaW5lZCwgJ2FmdGVyJyk7CiAgICAgICB9CiAgICAgKS50aGVuKCh7aGFybmVzcywgdGVzdHN9
KSA9PiB7CiAgICAgICBhc3NlcnRfZXF1YWxzKGhhcm5lc3Muc3RhdHVzLCAnRVJST1InKTsKICAg
ICAgIGFzc2VydF9lcXVhbHMoCiAgICAgICAgIGhhcm5lc3MubWVzc2FnZSwKLSAgICAgICAgJ1Rl
c3QgbmFtZWQgInRoZW5hYmxlIiBpbmFwcHJvcHJpYXRlbHkgcmV0dXJuZWQgYSB2YWx1ZSwgY29u
c2lkZXIgdXNpbmcgYHByb21pc2VfdGVzdGAgaW5zdGVhZCcKKyAgICAgICAgJ1Rlc3QgbmFtZWQg
InRoZW5hYmxlIiBwYXNzZWQgYSBmdW5jdGlvbiB0byBgdGVzdGAgdGhhdCByZXR1cm5lZCBhIHZh
bHVlLiAnICsKKyAgICAgICAgJ0NvbnNpZGVyIHVzaW5nIGBwcm9taXNlX3Rlc3RgIGluc3RlYWQg
d2hlbiB1c2luZyBQcm9taXNlcyBvciBhc3luYy9hd2FpdC4nCiAgICAgICApOwogICAgICAgYXNz
ZXJ0X2VxdWFscyh0ZXN0cy5iZWZvcmUsICdQQVNTJyk7CiAgICAgICBhc3NlcnRfZXF1YWxzKHRl
c3RzLnRoZW5hYmxlLCAnUEFTUycpOwpAQCAtMTQzLDcgKzE0NCw3IEBAIHByb21pc2VfdGVzdCgo
KSA9PiB7CiAgICAgICBhc3NlcnRfZXF1YWxzKGhhcm5lc3Muc3RhdHVzLCAnRVJST1InKTsKICAg
ICAgIGFzc2VydF9lcXVhbHMoCiAgICAgICAgIGhhcm5lc3MubWVzc2FnZSwKLSAgICAgICAgJ1Rl
c3QgbmFtZWQgInJlc3RyaWN0ZWQiIGluYXBwcm9wcmlhdGVseSByZXR1cm5lZCBhIHZhbHVlJwor
ICAgICAgICAnVGVzdCBuYW1lZCAicmVzdHJpY3RlZCIgcGFzc2VkIGEgZnVuY3Rpb24gdG8gYHRl
c3RgIHRoYXQgcmV0dXJuZWQgYSB2YWx1ZS4nCiAgICAgICApOwogICAgICAgYXNzZXJ0X2VxdWFs
cyh0ZXN0cy5iZWZvcmUsICdQQVNTJyk7CiAgICAgICBhc3NlcnRfZXF1YWxzKHRlc3RzLnJlc3Ry
aWN0ZWQsICdQQVNTJyk7CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2Vi
LXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL3VuaXQvdzNjLWltcG9ydC5sb2cg
Yi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90
ZXN0L3Rlc3RzL3VuaXQvdzNjLWltcG9ydC5sb2cKaW5kZXggNmIyMjQ3MTEyNDExMDQwMzhiNTk4
MmVmN2IwNGViMWQxM2M4NDNlNC4uYjdiNDQyOTk3ZDQ2YjQxMjlmOGYwYjk2MmNiMGM2ZGM4Y2Q0
YmNhMCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10
ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy91bml0L3czYy1pbXBvcnQubG9nCisrKyBiL0xheW91
dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVz
dHMvdW5pdC93M2MtaW1wb3J0LmxvZwpAQCAtMTcsNiArMTcsNyBAQCBMaXN0IG9mIGZpbGVzOgog
L0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rl
c3QvdGVzdHMvdW5pdC9hc3NlcnRfaW1wbGVtZW50cy5odG1sCiAvTGF5b3V0VGVzdHMvaW1wb3J0
ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy91bml0L2Fzc2Vy
dF9pbXBsZW1lbnRzX29wdGlvbmFsLmh0bWwKIC9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2Vi
LXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL3VuaXQvYXNzZXJ0X29iamVjdF9l
cXVhbHMuaHRtbAorL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMv
cmVzb3VyY2VzL3Rlc3QvdGVzdHMvdW5pdC9hc3luYy10ZXN0LXJldHVybi1yZXN0cmljdGlvbnMu
aHRtbAogL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3Vy
Y2VzL3Rlc3QvdGVzdHMvdW5pdC9iYXNpYy5odG1sCiAvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNj
L3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy91bml0L2V4Y2VwdGlvbmFs
LWNhc2VzLXRpbWVvdXRzLmh0bWwKIC9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRm
b3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL3VuaXQvZXhjZXB0aW9uYWwtY2FzZXMuaHRt
bApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0
cy9yZXNvdXJjZXMvdGVzdC90b3guaW5pIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1w
bGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90b3guaW5pCmluZGV4IGE3YTAyZTRiOTNiZGMw
MDllZjBiMDVjYmMwMzljMzk3N2ZjZGQ0NmUuLjI2NmE2ZTg5NTJlMDRkOTAxMjA2NDgzNjE0YmRh
OTA5NzkzM2JiOGUgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxh
dGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdG94LmluaQorKysgYi9MYXlvdXRUZXN0cy9pbXBv
cnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3RveC5pbmkKQEAgLTEs
NiArMSw1IEBACiBbdG94XQotIyBOb3RlIHRoYXQgb25seSBweTI3IGlzIHJ1biBpbiBDSS4KLWVu
dmxpc3QgPSBweTI3LHB5MzYKK2Vudmxpc3QgPSBweTI3LHB5MzYscHkzOAogc2tpcHNkaXN0PVRy
dWUKIAogW3Rlc3RlbnZdCkBAIC04LDcgKzcsNyBAQCBwYXNzZW52PURJU1BMQVkgIyBOZWNlc3Nh
cnkgZm9yIHRoZSBzcGF3bmVkIEdlY2tvRHJpdmVyIHByb2Nlc3MgdG8gY29ubmVjdCB0bwogICAg
ICAgICAgICAgICAgICMgdGhlIGFwcHJvcHJpYXRlIGRpc3BsYXkuCiBkZXBzID0KICAgaHRtbDVs
aWIKLSAgcHl0ZXN0Pj0yLjkKKyAgcHl0ZXN0Pj0yLjksPDYgIyBwaW5uZWQgdG8gPDYgZHVlIHRv
IGh0dHBzOi8vZ2l0aHViLmNvbS93ZWItcGxhdGZvcm0tdGVzdHMvd3B0L2lzc3Vlcy8yNjEzMgog
ICBweXZpcnR1YWxkaXNwbGF5CiAgIHNpeAogICByZXF1ZXN0cwpkaWZmIC0tZ2l0IGEvTGF5b3V0
VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC93cHRz
ZXJ2ZXIucHkgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jl
c291cmNlcy90ZXN0L3dwdHNlcnZlci5weQppbmRleCBkNDdlMzI1ZmJlZjY0YTQyNWJhOTFmMjFh
NDlhNmQyN2UwM2E3ZTNiLi5hNTA0YTc2YTQ2ZTAwZGI4ZjliYjRhMTlkYzlkY2E1OGVjMWM4MzE0
IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3Rz
L3Jlc291cmNlcy90ZXN0L3dwdHNlcnZlci5weQorKysgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93
M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3dwdHNlcnZlci5weQpAQCAtMjQs
NiArMjQsOCBAQCBjbGFzcyBXUFRTZXJ2ZXIob2JqZWN0KToKICAgICBkZWYgc3RhcnQoc2VsZik6
CiAgICAgICAgIHNlbGYuZGV2bnVsbCA9IG9wZW4ob3MuZGV2bnVsbCwgJ3cnKQogICAgICAgICB3
cHRzZXJ2ZV9jbWQgPSBbb3MucGF0aC5qb2luKHNlbGYud3B0X3Jvb3QsICd3cHQnKSwgJ3NlcnZl
J10KKyAgICAgICAgaWYgc3lzLmV4ZWN1dGFibGU6CisgICAgICAgICAgICB3cHRzZXJ2ZV9jbWRb
MDowXSA9IFtzeXMuZXhlY3V0YWJsZV0KICAgICAgICAgbG9nZ2luZy5pbmZvKCdFeGVjdXRpbmcg
JXMnICUgJyAnLmpvaW4od3B0c2VydmVfY21kKSkKICAgICAgICAgc2VsZi5wcm9jID0gc3VicHJv
Y2Vzcy5Qb3BlbigKICAgICAgICAgICAgIHdwdHNlcnZlX2NtZCwKZGlmZiAtLWdpdCBhL0xheW91
dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3Rkcml2
ZXItYWN0aW9ucy5qcyBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVz
dHMvcmVzb3VyY2VzL3Rlc3Rkcml2ZXItYWN0aW9ucy5qcwppbmRleCA4NzBhMmU4ZTI2Njc4MDg1
ZjgwYzAzMGQ0MzZkZDEzNjg2ZmI5YjBiLi5mM2U2Mzg4ZThhY2QxOTk4ZDg5NzUwMTUwZTA3Nzlk
ZjMyN2E1NDE3IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRm
b3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0ZHJpdmVyLWFjdGlvbnMuanMKKysrIGIvTGF5b3V0VGVz
dHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdGRyaXZlci1h
Y3Rpb25zLmpzCkBAIC05LDYgKzksNyBAQAogICBmdW5jdGlvbiBBY3Rpb25zKGRlZmF1bHRUaWNr
RHVyYXRpb249MTYpIHsKICAgICB0aGlzLnNvdXJjZVR5cGVzID0gbmV3IE1hcChbWyJrZXkiLCBL
ZXlTb3VyY2VdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbInBvaW50ZXIiLCBQ
b2ludGVyU291cmNlXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyJ3aGVlbCIs
IFdoZWVsU291cmNlXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyJub25lIiwg
R2VuZXJhbFNvdXJjZV1dKTsKICAgICB0aGlzLnNvdXJjZXMgPSBuZXcgTWFwKCk7CiAgICAgdGhp
cy5zb3VyY2VPcmRlciA9IFtdOwpAQCAtMjIsNiArMjMsNyBAQAogICAgIHRoaXMuY3JlYXRlU291
cmNlKCJub25lIik7CiAgICAgdGhpcy50aWNrSWR4ID0gMDsKICAgICB0aGlzLmRlZmF1bHRUaWNr
RHVyYXRpb24gPSBkZWZhdWx0VGlja0R1cmF0aW9uOworICAgIHRoaXMuY29udGV4dCA9IG51bGw7
CiAgIH0KIAogICBBY3Rpb25zLnByb3RvdHlwZSA9IHsKQEAgLTY1LDcgKzY3LDE3IEBACiAgICAg
ICB9IGNhdGNoKGUpIHsKICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KGUpOwogICAgICAg
fQotICAgICAgcmV0dXJuIHRlc3RfZHJpdmVyLmFjdGlvbl9zZXF1ZW5jZShhY3Rpb25zKTsKKyAg
ICAgIHJldHVybiB0ZXN0X2RyaXZlci5hY3Rpb25fc2VxdWVuY2UoYWN0aW9ucywgdGhpcy5jb250
ZXh0KTsKKyAgICB9LAorCisgICAgLyoqCisgICAgICogU2V0IHRoZSBjb250ZXh0IGZvciB0aGUg
YWN0aW9ucworICAgICAqCisgICAgICogQHBhcmFtIHtXaW5kb3dQcm94eX0gY29udGV4dCAtIENv
bnRleHQgaW4gd2hpY2ggdG8gcnVuIHRoZSBhY3Rpb24gc2VxdWVuY2UKKyAgICAgKi8KKyAgICBz
ZXRDb250ZXh0OiBmdW5jdGlvbihjb250ZXh0KSB7CisgICAgICB0aGlzLmNvbnRleHQgPSBjb250
ZXh0OworICAgICAgcmV0dXJuIHRoaXM7CiAgICAgfSwKIAogICAgIC8qKgpAQCAtNzMsNyArODUs
NyBAQAogICAgICAqIElmIG5vIG5hbWUgaXMgcGFzc2VkLCBhIG5ldyBzb3VyY2Ugd2l0aCB0aGUg
Z2l2ZW4gdHlwZSBpcwogICAgICAqIGNyZWF0ZWQuCiAgICAgICoKLSAgICAgKiBAcGFyYW0ge1N0
cmluZ30gdHlwZSAtIFNvdXJjZSB0eXBlICgnbm9uZScsICdrZXknLCBvciAncG9pbnRlcicpCisg
ICAgICogQHBhcmFtIHtTdHJpbmd9IHR5cGUgLSBTb3VyY2UgdHlwZSAoJ25vbmUnLCAna2V5Jywg
J3BvaW50ZXInLCBvciAnd2hlZWwnKQogICAgICAqIEBwYXJhbSB7U3RyaW5nP30gbmFtZSAtIE5h
bWUgb2YgdGhlIHNvdXJjZQogICAgICAqIEByZXR1cm5zIHtTb3VyY2V9IFNvdXJjZSBvYmplY3Qg
Zm9yIHRoYXQgc291cmNlLgogICAgICAqLwpAQCAtMTU0LDYgKzE2NiwzMiBAQAogICAgICAgcmV0
dXJuIHRoaXM7CiAgICAgfSwKIAorICAgIC8qKgorICAgICAqIEFkZCBhIG5ldyB3aGVlbCBpbnB1
dCBzb3VyY2Ugd2l0aCB0aGUgZ2l2ZW4gbmFtZQorICAgICAqCisgICAgICogQHBhcmFtIHtTdHJp
bmd9IHR5cGUgLSBOYW1lIG9mIHRoZSB3aGVlbCBzb3VyY2UKKyAgICAgKiBAcGFyYW0ge0Jvb2x9
IHNldCAtIFNldCBzb3VyY2UgYXMgdGhlIGRlZmF1bHQgd2hlZWwgc291cmNlCisgICAgICogQHJl
dHVybnMge0FjdGlvbnN9CisgICAgICovCisgICAgYWRkV2hlZWw6IGZ1bmN0aW9uKG5hbWUsIHNl
dD10cnVlKSB7CisgICAgICB0aGlzLmNyZWF0ZVNvdXJjZSgid2hlZWwiLCBuYW1lKTsKKyAgICAg
IGlmIChzZXQpIHsKKyAgICAgICAgdGhpcy5zZXRXaGVlbChuYW1lKTsKKyAgICAgIH0KKyAgICAg
IHJldHVybiB0aGlzOworICAgIH0sCisKKyAgICAvKioKKyAgICAgKiBTZXQgdGhlIGN1cnJlbnQg
ZGVmYXVsdCB3aGVlbCBzb3VyY2UKKyAgICAgKgorICAgICAqIEBwYXJhbSB7U3RyaW5nfSBuYW1l
IC0gTmFtZSBvZiB0aGUgd2hlZWwgc291cmNlCisgICAgICogQHJldHVybnMge0FjdGlvbnN9Cisg
ICAgICovCisgICAgc2V0V2hlZWw6IGZ1bmN0aW9uKG5hbWUpIHsKKyAgICAgIHRoaXMuc2V0U291
cmNlKCJ3aGVlbCIsIG5hbWUpOworICAgICAgcmV0dXJuIHRoaXM7CisgICAgfSwKKwogICAgIGNy
ZWF0ZVNvdXJjZTogZnVuY3Rpb24odHlwZSwgbmFtZSwgcGFyYW1ldGVycz17fSkgewogICAgICAg
aWYgKCF0aGlzLnNvdXJjZXMuaGFzKHR5cGUpKSB7CiAgICAgICAgIHRocm93IG5ldyBFcnJvcihg
JHt0eXBlfSBpcyBub3QgYSB2YWxpZCBhY3Rpb24gdHlwZWApOwpAQCAtMTk2LDggKzIzNCw5IEBA
CiAgICAgICoKICAgICAgKiBAcGFyYW0ge051bWJlcj99IGR1cmF0aW9uIC0gTWluaW11bSBsZW5n
dGggb2YgdGhlIHRpY2sgaW4gbXMuCiAgICAgICogQHBhcmFtIHtTdHJpbmd9IHNvdXJjZVR5cGUg
LSBzb3VyY2UgdHlwZQotICAgICAqIEBwYXJhbSB7U3RyaW5nP30gc291cmNlTmFtZSAtIE5hbWVk
IGtleSBvciBwb2ludGVyIHNvdXJjZSB0byB1c2Ugb3IgbnVsbCBmb3IgdGhlIGRlZmF1bHQKLSAg
ICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXkgb3IgcG9pbnRlciBzb3VyY2UK
KyAgICAgKiBAcGFyYW0ge1N0cmluZz99IHNvdXJjZU5hbWUgLSBOYW1lZCBrZXksIHBvaW50ZXIg
b3Igd2hlZWwgc291cmNlIHRvIHVzZQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG9yIG51bGwgZm9yIHRoZSBkZWZhdWx0IGtleSwgcG9pbnRlciBvcgorICAgICAqICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHdoZWVsIHNvdXJjZQogICAgICAqIEByZXR1cm5zIHtB
Y3Rpb25zfQogICAgICAqLwogICAgIHBhdXNlOiBmdW5jdGlvbihkdXJhdGlvbj0wLCBzb3VyY2VU
eXBlPSJub25lIiwge3NvdXJjZU5hbWU9bnVsbH09e30pIHsKQEAgLTI4MCw2ICszMTksMjcgQEAK
ICAgICAgIHNvdXJjZS5wb2ludGVyTW92ZSh0aGlzLCB4LCB5LCBkdXJhdGlvbiwgb3JpZ2luKTsK
ICAgICAgIHJldHVybiB0aGlzOwogICAgIH0sCisKKyAgICAvKioKKyAgICAgKiBDcmVhdGUgYSBz
Y3JvbGwgZXZlbnQgZm9yIHRoZSBjdXJyZW50IGRlZmF1bHQgd2hlZWwgc291cmNlCisgICAgICoK
KyAgICAgKiBAcGFyYW0ge051bWJlcn0geCAtIG1vdXNlIGN1cnNvciB4IGNvb3JkaW5hdGUKKyAg
ICAgKiBAcGFyYW0ge051bWJlcn0geSAtIG1vdXNlIGN1cnNvciB5IGNvb3JkaW5hdGUKKyAgICAg
KiBAcGFyYW0ge051bWJlcn0gZGVsdGFYIC0gc2Nyb2xsIGRlbHRhIHZhbHVlIGFsb25nIHRoZSB4
LWF4aXMgaW4gcGl4ZWxzCisgICAgICogQHBhcmFtIHtOdW1iZXJ9IGRlbHRhWSAtIHNjcm9sbCBk
ZWx0YSB2YWx1ZSBhbG9uZyB0aGUgeS1heGlzIGluIHBpeGVscworICAgICAqIEBwYXJhbSB7U3Ry
aW5nfEVsZW1lbnR9IG9yaWdpbiAtIE9yaWdpbiBvZiB0aGUgY29vcmRpbmF0ZSBzeXN0ZW0uCisg
ICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRWl0aGVyICJ2aWV3cG9ydCIg
b3IgYW4gRWxlbWVudAorICAgICAqIEBwYXJhbSB7TnVtYmVyP30gZHVyYXRpb24gLSBUaW1lIGlu
IG1zIGZvciB0aGUgc2Nyb2xsCisgICAgICogQHBhcmFtIHtTdHJpbmc/fSBzb3VyY2VOYW1lIC0g
TmFtZWQgd2hlZWwgc291cmNlIHRvIHVzZSBvciBudWxsIGZvciB0aGUKKyAgICAgKiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0IHdoZWVsIHNvdXJjZQorICAgICAqIEByZXR1
cm5zIHtBY3Rpb25zfQorICAgICAqLworICAgIHNjcm9sbDogZnVuY3Rpb24oeCwgeSwgZGVsdGFY
LCBkZWx0YVksCisgICAgICAgICAgICAgICAgICAgICB7b3JpZ2luPSJ2aWV3cG9ydCIsIGR1cmF0
aW9uLCBzb3VyY2VOYW1lPW51bGx9PXt9KSB7CisgICAgICBsZXQgc291cmNlID0gdGhpcy5nZXRT
b3VyY2UoIndoZWVsIiwgc291cmNlTmFtZSk7CisgICAgICBzb3VyY2Uuc2Nyb2xsKHRoaXMsIHgs
IHksIGRlbHRhWCwgZGVsdGFZLCBkdXJhdGlvbiwgb3JpZ2luKTsKKyAgICAgIHJldHVybiB0aGlz
OworICAgIH0sCiAgIH07CiAKICAgZnVuY3Rpb24gR2VuZXJhbFNvdXJjZSgpIHsKQEAgLTQxNyw1
ICs0NzcsNDYgQEAKICAgICB9LAogICB9OwogCisgIGZ1bmN0aW9uIFdoZWVsU291cmNlKCkgewor
ICAgIHRoaXMuYWN0aW9ucyA9IG5ldyBNYXAoKTsKKyAgfQorCisgIFdoZWVsU291cmNlLnByb3Rv
dHlwZSA9IHsKKyAgICBzZXJpYWxpemU6IGZ1bmN0aW9uKHRpY2tDb3VudCkgeworICAgICAgaWYg
KCF0aGlzLmFjdGlvbnMuc2l6ZSkgeworICAgICAgICByZXR1cm4gdW5kZWZpbmVkOworICAgICAg
fQorICAgICAgbGV0IGFjdGlvbnMgPSBbXTsKKyAgICAgIGxldCBkYXRhID0geyJ0eXBlIjogIndo
ZWVsIiwgImFjdGlvbnMiOiBhY3Rpb25zfTsKKyAgICAgIGZvciAobGV0IGk9MDsgaTx0aWNrQ291
bnQ7IGkrKykgeworICAgICAgICBpZiAodGhpcy5hY3Rpb25zLmhhcyhpKSkgeworICAgICAgICAg
IGFjdGlvbnMucHVzaCh0aGlzLmFjdGlvbnMuZ2V0KGkpKTsKKyAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICBhY3Rpb25zLnB1c2goeyJ0eXBlIjogInBhdXNlIn0pOworICAgICAgICB9CisgICAg
ICB9CisgICAgICByZXR1cm4gZGF0YTsKKyAgICB9LAorCisgICAgc2Nyb2xsOiBmdW5jdGlvbihh
Y3Rpb25zLCB4LCB5LCBkZWx0YVgsIGRlbHRhWSwgZHVyYXRpb24sIG9yaWdpbikgeworICAgICAg
bGV0IHRpY2sgPSBhY3Rpb25zLnRpY2tJZHg7CisgICAgICBpZiAodGhpcy5hY3Rpb25zLmhhcyh0
aWNrKSkgeworICAgICAgICB0aWNrID0gYWN0aW9ucy5hZGRUaWNrKCkudGlja0lkeDsKKyAgICAg
IH0KKyAgICAgIHRoaXMuYWN0aW9ucy5zZXQodGljaywge3R5cGU6ICJzY3JvbGwiLCB4LCB5LCBk
ZWx0YVgsIGRlbHRhWSwgb3JpZ2lufSk7CisgICAgICBpZiAoZHVyYXRpb24pIHsKKyAgICAgICAg
dGhpcy5hY3Rpb25zLmdldCh0aWNrKS5kdXJhdGlvbiA9IGR1cmF0aW9uOworICAgICAgfQorICAg
IH0sCisKKyAgICBhZGRQYXVzZTogZnVuY3Rpb24oYWN0aW9ucywgZHVyYXRpb24pIHsKKyAgICAg
IGxldCB0aWNrID0gYWN0aW9ucy50aWNrSWR4OworICAgICAgaWYgKHRoaXMuYWN0aW9ucy5oYXMo
dGljaykpIHsKKyAgICAgICAgdGljayA9IGFjdGlvbnMuYWRkVGljaygpLnRpY2tJZHg7CisgICAg
ICB9CisgICAgICB0aGlzLmFjdGlvbnMuc2V0KHRpY2ssIHt0eXBlOiAicGF1c2UiLCBkdXJhdGlv
bjogZHVyYXRpb259KTsKKyAgICB9LAorICB9OworCiAgIHRlc3RfZHJpdmVyLkFjdGlvbnMgPSBB
Y3Rpb25zOwogfSkoKTsKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWIt
cGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3Rkcml2ZXIuanMgYi9MYXlvdXRUZXN0cy9pbXBv
cnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0ZHJpdmVyLmpzCmluZGV4
IGE4NTg4YjQ0Zjk0Yzc4ZjBhM2MyNTQyMzg1YmNlMjBjZmQxYTY0YzkuLmM1M2IyNDEzNmMwOTFm
MDVlNGZmYmUyODZkMDYwYWJhMGZhNjZjZGYgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2ltcG9y
dGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3Rkcml2ZXIuanMKKysrIGIv
TGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVz
dGRyaXZlci5qcwpAQCAtMSw2ICsxLDcgQEAKIChmdW5jdGlvbigpIHsKICAgICAidXNlIHN0cmlj
dCI7CiAgICAgdmFyIGlkQ291bnRlciA9IDA7CisgICAgbGV0IHRlc3RoYXJuZXNzX2NvbnRleHQg
PSBudWxsOwogCiAgICAgZnVuY3Rpb24gZ2V0SW5WaWV3Q2VudGVyUG9pbnQocmVjdCkgewogICAg
ICAgICB2YXIgbGVmdCA9IE1hdGgubWF4KDAsIHJlY3QubGVmdCk7CkBAIC0xNSw3ICsxNiw4IEBA
CiAgICAgfQogCiAgICAgZnVuY3Rpb24gZ2V0UG9pbnRlckludGVyYWN0YWJsZVBhaW50VHJlZShl
bGVtZW50KSB7Ci0gICAgICAgIGlmICghd2luZG93LmRvY3VtZW50LmNvbnRhaW5zKGVsZW1lbnQp
KSB7CisgICAgICAgIGxldCBlbGVtZW50RG9jdW1lbnQgPSBlbGVtZW50Lm93bmVyRG9jdW1lbnQ7
CisgICAgICAgIGlmICghZWxlbWVudERvY3VtZW50LmNvbnRhaW5zKGVsZW1lbnQpKSB7CiAgICAg
ICAgICAgICByZXR1cm4gW107CiAgICAgICAgIH0KIApAQCAtMjcsMTAgKzI5LDEwIEBACiAKICAg
ICAgICAgdmFyIGNlbnRlclBvaW50ID0gZ2V0SW5WaWV3Q2VudGVyUG9pbnQocmVjdGFuZ2xlc1sw
XSk7CiAKLSAgICAgICAgaWYgKCJlbGVtZW50c0Zyb21Qb2ludCIgaW4gZG9jdW1lbnQpIHsKLSAg
ICAgICAgICAgIHJldHVybiBkb2N1bWVudC5lbGVtZW50c0Zyb21Qb2ludChjZW50ZXJQb2ludFsw
XSwgY2VudGVyUG9pbnRbMV0pOwotICAgICAgICB9IGVsc2UgaWYgKCJtc0VsZW1lbnRzRnJvbVBv
aW50IiBpbiBkb2N1bWVudCkgewotICAgICAgICAgICAgdmFyIHJ2ID0gZG9jdW1lbnQubXNFbGVt
ZW50c0Zyb21Qb2ludChjZW50ZXJQb2ludFswXSwgY2VudGVyUG9pbnRbMV0pOworICAgICAgICBp
ZiAoImVsZW1lbnRzRnJvbVBvaW50IiBpbiBlbGVtZW50RG9jdW1lbnQpIHsKKyAgICAgICAgICAg
IHJldHVybiBlbGVtZW50RG9jdW1lbnQuZWxlbWVudHNGcm9tUG9pbnQoY2VudGVyUG9pbnRbMF0s
IGNlbnRlclBvaW50WzFdKTsKKyAgICAgICAgfSBlbHNlIGlmICgibXNFbGVtZW50c0Zyb21Qb2lu
dCIgaW4gZWxlbWVudERvY3VtZW50KSB7CisgICAgICAgICAgICB2YXIgcnYgPSBlbGVtZW50RG9j
dW1lbnQubXNFbGVtZW50c0Zyb21Qb2ludChjZW50ZXJQb2ludFswXSwgY2VudGVyUG9pbnRbMV0p
OwogICAgICAgICAgICAgcmV0dXJuIEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHJ2ID8gcnYg
OiBbXSk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoImRv
Y3VtZW50LmVsZW1lbnRzRnJvbVBvaW50IHVuc3VwcG9ydGVkIik7CkBAIC00Nyw2ICs0OSwzMSBA
QAogICAgICAqIEBuYW1lc3BhY2UKICAgICAgKi8KICAgICB3aW5kb3cudGVzdF9kcml2ZXIgPSB7
CisgICAgICAgIC8qKgorICAgICAgICAgKiBTZXQgdGhlIGNvbnRleHQgaW4gd2hpY2ggdGVzdGhh
cm5lc3MuanMgaXMgbG9hZGVkCisgICAgICAgICAqCisgICAgICAgICAqIEBwYXJhbSB7V2luZG93
UHJveHl9IGNvbnRleHQgLSB0aGUgd2luZG93IGNvbnRhaW5pbmcgdGVzdGhhcm5lc3MuanMKKyAg
ICAgICAgICoqLworICAgICAgICBzZXRfdGVzdF9jb250ZXh0OiBmdW5jdGlvbihjb250ZXh0KSB7
CisgICAgICAgICAgaWYgKHdpbmRvdy50ZXN0X2RyaXZlcl9pbnRlcm5hbC5zZXRfdGVzdF9jb250
ZXh0KSB7CisgICAgICAgICAgICB3aW5kb3cudGVzdF9kcml2ZXJfaW50ZXJuYWwuc2V0X3Rlc3Rf
Y29udGV4dChjb250ZXh0KTsKKyAgICAgICAgICB9CisgICAgICAgICAgdGVzdGhhcm5lc3NfY29u
dGV4dCA9IGNvbnRleHQ7CisgICAgICAgIH0sCisKKyAgICAgICAgLyoqCisgICAgICAgICAqIHBv
c3RNZXNzYWdlIHRvIHRoZSBjb250ZXh0IGNvbnRhaW5pbmcgdGVzdGhhcm5lc3MuanMKKyAgICAg
ICAgICoKKyAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IG1zZyAtIHRoZSBkYXRhIHRvIFBPU1QK
KyAgICAgICAgICoqLworICAgICAgICBtZXNzYWdlX3Rlc3Q6IGZ1bmN0aW9uKG1zZykgeworICAg
ICAgICAgICAgbGV0IHRhcmdldCA9IHRlc3RoYXJuZXNzX2NvbnRleHQ7CisgICAgICAgICAgICBp
ZiAodGVzdGhhcm5lc3NfY29udGV4dCA9PT0gbnVsbCkgeworICAgICAgICAgICAgICAgIHRhcmdl
dCA9IHdpbmRvdzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHRhcmdldC5wb3N0TWVzc2Fn
ZShtc2csICIqIik7CisgICAgICAgIH0sCisKICAgICAgICAgLyoqCiAgICAgICAgICAqIFRyaWdn
ZXIgdXNlciBpbnRlcmFjdGlvbiBpbiBvcmRlciB0byBncmFudCBhZGRpdGlvbmFsIHByaXZpbGVn
ZXMgdG8KICAgICAgICAgICogYSBwcm92aWRlZCBmdW5jdGlvbi4KQEAgLTU2LDMwICs4MywzNSBA
QAogICAgICAgICAgKiBAcGFyYW0ge1N0cmluZ30gaW50ZW50IC0gYSBkZXNjcmlwdGlvbiBvZiB0
aGUgYWN0aW9uIHdoaWNoIG11Y2ggYmUKICAgICAgICAgICogICAgICAgICAgICAgICAgICAgICAg
ICAgIHRyaWdnZXJlZCBieSB1c2VyIGludGVyYWN0aW9uCiAgICAgICAgICAqIEBwYXJhbSB7RnVu
Y3Rpb259IGFjdGlvbiAtIGNvZGUgcmVxdWlyaW5nIGVzY2FsYXRlZCBwcml2aWxlZ2VzCisgICAg
ICAgICAqIEBwYXJhbSB7V2luZG93UHJveHl9IGNvbnRleHQgLSBCcm93c2luZyBjb250ZXh0IGlu
IHdoaWNoCisgICAgICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0byBydW4g
dGhlIGNhbGwsIG9yIG51bGwgZm9yIHRoZSBjdXJyZW50CisgICAgICAgICAqICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBicm93c2luZyBjb250ZXh0LgogICAgICAgICAgKgogICAgICAg
ICAgKiBAcmV0dXJucyB7UHJvbWlzZX0gZnVsZmlsbGVkIGZvbGxvd2luZyB1c2VyIGludGVyYWN0
aW9uIGFuZAogICAgICAgICAgKiAgICAgICAgICAgICAgICAgICAgZXhlY3V0aW9uIG9mIHRoZSBw
cm92aWRlZCBgYWN0aW9uYCBmdW5jdGlvbjsKICAgICAgICAgICogICAgICAgICAgICAgICAgICAg
IHJlamVjdGVkIGlmIGludGVyYWN0aW9uIGZhaWxzIG9yIHRoZSBwcm92aWRlZAogICAgICAgICAg
KiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gdGhyb3dzIGFuIGVycm9yCiAgICAgICAgICAq
LwotICAgICAgICBibGVzczogZnVuY3Rpb24oaW50ZW50LCBhY3Rpb24pIHsKLSAgICAgICAgICAg
IHZhciBidXR0b24gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJidXR0b24iKTsKKyAgICAgICAg
Ymxlc3M6IGZ1bmN0aW9uKGludGVudCwgYWN0aW9uLCBjb250ZXh0PW51bGwpIHsKKyAgICAgICAg
ICAgIGxldCBjb250ZXh0RG9jdW1lbnQgPSBjb250ZXh0ID8gY29udGV4dC5kb2N1bWVudCA6IGRv
Y3VtZW50OworICAgICAgICAgICAgdmFyIGJ1dHRvbiA9IGNvbnRleHREb2N1bWVudC5jcmVhdGVF
bGVtZW50KCJidXR0b24iKTsKICAgICAgICAgICAgIGJ1dHRvbi5pbm5lckhUTUwgPSAiVGhpcyB0
ZXN0IHJlcXVpcmVzIHVzZXIgaW50ZXJhY3Rpb24uPGJyIC8+IiArCiAgICAgICAgICAgICAgICAg
IlBsZWFzZSBjbGljayBoZXJlIHRvIGFsbG93ICIgKyBpbnRlbnQgKyAiLiI7CiAgICAgICAgICAg
ICBidXR0b24uaWQgPSAid3B0LXRlc3QtZHJpdmVyLWJsZXNzLSIgKyAoaWRDb3VudGVyICs9IDEp
OwotICAgICAgICAgICAgY29uc3QgZWxlbSA9IGRvY3VtZW50LmJvZHkgfHwgZG9jdW1lbnQuZG9j
dW1lbnRFbGVtZW50OworICAgICAgICAgICAgY29uc3QgZWxlbSA9IGNvbnRleHREb2N1bWVudC5i
b2R5IHx8IGNvbnRleHREb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7CiAgICAgICAgICAgICBlbGVt
LmFwcGVuZENoaWxkKGJ1dHRvbik7CiAKLSAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShm
dW5jdGlvbihyZXNvbHZlLCByZWplY3QpIHsKLSAgICAgICAgICAgICAgICAgICAgYnV0dG9uLmFk
ZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwgcmVzb2x2ZSk7CisgICAgICAgICAgICBsZXQgd2FpdF9j
bGljayA9IG5ldyBQcm9taXNlKHJlc29sdmUgPT4gYnV0dG9uLmFkZEV2ZW50TGlzdGVuZXIoImNs
aWNrIiwgcmVzb2x2ZSkpOwogCi0gICAgICAgICAgICAgICAgICAgIHRlc3RfZHJpdmVyLmNsaWNr
KGJ1dHRvbikuY2F0Y2gocmVqZWN0KTsKLSAgICAgICAgICAgICAgICB9KS50aGVuKGZ1bmN0aW9u
KCkgeworICAgICAgICAgICAgcmV0dXJuIHRlc3RfZHJpdmVyLmNsaWNrKGJ1dHRvbikKKyAgICAg
ICAgICAgICAgICAudGhlbih3YWl0X2NsaWNrKQorICAgICAgICAgICAgICAgIC50aGVuKGZ1bmN0
aW9uKCkgewogICAgICAgICAgICAgICAgICAgICBidXR0b24ucmVtb3ZlKCk7CiAKICAgICAgICAg
ICAgICAgICAgICAgaWYgKHR5cGVvZiBhY3Rpb24gPT09ICJmdW5jdGlvbiIpIHsKICAgICAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBhY3Rpb24oKTsKICAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICAgICAgICAgICB9KTsKICAg
ICAgICAgfSwKIApAQCAtOTUsMTQgKzEyNyw2IEBACiAgICAgICAgICAqICAgICAgICAgICAgICAg
ICAgICB0aGUgY2FzZXMgdGhlIFdlYkRyaXZlciBjb21tYW5kIGVycm9ycwogICAgICAgICAgKi8K
ICAgICAgICAgY2xpY2s6IGZ1bmN0aW9uKGVsZW1lbnQpIHsKLSAgICAgICAgICAgIGlmICh3aW5k
b3cudG9wICE9PSB3aW5kb3cpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWpl
Y3QobmV3IEVycm9yKCJjYW4gb25seSBjbGljayBpbiB0b3AtbGV2ZWwgd2luZG93IikpOwotICAg
ICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoIXdpbmRvdy5kb2N1bWVudC5jb250YWlucyhl
bGVtZW50KSkgewotICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJy
b3IoImVsZW1lbnQgaW4gZGlmZmVyZW50IGRvY3VtZW50IG9yIHNoYWRvdyB0cmVlIikpOwotICAg
ICAgICAgICAgfQotCiAgICAgICAgICAgICBpZiAoIWluVmlldyhlbGVtZW50KSkgewogICAgICAg
ICAgICAgICAgIGVsZW1lbnQuc2Nyb2xsSW50b1ZpZXcoe2JlaGF2aW9yOiAiaW5zdGFudCIsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmxvY2s6ICJlbmQiLApAQCAt
MTM1LDE0ICsxNTksNiBAQAogICAgICAgICAgKiAgICAgICAgICAgICAgICAgICAgdGhlIGNhc2Vz
IHRoZSBXZWJEcml2ZXIgY29tbWFuZCBlcnJvcnMKICAgICAgICAgICovCiAgICAgICAgIHNlbmRf
a2V5czogZnVuY3Rpb24oZWxlbWVudCwga2V5cykgewotICAgICAgICAgICAgaWYgKHdpbmRvdy50
b3AgIT09IHdpbmRvdykgewotICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChu
ZXcgRXJyb3IoImNhbiBvbmx5IHNlbmQga2V5cyBpbiB0b3AtbGV2ZWwgd2luZG93IikpOwotICAg
ICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoIXdpbmRvdy5kb2N1bWVudC5jb250YWlucyhl
bGVtZW50KSkgewotICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJy
b3IoImVsZW1lbnQgaW4gZGlmZmVyZW50IGRvY3VtZW50IG9yIHNoYWRvdyB0cmVlIikpOwotICAg
ICAgICAgICAgfQotCiAgICAgICAgICAgICBpZiAoIWluVmlldyhlbGVtZW50KSkgewogICAgICAg
ICAgICAgICAgIGVsZW1lbnQuc2Nyb2xsSW50b1ZpZXcoe2JlaGF2aW9yOiAiaW5zdGFudCIsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmxvY2s6ICJlbmQiLApAQCAt
MTY2LDM0ICsxODIsNDIgQEAKICAgICAgICAgICogaHR0cHM6Ly9naXRodWIuY29tL1dJQ0cvcGFn
ZS1saWZlY3ljbGUvYmxvYi9tYXN0ZXIvUkVBRE1FLm1kfExpZmVjeWNsZSBBUEkKICAgICAgICAg
ICogZm9yIFdlYiBQYWdlc30KICAgICAgICAgICoKKyAgICAgICAgICogQHBhcmFtIHtXaW5kb3dQ
cm94eX0gY29udGV4dCAtIEJyb3dzaW5nIGNvbnRleHQgaW4gd2hpY2gKKyAgICAgICAgICogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvIHJ1biB0aGUgY2FsbCwgb3IgbnVsbCBmb3Ig
dGhlIGN1cnJlbnQKKyAgICAgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJy
b3dzaW5nIGNvbnRleHQuCisgICAgICAgICAqCiAgICAgICAgICAqIEByZXR1cm5zIHtQcm9taXNl
fSBmdWxmaWxsZWQgYWZ0ZXIgdGhlIGZyZWV6ZSByZXF1ZXN0IGlzIHNlbnQsIG9yIHJlamVjdGVk
CiAgICAgICAgICAqICAgICAgICAgICAgICAgICAgICBpbiBjYXNlIHRoZSBXZWJEcml2ZXIgY29t
bWFuZCBlcnJvcnMKICAgICAgICAgICovCi0gICAgICAgIGZyZWV6ZTogZnVuY3Rpb24oKSB7Cisg
ICAgICAgIGZyZWV6ZTogZnVuY3Rpb24oY29udGV4dD1udWxsKSB7CiAgICAgICAgICAgICByZXR1
cm4gd2luZG93LnRlc3RfZHJpdmVyX2ludGVybmFsLmZyZWV6ZSgpOwogICAgICAgICB9LAogCiAg
ICAgICAgIC8qKgogICAgICAgICAgKiBTZW5kIGEgc2VxdWVuY2Ugb2YgYWN0aW9ucwogICAgICAg
ICAgKgotICAgICAgICAgKiBUaGlzIGZ1bmN0aW9uIHNlbmRzIGEgc2VxdWVuY2Ugb2YgYWN0aW9u
cyB0byB0aGUgdG9wIGxldmVsIHdpbmRvdworICAgICAgICAgKiBUaGlzIGZ1bmN0aW9uIHNlbmRz
IGEgc2VxdWVuY2Ugb2YgYWN0aW9ucwogICAgICAgICAgKiB0byBwZXJmb3JtLiBJdCBpcyBtb2Rl
bGVkIGFmdGVyIHRoZSBiZWhhdmlvdXIgb2Yge0BsaW5rCiAgICAgICAgICAqIGh0dHBzOi8vdzNj
LmdpdGh1Yi5pby93ZWJkcml2ZXIvI2FjdGlvbnN8V2ViRHJpdmVyIEFjdGlvbnMgQ29tbWFuZH0K
ICAgICAgICAgICoKICAgICAgICAgICogQHBhcmFtIHtBcnJheX0gYWN0aW9ucyAtIGFuIGFycmF5
IG9mIGFjdGlvbnMuIFRoZSBmb3JtYXQgaXMgdGhlIHNhbWUgYXMgdGhlIGFjdGlvbnMKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3BlcnR5IG9mIHRoZSBXZWJEcml2ZXIg
Y29tbWFuZCB7QGxpbmsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGh0dHBz
Oi8vdzNjLmdpdGh1Yi5pby93ZWJkcml2ZXIvI3BlcmZvcm0tYWN0aW9uc3xQZXJmb3JtCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBY3Rpb25zfSBjb21tYW5kLiBFYWNoIGVs
ZW1lbnQgaXMgYW4gb2JqZWN0IHJlcHJlc2VudGluZyBhbgotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaW5wdXQgc291cmNlIGFuZCBlYWNoIGlucHV0IHNvdXJjZSBpdHNlbGYg
aGFzIGFuIGFjdGlvbnMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3Bl
cnR5IGRldGFpbGluZyB0aGUgYmVoYXZpb3VyIG9mIHRoYXQgc291cmNlIGF0IGVhY2ggdGltZXN0
ZXAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChvciB0aWNrKS4gQXV0aG9y
cyBhcmUgbm90IGV4cGVjdGVkIHRvIGNvbnN0cnVjdCB0aGUgYWN0aW9ucwotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgc2VxdWVuY2UgYnkgaGFuZCwgYnV0IHRvIHVzZSB0aGUg
YnVpbGRlciBhcGkgcHJvdmlkZWQgaW4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHRlc3Rkcml2ZXItYWN0aW9ucy5qcworICAgICAgICAgKiAgICAgICAgICAgICAgICAgICAg
ICAgICAgcHJvcGVydHkgb2YgdGhlIFdlYkRyaXZlciBjb21tYW5kIHtAbGluaworICAgICAgICAg
KiAgICAgICAgICAgICAgICAgICAgICAgICAgaHR0cHM6Ly93M2MuZ2l0aHViLmlvL3dlYmRyaXZl
ci8jcGVyZm9ybS1hY3Rpb25zfFBlcmZvcm0KKyAgICAgICAgICogICAgICAgICAgICAgICAgICAg
ICAgICAgIEFjdGlvbnN9IGNvbW1hbmQuIEVhY2ggZWxlbWVudCBpcyBhbiBvYmplY3QgcmVwcmVz
ZW50aW5nIGFuCisgICAgICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dCBzb3Vy
Y2UgYW5kIGVhY2ggaW5wdXQgc291cmNlIGl0c2VsZiBoYXMgYW4gYWN0aW9ucworICAgICAgICAg
KiAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvcGVydHkgZGV0YWlsaW5nIHRoZSBiZWhhdmlv
dXIgb2YgdGhhdCBzb3VyY2UgYXQgZWFjaCB0aW1lc3RlcAorICAgICAgICAgKiAgICAgICAgICAg
ICAgICAgICAgICAgICAgKG9yIHRpY2spLiBBdXRob3JzIGFyZSBub3QgZXhwZWN0ZWQgdG8gY29u
c3RydWN0IHRoZSBhY3Rpb25zCisgICAgICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICBz
ZXF1ZW5jZSBieSBoYW5kLCBidXQgdG8gdXNlIHRoZSBidWlsZGVyIGFwaSBwcm92aWRlZCBpbgor
ICAgICAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgdGVzdGRyaXZlci1hY3Rpb25zLmpz
CisgICAgICAgICAqIEBwYXJhbSB7V2luZG93UHJveHl9IGNvbnRleHQgLSBCcm93c2luZyBjb250
ZXh0IGluIHdoaWNoCisgICAgICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0
byBydW4gdGhlIGNhbGwsIG9yIG51bGwgZm9yIHRoZSBjdXJyZW50CisgICAgICAgICAqICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBicm93c2luZyBjb250ZXh0LgorICAgICAgICAgKgog
ICAgICAgICAgKiBAcmV0dXJucyB7UHJvbWlzZX0gZnVmaWxlZCBhZnRlciB0aGUgYWN0aW9ucyBh
cmUgcGVyZm9ybWVkLCBvciByZWplY3RlZCBpbgogICAgICAgICAgKiAgICAgICAgICAgICAgICAg
ICAgdGhlIGNhc2VzIHRoZSBXZWJEcml2ZXIgY29tbWFuZCBlcnJvcnMKICAgICAgICAgICovCi0g
ICAgICAgIGFjdGlvbl9zZXF1ZW5jZTogZnVuY3Rpb24oYWN0aW9ucykgewotICAgICAgICAgICAg
cmV0dXJuIHdpbmRvdy50ZXN0X2RyaXZlcl9pbnRlcm5hbC5hY3Rpb25fc2VxdWVuY2UoYWN0aW9u
cyk7CisgICAgICAgIGFjdGlvbl9zZXF1ZW5jZTogZnVuY3Rpb24oYWN0aW9ucywgY29udGV4dD1u
dWxsKSB7CisgICAgICAgICAgICByZXR1cm4gd2luZG93LnRlc3RfZHJpdmVyX2ludGVybmFsLmFj
dGlvbl9zZXF1ZW5jZShhY3Rpb25zLCBjb250ZXh0KTsKICAgICAgICAgfSwKIAogICAgICAgICAv
KioKQEAgLTIwMywxMSArMjI3LDE1IEBACiAgICAgICAgICAqIGJ5IFJlcG9ydGluZ09ic2VydmVy
KSBmb3IgdGVzdGluZyBwdXJwb3NlcywgYXMgZGVzY3JpYmVkIGluCiAgICAgICAgICAqIHtAbGlu
ayBodHRwczovL3czYy5naXRodWIuaW8vcmVwb3J0aW5nLyNnZW5lcmF0ZS10ZXN0LXJlcG9ydC1j
b21tYW5kfQogICAgICAgICAgKgorICAgICAgICAgKiBAcGFyYW0ge1dpbmRvd1Byb3h5fSBjb250
ZXh0IC0gQnJvd3NpbmcgY29udGV4dCBpbiB3aGljaAorICAgICAgICAgKiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdG8gcnVuIHRoZSBjYWxsLCBvciBudWxsIGZvciB0aGUgY3VycmVu
dAorICAgICAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJvd3NpbmcgY29u
dGV4dC4KKyAgICAgICAgICoKICAgICAgICAgICogQHJldHVybnMge1Byb21pc2V9IGZ1bGZpbGxl
ZCBhZnRlciB0aGUgcmVwb3J0IGlzIGdlbmVyYXRlZCwgb3IKICAgICAgICAgICogICAgICAgICAg
ICAgICAgICAgIHJlamVjdGVkIGlmIHRoZSByZXBvcnQgZ2VuZXJhdGlvbiBmYWlscwogICAgICAg
ICAgKi8KLSAgICAgICAgZ2VuZXJhdGVfdGVzdF9yZXBvcnQ6IGZ1bmN0aW9uKG1lc3NhZ2UpIHsK
LSAgICAgICAgICAgIHJldHVybiB3aW5kb3cudGVzdF9kcml2ZXJfaW50ZXJuYWwuZ2VuZXJhdGVf
dGVzdF9yZXBvcnQobWVzc2FnZSk7CisgICAgICAgIGdlbmVyYXRlX3Rlc3RfcmVwb3J0OiBmdW5j
dGlvbihtZXNzYWdlLCBjb250ZXh0PW51bGwpIHsKKyAgICAgICAgICAgIHJldHVybiB3aW5kb3cu
dGVzdF9kcml2ZXJfaW50ZXJuYWwuZ2VuZXJhdGVfdGVzdF9yZXBvcnQobWVzc2FnZSwgY29udGV4
dCk7CiAgICAgICAgIH0sCiAKICAgICAgICAgLyoqCkBAIC0yMjEsNiArMjQ5LDkgQEAKICAgICAg
ICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3QKICAgICAgICAgICogQHBh
cmFtIHtTdHJpbmd9IHN0YXRlIC0gdGhlIHN0YXRlIG9mIHRoZSBwZXJtaXNzaW9uCiAgICAgICAg
ICAqIEBwYXJhbSB7Ym9vbGVhbn0gb25lX3JlYWxtIC0gT3B0aW9uYWwuIFdoZXRoZXIgdGhlIHBl
cm1pc3Npb24gYXBwbGllcyB0byBvbmx5IG9uZSByZWFsbQorICAgICAgICAgKiBAcGFyYW0ge1dp
bmRvd1Byb3h5fSBjb250ZXh0IC0gQnJvd3NpbmcgY29udGV4dCBpbiB3aGljaAorICAgICAgICAg
KiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gcnVuIHRoZSBjYWxsLCBvciBudWxs
IGZvciB0aGUgY3VycmVudAorICAgICAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgYnJvd3NpbmcgY29udGV4dC4KICAgICAgICAgICoKICAgICAgICAgICogVGhlIGFib3ZlIHBh
cmFtcyBhcmUgdXNlZCB0byBjcmVhdGUgYSBbUGVybWlzc2lvblNldFBhcmFtZXRlcnNde0BsaW5r
CiAgICAgICAgICAqIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby9wZXJtaXNzaW9ucy8jZGljdGRlZi1w
ZXJtaXNzaW9uc2V0cGFyYW1ldGVyc30gb2JqZWN0CkBAIC0yMjgsMTMgKzI1OSwxMyBAQAogICAg
ICAgICAgKiBAcmV0dXJucyB7UHJvbWlzZX0gZnVsZmlsbGVkIGFmdGVyIHRoZSBwZXJtaXNzaW9u
IGlzIHNldCwgb3IgcmVqZWN0ZWQgaWYgc2V0dGluZyB0aGUKICAgICAgICAgICogICAgICAgICAg
ICAgICAgICAgIHBlcm1pc3Npb24gZmFpbHMKICAgICAgICAgICovCi0gICAgICAgIHNldF9wZXJt
aXNzaW9uOiBmdW5jdGlvbihkZXNjcmlwdG9yLCBzdGF0ZSwgb25lX3JlYWxtKSB7CisgICAgICAg
IHNldF9wZXJtaXNzaW9uOiBmdW5jdGlvbihkZXNjcmlwdG9yLCBzdGF0ZSwgb25lX3JlYWxtLCBj
b250ZXh0PW51bGwpIHsKICAgICAgICAgICAgIGxldCBwZXJtaXNzaW9uX3BhcmFtcyA9IHsKICAg
ICAgICAgICAgICAgZGVzY3JpcHRvciwKICAgICAgICAgICAgICAgc3RhdGUsCiAgICAgICAgICAg
ICAgIG9uZVJlYWxtOiBvbmVfcmVhbG0sCiAgICAgICAgICAgICB9OwotICAgICAgICAgICAgcmV0
dXJuIHdpbmRvdy50ZXN0X2RyaXZlcl9pbnRlcm5hbC5zZXRfcGVybWlzc2lvbihwZXJtaXNzaW9u
X3BhcmFtcyk7CisgICAgICAgICAgICByZXR1cm4gd2luZG93LnRlc3RfZHJpdmVyX2ludGVybmFs
LnNldF9wZXJtaXNzaW9uKHBlcm1pc3Npb25fcGFyYW1zLCBjb250ZXh0KTsKICAgICAgICAgfSwK
IAogICAgICAgICAvKioKQEAgLTI0NywxMiArMjc4LDE2IEBACiAgICAgICAgICAqIEBwYXJhbSB7
T2JqZWN0fSBjb25maWcgLSBhbiBbQXV0aGVudGljYXRvciBDb25maWd1cmF0aW9uXXtAbGluawog
ICAgICAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgaHR0cHM6Ly93M2MuZ2l0aHViLmlv
L3dlYmF1dGhuLyNhdXRoZW50aWNhdG9yLWNvbmZpZ3VyYXRpb259CiAgICAgICAgICAqICAgICAg
ICAgICAgICAgICAgICAgICAgICBvYmplY3QKKyAgICAgICAgICogQHBhcmFtIHtXaW5kb3dQcm94
eX0gY29udGV4dCAtIEJyb3dzaW5nIGNvbnRleHQgaW4gd2hpY2gKKyAgICAgICAgICogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHRvIHJ1biB0aGUgY2FsbCwgb3IgbnVsbCBmb3IgdGhl
IGN1cnJlbnQKKyAgICAgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyb3dz
aW5nIGNvbnRleHQuCisgICAgICAgICAqCiAgICAgICAgICAqIEByZXR1cm5zIHtQcm9taXNlfSBm
dWxmaWxsZWQgYWZ0ZXIgdGhlIGF1dGhlbnRpY2F0b3IgaXMgYWRkZWQsIG9yCiAgICAgICAgICAq
ICAgICAgICAgICAgICAgICAgICByZWplY3RlZCBpbiB0aGUgY2FzZXMgdGhlIFdlYkRyaXZlciBj
b21tYW5kCiAgICAgICAgICAqICAgICAgICAgICAgICAgICAgICBlcnJvcnMuIFJldHVybnMgdGhl
IElEIG9mIHRoZSBhdXRoZW50aWNhdG9yCiAgICAgICAgICAqLwotICAgICAgICBhZGRfdmlydHVh
bF9hdXRoZW50aWNhdG9yOiBmdW5jdGlvbihjb25maWcpIHsKLSAgICAgICAgICAgIHJldHVybiB3
aW5kb3cudGVzdF9kcml2ZXJfaW50ZXJuYWwuYWRkX3ZpcnR1YWxfYXV0aGVudGljYXRvcihjb25m
aWcpOworICAgICAgICBhZGRfdmlydHVhbF9hdXRoZW50aWNhdG9yOiBmdW5jdGlvbihjb25maWcs
IGNvbnRleHQ9bnVsbCkgeworICAgICAgICAgICAgcmV0dXJuIHdpbmRvdy50ZXN0X2RyaXZlcl9p
bnRlcm5hbC5hZGRfdmlydHVhbF9hdXRoZW50aWNhdG9yKGNvbmZpZywgY29udGV4dCk7CiAgICAg
ICAgIH0sCiAKICAgICAgICAgLyoqCkBAIC0yNjQsMTMgKzI5OSwxNiBAQAogICAgICAgICAgKgog
ICAgICAgICAgKiBAcGFyYW0ge1N0cmluZ30gYXV0aGVudGljYXRvcl9pZCAtIHRoZSBJRCBvZiB0
aGUgYXV0aGVudGljYXRvciB0byBiZQogICAgICAgICAgKiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHJlbW92ZWQuCisgICAgICAgICAqIEBwYXJhbSB7V2luZG93UHJveHl9IGNv
bnRleHQgLSBCcm93c2luZyBjb250ZXh0IGluIHdoaWNoCisgICAgICAgICAqICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB0byBydW4gdGhlIGNhbGwsIG9yIG51bGwgZm9yIHRoZSBjdXJy
ZW50CisgICAgICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicm93c2luZyBj
b250ZXh0LgogICAgICAgICAgKgogICAgICAgICAgKiBAcmV0dXJucyB7UHJvbWlzZX0gZnVsZmls
bGVkIGFmdGVyIHRoZSBhdXRoZW50aWNhdG9yIGlzIHJlbW92ZWQsIG9yCiAgICAgICAgICAqICAg
ICAgICAgICAgICAgICAgICByZWplY3RlZCBpbiB0aGUgY2FzZXMgdGhlIFdlYkRyaXZlciBjb21t
YW5kCiAgICAgICAgICAqICAgICAgICAgICAgICAgICAgICBlcnJvcnMKICAgICAgICAgICovCi0g
ICAgICAgIHJlbW92ZV92aXJ0dWFsX2F1dGhlbnRpY2F0b3I6IGZ1bmN0aW9uKGF1dGhlbnRpY2F0
b3JfaWQpIHsKLSAgICAgICAgICAgIHJldHVybiB3aW5kb3cudGVzdF9kcml2ZXJfaW50ZXJuYWwu
cmVtb3ZlX3ZpcnR1YWxfYXV0aGVudGljYXRvcihhdXRoZW50aWNhdG9yX2lkKTsKKyAgICAgICAg
cmVtb3ZlX3ZpcnR1YWxfYXV0aGVudGljYXRvcjogZnVuY3Rpb24oYXV0aGVudGljYXRvcl9pZCwg
Y29udGV4dD1udWxsKSB7CisgICAgICAgICAgICByZXR1cm4gd2luZG93LnRlc3RfZHJpdmVyX2lu
dGVybmFsLnJlbW92ZV92aXJ0dWFsX2F1dGhlbnRpY2F0b3IoYXV0aGVudGljYXRvcl9pZCwgY29u
dGV4dCk7CiAgICAgICAgIH0sCiAKICAgICAgICAgLyoqCkBAIC0yODIsMTMgKzMyMCwxNiBAQAog
ICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gY3JlZGVudGlhbCAtIEEgW0NyZWRlbnRpYWwgUGFy
YW1ldGVyc117QGxpbmsKICAgICAgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBo
dHRwczovL3czYy5naXRodWIuaW8vd2ViYXV0aG4vI2NyZWRlbnRpYWwtcGFyYW1ldGVyc30KICAg
ICAgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3QKKyAgICAgICAgICog
QHBhcmFtIHtXaW5kb3dQcm94eX0gY29udGV4dCAtIEJyb3dzaW5nIGNvbnRleHQgaW4gd2hpY2gK
KyAgICAgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvIHJ1biB0aGUgY2Fs
bCwgb3IgbnVsbCBmb3IgdGhlIGN1cnJlbnQKKyAgICAgICAgICogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGJyb3dzaW5nIGNvbnRleHQuCiAgICAgICAgICAqCiAgICAgICAgICAqIEBy
ZXR1cm5zIHtQcm9taXNlfSBmdWxmaWxsZWQgYWZ0ZXIgdGhlIGNyZWRlbnRpYWwgaXMgYWRkZWQs
IG9yCiAgICAgICAgICAqICAgICAgICAgICAgICAgICAgICByZWplY3RlZCBpbiB0aGUgY2FzZXMg
dGhlIFdlYkRyaXZlciBjb21tYW5kCiAgICAgICAgICAqICAgICAgICAgICAgICAgICAgICBlcnJv
cnMKICAgICAgICAgICovCi0gICAgICAgIGFkZF9jcmVkZW50aWFsOiBmdW5jdGlvbihhdXRoZW50
aWNhdG9yX2lkLCBjcmVkZW50aWFsKSB7Ci0gICAgICAgICAgICByZXR1cm4gd2luZG93LnRlc3Rf
ZHJpdmVyX2ludGVybmFsLmFkZF9jcmVkZW50aWFsKGF1dGhlbnRpY2F0b3JfaWQsIGNyZWRlbnRp
YWwpOworICAgICAgICBhZGRfY3JlZGVudGlhbDogZnVuY3Rpb24oYXV0aGVudGljYXRvcl9pZCwg
Y3JlZGVudGlhbCwgY29udGV4dD1udWxsKSB7CisgICAgICAgICAgICByZXR1cm4gd2luZG93LnRl
c3RfZHJpdmVyX2ludGVybmFsLmFkZF9jcmVkZW50aWFsKGF1dGhlbnRpY2F0b3JfaWQsIGNyZWRl
bnRpYWwsIGNvbnRleHQpOwogICAgICAgICB9LAogCiAgICAgICAgIC8qKgpAQCAtMzAwLDYgKzM0
MSw5IEBACiAgICAgICAgICAqIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby93ZWJhdXRobi8jc2N0bi1h
dXRvbWF0aW9uLWdldC1jcmVkZW50aWFscwogICAgICAgICAgKgogICAgICAgICAgKiBAcGFyYW0g
e1N0cmluZ30gYXV0aGVudGljYXRvcl9pZCAtIHRoZSBJRCBvZiB0aGUgYXV0aGVudGljYXRvcgor
ICAgICAgICAgKiBAcGFyYW0ge1dpbmRvd1Byb3h5fSBjb250ZXh0IC0gQnJvd3NpbmcgY29udGV4
dCBpbiB3aGljaAorICAgICAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG8g
cnVuIHRoZSBjYWxsLCBvciBudWxsIGZvciB0aGUgY3VycmVudAorICAgICAgICAgKiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgYnJvd3NpbmcgY29udGV4dC4KICAgICAgICAgICoKICAg
ICAgICAgICogQHJldHVybnMge1Byb21pc2V9IGZ1bGZpbGxlZCBhZnRlciB0aGUgY3JlZGVudGlh
bHMgYXJlIHJldHVybmVkLCBvcgogICAgICAgICAgKiAgICAgICAgICAgICAgICAgICAgcmVqZWN0
ZWQgaW4gdGhlIGNhc2VzIHRoZSBXZWJEcml2ZXIgY29tbWFuZApAQCAtMzA3LDggKzM1MSw4IEBA
CiAgICAgICAgICAqICAgICAgICAgICAgICAgICAgICBQYXJhbWV0ZXJzXXtAbGluawogICAgICAg
ICAgKiAgICAgICAgICAgICAgICAgICAgaHR0cHM6Ly93M2MuZ2l0aHViLmlvL3dlYmF1dGhuLyNj
cmVkZW50aWFsLXBhcmFtZXRlcnN9CiAgICAgICAgICAqLwotICAgICAgICBnZXRfY3JlZGVudGlh
bHM6IGZ1bmN0aW9uKGF1dGhlbnRpY2F0b3JfaWQpIHsKLSAgICAgICAgICAgIHJldHVybiB3aW5k
b3cudGVzdF9kcml2ZXJfaW50ZXJuYWwuZ2V0X2NyZWRlbnRpYWxzKGF1dGhlbnRpY2F0b3JfaWQp
OworICAgICAgICBnZXRfY3JlZGVudGlhbHM6IGZ1bmN0aW9uKGF1dGhlbnRpY2F0b3JfaWQsIGNv
bnRleHQ9bnVsbCkgeworICAgICAgICAgICAgcmV0dXJuIHdpbmRvdy50ZXN0X2RyaXZlcl9pbnRl
cm5hbC5nZXRfY3JlZGVudGlhbHMoYXV0aGVudGljYXRvcl9pZCwgY29udGV4dD1udWxsKTsKICAg
ICAgICAgfSwKIAogICAgICAgICAvKioKQEAgLTMxOCwxMyArMzYyLDE2IEBACiAgICAgICAgICAq
CiAgICAgICAgICAqIEBwYXJhbSB7U3RyaW5nfSBhdXRoZW50aWNhdG9yX2lkIC0gdGhlIElEIG9m
IHRoZSBhdXRoZW50aWNhdG9yCiAgICAgICAgICAqIEBwYXJhbSB7U3RyaW5nfSBjcmVkZW50aWFs
X2lkIC0gdGhlIElEIG9mIHRoZSBjcmVkZW50aWFsCisgICAgICAgICAqIEBwYXJhbSB7V2luZG93
UHJveHl9IGNvbnRleHQgLSBCcm93c2luZyBjb250ZXh0IGluIHdoaWNoCisgICAgICAgICAqICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0byBydW4gdGhlIGNhbGwsIG9yIG51bGwgZm9y
IHRoZSBjdXJyZW50CisgICAgICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBi
cm93c2luZyBjb250ZXh0LgogICAgICAgICAgKgogICAgICAgICAgKiBAcmV0dXJucyB7UHJvbWlz
ZX0gZnVsZmlsbGVkIGFmdGVyIHRoZSBjcmVkZW50aWFsIGlzIHJlbW92ZWQsIG9yCiAgICAgICAg
ICAqICAgICAgICAgICAgICAgICAgICByZWplY3RlZCBpbiB0aGUgY2FzZXMgdGhlIFdlYkRyaXZl
ciBjb21tYW5kCiAgICAgICAgICAqICAgICAgICAgICAgICAgICAgICBlcnJvcnMuCiAgICAgICAg
ICAqLwotICAgICAgICByZW1vdmVfY3JlZGVudGlhbDogZnVuY3Rpb24oYXV0aGVudGljYXRvcl9p
ZCwgY3JlZGVudGlhbF9pZCkgewotICAgICAgICAgICAgcmV0dXJuIHdpbmRvdy50ZXN0X2RyaXZl
cl9pbnRlcm5hbC5yZW1vdmVfY3JlZGVudGlhbChhdXRoZW50aWNhdG9yX2lkLCBjcmVkZW50aWFs
X2lkKTsKKyAgICAgICAgcmVtb3ZlX2NyZWRlbnRpYWw6IGZ1bmN0aW9uKGF1dGhlbnRpY2F0b3Jf
aWQsIGNyZWRlbnRpYWxfaWQsIGNvbnRleHQ9bnVsbCkgeworICAgICAgICAgICAgcmV0dXJuIHdp
bmRvdy50ZXN0X2RyaXZlcl9pbnRlcm5hbC5yZW1vdmVfY3JlZGVudGlhbChhdXRoZW50aWNhdG9y
X2lkLCBjcmVkZW50aWFsX2lkLCBjb250ZXh0KTsKICAgICAgICAgfSwKIAogICAgICAgICAvKioK
QEAgLTMzMywxMyArMzgwLDE2IEBACiAgICAgICAgICAqIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby93
ZWJhdXRobi8jc2N0bi1hdXRvbWF0aW9uLXJlbW92ZS1hbGwtY3JlZGVudGlhbHMKICAgICAgICAg
ICoKICAgICAgICAgICogQHBhcmFtIHtTdHJpbmd9IGF1dGhlbnRpY2F0b3JfaWQgLSB0aGUgSUQg
b2YgdGhlIGF1dGhlbnRpY2F0b3IKKyAgICAgICAgICogQHBhcmFtIHtXaW5kb3dQcm94eX0gY29u
dGV4dCAtIEJyb3dzaW5nIGNvbnRleHQgaW4gd2hpY2gKKyAgICAgICAgICogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHRvIHJ1biB0aGUgY2FsbCwgb3IgbnVsbCBmb3IgdGhlIGN1cnJl
bnQKKyAgICAgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyb3dzaW5nIGNv
bnRleHQuCiAgICAgICAgICAqCiAgICAgICAgICAqIEByZXR1cm5zIHtQcm9taXNlfSBmdWxmaWxs
ZWQgYWZ0ZXIgdGhlIGNyZWRlbnRpYWxzIGFyZSByZW1vdmVkLCBvcgogICAgICAgICAgKiAgICAg
ICAgICAgICAgICAgICAgcmVqZWN0ZWQgaW4gdGhlIGNhc2VzIHRoZSBXZWJEcml2ZXIgY29tbWFu
ZAogICAgICAgICAgKiAgICAgICAgICAgICAgICAgICAgZXJyb3JzLgogICAgICAgICAgKi8KLSAg
ICAgICAgcmVtb3ZlX2FsbF9jcmVkZW50aWFsczogZnVuY3Rpb24oYXV0aGVudGljYXRvcl9pZCkg
ewotICAgICAgICAgICAgcmV0dXJuIHdpbmRvdy50ZXN0X2RyaXZlcl9pbnRlcm5hbC5yZW1vdmVf
YWxsX2NyZWRlbnRpYWxzKGF1dGhlbnRpY2F0b3JfaWQpOworICAgICAgICByZW1vdmVfYWxsX2Ny
ZWRlbnRpYWxzOiBmdW5jdGlvbihhdXRoZW50aWNhdG9yX2lkLCBjb250ZXh0PW51bGwpIHsKKyAg
ICAgICAgICAgIHJldHVybiB3aW5kb3cudGVzdF9kcml2ZXJfaW50ZXJuYWwucmVtb3ZlX2FsbF9j
cmVkZW50aWFscyhhdXRoZW50aWNhdG9yX2lkLCBjb250ZXh0KTsKICAgICAgICAgfSwKIAogICAg
ICAgICAvKioKQEAgLTM1MSw5ICs0MDEsNDEgQEAKICAgICAgICAgICoKICAgICAgICAgICogQHBh
cmFtIHtTdHJpbmd9IGF1dGhlbnRpY2F0b3JfaWQgLSB0aGUgSUQgb2YgdGhlIGF1dGhlbnRpY2F0
b3IKICAgICAgICAgICogQHBhcmFtIHtib29sZWFufSB1diAtIHRoZSBVc2VyIFZlcmlmaWVkIGZs
YWcKKyAgICAgICAgICogQHBhcmFtIHtXaW5kb3dQcm94eX0gY29udGV4dCAtIEJyb3dzaW5nIGNv
bnRleHQgaW4gd2hpY2gKKyAgICAgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHRvIHJ1biB0aGUgY2FsbCwgb3IgbnVsbCBmb3IgdGhlIGN1cnJlbnQKKyAgICAgICAgICogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyb3dzaW5nIGNvbnRleHQuCisgICAgICAgICAq
LworICAgICAgICBzZXRfdXNlcl92ZXJpZmllZDogZnVuY3Rpb24oYXV0aGVudGljYXRvcl9pZCwg
dXYsIGNvbnRleHQ9bnVsbCkgeworICAgICAgICAgICAgcmV0dXJuIHdpbmRvdy50ZXN0X2RyaXZl
cl9pbnRlcm5hbC5zZXRfdXNlcl92ZXJpZmllZChhdXRoZW50aWNhdG9yX2lkLCB1diwgY29udGV4
dCk7CisgICAgICAgIH0sCisKKyAgICAgICAgLyoqCisgICAgICAgICAqIFNldHMgdGhlIHN0b3Jh
Z2UgYWNjZXNzIHJ1bGUgZm9yIGFuIG9yaWdpbiB3aGVuIGVtYmVkZGVkCisgICAgICAgICAqIGlu
IGEgdGhpcmQtcGFydHkgY29udGV4dC4KKyAgICAgICAgICoKKyAgICAgICAgICoge0BsaW5rIGh0
dHBzOi8vcHJpdmFjeWNnLmdpdGh1Yi5pby9zdG9yYWdlLWFjY2Vzcy8jc2V0LXN0b3JhZ2UtYWNj
ZXNzLWNvbW1hbmR9CisgICAgICAgICAqCisgICAgICAgICAqIEBwYXJhbSB7U3RyaW5nfSBvcmln
aW4gLSBBIHRoaXJkLXBhcnR5IG9yaWdpbiB0byBibG9jayBvciBhbGxvdy4KKyAgICAgICAgICog
ICAgICAgICAgICAgICAgICAgICAgICAgIE1heSBiZSAiKiIgdG8gaW5kaWNhdGUgYWxsIG9yaWdp
bnMuCisgICAgICAgICAqIEBwYXJhbSB7U3RyaW5nfSBlbWJlZGRpbmdfb3JpZ2luIC0gYW4gZW1i
ZWRkaW5nIChmaXJzdC1wYXJ0eSkgb3JpZ2luCisgICAgICAgICAqICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgb24gd2hpY2gge29yaWdpbn0ncyBhY2Nlc3Mgc2hvdWxkCisgICAg
ICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmUgYmxvY2tlZCBvciBh
bGxvd2VkLgorICAgICAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1h
eSBiZSAiKiIgdG8gaW5kaWNhdGUgYWxsIG9yaWdpbnMuCisgICAgICAgICAqIEBwYXJhbSB7U3Ry
aW5nfSBzdGF0ZSAtIFRoZSBzdG9yYWdlIGFjY2VzcyBzZXR0aW5nLgorICAgICAgICAgKiAgICAg
ICAgICAgICAgICAgICAgICAgICBNdXN0IGJlIGVpdGhlciAiYWxsb3dlZCIgb3IgImJsb2NrZWQi
LgorICAgICAgICAgKiBAcGFyYW0ge1dpbmRvd1Byb3h5fSBjb250ZXh0IC0gQnJvd3NpbmcgY29u
dGV4dCBpbiB3aGljaAorICAgICAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dG8gcnVuIHRoZSBjYWxsLCBvciBudWxsIGZvciB0aGUgY3VycmVudAorICAgICAgICAgKiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJvd3NpbmcgY29udGV4dC4KKyAgICAgICAgICoK
KyAgICAgICAgICogQHJldHVybnMge1Byb21pc2V9IEZ1bGZpbGxlZCBhZnRlciB0aGUgc3RvcmFn
ZSBhY2Nlc3MgcnVsZSBoYXMgYmVlbgorICAgICAgICAgKiAgICAgICAgICAgICAgICAgICAgc2V0
LCBvciByZWplY3RlZCBpZiBzZXR0aW5nIHRoZSBydWxlIGZhaWxzLgogICAgICAgICAgKi8KLSAg
ICAgICAgc2V0X3VzZXJfdmVyaWZpZWQ6IGZ1bmN0aW9uKGF1dGhlbnRpY2F0b3JfaWQsIHV2KSB7
Ci0gICAgICAgICAgICByZXR1cm4gd2luZG93LnRlc3RfZHJpdmVyX2ludGVybmFsLnNldF91c2Vy
X3ZlcmlmaWVkKGF1dGhlbnRpY2F0b3JfaWQsIHV2KTsKKyAgICAgICAgc2V0X3N0b3JhZ2VfYWNj
ZXNzOiBmdW5jdGlvbihvcmlnaW4sIGVtYmVkZGluZ19vcmlnaW4sIHN0YXRlLCBjb250ZXh0PW51
bGwpIHsKKyAgICAgICAgICAgIGlmIChzdGF0ZSAhPT0gImFsbG93ZWQiICYmIHN0YXRlICE9PSAi
YmxvY2tlZCIpIHsKKyAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoInN0b3JhZ2UgYWNj
ZXNzIHN0YXR1cyBtdXN0IGJlICdhbGxvd2VkJyBvciAnYmxvY2tlZCciKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIGNvbnN0IGJsb2NrZWQgPSBzdGF0ZSA9PT0gImJsb2NrZWQiOworICAg
ICAgICAgICAgcmV0dXJuIHdpbmRvdy50ZXN0X2RyaXZlcl9pbnRlcm5hbC5zZXRfc3RvcmFnZV9h
Y2Nlc3Mob3JpZ2luLCBlbWJlZGRpbmdfb3JpZ2luLCBibG9ja2VkLCBjb250ZXh0KTsKICAgICAg
ICAgfSwKICAgICB9OwogCkBAIC0zNjYsMTMgKzQ0OCw2IEBACiAgICAgICAgICAqLwogICAgICAg
ICBpbl9hdXRvbWF0aW9uOiBmYWxzZSwKIAotICAgICAgICAvKioKLSAgICAgICAgICogV2FpdHMg
Zm9yIGEgdXNlci1pbml0aWF0ZWQgY2xpY2sKLSAgICAgICAgICoKLSAgICAgICAgICogQHBhcmFt
IHtFbGVtZW50fSBlbGVtZW50IC0gZWxlbWVudCB0byBiZSBjbGlja2VkCi0gICAgICAgICAqIEBw
YXJhbSB7e3g6IG51bWJlciwgeTogbnVtYmVyfSBjb29yZHMgLSB2aWV3cG9ydCBjb29yZGluYXRl
cyB0byBjbGljayBhdAotICAgICAgICAgKiBAcmV0dXJucyB7UHJvbWlzZX0gZnVsZmlsbGVkIGFm
dGVyIGNsaWNrIG9jY3VycwotICAgICAgICAgKi8KICAgICAgICAgY2xpY2s6IGZ1bmN0aW9uKGVs
ZW1lbnQsIGNvb3JkcykgewogICAgICAgICAgICAgaWYgKHRoaXMuaW5fYXV0b21hdGlvbikgewog
ICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoJ05vdCBpbXBs
ZW1lbnRlZCcpKTsKQEAgLTM4MywxNCArNDU4LDYgQEAKICAgICAgICAgICAgIH0pOwogICAgICAg
ICB9LAogCi0gICAgICAgIC8qKgotICAgICAgICAgKiBXYWl0cyBmb3IgYW4gZWxlbWVudCB0byBy
ZWNlaXZlIGEgc2VyaWVzIG9mIGtleSBwcmVzc2VzCi0gICAgICAgICAqCi0gICAgICAgICAqIEBw
YXJhbSB7RWxlbWVudH0gZWxlbWVudCAtIGVsZW1lbnQgd2hpY2ggc2hvdWxkIHJlY2V2ZSBrZXkg
cHJlc3NlcwotICAgICAgICAgKiBAcGFyYW0ge1N0cmluZ30ga2V5cyAtIGtleXMgdG8gZXhwZWN0
Ci0gICAgICAgICAqIEByZXR1cm5zIHtQcm9taXNlfSBmdWxmaWxsZWQgYWZ0ZXIga2V5cyBhcmUg
cmVjZWl2ZWQgb3IgcmVqZWN0ZWQgaWYKLSAgICAgICAgICogICAgICAgICAgICAgICAgICAgIGFu
IGluY29ycmVjdCBrZXkgc2VxdWVuY2UgaXMgcmVjZWl2ZWQKLSAgICAgICAgICovCiAgICAgICAg
IHNlbmRfa2V5czogZnVuY3Rpb24oZWxlbWVudCwga2V5cykgewogICAgICAgICAgICAgaWYgKHRo
aXMuaW5fYXV0b21hdGlvbikgewogICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVj
dChuZXcgRXJyb3IoJ05vdCBpbXBsZW1lbnRlZCcpKTsKQEAgLTQyMywxNTAgKzQ5MCw1MiBAQAog
ICAgICAgICAgICAgfSk7CiAgICAgICAgIH0sCiAKLSAgICAgICAgLyoqCi0gICAgICAgICAqIEZy
ZWV6ZSB0aGUgY3VycmVudCBwYWdlCi0gICAgICAgICAqCi0gICAgICAgICAqIEByZXR1cm5zIHtQ
cm9taXNlfSBmdWxmaWxsZWQgYWZ0ZXIgZnJlZXplIHJlcXVlc3QgaXMgc2VudCwgb3RoZXJ3aXNl
Ci0gICAgICAgICAqIGl0IGdldHMgcmVqZWN0ZWQKLSAgICAgICAgICovCi0gICAgICAgIGZyZWV6
ZTogZnVuY3Rpb24oKSB7CisgICAgICAgIGZyZWV6ZTogZnVuY3Rpb24oY29udGV4dD1udWxsKSB7
CiAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKCJ1bmltcGxlbWVu
dGVkIikpOwogICAgICAgICB9LAogCi0gICAgICAgIC8qKgotICAgICAgICAgKiBTZW5kIGEgc2Vx
dWVuY2Ugb2YgcG9pbnRlciBhY3Rpb25zCi0gICAgICAgICAqCi0gICAgICAgICAqIEByZXR1cm5z
IHtQcm9taXNlfSBmdWZpbGxlZCBhZnRlciBhY3Rpb25zIGFyZSBzZW50LCByZWplY3RlZCBpZiBh
bnkgYWN0aW9ucwotICAgICAgICAgKiAgICAgICAgICAgICAgICAgICAgZmFpbAotICAgICAgICAg
Ki8KLSAgICAgICAgYWN0aW9uX3NlcXVlbmNlOiBmdW5jdGlvbihhY3Rpb25zKSB7CisgICAgICAg
IGFjdGlvbl9zZXF1ZW5jZTogZnVuY3Rpb24oYWN0aW9ucywgY29udGV4dD1udWxsKSB7CiAgICAg
ICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKCJ1bmltcGxlbWVudGVkIikp
OwogICAgICAgICB9LAogCi0gICAgICAgIC8qKgotICAgICAgICAgKiBHZW5lcmF0ZXMgYSB0ZXN0
IHJlcG9ydCBvbiB0aGUgY3VycmVudCBwYWdlCi0gICAgICAgICAqCi0gICAgICAgICAqIEBwYXJh
bSB7U3RyaW5nfSBtZXNzYWdlIC0gdGhlIG1lc3NhZ2UgdG8gYmUgY29udGFpbmVkIGluIHRoZSBy
ZXBvcnQKLSAgICAgICAgICogQHJldHVybnMge1Byb21pc2V9IGZ1bGZpbGxlZCBhZnRlciB0aGUg
cmVwb3J0IGlzIGdlbmVyYXRlZCwgb3IKLSAgICAgICAgICogICAgICAgICAgICAgICAgICAgIHJl
amVjdGVkIGlmIHRoZSByZXBvcnQgZ2VuZXJhdGlvbiBmYWlscwotICAgICAgICAgKi8KLSAgICAg
ICAgZ2VuZXJhdGVfdGVzdF9yZXBvcnQ6IGZ1bmN0aW9uKG1lc3NhZ2UpIHsKKyAgICAgICAgZ2Vu
ZXJhdGVfdGVzdF9yZXBvcnQ6IGZ1bmN0aW9uKG1lc3NhZ2UsIGNvbnRleHQ9bnVsbCkgewogICAg
ICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcigidW5pbXBsZW1lbnRlZCIp
KTsKICAgICAgICAgfSwKIAogCi0gICAgICAgIC8qKgotICAgICAgICAgKiBTZXRzIHRoZSBzdGF0
ZSBvZiBhIHBlcm1pc3Npb24KLSAgICAgICAgICoKLSAgICAgICAgICogVGhpcyBmdW5jdGlvbiBz
aW11bGF0ZXMgYSB1c2VyIHNldHRpbmcgYSBwZXJtaXNzaW9uIGludG8gYSBwYXJ0aWN1bGFyIHN0
YXRlIGFzIGRlc2NyaWJlZAotICAgICAgICAgKiBpbiB7QGxpbmsgaHR0cHM6Ly93M2MuZ2l0aHVi
LmlvL3Blcm1pc3Npb25zLyNzZXQtcGVybWlzc2lvbi1jb21tYW5kfQotICAgICAgICAgKgotICAg
ICAgICAgKiBAcGFyYW0ge09iamVjdH0gcGVybWlzc2lvbl9wYXJhbXMgLSBhIFtQZXJtaXNzaW9u
U2V0UGFyYW1ldGVyc117QGxpbnQKLSAgICAgICAgICogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaHR0cHM6Ly93M2MuZ2l0aHViLmlvL3Blcm1pc3Npb25zLyNkaWN0ZGVmLXBl
cm1pc3Npb25zZXRwYXJhbWV0ZXJzfQotICAgICAgICAgKiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBvYmplY3QKLSAgICAgICAgICogQHJldHVybnMge1Byb21pc2V9IGZ1bGZp
bGxlZCBhZnRlciB0aGUgcGVybWlzc2lvbiBpcyBzZXQsIG9yIHJlamVjdGVkIGlmIHNldHRpbmcg
dGhlCi0gICAgICAgICAqICAgICAgICAgICAgICAgICAgICBwZXJtaXNzaW9uIGZhaWxzCi0gICAg
ICAgICAqLwotICAgICAgICBzZXRfcGVybWlzc2lvbjogZnVuY3Rpb24ocGVybWlzc2lvbl9wYXJh
bXMpIHsKKyAgICAgICAgc2V0X3Blcm1pc3Npb246IGZ1bmN0aW9uKHBlcm1pc3Npb25fcGFyYW1z
LCBjb250ZXh0PW51bGwpIHsKICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcg
RXJyb3IoInVuaW1wbGVtZW50ZWQiKSk7CiAgICAgICAgIH0sCiAKLSAgICAgICAgLyoqCi0gICAg
ICAgICAqIENyZWF0ZXMgYSB2aXJ0dWFsIGF1dGhlbnRpY2F0b3IKLSAgICAgICAgICoKLSAgICAg
ICAgICogQHBhcmFtIHtPYmplY3R9IGNvbmZpZyAtIHRoZSBhdXRoZW50aWNhdG9yIGNvbmZpZ3Vy
YXRpb24KLSAgICAgICAgICogQHJldHVybnMge1Byb21pc2V9IGZ1bGZpbGxlZCBhZnRlciB0aGUg
YXV0aGVudGljYXRvciBpcyBhZGRlZCwgb3IKLSAgICAgICAgICogICAgICAgICAgICAgICAgICAg
IHJlamVjdGVkIGluIHRoZSBjYXNlcyB0aGUgV2ViRHJpdmVyIGNvbW1hbmQKLSAgICAgICAgICog
ICAgICAgICAgICAgICAgICAgIGVycm9ycy4KLSAgICAgICAgICovCi0gICAgICAgIGFkZF92aXJ0
dWFsX2F1dGhlbnRpY2F0b3I6IGZ1bmN0aW9uKGNvbmZpZykgeworICAgICAgICBhZGRfdmlydHVh
bF9hdXRoZW50aWNhdG9yOiBmdW5jdGlvbihjb25maWcsIGNvbnRleHQ9bnVsbCkgewogICAgICAg
ICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcigidW5pbXBsZW1lbnRlZCIpKTsK
ICAgICAgICAgfSwKIAotICAgICAgICAvKioKLSAgICAgICAgICogUmVtb3ZlcyBhIHZpcnR1YWwg
YXV0aGVudGljYXRvcgotICAgICAgICAgKgotICAgICAgICAgKiBAcGFyYW0ge1N0cmluZ30gYXV0
aGVudGljYXRvcl9pZCAtIHRoZSBJRCBvZiB0aGUgYXV0aGVudGljYXRvciB0byBiZQotICAgICAg
ICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbW92ZWQuCi0gICAgICAg
ICAqCi0gICAgICAgICAqIEByZXR1cm5zIHtQcm9taXNlfSBmdWxmaWxsZWQgYWZ0ZXIgdGhlIGF1
dGhlbnRpY2F0b3IgaXMgcmVtb3ZlZCwgb3IKLSAgICAgICAgICogICAgICAgICAgICAgICAgICAg
IHJlamVjdGVkIGluIHRoZSBjYXNlcyB0aGUgV2ViRHJpdmVyIGNvbW1hbmQKLSAgICAgICAgICog
ICAgICAgICAgICAgICAgICAgIGVycm9ycwotICAgICAgICAgKi8KLSAgICAgICAgcmVtb3ZlX3Zp
cnR1YWxfYXV0aGVudGljYXRvcjogZnVuY3Rpb24oYXV0aGVudGljYXRvcl9pZCkgeworICAgICAg
ICByZW1vdmVfdmlydHVhbF9hdXRoZW50aWNhdG9yOiBmdW5jdGlvbihhdXRoZW50aWNhdG9yX2lk
LCBjb250ZXh0PW51bGwpIHsKICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcg
RXJyb3IoInVuaW1wbGVtZW50ZWQiKSk7CiAgICAgICAgIH0sCiAKLSAgICAgICAgLyoqCi0gICAg
ICAgICAqIEFkZHMgYSBjcmVkZW50aWFsIHRvIGEgdmlydHVhbCBhdXRoZW50aWNhdG9yCi0gICAg
ICAgICAqCi0gICAgICAgICAqIEBwYXJhbSB7U3RyaW5nfSBhdXRoZW50aWNhdG9yX2lkIC0gdGhl
IElEIG9mIHRoZSBhdXRoZW50aWNhdG9yCi0gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBjcmVk
ZW50aWFsIC0gQSBbQ3JlZGVudGlhbCBQYXJhbWV0ZXJzXXtAbGluawotICAgICAgICAgKiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby93ZWJhdXRobi8j
Y3JlZGVudGlhbC1wYXJhbWV0ZXJzfQotICAgICAgICAgKiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG9iamVjdAotICAgICAgICAgKgotICAgICAgICAgKiBAcmV0dXJucyB7UHJvbWlzZX0g
ZnVsZmlsbGVkIGFmdGVyIHRoZSBjcmVkZW50aWFsIGlzIGFkZGVkLCBvcgotICAgICAgICAgKiAg
ICAgICAgICAgICAgICAgICAgcmVqZWN0ZWQgaW4gdGhlIGNhc2VzIHRoZSBXZWJEcml2ZXIgY29t
bWFuZAotICAgICAgICAgKiAgICAgICAgICAgICAgICAgICAgZXJyb3JzCi0gICAgICAgICAqCi0g
ICAgICAgICAqLwotICAgICAgICBhZGRfY3JlZGVudGlhbDogZnVuY3Rpb24oYXV0aGVudGljYXRv
cl9pZCwgY3JlZGVudGlhbCkgeworICAgICAgICBhZGRfY3JlZGVudGlhbDogZnVuY3Rpb24oYXV0
aGVudGljYXRvcl9pZCwgY3JlZGVudGlhbCwgY29udGV4dD1udWxsKSB7CiAgICAgICAgICAgICBy
ZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKCJ1bmltcGxlbWVudGVkIikpOwogICAgICAg
ICB9LAogCi0gICAgICAgIC8qKgotICAgICAgICAgKiBHZXRzIGFsbCB0aGUgY3JlZGVudGlhbHMg
c3RvcmVkIGluIGFuIGF1dGhlbnRpY2F0b3IKLSAgICAgICAgICoKLSAgICAgICAgICogQHBhcmFt
IHtTdHJpbmd9IGF1dGhlbnRpY2F0b3JfaWQgLSB0aGUgSUQgb2YgdGhlIGF1dGhlbnRpY2F0b3IK
LSAgICAgICAgICoKLSAgICAgICAgICogQHJldHVybnMge1Byb21pc2V9IGZ1bGZpbGxlZCBhZnRl
ciB0aGUgY3JlZGVudGlhbHMgYXJlIHJldHVybmVkLCBvcgotICAgICAgICAgKiAgICAgICAgICAg
ICAgICAgICAgcmVqZWN0ZWQgaW4gdGhlIGNhc2VzIHRoZSBXZWJEcml2ZXIgY29tbWFuZAotICAg
ICAgICAgKiAgICAgICAgICAgICAgICAgICAgZXJyb3JzLiBSZXR1cm5zIGFuIGFycmF5IG9mIFtD
cmVkZW50aWFsCi0gICAgICAgICAqICAgICAgICAgICAgICAgICAgICBQYXJhbWV0ZXJzXXtAbGlu
awotICAgICAgICAgKiAgICAgICAgICAgICAgICAgICAgaHR0cHM6Ly93M2MuZ2l0aHViLmlvL3dl
YmF1dGhuLyNjcmVkZW50aWFsLXBhcmFtZXRlcnN9Ci0gICAgICAgICAqCi0gICAgICAgICAqLwot
ICAgICAgICBnZXRfY3JlZGVudGlhbHM6IGZ1bmN0aW9uKGF1dGhlbnRpY2F0b3JfaWQpIHsKKyAg
ICAgICAgZ2V0X2NyZWRlbnRpYWxzOiBmdW5jdGlvbihhdXRoZW50aWNhdG9yX2lkLCBjb250ZXh0
PW51bGwpIHsKICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoInVu
aW1wbGVtZW50ZWQiKSk7CiAgICAgICAgIH0sCiAKLSAgICAgICAgLyoqCi0gICAgICAgICAqIFJl
bW92ZSBhIGNyZWRlbnRpYWwgc3RvcmVkIGluIGFuIGF1dGhlbnRpY2F0b3IKLSAgICAgICAgICoK
LSAgICAgICAgICogQHBhcmFtIHtTdHJpbmd9IGF1dGhlbnRpY2F0b3JfaWQgLSB0aGUgSUQgb2Yg
dGhlIGF1dGhlbnRpY2F0b3IKLSAgICAgICAgICogQHBhcmFtIHtTdHJpbmd9IGNyZWRlbnRpYWxf
aWQgLSB0aGUgSUQgb2YgdGhlIGNyZWRlbnRpYWwKLSAgICAgICAgICoKLSAgICAgICAgICogQHJl
dHVybnMge1Byb21pc2V9IGZ1bGZpbGxlZCBhZnRlciB0aGUgY3JlZGVudGlhbCBpcyByZW1vdmVk
LCBvcgotICAgICAgICAgKiAgICAgICAgICAgICAgICAgICAgcmVqZWN0ZWQgaW4gdGhlIGNhc2Vz
IHRoZSBXZWJEcml2ZXIgY29tbWFuZAotICAgICAgICAgKiAgICAgICAgICAgICAgICAgICAgZXJy
b3JzLgotICAgICAgICAgKgotICAgICAgICAgKi8KLSAgICAgICAgcmVtb3ZlX2NyZWRlbnRpYWw6
IGZ1bmN0aW9uKGF1dGhlbnRpY2F0b3JfaWQsIGNyZWRlbnRpYWxfaWQpIHsKKyAgICAgICAgcmVt
b3ZlX2NyZWRlbnRpYWw6IGZ1bmN0aW9uKGF1dGhlbnRpY2F0b3JfaWQsIGNyZWRlbnRpYWxfaWQs
IGNvbnRleHQ9bnVsbCkgewogICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBF
cnJvcigidW5pbXBsZW1lbnRlZCIpKTsKICAgICAgICAgfSwKIAotICAgICAgICAvKioKLSAgICAg
ICAgICogUmVtb3ZlcyBhbGwgdGhlIGNyZWRlbnRpYWxzIHN0b3JlZCBpbiBhIHZpcnR1YWwgYXV0
aGVudGljYXRvcgotICAgICAgICAgKgotICAgICAgICAgKiBAcGFyYW0ge1N0cmluZ30gYXV0aGVu
dGljYXRvcl9pZCAtIHRoZSBJRCBvZiB0aGUgYXV0aGVudGljYXRvcgotICAgICAgICAgKgotICAg
ICAgICAgKiBAcmV0dXJucyB7UHJvbWlzZX0gZnVsZmlsbGVkIGFmdGVyIHRoZSBjcmVkZW50aWFs
cyBhcmUgcmVtb3ZlZCwgb3IKLSAgICAgICAgICogICAgICAgICAgICAgICAgICAgIHJlamVjdGVk
IGluIHRoZSBjYXNlcyB0aGUgV2ViRHJpdmVyIGNvbW1hbmQKLSAgICAgICAgICogICAgICAgICAg
ICAgICAgICAgIGVycm9ycy4KLSAgICAgICAgICoKLSAgICAgICAgICovCi0gICAgICAgIHJlbW92
ZV9hbGxfY3JlZGVudGlhbHM6IGZ1bmN0aW9uKGF1dGhlbnRpY2F0b3JfaWQpIHsKKyAgICAgICAg
cmVtb3ZlX2FsbF9jcmVkZW50aWFsczogZnVuY3Rpb24oYXV0aGVudGljYXRvcl9pZCwgY29udGV4
dD1udWxsKSB7CiAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKCJ1
bmltcGxlbWVudGVkIikpOwogICAgICAgICB9LAogCi0gICAgICAgIC8qKgotICAgICAgICAgKiBT
ZXRzIHRoZSBVc2VyIFZlcmlmaWVkIGZsYWcgb24gYW4gYXV0aGVudGljYXRvcgotICAgICAgICAg
KgotICAgICAgICAgKiBAcGFyYW0ge1N0cmluZ30gYXV0aGVudGljYXRvcl9pZCAtIHRoZSBJRCBv
ZiB0aGUgYXV0aGVudGljYXRvcgotICAgICAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IHV2IC0gdGhl
IFVzZXIgVmVyaWZpZWQgZmxhZwotICAgICAgICAgKgotICAgICAgICAgKi8KLSAgICAgICAgc2V0
X3VzZXJfdmVyaWZpZWQ6IGZ1bmN0aW9uKGF1dGhlbnRpY2F0b3JfaWQsIHV2KSB7CisgICAgICAg
IHNldF91c2VyX3ZlcmlmaWVkOiBmdW5jdGlvbihhdXRoZW50aWNhdG9yX2lkLCB1diwgY29udGV4
dD1udWxsKSB7CisgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKCJ1
bmltcGxlbWVudGVkIikpOworICAgICAgICB9LAorCisgICAgICAgIHNldF9zdG9yYWdlX2FjY2Vz
czogZnVuY3Rpb24ob3JpZ2luLCBlbWJlZGRpbmdfb3JpZ2luLCBibG9ja2VkLCBjb250ZXh0PW51
bGwpIHsKICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoInVuaW1w
bGVtZW50ZWQiKSk7CiAgICAgICAgIH0sCiAgICAgfTsKZGlmZiAtLWdpdCBhL0xheW91dFRlc3Rz
L2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3RoYXJuZXNzLmpz
IGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMv
dGVzdGhhcm5lc3MuanMKaW5kZXggMjc0ZGM5ZDdkODkwZGJhN2Q5ODk4NWZlYWM5NTMzZGQ2MjQ1
MDQzMy4uZDUwZTA5NDExN2RmNTZkYjQ5ZDc1ZjE2MjBjNGFiYTUxMzE5ZmMzYyAxMDA2NDQKLS0t
IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMv
dGVzdGhhcm5lc3MuanMKKysrIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9y
bS10ZXN0cy9yZXNvdXJjZXMvdGVzdGhhcm5lc3MuanMKQEAgLTUyMCw2ICs1MjAsNDMgQEAgcG9s
aWNpZXMgYW5kIGNvbnRyaWJ1dGlvbiBmb3JtcyBbM10uCiAgICAgICAgICAgICBPYmplY3QucHJv
dG90eXBlLnRvU3RyaW5nLmNhbGwod29ya2VyKSA9PSAnW29iamVjdCBTZXJ2aWNlV29ya2VyXSc7
CiAgICAgfQogCisgICAgdmFyIHNlZW5fZnVuY19uYW1lID0gT2JqZWN0LmNyZWF0ZShudWxsKTsK
KworICAgIGZ1bmN0aW9uIGdldF90ZXN0X25hbWUoZnVuYywgbmFtZSkKKyAgICB7CisgICAgICAg
IGlmIChuYW1lKSB7CisgICAgICAgICAgICByZXR1cm4gbmFtZTsKKyAgICAgICAgfQorCisgICAg
ICAgIGlmIChmdW5jKSB7CisgICAgICAgICAgICB2YXIgZnVuY19jb2RlID0gZnVuYy50b1N0cmlu
ZygpOworCisgICAgICAgICAgICAvLyBUcnkgYW5kIG1hdGNoIHdpdGggYnJhY2tldHMsIGJ1dCBm
YWxsYmFjayB0byBtYXRjaGluZyB3aXRob3V0CisgICAgICAgICAgICB2YXIgYXJyb3cgPSBmdW5j
X2NvZGUubWF0Y2goL15cKFwpXHMqPT5ccyooPzp7KC4qKX1ccyp8KC4qKSkkLyk7CisKKyAgICAg
ICAgICAgIC8vIENoZWNrIGZvciBKUyBsaW5lIHNlcGFyYXRvcnMKKyAgICAgICAgICAgIGlmIChh
cnJvdyAhPT0gbnVsbCAmJiAhL1tcdTAwMEFcdTAwMERcdTIwMjhcdTIwMjldLy50ZXN0KGZ1bmNf
Y29kZSkpIHsKKyAgICAgICAgICAgICAgICB2YXIgdHJpbW1lZCA9IChhcnJvd1sxXSAhPT0gdW5k
ZWZpbmVkID8gYXJyb3dbMV0gOiBhcnJvd1syXSkudHJpbSgpOworICAgICAgICAgICAgICAgIC8v
IGRyb3AgdHJhaWxpbmcgOyBpZiB0aGVyZSdzIG5vIGVhcmxpZXIgb25lcworICAgICAgICAgICAg
ICAgIHRyaW1tZWQgPSB0cmltbWVkLnJlcGxhY2UoL14oW147XSopKDtccyopKyQvLCAiJDEiKTsK
KworICAgICAgICAgICAgICAgIGlmICh0cmltbWVkKSB7CisgICAgICAgICAgICAgICAgICAgIGxl
dCBuYW1lID0gdHJpbW1lZDsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHNlZW5fZnVuY19uYW1l
W3RyaW1tZWRdKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGlzIHN1YnRlc3QgbmFt
ZSBhbHJlYWR5IGV4aXN0cywgc28gYWRkIGEgc3VmZml4LgorICAgICAgICAgICAgICAgICAgICAg
ICAgbmFtZSArPSAiICIgKyBzZWVuX2Z1bmNfbmFtZVt0cmltbWVkXTsKKyAgICAgICAgICAgICAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlZW5fZnVuY19uYW1lW3Ry
aW1tZWRdID0gMDsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBz
ZWVuX2Z1bmNfbmFtZVt0cmltbWVkXSArPSAxOworICAgICAgICAgICAgICAgICAgICByZXR1cm4g
bmFtZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAg
ICAgICByZXR1cm4gdGVzdF9lbnZpcm9ubWVudC5uZXh0X2RlZmF1bHRfdGVzdF9uYW1lKCk7Cisg
ICAgfQorCiAgICAgLyoKICAgICAgKiBBUEkgZnVuY3Rpb25zCiAgICAgICovCkBAIC01MzAsMTcg
KzU2NywxOCBAQCBwb2xpY2llcyBhbmQgY29udHJpYnV0aW9uIGZvcm1zIFszXS4KICAgICAgICAg
ICAgIHRlc3RzLnN0YXR1cy5tZXNzYWdlID0gJ2B0ZXN0YCBpbnZva2VkIGFmdGVyIGBwcm9taXNl
X3NldHVwYCc7CiAgICAgICAgICAgICB0ZXN0cy5jb21wbGV0ZSgpOwogICAgICAgICB9Ci0gICAg
ICAgIHZhciB0ZXN0X25hbWUgPSBuYW1lID8gbmFtZSA6IHRlc3RfZW52aXJvbm1lbnQubmV4dF9k
ZWZhdWx0X3Rlc3RfbmFtZSgpOworICAgICAgICB2YXIgdGVzdF9uYW1lID0gZ2V0X3Rlc3RfbmFt
ZShmdW5jLCBuYW1lKTsKICAgICAgICAgdmFyIHRlc3Rfb2JqID0gbmV3IFRlc3QodGVzdF9uYW1l
LCBwcm9wZXJ0aWVzKTsKICAgICAgICAgdmFyIHZhbHVlID0gdGVzdF9vYmouc3RlcChmdW5jLCB0
ZXN0X29iaiwgdGVzdF9vYmopOwogCiAgICAgICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7
Ci0gICAgICAgICAgICB2YXIgbXNnID0gIlRlc3QgbmFtZWQgXCIiICsgdGVzdF9uYW1lICsKLSAg
ICAgICAgICAgICAgICAiXCIgaW5hcHByb3ByaWF0ZWx5IHJldHVybmVkIGEgdmFsdWUiOworICAg
ICAgICAgICAgdmFyIG1zZyA9ICdUZXN0IG5hbWVkICInICsgdGVzdF9uYW1lICsKKyAgICAgICAg
ICAgICAgICAnIiBwYXNzZWQgYSBmdW5jdGlvbiB0byBgdGVzdGAgdGhhdCByZXR1cm5lZCBhIHZh
bHVlLic7CiAKICAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgaWYgKHZhbHVlICYm
IHZhbHVlLmhhc093blByb3BlcnR5KCJ0aGVuIikpIHsKLSAgICAgICAgICAgICAgICAgICAgbXNn
ICs9ICIsIGNvbnNpZGVyIHVzaW5nIGBwcm9taXNlX3Rlc3RgIGluc3RlYWQiOworICAgICAgICAg
ICAgICAgIGlmICh2YWx1ZSAmJiB0eXBlb2YgdmFsdWUudGhlbiA9PT0gJ2Z1bmN0aW9uJykgewor
ICAgICAgICAgICAgICAgICAgICBtc2cgKz0gJyBDb25zaWRlciB1c2luZyBgcHJvbWlzZV90ZXN0
YCBpbnN0ZWFkIHdoZW4gJyArCisgICAgICAgICAgICAgICAgICAgICAgICAndXNpbmcgUHJvbWlz
ZXMgb3IgYXN5bmMvYXdhaXQuJzsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9IGNh
dGNoIChlcnIpIHt9CiAKQEAgLTU2NSwxMCArNjAzLDMzIEBAIHBvbGljaWVzIGFuZCBjb250cmli
dXRpb24gZm9ybXMgWzNdLgogICAgICAgICAgICAgbmFtZSA9IGZ1bmM7CiAgICAgICAgICAgICBm
dW5jID0gbnVsbDsKICAgICAgICAgfQotICAgICAgICB2YXIgdGVzdF9uYW1lID0gbmFtZSA/IG5h
bWUgOiB0ZXN0X2Vudmlyb25tZW50Lm5leHRfZGVmYXVsdF90ZXN0X25hbWUoKTsKKyAgICAgICAg
dmFyIHRlc3RfbmFtZSA9IGdldF90ZXN0X25hbWUoZnVuYywgbmFtZSk7CiAgICAgICAgIHZhciB0
ZXN0X29iaiA9IG5ldyBUZXN0KHRlc3RfbmFtZSwgcHJvcGVydGllcyk7CiAgICAgICAgIGlmIChm
dW5jKSB7Ci0gICAgICAgICAgICB0ZXN0X29iai5zdGVwKGZ1bmMsIHRlc3Rfb2JqLCB0ZXN0X29i
aik7CisgICAgICAgICAgICB2YXIgdmFsdWUgPSB0ZXN0X29iai5zdGVwKGZ1bmMsIHRlc3Rfb2Jq
LCB0ZXN0X29iaik7CisKKyAgICAgICAgICAgIC8vIFRlc3QgYXV0aG9ycyBzb21ldGltZXMgcmV0
dXJuIHZhbHVlcyB0byBhc3luY190ZXN0LCBleHBlY3RpbmcgdXMKKyAgICAgICAgICAgIC8vIHRv
IGhhbmRsZSB0aGUgdmFsdWUgc29tZWhvdy4gTWFrZSBkb2luZyBzbyBhIGhhcm5lc3MgZXJyb3Ig
dG8gYmUKKyAgICAgICAgICAgIC8vIGNsZWFyIHRoaXMgaXMgaW52YWxpZCwgYW5kIHBvaW50IGF1
dGhvcnMgdG8gcHJvbWlzZV90ZXN0IGlmIGl0CisgICAgICAgICAgICAvLyBtYXkgYmUgYXBwcm9w
cmlhdGUuCisgICAgICAgICAgICAvLworICAgICAgICAgICAgLy8gTm90ZSB0aGF0IHdlIG9ubHkg
cGVyZm9ybSB0aGlzIGNoZWNrIG9uIHRoZSBpbml0aWFsIGZ1bmN0aW9uCisgICAgICAgICAgICAv
LyBwYXNzZWQgdG8gYXN5bmNfdGVzdCwgbm90IG9uIGFueSBsYXRlciBzdGVwcyAtIHdlIGhhdmVu
J3Qgc2VlbiBhCisgICAgICAgICAgICAvLyBjb25zaXN0ZW50IHByb2JsZW0gd2l0aCB0aG9zZSAo
YW5kIGl0J3MgaGFyZGVyIHRvIGNoZWNrKS4KKyAgICAgICAgICAgIGlmICh2YWx1ZSAhPT0gdW5k
ZWZpbmVkKSB7CisgICAgICAgICAgICAgICAgdmFyIG1zZyA9ICdUZXN0IG5hbWVkICInICsgdGVz
dF9uYW1lICsKKyAgICAgICAgICAgICAgICAgICAgJyIgcGFzc2VkIGEgZnVuY3Rpb24gdG8gYGFz
eW5jX3Rlc3RgIHRoYXQgcmV0dXJuZWQgYSB2YWx1ZS4nOworCisgICAgICAgICAgICAgICAgdHJ5
IHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlICYmIHR5cGVvZiB2YWx1ZS50aGVuID09
PSAnZnVuY3Rpb24nKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBtc2cgKz0gJyBDb25zaWRl
ciB1c2luZyBgcHJvbWlzZV90ZXN0YCBpbnN0ZWFkIHdoZW4gJyArCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgJ3VzaW5nIFByb21pc2VzIG9yIGFzeW5jL2F3YWl0Lic7CisgICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9IGNhdGNoIChlcnIpIHt9CisKKyAgICAgICAg
ICAgICAgICB0ZXN0cy5zZXRfc3RhdHVzKHRlc3RzLnN0YXR1cy5FUlJPUiwgbXNnKTsKKyAgICAg
ICAgICAgICAgICB0ZXN0cy5jb21wbGV0ZSgpOworICAgICAgICAgICAgfQogICAgICAgICB9CiAg
ICAgICAgIHJldHVybiB0ZXN0X29iajsKICAgICB9CkBAIC01NzksNyArNjQwLDcgQEAgcG9saWNp
ZXMgYW5kIGNvbnRyaWJ1dGlvbiBmb3JtcyBbM10uCiAgICAgICAgICAgICBuYW1lID0gZnVuYzsK
ICAgICAgICAgICAgIGZ1bmMgPSBudWxsOwogICAgICAgICB9Ci0gICAgICAgIHZhciB0ZXN0X25h
bWUgPSBuYW1lID8gbmFtZSA6IHRlc3RfZW52aXJvbm1lbnQubmV4dF9kZWZhdWx0X3Rlc3RfbmFt
ZSgpOworICAgICAgICB2YXIgdGVzdF9uYW1lID0gZ2V0X3Rlc3RfbmFtZShmdW5jLCBuYW1lKTsK
ICAgICAgICAgdmFyIHRlc3QgPSBuZXcgVGVzdCh0ZXN0X25hbWUsIHByb3BlcnRpZXMpOwogICAg
ICAgICB0ZXN0Ll9pc19wcm9taXNlX3Rlc3QgPSB0cnVlOwogCkBAIC0xMzIzLDEwICsxMzg0LDE2
IEBAIHBvbGljaWVzIGFuZCBjb250cmlidXRpb24gZm9ybXMgWzNdLgogICAgICAgICAgICAgICAg
ImV4cGVjdGVkIGEgbnVtYmVyIGJ1dCBnb3QgYSAke3R5cGVfYWN0dWFsfSIsCiAgICAgICAgICAg
ICAgICB7dHlwZV9hY3R1YWw6dHlwZW9mIGFjdHVhbH0pOwogCi0gICAgICAgIGFzc2VydChNYXRo
LmFicyhhY3R1YWwgLSBleHBlY3RlZCkgPD0gZXBzaWxvbiwKLSAgICAgICAgICAgICAgICJhc3Nl
cnRfYXBwcm94X2VxdWFscyIsIGRlc2NyaXB0aW9uLAotICAgICAgICAgICAgICAgImV4cGVjdGVk
ICR7ZXhwZWN0ZWR9ICsvLSAke2Vwc2lsb259IGJ1dCBnb3QgJHthY3R1YWx9IiwKLSAgICAgICAg
ICAgICAgIHtleHBlY3RlZDpleHBlY3RlZCwgYWN0dWFsOmFjdHVhbCwgZXBzaWxvbjplcHNpbG9u
fSk7CisgICAgICAgIC8vIFRoZSBlcHNpbG9uIG1hdGggYmVsb3cgZG9lcyBub3QgcGxhY2Ugbmlj
ZSB3aXRoIE5hTiBhbmQgSW5maW5pdHkKKyAgICAgICAgLy8gQnV0IGluIHRoaXMgY2FzZSBJbmZp
bml0eSA9IEluZmluaXR5IGFuZCBOYU4gPSBOYU4KKyAgICAgICAgaWYgKGlzRmluaXRlKGFjdHVh
bCkgfHwgaXNGaW5pdGUoZXhwZWN0ZWQpKSB7CisgICAgICAgICAgICBhc3NlcnQoTWF0aC5hYnMo
YWN0dWFsIC0gZXhwZWN0ZWQpIDw9IGVwc2lsb24sCisgICAgICAgICAgICAgICAgICAgImFzc2Vy
dF9hcHByb3hfZXF1YWxzIiwgZGVzY3JpcHRpb24sCisgICAgICAgICAgICAgICAgICAgImV4cGVj
dGVkICR7ZXhwZWN0ZWR9ICsvLSAke2Vwc2lsb259IGJ1dCBnb3QgJHthY3R1YWx9IiwKKyAgICAg
ICAgICAgICAgICAgICB7ZXhwZWN0ZWQ6ZXhwZWN0ZWQsIGFjdHVhbDphY3R1YWwsIGVwc2lsb246
ZXBzaWxvbn0pOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgYXNzZXJ0X2VxdWFscyhh
Y3R1YWwsIGV4cGVjdGVkKTsKKyAgICAgICAgfQogICAgIH0KICAgICBleHBvc2UoYXNzZXJ0X2Fw
cHJveF9lcXVhbHMsICJhc3NlcnRfYXBwcm94X2VxdWFscyIpOwogCkBAIC0yMDY5LDcgKzIxMzYs
NyBAQCBwb2xpY2llcyBhbmQgY29udHJpYnV0aW9uIGZvcm1zIFszXS4KICAgICAgICAgICAgICAg
ICBmdW5jKCk7CiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIGlmKHJlbWFp
bmluZyA9PT0gMCkgewotICAgICAgICAgICAgICAgICAgICBhc3NlcnQoZmFsc2UsICJ3YWl0X2Zv
ciIsIGRlc2NyaXB0aW9uLAorICAgICAgICAgICAgICAgICAgICBhc3NlcnQoZmFsc2UsICJzdGVw
X3dhaXRfZnVuYyIsIGRlc2NyaXB0aW9uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIlRp
bWVkIG91dCB3YWl0aW5nIG9uIGNvbmRpdGlvbiIpOwogICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgICAgICByZW1haW5pbmctLTsKQEAgLTIwODQsNyArMjE1MSw3IEBAIHBvbGljaWVzIGFu
ZCBjb250cmlidXRpb24gZm9ybXMgWzNdLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB0aW1lb3V0PTMwMDAsIGludGVydmFsPTEwMCkgewogICAgICAg
ICAvKioKICAgICAgICAgICogUG9sbCBmb3IgYSBmdW5jdGlvbiB0byByZXR1cm4gdHJ1ZSwgYW5k
IGludm9rZSBhIGNhbGxiYWNrCi0gICAgICAgICAqIGZvbGxvd2VkIHRoaXMuZG9uZSgpIG9uY2Ug
aXQgZG9lcywgb3IgYXNzZXJ0IGlmIGEgdGltZW91dAorICAgICAgICAgKiBmb2xsb3dlZCBieSB0
aGlzLmRvbmUoKSBvbmNlIGl0IGRvZXMsIG9yIGFzc2VydCBpZiBhIHRpbWVvdXQKICAgICAgICAg
ICogaXMgcmVhY2hlZC4gVGhpcyBpcyBwcmVmZXJyZWQgb3ZlciBhIHNpbXBsZSBzdGVwX3RpbWVv
dXQKICAgICAgICAgICogd2hlbmV2ZXIgcG9zc2libGUgc2luY2UgaXQgYWxsb3dzIHRoZSB0aW1l
b3V0IHRvIGJlIGxvbmdlcgogICAgICAgICAgKiB0byByZWR1Y2UgaW50ZXJtaXR0ZW50cyB3aXRo
b3V0IGNvbXByb21pc2luZyB0ZXN0IGV4ZWN1dGlvbiBzcGVlZApAQCAtMzc3Myw3ICszODQwLDcg
QEAgcG9saWNpZXMgYW5kIGNvbnRyaWJ1dGlvbiBmb3JtcyBbM10uCiAgICAgZnVuY3Rpb24gZ2V0
X3RpdGxlKCkKICAgICB7CiAgICAgICAgIGlmICgnZG9jdW1lbnQnIGluIGdsb2JhbF9zY29wZSkg
ewotICAgICAgICAgICAgLy9Eb24ndCB1c2UgZG9jdW1lbnQudGl0bGUgdG8gd29yayBhcm91bmQg
YW4gT3BlcmEgYnVnIGluIFhIVE1MIGRvY3VtZW50cworICAgICAgICAgICAgLy9Eb24ndCB1c2Ug
ZG9jdW1lbnQudGl0bGUgdG8gd29yayBhcm91bmQgYW4gT3BlcmEvUHJlc3RvIGJ1ZyBpbiBYSFRN
TCBkb2N1bWVudHMKICAgICAgICAgICAgIHZhciB0aXRsZSA9IGRvY3VtZW50LmdldEVsZW1lbnRz
QnlUYWdOYW1lKCJ0aXRsZSIpWzBdOwogICAgICAgICAgICAgaWYgKHRpdGxlICYmIHRpdGxlLmZp
cnN0Q2hpbGQgJiYgdGl0bGUuZmlyc3RDaGlsZC5kYXRhKSB7CiAgICAgICAgICAgICAgICAgcmV0
dXJuIHRpdGxlLmZpcnN0Q2hpbGQuZGF0YTsKQEAgLTM5OTgsNSArNDA2NSw1IEBAIHNwYW4ub2ss
IHNwYW4udGltZW91dCwgc3Bhbi5lcnJvciB7XAogfVwKICI7CiAKLX0pKHRoaXMpOworfSkoc2Vs
Zik7CiAvLyB2aW06IHNldCBleHBhbmR0YWIgc2hpZnR3aWR0aD00IHRhYnN0b3A9NDoKZGlmZiAt
LWdpdCBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3Vy
Y2VzL3czYy1pbXBvcnQubG9nIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9y
bS10ZXN0cy9yZXNvdXJjZXMvdzNjLWltcG9ydC5sb2cKaW5kZXggN2I4NmMzY2UzZjM3YWI4YTE3
NGVhMTYwNDQ2ZjU2NzVlZjA2MWUwNS4uMDZhZWQ0M2UyMDQ4YzczNmU4NGQxYzk2MGEyYzZjMmZl
MzliZGRmZCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9y
bS10ZXN0cy9yZXNvdXJjZXMvdzNjLWltcG9ydC5sb2cKKysrIGIvTGF5b3V0VGVzdHMvaW1wb3J0
ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdzNjLWltcG9ydC5sb2cKQEAgLTI0
LDYgKzI0LDggQEAgTGlzdCBvZiBmaWxlczoKIC9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2Vi
LXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9zcmloYXJuZXNzLmpzCiAvTGF5b3V0VGVzdHMvaW1w
b3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC1vbmx5LWFwaS5qcwog
L0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rl
c3Qtb25seS1hcGkuanMuaGVhZGVycworL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxh
dGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3Qtb25seS1hcGkubS5qcworL0xheW91dFRlc3RzL2lt
cG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3Qtb25seS1hcGkubS5q
cy5oZWFkZXJzCiAvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9y
ZXNvdXJjZXMvdGVzdGRyaXZlci1hY3Rpb25zLmpzCiAvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNj
L3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdGRyaXZlci12ZW5kb3IuanMKIC9MYXlv
dXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0ZHJp
dmVyLXZlbmRvci5qcy5oZWFkZXJzCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>412685</attachid>
            <date>2020-10-29 14:23:32 -0700</date>
            <delta_ts>2020-10-29 14:50:31 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-218351-20201029142331.patch</filename>
            <type>text/plain</type>
            <size>629096</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY5MTY0CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFu
Z2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggMThlZTlkMTJiYmQ3Nzc4ZmMxNTAw
ZjZmMjVjZmVjODA1MjQ1ZTlhYS4uZmJmNmZjNjA4Y2JiMzJlNGQ0NmZhZWFjYWNhNmNhYWUxNGUw
ZjE5ZCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3Rz
L0NoYW5nZUxvZwpAQCAtMSwzICsxLDE0IEBACisyMDIwLTEwLTI5ICBDaHJpcyBEdW1leiAgPGNk
dW1lekBhcHBsZS5jb20+CisKKyAgICAgICAgUmVzeW5jIHdlYi1wbGF0Zm9ybS10ZXN0cy9yZXNv
dXJjZXMgdGVzdHMgZnJvbSB1cHN0cmVhbQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MjE4MzUxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgUmViYXNlbGluZSB0ZXN0IHRoYXQgaGFzIGRpZmZlcmVudCBvdXRw
dXQuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMtd2syL2ltcG9ydGVkL3czYy93ZWItcGxhdGZv
cm0tdGVzdHMvd2ViLXNoYXJlL3NoYXJlLXVybC1pbnZhbGlkLmh0dHBzLWV4cGVjdGVkLnR4dDoK
KwogMjAyMC0xMC0yOSAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgogCiAgICAgICAg
IFJlc3luYyB3ZWItcGxhdGZvcm0tdGVzdHMvcGF5bWVudC1yZXF1ZXN0IHRlc3RzIGZyb20gdXBz
dHJlYW0KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy9DaGFuZ2VMb2cgYi9M
YXlvdXRUZXN0cy9pbXBvcnRlZC93M2MvQ2hhbmdlTG9nCmluZGV4IGU4ZTMyYmQ2ZDg4ZjJiNDlj
NDViZDU0OGM2M2IwZTFlMTAwOWQzMGQuLjkwNDk3ZmRkNGNiODVkZjA5YTBiOGIzZDRhODI4Y2Nm
ZTVjODNhYmYgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy9DaGFuZ2VMb2cK
KysrIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM2IEBA
CisyMDIwLTEwLTI5ICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CisKKyAgICAgICAg
UmVzeW5jIHdlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMgdGVzdHMgZnJvbSB1cHN0cmVhbQor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE4MzUxCisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUmVzeW5jIHdl
Yi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMgdGVzdHMgZnJvbSB1cHN0cmVhbSA1ZGJiMGEzZmE2
MzFlZjczZGEwLgorCisgICAgICAgICogd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy8qOiBV
cGRhdGVkLgorCisgICAgICAgICogd2ViLXBsYXRmb3JtLXRlc3RzL2NvbnNvbGUvaWRsaGFybmVz
cy5hbnktZXhwZWN0ZWQudHh0OgorICAgICAgICAqIHdlYi1wbGF0Zm9ybS10ZXN0cy9jb25zb2xl
L2lkbGhhcm5lc3MuYW55Lndvcmtlci1leHBlY3RlZC50eHQ6CisgICAgICAgICogd2ViLXBsYXRm
b3JtLXRlc3RzL2NvbnRlbnQtc2VjdXJpdHktcG9saWN5L2ZyYW1lLXNyYy9mcmFtZS1zcmMtc2Ft
ZS1kb2N1bWVudC1tZXRhLnN1Yi5odG1sOgorICAgICAgICAqIHdlYi1wbGF0Zm9ybS10ZXN0cy9j
c3MvY3NzLXRleHQvb3ZlcmZsb3ctd3JhcC9vdmVyZmxvdy13cmFwLWJyZWFrLXdvcmQtbG9uZy1j
cmFzaC1leHBlY3RlZC50eHQ6CisgICAgICAgICogd2ViLXBsYXRmb3JtLXRlc3RzL2Nzcy9jc3Mt
dGV4dC90ZXh0LWluZGVudC90ZXh0LWluZGVudC1sb25nLWxpbmUtY3Jhc2gtZXhwZWN0ZWQudHh0
OgorICAgICAgICAqIHdlYi1wbGF0Zm9ybS10ZXN0cy9jc3MvY3Nzb20vaWRsaGFybmVzcy1leHBl
Y3RlZC50eHQ6CisgICAgICAgICogd2ViLXBsYXRmb3JtLXRlc3RzL2h0bWwvYnJvd3NlcnMvYnJv
d3NpbmctdGhlLXdlYi9uYXZpZ2F0aW5nLWFjcm9zcy1kb2N1bWVudHMvYW5jaG9yLWZyYWdtZW50
LWZvcm0tc3VibWl0LXdpdGhwYXRoLmh0bWw6CisgICAgICAgICogd2ViLXBsYXRmb3JtLXRlc3Rz
L2h0bWwvY3Jvc3Mtb3JpZ2luLWVtYmVkZGVyLXBvbGljeS9yZXBvcnRpbmctbmF2aWdhdGlvbi5o
dHRwcy5odG1sOgorICAgICAgICAqIHdlYi1wbGF0Zm9ybS10ZXN0cy9odG1sL2Nyb3NzLW9yaWdp
bi1lbWJlZGRlci1wb2xpY3kvcmVxdWlyZS1jb3JwLWFib3V0LWJsYW5rLmh0dHBzLWV4cGVjdGVk
LnR4dDoKKyAgICAgICAgKiB3ZWItcGxhdGZvcm0tdGVzdHMvaHRtbC9jcm9zcy1vcmlnaW4tZW1i
ZWRkZXItcG9saWN5L3JlcXVpcmUtY29ycC1hYm91dC1zcmNkb2MuaHR0cHMtZXhwZWN0ZWQudHh0
OgorICAgICAgICAqIHdlYi1wbGF0Zm9ybS10ZXN0cy9odG1sL2Nyb3NzLW9yaWdpbi1lbWJlZGRl
ci1wb2xpY3kvcmVxdWlyZS1jb3JwLmh0dHBzLWV4cGVjdGVkLnR4dDoKKyAgICAgICAgKiB3ZWIt
cGxhdGZvcm0tdGVzdHMvd2FzbS9qc2FwaS9pZGxoYXJuZXNzLmFueS1leHBlY3RlZC50eHQ6Cisg
ICAgICAgICogd2ViLXBsYXRmb3JtLXRlc3RzL3dlYi1zaGFyZS9zaGFyZS11cmwtaW52YWxpZC5o
dHRwcy5odG1sOgorICAgICAgICAqIHdlYi1wbGF0Zm9ybS10ZXN0cy93ZWJydGMvUlRDUGVlckNv
bm5lY3Rpb24tZ2V0U3RhdHMuaHR0cHMuaHRtbDoKKyAgICAgICAgKiB3ZWItcGxhdGZvcm0tdGVz
dHMvd2VicnRjL1JUQ1BlZXJDb25uZWN0aW9uLXNldFJlbW90ZURlc2NyaXB0aW9uLXJlcGxhY2VU
cmFjay5odHRwcy5odG1sOgorICAgICAgICAqIHdlYi1wbGF0Zm9ybS10ZXN0cy93ZWJydGMvUlRD
UGVlckNvbm5lY3Rpb24tdHJhY2stc3RhdHMuaHR0cHMtZXhwZWN0ZWQudHh0OgorICAgICAgICAq
IHdlYi1wbGF0Zm9ybS10ZXN0cy93ZWJydGMvUlRDUGVlckNvbm5lY3Rpb24tdHJhY2stc3RhdHMu
aHR0cHMuaHRtbDoKKyAgICAgICAgKiB3ZWItcGxhdGZvcm0tdGVzdHMvd2VicnRjL2xlZ2FjeS9S
VENQZWVyQ29ubmVjdGlvbi1hZGRTdHJlYW0uaHR0cHMuaHRtbDoKKyAgICAgICAgLSBSZWJhc2Vs
aW5lIGEgZmV3IHRlc3RzIHRoYXQgaGF2ZSBkaWZmZXJlbnQgb3V0cHV0LgorICAgICAgICAtIEkg
cmVzeW5jJ2QgZnJvbSB1cHN0cmVhbSBhIGZldyB0ZXN0cyB0aGF0IHdvdWxkIGhhdmUgc3RvcHBl
ZCBydW5uaW5nIHByb3Blcmx5IGFmdGVyIHRoZQorICAgICAgICAgIHJlc291cmNlcy8gZm9sZGVy
IHJlc3luYy4KKwogMjAyMC0xMC0yOSAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgog
CiAgICAgICAgIFJlc3luYyB3ZWItcGxhdGZvcm0tdGVzdHMvcGF5bWVudC1yZXF1ZXN0IHRlc3Rz
IGZyb20gdXBzdHJlYW0KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWIt
cGxhdGZvcm0tdGVzdHMvY29uc29sZS9pZGxoYXJuZXNzLmFueS1leHBlY3RlZC50eHQgYi9MYXlv
dXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL2NvbnNvbGUvaWRsaGFybmVz
cy5hbnktZXhwZWN0ZWQudHh0CmluZGV4IDg4ZDhkYzY5YzMzZTI1OTIyOTA3MzI3YzdkOGM1NzA0
NjJhNjg0NmYuLmI1MTQ3ZmJmMGY5MWE0NTRlNjhhOWI3YzUxMzYyMTJlOGM1NGE1NjMgMTAwNjQ0
Ci0tLSBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvY29uc29s
ZS9pZGxoYXJuZXNzLmFueS1leHBlY3RlZC50eHQKKysrIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQv
dzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9jb25zb2xlL2lkbGhhcm5lc3MuYW55LWV4cGVjdGVkLnR4
dApAQCAtMSw2ICsxLDExIEBACiAKIFBBU1MgaWRsX3Rlc3Qgc2V0dXAKIFBBU1MgaWRsX3Rlc3Qg
dmFsaWRhdGlvbgorUEFTUyBjb25zb2xlIG5hbWVzcGFjZTogZXh0ZW5kZWQgYXR0cmlidXRlcwor
UEFTUyBjb25zb2xlIG5hbWVzcGFjZTogcHJvcGVydHkgZGVzY3JpcHRvcgorUEFTUyBjb25zb2xl
IG5hbWVzcGFjZTogW1tFeHRlbnNpYmxlXV0gaXMgdHJ1ZQorUEFTUyBjb25zb2xlIG5hbWVzcGFj
ZTogW1tQcm90b3R5cGVdXSBpcyBPYmplY3QucHJvdG90eXBlCitQQVNTIGNvbnNvbGUgbmFtZXNw
YWNlOiB0eXBlb2YgaXMgIm9iamVjdCIKIFBBU1MgY29uc29sZSBuYW1lc3BhY2U6IG9wZXJhdGlv
biBhc3NlcnQob3B0aW9uYWwgYm9vbGVhbiwgYW55Li4uKQogUEFTUyBjb25zb2xlIG5hbWVzcGFj
ZTogb3BlcmF0aW9uIGNsZWFyKCkKIFBBU1MgY29uc29sZSBuYW1lc3BhY2U6IG9wZXJhdGlvbiBk
ZWJ1ZyhhbnkuLi4pCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBs
YXRmb3JtLXRlc3RzL2NvbnNvbGUvaWRsaGFybmVzcy5hbnkud29ya2VyLWV4cGVjdGVkLnR4dCBi
L0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvY29uc29sZS9pZGxo
YXJuZXNzLmFueS53b3JrZXItZXhwZWN0ZWQudHh0CmluZGV4IDg4ZDhkYzY5YzMzZTI1OTIyOTA3
MzI3YzdkOGM1NzA0NjJhNjg0NmYuLmI1MTQ3ZmJmMGY5MWE0NTRlNjhhOWI3YzUxMzYyMTJlOGM1
NGE1NjMgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0t
dGVzdHMvY29uc29sZS9pZGxoYXJuZXNzLmFueS53b3JrZXItZXhwZWN0ZWQudHh0CisrKyBiL0xh
eW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvY29uc29sZS9pZGxoYXJu
ZXNzLmFueS53b3JrZXItZXhwZWN0ZWQudHh0CkBAIC0xLDYgKzEsMTEgQEAKIAogUEFTUyBpZGxf
dGVzdCBzZXR1cAogUEFTUyBpZGxfdGVzdCB2YWxpZGF0aW9uCitQQVNTIGNvbnNvbGUgbmFtZXNw
YWNlOiBleHRlbmRlZCBhdHRyaWJ1dGVzCitQQVNTIGNvbnNvbGUgbmFtZXNwYWNlOiBwcm9wZXJ0
eSBkZXNjcmlwdG9yCitQQVNTIGNvbnNvbGUgbmFtZXNwYWNlOiBbW0V4dGVuc2libGVdXSBpcyB0
cnVlCitQQVNTIGNvbnNvbGUgbmFtZXNwYWNlOiBbW1Byb3RvdHlwZV1dIGlzIE9iamVjdC5wcm90
b3R5cGUKK1BBU1MgY29uc29sZSBuYW1lc3BhY2U6IHR5cGVvZiBpcyAib2JqZWN0IgogUEFTUyBj
b25zb2xlIG5hbWVzcGFjZTogb3BlcmF0aW9uIGFzc2VydChvcHRpb25hbCBib29sZWFuLCBhbnku
Li4pCiBQQVNTIGNvbnNvbGUgbmFtZXNwYWNlOiBvcGVyYXRpb24gY2xlYXIoKQogUEFTUyBjb25z
b2xlIG5hbWVzcGFjZTogb3BlcmF0aW9uIGRlYnVnKGFueS4uLikKZGlmZiAtLWdpdCBhL0xheW91
dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvY29udGVudC1zZWN1cml0eS1w
b2xpY3kvZnJhbWUtc3JjL2ZyYW1lLXNyYy1zYW1lLWRvY3VtZW50LW1ldGEuc3ViLmh0bWwgYi9M
YXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL2NvbnRlbnQtc2VjdXJp
dHktcG9saWN5L2ZyYW1lLXNyYy9mcmFtZS1zcmMtc2FtZS1kb2N1bWVudC1tZXRhLnN1Yi5odG1s
CmluZGV4IDI4MTI5MTg0YmRhODdiYjc5YmI3MGI0ZTEwYTY1MTJhM2NiNWFlZDguLmY0MTIyZjNk
MzU2YjM3ODYwYTI5NjM0ZTQ3YmRlOTE0NzQzMmJhMDkgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3Rz
L2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvY29udGVudC1zZWN1cml0eS1wb2xpY3kv
ZnJhbWUtc3JjL2ZyYW1lLXNyYy1zYW1lLWRvY3VtZW50LW1ldGEuc3ViLmh0bWwKKysrIGIvTGF5
b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9jb250ZW50LXNlY3VyaXR5
LXBvbGljeS9mcmFtZS1zcmMvZnJhbWUtc3JjLXNhbWUtZG9jdW1lbnQtbWV0YS5zdWIuaHRtbApA
QCAtMyw3ICszLDcgQEAKIDxodG1sPgogPGJvZHk+PC9ib2R5PgogPHNjcmlwdD4KLSAgICBhc3lu
Y190ZXN0KGFzeW5jIHRlc3QgPT4geworICAgIHByb21pc2VfdGVzdChhc3luYyB0ZXN0ID0+IHsK
ICAgICAgIC8vIDEuIExvYWQgYW4gaWZyYW1lIChub3QgYmxvY2tlZCkuCiAgICAgICBsZXQgaWZy
YW1lID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaWZyYW1lIik7CiAgICAgICB7CkBAIC00Nyw4
ICs0Nyw2IEBACiAgICAgICAvLyA1LiBSZWdyZXNzaW9uIHRlc3QgZm9yIGh0dHBzOi8vY3JidWcu
Y29tLzEwMTgzODUuIFRoZSBicm93c2VyIHNob3VsZAogICAgICAgLy8gbm90IGNyYXNoIHdoaWxl
IGRpc3BsYXlpbmcgdGhlIGVycm9yIHBhZ2UuCiAgICAgICBhd2FpdCBuZXcgUHJvbWlzZShyZXNv
bHZlID0+IHdpbmRvdy5zZXRUaW1lb3V0KHJlc29sdmUsIDEwMDApKTsKLQotICAgICAgdGVzdC5k
b25lKCk7CiAgICAgfSwgIlNhbWUtZG9jdW1lbnQgbmF2aWdhdGlvbnMgaW4gYW4gaWZyYW1lIGJs
b2NrZWQgYnkgQ1NQIGZyYW1lLXNyYyBkeW5hbWljYWxseSB1c2luZyB0aGUgPG1ldGE+IHRhZyIp
OwogPC9zY3JpcHQ+CiA8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93
M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL2Nzcy9jc3MtdGV4dC9vdmVyZmxvdy13cmFwL292ZXJmbG93
LXdyYXAtYnJlYWstd29yZC1sb25nLWNyYXNoLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2lt
cG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvY3NzL2Nzcy10ZXh0L292ZXJmbG93LXdyYXAv
b3ZlcmZsb3ctd3JhcC1icmVhay13b3JkLWxvbmctY3Jhc2gtZXhwZWN0ZWQudHh0CmluZGV4IGQz
ZDA5MzFmZDNlOTI3NTU5YmM1Y2Q3ODhlYjc3ZTZkYmMxNmU3NjEuLjJkYTkwODExNDI0MDRiNzNj
NmNkMjgyOGNlOTE1ZDdjNTQ3ZTM5YzQgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2ltcG9ydGVk
L3czYy93ZWItcGxhdGZvcm0tdGVzdHMvY3NzL2Nzcy10ZXh0L292ZXJmbG93LXdyYXAvb3ZlcmZs
b3ctd3JhcC1icmVhay13b3JkLWxvbmctY3Jhc2gtZXhwZWN0ZWQudHh0CisrKyBiL0xheW91dFRl
c3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvY3NzL2Nzcy10ZXh0L292ZXJmbG93
LXdyYXAvb3ZlcmZsb3ctd3JhcC1icmVhay13b3JkLWxvbmctY3Jhc2gtZXhwZWN0ZWQudHh0CkBA
IC0xLDQgKzEsNCBAQAogeAogCi1QQVNTIENTUyBUZXh0IFRlc3Q6IHZlcnkgbG9uZyBsaW5lIHdp
dGggYG92ZXJmbG93LXdyYXA6IGJyZWFrLXdvcmRgIHNob3VsZCBub3QgY3Jhc2gKK1BBU1MgZG9j
dW1lbnQuYm9keS5vZmZzZXRUb3AKIApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQv
dzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9jc3MvY3NzLXRleHQvdGV4dC1pbmRlbnQvdGV4dC1pbmRl
bnQtbG9uZy1saW5lLWNyYXNoLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3cz
Yy93ZWItcGxhdGZvcm0tdGVzdHMvY3NzL2Nzcy10ZXh0L3RleHQtaW5kZW50L3RleHQtaW5kZW50
LWxvbmctbGluZS1jcmFzaC1leHBlY3RlZC50eHQKaW5kZXggY2UxMzg2MzI0OGI0ZjcyNTU4YzI3
MGRlOWE2ZDY5YTljMmU1MmQ3MS4uOGI5MGFhNmY5MGU2ZTQ2ZmQ4MWVlY2RiZDAyOWZkOGQ5NTNk
M2I4YyAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10
ZXN0cy9jc3MvY3NzLXRleHQvdGV4dC1pbmRlbnQvdGV4dC1pbmRlbnQtbG9uZy1saW5lLWNyYXNo
LWV4cGVjdGVkLnR4dAorKysgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3Jt
LXRlc3RzL2Nzcy9jc3MtdGV4dC90ZXh0LWluZGVudC90ZXh0LWluZGVudC1sb25nLWxpbmUtY3Jh
c2gtZXhwZWN0ZWQudHh0CkBAIC0xLDQgKzEsNCBAQAogWFhYCiAKLVBBU1MgVmVyeSBsb25nIGxp
bmUgd2l0aCBgdGV4dC1pbmRlbnRgIHNob3VsZCBub3QgY3Jhc2gKK1BBU1MgZG9jdW1lbnQuYm9k
eS5vZmZzZXRUb3AKIApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1w
bGF0Zm9ybS10ZXN0cy9jc3MvY3Nzb20vaWRsaGFybmVzcy1leHBlY3RlZC50eHQgYi9MYXlvdXRU
ZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL2Nzcy9jc3NvbS9pZGxoYXJuZXNz
LWV4cGVjdGVkLnR4dAppbmRleCA3ZDdjNzIwNTQ2NWM0OGFiYzE2ZjU4NjYwMjA0YjM1ZTE2MDJh
NTI1Li40Njc4NmVlOWY0NzFlMGYxODExMmEyMGI4ZGU5MGQ3YTQ0YTA0ZmQzIDEwMDY0NAotLS0g
YS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL2Nzcy9jc3NvbS9p
ZGxoYXJuZXNzLWV4cGVjdGVkLnR4dAorKysgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2Vi
LXBsYXRmb3JtLXRlc3RzL2Nzcy9jc3NvbS9pZGxoYXJuZXNzLWV4cGVjdGVkLnR4dApAQCAtNDE3
LDYgKzQxNywxMyBAQCBQQVNTIENTU1N0eWxlRGVjbGFyYXRpb24gaW50ZXJmYWNlOiBnZXRDb21w
dXRlZFN0eWxlKHN2Z19lbGVtZW50KSBtdXN0IGluaGVyaXQgcAogUEFTUyBDU1NTdHlsZURlY2xh
cmF0aW9uIGludGVyZmFjZTogY2FsbGluZyByZW1vdmVQcm9wZXJ0eShDU1NPTVN0cmluZykgb24g
Z2V0Q29tcHV0ZWRTdHlsZShzdmdfZWxlbWVudCkgd2l0aCB0b28gZmV3IGFyZ3VtZW50cyBtdXN0
IHRocm93IFR5cGVFcnJvcgogUEFTUyBDU1NTdHlsZURlY2xhcmF0aW9uIGludGVyZmFjZTogZ2V0
Q29tcHV0ZWRTdHlsZShzdmdfZWxlbWVudCkgbXVzdCBpbmhlcml0IHByb3BlcnR5ICJwYXJlbnRS
dWxlIiB3aXRoIHRoZSBwcm9wZXIgdHlwZQogUEFTUyBDU1NTdHlsZURlY2xhcmF0aW9uIGludGVy
ZmFjZTogZ2V0Q29tcHV0ZWRTdHlsZShzdmdfZWxlbWVudCkgbXVzdCBpbmhlcml0IHByb3BlcnR5
ICJjc3NGbG9hdCIgd2l0aCB0aGUgcHJvcGVyIHR5cGUKK1BBU1MgQ1NTIG5hbWVzcGFjZTogZXh0
ZW5kZWQgYXR0cmlidXRlcworUEFTUyBDU1MgbmFtZXNwYWNlOiBwcm9wZXJ0eSBkZXNjcmlwdG9y
CitQQVNTIENTUyBuYW1lc3BhY2U6IFtbRXh0ZW5zaWJsZV1dIGlzIHRydWUKK0ZBSUwgQ1NTIG5h
bWVzcGFjZTogW1tQcm90b3R5cGVdXSBpcyBPYmplY3QucHJvdG90eXBlIGFzc2VydF9lcXVhbHM6
IGV4cGVjdGVkIChvYmplY3QpIG9iamVjdCAiW29iamVjdCBPYmplY3RdIiBidXQgZ290IChmdW5j
dGlvbikgZnVuY3Rpb24gImZ1bmN0aW9uICgpIHsKKyAgICBbbmF0aXZlIGNvZGVdCit9IgorRkFJ
TCBDU1MgbmFtZXNwYWNlOiB0eXBlb2YgaXMgIm9iamVjdCIgYXNzZXJ0X2VxdWFsczogZXhwZWN0
ZWQgIm9iamVjdCIgYnV0IGdvdCAiZnVuY3Rpb24iCiBQQVNTIENTUyBuYW1lc3BhY2U6IG9wZXJh
dGlvbiBlc2NhcGUoQ1NTT01TdHJpbmcpCiBQQVNTIFNWR0VsZW1lbnQgaW50ZXJmYWNlOiBhdHRy
aWJ1dGUgc3R5bGUKIFBBU1MgU1ZHRWxlbWVudCBpbnRlcmZhY2U6IHN2Z19lbGVtZW50IG11c3Qg
aW5oZXJpdCBwcm9wZXJ0eSAic3R5bGUiIHdpdGggdGhlIHByb3BlciB0eXBlCmRpZmYgLS1naXQg
YS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL2h0bWwvYnJvd3Nl
cnMvYnJvd3NpbmctdGhlLXdlYi9uYXZpZ2F0aW5nLWFjcm9zcy1kb2N1bWVudHMvYW5jaG9yLWZy
YWdtZW50LWZvcm0tc3VibWl0LXdpdGhwYXRoLmh0bWwgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93
M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL2h0bWwvYnJvd3NlcnMvYnJvd3NpbmctdGhlLXdlYi9uYXZp
Z2F0aW5nLWFjcm9zcy1kb2N1bWVudHMvYW5jaG9yLWZyYWdtZW50LWZvcm0tc3VibWl0LXdpdGhw
YXRoLmh0bWwKaW5kZXggYjg5MTYyM2EyZjU2MGZlNWNmZWM4NDRiMmEzNzdiMDUxMzkyNThmOS4u
NmJmZjUxYzljNmYyODAxMWUyMmIzOWYyYmFjOThlZjkwOThhMWMxNCAxMDA2NDQKLS0tIGEvTGF5
b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9odG1sL2Jyb3dzZXJzL2Jy
b3dzaW5nLXRoZS13ZWIvbmF2aWdhdGluZy1hY3Jvc3MtZG9jdW1lbnRzL2FuY2hvci1mcmFnbWVu
dC1mb3JtLXN1Ym1pdC13aXRocGF0aC5odG1sCisrKyBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3cz
Yy93ZWItcGxhdGZvcm0tdGVzdHMvaHRtbC9icm93c2Vycy9icm93c2luZy10aGUtd2ViL25hdmln
YXRpbmctYWNyb3NzLWRvY3VtZW50cy9hbmNob3ItZnJhZ21lbnQtZm9ybS1zdWJtaXQtd2l0aHBh
dGguaHRtbApAQCAtMTYsMjAgKzE2LDIwIEBACiA8YSBpZD0iYW5jaG9yIiB0YXJnZXQ9InRlc3Qi
IG9uY2xpY2s9ImRvY3VtZW50LmZvcm1zWzBdLnN1Ym1pdCgpIj5UZXN0PC9hPgogCiA8c2NyaXB0
PgotYXN5bmNfdGVzdChhc3luYyB0ID0+IHsKK2FzeW5jX3Rlc3QodCA9PiB7CiAgIGNvbnN0IGlm
cmFtZSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ2lmcmFtZScpOwotICBjb25zdCBpZnJhbWVM
b2FkUHJvbWlzZSA9IG5ldyBQcm9taXNlKHJlc29sdmUgPT4gaWZyYW1lLm9ubG9hZCA9IHJlc29s
dmUpOwotICBpZnJhbWUuc3JjID0gJy8nOwotICBhd2FpdCBpZnJhbWVMb2FkUHJvbWlzZTsKLQot
ICBjb25zdCBhbmNob3IgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYW5jaG9yJyk7Ci0gIGFu
Y2hvci5ocmVmID0gJy8jJzsKLSAgdC5zdGVwKCgpID0+IGFuY2hvci5jbGljaygpKTsKLSAgd2lu
ZG93Lm9ubWVzc2FnZSA9IHQuc3RlcF9mdW5jKGV2ZW50ID0+IHsKLSAgICBpZiAodHlwZW9mIGV2
ZW50LmRhdGEgPT09ICdzdHJpbmcnICYmIGV2ZW50LmRhdGEuaW5jbHVkZXMoJ25hdmlnYXRpb24n
KSkgewotICAgICAgYXNzZXJ0X2VxdWFscyhldmVudC5kYXRhLCAnZm9ybSBuYXZpZ2F0aW9uJyk7
Ci0gICAgICB0LmRvbmUoKTsKLSAgICB9CisgIGlmcmFtZS5vbmxvYWQgPSB0LnN0ZXBfZnVuYygo
KSA9PiB7CisgICAgY29uc3QgYW5jaG9yID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2FuY2hv
cicpOworICAgIGFuY2hvci5ocmVmID0gJy8jJzsKKyAgICBhbmNob3IuY2xpY2soKTsKKyAgICB3
aW5kb3cub25tZXNzYWdlID0gdC5zdGVwX2Z1bmMoZXZlbnQgPT4geworICAgICAgaWYgKHR5cGVv
ZiBldmVudC5kYXRhID09PSAnc3RyaW5nJyAmJiBldmVudC5kYXRhLmluY2x1ZGVzKCduYXZpZ2F0
aW9uJykpIHsKKyAgICAgICAgYXNzZXJ0X2VxdWFscyhldmVudC5kYXRhLCAnZm9ybSBuYXZpZ2F0
aW9uJyk7CisgICAgICAgIHQuZG9uZSgpOworICAgICAgfQorICAgIH0pOwogICB9KTsKKworICBp
ZnJhbWUuc3JjID0gJy8nOwogfSk7CiA8L3NjcmlwdD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3Rz
L2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvaHRtbC9jcm9zcy1vcmlnaW4tZW1iZWRk
ZXItcG9saWN5L3JlcG9ydGluZy1uYXZpZ2F0aW9uLmh0dHBzLmh0bWwgYi9MYXlvdXRUZXN0cy9p
bXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL2h0bWwvY3Jvc3Mtb3JpZ2luLWVtYmVkZGVy
LXBvbGljeS9yZXBvcnRpbmctbmF2aWdhdGlvbi5odHRwcy5odG1sCmluZGV4IDcwODc5ODU5OTBl
NjgyM2IwZjdiMWJjYjIyZTU3YjI1YTc1M2Q2MDUuLmZlNDIwMTU5MTNiNTZkMWNhMGZkZDIzNGQ0
YWQ2YWQ5ZDA5MjZhZjIgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWIt
cGxhdGZvcm0tdGVzdHMvaHRtbC9jcm9zcy1vcmlnaW4tZW1iZWRkZXItcG9saWN5L3JlcG9ydGlu
Zy1uYXZpZ2F0aW9uLmh0dHBzLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dl
Yi1wbGF0Zm9ybS10ZXN0cy9odG1sL2Nyb3NzLW9yaWdpbi1lbWJlZGRlci1wb2xpY3kvcmVwb3J0
aW5nLW5hdmlnYXRpb24uaHR0cHMuaHRtbApAQCAtMTUsMTggKzE1LDIxIEBAIGNvbnN0IENPUlBf
Q1JPU1NfT1JJR0lOID0KIGNvbnN0IEZSQU1FX1VSTCA9IGAke09SSUdJTn0vY29tbW9uL2JsYW5r
Lmh0bWw/cGlwZT1gOwogY29uc3QgUkVNT1RFX0ZSQU1FX1VSTCA9IGAke1JFTU9URV9PUklHSU59
L2NvbW1vbi9ibGFuay5odG1sP3BpcGU9YDsKIAotZnVuY3Rpb24gY2hlY2tDb3JwUmVwb3J0KHJl
cG9ydCwgY29udGV4dFVybCwgYmxvY2tlZFVybCkgeworZnVuY3Rpb24gY2hlY2tDb3JwUmVwb3J0
KHJlcG9ydCwgY29udGV4dFVybCwgYmxvY2tlZFVybCwgZGlzcG9zaXRpb24pIHsKICAgYXNzZXJ0
X2VxdWFscyhyZXBvcnQudHlwZSwgJ2NvZXAnKTsKICAgYXNzZXJ0X2VxdWFscyhyZXBvcnQudXJs
LCBjb250ZXh0VXJsKTsKICAgYXNzZXJ0X2VxdWFscyhyZXBvcnQuYm9keS50eXBlLCAnY29ycCcp
OwotICBhc3NlcnRfZXF1YWxzKHJlcG9ydC5ib2R5WydibG9ja2VkLXVybCddLCBibG9ja2VkVXJs
KTsKKyAgYXNzZXJ0X2VxdWFscyhyZXBvcnQuYm9keS5ibG9ja2VkVVJMLCBibG9ja2VkVXJsKTsK
KyAgYXNzZXJ0X2VxdWFscyhyZXBvcnQuYm9keS5kaXNwb3NpdGlvbiwgZGlzcG9zaXRpb24pOwor
ICBhc3NlcnRfZXF1YWxzKHJlcG9ydC5ib2R5LmRlc3RpbmF0aW9uLCAnaWZyYW1lJyk7CiB9CiAK
LWZ1bmN0aW9uIGNoZWNrQ29lcE1pc21hdGNoUmVwb3J0KHJlcG9ydCwgY29udGV4dFVybCwgYmxv
Y2tlZFVybCkgeworZnVuY3Rpb24gY2hlY2tDb2VwTWlzbWF0Y2hSZXBvcnQocmVwb3J0LCBjb250
ZXh0VXJsLCBibG9ja2VkVXJsLCBkaXNwb3NpdGlvbikgewogICBhc3NlcnRfZXF1YWxzKHJlcG9y
dC50eXBlLCAnY29lcCcpOwogICBhc3NlcnRfZXF1YWxzKHJlcG9ydC51cmwsIGNvbnRleHRVcmwp
OwogICBhc3NlcnRfZXF1YWxzKHJlcG9ydC5ib2R5LnR5cGUsICduYXZpZ2F0aW9uJyk7Ci0gIGFz
c2VydF9lcXVhbHMocmVwb3J0LmJvZHlbJ2Jsb2NrZWQtdXJsJ10sIGJsb2NrZWRVcmwpOworICBh
c3NlcnRfZXF1YWxzKHJlcG9ydC5ib2R5LmJsb2NrZWRVUkwsIGJsb2NrZWRVcmwpOworICBhc3Nl
cnRfZXF1YWxzKHJlcG9ydC5ib2R5LmRpc3Bvc2l0aW9uLCBkaXNwb3NpdGlvbik7CiB9CiAKIGZ1
bmN0aW9uIGxvYWRGcmFtZShkb2N1bWVudCwgdXJsKSB7CkBAIC04Miw5ICs4NSw2IEBAIGFzeW5j
IGZ1bmN0aW9uIG9ic2VydmVSZXBvcnRzKGdsb2JhbCkgewogLy8gICAgICdDT1JQLVJPJyBDT1JQ
IHZpb2xhdGlvbiAocmVwb3J0IG9ubHkpCiAvLyAgICAgJ05BVic6IENPRVAgbWlzbWF0Y2ggYmV0
d2VlbiB0aGUgZnJhbWVzLgogLy8gICAgICdOQVYtUk8nOiBDT0VQIG1pc21hdGNoIGJldHdlZW4g
dGhlIGZyYW1lcyAocmVwb3J0IG9ubHkpLgotLy8gICBDdXJyZW50bHkgJy1STycgaXMgbm8tb3As
IGUuZy4sICdDT1JQJyBhbmQgJ0NPUlAtUk8nIGhhdmUgdGhlIHNhbWUKLS8vICAgZXhwZWN0YXRp
b24uIFdlIGFyZSBwbGFubmluZyB0byBpbnRyb2R1Y2UgImRpc3Bvc2l0aW9uIiBtZW1iZXIgaW4K
LS8vICAgcmVwb3J0cywgd2hpY2ggd2lsbCBkaWZmZXJlbnRpYXRlIHRoZW0gZWFjaCBvdGhlci4K
IGNvbnN0IENBU0VTID0gWwogICB7IHBhcmVudDogJycsIHRhcmdldDogJycsIHJlcG9ydHM6IFtd
IH0sCiAgIHsgcGFyZW50OiAnJywgdGFyZ2V0OiBDT0VQLCByZXBvcnRzOiBbXSB9LApAQCAtMTEw
LDQwICsxMTAsNDIgQEAgZm9yIChjb25zdCB0ZXN0Y2FzZSBvZiBDQVNFUykgewogICAgIGZ1bmN0
aW9uIGRlc2MocykgewogICAgICAgcmV0dXJuIHMgPT09ICcnID8gJyhub25lKScgOiBzOwogICAg
IH0KLSAgICBhc3luY190ZXN0KGFzeW5jICh0KSA9PiB7Ci0gICAgICB0cnkgewotICAgICAgICBj
b25zdCB0YXJnZXRVcmwgPSBSRU1PVEVfRlJBTUVfVVJMICsgdGVzdGNhc2UudGFyZ2V0OwotICAg
ICAgICBjb25zdCBwYXJlbnQgPQotICAgICAgICAgIGF3YWl0IGxvYWRGcmFtZXModCwgdGVzdGNh
c2UucGFyZW50LCB3aXRoRW1wdHlGcmFtZSwgdGFyZ2V0VXJsKTsKLQorICAgIC8vIFRoZXNlIHRl
c3RzIGFyZSB2ZXJ5IHNsb3csIHNvIHRoZXkgbXVzdCBiZSBydW4gaW4gcGFyYWxsZWwgdXNpbmcK
KyAgICAvLyBhc3luY190ZXN0LgorICAgIGFzeW5jX3Rlc3QodCA9PiB7CisgICAgICBjb25zdCB0
YXJnZXRVcmwgPSBSRU1PVEVfRlJBTUVfVVJMICsgdGVzdGNhc2UudGFyZ2V0OworICAgICAgbG9h
ZEZyYW1lcyh0LCB0ZXN0Y2FzZS5wYXJlbnQsIHdpdGhFbXB0eUZyYW1lLCB0YXJnZXRVcmwpCisg
ICAgICAgICAgLnRoZW4odC5zdGVwX2Z1bmMocGFyZW50ID0+IHsKICAgICAgICAgY29uc3QgY29u
dGV4dFVybCA9IHBhcmVudC5zcmMgPyBwYXJlbnQuc3JjIDogJ2Fib3V0OmJsYW5rJzsKLSAgICAg
ICAgY29uc3QgcmVwb3J0cyA9IGF3YWl0IG9ic2VydmVSZXBvcnRzKHBhcmVudC5jb250ZW50V2lu
ZG93KTsKLSAgICAgICAgYXNzZXJ0X2VxdWFscyhyZXBvcnRzLmxlbmd0aCwgdGVzdGNhc2UucmVw
b3J0cy5sZW5ndGgpOwotCi0gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcmVwb3J0cy5sZW5n
dGg7IGkgKz0gMSkgewotICAgICAgICAgIGNvbnN0IHJlcG9ydCA9IHJlcG9ydHNbaV07Ci0gICAg
ICAgICAgc3dpdGNoICh0ZXN0Y2FzZS5yZXBvcnRzW2ldKSB7Ci0gICAgICAgICAgICBjYXNlICdD
T1JQJzoKLSAgICAgICAgICAgIGNhc2UgJ0NPUlAtUk8nOgotICAgICAgICAgICAgICBjaGVja0Nv
cnBSZXBvcnQocmVwb3J0LCBjb250ZXh0VXJsLCB0YXJnZXRVcmwpOwotICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgIGNhc2UgJ05BVic6Ci0gICAgICAgICAgICBjYXNlICdOQVYtUk8n
OgotICAgICAgICAgICAgICBjaGVja0NvZXBNaXNtYXRjaFJlcG9ydChyZXBvcnQsIGNvbnRleHRV
cmwsIHRhcmdldFVybCk7Ci0gICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgZGVmYXVs
dDoKLSAgICAgICAgICAgICAgYXNzZXJ0X3VucmVhY2hlZCgKLSAgICAgICAgICAgICAgICAnVW5l
eHBlY3RlZCByZXBvcnQgZXhwZWFjdGlvbjogJyArIHRlc3RjYXNlLnJlcG9ydHNbaV0pOworICAg
ICAgICBvYnNlcnZlUmVwb3J0cyhwYXJlbnQuY29udGVudFdpbmRvdykudGhlbih0LnN0ZXBfZnVu
YyhyZXBvcnRzID0+IHsKKyAgICAgICAgICBhc3NlcnRfZXF1YWxzKHJlcG9ydHMubGVuZ3RoLCB0
ZXN0Y2FzZS5yZXBvcnRzLmxlbmd0aCk7CisgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBy
ZXBvcnRzLmxlbmd0aDsgaSArPSAxKSB7CisgICAgICAgICAgICBjb25zdCByZXBvcnQgPSByZXBv
cnRzW2ldOworICAgICAgICAgICAgc3dpdGNoICh0ZXN0Y2FzZS5yZXBvcnRzW2ldKSB7CisgICAg
ICAgICAgICAgIGNhc2UgJ0NPUlAnOgorICAgICAgICAgICAgICAgIGNoZWNrQ29ycFJlcG9ydChy
ZXBvcnQsIGNvbnRleHRVcmwsIHRhcmdldFVybCwgJ2VuZm9yY2UnKTsKKyAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSAnQ09SUC1STyc6CisgICAgICAgICAgICAgICAg
Y2hlY2tDb3JwUmVwb3J0KHJlcG9ydCwgY29udGV4dFVybCwgdGFyZ2V0VXJsLCAncmVwb3J0aW5n
Jyk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgJ05BVic6Cisg
ICAgICAgICAgICAgICAgY2hlY2tDb2VwTWlzbWF0Y2hSZXBvcnQocmVwb3J0LCBjb250ZXh0VXJs
LCB0YXJnZXRVcmwsICdlbmZvcmNlJyk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAgIGNhc2UgJ05BVi1STyc6CisgICAgICAgICAgICAgICAgY2hlY2tDb2VwTWlzbWF0Y2hS
ZXBvcnQocmVwb3J0LCBjb250ZXh0VXJsLCB0YXJnZXRVcmwsICdyZXBvcnRpbmcnKTsKKyAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAg
ICBhc3NlcnRfdW5yZWFjaGVkKAorICAgICAgICAgICAgICAgICAgJ1VuZXhwZWN0ZWQgcmVwb3J0
IGV4cGVhY3Rpb246ICcgKyB0ZXN0Y2FzZS5yZXBvcnRzW2ldKTsKKyAgICAgICAgICAgIH0KICAg
ICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgdC5kb25lKCk7Ci0gICAgICB9IGNhdGNoIChl
KSB7Ci0gICAgICAgIHQuc3RlcCgoKSA9PiB7IHRocm93IGU7IH0pOwotICAgICAgfQorICAgICAg
ICAgIHQuZG9uZSgpOworICAgICAgICB9KSkuY2F0Y2godC5zdGVwX2Z1bmMoZSA9PiB7IHRocm93
IGU7IH0pKTsKKyAgICAgIH0pKS5jYXRjaCh0LnN0ZXBfZnVuYyhlID0+IHsgdGhyb3cgZTsgfSkp
OwogICAgIH0sIGBwYXJlbnQ6ICR7ZGVzYyh0ZXN0Y2FzZS5wYXJlbnQpfSwgdGFyZ2V0OiAke2Rl
c2ModGVzdGNhc2UudGFyZ2V0KX0sIGAgKwogICAgICAgIGB3aXRoIGVtcHR5IGZyYW1lOiAke3dp
dGhFbXB0eUZyYW1lfWApOwogICB9CiB9CiAKIDwvc2NyaXB0PgotPC9ib2R5PjwvaHRtbD4KXCBO
byBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCis8L2JvZHk+PC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5
b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9odG1sL2Nyb3NzLW9yaWdp
bi1lbWJlZGRlci1wb2xpY3kvcmVxdWlyZS1jb3JwLWFib3V0LWJsYW5rLmh0dHBzLWV4cGVjdGVk
LnR4dCBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvaHRtbC9j
cm9zcy1vcmlnaW4tZW1iZWRkZXItcG9saWN5L3JlcXVpcmUtY29ycC1hYm91dC1ibGFuay5odHRw
cy1leHBlY3RlZC50eHQKaW5kZXggOTliN2VhNmM5MWU0ZWFhMjA5MGE5OTRkYTBhYmZkMmFmNDQy
MWQ4NS4uNWZkYjljNGU5Y2JkYzg4Zjc1MDBhYmY0MGJkMzRmMGI2ZmE5YjQ5ZCAxMDA2NDQKLS0t
IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9odG1sL2Nyb3Nz
LW9yaWdpbi1lbWJlZGRlci1wb2xpY3kvcmVxdWlyZS1jb3JwLWFib3V0LWJsYW5rLmh0dHBzLWV4
cGVjdGVkLnR4dAorKysgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRl
c3RzL2h0bWwvY3Jvc3Mtb3JpZ2luLWVtYmVkZGVyLXBvbGljeS9yZXF1aXJlLWNvcnAtYWJvdXQt
YmxhbmsuaHR0cHMtZXhwZWN0ZWQudHh0CkBAIC0yLDUgKzIsNSBAQAogCiBQQVNTIFdhaXQgZm9y
IHRoZSBET00gdG8gYmUgYnVpbHQuCiBQQVNTIGFib3V0OmJsYW5rIGNhbiBhbHdheXMgYmUgZW1i
ZWRkZWQgYnkgYSAncmVxdWlyZS1jb3JwJyBkb2N1bWVudAotRkFJTCBBKEIoQykpIEE9cmVxdWly
ZS1jb3JwLCBCPWFib3V0OmJsYW5rLCBDPW5vLXJlcXVpcmUtY29ycCA9PiBDIGNhbid0IGxvYWQg
d2FpdF9mb3I6IFRpbWVkIG91dCB3YWl0aW5nIG9uIGNvbmRpdGlvbgorRkFJTCBBKEIoQykpIEE9
cmVxdWlyZS1jb3JwLCBCPWFib3V0OmJsYW5rLCBDPW5vLXJlcXVpcmUtY29ycCA9PiBDIGNhbid0
IGxvYWQgc3RlcF93YWl0X2Z1bmM6IFRpbWVkIG91dCB3YWl0aW5nIG9uIGNvbmRpdGlvbgogCmRp
ZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL2h0
bWwvY3Jvc3Mtb3JpZ2luLWVtYmVkZGVyLXBvbGljeS9yZXF1aXJlLWNvcnAtYWJvdXQtc3JjZG9j
Lmh0dHBzLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZv
cm0tdGVzdHMvaHRtbC9jcm9zcy1vcmlnaW4tZW1iZWRkZXItcG9saWN5L3JlcXVpcmUtY29ycC1h
Ym91dC1zcmNkb2MuaHR0cHMtZXhwZWN0ZWQudHh0CmluZGV4IDY2M2RkMDMzMjRhMzY3ODI3Y2Iy
MDliODRiMTkxMGY0ZjQyZTAyMmIuLmQ5YmU3ZTM2NGEyOTQxN2JjZTBjMjNlMjY4NzcyZTYzNmQy
MmFlM2QgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0t
dGVzdHMvaHRtbC9jcm9zcy1vcmlnaW4tZW1iZWRkZXItcG9saWN5L3JlcXVpcmUtY29ycC1hYm91
dC1zcmNkb2MuaHR0cHMtZXhwZWN0ZWQudHh0CisrKyBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3cz
Yy93ZWItcGxhdGZvcm0tdGVzdHMvaHRtbC9jcm9zcy1vcmlnaW4tZW1iZWRkZXItcG9saWN5L3Jl
cXVpcmUtY29ycC1hYm91dC1zcmNkb2MuaHR0cHMtZXhwZWN0ZWQudHh0CkBAIC0yLDUgKzIsNSBA
QAogCiBQQVNTIFdhaXQgZm9yIHRoZSBET00gdG8gYmUgYnVpbHQuCiBQQVNTIGFib3V0OnNyY2Rv
YyBjYW4gYWx3YXlzIGJlIGVtYmVkZGVkIGJ5IGEgJ3JlcXVpcmUtY29ycCcgZG9jdW1lbnQKLUZB
SUwgQShCKEMpKSBBPXJlcXVpcmUtY29ycCwgQj1hYm91dDpzcmNkb2MsIEM9bm8tcmVxdWlyZS1j
b3JwID0+IEMgY2FuJ3QgbG9hZCB3YWl0X2ZvcjogVGltZWQgb3V0IHdhaXRpbmcgb24gY29uZGl0
aW9uCitGQUlMIEEoQihDKSkgQT1yZXF1aXJlLWNvcnAsIEI9YWJvdXQ6c3JjZG9jLCBDPW5vLXJl
cXVpcmUtY29ycCA9PiBDIGNhbid0IGxvYWQgc3RlcF93YWl0X2Z1bmM6IFRpbWVkIG91dCB3YWl0
aW5nIG9uIGNvbmRpdGlvbgogCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mv
d2ViLXBsYXRmb3JtLXRlc3RzL2h0bWwvY3Jvc3Mtb3JpZ2luLWVtYmVkZGVyLXBvbGljeS9yZXF1
aXJlLWNvcnAuaHR0cHMtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dl
Yi1wbGF0Zm9ybS10ZXN0cy9odG1sL2Nyb3NzLW9yaWdpbi1lbWJlZGRlci1wb2xpY3kvcmVxdWly
ZS1jb3JwLmh0dHBzLWV4cGVjdGVkLnR4dAppbmRleCA3MjM4NDQ0OTUyMGQwZjIzZjY5N2YxZmI4
NmZiZGQ4ZmM0MjQwMTYwLi5iYmQ5OTFiNmRkM2M4MzkwNjNlM2M0ZTAxMjc5YmMzMGVhNDFkOGVk
IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3Rz
L2h0bWwvY3Jvc3Mtb3JpZ2luLWVtYmVkZGVyLXBvbGljeS9yZXF1aXJlLWNvcnAuaHR0cHMtZXhw
ZWN0ZWQudHh0CisrKyBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVz
dHMvaHRtbC9jcm9zcy1vcmlnaW4tZW1iZWRkZXItcG9saWN5L3JlcXVpcmUtY29ycC5odHRwcy1l
eHBlY3RlZC50eHQKQEAgLTEsNSArMSw1IEBACiAKLUZBSUwgInJlcXVpcmUtY29ycCIgdG9wLWxl
dmVsOiBuYXZpZ2F0aW5nIGEgZnJhbWUgdG8gIm5vbmUiIHNob3VsZCBmYWlsIHdhaXRfZm9yOiBU
aW1lZCBvdXQgd2FpdGluZyBvbiBjb25kaXRpb24KK0ZBSUwgInJlcXVpcmUtY29ycCIgdG9wLWxl
dmVsOiBuYXZpZ2F0aW5nIGEgZnJhbWUgdG8gIm5vbmUiIHNob3VsZCBmYWlsIHN0ZXBfd2FpdF9m
dW5jOiBUaW1lZCBvdXQgd2FpdGluZyBvbiBjb25kaXRpb24KIEZBSUwgInJlcXVpcmUtY29ycCIg
dG9wLWxldmVsOiBuYXZpZ2F0aW5nIGEgZnJhbWUgZnJvbSAicmVxdWlyZS1jb3JwIiB0byAibm9u
ZSIgc2hvdWxkIGZhaWwgQ2FuJ3QgZmluZCB2YXJpYWJsZTogQnJvYWRjYXN0Q2hhbm5lbAogRkFJ
TCAicmVxdWlyZS1jb3JwIiB0b3AtbGV2ZWw6IGNyZWF0aW5nIGEgbm9vcGVuZXIgIm5vbmUiIHBv
cHVwIHNob3VsZCBzdWNjZWVkIENhbid0IGZpbmQgdmFyaWFibGU6IEJyb2FkY2FzdENoYW5uZWwK
IEZBSUwgInJlcXVpcmUtY29ycCIgdG9wLWxldmVsOiBjcmVhdGluZyBhICJub25lIiBwb3B1cCBz
aG91bGQgc3VjY2VlZC4gQ2FuJ3QgZmluZCB2YXJpYWJsZTogQnJvYWRjYXN0Q2hhbm5lbApAQCAt
OSw3ICs5LDcgQEAgRkFJTCAicmVxdWlyZS1jb3JwIiB0b3AtbGV2ZWwgKGFzIHBvcHVwIHdpdGgg
b3BlbmVyIHNldCB0byBudWxsKTogbmF2aWdhdGluZyB0bwogUEFTUyAicmVxdWlyZS1jb3JwIiB0
b3AtbGV2ZWw6IGZldGNoKCkgdG8gQ09SUDogY3Jvc3Mtb3JpZ2luIHJlc3BvbnNlIHNob3VsZCBz
dWNjZWVkCiBGQUlMICJyZXF1aXJlLWNvcnAiIHRvcC1sZXZlbDogZmV0Y2goKSB0byByZXNwb25z
ZSB3aXRob3V0IENPUlAgc2hvdWxkIGZhaWwgYXNzZXJ0X3VucmVhY2hlZDogU2hvdWxkIGhhdmUg
cmVqZWN0ZWQ6IHVuZGVmaW5lZCBSZWFjaGVkIHVucmVhY2hhYmxlIGNvZGUKIEZBSUwgInJlcXVp
cmUtY29ycCIgdG9wLWxldmVsOiBmZXRjaCgpIHRvIHJlc3BvbnNlIHdpdGhvdXQgQ09SUCB0aHJv
dWdoIGEgV2luZG93UHJveHkgc2hvdWxkIGZhaWwgYXNzZXJ0X3VucmVhY2hlZDogU2hvdWxkIGhh
dmUgcmVqZWN0ZWQ6IHVuZGVmaW5lZCBSZWFjaGVkIHVucmVhY2hhYmxlIGNvZGUKLUZBSUwgInJl
cXVpcmUtY29ycCIgdG9wLWxldmVsOiBuYXZpZ2F0aW5nIGFuIGlmcmFtZSB0byBhIHBhZ2Ugd2l0
aG91dCBDT1JQLCB0aHJvdWdoIGEgV2luZG93UHJveHksIHNob3VsZCBmYWlsIHdhaXRfZm9yOiBU
aW1lZCBvdXQgd2FpdGluZyBvbiBjb25kaXRpb24KK0ZBSUwgInJlcXVpcmUtY29ycCIgdG9wLWxl
dmVsOiBuYXZpZ2F0aW5nIGFuIGlmcmFtZSB0byBhIHBhZ2Ugd2l0aG91dCBDT1JQLCB0aHJvdWdo
IGEgV2luZG93UHJveHksIHNob3VsZCBmYWlsIHN0ZXBfd2FpdF9mdW5jOiBUaW1lZCBvdXQgd2Fp
dGluZyBvbiBjb25kaXRpb24KIFBBU1MgQ09SUDogc2FtZS1zaXRlIGlzIGNoZWNrZWQgYW5kIGFs
bG93ZWQuCiBGQUlMIENPUlA6IHNhbWUtc2l0ZSBpcyBjaGVja2VkIGFuZCBibG9ja2VkLiBhc3Nl
cnRfZmFsc2U6IGV4cGVjdGVkIGZhbHNlIGdvdCB0cnVlCiBGQUlMIG5hdmlnYXRpb24gQ09SUCBp
cyBjaGVja2VkIHdpdGggdGhlIHBhcmVudCBmcmFtZSwgbm90IHRoZSBuYXZpZ2F0aW9uIHNvdXJj
ZSAtIHRvIGJlIGFsbG93ZWQgQ2FuJ3QgZmluZCB2YXJpYWJsZTogQnJvYWRjYXN0Q2hhbm5lbApk
aWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9y
ZXNvdXJjZXMvY2hyb21pdW0vUkVBRE1FLm1kIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dl
Yi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vUkVBRE1FLm1kCmluZGV4IGI1M2M2
YThjNDIzMmRiZTljNzg3YjBlYTE3ZjBlZDFhNDlmMWUzODYuLmVjOTUzMDMzZjliZjViMDZiYmQy
YThiNmVjY2Y0ZmFlNDc2MDE4NWYgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3cz
Yy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL1JFQURNRS5tZAorKysgYi9M
YXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9jaHJv
bWl1bS9SRUFETUUubWQKQEAgLTEsNCArMSw3IEBACi1UaGlzIGRpcmVjdG9yeSBjb250YWlucyBD
aHJvbWl1bS1zcGVjaWZpYyB0ZXN0IHJlc291cmNlcy4KK1RoaXMgZGlyZWN0b3J5IGNvbnRhaW5z
IENocm9taXVtLXNwZWNpZmljIHRlc3QgcmVzb3VyY2VzLCBpbmNsdWRpbmcgbW9ja3MgZm9yCit0
ZXN0LW9ubHkgQVBJcyBpbXBsZW1lbnRlZCB3aXRoCitbTW9qb0pTXShodHRwczovL2Nocm9taXVt
Lmdvb2dsZXNvdXJjZS5jb20vY2hyb21pdW0vc3JjLysvbWFzdGVyL21vam8vcHVibGljL2pzL1JF
QURNRS5tZCkuCiAKLVRoZSBmaWxlcyBgbW9qb19iaW5kaW5ncy5qc2AgYW5kIGAqLm1vam9tLmpz
YCBhcmUgbWFudWFsbHkgY29waWVkIGZyb20gdGhlCi1DaHJvbWl1bSBidWlsZCBwcm9jZXNzJ3Mg
Z2VuZXJhdGVkIGZpbGVzIGFuZCBzaG91bGQgbm90IGJlIGVkaXRlZCBtYW51YWxseS4KK1BsZWFz
ZSBkbyAqKm5vdCoqIGNvcHkgYCoubW9qb20uanNgIGludG8gdGhpcyBkaXJlY3RvcnkuIEZvbGxv
dyB0aGlzIGRvYyBpZiB5b3UKK3dhbnQgdG8gYWRkIG5ldyBNb2pvSlMtYmFja2VkIG1vY2tzOgor
aHR0cHM6Ly9jaHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2Nocm9taXVtL3NyYy8rL21hc3Rlci9k
b2NzL3Rlc3Rpbmcvd2ViX3BsYXRmb3JtX3Rlc3RzLm1kI21vam9qcwpkaWZmIC0tZ2l0IGEvTGF5
b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21p
dW0vYmlnX2J1ZmZlci5tb2pvbS5qcyBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxh
dGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL2JpZ19idWZmZXIubW9qb20uanMKZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYwOTcwNmVlYmI4MjI4NTE4NGNkYzI3YWQ5YTM2OWYw
YmVmNTQxOTMuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEv
TGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hy
b21pdW0vYmlnX2J1ZmZlci5tb2pvbS5qcworKysgL2Rldi9udWxsCkBAIC0xLDI2MyArMCwwIEBA
Ci0vLyBDb3B5cmlnaHQgMjAxNCBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0
eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0K
LSd1c2Ugc3RyaWN0JzsKLQotKGZ1bmN0aW9uKCkgewotICB2YXIgbW9qb21JZCA9ICdtb2pvL3B1
YmxpYy9tb2pvbS9iYXNlL2JpZ19idWZmZXIubW9qb20nOwotICBpZiAobW9qby5pbnRlcm5hbC5p
c01vam9tTG9hZGVkKG1vam9tSWQpKSB7Ci0gICAgY29uc29sZS53YXJuKCdUaGUgZm9sbG93aW5n
IG1vam9tIGlzIGxvYWRlZCBtdWx0aXBsZSB0aW1lczogJyArIG1vam9tSWQpOwotICAgIHJldHVy
bjsKLSAgfQotICBtb2pvLmludGVybmFsLm1hcmtNb2pvbUxvYWRlZChtb2pvbUlkKTsKLSAgdmFy
IGJpbmRpbmdzID0gbW9qbzsKLSAgdmFyIGFzc29jaWF0ZWRCaW5kaW5ncyA9IG1vam87Ci0gIHZh
ciBjb2RlYyA9IG1vam8uaW50ZXJuYWw7Ci0gIHZhciB2YWxpZGF0b3IgPSBtb2pvLmludGVybmFs
OwotCi0gIHZhciBleHBvcnRzID0gbW9qby5pbnRlcm5hbC5leHBvc2VOYW1lc3BhY2UoJ21vam9C
YXNlLm1vam9tJyk7Ci0KLQotCi0gIGZ1bmN0aW9uIEJpZ0J1ZmZlclNoYXJlZE1lbW9yeVJlZ2lv
bih2YWx1ZXMpIHsKLSAgICB0aGlzLmluaXREZWZhdWx0c18oKTsKLSAgICB0aGlzLmluaXRGaWVs
ZHNfKHZhbHVlcyk7Ci0gIH0KLQotCi0gIEJpZ0J1ZmZlclNoYXJlZE1lbW9yeVJlZ2lvbi5wcm90
b3R5cGUuaW5pdERlZmF1bHRzXyA9IGZ1bmN0aW9uKCkgewotICAgIHRoaXMuYnVmZmVySGFuZGxl
ID0gbnVsbDsKLSAgICB0aGlzLnNpemUgPSAwOwotICB9OwotICBCaWdCdWZmZXJTaGFyZWRNZW1v
cnlSZWdpb24ucHJvdG90eXBlLmluaXRGaWVsZHNfID0gZnVuY3Rpb24oZmllbGRzKSB7Ci0gICAg
Zm9yKHZhciBmaWVsZCBpbiBmaWVsZHMpIHsKLSAgICAgICAgaWYgKHRoaXMuaGFzT3duUHJvcGVy
dHkoZmllbGQpKQotICAgICAgICAgIHRoaXNbZmllbGRdID0gZmllbGRzW2ZpZWxkXTsKLSAgICB9
Ci0gIH07Ci0KLSAgQmlnQnVmZmVyU2hhcmVkTWVtb3J5UmVnaW9uLnZhbGlkYXRlID0gZnVuY3Rp
b24obWVzc2FnZVZhbGlkYXRvciwgb2Zmc2V0KSB7Ci0gICAgdmFyIGVycjsKLSAgICBlcnIgPSBt
ZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0SGVhZGVyKG9mZnNldCwgY29kZWMua1N0cnVj
dEhlYWRlclNpemUpOwotICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3Iu
Tk9ORSkKLSAgICAgICAgcmV0dXJuIGVycjsKLQotICAgIHZhciBrVmVyc2lvblNpemVzID0gWwot
ICAgICAge3ZlcnNpb246IDAsIG51bUJ5dGVzOiAxNn0KLSAgICBdOwotICAgIGVyciA9IG1lc3Nh
Z2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RWZXJzaW9uKG9mZnNldCwga1ZlcnNpb25TaXplcyk7
Ci0gICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQotICAgICAg
ICByZXR1cm4gZXJyOwotCi0KLSAgICAvLyB2YWxpZGF0ZSBCaWdCdWZmZXJTaGFyZWRNZW1vcnlS
ZWdpb24uYnVmZmVySGFuZGxlCi0gICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZUhh
bmRsZShvZmZzZXQgKyBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDAsIGZhbHNlKQotICAgIGlm
IChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKLSAgICAgICAgcmV0dXJu
IGVycjsKLQotCi0gICAgcmV0dXJuIHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORTsKLSAg
fTsKLQotICBCaWdCdWZmZXJTaGFyZWRNZW1vcnlSZWdpb24uZW5jb2RlZFNpemUgPSBjb2RlYy5r
U3RydWN0SGVhZGVyU2l6ZSArIDg7Ci0KLSAgQmlnQnVmZmVyU2hhcmVkTWVtb3J5UmVnaW9uLmRl
Y29kZSA9IGZ1bmN0aW9uKGRlY29kZXIpIHsKLSAgICB2YXIgcGFja2VkOwotICAgIHZhciB2YWwg
PSBuZXcgQmlnQnVmZmVyU2hhcmVkTWVtb3J5UmVnaW9uKCk7Ci0gICAgdmFyIG51bWJlck9mQnl0
ZXMgPSBkZWNvZGVyLnJlYWRVaW50MzIoKTsKLSAgICB2YXIgdmVyc2lvbiA9IGRlY29kZXIucmVh
ZFVpbnQzMigpOwotICAgIHZhbC5idWZmZXJIYW5kbGUgPSBkZWNvZGVyLmRlY29kZVN0cnVjdChj
b2RlYy5IYW5kbGUpOwotICAgIHZhbC5zaXplID0gZGVjb2Rlci5kZWNvZGVTdHJ1Y3QoY29kZWMu
VWludDMyKTsKLSAgICByZXR1cm4gdmFsOwotICB9OwotCi0gIEJpZ0J1ZmZlclNoYXJlZE1lbW9y
eVJlZ2lvbi5lbmNvZGUgPSBmdW5jdGlvbihlbmNvZGVyLCB2YWwpIHsKLSAgICB2YXIgcGFja2Vk
OwotICAgIGVuY29kZXIud3JpdGVVaW50MzIoQmlnQnVmZmVyU2hhcmVkTWVtb3J5UmVnaW9uLmVu
Y29kZWRTaXplKTsKLSAgICBlbmNvZGVyLndyaXRlVWludDMyKDApOwotICAgIGVuY29kZXIuZW5j
b2RlU3RydWN0KGNvZGVjLkhhbmRsZSwgdmFsLmJ1ZmZlckhhbmRsZSk7Ci0gICAgZW5jb2Rlci5l
bmNvZGVTdHJ1Y3QoY29kZWMuVWludDMyLCB2YWwuc2l6ZSk7Ci0gIH07Ci0KLSAgZnVuY3Rpb24g
QmlnQnVmZmVyKHZhbHVlKSB7Ci0gICAgdGhpcy5pbml0RGVmYXVsdF8oKTsKLSAgICB0aGlzLmlu
aXRWYWx1ZV8odmFsdWUpOwotICB9Ci0KLQotICBCaWdCdWZmZXIuVGFncyA9IHsKLSAgICBieXRl
czogMCwKLSAgICBzaGFyZWRNZW1vcnk6IDEsCi0gICAgaW52YWxpZEJ1ZmZlcjogMiwKLSAgfTsK
LQotICBCaWdCdWZmZXIucHJvdG90eXBlLmluaXREZWZhdWx0XyA9IGZ1bmN0aW9uKCkgewotICAg
IHRoaXMuJGRhdGEgPSBudWxsOwotICAgIHRoaXMuJHRhZyA9IHVuZGVmaW5lZDsKLSAgfQotCi0g
IEJpZ0J1ZmZlci5wcm90b3R5cGUuaW5pdFZhbHVlXyA9IGZ1bmN0aW9uKHZhbHVlKSB7Ci0gICAg
aWYgKHZhbHVlID09IHVuZGVmaW5lZCkgewotICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIHZh
ciBrZXlzID0gT2JqZWN0LmtleXModmFsdWUpOwotICAgIGlmIChrZXlzLmxlbmd0aCA9PSAwKSB7
Ci0gICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKGtleXMubGVuZ3RoID4gMSkgewotICAg
ICAgdGhyb3cgbmV3IFR5cGVFcnJvcigiWW91IG1heSBzZXQgb25seSBvbmUgbWVtYmVyIG9uIGEg
dW5pb24uIik7Ci0gICAgfQotCi0gICAgdmFyIGZpZWxkcyA9IFsKLSAgICAgICAgImJ5dGVzIiwK
LSAgICAgICAgInNoYXJlZE1lbW9yeSIsCi0gICAgICAgICJpbnZhbGlkQnVmZmVyIiwKLSAgICBd
OwotCi0gICAgaWYgKGZpZWxkcy5pbmRleE9mKGtleXNbMF0pIDwgMCkgewotICAgICAgdGhyb3cg
bmV3IFJlZmVyZW5jZUVycm9yKGtleXNbMF0gKyAiIGlzIG5vdCBhIEJpZ0J1ZmZlciBtZW1iZXIu
Iik7Ci0KLSAgICB9Ci0KLSAgICB0aGlzW2tleXNbMF1dID0gdmFsdWVba2V5c1swXV07Ci0gIH0K
LSAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEJpZ0J1ZmZlci5wcm90b3R5cGUsICJieXRlcyIsIHsK
LSAgICBnZXQ6IGZ1bmN0aW9uKCkgewotICAgICAgaWYgKHRoaXMuJHRhZyAhPSBCaWdCdWZmZXIu
VGFncy5ieXRlcykgewotICAgICAgICB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoCi0gICAgICAg
ICAgICAiQmlnQnVmZmVyLmJ5dGVzIGlzIG5vdCBjdXJyZW50bHkgc2V0LiIpOwotICAgICAgfQot
ICAgICAgcmV0dXJuIHRoaXMuJGRhdGE7Ci0gICAgfSwKLQotICAgIHNldDogZnVuY3Rpb24odmFs
dWUpIHsKLSAgICAgIHRoaXMuJHRhZyA9IEJpZ0J1ZmZlci5UYWdzLmJ5dGVzOwotICAgICAgdGhp
cy4kZGF0YSA9IHZhbHVlOwotICAgIH0KLSAgfSk7Ci0gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShC
aWdCdWZmZXIucHJvdG90eXBlLCAic2hhcmVkTWVtb3J5IiwgewotICAgIGdldDogZnVuY3Rpb24o
KSB7Ci0gICAgICBpZiAodGhpcy4kdGFnICE9IEJpZ0J1ZmZlci5UYWdzLnNoYXJlZE1lbW9yeSkg
ewotICAgICAgICB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoCi0gICAgICAgICAgICAiQmlnQnVm
ZmVyLnNoYXJlZE1lbW9yeSBpcyBub3QgY3VycmVudGx5IHNldC4iKTsKLSAgICAgIH0KLSAgICAg
IHJldHVybiB0aGlzLiRkYXRhOwotICAgIH0sCi0KLSAgICBzZXQ6IGZ1bmN0aW9uKHZhbHVlKSB7
Ci0gICAgICB0aGlzLiR0YWcgPSBCaWdCdWZmZXIuVGFncy5zaGFyZWRNZW1vcnk7Ci0gICAgICB0
aGlzLiRkYXRhID0gdmFsdWU7Ci0gICAgfQotICB9KTsKLSAgT2JqZWN0LmRlZmluZVByb3BlcnR5
KEJpZ0J1ZmZlci5wcm90b3R5cGUsICJpbnZhbGlkQnVmZmVyIiwgewotICAgIGdldDogZnVuY3Rp
b24oKSB7Ci0gICAgICBpZiAodGhpcy4kdGFnICE9IEJpZ0J1ZmZlci5UYWdzLmludmFsaWRCdWZm
ZXIpIHsKLSAgICAgICAgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKAotICAgICAgICAgICAgIkJp
Z0J1ZmZlci5pbnZhbGlkQnVmZmVyIGlzIG5vdCBjdXJyZW50bHkgc2V0LiIpOwotICAgICAgfQot
ICAgICAgcmV0dXJuIHRoaXMuJGRhdGE7Ci0gICAgfSwKLQotICAgIHNldDogZnVuY3Rpb24odmFs
dWUpIHsKLSAgICAgIHRoaXMuJHRhZyA9IEJpZ0J1ZmZlci5UYWdzLmludmFsaWRCdWZmZXI7Ci0g
ICAgICB0aGlzLiRkYXRhID0gdmFsdWU7Ci0gICAgfQotICB9KTsKLQotCi0gICAgQmlnQnVmZmVy
LmVuY29kZSA9IGZ1bmN0aW9uKGVuY29kZXIsIHZhbCkgewotICAgICAgaWYgKHZhbCA9PSBudWxs
KSB7Ci0gICAgICAgIGVuY29kZXIud3JpdGVVaW50NjQoMCk7Ci0gICAgICAgIGVuY29kZXIud3Jp
dGVVaW50NjQoMCk7Ci0gICAgICAgIHJldHVybjsKLSAgICAgIH0KLSAgICAgIGlmICh2YWwuJHRh
ZyA9PSB1bmRlZmluZWQpIHsKLSAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGVu
Y29kZSB1bmlvbnMgd2l0aCBhbiB1bmtub3duIG1lbWJlciBzZXQuIik7Ci0gICAgICB9Ci0KLSAg
ICAgIGVuY29kZXIud3JpdGVVaW50MzIoMTYpOwotICAgICAgZW5jb2Rlci53cml0ZVVpbnQzMih2
YWwuJHRhZyk7Ci0gICAgICBzd2l0Y2ggKHZhbC4kdGFnKSB7Ci0gICAgICAgIGNhc2UgQmlnQnVm
ZmVyLlRhZ3MuYnl0ZXM6Ci0gICAgICAgICAgZW5jb2Rlci5lbmNvZGVBcnJheVBvaW50ZXIoY29k
ZWMuVWludDgsIHZhbC5ieXRlcyk7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQmln
QnVmZmVyLlRhZ3Muc2hhcmVkTWVtb3J5OgotICAgICAgICAgIGVuY29kZXIuZW5jb2RlU3RydWN0
UG9pbnRlcihCaWdCdWZmZXJTaGFyZWRNZW1vcnlSZWdpb24sIHZhbC5zaGFyZWRNZW1vcnkpOwot
ICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEJpZ0J1ZmZlci5UYWdzLmludmFsaWRCdWZm
ZXI6Ci0gICAgICAgICAgZW5jb2Rlci53cml0ZVVpbnQ4KHZhbC5pbnZhbGlkQnVmZmVyID8gMSA6
IDApOwotICAgICAgICAgIGJyZWFrOwotICAgICAgfQotICAgICAgZW5jb2Rlci5hbGlnbigpOwot
ICAgIH07Ci0KLQotICAgIEJpZ0J1ZmZlci5kZWNvZGUgPSBmdW5jdGlvbihkZWNvZGVyKSB7Ci0g
ICAgICB2YXIgc2l6ZSA9IGRlY29kZXIucmVhZFVpbnQzMigpOwotICAgICAgaWYgKHNpemUgPT0g
MCkgewotICAgICAgICBkZWNvZGVyLnJlYWRVaW50MzIoKTsKLSAgICAgICAgZGVjb2Rlci5yZWFk
VWludDY0KCk7Ci0gICAgICAgIHJldHVybiBudWxsOwotICAgICAgfQotCi0gICAgICB2YXIgcmVz
dWx0ID0gbmV3IEJpZ0J1ZmZlcigpOwotICAgICAgdmFyIHRhZyA9IGRlY29kZXIucmVhZFVpbnQz
MigpOwotICAgICAgc3dpdGNoICh0YWcpIHsKLSAgICAgICAgY2FzZSBCaWdCdWZmZXIuVGFncy5i
eXRlczoKLSAgICAgICAgICByZXN1bHQuYnl0ZXMgPSBkZWNvZGVyLmRlY29kZUFycmF5UG9pbnRl
cihjb2RlYy5VaW50OCk7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQmlnQnVmZmVy
LlRhZ3Muc2hhcmVkTWVtb3J5OgotICAgICAgICAgIHJlc3VsdC5zaGFyZWRNZW1vcnkgPSBkZWNv
ZGVyLmRlY29kZVN0cnVjdFBvaW50ZXIoQmlnQnVmZmVyU2hhcmVkTWVtb3J5UmVnaW9uKTsKLSAg
ICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBCaWdCdWZmZXIuVGFncy5pbnZhbGlkQnVmZmVy
OgotICAgICAgICAgIHJlc3VsdC5pbnZhbGlkQnVmZmVyID0gZGVjb2Rlci5yZWFkVWludDgoKSA/
IHRydWUgOiBmYWxzZTsKLSAgICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICAgIGRlY29kZXIu
YWxpZ24oKTsKLQotICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9OwotCi0KLSAgICBCaWdCdWZm
ZXIudmFsaWRhdGUgPSBmdW5jdGlvbihtZXNzYWdlVmFsaWRhdG9yLCBvZmZzZXQpIHsKLSAgICAg
IHZhciBzaXplID0gbWVzc2FnZVZhbGlkYXRvci5kZWNvZGVVbmlvblNpemUob2Zmc2V0KTsKLSAg
ICAgIGlmIChzaXplICE9IDE2KSB7Ci0gICAgICAgIHJldHVybiB2YWxpZGF0b3IudmFsaWRhdGlv
bkVycm9yLklOVkFMSURfVU5JT05fU0laRTsKLSAgICAgIH0KLQotICAgICAgdmFyIHRhZyA9IG1l
c3NhZ2VWYWxpZGF0b3IuZGVjb2RlVW5pb25UYWcob2Zmc2V0KTsKLSAgICAgIHZhciBkYXRhX29m
ZnNldCA9IG9mZnNldCArIDg7Ci0gICAgICB2YXIgZXJyOwotICAgICAgc3dpdGNoICh0YWcpIHsK
LSAgICAgICAgY2FzZSBCaWdCdWZmZXIuVGFncy5ieXRlczoKLQotCi0gICAgLy8gdmFsaWRhdGUg
QmlnQnVmZmVyLmJ5dGVzCi0gICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZUFycmF5
UG9pbnRlcihkYXRhX29mZnNldCwgMSwgY29kZWMuVWludDgsIGZhbHNlLCBbMF0sIDApOwotICAg
IGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKLSAgICAgICAgcmV0
dXJuIGVycjsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBCaWdCdWZmZXIuVGFncy5z
aGFyZWRNZW1vcnk6Ci0KLQotICAgIC8vIHZhbGlkYXRlIEJpZ0J1ZmZlci5zaGFyZWRNZW1vcnkK
LSAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0UG9pbnRlcihkYXRhX29m
ZnNldCwgQmlnQnVmZmVyU2hhcmVkTWVtb3J5UmVnaW9uLCBmYWxzZSk7Ci0gICAgaWYgKGVyciAh
PT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQotICAgICAgICByZXR1cm4gZXJyOwot
ICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEJpZ0J1ZmZlci5UYWdzLmludmFsaWRCdWZm
ZXI6Ci0KLQotICAgICAgICAgIGJyZWFrOwotICAgICAgfQotCi0gICAgICByZXR1cm4gdmFsaWRh
dG9yLnZhbGlkYXRpb25FcnJvci5OT05FOwotICAgIH07Ci0KLSAgQmlnQnVmZmVyLmVuY29kZWRT
aXplID0gMTY7Ci0gIGV4cG9ydHMuQmlnQnVmZmVyU2hhcmVkTWVtb3J5UmVnaW9uID0gQmlnQnVm
ZmVyU2hhcmVkTWVtb3J5UmVnaW9uOwotICBleHBvcnRzLkJpZ0J1ZmZlciA9IEJpZ0J1ZmZlcjsK
LX0pKCk7CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3Jt
LXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS9iaWdfYnVmZmVyLm1vam9tLmpzLmhlYWRlcnMgYi9M
YXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9jaHJv
bWl1bS9iaWdfYnVmZmVyLm1vam9tLmpzLmhlYWRlcnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDZjNjFhMzRhNGVjMmU3NTA5NmRiMGViOWY3NzQ4YjE0MmYwZGI3YmIuLjAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvTGF5b3V0VGVzdHMvaW1wb3J0
ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vYmlnX2J1ZmZlci5t
b2pvbS5qcy5oZWFkZXJzCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotQ29udGVudC1UeXBl
OiB0ZXh0L2phdmFzY3JpcHQ7IGNoYXJzZXQ9dXRmLTgKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBm
aWxlCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRl
c3RzL3Jlc291cmNlcy9jaHJvbWl1bS9kZXZpY2UubW9qb20uanMgYi9MYXlvdXRUZXN0cy9pbXBv
cnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS9kZXZpY2UubW9q
b20uanMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY0ODhjYmM2OWMyOTE3MGQ5NDQx
ZDIyMTBkYTI3YTQ2NGY2N2Q0NDUuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAKLS0tIGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9y
ZXNvdXJjZXMvY2hyb21pdW0vZGV2aWNlLm1vam9tLmpzCisrKyAvZGV2L251bGwKQEAgLTEsMzc4
OCArMCwwIEBACi0vLyBDb3B5cmlnaHQgMjAxNCBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5
IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNF
IGZpbGUuCi0KLSd1c2Ugc3RyaWN0JzsKLQotKGZ1bmN0aW9uKCkgewotICB2YXIgbW9qb21JZCA9
ICdkZXZpY2UvdXNiL3B1YmxpYy9tb2pvbS9kZXZpY2UubW9qb20nOwotICBpZiAobW9qby5pbnRl
cm5hbC5pc01vam9tTG9hZGVkKG1vam9tSWQpKSB7Ci0gICAgY29uc29sZS53YXJuKCdUaGUgZm9s
bG93aW5nIG1vam9tIGlzIGxvYWRlZCBtdWx0aXBsZSB0aW1lczogJyArIG1vam9tSWQpOwotICAg
IHJldHVybjsKLSAgfQotICBtb2pvLmludGVybmFsLm1hcmtNb2pvbUxvYWRlZChtb2pvbUlkKTsK
LSAgdmFyIGJpbmRpbmdzID0gbW9qbzsKLSAgdmFyIGFzc29jaWF0ZWRCaW5kaW5ncyA9IG1vam87
Ci0gIHZhciBjb2RlYyA9IG1vam8uaW50ZXJuYWw7Ci0gIHZhciB2YWxpZGF0b3IgPSBtb2pvLmlu
dGVybmFsOwotCi0gIHZhciBleHBvcnRzID0gbW9qby5pbnRlcm5hbC5leHBvc2VOYW1lc3BhY2Uo
J2RldmljZS5tb2pvbScpOwotICB2YXIgc3RyaW5nMTYkID0KLSAgICAgIG1vam8uaW50ZXJuYWwu
ZXhwb3NlTmFtZXNwYWNlKCdtb2pvQmFzZS5tb2pvbScpOwotICBpZiAobW9qby5jb25maWcuYXV0
b0xvYWRNb2pvbURlcHMpIHsKLSAgICBtb2pvLmludGVybmFsLmxvYWRNb2pvbUlmTmVjZXNzYXJ5
KAotICAgICAgICAnbW9qby9wdWJsaWMvbW9qb20vYmFzZS9zdHJpbmcxNi5tb2pvbScsICcuLi8u
Li8uLi8uLi9tb2pvL3B1YmxpYy9tb2pvbS9iYXNlL3N0cmluZzE2Lm1vam9tLmpzJyk7Ci0gIH0K
LSAgdmFyIHVybCQgPQotICAgICAgbW9qby5pbnRlcm5hbC5leHBvc2VOYW1lc3BhY2UoJ3VybC5t
b2pvbScpOwotICBpZiAobW9qby5jb25maWcuYXV0b0xvYWRNb2pvbURlcHMpIHsKLSAgICBtb2pv
LmludGVybmFsLmxvYWRNb2pvbUlmTmVjZXNzYXJ5KAotICAgICAgICAndXJsL21vam9tL3VybC5t
b2pvbScsICcuLi8uLi8uLi8uLi91cmwvbW9qb20vdXJsLm1vam9tLmpzJyk7Ci0gIH0KLQotCi0g
IHZhciBVc2JPcGVuRGV2aWNlRXJyb3IgPSB7fTsKLSAgVXNiT3BlbkRldmljZUVycm9yLk9LID0g
MDsKLSAgVXNiT3BlbkRldmljZUVycm9yLkFDQ0VTU19ERU5JRUQgPSBVc2JPcGVuRGV2aWNlRXJy
b3IuT0sgKyAxOwotICBVc2JPcGVuRGV2aWNlRXJyb3IuQUxSRUFEWV9PUEVOID0gVXNiT3BlbkRl
dmljZUVycm9yLkFDQ0VTU19ERU5JRUQgKyAxOwotICBVc2JPcGVuRGV2aWNlRXJyb3IuTUlOX1ZB
TFVFID0gMCwKLSAgVXNiT3BlbkRldmljZUVycm9yLk1BWF9WQUxVRSA9IDIsCi0KLSAgVXNiT3Bl
bkRldmljZUVycm9yLmlzS25vd25FbnVtVmFsdWUgPSBmdW5jdGlvbih2YWx1ZSkgewotICAgIHN3
aXRjaCAodmFsdWUpIHsKLSAgICBjYXNlIDA6Ci0gICAgY2FzZSAxOgotICAgIGNhc2UgMjoKLSAg
ICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci0gIH07Ci0KLSAgVXNi
T3BlbkRldmljZUVycm9yLnZhbGlkYXRlID0gZnVuY3Rpb24oZW51bVZhbHVlKSB7Ci0gICAgdmFy
IGlzRXh0ZW5zaWJsZSA9IGZhbHNlOwotICAgIGlmIChpc0V4dGVuc2libGUgfHwgdGhpcy5pc0tu
b3duRW51bVZhbHVlKGVudW1WYWx1ZSkpCi0gICAgICByZXR1cm4gdmFsaWRhdG9yLnZhbGlkYXRp
b25FcnJvci5OT05FOwotCi0gICAgcmV0dXJuIHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuVU5L
Tk9XTl9FTlVNX1ZBTFVFOwotICB9OwotICB2YXIgVXNiVHJhbnNmZXJEaXJlY3Rpb24gPSB7fTsK
LSAgVXNiVHJhbnNmZXJEaXJlY3Rpb24uSU5CT1VORCA9IDA7Ci0gIFVzYlRyYW5zZmVyRGlyZWN0
aW9uLk9VVEJPVU5EID0gVXNiVHJhbnNmZXJEaXJlY3Rpb24uSU5CT1VORCArIDE7Ci0gIFVzYlRy
YW5zZmVyRGlyZWN0aW9uLk1JTl9WQUxVRSA9IDAsCi0gIFVzYlRyYW5zZmVyRGlyZWN0aW9uLk1B
WF9WQUxVRSA9IDEsCi0KLSAgVXNiVHJhbnNmZXJEaXJlY3Rpb24uaXNLbm93bkVudW1WYWx1ZSA9
IGZ1bmN0aW9uKHZhbHVlKSB7Ci0gICAgc3dpdGNoICh2YWx1ZSkgewotICAgIGNhc2UgMDoKLSAg
ICBjYXNlIDE6Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwot
ICB9OwotCi0gIFVzYlRyYW5zZmVyRGlyZWN0aW9uLnZhbGlkYXRlID0gZnVuY3Rpb24oZW51bVZh
bHVlKSB7Ci0gICAgdmFyIGlzRXh0ZW5zaWJsZSA9IGZhbHNlOwotICAgIGlmIChpc0V4dGVuc2li
bGUgfHwgdGhpcy5pc0tub3duRW51bVZhbHVlKGVudW1WYWx1ZSkpCi0gICAgICByZXR1cm4gdmFs
aWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FOwotCi0gICAgcmV0dXJuIHZhbGlkYXRvci52YWxp
ZGF0aW9uRXJyb3IuVU5LTk9XTl9FTlVNX1ZBTFVFOwotICB9OwotICB2YXIgVXNiQ29udHJvbFRy
YW5zZmVyVHlwZSA9IHt9OwotICBVc2JDb250cm9sVHJhbnNmZXJUeXBlLlNUQU5EQVJEID0gMDsK
LSAgVXNiQ29udHJvbFRyYW5zZmVyVHlwZS5DTEFTUyA9IFVzYkNvbnRyb2xUcmFuc2ZlclR5cGUu
U1RBTkRBUkQgKyAxOwotICBVc2JDb250cm9sVHJhbnNmZXJUeXBlLlZFTkRPUiA9IFVzYkNvbnRy
b2xUcmFuc2ZlclR5cGUuQ0xBU1MgKyAxOwotICBVc2JDb250cm9sVHJhbnNmZXJUeXBlLlJFU0VS
VkVEID0gVXNiQ29udHJvbFRyYW5zZmVyVHlwZS5WRU5ET1IgKyAxOwotICBVc2JDb250cm9sVHJh
bnNmZXJUeXBlLk1JTl9WQUxVRSA9IDAsCi0gIFVzYkNvbnRyb2xUcmFuc2ZlclR5cGUuTUFYX1ZB
TFVFID0gMywKLQotICBVc2JDb250cm9sVHJhbnNmZXJUeXBlLmlzS25vd25FbnVtVmFsdWUgPSBm
dW5jdGlvbih2YWx1ZSkgewotICAgIHN3aXRjaCAodmFsdWUpIHsKLSAgICBjYXNlIDA6Ci0gICAg
Y2FzZSAxOgotICAgIGNhc2UgMjoKLSAgICBjYXNlIDM6Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAg
ICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9OwotCi0gIFVzYkNvbnRyb2xUcmFuc2ZlclR5cGUu
dmFsaWRhdGUgPSBmdW5jdGlvbihlbnVtVmFsdWUpIHsKLSAgICB2YXIgaXNFeHRlbnNpYmxlID0g
ZmFsc2U7Ci0gICAgaWYgKGlzRXh0ZW5zaWJsZSB8fCB0aGlzLmlzS25vd25FbnVtVmFsdWUoZW51
bVZhbHVlKSkKLSAgICAgIHJldHVybiB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkU7Ci0K
LSAgICByZXR1cm4gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5VTktOT1dOX0VOVU1fVkFMVUU7
Ci0gIH07Ci0gIHZhciBVc2JDb250cm9sVHJhbnNmZXJSZWNpcGllbnQgPSB7fTsKLSAgVXNiQ29u
dHJvbFRyYW5zZmVyUmVjaXBpZW50LkRFVklDRSA9IDA7Ci0gIFVzYkNvbnRyb2xUcmFuc2ZlclJl
Y2lwaWVudC5JTlRFUkZBQ0UgPSBVc2JDb250cm9sVHJhbnNmZXJSZWNpcGllbnQuREVWSUNFICsg
MTsKLSAgVXNiQ29udHJvbFRyYW5zZmVyUmVjaXBpZW50LkVORFBPSU5UID0gVXNiQ29udHJvbFRy
YW5zZmVyUmVjaXBpZW50LklOVEVSRkFDRSArIDE7Ci0gIFVzYkNvbnRyb2xUcmFuc2ZlclJlY2lw
aWVudC5PVEhFUiA9IFVzYkNvbnRyb2xUcmFuc2ZlclJlY2lwaWVudC5FTkRQT0lOVCArIDE7Ci0g
IFVzYkNvbnRyb2xUcmFuc2ZlclJlY2lwaWVudC5NSU5fVkFMVUUgPSAwLAotICBVc2JDb250cm9s
VHJhbnNmZXJSZWNpcGllbnQuTUFYX1ZBTFVFID0gMywKLQotICBVc2JDb250cm9sVHJhbnNmZXJS
ZWNpcGllbnQuaXNLbm93bkVudW1WYWx1ZSA9IGZ1bmN0aW9uKHZhbHVlKSB7Ci0gICAgc3dpdGNo
ICh2YWx1ZSkgewotICAgIGNhc2UgMDoKLSAgICBjYXNlIDE6Ci0gICAgY2FzZSAyOgotICAgIGNh
c2UgMzoKLSAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci0gIH07
Ci0KLSAgVXNiQ29udHJvbFRyYW5zZmVyUmVjaXBpZW50LnZhbGlkYXRlID0gZnVuY3Rpb24oZW51
bVZhbHVlKSB7Ci0gICAgdmFyIGlzRXh0ZW5zaWJsZSA9IGZhbHNlOwotICAgIGlmIChpc0V4dGVu
c2libGUgfHwgdGhpcy5pc0tub3duRW51bVZhbHVlKGVudW1WYWx1ZSkpCi0gICAgICByZXR1cm4g
dmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FOwotCi0gICAgcmV0dXJuIHZhbGlkYXRvci52
YWxpZGF0aW9uRXJyb3IuVU5LTk9XTl9FTlVNX1ZBTFVFOwotICB9OwotICB2YXIgVXNiVHJhbnNm
ZXJUeXBlID0ge307Ci0gIFVzYlRyYW5zZmVyVHlwZS5DT05UUk9MID0gMDsKLSAgVXNiVHJhbnNm
ZXJUeXBlLklTT0NIUk9OT1VTID0gVXNiVHJhbnNmZXJUeXBlLkNPTlRST0wgKyAxOwotICBVc2JU
cmFuc2ZlclR5cGUuQlVMSyA9IFVzYlRyYW5zZmVyVHlwZS5JU09DSFJPTk9VUyArIDE7Ci0gIFVz
YlRyYW5zZmVyVHlwZS5JTlRFUlJVUFQgPSBVc2JUcmFuc2ZlclR5cGUuQlVMSyArIDE7Ci0gIFVz
YlRyYW5zZmVyVHlwZS5NSU5fVkFMVUUgPSAwLAotICBVc2JUcmFuc2ZlclR5cGUuTUFYX1ZBTFVF
ID0gMywKLQotICBVc2JUcmFuc2ZlclR5cGUuaXNLbm93bkVudW1WYWx1ZSA9IGZ1bmN0aW9uKHZh
bHVlKSB7Ci0gICAgc3dpdGNoICh2YWx1ZSkgewotICAgIGNhc2UgMDoKLSAgICBjYXNlIDE6Ci0g
ICAgY2FzZSAyOgotICAgIGNhc2UgMzoKLSAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICBy
ZXR1cm4gZmFsc2U7Ci0gIH07Ci0KLSAgVXNiVHJhbnNmZXJUeXBlLnZhbGlkYXRlID0gZnVuY3Rp
b24oZW51bVZhbHVlKSB7Ci0gICAgdmFyIGlzRXh0ZW5zaWJsZSA9IGZhbHNlOwotICAgIGlmIChp
c0V4dGVuc2libGUgfHwgdGhpcy5pc0tub3duRW51bVZhbHVlKGVudW1WYWx1ZSkpCi0gICAgICBy
ZXR1cm4gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FOwotCi0gICAgcmV0dXJuIHZhbGlk
YXRvci52YWxpZGF0aW9uRXJyb3IuVU5LTk9XTl9FTlVNX1ZBTFVFOwotICB9OwotICB2YXIgVXNi
U3luY2hyb25pemF0aW9uVHlwZSA9IHt9OwotICBVc2JTeW5jaHJvbml6YXRpb25UeXBlLk5PTkUg
PSAwOwotICBVc2JTeW5jaHJvbml6YXRpb25UeXBlLkFTWU5DSFJPTk9VUyA9IFVzYlN5bmNocm9u
aXphdGlvblR5cGUuTk9ORSArIDE7Ci0gIFVzYlN5bmNocm9uaXphdGlvblR5cGUuQURBUFRJVkUg
PSBVc2JTeW5jaHJvbml6YXRpb25UeXBlLkFTWU5DSFJPTk9VUyArIDE7Ci0gIFVzYlN5bmNocm9u
aXphdGlvblR5cGUuU1lOQ0hST05PVVMgPSBVc2JTeW5jaHJvbml6YXRpb25UeXBlLkFEQVBUSVZF
ICsgMTsKLSAgVXNiU3luY2hyb25pemF0aW9uVHlwZS5NSU5fVkFMVUUgPSAwLAotICBVc2JTeW5j
aHJvbml6YXRpb25UeXBlLk1BWF9WQUxVRSA9IDMsCi0KLSAgVXNiU3luY2hyb25pemF0aW9uVHlw
ZS5pc0tub3duRW51bVZhbHVlID0gZnVuY3Rpb24odmFsdWUpIHsKLSAgICBzd2l0Y2ggKHZhbHVl
KSB7Ci0gICAgY2FzZSAwOgotICAgIGNhc2UgMToKLSAgICBjYXNlIDI6Ci0gICAgY2FzZSAzOgot
ICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLSAgfTsKLQotICBV
c2JTeW5jaHJvbml6YXRpb25UeXBlLnZhbGlkYXRlID0gZnVuY3Rpb24oZW51bVZhbHVlKSB7Ci0g
ICAgdmFyIGlzRXh0ZW5zaWJsZSA9IGZhbHNlOwotICAgIGlmIChpc0V4dGVuc2libGUgfHwgdGhp
cy5pc0tub3duRW51bVZhbHVlKGVudW1WYWx1ZSkpCi0gICAgICByZXR1cm4gdmFsaWRhdG9yLnZh
bGlkYXRpb25FcnJvci5OT05FOwotCi0gICAgcmV0dXJuIHZhbGlkYXRvci52YWxpZGF0aW9uRXJy
b3IuVU5LTk9XTl9FTlVNX1ZBTFVFOwotICB9OwotICB2YXIgVXNiVXNhZ2VUeXBlID0ge307Ci0g
IFVzYlVzYWdlVHlwZS5EQVRBID0gMDsKLSAgVXNiVXNhZ2VUeXBlLkZFRURCQUNLID0gVXNiVXNh
Z2VUeXBlLkRBVEEgKyAxOwotICBVc2JVc2FnZVR5cGUuRVhQTElDSVRfRkVFREJBQ0sgPSBVc2JV
c2FnZVR5cGUuRkVFREJBQ0sgKyAxOwotICBVc2JVc2FnZVR5cGUuUEVSSU9ESUMgPSBVc2JVc2Fn
ZVR5cGUuRVhQTElDSVRfRkVFREJBQ0sgKyAxOwotICBVc2JVc2FnZVR5cGUuTk9USUZJQ0FUSU9O
ID0gVXNiVXNhZ2VUeXBlLlBFUklPRElDICsgMTsKLSAgVXNiVXNhZ2VUeXBlLlJFU0VSVkVEID0g
VXNiVXNhZ2VUeXBlLk5PVElGSUNBVElPTiArIDE7Ci0gIFVzYlVzYWdlVHlwZS5NSU5fVkFMVUUg
PSAwLAotICBVc2JVc2FnZVR5cGUuTUFYX1ZBTFVFID0gNSwKLQotICBVc2JVc2FnZVR5cGUuaXNL
bm93bkVudW1WYWx1ZSA9IGZ1bmN0aW9uKHZhbHVlKSB7Ci0gICAgc3dpdGNoICh2YWx1ZSkgewot
ICAgIGNhc2UgMDoKLSAgICBjYXNlIDE6Ci0gICAgY2FzZSAyOgotICAgIGNhc2UgMzoKLSAgICBj
YXNlIDQ6Ci0gICAgY2FzZSA1OgotICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIHJldHVy
biBmYWxzZTsKLSAgfTsKLQotICBVc2JVc2FnZVR5cGUudmFsaWRhdGUgPSBmdW5jdGlvbihlbnVt
VmFsdWUpIHsKLSAgICB2YXIgaXNFeHRlbnNpYmxlID0gZmFsc2U7Ci0gICAgaWYgKGlzRXh0ZW5z
aWJsZSB8fCB0aGlzLmlzS25vd25FbnVtVmFsdWUoZW51bVZhbHVlKSkKLSAgICAgIHJldHVybiB2
YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkU7Ci0KLSAgICByZXR1cm4gdmFsaWRhdG9yLnZh
bGlkYXRpb25FcnJvci5VTktOT1dOX0VOVU1fVkFMVUU7Ci0gIH07Ci0gIHZhciBVc2JUcmFuc2Zl
clN0YXR1cyA9IHt9OwotICBVc2JUcmFuc2ZlclN0YXR1cy5DT01QTEVURUQgPSAwOwotICBVc2JU
cmFuc2ZlclN0YXR1cy5UUkFOU0ZFUl9FUlJPUiA9IFVzYlRyYW5zZmVyU3RhdHVzLkNPTVBMRVRF
RCArIDE7Ci0gIFVzYlRyYW5zZmVyU3RhdHVzLlRJTUVPVVQgPSBVc2JUcmFuc2ZlclN0YXR1cy5U
UkFOU0ZFUl9FUlJPUiArIDE7Ci0gIFVzYlRyYW5zZmVyU3RhdHVzLkNBTkNFTExFRCA9IFVzYlRy
YW5zZmVyU3RhdHVzLlRJTUVPVVQgKyAxOwotICBVc2JUcmFuc2ZlclN0YXR1cy5TVEFMTEVEID0g
VXNiVHJhbnNmZXJTdGF0dXMuQ0FOQ0VMTEVEICsgMTsKLSAgVXNiVHJhbnNmZXJTdGF0dXMuRElT
Q09OTkVDVCA9IFVzYlRyYW5zZmVyU3RhdHVzLlNUQUxMRUQgKyAxOwotICBVc2JUcmFuc2ZlclN0
YXR1cy5CQUJCTEUgPSBVc2JUcmFuc2ZlclN0YXR1cy5ESVNDT05ORUNUICsgMTsKLSAgVXNiVHJh
bnNmZXJTdGF0dXMuU0hPUlRfUEFDS0VUID0gVXNiVHJhbnNmZXJTdGF0dXMuQkFCQkxFICsgMTsK
LSAgVXNiVHJhbnNmZXJTdGF0dXMuUEVSTUlTU0lPTl9ERU5JRUQgPSBVc2JUcmFuc2ZlclN0YXR1
cy5TSE9SVF9QQUNLRVQgKyAxOwotICBVc2JUcmFuc2ZlclN0YXR1cy5NSU5fVkFMVUUgPSAwLAot
ICBVc2JUcmFuc2ZlclN0YXR1cy5NQVhfVkFMVUUgPSA4LAotCi0gIFVzYlRyYW5zZmVyU3RhdHVz
LmlzS25vd25FbnVtVmFsdWUgPSBmdW5jdGlvbih2YWx1ZSkgewotICAgIHN3aXRjaCAodmFsdWUp
IHsKLSAgICBjYXNlIDA6Ci0gICAgY2FzZSAxOgotICAgIGNhc2UgMjoKLSAgICBjYXNlIDM6Ci0g
ICAgY2FzZSA0OgotICAgIGNhc2UgNToKLSAgICBjYXNlIDY6Ci0gICAgY2FzZSA3OgotICAgIGNh
c2UgODoKLSAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci0gIH07
Ci0KLSAgVXNiVHJhbnNmZXJTdGF0dXMudmFsaWRhdGUgPSBmdW5jdGlvbihlbnVtVmFsdWUpIHsK
LSAgICB2YXIgaXNFeHRlbnNpYmxlID0gZmFsc2U7Ci0gICAgaWYgKGlzRXh0ZW5zaWJsZSB8fCB0
aGlzLmlzS25vd25FbnVtVmFsdWUoZW51bVZhbHVlKSkKLSAgICAgIHJldHVybiB2YWxpZGF0b3Iu
dmFsaWRhdGlvbkVycm9yLk5PTkU7Ci0KLSAgICByZXR1cm4gdmFsaWRhdG9yLnZhbGlkYXRpb25F
cnJvci5VTktOT1dOX0VOVU1fVkFMVUU7Ci0gIH07Ci0KLSAgZnVuY3Rpb24gVXNiRW5kcG9pbnRJ
bmZvKHZhbHVlcykgewotICAgIHRoaXMuaW5pdERlZmF1bHRzXygpOwotICAgIHRoaXMuaW5pdEZp
ZWxkc18odmFsdWVzKTsKLSAgfQotCi0KLSAgVXNiRW5kcG9pbnRJbmZvLnByb3RvdHlwZS5pbml0
RGVmYXVsdHNfID0gZnVuY3Rpb24oKSB7Ci0gICAgdGhpcy5lbmRwb2ludE51bWJlciA9IDA7Ci0g
ICAgdGhpcy5wb2xsaW5nSW50ZXJ2YWwgPSAwOwotICAgIHRoaXMuZGlyZWN0aW9uID0gMDsKLSAg
ICB0aGlzLnR5cGUgPSAwOwotICAgIHRoaXMucGFja2V0U2l6ZSA9IDA7Ci0gICAgdGhpcy5zeW5j
aHJvbml6YXRpb25UeXBlID0gMDsKLSAgICB0aGlzLnVzYWdlVHlwZSA9IDA7Ci0gICAgdGhpcy5l
eHRyYURhdGEgPSBudWxsOwotICB9OwotICBVc2JFbmRwb2ludEluZm8ucHJvdG90eXBlLmluaXRG
aWVsZHNfID0gZnVuY3Rpb24oZmllbGRzKSB7Ci0gICAgZm9yKHZhciBmaWVsZCBpbiBmaWVsZHMp
IHsKLSAgICAgICAgaWYgKHRoaXMuaGFzT3duUHJvcGVydHkoZmllbGQpKQotICAgICAgICAgIHRo
aXNbZmllbGRdID0gZmllbGRzW2ZpZWxkXTsKLSAgICB9Ci0gIH07Ci0KLSAgVXNiRW5kcG9pbnRJ
bmZvLnZhbGlkYXRlID0gZnVuY3Rpb24obWVzc2FnZVZhbGlkYXRvciwgb2Zmc2V0KSB7Ci0gICAg
dmFyIGVycjsKLSAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0SGVhZGVy
KG9mZnNldCwgY29kZWMua1N0cnVjdEhlYWRlclNpemUpOwotICAgIGlmIChlcnIgIT09IHZhbGlk
YXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKLSAgICAgICAgcmV0dXJuIGVycjsKLQotICAgIHZh
ciBrVmVyc2lvblNpemVzID0gWwotICAgICAge3ZlcnNpb246IDAsIG51bUJ5dGVzOiA0MH0KLSAg
ICBdOwotICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RWZXJzaW9uKG9m
ZnNldCwga1ZlcnNpb25TaXplcyk7Ci0gICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRp
b25FcnJvci5OT05FKQotICAgICAgICByZXR1cm4gZXJyOwotCi0KLQotICAgIC8vIHZhbGlkYXRl
IFVzYkVuZHBvaW50SW5mby5kaXJlY3Rpb24KLSAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZh
bGlkYXRlRW51bShvZmZzZXQgKyBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDQsIFVzYlRyYW5z
ZmVyRGlyZWN0aW9uKTsKLSAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9y
Lk5PTkUpCi0gICAgICAgIHJldHVybiBlcnI7Ci0KLQotICAgIC8vIHZhbGlkYXRlIFVzYkVuZHBv
aW50SW5mby50eXBlCi0gICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZUVudW0ob2Zm
c2V0ICsgY29kZWMua1N0cnVjdEhlYWRlclNpemUgKyA4LCBVc2JUcmFuc2ZlclR5cGUpOwotICAg
IGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKLSAgICAgICAgcmV0
dXJuIGVycjsKLQotCi0KLSAgICAvLyB2YWxpZGF0ZSBVc2JFbmRwb2ludEluZm8uc3luY2hyb25p
emF0aW9uVHlwZQotICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVFbnVtKG9mZnNl
dCArIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgMTYsIFVzYlN5bmNocm9uaXphdGlvblR5cGUp
OwotICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKLSAgICAg
ICAgcmV0dXJuIGVycjsKLQotCi0gICAgLy8gdmFsaWRhdGUgVXNiRW5kcG9pbnRJbmZvLnVzYWdl
VHlwZQotICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVFbnVtKG9mZnNldCArIGNv
ZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgMjAsIFVzYlVzYWdlVHlwZSk7Ci0gICAgaWYgKGVyciAh
PT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQotICAgICAgICByZXR1cm4gZXJyOwot
Ci0KLQotICAgIC8vIHZhbGlkYXRlIFVzYkVuZHBvaW50SW5mby5leHRyYURhdGEKLSAgICBlcnIg
PSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlQXJyYXlQb2ludGVyKG9mZnNldCArIGNvZGVjLmtT
dHJ1Y3RIZWFkZXJTaXplICsgMjQsIDEsIGNvZGVjLlVpbnQ4LCBmYWxzZSwgWzBdLCAwKTsKLSAg
ICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCi0gICAgICAgIHJl
dHVybiBlcnI7Ci0KLSAgICByZXR1cm4gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FOwot
ICB9OwotCi0gIFVzYkVuZHBvaW50SW5mby5lbmNvZGVkU2l6ZSA9IGNvZGVjLmtTdHJ1Y3RIZWFk
ZXJTaXplICsgMzI7Ci0KLSAgVXNiRW5kcG9pbnRJbmZvLmRlY29kZSA9IGZ1bmN0aW9uKGRlY29k
ZXIpIHsKLSAgICB2YXIgcGFja2VkOwotICAgIHZhciB2YWwgPSBuZXcgVXNiRW5kcG9pbnRJbmZv
KCk7Ci0gICAgdmFyIG51bWJlck9mQnl0ZXMgPSBkZWNvZGVyLnJlYWRVaW50MzIoKTsKLSAgICB2
YXIgdmVyc2lvbiA9IGRlY29kZXIucmVhZFVpbnQzMigpOwotICAgIHZhbC5lbmRwb2ludE51bWJl
ciA9IGRlY29kZXIuZGVjb2RlU3RydWN0KGNvZGVjLlVpbnQ4KTsKLSAgICB2YWwucG9sbGluZ0lu
dGVydmFsID0gZGVjb2Rlci5kZWNvZGVTdHJ1Y3QoY29kZWMuVWludDgpOwotICAgIGRlY29kZXIu
c2tpcCgxKTsKLSAgICBkZWNvZGVyLnNraXAoMSk7Ci0gICAgdmFsLmRpcmVjdGlvbiA9IGRlY29k
ZXIuZGVjb2RlU3RydWN0KGNvZGVjLkludDMyKTsKLSAgICB2YWwudHlwZSA9IGRlY29kZXIuZGVj
b2RlU3RydWN0KGNvZGVjLkludDMyKTsKLSAgICB2YWwucGFja2V0U2l6ZSA9IGRlY29kZXIuZGVj
b2RlU3RydWN0KGNvZGVjLlVpbnQzMik7Ci0gICAgdmFsLnN5bmNocm9uaXphdGlvblR5cGUgPSBk
ZWNvZGVyLmRlY29kZVN0cnVjdChjb2RlYy5JbnQzMik7Ci0gICAgdmFsLnVzYWdlVHlwZSA9IGRl
Y29kZXIuZGVjb2RlU3RydWN0KGNvZGVjLkludDMyKTsKLSAgICB2YWwuZXh0cmFEYXRhID0gZGVj
b2Rlci5kZWNvZGVBcnJheVBvaW50ZXIoY29kZWMuVWludDgpOwotICAgIHJldHVybiB2YWw7Ci0g
IH07Ci0KLSAgVXNiRW5kcG9pbnRJbmZvLmVuY29kZSA9IGZ1bmN0aW9uKGVuY29kZXIsIHZhbCkg
ewotICAgIHZhciBwYWNrZWQ7Ci0gICAgZW5jb2Rlci53cml0ZVVpbnQzMihVc2JFbmRwb2ludElu
Zm8uZW5jb2RlZFNpemUpOwotICAgIGVuY29kZXIud3JpdGVVaW50MzIoMCk7Ci0gICAgZW5jb2Rl
ci5lbmNvZGVTdHJ1Y3QoY29kZWMuVWludDgsIHZhbC5lbmRwb2ludE51bWJlcik7Ci0gICAgZW5j
b2Rlci5lbmNvZGVTdHJ1Y3QoY29kZWMuVWludDgsIHZhbC5wb2xsaW5nSW50ZXJ2YWwpOwotICAg
IGVuY29kZXIuc2tpcCgxKTsKLSAgICBlbmNvZGVyLnNraXAoMSk7Ci0gICAgZW5jb2Rlci5lbmNv
ZGVTdHJ1Y3QoY29kZWMuSW50MzIsIHZhbC5kaXJlY3Rpb24pOwotICAgIGVuY29kZXIuZW5jb2Rl
U3RydWN0KGNvZGVjLkludDMyLCB2YWwudHlwZSk7Ci0gICAgZW5jb2Rlci5lbmNvZGVTdHJ1Y3Qo
Y29kZWMuVWludDMyLCB2YWwucGFja2V0U2l6ZSk7Ci0gICAgZW5jb2Rlci5lbmNvZGVTdHJ1Y3Qo
Y29kZWMuSW50MzIsIHZhbC5zeW5jaHJvbml6YXRpb25UeXBlKTsKLSAgICBlbmNvZGVyLmVuY29k
ZVN0cnVjdChjb2RlYy5JbnQzMiwgdmFsLnVzYWdlVHlwZSk7Ci0gICAgZW5jb2Rlci5lbmNvZGVB
cnJheVBvaW50ZXIoY29kZWMuVWludDgsIHZhbC5leHRyYURhdGEpOwotICB9OwotICBmdW5jdGlv
biBVc2JBbHRlcm5hdGVJbnRlcmZhY2VJbmZvKHZhbHVlcykgewotICAgIHRoaXMuaW5pdERlZmF1
bHRzXygpOwotICAgIHRoaXMuaW5pdEZpZWxkc18odmFsdWVzKTsKLSAgfQotCi0KLSAgVXNiQWx0
ZXJuYXRlSW50ZXJmYWNlSW5mby5wcm90b3R5cGUuaW5pdERlZmF1bHRzXyA9IGZ1bmN0aW9uKCkg
ewotICAgIHRoaXMuYWx0ZXJuYXRlU2V0dGluZyA9IDA7Ci0gICAgdGhpcy5jbGFzc0NvZGUgPSAw
OwotICAgIHRoaXMuc3ViY2xhc3NDb2RlID0gMDsKLSAgICB0aGlzLnByb3RvY29sQ29kZSA9IDA7
Ci0gICAgdGhpcy5pbnRlcmZhY2VOYW1lID0gbnVsbDsKLSAgICB0aGlzLmVuZHBvaW50cyA9IG51
bGw7Ci0gICAgdGhpcy5leHRyYURhdGEgPSBudWxsOwotICB9OwotICBVc2JBbHRlcm5hdGVJbnRl
cmZhY2VJbmZvLnByb3RvdHlwZS5pbml0RmllbGRzXyA9IGZ1bmN0aW9uKGZpZWxkcykgewotICAg
IGZvcih2YXIgZmllbGQgaW4gZmllbGRzKSB7Ci0gICAgICAgIGlmICh0aGlzLmhhc093blByb3Bl
cnR5KGZpZWxkKSkKLSAgICAgICAgICB0aGlzW2ZpZWxkXSA9IGZpZWxkc1tmaWVsZF07Ci0gICAg
fQotICB9OwotCi0gIFVzYkFsdGVybmF0ZUludGVyZmFjZUluZm8udmFsaWRhdGUgPSBmdW5jdGlv
bihtZXNzYWdlVmFsaWRhdG9yLCBvZmZzZXQpIHsKLSAgICB2YXIgZXJyOwotICAgIGVyciA9IG1l
c3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RIZWFkZXIob2Zmc2V0LCBjb2RlYy5rU3RydWN0
SGVhZGVyU2l6ZSk7Ci0gICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5O
T05FKQotICAgICAgICByZXR1cm4gZXJyOwotCi0gICAgdmFyIGtWZXJzaW9uU2l6ZXMgPSBbCi0g
ICAgICB7dmVyc2lvbjogMCwgbnVtQnl0ZXM6IDQwfQotICAgIF07Ci0gICAgZXJyID0gbWVzc2Fn
ZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdFZlcnNpb24ob2Zmc2V0LCBrVmVyc2lvblNpemVzKTsK
LSAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCi0gICAgICAg
IHJldHVybiBlcnI7Ci0KLQotCi0KLQotCi0gICAgLy8gdmFsaWRhdGUgVXNiQWx0ZXJuYXRlSW50
ZXJmYWNlSW5mby5pbnRlcmZhY2VOYW1lCi0gICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxp
ZGF0ZVN0cnVjdFBvaW50ZXIob2Zmc2V0ICsgY29kZWMua1N0cnVjdEhlYWRlclNpemUgKyA4LCBz
dHJpbmcxNiQuU3RyaW5nMTYsIHRydWUpOwotICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxp
ZGF0aW9uRXJyb3IuTk9ORSkKLSAgICAgICAgcmV0dXJuIGVycjsKLQotCi0gICAgLy8gdmFsaWRh
dGUgVXNiQWx0ZXJuYXRlSW50ZXJmYWNlSW5mby5lbmRwb2ludHMKLSAgICBlcnIgPSBtZXNzYWdl
VmFsaWRhdG9yLnZhbGlkYXRlQXJyYXlQb2ludGVyKG9mZnNldCArIGNvZGVjLmtTdHJ1Y3RIZWFk
ZXJTaXplICsgMTYsIDgsIG5ldyBjb2RlYy5Qb2ludGVyVG8oVXNiRW5kcG9pbnRJbmZvKSwgZmFs
c2UsIFswXSwgMCk7Ci0gICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5O
T05FKQotICAgICAgICByZXR1cm4gZXJyOwotCi0KLSAgICAvLyB2YWxpZGF0ZSBVc2JBbHRlcm5h
dGVJbnRlcmZhY2VJbmZvLmV4dHJhRGF0YQotICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFs
aWRhdGVBcnJheVBvaW50ZXIob2Zmc2V0ICsgY29kZWMua1N0cnVjdEhlYWRlclNpemUgKyAyNCwg
MSwgY29kZWMuVWludDgsIGZhbHNlLCBbMF0sIDApOwotICAgIGlmIChlcnIgIT09IHZhbGlkYXRv
ci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKLSAgICAgICAgcmV0dXJuIGVycjsKLQotICAgIHJldHVy
biB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkU7Ci0gIH07Ci0KLSAgVXNiQWx0ZXJuYXRl
SW50ZXJmYWNlSW5mby5lbmNvZGVkU2l6ZSA9IGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgMzI7
Ci0KLSAgVXNiQWx0ZXJuYXRlSW50ZXJmYWNlSW5mby5kZWNvZGUgPSBmdW5jdGlvbihkZWNvZGVy
KSB7Ci0gICAgdmFyIHBhY2tlZDsKLSAgICB2YXIgdmFsID0gbmV3IFVzYkFsdGVybmF0ZUludGVy
ZmFjZUluZm8oKTsKLSAgICB2YXIgbnVtYmVyT2ZCeXRlcyA9IGRlY29kZXIucmVhZFVpbnQzMigp
OwotICAgIHZhciB2ZXJzaW9uID0gZGVjb2Rlci5yZWFkVWludDMyKCk7Ci0gICAgdmFsLmFsdGVy
bmF0ZVNldHRpbmcgPSBkZWNvZGVyLmRlY29kZVN0cnVjdChjb2RlYy5VaW50OCk7Ci0gICAgdmFs
LmNsYXNzQ29kZSA9IGRlY29kZXIuZGVjb2RlU3RydWN0KGNvZGVjLlVpbnQ4KTsKLSAgICB2YWwu
c3ViY2xhc3NDb2RlID0gZGVjb2Rlci5kZWNvZGVTdHJ1Y3QoY29kZWMuVWludDgpOwotICAgIHZh
bC5wcm90b2NvbENvZGUgPSBkZWNvZGVyLmRlY29kZVN0cnVjdChjb2RlYy5VaW50OCk7Ci0gICAg
ZGVjb2Rlci5za2lwKDEpOwotICAgIGRlY29kZXIuc2tpcCgxKTsKLSAgICBkZWNvZGVyLnNraXAo
MSk7Ci0gICAgZGVjb2Rlci5za2lwKDEpOwotICAgIHZhbC5pbnRlcmZhY2VOYW1lID0gZGVjb2Rl
ci5kZWNvZGVTdHJ1Y3RQb2ludGVyKHN0cmluZzE2JC5TdHJpbmcxNik7Ci0gICAgdmFsLmVuZHBv
aW50cyA9IGRlY29kZXIuZGVjb2RlQXJyYXlQb2ludGVyKG5ldyBjb2RlYy5Qb2ludGVyVG8oVXNi
RW5kcG9pbnRJbmZvKSk7Ci0gICAgdmFsLmV4dHJhRGF0YSA9IGRlY29kZXIuZGVjb2RlQXJyYXlQ
b2ludGVyKGNvZGVjLlVpbnQ4KTsKLSAgICByZXR1cm4gdmFsOwotICB9OwotCi0gIFVzYkFsdGVy
bmF0ZUludGVyZmFjZUluZm8uZW5jb2RlID0gZnVuY3Rpb24oZW5jb2RlciwgdmFsKSB7Ci0gICAg
dmFyIHBhY2tlZDsKLSAgICBlbmNvZGVyLndyaXRlVWludDMyKFVzYkFsdGVybmF0ZUludGVyZmFj
ZUluZm8uZW5jb2RlZFNpemUpOwotICAgIGVuY29kZXIud3JpdGVVaW50MzIoMCk7Ci0gICAgZW5j
b2Rlci5lbmNvZGVTdHJ1Y3QoY29kZWMuVWludDgsIHZhbC5hbHRlcm5hdGVTZXR0aW5nKTsKLSAg
ICBlbmNvZGVyLmVuY29kZVN0cnVjdChjb2RlYy5VaW50OCwgdmFsLmNsYXNzQ29kZSk7Ci0gICAg
ZW5jb2Rlci5lbmNvZGVTdHJ1Y3QoY29kZWMuVWludDgsIHZhbC5zdWJjbGFzc0NvZGUpOwotICAg
IGVuY29kZXIuZW5jb2RlU3RydWN0KGNvZGVjLlVpbnQ4LCB2YWwucHJvdG9jb2xDb2RlKTsKLSAg
ICBlbmNvZGVyLnNraXAoMSk7Ci0gICAgZW5jb2Rlci5za2lwKDEpOwotICAgIGVuY29kZXIuc2tp
cCgxKTsKLSAgICBlbmNvZGVyLnNraXAoMSk7Ci0gICAgZW5jb2Rlci5lbmNvZGVTdHJ1Y3RQb2lu
dGVyKHN0cmluZzE2JC5TdHJpbmcxNiwgdmFsLmludGVyZmFjZU5hbWUpOwotICAgIGVuY29kZXIu
ZW5jb2RlQXJyYXlQb2ludGVyKG5ldyBjb2RlYy5Qb2ludGVyVG8oVXNiRW5kcG9pbnRJbmZvKSwg
dmFsLmVuZHBvaW50cyk7Ci0gICAgZW5jb2Rlci5lbmNvZGVBcnJheVBvaW50ZXIoY29kZWMuVWlu
dDgsIHZhbC5leHRyYURhdGEpOwotICB9OwotICBmdW5jdGlvbiBVc2JJbnRlcmZhY2VJbmZvKHZh
bHVlcykgewotICAgIHRoaXMuaW5pdERlZmF1bHRzXygpOwotICAgIHRoaXMuaW5pdEZpZWxkc18o
dmFsdWVzKTsKLSAgfQotCi0KLSAgVXNiSW50ZXJmYWNlSW5mby5wcm90b3R5cGUuaW5pdERlZmF1
bHRzXyA9IGZ1bmN0aW9uKCkgewotICAgIHRoaXMuaW50ZXJmYWNlTnVtYmVyID0gMDsKLSAgICB0
aGlzLmFsdGVybmF0ZXMgPSBudWxsOwotICB9OwotICBVc2JJbnRlcmZhY2VJbmZvLnByb3RvdHlw
ZS5pbml0RmllbGRzXyA9IGZ1bmN0aW9uKGZpZWxkcykgewotICAgIGZvcih2YXIgZmllbGQgaW4g
ZmllbGRzKSB7Ci0gICAgICAgIGlmICh0aGlzLmhhc093blByb3BlcnR5KGZpZWxkKSkKLSAgICAg
ICAgICB0aGlzW2ZpZWxkXSA9IGZpZWxkc1tmaWVsZF07Ci0gICAgfQotICB9OwotCi0gIFVzYklu
dGVyZmFjZUluZm8udmFsaWRhdGUgPSBmdW5jdGlvbihtZXNzYWdlVmFsaWRhdG9yLCBvZmZzZXQp
IHsKLSAgICB2YXIgZXJyOwotICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1
Y3RIZWFkZXIob2Zmc2V0LCBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSk7Ci0gICAgaWYgKGVyciAh
PT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQotICAgICAgICByZXR1cm4gZXJyOwot
Ci0gICAgdmFyIGtWZXJzaW9uU2l6ZXMgPSBbCi0gICAgICB7dmVyc2lvbjogMCwgbnVtQnl0ZXM6
IDI0fQotICAgIF07Ci0gICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdFZl
cnNpb24ob2Zmc2V0LCBrVmVyc2lvblNpemVzKTsKLSAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3Iu
dmFsaWRhdGlvbkVycm9yLk5PTkUpCi0gICAgICAgIHJldHVybiBlcnI7Ci0KLQotCi0gICAgLy8g
dmFsaWRhdGUgVXNiSW50ZXJmYWNlSW5mby5hbHRlcm5hdGVzCi0gICAgZXJyID0gbWVzc2FnZVZh
bGlkYXRvci52YWxpZGF0ZUFycmF5UG9pbnRlcihvZmZzZXQgKyBjb2RlYy5rU3RydWN0SGVhZGVy
U2l6ZSArIDgsIDgsIG5ldyBjb2RlYy5Qb2ludGVyVG8oVXNiQWx0ZXJuYXRlSW50ZXJmYWNlSW5m
byksIGZhbHNlLCBbMF0sIDApOwotICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9u
RXJyb3IuTk9ORSkKLSAgICAgICAgcmV0dXJuIGVycjsKLQotICAgIHJldHVybiB2YWxpZGF0b3Iu
dmFsaWRhdGlvbkVycm9yLk5PTkU7Ci0gIH07Ci0KLSAgVXNiSW50ZXJmYWNlSW5mby5lbmNvZGVk
U2l6ZSA9IGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgMTY7Ci0KLSAgVXNiSW50ZXJmYWNlSW5m
by5kZWNvZGUgPSBmdW5jdGlvbihkZWNvZGVyKSB7Ci0gICAgdmFyIHBhY2tlZDsKLSAgICB2YXIg
dmFsID0gbmV3IFVzYkludGVyZmFjZUluZm8oKTsKLSAgICB2YXIgbnVtYmVyT2ZCeXRlcyA9IGRl
Y29kZXIucmVhZFVpbnQzMigpOwotICAgIHZhciB2ZXJzaW9uID0gZGVjb2Rlci5yZWFkVWludDMy
KCk7Ci0gICAgdmFsLmludGVyZmFjZU51bWJlciA9IGRlY29kZXIuZGVjb2RlU3RydWN0KGNvZGVj
LlVpbnQ4KTsKLSAgICBkZWNvZGVyLnNraXAoMSk7Ci0gICAgZGVjb2Rlci5za2lwKDEpOwotICAg
IGRlY29kZXIuc2tpcCgxKTsKLSAgICBkZWNvZGVyLnNraXAoMSk7Ci0gICAgZGVjb2Rlci5za2lw
KDEpOwotICAgIGRlY29kZXIuc2tpcCgxKTsKLSAgICBkZWNvZGVyLnNraXAoMSk7Ci0gICAgdmFs
LmFsdGVybmF0ZXMgPSBkZWNvZGVyLmRlY29kZUFycmF5UG9pbnRlcihuZXcgY29kZWMuUG9pbnRl
clRvKFVzYkFsdGVybmF0ZUludGVyZmFjZUluZm8pKTsKLSAgICByZXR1cm4gdmFsOwotICB9Owot
Ci0gIFVzYkludGVyZmFjZUluZm8uZW5jb2RlID0gZnVuY3Rpb24oZW5jb2RlciwgdmFsKSB7Ci0g
ICAgdmFyIHBhY2tlZDsKLSAgICBlbmNvZGVyLndyaXRlVWludDMyKFVzYkludGVyZmFjZUluZm8u
ZW5jb2RlZFNpemUpOwotICAgIGVuY29kZXIud3JpdGVVaW50MzIoMCk7Ci0gICAgZW5jb2Rlci5l
bmNvZGVTdHJ1Y3QoY29kZWMuVWludDgsIHZhbC5pbnRlcmZhY2VOdW1iZXIpOwotICAgIGVuY29k
ZXIuc2tpcCgxKTsKLSAgICBlbmNvZGVyLnNraXAoMSk7Ci0gICAgZW5jb2Rlci5za2lwKDEpOwot
ICAgIGVuY29kZXIuc2tpcCgxKTsKLSAgICBlbmNvZGVyLnNraXAoMSk7Ci0gICAgZW5jb2Rlci5z
a2lwKDEpOwotICAgIGVuY29kZXIuc2tpcCgxKTsKLSAgICBlbmNvZGVyLmVuY29kZUFycmF5UG9p
bnRlcihuZXcgY29kZWMuUG9pbnRlclRvKFVzYkFsdGVybmF0ZUludGVyZmFjZUluZm8pLCB2YWwu
YWx0ZXJuYXRlcyk7Ci0gIH07Ci0gIGZ1bmN0aW9uIFVzYkNvbmZpZ3VyYXRpb25JbmZvKHZhbHVl
cykgewotICAgIHRoaXMuaW5pdERlZmF1bHRzXygpOwotICAgIHRoaXMuaW5pdEZpZWxkc18odmFs
dWVzKTsKLSAgfQotCi0KLSAgVXNiQ29uZmlndXJhdGlvbkluZm8ucHJvdG90eXBlLmluaXREZWZh
dWx0c18gPSBmdW5jdGlvbigpIHsKLSAgICB0aGlzLmNvbmZpZ3VyYXRpb25WYWx1ZSA9IDA7Ci0g
ICAgdGhpcy5zZWxmUG93ZXJlZCA9IGZhbHNlOwotICAgIHRoaXMucmVtb3RlV2FrZXVwID0gZmFs
c2U7Ci0gICAgdGhpcy5tYXhpbXVtUG93ZXIgPSAwOwotICAgIHRoaXMuY29uZmlndXJhdGlvbk5h
bWUgPSBudWxsOwotICAgIHRoaXMuaW50ZXJmYWNlcyA9IG51bGw7Ci0gICAgdGhpcy5leHRyYURh
dGEgPSBudWxsOwotICB9OwotICBVc2JDb25maWd1cmF0aW9uSW5mby5wcm90b3R5cGUuaW5pdEZp
ZWxkc18gPSBmdW5jdGlvbihmaWVsZHMpIHsKLSAgICBmb3IodmFyIGZpZWxkIGluIGZpZWxkcykg
ewotICAgICAgICBpZiAodGhpcy5oYXNPd25Qcm9wZXJ0eShmaWVsZCkpCi0gICAgICAgICAgdGhp
c1tmaWVsZF0gPSBmaWVsZHNbZmllbGRdOwotICAgIH0KLSAgfTsKLQotICBVc2JDb25maWd1cmF0
aW9uSW5mby52YWxpZGF0ZSA9IGZ1bmN0aW9uKG1lc3NhZ2VWYWxpZGF0b3IsIG9mZnNldCkgewot
ICAgIHZhciBlcnI7Ci0gICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdEhl
YWRlcihvZmZzZXQsIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplKTsKLSAgICBpZiAoZXJyICE9PSB2
YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCi0gICAgICAgIHJldHVybiBlcnI7Ci0KLSAg
ICB2YXIga1ZlcnNpb25TaXplcyA9IFsKLSAgICAgIHt2ZXJzaW9uOiAwLCBudW1CeXRlczogNDB9
Ci0gICAgXTsKLSAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0VmVyc2lv
bihvZmZzZXQsIGtWZXJzaW9uU2l6ZXMpOwotICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxp
ZGF0aW9uRXJyb3IuTk9ORSkKLSAgICAgICAgcmV0dXJuIGVycjsKLQotCi0KLSAgICAvLyB2YWxp
ZGF0ZSBVc2JDb25maWd1cmF0aW9uSW5mby5jb25maWd1cmF0aW9uTmFtZQotICAgIGVyciA9IG1l
c3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RQb2ludGVyKG9mZnNldCArIGNvZGVjLmtTdHJ1
Y3RIZWFkZXJTaXplICsgOCwgc3RyaW5nMTYkLlN0cmluZzE2LCB0cnVlKTsKLSAgICBpZiAoZXJy
ICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCi0gICAgICAgIHJldHVybiBlcnI7
Ci0KLQotCi0KLQotICAgIC8vIHZhbGlkYXRlIFVzYkNvbmZpZ3VyYXRpb25JbmZvLmludGVyZmFj
ZXMKLSAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlQXJyYXlQb2ludGVyKG9mZnNl
dCArIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgMTYsIDgsIG5ldyBjb2RlYy5Qb2ludGVyVG8o
VXNiSW50ZXJmYWNlSW5mbyksIGZhbHNlLCBbMF0sIDApOwotICAgIGlmIChlcnIgIT09IHZhbGlk
YXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKLSAgICAgICAgcmV0dXJuIGVycjsKLQotCi0gICAg
Ly8gdmFsaWRhdGUgVXNiQ29uZmlndXJhdGlvbkluZm8uZXh0cmFEYXRhCi0gICAgZXJyID0gbWVz
c2FnZVZhbGlkYXRvci52YWxpZGF0ZUFycmF5UG9pbnRlcihvZmZzZXQgKyBjb2RlYy5rU3RydWN0
SGVhZGVyU2l6ZSArIDI0LCAxLCBjb2RlYy5VaW50OCwgZmFsc2UsIFswXSwgMCk7Ci0gICAgaWYg
KGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQotICAgICAgICByZXR1cm4g
ZXJyOwotCi0gICAgcmV0dXJuIHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORTsKLSAgfTsK
LQotICBVc2JDb25maWd1cmF0aW9uSW5mby5lbmNvZGVkU2l6ZSA9IGNvZGVjLmtTdHJ1Y3RIZWFk
ZXJTaXplICsgMzI7Ci0KLSAgVXNiQ29uZmlndXJhdGlvbkluZm8uZGVjb2RlID0gZnVuY3Rpb24o
ZGVjb2RlcikgewotICAgIHZhciBwYWNrZWQ7Ci0gICAgdmFyIHZhbCA9IG5ldyBVc2JDb25maWd1
cmF0aW9uSW5mbygpOwotICAgIHZhciBudW1iZXJPZkJ5dGVzID0gZGVjb2Rlci5yZWFkVWludDMy
KCk7Ci0gICAgdmFyIHZlcnNpb24gPSBkZWNvZGVyLnJlYWRVaW50MzIoKTsKLSAgICB2YWwuY29u
ZmlndXJhdGlvblZhbHVlID0gZGVjb2Rlci5kZWNvZGVTdHJ1Y3QoY29kZWMuVWludDgpOwotICAg
IHBhY2tlZCA9IGRlY29kZXIucmVhZFVpbnQ4KCk7Ci0gICAgdmFsLnNlbGZQb3dlcmVkID0gKHBh
Y2tlZCA+PiAwKSAmIDEgPyB0cnVlIDogZmFsc2U7Ci0gICAgdmFsLnJlbW90ZVdha2V1cCA9IChw
YWNrZWQgPj4gMSkgJiAxID8gdHJ1ZSA6IGZhbHNlOwotICAgIHZhbC5tYXhpbXVtUG93ZXIgPSBk
ZWNvZGVyLmRlY29kZVN0cnVjdChjb2RlYy5VaW50OCk7Ci0gICAgZGVjb2Rlci5za2lwKDEpOwot
ICAgIGRlY29kZXIuc2tpcCgxKTsKLSAgICBkZWNvZGVyLnNraXAoMSk7Ci0gICAgZGVjb2Rlci5z
a2lwKDEpOwotICAgIGRlY29kZXIuc2tpcCgxKTsKLSAgICB2YWwuY29uZmlndXJhdGlvbk5hbWUg
PSBkZWNvZGVyLmRlY29kZVN0cnVjdFBvaW50ZXIoc3RyaW5nMTYkLlN0cmluZzE2KTsKLSAgICB2
YWwuaW50ZXJmYWNlcyA9IGRlY29kZXIuZGVjb2RlQXJyYXlQb2ludGVyKG5ldyBjb2RlYy5Qb2lu
dGVyVG8oVXNiSW50ZXJmYWNlSW5mbykpOwotICAgIHZhbC5leHRyYURhdGEgPSBkZWNvZGVyLmRl
Y29kZUFycmF5UG9pbnRlcihjb2RlYy5VaW50OCk7Ci0gICAgcmV0dXJuIHZhbDsKLSAgfTsKLQot
ICBVc2JDb25maWd1cmF0aW9uSW5mby5lbmNvZGUgPSBmdW5jdGlvbihlbmNvZGVyLCB2YWwpIHsK
LSAgICB2YXIgcGFja2VkOwotICAgIGVuY29kZXIud3JpdGVVaW50MzIoVXNiQ29uZmlndXJhdGlv
bkluZm8uZW5jb2RlZFNpemUpOwotICAgIGVuY29kZXIud3JpdGVVaW50MzIoMCk7Ci0gICAgZW5j
b2Rlci5lbmNvZGVTdHJ1Y3QoY29kZWMuVWludDgsIHZhbC5jb25maWd1cmF0aW9uVmFsdWUpOwot
ICAgIHBhY2tlZCA9IDA7Ci0gICAgcGFja2VkIHw9ICh2YWwuc2VsZlBvd2VyZWQgJiAxKSA8PCAw
Ci0gICAgcGFja2VkIHw9ICh2YWwucmVtb3RlV2FrZXVwICYgMSkgPDwgMQotICAgIGVuY29kZXIu
d3JpdGVVaW50OChwYWNrZWQpOwotICAgIGVuY29kZXIuZW5jb2RlU3RydWN0KGNvZGVjLlVpbnQ4
LCB2YWwubWF4aW11bVBvd2VyKTsKLSAgICBlbmNvZGVyLnNraXAoMSk7Ci0gICAgZW5jb2Rlci5z
a2lwKDEpOwotICAgIGVuY29kZXIuc2tpcCgxKTsKLSAgICBlbmNvZGVyLnNraXAoMSk7Ci0gICAg
ZW5jb2Rlci5za2lwKDEpOwotICAgIGVuY29kZXIuZW5jb2RlU3RydWN0UG9pbnRlcihzdHJpbmcx
NiQuU3RyaW5nMTYsIHZhbC5jb25maWd1cmF0aW9uTmFtZSk7Ci0gICAgZW5jb2Rlci5lbmNvZGVB
cnJheVBvaW50ZXIobmV3IGNvZGVjLlBvaW50ZXJUbyhVc2JJbnRlcmZhY2VJbmZvKSwgdmFsLmlu
dGVyZmFjZXMpOwotICAgIGVuY29kZXIuZW5jb2RlQXJyYXlQb2ludGVyKGNvZGVjLlVpbnQ4LCB2
YWwuZXh0cmFEYXRhKTsKLSAgfTsKLSAgZnVuY3Rpb24gVXNiRGV2aWNlSW5mbyh2YWx1ZXMpIHsK
LSAgICB0aGlzLmluaXREZWZhdWx0c18oKTsKLSAgICB0aGlzLmluaXRGaWVsZHNfKHZhbHVlcyk7
Ci0gIH0KLQotCi0gIFVzYkRldmljZUluZm8ucHJvdG90eXBlLmluaXREZWZhdWx0c18gPSBmdW5j
dGlvbigpIHsKLSAgICB0aGlzLmd1aWQgPSBudWxsOwotICAgIHRoaXMudXNiVmVyc2lvbk1ham9y
ID0gMDsKLSAgICB0aGlzLnVzYlZlcnNpb25NaW5vciA9IDA7Ci0gICAgdGhpcy51c2JWZXJzaW9u
U3VibWlub3IgPSAwOwotICAgIHRoaXMuY2xhc3NDb2RlID0gMDsKLSAgICB0aGlzLnN1YmNsYXNz
Q29kZSA9IDA7Ci0gICAgdGhpcy5wcm90b2NvbENvZGUgPSAwOwotICAgIHRoaXMudmVuZG9ySWQg
PSAwOwotICAgIHRoaXMuYnVzTnVtYmVyID0gMDsKLSAgICB0aGlzLnBvcnROdW1iZXIgPSAwOwot
ICAgIHRoaXMucHJvZHVjdElkID0gMDsKLSAgICB0aGlzLmRldmljZVZlcnNpb25NYWpvciA9IDA7
Ci0gICAgdGhpcy5kZXZpY2VWZXJzaW9uTWlub3IgPSAwOwotICAgIHRoaXMuZGV2aWNlVmVyc2lv
blN1Ym1pbm9yID0gMDsKLSAgICB0aGlzLmFjdGl2ZUNvbmZpZ3VyYXRpb24gPSAwOwotICAgIHRo
aXMubWFudWZhY3R1cmVyTmFtZSA9IG51bGw7Ci0gICAgdGhpcy5wcm9kdWN0TmFtZSA9IG51bGw7
Ci0gICAgdGhpcy5zZXJpYWxOdW1iZXIgPSBudWxsOwotICAgIHRoaXMud2VidXNiTGFuZGluZ1Bh
Z2UgPSBudWxsOwotICAgIHRoaXMuY29uZmlndXJhdGlvbnMgPSBudWxsOwotICB9OwotICBVc2JE
ZXZpY2VJbmZvLnByb3RvdHlwZS5pbml0RmllbGRzXyA9IGZ1bmN0aW9uKGZpZWxkcykgewotICAg
IGZvcih2YXIgZmllbGQgaW4gZmllbGRzKSB7Ci0gICAgICAgIGlmICh0aGlzLmhhc093blByb3Bl
cnR5KGZpZWxkKSkKLSAgICAgICAgICB0aGlzW2ZpZWxkXSA9IGZpZWxkc1tmaWVsZF07Ci0gICAg
fQotICB9OwotCi0gIFVzYkRldmljZUluZm8udmFsaWRhdGUgPSBmdW5jdGlvbihtZXNzYWdlVmFs
aWRhdG9yLCBvZmZzZXQpIHsKLSAgICB2YXIgZXJyOwotICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0
b3IudmFsaWRhdGVTdHJ1Y3RIZWFkZXIob2Zmc2V0LCBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSk7
Ci0gICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQotICAgICAg
ICByZXR1cm4gZXJyOwotCi0gICAgdmFyIGtWZXJzaW9uU2l6ZXMgPSBbCi0gICAgICB7dmVyc2lv
bjogMCwgbnVtQnl0ZXM6IDgwfQotICAgIF07Ci0gICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52
YWxpZGF0ZVN0cnVjdFZlcnNpb24ob2Zmc2V0LCBrVmVyc2lvblNpemVzKTsKLSAgICBpZiAoZXJy
ICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCi0gICAgICAgIHJldHVybiBlcnI7
Ci0KLQotICAgIC8vIHZhbGlkYXRlIFVzYkRldmljZUluZm8uZ3VpZAotICAgIGVyciA9IG1lc3Nh
Z2VWYWxpZGF0b3IudmFsaWRhdGVTdHJpbmdQb2ludGVyKG9mZnNldCArIGNvZGVjLmtTdHJ1Y3RI
ZWFkZXJTaXplICsgMCwgZmFsc2UpCi0gICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRp
b25FcnJvci5OT05FKQotICAgICAgICByZXR1cm4gZXJyOwotCi0KLQotCi0KLQotCi0KLQotCi0K
LQotCi0KLQotICAgIC8vIHZhbGlkYXRlIFVzYkRldmljZUluZm8ubWFudWZhY3R1cmVyTmFtZQot
ICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RQb2ludGVyKG9mZnNldCAr
IGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgMzIsIHN0cmluZzE2JC5TdHJpbmcxNiwgdHJ1ZSk7
Ci0gICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQotICAgICAg
ICByZXR1cm4gZXJyOwotCi0KLSAgICAvLyB2YWxpZGF0ZSBVc2JEZXZpY2VJbmZvLnByb2R1Y3RO
YW1lCi0gICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdFBvaW50ZXIob2Zm
c2V0ICsgY29kZWMua1N0cnVjdEhlYWRlclNpemUgKyA0MCwgc3RyaW5nMTYkLlN0cmluZzE2LCB0
cnVlKTsKLSAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCi0g
ICAgICAgIHJldHVybiBlcnI7Ci0KLQotICAgIC8vIHZhbGlkYXRlIFVzYkRldmljZUluZm8uc2Vy
aWFsTnVtYmVyCi0gICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdFBvaW50
ZXIob2Zmc2V0ICsgY29kZWMua1N0cnVjdEhlYWRlclNpemUgKyA0OCwgc3RyaW5nMTYkLlN0cmlu
ZzE2LCB0cnVlKTsKLSAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5P
TkUpCi0gICAgICAgIHJldHVybiBlcnI7Ci0KLQotICAgIC8vIHZhbGlkYXRlIFVzYkRldmljZUlu
Zm8ud2VidXNiTGFuZGluZ1BhZ2UKLSAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRl
U3RydWN0UG9pbnRlcihvZmZzZXQgKyBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDU2LCB1cmwk
LlVybCwgdHJ1ZSk7Ci0gICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5O
T05FKQotICAgICAgICByZXR1cm4gZXJyOwotCi0KLQotICAgIC8vIHZhbGlkYXRlIFVzYkRldmlj
ZUluZm8uY29uZmlndXJhdGlvbnMKLSAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRl
QXJyYXlQb2ludGVyKG9mZnNldCArIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgNjQsIDgsIG5l
dyBjb2RlYy5Qb2ludGVyVG8oVXNiQ29uZmlndXJhdGlvbkluZm8pLCBmYWxzZSwgWzBdLCAwKTsK
LSAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCi0gICAgICAg
IHJldHVybiBlcnI7Ci0KLSAgICByZXR1cm4gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05F
OwotICB9OwotCi0gIFVzYkRldmljZUluZm8uZW5jb2RlZFNpemUgPSBjb2RlYy5rU3RydWN0SGVh
ZGVyU2l6ZSArIDcyOwotCi0gIFVzYkRldmljZUluZm8uZGVjb2RlID0gZnVuY3Rpb24oZGVjb2Rl
cikgewotICAgIHZhciBwYWNrZWQ7Ci0gICAgdmFyIHZhbCA9IG5ldyBVc2JEZXZpY2VJbmZvKCk7
Ci0gICAgdmFyIG51bWJlck9mQnl0ZXMgPSBkZWNvZGVyLnJlYWRVaW50MzIoKTsKLSAgICB2YXIg
dmVyc2lvbiA9IGRlY29kZXIucmVhZFVpbnQzMigpOwotICAgIHZhbC5ndWlkID0gZGVjb2Rlci5k
ZWNvZGVTdHJ1Y3QoY29kZWMuU3RyaW5nKTsKLSAgICB2YWwudXNiVmVyc2lvbk1ham9yID0gZGVj
b2Rlci5kZWNvZGVTdHJ1Y3QoY29kZWMuVWludDgpOwotICAgIHZhbC51c2JWZXJzaW9uTWlub3Ig
PSBkZWNvZGVyLmRlY29kZVN0cnVjdChjb2RlYy5VaW50OCk7Ci0gICAgdmFsLnVzYlZlcnNpb25T
dWJtaW5vciA9IGRlY29kZXIuZGVjb2RlU3RydWN0KGNvZGVjLlVpbnQ4KTsKLSAgICB2YWwuY2xh
c3NDb2RlID0gZGVjb2Rlci5kZWNvZGVTdHJ1Y3QoY29kZWMuVWludDgpOwotICAgIHZhbC5zdWJj
bGFzc0NvZGUgPSBkZWNvZGVyLmRlY29kZVN0cnVjdChjb2RlYy5VaW50OCk7Ci0gICAgdmFsLnBy
b3RvY29sQ29kZSA9IGRlY29kZXIuZGVjb2RlU3RydWN0KGNvZGVjLlVpbnQ4KTsKLSAgICB2YWwu
dmVuZG9ySWQgPSBkZWNvZGVyLmRlY29kZVN0cnVjdChjb2RlYy5VaW50MTYpOwotICAgIHZhbC5i
dXNOdW1iZXIgPSBkZWNvZGVyLmRlY29kZVN0cnVjdChjb2RlYy5VaW50MzIpOwotICAgIHZhbC5w
b3J0TnVtYmVyID0gZGVjb2Rlci5kZWNvZGVTdHJ1Y3QoY29kZWMuVWludDMyKTsKLSAgICB2YWwu
cHJvZHVjdElkID0gZGVjb2Rlci5kZWNvZGVTdHJ1Y3QoY29kZWMuVWludDE2KTsKLSAgICB2YWwu
ZGV2aWNlVmVyc2lvbk1ham9yID0gZGVjb2Rlci5kZWNvZGVTdHJ1Y3QoY29kZWMuVWludDgpOwot
ICAgIHZhbC5kZXZpY2VWZXJzaW9uTWlub3IgPSBkZWNvZGVyLmRlY29kZVN0cnVjdChjb2RlYy5V
aW50OCk7Ci0gICAgdmFsLmRldmljZVZlcnNpb25TdWJtaW5vciA9IGRlY29kZXIuZGVjb2RlU3Ry
dWN0KGNvZGVjLlVpbnQ4KTsKLSAgICB2YWwuYWN0aXZlQ29uZmlndXJhdGlvbiA9IGRlY29kZXIu
ZGVjb2RlU3RydWN0KGNvZGVjLlVpbnQ4KTsKLSAgICBkZWNvZGVyLnNraXAoMSk7Ci0gICAgZGVj
b2Rlci5za2lwKDEpOwotICAgIHZhbC5tYW51ZmFjdHVyZXJOYW1lID0gZGVjb2Rlci5kZWNvZGVT
dHJ1Y3RQb2ludGVyKHN0cmluZzE2JC5TdHJpbmcxNik7Ci0gICAgdmFsLnByb2R1Y3ROYW1lID0g
ZGVjb2Rlci5kZWNvZGVTdHJ1Y3RQb2ludGVyKHN0cmluZzE2JC5TdHJpbmcxNik7Ci0gICAgdmFs
LnNlcmlhbE51bWJlciA9IGRlY29kZXIuZGVjb2RlU3RydWN0UG9pbnRlcihzdHJpbmcxNiQuU3Ry
aW5nMTYpOwotICAgIHZhbC53ZWJ1c2JMYW5kaW5nUGFnZSA9IGRlY29kZXIuZGVjb2RlU3RydWN0
UG9pbnRlcih1cmwkLlVybCk7Ci0gICAgdmFsLmNvbmZpZ3VyYXRpb25zID0gZGVjb2Rlci5kZWNv
ZGVBcnJheVBvaW50ZXIobmV3IGNvZGVjLlBvaW50ZXJUbyhVc2JDb25maWd1cmF0aW9uSW5mbykp
OwotICAgIHJldHVybiB2YWw7Ci0gIH07Ci0KLSAgVXNiRGV2aWNlSW5mby5lbmNvZGUgPSBmdW5j
dGlvbihlbmNvZGVyLCB2YWwpIHsKLSAgICB2YXIgcGFja2VkOwotICAgIGVuY29kZXIud3JpdGVV
aW50MzIoVXNiRGV2aWNlSW5mby5lbmNvZGVkU2l6ZSk7Ci0gICAgZW5jb2Rlci53cml0ZVVpbnQz
MigwKTsKLSAgICBlbmNvZGVyLmVuY29kZVN0cnVjdChjb2RlYy5TdHJpbmcsIHZhbC5ndWlkKTsK
LSAgICBlbmNvZGVyLmVuY29kZVN0cnVjdChjb2RlYy5VaW50OCwgdmFsLnVzYlZlcnNpb25NYWpv
cik7Ci0gICAgZW5jb2Rlci5lbmNvZGVTdHJ1Y3QoY29kZWMuVWludDgsIHZhbC51c2JWZXJzaW9u
TWlub3IpOwotICAgIGVuY29kZXIuZW5jb2RlU3RydWN0KGNvZGVjLlVpbnQ4LCB2YWwudXNiVmVy
c2lvblN1Ym1pbm9yKTsKLSAgICBlbmNvZGVyLmVuY29kZVN0cnVjdChjb2RlYy5VaW50OCwgdmFs
LmNsYXNzQ29kZSk7Ci0gICAgZW5jb2Rlci5lbmNvZGVTdHJ1Y3QoY29kZWMuVWludDgsIHZhbC5z
dWJjbGFzc0NvZGUpOwotICAgIGVuY29kZXIuZW5jb2RlU3RydWN0KGNvZGVjLlVpbnQ4LCB2YWwu
cHJvdG9jb2xDb2RlKTsKLSAgICBlbmNvZGVyLmVuY29kZVN0cnVjdChjb2RlYy5VaW50MTYsIHZh
bC52ZW5kb3JJZCk7Ci0gICAgZW5jb2Rlci5lbmNvZGVTdHJ1Y3QoY29kZWMuVWludDMyLCB2YWwu
YnVzTnVtYmVyKTsKLSAgICBlbmNvZGVyLmVuY29kZVN0cnVjdChjb2RlYy5VaW50MzIsIHZhbC5w
b3J0TnVtYmVyKTsKLSAgICBlbmNvZGVyLmVuY29kZVN0cnVjdChjb2RlYy5VaW50MTYsIHZhbC5w
cm9kdWN0SWQpOwotICAgIGVuY29kZXIuZW5jb2RlU3RydWN0KGNvZGVjLlVpbnQ4LCB2YWwuZGV2
aWNlVmVyc2lvbk1ham9yKTsKLSAgICBlbmNvZGVyLmVuY29kZVN0cnVjdChjb2RlYy5VaW50OCwg
dmFsLmRldmljZVZlcnNpb25NaW5vcik7Ci0gICAgZW5jb2Rlci5lbmNvZGVTdHJ1Y3QoY29kZWMu
VWludDgsIHZhbC5kZXZpY2VWZXJzaW9uU3VibWlub3IpOwotICAgIGVuY29kZXIuZW5jb2RlU3Ry
dWN0KGNvZGVjLlVpbnQ4LCB2YWwuYWN0aXZlQ29uZmlndXJhdGlvbik7Ci0gICAgZW5jb2Rlci5z
a2lwKDEpOwotICAgIGVuY29kZXIuc2tpcCgxKTsKLSAgICBlbmNvZGVyLmVuY29kZVN0cnVjdFBv
aW50ZXIoc3RyaW5nMTYkLlN0cmluZzE2LCB2YWwubWFudWZhY3R1cmVyTmFtZSk7Ci0gICAgZW5j
b2Rlci5lbmNvZGVTdHJ1Y3RQb2ludGVyKHN0cmluZzE2JC5TdHJpbmcxNiwgdmFsLnByb2R1Y3RO
YW1lKTsKLSAgICBlbmNvZGVyLmVuY29kZVN0cnVjdFBvaW50ZXIoc3RyaW5nMTYkLlN0cmluZzE2
LCB2YWwuc2VyaWFsTnVtYmVyKTsKLSAgICBlbmNvZGVyLmVuY29kZVN0cnVjdFBvaW50ZXIodXJs
JC5VcmwsIHZhbC53ZWJ1c2JMYW5kaW5nUGFnZSk7Ci0gICAgZW5jb2Rlci5lbmNvZGVBcnJheVBv
aW50ZXIobmV3IGNvZGVjLlBvaW50ZXJUbyhVc2JDb25maWd1cmF0aW9uSW5mbyksIHZhbC5jb25m
aWd1cmF0aW9ucyk7Ci0gIH07Ci0gIGZ1bmN0aW9uIFVzYkNvbnRyb2xUcmFuc2ZlclBhcmFtcyh2
YWx1ZXMpIHsKLSAgICB0aGlzLmluaXREZWZhdWx0c18oKTsKLSAgICB0aGlzLmluaXRGaWVsZHNf
KHZhbHVlcyk7Ci0gIH0KLQotCi0gIFVzYkNvbnRyb2xUcmFuc2ZlclBhcmFtcy5wcm90b3R5cGUu
aW5pdERlZmF1bHRzXyA9IGZ1bmN0aW9uKCkgewotICAgIHRoaXMudHlwZSA9IDA7Ci0gICAgdGhp
cy5yZWNpcGllbnQgPSAwOwotICAgIHRoaXMucmVxdWVzdCA9IDA7Ci0gICAgdGhpcy52YWx1ZSA9
IDA7Ci0gICAgdGhpcy5pbmRleCA9IDA7Ci0gIH07Ci0gIFVzYkNvbnRyb2xUcmFuc2ZlclBhcmFt
cy5wcm90b3R5cGUuaW5pdEZpZWxkc18gPSBmdW5jdGlvbihmaWVsZHMpIHsKLSAgICBmb3IodmFy
IGZpZWxkIGluIGZpZWxkcykgewotICAgICAgICBpZiAodGhpcy5oYXNPd25Qcm9wZXJ0eShmaWVs
ZCkpCi0gICAgICAgICAgdGhpc1tmaWVsZF0gPSBmaWVsZHNbZmllbGRdOwotICAgIH0KLSAgfTsK
LQotICBVc2JDb250cm9sVHJhbnNmZXJQYXJhbXMudmFsaWRhdGUgPSBmdW5jdGlvbihtZXNzYWdl
VmFsaWRhdG9yLCBvZmZzZXQpIHsKLSAgICB2YXIgZXJyOwotICAgIGVyciA9IG1lc3NhZ2VWYWxp
ZGF0b3IudmFsaWRhdGVTdHJ1Y3RIZWFkZXIob2Zmc2V0LCBjb2RlYy5rU3RydWN0SGVhZGVyU2l6
ZSk7Ci0gICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQotICAg
ICAgICByZXR1cm4gZXJyOwotCi0gICAgdmFyIGtWZXJzaW9uU2l6ZXMgPSBbCi0gICAgICB7dmVy
c2lvbjogMCwgbnVtQnl0ZXM6IDI0fQotICAgIF07Ci0gICAgZXJyID0gbWVzc2FnZVZhbGlkYXRv
ci52YWxpZGF0ZVN0cnVjdFZlcnNpb24ob2Zmc2V0LCBrVmVyc2lvblNpemVzKTsKLSAgICBpZiAo
ZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCi0gICAgICAgIHJldHVybiBl
cnI7Ci0KLQotICAgIC8vIHZhbGlkYXRlIFVzYkNvbnRyb2xUcmFuc2ZlclBhcmFtcy50eXBlCi0g
ICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZUVudW0ob2Zmc2V0ICsgY29kZWMua1N0
cnVjdEhlYWRlclNpemUgKyAwLCBVc2JDb250cm9sVHJhbnNmZXJUeXBlKTsKLSAgICBpZiAoZXJy
ICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCi0gICAgICAgIHJldHVybiBlcnI7
Ci0KLQotICAgIC8vIHZhbGlkYXRlIFVzYkNvbnRyb2xUcmFuc2ZlclBhcmFtcy5yZWNpcGllbnQK
LSAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlRW51bShvZmZzZXQgKyBjb2RlYy5r
U3RydWN0SGVhZGVyU2l6ZSArIDQsIFVzYkNvbnRyb2xUcmFuc2ZlclJlY2lwaWVudCk7Ci0gICAg
aWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQotICAgICAgICByZXR1
cm4gZXJyOwotCi0KLQotCi0gICAgcmV0dXJuIHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9O
RTsKLSAgfTsKLQotICBVc2JDb250cm9sVHJhbnNmZXJQYXJhbXMuZW5jb2RlZFNpemUgPSBjb2Rl
Yy5rU3RydWN0SGVhZGVyU2l6ZSArIDE2OwotCi0gIFVzYkNvbnRyb2xUcmFuc2ZlclBhcmFtcy5k
ZWNvZGUgPSBmdW5jdGlvbihkZWNvZGVyKSB7Ci0gICAgdmFyIHBhY2tlZDsKLSAgICB2YXIgdmFs
ID0gbmV3IFVzYkNvbnRyb2xUcmFuc2ZlclBhcmFtcygpOwotICAgIHZhciBudW1iZXJPZkJ5dGVz
ID0gZGVjb2Rlci5yZWFkVWludDMyKCk7Ci0gICAgdmFyIHZlcnNpb24gPSBkZWNvZGVyLnJlYWRV
aW50MzIoKTsKLSAgICB2YWwudHlwZSA9IGRlY29kZXIuZGVjb2RlU3RydWN0KGNvZGVjLkludDMy
KTsKLSAgICB2YWwucmVjaXBpZW50ID0gZGVjb2Rlci5kZWNvZGVTdHJ1Y3QoY29kZWMuSW50MzIp
OwotICAgIHZhbC5yZXF1ZXN0ID0gZGVjb2Rlci5kZWNvZGVTdHJ1Y3QoY29kZWMuVWludDgpOwot
ICAgIGRlY29kZXIuc2tpcCgxKTsKLSAgICB2YWwudmFsdWUgPSBkZWNvZGVyLmRlY29kZVN0cnVj
dChjb2RlYy5VaW50MTYpOwotICAgIHZhbC5pbmRleCA9IGRlY29kZXIuZGVjb2RlU3RydWN0KGNv
ZGVjLlVpbnQxNik7Ci0gICAgZGVjb2Rlci5za2lwKDEpOwotICAgIGRlY29kZXIuc2tpcCgxKTsK
LSAgICByZXR1cm4gdmFsOwotICB9OwotCi0gIFVzYkNvbnRyb2xUcmFuc2ZlclBhcmFtcy5lbmNv
ZGUgPSBmdW5jdGlvbihlbmNvZGVyLCB2YWwpIHsKLSAgICB2YXIgcGFja2VkOwotICAgIGVuY29k
ZXIud3JpdGVVaW50MzIoVXNiQ29udHJvbFRyYW5zZmVyUGFyYW1zLmVuY29kZWRTaXplKTsKLSAg
ICBlbmNvZGVyLndyaXRlVWludDMyKDApOwotICAgIGVuY29kZXIuZW5jb2RlU3RydWN0KGNvZGVj
LkludDMyLCB2YWwudHlwZSk7Ci0gICAgZW5jb2Rlci5lbmNvZGVTdHJ1Y3QoY29kZWMuSW50MzIs
IHZhbC5yZWNpcGllbnQpOwotICAgIGVuY29kZXIuZW5jb2RlU3RydWN0KGNvZGVjLlVpbnQ4LCB2
YWwucmVxdWVzdCk7Ci0gICAgZW5jb2Rlci5za2lwKDEpOwotICAgIGVuY29kZXIuZW5jb2RlU3Ry
dWN0KGNvZGVjLlVpbnQxNiwgdmFsLnZhbHVlKTsKLSAgICBlbmNvZGVyLmVuY29kZVN0cnVjdChj
b2RlYy5VaW50MTYsIHZhbC5pbmRleCk7Ci0gICAgZW5jb2Rlci5za2lwKDEpOwotICAgIGVuY29k
ZXIuc2tpcCgxKTsKLSAgfTsKLSAgZnVuY3Rpb24gVXNiSXNvY2hyb25vdXNQYWNrZXQodmFsdWVz
KSB7Ci0gICAgdGhpcy5pbml0RGVmYXVsdHNfKCk7Ci0gICAgdGhpcy5pbml0RmllbGRzXyh2YWx1
ZXMpOwotICB9Ci0KLQotICBVc2JJc29jaHJvbm91c1BhY2tldC5wcm90b3R5cGUuaW5pdERlZmF1
bHRzXyA9IGZ1bmN0aW9uKCkgewotICAgIHRoaXMubGVuZ3RoID0gMDsKLSAgICB0aGlzLnRyYW5z
ZmVycmVkTGVuZ3RoID0gMDsKLSAgICB0aGlzLnN0YXR1cyA9IDA7Ci0gIH07Ci0gIFVzYklzb2No
cm9ub3VzUGFja2V0LnByb3RvdHlwZS5pbml0RmllbGRzXyA9IGZ1bmN0aW9uKGZpZWxkcykgewot
ICAgIGZvcih2YXIgZmllbGQgaW4gZmllbGRzKSB7Ci0gICAgICAgIGlmICh0aGlzLmhhc093blBy
b3BlcnR5KGZpZWxkKSkKLSAgICAgICAgICB0aGlzW2ZpZWxkXSA9IGZpZWxkc1tmaWVsZF07Ci0g
ICAgfQotICB9OwotCi0gIFVzYklzb2Nocm9ub3VzUGFja2V0LnZhbGlkYXRlID0gZnVuY3Rpb24o
bWVzc2FnZVZhbGlkYXRvciwgb2Zmc2V0KSB7Ci0gICAgdmFyIGVycjsKLSAgICBlcnIgPSBtZXNz
YWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0SGVhZGVyKG9mZnNldCwgY29kZWMua1N0cnVjdEhl
YWRlclNpemUpOwotICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9O
RSkKLSAgICAgICAgcmV0dXJuIGVycjsKLQotICAgIHZhciBrVmVyc2lvblNpemVzID0gWwotICAg
ICAge3ZlcnNpb246IDAsIG51bUJ5dGVzOiAyNH0KLSAgICBdOwotICAgIGVyciA9IG1lc3NhZ2VW
YWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RWZXJzaW9uKG9mZnNldCwga1ZlcnNpb25TaXplcyk7Ci0g
ICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQotICAgICAgICBy
ZXR1cm4gZXJyOwotCi0KLQotCi0gICAgLy8gdmFsaWRhdGUgVXNiSXNvY2hyb25vdXNQYWNrZXQu
c3RhdHVzCi0gICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZUVudW0ob2Zmc2V0ICsg
Y29kZWMua1N0cnVjdEhlYWRlclNpemUgKyA4LCBVc2JUcmFuc2ZlclN0YXR1cyk7Ci0gICAgaWYg
KGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQotICAgICAgICByZXR1cm4g
ZXJyOwotCi0gICAgcmV0dXJuIHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORTsKLSAgfTsK
LQotICBVc2JJc29jaHJvbm91c1BhY2tldC5lbmNvZGVkU2l6ZSA9IGNvZGVjLmtTdHJ1Y3RIZWFk
ZXJTaXplICsgMTY7Ci0KLSAgVXNiSXNvY2hyb25vdXNQYWNrZXQuZGVjb2RlID0gZnVuY3Rpb24o
ZGVjb2RlcikgewotICAgIHZhciBwYWNrZWQ7Ci0gICAgdmFyIHZhbCA9IG5ldyBVc2JJc29jaHJv
bm91c1BhY2tldCgpOwotICAgIHZhciBudW1iZXJPZkJ5dGVzID0gZGVjb2Rlci5yZWFkVWludDMy
KCk7Ci0gICAgdmFyIHZlcnNpb24gPSBkZWNvZGVyLnJlYWRVaW50MzIoKTsKLSAgICB2YWwubGVu
Z3RoID0gZGVjb2Rlci5kZWNvZGVTdHJ1Y3QoY29kZWMuVWludDMyKTsKLSAgICB2YWwudHJhbnNm
ZXJyZWRMZW5ndGggPSBkZWNvZGVyLmRlY29kZVN0cnVjdChjb2RlYy5VaW50MzIpOwotICAgIHZh
bC5zdGF0dXMgPSBkZWNvZGVyLmRlY29kZVN0cnVjdChjb2RlYy5JbnQzMik7Ci0gICAgZGVjb2Rl
ci5za2lwKDEpOwotICAgIGRlY29kZXIuc2tpcCgxKTsKLSAgICBkZWNvZGVyLnNraXAoMSk7Ci0g
ICAgZGVjb2Rlci5za2lwKDEpOwotICAgIHJldHVybiB2YWw7Ci0gIH07Ci0KLSAgVXNiSXNvY2hy
b25vdXNQYWNrZXQuZW5jb2RlID0gZnVuY3Rpb24oZW5jb2RlciwgdmFsKSB7Ci0gICAgdmFyIHBh
Y2tlZDsKLSAgICBlbmNvZGVyLndyaXRlVWludDMyKFVzYklzb2Nocm9ub3VzUGFja2V0LmVuY29k
ZWRTaXplKTsKLSAgICBlbmNvZGVyLndyaXRlVWludDMyKDApOwotICAgIGVuY29kZXIuZW5jb2Rl
U3RydWN0KGNvZGVjLlVpbnQzMiwgdmFsLmxlbmd0aCk7Ci0gICAgZW5jb2Rlci5lbmNvZGVTdHJ1
Y3QoY29kZWMuVWludDMyLCB2YWwudHJhbnNmZXJyZWRMZW5ndGgpOwotICAgIGVuY29kZXIuZW5j
b2RlU3RydWN0KGNvZGVjLkludDMyLCB2YWwuc3RhdHVzKTsKLSAgICBlbmNvZGVyLnNraXAoMSk7
Ci0gICAgZW5jb2Rlci5za2lwKDEpOwotICAgIGVuY29kZXIuc2tpcCgxKTsKLSAgICBlbmNvZGVy
LnNraXAoMSk7Ci0gIH07Ci0gIGZ1bmN0aW9uIFVzYkRldmljZV9PcGVuX1BhcmFtcyh2YWx1ZXMp
IHsKLSAgICB0aGlzLmluaXREZWZhdWx0c18oKTsKLSAgICB0aGlzLmluaXRGaWVsZHNfKHZhbHVl
cyk7Ci0gIH0KLQotCi0gIFVzYkRldmljZV9PcGVuX1BhcmFtcy5wcm90b3R5cGUuaW5pdERlZmF1
bHRzXyA9IGZ1bmN0aW9uKCkgewotICB9OwotICBVc2JEZXZpY2VfT3Blbl9QYXJhbXMucHJvdG90
eXBlLmluaXRGaWVsZHNfID0gZnVuY3Rpb24oZmllbGRzKSB7Ci0gICAgZm9yKHZhciBmaWVsZCBp
biBmaWVsZHMpIHsKLSAgICAgICAgaWYgKHRoaXMuaGFzT3duUHJvcGVydHkoZmllbGQpKQotICAg
ICAgICAgIHRoaXNbZmllbGRdID0gZmllbGRzW2ZpZWxkXTsKLSAgICB9Ci0gIH07Ci0KLSAgVXNi
RGV2aWNlX09wZW5fUGFyYW1zLnZhbGlkYXRlID0gZnVuY3Rpb24obWVzc2FnZVZhbGlkYXRvciwg
b2Zmc2V0KSB7Ci0gICAgdmFyIGVycjsKLSAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlk
YXRlU3RydWN0SGVhZGVyKG9mZnNldCwgY29kZWMua1N0cnVjdEhlYWRlclNpemUpOwotICAgIGlm
IChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKLSAgICAgICAgcmV0dXJu
IGVycjsKLQotICAgIHZhciBrVmVyc2lvblNpemVzID0gWwotICAgICAge3ZlcnNpb246IDAsIG51
bUJ5dGVzOiA4fQotICAgIF07Ci0gICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0
cnVjdFZlcnNpb24ob2Zmc2V0LCBrVmVyc2lvblNpemVzKTsKLSAgICBpZiAoZXJyICE9PSB2YWxp
ZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCi0gICAgICAgIHJldHVybiBlcnI7Ci0KLSAgICBy
ZXR1cm4gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FOwotICB9OwotCi0gIFVzYkRldmlj
ZV9PcGVuX1BhcmFtcy5lbmNvZGVkU2l6ZSA9IGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgMDsK
LQotICBVc2JEZXZpY2VfT3Blbl9QYXJhbXMuZGVjb2RlID0gZnVuY3Rpb24oZGVjb2Rlcikgewot
ICAgIHZhciBwYWNrZWQ7Ci0gICAgdmFyIHZhbCA9IG5ldyBVc2JEZXZpY2VfT3Blbl9QYXJhbXMo
KTsKLSAgICB2YXIgbnVtYmVyT2ZCeXRlcyA9IGRlY29kZXIucmVhZFVpbnQzMigpOwotICAgIHZh
ciB2ZXJzaW9uID0gZGVjb2Rlci5yZWFkVWludDMyKCk7Ci0gICAgcmV0dXJuIHZhbDsKLSAgfTsK
LQotICBVc2JEZXZpY2VfT3Blbl9QYXJhbXMuZW5jb2RlID0gZnVuY3Rpb24oZW5jb2RlciwgdmFs
KSB7Ci0gICAgdmFyIHBhY2tlZDsKLSAgICBlbmNvZGVyLndyaXRlVWludDMyKFVzYkRldmljZV9P
cGVuX1BhcmFtcy5lbmNvZGVkU2l6ZSk7Ci0gICAgZW5jb2Rlci53cml0ZVVpbnQzMigwKTsKLSAg
fTsKLSAgZnVuY3Rpb24gVXNiRGV2aWNlX09wZW5fUmVzcG9uc2VQYXJhbXModmFsdWVzKSB7Ci0g
ICAgdGhpcy5pbml0RGVmYXVsdHNfKCk7Ci0gICAgdGhpcy5pbml0RmllbGRzXyh2YWx1ZXMpOwot
ICB9Ci0KLQotICBVc2JEZXZpY2VfT3Blbl9SZXNwb25zZVBhcmFtcy5wcm90b3R5cGUuaW5pdERl
ZmF1bHRzXyA9IGZ1bmN0aW9uKCkgewotICAgIHRoaXMuZXJyb3IgPSAwOwotICB9OwotICBVc2JE
ZXZpY2VfT3Blbl9SZXNwb25zZVBhcmFtcy5wcm90b3R5cGUuaW5pdEZpZWxkc18gPSBmdW5jdGlv
bihmaWVsZHMpIHsKLSAgICBmb3IodmFyIGZpZWxkIGluIGZpZWxkcykgewotICAgICAgICBpZiAo
dGhpcy5oYXNPd25Qcm9wZXJ0eShmaWVsZCkpCi0gICAgICAgICAgdGhpc1tmaWVsZF0gPSBmaWVs
ZHNbZmllbGRdOwotICAgIH0KLSAgfTsKLQotICBVc2JEZXZpY2VfT3Blbl9SZXNwb25zZVBhcmFt
cy52YWxpZGF0ZSA9IGZ1bmN0aW9uKG1lc3NhZ2VWYWxpZGF0b3IsIG9mZnNldCkgewotICAgIHZh
ciBlcnI7Ci0gICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdEhlYWRlcihv
ZmZzZXQsIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplKTsKLSAgICBpZiAoZXJyICE9PSB2YWxpZGF0
b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCi0gICAgICAgIHJldHVybiBlcnI7Ci0KLSAgICB2YXIg
a1ZlcnNpb25TaXplcyA9IFsKLSAgICAgIHt2ZXJzaW9uOiAwLCBudW1CeXRlczogMTZ9Ci0gICAg
XTsKLSAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0VmVyc2lvbihvZmZz
ZXQsIGtWZXJzaW9uU2l6ZXMpOwotICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9u
RXJyb3IuTk9ORSkKLSAgICAgICAgcmV0dXJuIGVycjsKLQotCi0gICAgLy8gdmFsaWRhdGUgVXNi
RGV2aWNlX09wZW5fUmVzcG9uc2VQYXJhbXMuZXJyb3IKLSAgICBlcnIgPSBtZXNzYWdlVmFsaWRh
dG9yLnZhbGlkYXRlRW51bShvZmZzZXQgKyBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDAsIFVz
Yk9wZW5EZXZpY2VFcnJvcik7Ci0gICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25F
cnJvci5OT05FKQotICAgICAgICByZXR1cm4gZXJyOwotCi0gICAgcmV0dXJuIHZhbGlkYXRvci52
YWxpZGF0aW9uRXJyb3IuTk9ORTsKLSAgfTsKLQotICBVc2JEZXZpY2VfT3Blbl9SZXNwb25zZVBh
cmFtcy5lbmNvZGVkU2l6ZSA9IGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgODsKLQotICBVc2JE
ZXZpY2VfT3Blbl9SZXNwb25zZVBhcmFtcy5kZWNvZGUgPSBmdW5jdGlvbihkZWNvZGVyKSB7Ci0g
ICAgdmFyIHBhY2tlZDsKLSAgICB2YXIgdmFsID0gbmV3IFVzYkRldmljZV9PcGVuX1Jlc3BvbnNl
UGFyYW1zKCk7Ci0gICAgdmFyIG51bWJlck9mQnl0ZXMgPSBkZWNvZGVyLnJlYWRVaW50MzIoKTsK
LSAgICB2YXIgdmVyc2lvbiA9IGRlY29kZXIucmVhZFVpbnQzMigpOwotICAgIHZhbC5lcnJvciA9
IGRlY29kZXIuZGVjb2RlU3RydWN0KGNvZGVjLkludDMyKTsKLSAgICBkZWNvZGVyLnNraXAoMSk7
Ci0gICAgZGVjb2Rlci5za2lwKDEpOwotICAgIGRlY29kZXIuc2tpcCgxKTsKLSAgICBkZWNvZGVy
LnNraXAoMSk7Ci0gICAgcmV0dXJuIHZhbDsKLSAgfTsKLQotICBVc2JEZXZpY2VfT3Blbl9SZXNw
b25zZVBhcmFtcy5lbmNvZGUgPSBmdW5jdGlvbihlbmNvZGVyLCB2YWwpIHsKLSAgICB2YXIgcGFj
a2VkOwotICAgIGVuY29kZXIud3JpdGVVaW50MzIoVXNiRGV2aWNlX09wZW5fUmVzcG9uc2VQYXJh
bXMuZW5jb2RlZFNpemUpOwotICAgIGVuY29kZXIud3JpdGVVaW50MzIoMCk7Ci0gICAgZW5jb2Rl
ci5lbmNvZGVTdHJ1Y3QoY29kZWMuSW50MzIsIHZhbC5lcnJvcik7Ci0gICAgZW5jb2Rlci5za2lw
KDEpOwotICAgIGVuY29kZXIuc2tpcCgxKTsKLSAgICBlbmNvZGVyLnNraXAoMSk7Ci0gICAgZW5j
b2Rlci5za2lwKDEpOwotICB9OwotICBmdW5jdGlvbiBVc2JEZXZpY2VfQ2xvc2VfUGFyYW1zKHZh
bHVlcykgewotICAgIHRoaXMuaW5pdERlZmF1bHRzXygpOwotICAgIHRoaXMuaW5pdEZpZWxkc18o
dmFsdWVzKTsKLSAgfQotCi0KLSAgVXNiRGV2aWNlX0Nsb3NlX1BhcmFtcy5wcm90b3R5cGUuaW5p
dERlZmF1bHRzXyA9IGZ1bmN0aW9uKCkgewotICB9OwotICBVc2JEZXZpY2VfQ2xvc2VfUGFyYW1z
LnByb3RvdHlwZS5pbml0RmllbGRzXyA9IGZ1bmN0aW9uKGZpZWxkcykgewotICAgIGZvcih2YXIg
ZmllbGQgaW4gZmllbGRzKSB7Ci0gICAgICAgIGlmICh0aGlzLmhhc093blByb3BlcnR5KGZpZWxk
KSkKLSAgICAgICAgICB0aGlzW2ZpZWxkXSA9IGZpZWxkc1tmaWVsZF07Ci0gICAgfQotICB9Owot
Ci0gIFVzYkRldmljZV9DbG9zZV9QYXJhbXMudmFsaWRhdGUgPSBmdW5jdGlvbihtZXNzYWdlVmFs
aWRhdG9yLCBvZmZzZXQpIHsKLSAgICB2YXIgZXJyOwotICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0
b3IudmFsaWRhdGVTdHJ1Y3RIZWFkZXIob2Zmc2V0LCBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSk7
Ci0gICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQotICAgICAg
ICByZXR1cm4gZXJyOwotCi0gICAgdmFyIGtWZXJzaW9uU2l6ZXMgPSBbCi0gICAgICB7dmVyc2lv
bjogMCwgbnVtQnl0ZXM6IDh9Ci0gICAgXTsKLSAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZh
bGlkYXRlU3RydWN0VmVyc2lvbihvZmZzZXQsIGtWZXJzaW9uU2l6ZXMpOwotICAgIGlmIChlcnIg
IT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKLSAgICAgICAgcmV0dXJuIGVycjsK
LQotICAgIHJldHVybiB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkU7Ci0gIH07Ci0KLSAg
VXNiRGV2aWNlX0Nsb3NlX1BhcmFtcy5lbmNvZGVkU2l6ZSA9IGNvZGVjLmtTdHJ1Y3RIZWFkZXJT
aXplICsgMDsKLQotICBVc2JEZXZpY2VfQ2xvc2VfUGFyYW1zLmRlY29kZSA9IGZ1bmN0aW9uKGRl
Y29kZXIpIHsKLSAgICB2YXIgcGFja2VkOwotICAgIHZhciB2YWwgPSBuZXcgVXNiRGV2aWNlX0Ns
b3NlX1BhcmFtcygpOwotICAgIHZhciBudW1iZXJPZkJ5dGVzID0gZGVjb2Rlci5yZWFkVWludDMy
KCk7Ci0gICAgdmFyIHZlcnNpb24gPSBkZWNvZGVyLnJlYWRVaW50MzIoKTsKLSAgICByZXR1cm4g
dmFsOwotICB9OwotCi0gIFVzYkRldmljZV9DbG9zZV9QYXJhbXMuZW5jb2RlID0gZnVuY3Rpb24o
ZW5jb2RlciwgdmFsKSB7Ci0gICAgdmFyIHBhY2tlZDsKLSAgICBlbmNvZGVyLndyaXRlVWludDMy
KFVzYkRldmljZV9DbG9zZV9QYXJhbXMuZW5jb2RlZFNpemUpOwotICAgIGVuY29kZXIud3JpdGVV
aW50MzIoMCk7Ci0gIH07Ci0gIGZ1bmN0aW9uIFVzYkRldmljZV9DbG9zZV9SZXNwb25zZVBhcmFt
cyh2YWx1ZXMpIHsKLSAgICB0aGlzLmluaXREZWZhdWx0c18oKTsKLSAgICB0aGlzLmluaXRGaWVs
ZHNfKHZhbHVlcyk7Ci0gIH0KLQotCi0gIFVzYkRldmljZV9DbG9zZV9SZXNwb25zZVBhcmFtcy5w
cm90b3R5cGUuaW5pdERlZmF1bHRzXyA9IGZ1bmN0aW9uKCkgewotICB9OwotICBVc2JEZXZpY2Vf
Q2xvc2VfUmVzcG9uc2VQYXJhbXMucHJvdG90eXBlLmluaXRGaWVsZHNfID0gZnVuY3Rpb24oZmll
bGRzKSB7Ci0gICAgZm9yKHZhciBmaWVsZCBpbiBmaWVsZHMpIHsKLSAgICAgICAgaWYgKHRoaXMu
aGFzT3duUHJvcGVydHkoZmllbGQpKQotICAgICAgICAgIHRoaXNbZmllbGRdID0gZmllbGRzW2Zp
ZWxkXTsKLSAgICB9Ci0gIH07Ci0KLSAgVXNiRGV2aWNlX0Nsb3NlX1Jlc3BvbnNlUGFyYW1zLnZh
bGlkYXRlID0gZnVuY3Rpb24obWVzc2FnZVZhbGlkYXRvciwgb2Zmc2V0KSB7Ci0gICAgdmFyIGVy
cjsKLSAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0SGVhZGVyKG9mZnNl
dCwgY29kZWMua1N0cnVjdEhlYWRlclNpemUpOwotICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52
YWxpZGF0aW9uRXJyb3IuTk9ORSkKLSAgICAgICAgcmV0dXJuIGVycjsKLQotICAgIHZhciBrVmVy
c2lvblNpemVzID0gWwotICAgICAge3ZlcnNpb246IDAsIG51bUJ5dGVzOiA4fQotICAgIF07Ci0g
ICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdFZlcnNpb24ob2Zmc2V0LCBr
VmVyc2lvblNpemVzKTsKLSAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9y
Lk5PTkUpCi0gICAgICAgIHJldHVybiBlcnI7Ci0KLSAgICByZXR1cm4gdmFsaWRhdG9yLnZhbGlk
YXRpb25FcnJvci5OT05FOwotICB9OwotCi0gIFVzYkRldmljZV9DbG9zZV9SZXNwb25zZVBhcmFt
cy5lbmNvZGVkU2l6ZSA9IGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgMDsKLQotICBVc2JEZXZp
Y2VfQ2xvc2VfUmVzcG9uc2VQYXJhbXMuZGVjb2RlID0gZnVuY3Rpb24oZGVjb2RlcikgewotICAg
IHZhciBwYWNrZWQ7Ci0gICAgdmFyIHZhbCA9IG5ldyBVc2JEZXZpY2VfQ2xvc2VfUmVzcG9uc2VQ
YXJhbXMoKTsKLSAgICB2YXIgbnVtYmVyT2ZCeXRlcyA9IGRlY29kZXIucmVhZFVpbnQzMigpOwot
ICAgIHZhciB2ZXJzaW9uID0gZGVjb2Rlci5yZWFkVWludDMyKCk7Ci0gICAgcmV0dXJuIHZhbDsK
LSAgfTsKLQotICBVc2JEZXZpY2VfQ2xvc2VfUmVzcG9uc2VQYXJhbXMuZW5jb2RlID0gZnVuY3Rp
b24oZW5jb2RlciwgdmFsKSB7Ci0gICAgdmFyIHBhY2tlZDsKLSAgICBlbmNvZGVyLndyaXRlVWlu
dDMyKFVzYkRldmljZV9DbG9zZV9SZXNwb25zZVBhcmFtcy5lbmNvZGVkU2l6ZSk7Ci0gICAgZW5j
b2Rlci53cml0ZVVpbnQzMigwKTsKLSAgfTsKLSAgZnVuY3Rpb24gVXNiRGV2aWNlX1NldENvbmZp
Z3VyYXRpb25fUGFyYW1zKHZhbHVlcykgewotICAgIHRoaXMuaW5pdERlZmF1bHRzXygpOwotICAg
IHRoaXMuaW5pdEZpZWxkc18odmFsdWVzKTsKLSAgfQotCi0KLSAgVXNiRGV2aWNlX1NldENvbmZp
Z3VyYXRpb25fUGFyYW1zLnByb3RvdHlwZS5pbml0RGVmYXVsdHNfID0gZnVuY3Rpb24oKSB7Ci0g
ICAgdGhpcy52YWx1ZSA9IDA7Ci0gIH07Ci0gIFVzYkRldmljZV9TZXRDb25maWd1cmF0aW9uX1Bh
cmFtcy5wcm90b3R5cGUuaW5pdEZpZWxkc18gPSBmdW5jdGlvbihmaWVsZHMpIHsKLSAgICBmb3Io
dmFyIGZpZWxkIGluIGZpZWxkcykgewotICAgICAgICBpZiAodGhpcy5oYXNPd25Qcm9wZXJ0eShm
aWVsZCkpCi0gICAgICAgICAgdGhpc1tmaWVsZF0gPSBmaWVsZHNbZmllbGRdOwotICAgIH0KLSAg
fTsKLQotICBVc2JEZXZpY2VfU2V0Q29uZmlndXJhdGlvbl9QYXJhbXMudmFsaWRhdGUgPSBmdW5j
dGlvbihtZXNzYWdlVmFsaWRhdG9yLCBvZmZzZXQpIHsKLSAgICB2YXIgZXJyOwotICAgIGVyciA9
IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RIZWFkZXIob2Zmc2V0LCBjb2RlYy5rU3Ry
dWN0SGVhZGVyU2l6ZSk7Ci0gICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJv
ci5OT05FKQotICAgICAgICByZXR1cm4gZXJyOwotCi0gICAgdmFyIGtWZXJzaW9uU2l6ZXMgPSBb
Ci0gICAgICB7dmVyc2lvbjogMCwgbnVtQnl0ZXM6IDE2fQotICAgIF07Ci0gICAgZXJyID0gbWVz
c2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdFZlcnNpb24ob2Zmc2V0LCBrVmVyc2lvblNpemVz
KTsKLSAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCi0gICAg
ICAgIHJldHVybiBlcnI7Ci0KLQotICAgIHJldHVybiB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9y
Lk5PTkU7Ci0gIH07Ci0KLSAgVXNiRGV2aWNlX1NldENvbmZpZ3VyYXRpb25fUGFyYW1zLmVuY29k
ZWRTaXplID0gY29kZWMua1N0cnVjdEhlYWRlclNpemUgKyA4OwotCi0gIFVzYkRldmljZV9TZXRD
b25maWd1cmF0aW9uX1BhcmFtcy5kZWNvZGUgPSBmdW5jdGlvbihkZWNvZGVyKSB7Ci0gICAgdmFy
IHBhY2tlZDsKLSAgICB2YXIgdmFsID0gbmV3IFVzYkRldmljZV9TZXRDb25maWd1cmF0aW9uX1Bh
cmFtcygpOwotICAgIHZhciBudW1iZXJPZkJ5dGVzID0gZGVjb2Rlci5yZWFkVWludDMyKCk7Ci0g
ICAgdmFyIHZlcnNpb24gPSBkZWNvZGVyLnJlYWRVaW50MzIoKTsKLSAgICB2YWwudmFsdWUgPSBk
ZWNvZGVyLmRlY29kZVN0cnVjdChjb2RlYy5VaW50OCk7Ci0gICAgZGVjb2Rlci5za2lwKDEpOwot
ICAgIGRlY29kZXIuc2tpcCgxKTsKLSAgICBkZWNvZGVyLnNraXAoMSk7Ci0gICAgZGVjb2Rlci5z
a2lwKDEpOwotICAgIGRlY29kZXIuc2tpcCgxKTsKLSAgICBkZWNvZGVyLnNraXAoMSk7Ci0gICAg
ZGVjb2Rlci5za2lwKDEpOwotICAgIHJldHVybiB2YWw7Ci0gIH07Ci0KLSAgVXNiRGV2aWNlX1Nl
dENvbmZpZ3VyYXRpb25fUGFyYW1zLmVuY29kZSA9IGZ1bmN0aW9uKGVuY29kZXIsIHZhbCkgewot
ICAgIHZhciBwYWNrZWQ7Ci0gICAgZW5jb2Rlci53cml0ZVVpbnQzMihVc2JEZXZpY2VfU2V0Q29u
ZmlndXJhdGlvbl9QYXJhbXMuZW5jb2RlZFNpemUpOwotICAgIGVuY29kZXIud3JpdGVVaW50MzIo
MCk7Ci0gICAgZW5jb2Rlci5lbmNvZGVTdHJ1Y3QoY29kZWMuVWludDgsIHZhbC52YWx1ZSk7Ci0g
ICAgZW5jb2Rlci5za2lwKDEpOwotICAgIGVuY29kZXIuc2tpcCgxKTsKLSAgICBlbmNvZGVyLnNr
aXAoMSk7Ci0gICAgZW5jb2Rlci5za2lwKDEpOwotICAgIGVuY29kZXIuc2tpcCgxKTsKLSAgICBl
bmNvZGVyLnNraXAoMSk7Ci0gICAgZW5jb2Rlci5za2lwKDEpOwotICB9OwotICBmdW5jdGlvbiBV
c2JEZXZpY2VfU2V0Q29uZmlndXJhdGlvbl9SZXNwb25zZVBhcmFtcyh2YWx1ZXMpIHsKLSAgICB0
aGlzLmluaXREZWZhdWx0c18oKTsKLSAgICB0aGlzLmluaXRGaWVsZHNfKHZhbHVlcyk7Ci0gIH0K
LQotCi0gIFVzYkRldmljZV9TZXRDb25maWd1cmF0aW9uX1Jlc3BvbnNlUGFyYW1zLnByb3RvdHlw
ZS5pbml0RGVmYXVsdHNfID0gZnVuY3Rpb24oKSB7Ci0gICAgdGhpcy5zdWNjZXNzID0gZmFsc2U7
Ci0gIH07Ci0gIFVzYkRldmljZV9TZXRDb25maWd1cmF0aW9uX1Jlc3BvbnNlUGFyYW1zLnByb3Rv
dHlwZS5pbml0RmllbGRzXyA9IGZ1bmN0aW9uKGZpZWxkcykgewotICAgIGZvcih2YXIgZmllbGQg
aW4gZmllbGRzKSB7Ci0gICAgICAgIGlmICh0aGlzLmhhc093blByb3BlcnR5KGZpZWxkKSkKLSAg
ICAgICAgICB0aGlzW2ZpZWxkXSA9IGZpZWxkc1tmaWVsZF07Ci0gICAgfQotICB9OwotCi0gIFVz
YkRldmljZV9TZXRDb25maWd1cmF0aW9uX1Jlc3BvbnNlUGFyYW1zLnZhbGlkYXRlID0gZnVuY3Rp
b24obWVzc2FnZVZhbGlkYXRvciwgb2Zmc2V0KSB7Ci0gICAgdmFyIGVycjsKLSAgICBlcnIgPSBt
ZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0SGVhZGVyKG9mZnNldCwgY29kZWMua1N0cnVj
dEhlYWRlclNpemUpOwotICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3Iu
Tk9ORSkKLSAgICAgICAgcmV0dXJuIGVycjsKLQotICAgIHZhciBrVmVyc2lvblNpemVzID0gWwot
ICAgICAge3ZlcnNpb246IDAsIG51bUJ5dGVzOiAxNn0KLSAgICBdOwotICAgIGVyciA9IG1lc3Nh
Z2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RWZXJzaW9uKG9mZnNldCwga1ZlcnNpb25TaXplcyk7
Ci0gICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQotICAgICAg
ICByZXR1cm4gZXJyOwotCi0KLSAgICByZXR1cm4gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5O
T05FOwotICB9OwotCi0gIFVzYkRldmljZV9TZXRDb25maWd1cmF0aW9uX1Jlc3BvbnNlUGFyYW1z
LmVuY29kZWRTaXplID0gY29kZWMua1N0cnVjdEhlYWRlclNpemUgKyA4OwotCi0gIFVzYkRldmlj
ZV9TZXRDb25maWd1cmF0aW9uX1Jlc3BvbnNlUGFyYW1zLmRlY29kZSA9IGZ1bmN0aW9uKGRlY29k
ZXIpIHsKLSAgICB2YXIgcGFja2VkOwotICAgIHZhciB2YWwgPSBuZXcgVXNiRGV2aWNlX1NldENv
bmZpZ3VyYXRpb25fUmVzcG9uc2VQYXJhbXMoKTsKLSAgICB2YXIgbnVtYmVyT2ZCeXRlcyA9IGRl
Y29kZXIucmVhZFVpbnQzMigpOwotICAgIHZhciB2ZXJzaW9uID0gZGVjb2Rlci5yZWFkVWludDMy
KCk7Ci0gICAgcGFja2VkID0gZGVjb2Rlci5yZWFkVWludDgoKTsKLSAgICB2YWwuc3VjY2VzcyA9
IChwYWNrZWQgPj4gMCkgJiAxID8gdHJ1ZSA6IGZhbHNlOwotICAgIGRlY29kZXIuc2tpcCgxKTsK
LSAgICBkZWNvZGVyLnNraXAoMSk7Ci0gICAgZGVjb2Rlci5za2lwKDEpOwotICAgIGRlY29kZXIu
c2tpcCgxKTsKLSAgICBkZWNvZGVyLnNraXAoMSk7Ci0gICAgZGVjb2Rlci5za2lwKDEpOwotICAg
IGRlY29kZXIuc2tpcCgxKTsKLSAgICByZXR1cm4gdmFsOwotICB9OwotCi0gIFVzYkRldmljZV9T
ZXRDb25maWd1cmF0aW9uX1Jlc3BvbnNlUGFyYW1zLmVuY29kZSA9IGZ1bmN0aW9uKGVuY29kZXIs
IHZhbCkgewotICAgIHZhciBwYWNrZWQ7Ci0gICAgZW5jb2Rlci53cml0ZVVpbnQzMihVc2JEZXZp
Y2VfU2V0Q29uZmlndXJhdGlvbl9SZXNwb25zZVBhcmFtcy5lbmNvZGVkU2l6ZSk7Ci0gICAgZW5j
b2Rlci53cml0ZVVpbnQzMigwKTsKLSAgICBwYWNrZWQgPSAwOwotICAgIHBhY2tlZCB8PSAodmFs
LnN1Y2Nlc3MgJiAxKSA8PCAwCi0gICAgZW5jb2Rlci53cml0ZVVpbnQ4KHBhY2tlZCk7Ci0gICAg
ZW5jb2Rlci5za2lwKDEpOwotICAgIGVuY29kZXIuc2tpcCgxKTsKLSAgICBlbmNvZGVyLnNraXAo
MSk7Ci0gICAgZW5jb2Rlci5za2lwKDEpOwotICAgIGVuY29kZXIuc2tpcCgxKTsKLSAgICBlbmNv
ZGVyLnNraXAoMSk7Ci0gICAgZW5jb2Rlci5za2lwKDEpOwotICB9OwotICBmdW5jdGlvbiBVc2JE
ZXZpY2VfQ2xhaW1JbnRlcmZhY2VfUGFyYW1zKHZhbHVlcykgewotICAgIHRoaXMuaW5pdERlZmF1
bHRzXygpOwotICAgIHRoaXMuaW5pdEZpZWxkc18odmFsdWVzKTsKLSAgfQotCi0KLSAgVXNiRGV2
aWNlX0NsYWltSW50ZXJmYWNlX1BhcmFtcy5wcm90b3R5cGUuaW5pdERlZmF1bHRzXyA9IGZ1bmN0
aW9uKCkgewotICAgIHRoaXMuaW50ZXJmYWNlTnVtYmVyID0gMDsKLSAgfTsKLSAgVXNiRGV2aWNl
X0NsYWltSW50ZXJmYWNlX1BhcmFtcy5wcm90b3R5cGUuaW5pdEZpZWxkc18gPSBmdW5jdGlvbihm
aWVsZHMpIHsKLSAgICBmb3IodmFyIGZpZWxkIGluIGZpZWxkcykgewotICAgICAgICBpZiAodGhp
cy5oYXNPd25Qcm9wZXJ0eShmaWVsZCkpCi0gICAgICAgICAgdGhpc1tmaWVsZF0gPSBmaWVsZHNb
ZmllbGRdOwotICAgIH0KLSAgfTsKLQotICBVc2JEZXZpY2VfQ2xhaW1JbnRlcmZhY2VfUGFyYW1z
LnZhbGlkYXRlID0gZnVuY3Rpb24obWVzc2FnZVZhbGlkYXRvciwgb2Zmc2V0KSB7Ci0gICAgdmFy
IGVycjsKLSAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0SGVhZGVyKG9m
ZnNldCwgY29kZWMua1N0cnVjdEhlYWRlclNpemUpOwotICAgIGlmIChlcnIgIT09IHZhbGlkYXRv
ci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKLSAgICAgICAgcmV0dXJuIGVycjsKLQotICAgIHZhciBr
VmVyc2lvblNpemVzID0gWwotICAgICAge3ZlcnNpb246IDAsIG51bUJ5dGVzOiAxNn0KLSAgICBd
OwotICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RWZXJzaW9uKG9mZnNl
dCwga1ZlcnNpb25TaXplcyk7Ci0gICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25F
cnJvci5OT05FKQotICAgICAgICByZXR1cm4gZXJyOwotCi0KLSAgICByZXR1cm4gdmFsaWRhdG9y
LnZhbGlkYXRpb25FcnJvci5OT05FOwotICB9OwotCi0gIFVzYkRldmljZV9DbGFpbUludGVyZmFj
ZV9QYXJhbXMuZW5jb2RlZFNpemUgPSBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDg7Ci0KLSAg
VXNiRGV2aWNlX0NsYWltSW50ZXJmYWNlX1BhcmFtcy5kZWNvZGUgPSBmdW5jdGlvbihkZWNvZGVy
KSB7Ci0gICAgdmFyIHBhY2tlZDsKLSAgICB2YXIgdmFsID0gbmV3IFVzYkRldmljZV9DbGFpbUlu
dGVyZmFjZV9QYXJhbXMoKTsKLSAgICB2YXIgbnVtYmVyT2ZCeXRlcyA9IGRlY29kZXIucmVhZFVp
bnQzMigpOwotICAgIHZhciB2ZXJzaW9uID0gZGVjb2Rlci5yZWFkVWludDMyKCk7Ci0gICAgdmFs
LmludGVyZmFjZU51bWJlciA9IGRlY29kZXIuZGVjb2RlU3RydWN0KGNvZGVjLlVpbnQ4KTsKLSAg
ICBkZWNvZGVyLnNraXAoMSk7Ci0gICAgZGVjb2Rlci5za2lwKDEpOwotICAgIGRlY29kZXIuc2tp
cCgxKTsKLSAgICBkZWNvZGVyLnNraXAoMSk7Ci0gICAgZGVjb2Rlci5za2lwKDEpOwotICAgIGRl
Y29kZXIuc2tpcCgxKTsKLSAgICBkZWNvZGVyLnNraXAoMSk7Ci0gICAgcmV0dXJuIHZhbDsKLSAg
fTsKLQotICBVc2JEZXZpY2VfQ2xhaW1JbnRlcmZhY2VfUGFyYW1zLmVuY29kZSA9IGZ1bmN0aW9u
KGVuY29kZXIsIHZhbCkgewotICAgIHZhciBwYWNrZWQ7Ci0gICAgZW5jb2Rlci53cml0ZVVpbnQz
MihVc2JEZXZpY2VfQ2xhaW1JbnRlcmZhY2VfUGFyYW1zLmVuY29kZWRTaXplKTsKLSAgICBlbmNv
ZGVyLndyaXRlVWludDMyKDApOwotICAgIGVuY29kZXIuZW5jb2RlU3RydWN0KGNvZGVjLlVpbnQ4
LCB2YWwuaW50ZXJmYWNlTnVtYmVyKTsKLSAgICBlbmNvZGVyLnNraXAoMSk7Ci0gICAgZW5jb2Rl
ci5za2lwKDEpOwotICAgIGVuY29kZXIuc2tpcCgxKTsKLSAgICBlbmNvZGVyLnNraXAoMSk7Ci0g
ICAgZW5jb2Rlci5za2lwKDEpOwotICAgIGVuY29kZXIuc2tpcCgxKTsKLSAgICBlbmNvZGVyLnNr
aXAoMSk7Ci0gIH07Ci0gIGZ1bmN0aW9uIFVzYkRldmljZV9DbGFpbUludGVyZmFjZV9SZXNwb25z
ZVBhcmFtcyh2YWx1ZXMpIHsKLSAgICB0aGlzLmluaXREZWZhdWx0c18oKTsKLSAgICB0aGlzLmlu
aXRGaWVsZHNfKHZhbHVlcyk7Ci0gIH0KLQotCi0gIFVzYkRldmljZV9DbGFpbUludGVyZmFjZV9S
ZXNwb25zZVBhcmFtcy5wcm90b3R5cGUuaW5pdERlZmF1bHRzXyA9IGZ1bmN0aW9uKCkgewotICAg
IHRoaXMuc3VjY2VzcyA9IGZhbHNlOwotICB9OwotICBVc2JEZXZpY2VfQ2xhaW1JbnRlcmZhY2Vf
UmVzcG9uc2VQYXJhbXMucHJvdG90eXBlLmluaXRGaWVsZHNfID0gZnVuY3Rpb24oZmllbGRzKSB7
Ci0gICAgZm9yKHZhciBmaWVsZCBpbiBmaWVsZHMpIHsKLSAgICAgICAgaWYgKHRoaXMuaGFzT3du
UHJvcGVydHkoZmllbGQpKQotICAgICAgICAgIHRoaXNbZmllbGRdID0gZmllbGRzW2ZpZWxkXTsK
LSAgICB9Ci0gIH07Ci0KLSAgVXNiRGV2aWNlX0NsYWltSW50ZXJmYWNlX1Jlc3BvbnNlUGFyYW1z
LnZhbGlkYXRlID0gZnVuY3Rpb24obWVzc2FnZVZhbGlkYXRvciwgb2Zmc2V0KSB7Ci0gICAgdmFy
IGVycjsKLSAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0SGVhZGVyKG9m
ZnNldCwgY29kZWMua1N0cnVjdEhlYWRlclNpemUpOwotICAgIGlmIChlcnIgIT09IHZhbGlkYXRv
ci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKLSAgICAgICAgcmV0dXJuIGVycjsKLQotICAgIHZhciBr
VmVyc2lvblNpemVzID0gWwotICAgICAge3ZlcnNpb246IDAsIG51bUJ5dGVzOiAxNn0KLSAgICBd
OwotICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RWZXJzaW9uKG9mZnNl
dCwga1ZlcnNpb25TaXplcyk7Ci0gICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25F
cnJvci5OT05FKQotICAgICAgICByZXR1cm4gZXJyOwotCi0KLSAgICByZXR1cm4gdmFsaWRhdG9y
LnZhbGlkYXRpb25FcnJvci5OT05FOwotICB9OwotCi0gIFVzYkRldmljZV9DbGFpbUludGVyZmFj
ZV9SZXNwb25zZVBhcmFtcy5lbmNvZGVkU2l6ZSA9IGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsg
ODsKLQotICBVc2JEZXZpY2VfQ2xhaW1JbnRlcmZhY2VfUmVzcG9uc2VQYXJhbXMuZGVjb2RlID0g
ZnVuY3Rpb24oZGVjb2RlcikgewotICAgIHZhciBwYWNrZWQ7Ci0gICAgdmFyIHZhbCA9IG5ldyBV
c2JEZXZpY2VfQ2xhaW1JbnRlcmZhY2VfUmVzcG9uc2VQYXJhbXMoKTsKLSAgICB2YXIgbnVtYmVy
T2ZCeXRlcyA9IGRlY29kZXIucmVhZFVpbnQzMigpOwotICAgIHZhciB2ZXJzaW9uID0gZGVjb2Rl
ci5yZWFkVWludDMyKCk7Ci0gICAgcGFja2VkID0gZGVjb2Rlci5yZWFkVWludDgoKTsKLSAgICB2
YWwuc3VjY2VzcyA9IChwYWNrZWQgPj4gMCkgJiAxID8gdHJ1ZSA6IGZhbHNlOwotICAgIGRlY29k
ZXIuc2tpcCgxKTsKLSAgICBkZWNvZGVyLnNraXAoMSk7Ci0gICAgZGVjb2Rlci5za2lwKDEpOwot
ICAgIGRlY29kZXIuc2tpcCgxKTsKLSAgICBkZWNvZGVyLnNraXAoMSk7Ci0gICAgZGVjb2Rlci5z
a2lwKDEpOwotICAgIGRlY29kZXIuc2tpcCgxKTsKLSAgICByZXR1cm4gdmFsOwotICB9OwotCi0g
IFVzYkRldmljZV9DbGFpbUludGVyZmFjZV9SZXNwb25zZVBhcmFtcy5lbmNvZGUgPSBmdW5jdGlv
bihlbmNvZGVyLCB2YWwpIHsKLSAgICB2YXIgcGFja2VkOwotICAgIGVuY29kZXIud3JpdGVVaW50
MzIoVXNiRGV2aWNlX0NsYWltSW50ZXJmYWNlX1Jlc3BvbnNlUGFyYW1zLmVuY29kZWRTaXplKTsK
LSAgICBlbmNvZGVyLndyaXRlVWludDMyKDApOwotICAgIHBhY2tlZCA9IDA7Ci0gICAgcGFja2Vk
IHw9ICh2YWwuc3VjY2VzcyAmIDEpIDw8IDAKLSAgICBlbmNvZGVyLndyaXRlVWludDgocGFja2Vk
KTsKLSAgICBlbmNvZGVyLnNraXAoMSk7Ci0gICAgZW5jb2Rlci5za2lwKDEpOwotICAgIGVuY29k
ZXIuc2tpcCgxKTsKLSAgICBlbmNvZGVyLnNraXAoMSk7Ci0gICAgZW5jb2Rlci5za2lwKDEpOwot
ICAgIGVuY29kZXIuc2tpcCgxKTsKLSAgICBlbmNvZGVyLnNraXAoMSk7Ci0gIH07Ci0gIGZ1bmN0
aW9uIFVzYkRldmljZV9SZWxlYXNlSW50ZXJmYWNlX1BhcmFtcyh2YWx1ZXMpIHsKLSAgICB0aGlz
LmluaXREZWZhdWx0c18oKTsKLSAgICB0aGlzLmluaXRGaWVsZHNfKHZhbHVlcyk7Ci0gIH0KLQot
Ci0gIFVzYkRldmljZV9SZWxlYXNlSW50ZXJmYWNlX1BhcmFtcy5wcm90b3R5cGUuaW5pdERlZmF1
bHRzXyA9IGZ1bmN0aW9uKCkgewotICAgIHRoaXMuaW50ZXJmYWNlTnVtYmVyID0gMDsKLSAgfTsK
LSAgVXNiRGV2aWNlX1JlbGVhc2VJbnRlcmZhY2VfUGFyYW1zLnByb3RvdHlwZS5pbml0RmllbGRz
XyA9IGZ1bmN0aW9uKGZpZWxkcykgewotICAgIGZvcih2YXIgZmllbGQgaW4gZmllbGRzKSB7Ci0g
ICAgICAgIGlmICh0aGlzLmhhc093blByb3BlcnR5KGZpZWxkKSkKLSAgICAgICAgICB0aGlzW2Zp
ZWxkXSA9IGZpZWxkc1tmaWVsZF07Ci0gICAgfQotICB9OwotCi0gIFVzYkRldmljZV9SZWxlYXNl
SW50ZXJmYWNlX1BhcmFtcy52YWxpZGF0ZSA9IGZ1bmN0aW9uKG1lc3NhZ2VWYWxpZGF0b3IsIG9m
ZnNldCkgewotICAgIHZhciBlcnI7Ci0gICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0
ZVN0cnVjdEhlYWRlcihvZmZzZXQsIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplKTsKLSAgICBpZiAo
ZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCi0gICAgICAgIHJldHVybiBl
cnI7Ci0KLSAgICB2YXIga1ZlcnNpb25TaXplcyA9IFsKLSAgICAgIHt2ZXJzaW9uOiAwLCBudW1C
eXRlczogMTZ9Ci0gICAgXTsKLSAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3Ry
dWN0VmVyc2lvbihvZmZzZXQsIGtWZXJzaW9uU2l6ZXMpOwotICAgIGlmIChlcnIgIT09IHZhbGlk
YXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKLSAgICAgICAgcmV0dXJuIGVycjsKLQotCi0gICAg
cmV0dXJuIHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORTsKLSAgfTsKLQotICBVc2JEZXZp
Y2VfUmVsZWFzZUludGVyZmFjZV9QYXJhbXMuZW5jb2RlZFNpemUgPSBjb2RlYy5rU3RydWN0SGVh
ZGVyU2l6ZSArIDg7Ci0KLSAgVXNiRGV2aWNlX1JlbGVhc2VJbnRlcmZhY2VfUGFyYW1zLmRlY29k
ZSA9IGZ1bmN0aW9uKGRlY29kZXIpIHsKLSAgICB2YXIgcGFja2VkOwotICAgIHZhciB2YWwgPSBu
ZXcgVXNiRGV2aWNlX1JlbGVhc2VJbnRlcmZhY2VfUGFyYW1zKCk7Ci0gICAgdmFyIG51bWJlck9m
Qnl0ZXMgPSBkZWNvZGVyLnJlYWRVaW50MzIoKTsKLSAgICB2YXIgdmVyc2lvbiA9IGRlY29kZXIu
cmVhZFVpbnQzMigpOwotICAgIHZhbC5pbnRlcmZhY2VOdW1iZXIgPSBkZWNvZGVyLmRlY29kZVN0
cnVjdChjb2RlYy5VaW50OCk7Ci0gICAgZGVjb2Rlci5za2lwKDEpOwotICAgIGRlY29kZXIuc2tp
cCgxKTsKLSAgICBkZWNvZGVyLnNraXAoMSk7Ci0gICAgZGVjb2Rlci5za2lwKDEpOwotICAgIGRl
Y29kZXIuc2tpcCgxKTsKLSAgICBkZWNvZGVyLnNraXAoMSk7Ci0gICAgZGVjb2Rlci5za2lwKDEp
OwotICAgIHJldHVybiB2YWw7Ci0gIH07Ci0KLSAgVXNiRGV2aWNlX1JlbGVhc2VJbnRlcmZhY2Vf
UGFyYW1zLmVuY29kZSA9IGZ1bmN0aW9uKGVuY29kZXIsIHZhbCkgewotICAgIHZhciBwYWNrZWQ7
Ci0gICAgZW5jb2Rlci53cml0ZVVpbnQzMihVc2JEZXZpY2VfUmVsZWFzZUludGVyZmFjZV9QYXJh
bXMuZW5jb2RlZFNpemUpOwotICAgIGVuY29kZXIud3JpdGVVaW50MzIoMCk7Ci0gICAgZW5jb2Rl
ci5lbmNvZGVTdHJ1Y3QoY29kZWMuVWludDgsIHZhbC5pbnRlcmZhY2VOdW1iZXIpOwotICAgIGVu
Y29kZXIuc2tpcCgxKTsKLSAgICBlbmNvZGVyLnNraXAoMSk7Ci0gICAgZW5jb2Rlci5za2lwKDEp
OwotICAgIGVuY29kZXIuc2tpcCgxKTsKLSAgICBlbmNvZGVyLnNraXAoMSk7Ci0gICAgZW5jb2Rl
ci5za2lwKDEpOwotICAgIGVuY29kZXIuc2tpcCgxKTsKLSAgfTsKLSAgZnVuY3Rpb24gVXNiRGV2
aWNlX1JlbGVhc2VJbnRlcmZhY2VfUmVzcG9uc2VQYXJhbXModmFsdWVzKSB7Ci0gICAgdGhpcy5p
bml0RGVmYXVsdHNfKCk7Ci0gICAgdGhpcy5pbml0RmllbGRzXyh2YWx1ZXMpOwotICB9Ci0KLQot
ICBVc2JEZXZpY2VfUmVsZWFzZUludGVyZmFjZV9SZXNwb25zZVBhcmFtcy5wcm90b3R5cGUuaW5p
dERlZmF1bHRzXyA9IGZ1bmN0aW9uKCkgewotICAgIHRoaXMuc3VjY2VzcyA9IGZhbHNlOwotICB9
OwotICBVc2JEZXZpY2VfUmVsZWFzZUludGVyZmFjZV9SZXNwb25zZVBhcmFtcy5wcm90b3R5cGUu
aW5pdEZpZWxkc18gPSBmdW5jdGlvbihmaWVsZHMpIHsKLSAgICBmb3IodmFyIGZpZWxkIGluIGZp
ZWxkcykgewotICAgICAgICBpZiAodGhpcy5oYXNPd25Qcm9wZXJ0eShmaWVsZCkpCi0gICAgICAg
ICAgdGhpc1tmaWVsZF0gPSBmaWVsZHNbZmllbGRdOwotICAgIH0KLSAgfTsKLQotICBVc2JEZXZp
Y2VfUmVsZWFzZUludGVyZmFjZV9SZXNwb25zZVBhcmFtcy52YWxpZGF0ZSA9IGZ1bmN0aW9uKG1l
c3NhZ2VWYWxpZGF0b3IsIG9mZnNldCkgewotICAgIHZhciBlcnI7Ci0gICAgZXJyID0gbWVzc2Fn
ZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdEhlYWRlcihvZmZzZXQsIGNvZGVjLmtTdHJ1Y3RIZWFk
ZXJTaXplKTsKLSAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUp
Ci0gICAgICAgIHJldHVybiBlcnI7Ci0KLSAgICB2YXIga1ZlcnNpb25TaXplcyA9IFsKLSAgICAg
IHt2ZXJzaW9uOiAwLCBudW1CeXRlczogMTZ9Ci0gICAgXTsKLSAgICBlcnIgPSBtZXNzYWdlVmFs
aWRhdG9yLnZhbGlkYXRlU3RydWN0VmVyc2lvbihvZmZzZXQsIGtWZXJzaW9uU2l6ZXMpOwotICAg
IGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKLSAgICAgICAgcmV0
dXJuIGVycjsKLQotCi0gICAgcmV0dXJuIHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORTsK
LSAgfTsKLQotICBVc2JEZXZpY2VfUmVsZWFzZUludGVyZmFjZV9SZXNwb25zZVBhcmFtcy5lbmNv
ZGVkU2l6ZSA9IGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgODsKLQotICBVc2JEZXZpY2VfUmVs
ZWFzZUludGVyZmFjZV9SZXNwb25zZVBhcmFtcy5kZWNvZGUgPSBmdW5jdGlvbihkZWNvZGVyKSB7
Ci0gICAgdmFyIHBhY2tlZDsKLSAgICB2YXIgdmFsID0gbmV3IFVzYkRldmljZV9SZWxlYXNlSW50
ZXJmYWNlX1Jlc3BvbnNlUGFyYW1zKCk7Ci0gICAgdmFyIG51bWJlck9mQnl0ZXMgPSBkZWNvZGVy
LnJlYWRVaW50MzIoKTsKLSAgICB2YXIgdmVyc2lvbiA9IGRlY29kZXIucmVhZFVpbnQzMigpOwot
ICAgIHBhY2tlZCA9IGRlY29kZXIucmVhZFVpbnQ4KCk7Ci0gICAgdmFsLnN1Y2Nlc3MgPSAocGFj
a2VkID4+IDApICYgMSA/IHRydWUgOiBmYWxzZTsKLSAgICBkZWNvZGVyLnNraXAoMSk7Ci0gICAg
ZGVjb2Rlci5za2lwKDEpOwotICAgIGRlY29kZXIuc2tpcCgxKTsKLSAgICBkZWNvZGVyLnNraXAo
MSk7Ci0gICAgZGVjb2Rlci5za2lwKDEpOwotICAgIGRlY29kZXIuc2tpcCgxKTsKLSAgICBkZWNv
ZGVyLnNraXAoMSk7Ci0gICAgcmV0dXJuIHZhbDsKLSAgfTsKLQotICBVc2JEZXZpY2VfUmVsZWFz
ZUludGVyZmFjZV9SZXNwb25zZVBhcmFtcy5lbmNvZGUgPSBmdW5jdGlvbihlbmNvZGVyLCB2YWwp
IHsKLSAgICB2YXIgcGFja2VkOwotICAgIGVuY29kZXIud3JpdGVVaW50MzIoVXNiRGV2aWNlX1Jl
bGVhc2VJbnRlcmZhY2VfUmVzcG9uc2VQYXJhbXMuZW5jb2RlZFNpemUpOwotICAgIGVuY29kZXIu
d3JpdGVVaW50MzIoMCk7Ci0gICAgcGFja2VkID0gMDsKLSAgICBwYWNrZWQgfD0gKHZhbC5zdWNj
ZXNzICYgMSkgPDwgMAotICAgIGVuY29kZXIud3JpdGVVaW50OChwYWNrZWQpOwotICAgIGVuY29k
ZXIuc2tpcCgxKTsKLSAgICBlbmNvZGVyLnNraXAoMSk7Ci0gICAgZW5jb2Rlci5za2lwKDEpOwot
ICAgIGVuY29kZXIuc2tpcCgxKTsKLSAgICBlbmNvZGVyLnNraXAoMSk7Ci0gICAgZW5jb2Rlci5z
a2lwKDEpOwotICAgIGVuY29kZXIuc2tpcCgxKTsKLSAgfTsKLSAgZnVuY3Rpb24gVXNiRGV2aWNl
X1NldEludGVyZmFjZUFsdGVybmF0ZVNldHRpbmdfUGFyYW1zKHZhbHVlcykgewotICAgIHRoaXMu
aW5pdERlZmF1bHRzXygpOwotICAgIHRoaXMuaW5pdEZpZWxkc18odmFsdWVzKTsKLSAgfQotCi0K
LSAgVXNiRGV2aWNlX1NldEludGVyZmFjZUFsdGVybmF0ZVNldHRpbmdfUGFyYW1zLnByb3RvdHlw
ZS5pbml0RGVmYXVsdHNfID0gZnVuY3Rpb24oKSB7Ci0gICAgdGhpcy5pbnRlcmZhY2VOdW1iZXIg
PSAwOwotICAgIHRoaXMuYWx0ZXJuYXRlU2V0dGluZyA9IDA7Ci0gIH07Ci0gIFVzYkRldmljZV9T
ZXRJbnRlcmZhY2VBbHRlcm5hdGVTZXR0aW5nX1BhcmFtcy5wcm90b3R5cGUuaW5pdEZpZWxkc18g
PSBmdW5jdGlvbihmaWVsZHMpIHsKLSAgICBmb3IodmFyIGZpZWxkIGluIGZpZWxkcykgewotICAg
ICAgICBpZiAodGhpcy5oYXNPd25Qcm9wZXJ0eShmaWVsZCkpCi0gICAgICAgICAgdGhpc1tmaWVs
ZF0gPSBmaWVsZHNbZmllbGRdOwotICAgIH0KLSAgfTsKLQotICBVc2JEZXZpY2VfU2V0SW50ZXJm
YWNlQWx0ZXJuYXRlU2V0dGluZ19QYXJhbXMudmFsaWRhdGUgPSBmdW5jdGlvbihtZXNzYWdlVmFs
aWRhdG9yLCBvZmZzZXQpIHsKLSAgICB2YXIgZXJyOwotICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0
b3IudmFsaWRhdGVTdHJ1Y3RIZWFkZXIob2Zmc2V0LCBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSk7
Ci0gICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQotICAgICAg
ICByZXR1cm4gZXJyOwotCi0gICAgdmFyIGtWZXJzaW9uU2l6ZXMgPSBbCi0gICAgICB7dmVyc2lv
bjogMCwgbnVtQnl0ZXM6IDE2fQotICAgIF07Ci0gICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52
YWxpZGF0ZVN0cnVjdFZlcnNpb24ob2Zmc2V0LCBrVmVyc2lvblNpemVzKTsKLSAgICBpZiAoZXJy
ICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCi0gICAgICAgIHJldHVybiBlcnI7
Ci0KLQotCi0gICAgcmV0dXJuIHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORTsKLSAgfTsK
LQotICBVc2JEZXZpY2VfU2V0SW50ZXJmYWNlQWx0ZXJuYXRlU2V0dGluZ19QYXJhbXMuZW5jb2Rl
ZFNpemUgPSBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDg7Ci0KLSAgVXNiRGV2aWNlX1NldElu
dGVyZmFjZUFsdGVybmF0ZVNldHRpbmdfUGFyYW1zLmRlY29kZSA9IGZ1bmN0aW9uKGRlY29kZXIp
IHsKLSAgICB2YXIgcGFja2VkOwotICAgIHZhciB2YWwgPSBuZXcgVXNiRGV2aWNlX1NldEludGVy
ZmFjZUFsdGVybmF0ZVNldHRpbmdfUGFyYW1zKCk7Ci0gICAgdmFyIG51bWJlck9mQnl0ZXMgPSBk
ZWNvZGVyLnJlYWRVaW50MzIoKTsKLSAgICB2YXIgdmVyc2lvbiA9IGRlY29kZXIucmVhZFVpbnQz
MigpOwotICAgIHZhbC5pbnRlcmZhY2VOdW1iZXIgPSBkZWNvZGVyLmRlY29kZVN0cnVjdChjb2Rl
Yy5VaW50OCk7Ci0gICAgdmFsLmFsdGVybmF0ZVNldHRpbmcgPSBkZWNvZGVyLmRlY29kZVN0cnVj
dChjb2RlYy5VaW50OCk7Ci0gICAgZGVjb2Rlci5za2lwKDEpOwotICAgIGRlY29kZXIuc2tpcCgx
KTsKLSAgICBkZWNvZGVyLnNraXAoMSk7Ci0gICAgZGVjb2Rlci5za2lwKDEpOwotICAgIGRlY29k
ZXIuc2tpcCgxKTsKLSAgICBkZWNvZGVyLnNraXAoMSk7Ci0gICAgcmV0dXJuIHZhbDsKLSAgfTsK
LQotICBVc2JEZXZpY2VfU2V0SW50ZXJmYWNlQWx0ZXJuYXRlU2V0dGluZ19QYXJhbXMuZW5jb2Rl
ID0gZnVuY3Rpb24oZW5jb2RlciwgdmFsKSB7Ci0gICAgdmFyIHBhY2tlZDsKLSAgICBlbmNvZGVy
LndyaXRlVWludDMyKFVzYkRldmljZV9TZXRJbnRlcmZhY2VBbHRlcm5hdGVTZXR0aW5nX1BhcmFt
cy5lbmNvZGVkU2l6ZSk7Ci0gICAgZW5jb2Rlci53cml0ZVVpbnQzMigwKTsKLSAgICBlbmNvZGVy
LmVuY29kZVN0cnVjdChjb2RlYy5VaW50OCwgdmFsLmludGVyZmFjZU51bWJlcik7Ci0gICAgZW5j
b2Rlci5lbmNvZGVTdHJ1Y3QoY29kZWMuVWludDgsIHZhbC5hbHRlcm5hdGVTZXR0aW5nKTsKLSAg
ICBlbmNvZGVyLnNraXAoMSk7Ci0gICAgZW5jb2Rlci5za2lwKDEpOwotICAgIGVuY29kZXIuc2tp
cCgxKTsKLSAgICBlbmNvZGVyLnNraXAoMSk7Ci0gICAgZW5jb2Rlci5za2lwKDEpOwotICAgIGVu
Y29kZXIuc2tpcCgxKTsKLSAgfTsKLSAgZnVuY3Rpb24gVXNiRGV2aWNlX1NldEludGVyZmFjZUFs
dGVybmF0ZVNldHRpbmdfUmVzcG9uc2VQYXJhbXModmFsdWVzKSB7Ci0gICAgdGhpcy5pbml0RGVm
YXVsdHNfKCk7Ci0gICAgdGhpcy5pbml0RmllbGRzXyh2YWx1ZXMpOwotICB9Ci0KLQotICBVc2JE
ZXZpY2VfU2V0SW50ZXJmYWNlQWx0ZXJuYXRlU2V0dGluZ19SZXNwb25zZVBhcmFtcy5wcm90b3R5
cGUuaW5pdERlZmF1bHRzXyA9IGZ1bmN0aW9uKCkgewotICAgIHRoaXMuc3VjY2VzcyA9IGZhbHNl
OwotICB9OwotICBVc2JEZXZpY2VfU2V0SW50ZXJmYWNlQWx0ZXJuYXRlU2V0dGluZ19SZXNwb25z
ZVBhcmFtcy5wcm90b3R5cGUuaW5pdEZpZWxkc18gPSBmdW5jdGlvbihmaWVsZHMpIHsKLSAgICBm
b3IodmFyIGZpZWxkIGluIGZpZWxkcykgewotICAgICAgICBpZiAodGhpcy5oYXNPd25Qcm9wZXJ0
eShmaWVsZCkpCi0gICAgICAgICAgdGhpc1tmaWVsZF0gPSBmaWVsZHNbZmllbGRdOwotICAgIH0K
LSAgfTsKLQotICBVc2JEZXZpY2VfU2V0SW50ZXJmYWNlQWx0ZXJuYXRlU2V0dGluZ19SZXNwb25z
ZVBhcmFtcy52YWxpZGF0ZSA9IGZ1bmN0aW9uKG1lc3NhZ2VWYWxpZGF0b3IsIG9mZnNldCkgewot
ICAgIHZhciBlcnI7Ci0gICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdEhl
YWRlcihvZmZzZXQsIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplKTsKLSAgICBpZiAoZXJyICE9PSB2
YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCi0gICAgICAgIHJldHVybiBlcnI7Ci0KLSAg
ICB2YXIga1ZlcnNpb25TaXplcyA9IFsKLSAgICAgIHt2ZXJzaW9uOiAwLCBudW1CeXRlczogMTZ9
Ci0gICAgXTsKLSAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0VmVyc2lv
bihvZmZzZXQsIGtWZXJzaW9uU2l6ZXMpOwotICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxp
ZGF0aW9uRXJyb3IuTk9ORSkKLSAgICAgICAgcmV0dXJuIGVycjsKLQotCi0gICAgcmV0dXJuIHZh
bGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORTsKLSAgfTsKLQotICBVc2JEZXZpY2VfU2V0SW50
ZXJmYWNlQWx0ZXJuYXRlU2V0dGluZ19SZXNwb25zZVBhcmFtcy5lbmNvZGVkU2l6ZSA9IGNvZGVj
LmtTdHJ1Y3RIZWFkZXJTaXplICsgODsKLQotICBVc2JEZXZpY2VfU2V0SW50ZXJmYWNlQWx0ZXJu
YXRlU2V0dGluZ19SZXNwb25zZVBhcmFtcy5kZWNvZGUgPSBmdW5jdGlvbihkZWNvZGVyKSB7Ci0g
ICAgdmFyIHBhY2tlZDsKLSAgICB2YXIgdmFsID0gbmV3IFVzYkRldmljZV9TZXRJbnRlcmZhY2VB
bHRlcm5hdGVTZXR0aW5nX1Jlc3BvbnNlUGFyYW1zKCk7Ci0gICAgdmFyIG51bWJlck9mQnl0ZXMg
PSBkZWNvZGVyLnJlYWRVaW50MzIoKTsKLSAgICB2YXIgdmVyc2lvbiA9IGRlY29kZXIucmVhZFVp
bnQzMigpOwotICAgIHBhY2tlZCA9IGRlY29kZXIucmVhZFVpbnQ4KCk7Ci0gICAgdmFsLnN1Y2Nl
c3MgPSAocGFja2VkID4+IDApICYgMSA/IHRydWUgOiBmYWxzZTsKLSAgICBkZWNvZGVyLnNraXAo
MSk7Ci0gICAgZGVjb2Rlci5za2lwKDEpOwotICAgIGRlY29kZXIuc2tpcCgxKTsKLSAgICBkZWNv
ZGVyLnNraXAoMSk7Ci0gICAgZGVjb2Rlci5za2lwKDEpOwotICAgIGRlY29kZXIuc2tpcCgxKTsK
LSAgICBkZWNvZGVyLnNraXAoMSk7Ci0gICAgcmV0dXJuIHZhbDsKLSAgfTsKLQotICBVc2JEZXZp
Y2VfU2V0SW50ZXJmYWNlQWx0ZXJuYXRlU2V0dGluZ19SZXNwb25zZVBhcmFtcy5lbmNvZGUgPSBm
dW5jdGlvbihlbmNvZGVyLCB2YWwpIHsKLSAgICB2YXIgcGFja2VkOwotICAgIGVuY29kZXIud3Jp
dGVVaW50MzIoVXNiRGV2aWNlX1NldEludGVyZmFjZUFsdGVybmF0ZVNldHRpbmdfUmVzcG9uc2VQ
YXJhbXMuZW5jb2RlZFNpemUpOwotICAgIGVuY29kZXIud3JpdGVVaW50MzIoMCk7Ci0gICAgcGFj
a2VkID0gMDsKLSAgICBwYWNrZWQgfD0gKHZhbC5zdWNjZXNzICYgMSkgPDwgMAotICAgIGVuY29k
ZXIud3JpdGVVaW50OChwYWNrZWQpOwotICAgIGVuY29kZXIuc2tpcCgxKTsKLSAgICBlbmNvZGVy
LnNraXAoMSk7Ci0gICAgZW5jb2Rlci5za2lwKDEpOwotICAgIGVuY29kZXIuc2tpcCgxKTsKLSAg
ICBlbmNvZGVyLnNraXAoMSk7Ci0gICAgZW5jb2Rlci5za2lwKDEpOwotICAgIGVuY29kZXIuc2tp
cCgxKTsKLSAgfTsKLSAgZnVuY3Rpb24gVXNiRGV2aWNlX1Jlc2V0X1BhcmFtcyh2YWx1ZXMpIHsK
LSAgICB0aGlzLmluaXREZWZhdWx0c18oKTsKLSAgICB0aGlzLmluaXRGaWVsZHNfKHZhbHVlcyk7
Ci0gIH0KLQotCi0gIFVzYkRldmljZV9SZXNldF9QYXJhbXMucHJvdG90eXBlLmluaXREZWZhdWx0
c18gPSBmdW5jdGlvbigpIHsKLSAgfTsKLSAgVXNiRGV2aWNlX1Jlc2V0X1BhcmFtcy5wcm90b3R5
cGUuaW5pdEZpZWxkc18gPSBmdW5jdGlvbihmaWVsZHMpIHsKLSAgICBmb3IodmFyIGZpZWxkIGlu
IGZpZWxkcykgewotICAgICAgICBpZiAodGhpcy5oYXNPd25Qcm9wZXJ0eShmaWVsZCkpCi0gICAg
ICAgICAgdGhpc1tmaWVsZF0gPSBmaWVsZHNbZmllbGRdOwotICAgIH0KLSAgfTsKLQotICBVc2JE
ZXZpY2VfUmVzZXRfUGFyYW1zLnZhbGlkYXRlID0gZnVuY3Rpb24obWVzc2FnZVZhbGlkYXRvciwg
b2Zmc2V0KSB7Ci0gICAgdmFyIGVycjsKLSAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlk
YXRlU3RydWN0SGVhZGVyKG9mZnNldCwgY29kZWMua1N0cnVjdEhlYWRlclNpemUpOwotICAgIGlm
IChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKLSAgICAgICAgcmV0dXJu
IGVycjsKLQotICAgIHZhciBrVmVyc2lvblNpemVzID0gWwotICAgICAge3ZlcnNpb246IDAsIG51
bUJ5dGVzOiA4fQotICAgIF07Ci0gICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0
cnVjdFZlcnNpb24ob2Zmc2V0LCBrVmVyc2lvblNpemVzKTsKLSAgICBpZiAoZXJyICE9PSB2YWxp
ZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCi0gICAgICAgIHJldHVybiBlcnI7Ci0KLSAgICBy
ZXR1cm4gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FOwotICB9OwotCi0gIFVzYkRldmlj
ZV9SZXNldF9QYXJhbXMuZW5jb2RlZFNpemUgPSBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDA7
Ci0KLSAgVXNiRGV2aWNlX1Jlc2V0X1BhcmFtcy5kZWNvZGUgPSBmdW5jdGlvbihkZWNvZGVyKSB7
Ci0gICAgdmFyIHBhY2tlZDsKLSAgICB2YXIgdmFsID0gbmV3IFVzYkRldmljZV9SZXNldF9QYXJh
bXMoKTsKLSAgICB2YXIgbnVtYmVyT2ZCeXRlcyA9IGRlY29kZXIucmVhZFVpbnQzMigpOwotICAg
IHZhciB2ZXJzaW9uID0gZGVjb2Rlci5yZWFkVWludDMyKCk7Ci0gICAgcmV0dXJuIHZhbDsKLSAg
fTsKLQotICBVc2JEZXZpY2VfUmVzZXRfUGFyYW1zLmVuY29kZSA9IGZ1bmN0aW9uKGVuY29kZXIs
IHZhbCkgewotICAgIHZhciBwYWNrZWQ7Ci0gICAgZW5jb2Rlci53cml0ZVVpbnQzMihVc2JEZXZp
Y2VfUmVzZXRfUGFyYW1zLmVuY29kZWRTaXplKTsKLSAgICBlbmNvZGVyLndyaXRlVWludDMyKDAp
OwotICB9OwotICBmdW5jdGlvbiBVc2JEZXZpY2VfUmVzZXRfUmVzcG9uc2VQYXJhbXModmFsdWVz
KSB7Ci0gICAgdGhpcy5pbml0RGVmYXVsdHNfKCk7Ci0gICAgdGhpcy5pbml0RmllbGRzXyh2YWx1
ZXMpOwotICB9Ci0KLQotICBVc2JEZXZpY2VfUmVzZXRfUmVzcG9uc2VQYXJhbXMucHJvdG90eXBl
LmluaXREZWZhdWx0c18gPSBmdW5jdGlvbigpIHsKLSAgICB0aGlzLnN1Y2Nlc3MgPSBmYWxzZTsK
LSAgfTsKLSAgVXNiRGV2aWNlX1Jlc2V0X1Jlc3BvbnNlUGFyYW1zLnByb3RvdHlwZS5pbml0Rmll
bGRzXyA9IGZ1bmN0aW9uKGZpZWxkcykgewotICAgIGZvcih2YXIgZmllbGQgaW4gZmllbGRzKSB7
Ci0gICAgICAgIGlmICh0aGlzLmhhc093blByb3BlcnR5KGZpZWxkKSkKLSAgICAgICAgICB0aGlz
W2ZpZWxkXSA9IGZpZWxkc1tmaWVsZF07Ci0gICAgfQotICB9OwotCi0gIFVzYkRldmljZV9SZXNl
dF9SZXNwb25zZVBhcmFtcy52YWxpZGF0ZSA9IGZ1bmN0aW9uKG1lc3NhZ2VWYWxpZGF0b3IsIG9m
ZnNldCkgewotICAgIHZhciBlcnI7Ci0gICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0
ZVN0cnVjdEhlYWRlcihvZmZzZXQsIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplKTsKLSAgICBpZiAo
ZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCi0gICAgICAgIHJldHVybiBl
cnI7Ci0KLSAgICB2YXIga1ZlcnNpb25TaXplcyA9IFsKLSAgICAgIHt2ZXJzaW9uOiAwLCBudW1C
eXRlczogMTZ9Ci0gICAgXTsKLSAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3Ry
dWN0VmVyc2lvbihvZmZzZXQsIGtWZXJzaW9uU2l6ZXMpOwotICAgIGlmIChlcnIgIT09IHZhbGlk
YXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKLSAgICAgICAgcmV0dXJuIGVycjsKLQotCi0gICAg
cmV0dXJuIHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORTsKLSAgfTsKLQotICBVc2JEZXZp
Y2VfUmVzZXRfUmVzcG9uc2VQYXJhbXMuZW5jb2RlZFNpemUgPSBjb2RlYy5rU3RydWN0SGVhZGVy
U2l6ZSArIDg7Ci0KLSAgVXNiRGV2aWNlX1Jlc2V0X1Jlc3BvbnNlUGFyYW1zLmRlY29kZSA9IGZ1
bmN0aW9uKGRlY29kZXIpIHsKLSAgICB2YXIgcGFja2VkOwotICAgIHZhciB2YWwgPSBuZXcgVXNi
RGV2aWNlX1Jlc2V0X1Jlc3BvbnNlUGFyYW1zKCk7Ci0gICAgdmFyIG51bWJlck9mQnl0ZXMgPSBk
ZWNvZGVyLnJlYWRVaW50MzIoKTsKLSAgICB2YXIgdmVyc2lvbiA9IGRlY29kZXIucmVhZFVpbnQz
MigpOwotICAgIHBhY2tlZCA9IGRlY29kZXIucmVhZFVpbnQ4KCk7Ci0gICAgdmFsLnN1Y2Nlc3Mg
PSAocGFja2VkID4+IDApICYgMSA/IHRydWUgOiBmYWxzZTsKLSAgICBkZWNvZGVyLnNraXAoMSk7
Ci0gICAgZGVjb2Rlci5za2lwKDEpOwotICAgIGRlY29kZXIuc2tpcCgxKTsKLSAgICBkZWNvZGVy
LnNraXAoMSk7Ci0gICAgZGVjb2Rlci5za2lwKDEpOwotICAgIGRlY29kZXIuc2tpcCgxKTsKLSAg
ICBkZWNvZGVyLnNraXAoMSk7Ci0gICAgcmV0dXJuIHZhbDsKLSAgfTsKLQotICBVc2JEZXZpY2Vf
UmVzZXRfUmVzcG9uc2VQYXJhbXMuZW5jb2RlID0gZnVuY3Rpb24oZW5jb2RlciwgdmFsKSB7Ci0g
ICAgdmFyIHBhY2tlZDsKLSAgICBlbmNvZGVyLndyaXRlVWludDMyKFVzYkRldmljZV9SZXNldF9S
ZXNwb25zZVBhcmFtcy5lbmNvZGVkU2l6ZSk7Ci0gICAgZW5jb2Rlci53cml0ZVVpbnQzMigwKTsK
LSAgICBwYWNrZWQgPSAwOwotICAgIHBhY2tlZCB8PSAodmFsLnN1Y2Nlc3MgJiAxKSA8PCAwCi0g
ICAgZW5jb2Rlci53cml0ZVVpbnQ4KHBhY2tlZCk7Ci0gICAgZW5jb2Rlci5za2lwKDEpOwotICAg
IGVuY29kZXIuc2tpcCgxKTsKLSAgICBlbmNvZGVyLnNraXAoMSk7Ci0gICAgZW5jb2Rlci5za2lw
KDEpOwotICAgIGVuY29kZXIuc2tpcCgxKTsKLSAgICBlbmNvZGVyLnNraXAoMSk7Ci0gICAgZW5j
b2Rlci5za2lwKDEpOwotICB9OwotICBmdW5jdGlvbiBVc2JEZXZpY2VfQ2xlYXJIYWx0X1BhcmFt
cyh2YWx1ZXMpIHsKLSAgICB0aGlzLmluaXREZWZhdWx0c18oKTsKLSAgICB0aGlzLmluaXRGaWVs
ZHNfKHZhbHVlcyk7Ci0gIH0KLQotCi0gIFVzYkRldmljZV9DbGVhckhhbHRfUGFyYW1zLnByb3Rv
dHlwZS5pbml0RGVmYXVsdHNfID0gZnVuY3Rpb24oKSB7Ci0gICAgdGhpcy5lbmRwb2ludCA9IDA7
Ci0gIH07Ci0gIFVzYkRldmljZV9DbGVhckhhbHRfUGFyYW1zLnByb3RvdHlwZS5pbml0RmllbGRz
XyA9IGZ1bmN0aW9uKGZpZWxkcykgewotICAgIGZvcih2YXIgZmllbGQgaW4gZmllbGRzKSB7Ci0g
ICAgICAgIGlmICh0aGlzLmhhc093blByb3BlcnR5KGZpZWxkKSkKLSAgICAgICAgICB0aGlzW2Zp
ZWxkXSA9IGZpZWxkc1tmaWVsZF07Ci0gICAgfQotICB9OwotCi0gIFVzYkRldmljZV9DbGVhckhh
bHRfUGFyYW1zLnZhbGlkYXRlID0gZnVuY3Rpb24obWVzc2FnZVZhbGlkYXRvciwgb2Zmc2V0KSB7
Ci0gICAgdmFyIGVycjsKLSAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0
SGVhZGVyKG9mZnNldCwgY29kZWMua1N0cnVjdEhlYWRlclNpemUpOwotICAgIGlmIChlcnIgIT09
IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKLSAgICAgICAgcmV0dXJuIGVycjsKLQot
ICAgIHZhciBrVmVyc2lvblNpemVzID0gWwotICAgICAge3ZlcnNpb246IDAsIG51bUJ5dGVzOiAx
Nn0KLSAgICBdOwotICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RWZXJz
aW9uKG9mZnNldCwga1ZlcnNpb25TaXplcyk7Ci0gICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZh
bGlkYXRpb25FcnJvci5OT05FKQotICAgICAgICByZXR1cm4gZXJyOwotCi0KLSAgICByZXR1cm4g
dmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FOwotICB9OwotCi0gIFVzYkRldmljZV9DbGVh
ckhhbHRfUGFyYW1zLmVuY29kZWRTaXplID0gY29kZWMua1N0cnVjdEhlYWRlclNpemUgKyA4Owot
Ci0gIFVzYkRldmljZV9DbGVhckhhbHRfUGFyYW1zLmRlY29kZSA9IGZ1bmN0aW9uKGRlY29kZXIp
IHsKLSAgICB2YXIgcGFja2VkOwotICAgIHZhciB2YWwgPSBuZXcgVXNiRGV2aWNlX0NsZWFySGFs
dF9QYXJhbXMoKTsKLSAgICB2YXIgbnVtYmVyT2ZCeXRlcyA9IGRlY29kZXIucmVhZFVpbnQzMigp
OwotICAgIHZhciB2ZXJzaW9uID0gZGVjb2Rlci5yZWFkVWludDMyKCk7Ci0gICAgdmFsLmVuZHBv
aW50ID0gZGVjb2Rlci5kZWNvZGVTdHJ1Y3QoY29kZWMuVWludDgpOwotICAgIGRlY29kZXIuc2tp
cCgxKTsKLSAgICBkZWNvZGVyLnNraXAoMSk7Ci0gICAgZGVjb2Rlci5za2lwKDEpOwotICAgIGRl
Y29kZXIuc2tpcCgxKTsKLSAgICBkZWNvZGVyLnNraXAoMSk7Ci0gICAgZGVjb2Rlci5za2lwKDEp
OwotICAgIGRlY29kZXIuc2tpcCgxKTsKLSAgICByZXR1cm4gdmFsOwotICB9OwotCi0gIFVzYkRl
dmljZV9DbGVhckhhbHRfUGFyYW1zLmVuY29kZSA9IGZ1bmN0aW9uKGVuY29kZXIsIHZhbCkgewot
ICAgIHZhciBwYWNrZWQ7Ci0gICAgZW5jb2Rlci53cml0ZVVpbnQzMihVc2JEZXZpY2VfQ2xlYXJI
YWx0X1BhcmFtcy5lbmNvZGVkU2l6ZSk7Ci0gICAgZW5jb2Rlci53cml0ZVVpbnQzMigwKTsKLSAg
ICBlbmNvZGVyLmVuY29kZVN0cnVjdChjb2RlYy5VaW50OCwgdmFsLmVuZHBvaW50KTsKLSAgICBl
bmNvZGVyLnNraXAoMSk7Ci0gICAgZW5jb2Rlci5za2lwKDEpOwotICAgIGVuY29kZXIuc2tpcCgx
KTsKLSAgICBlbmNvZGVyLnNraXAoMSk7Ci0gICAgZW5jb2Rlci5za2lwKDEpOwotICAgIGVuY29k
ZXIuc2tpcCgxKTsKLSAgICBlbmNvZGVyLnNraXAoMSk7Ci0gIH07Ci0gIGZ1bmN0aW9uIFVzYkRl
dmljZV9DbGVhckhhbHRfUmVzcG9uc2VQYXJhbXModmFsdWVzKSB7Ci0gICAgdGhpcy5pbml0RGVm
YXVsdHNfKCk7Ci0gICAgdGhpcy5pbml0RmllbGRzXyh2YWx1ZXMpOwotICB9Ci0KLQotICBVc2JE
ZXZpY2VfQ2xlYXJIYWx0X1Jlc3BvbnNlUGFyYW1zLnByb3RvdHlwZS5pbml0RGVmYXVsdHNfID0g
ZnVuY3Rpb24oKSB7Ci0gICAgdGhpcy5zdWNjZXNzID0gZmFsc2U7Ci0gIH07Ci0gIFVzYkRldmlj
ZV9DbGVhckhhbHRfUmVzcG9uc2VQYXJhbXMucHJvdG90eXBlLmluaXRGaWVsZHNfID0gZnVuY3Rp
b24oZmllbGRzKSB7Ci0gICAgZm9yKHZhciBmaWVsZCBpbiBmaWVsZHMpIHsKLSAgICAgICAgaWYg
KHRoaXMuaGFzT3duUHJvcGVydHkoZmllbGQpKQotICAgICAgICAgIHRoaXNbZmllbGRdID0gZmll
bGRzW2ZpZWxkXTsKLSAgICB9Ci0gIH07Ci0KLSAgVXNiRGV2aWNlX0NsZWFySGFsdF9SZXNwb25z
ZVBhcmFtcy52YWxpZGF0ZSA9IGZ1bmN0aW9uKG1lc3NhZ2VWYWxpZGF0b3IsIG9mZnNldCkgewot
ICAgIHZhciBlcnI7Ci0gICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdEhl
YWRlcihvZmZzZXQsIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplKTsKLSAgICBpZiAoZXJyICE9PSB2
YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCi0gICAgICAgIHJldHVybiBlcnI7Ci0KLSAg
ICB2YXIga1ZlcnNpb25TaXplcyA9IFsKLSAgICAgIHt2ZXJzaW9uOiAwLCBudW1CeXRlczogMTZ9
Ci0gICAgXTsKLSAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0VmVyc2lv
bihvZmZzZXQsIGtWZXJzaW9uU2l6ZXMpOwotICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxp
ZGF0aW9uRXJyb3IuTk9ORSkKLSAgICAgICAgcmV0dXJuIGVycjsKLQotCi0gICAgcmV0dXJuIHZh
bGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORTsKLSAgfTsKLQotICBVc2JEZXZpY2VfQ2xlYXJI
YWx0X1Jlc3BvbnNlUGFyYW1zLmVuY29kZWRTaXplID0gY29kZWMua1N0cnVjdEhlYWRlclNpemUg
KyA4OwotCi0gIFVzYkRldmljZV9DbGVhckhhbHRfUmVzcG9uc2VQYXJhbXMuZGVjb2RlID0gZnVu
Y3Rpb24oZGVjb2RlcikgewotICAgIHZhciBwYWNrZWQ7Ci0gICAgdmFyIHZhbCA9IG5ldyBVc2JE
ZXZpY2VfQ2xlYXJIYWx0X1Jlc3BvbnNlUGFyYW1zKCk7Ci0gICAgdmFyIG51bWJlck9mQnl0ZXMg
PSBkZWNvZGVyLnJlYWRVaW50MzIoKTsKLSAgICB2YXIgdmVyc2lvbiA9IGRlY29kZXIucmVhZFVp
bnQzMigpOwotICAgIHBhY2tlZCA9IGRlY29kZXIucmVhZFVpbnQ4KCk7Ci0gICAgdmFsLnN1Y2Nl
c3MgPSAocGFja2VkID4+IDApICYgMSA/IHRydWUgOiBmYWxzZTsKLSAgICBkZWNvZGVyLnNraXAo
MSk7Ci0gICAgZGVjb2Rlci5za2lwKDEpOwotICAgIGRlY29kZXIuc2tpcCgxKTsKLSAgICBkZWNv
ZGVyLnNraXAoMSk7Ci0gICAgZGVjb2Rlci5za2lwKDEpOwotICAgIGRlY29kZXIuc2tpcCgxKTsK
LSAgICBkZWNvZGVyLnNraXAoMSk7Ci0gICAgcmV0dXJuIHZhbDsKLSAgfTsKLQotICBVc2JEZXZp
Y2VfQ2xlYXJIYWx0X1Jlc3BvbnNlUGFyYW1zLmVuY29kZSA9IGZ1bmN0aW9uKGVuY29kZXIsIHZh
bCkgewotICAgIHZhciBwYWNrZWQ7Ci0gICAgZW5jb2Rlci53cml0ZVVpbnQzMihVc2JEZXZpY2Vf
Q2xlYXJIYWx0X1Jlc3BvbnNlUGFyYW1zLmVuY29kZWRTaXplKTsKLSAgICBlbmNvZGVyLndyaXRl
VWludDMyKDApOwotICAgIHBhY2tlZCA9IDA7Ci0gICAgcGFja2VkIHw9ICh2YWwuc3VjY2VzcyAm
IDEpIDw8IDAKLSAgICBlbmNvZGVyLndyaXRlVWludDgocGFja2VkKTsKLSAgICBlbmNvZGVyLnNr
aXAoMSk7Ci0gICAgZW5jb2Rlci5za2lwKDEpOwotICAgIGVuY29kZXIuc2tpcCgxKTsKLSAgICBl
bmNvZGVyLnNraXAoMSk7Ci0gICAgZW5jb2Rlci5za2lwKDEpOwotICAgIGVuY29kZXIuc2tpcCgx
KTsKLSAgICBlbmNvZGVyLnNraXAoMSk7Ci0gIH07Ci0gIGZ1bmN0aW9uIFVzYkRldmljZV9Db250
cm9sVHJhbnNmZXJJbl9QYXJhbXModmFsdWVzKSB7Ci0gICAgdGhpcy5pbml0RGVmYXVsdHNfKCk7
Ci0gICAgdGhpcy5pbml0RmllbGRzXyh2YWx1ZXMpOwotICB9Ci0KLQotICBVc2JEZXZpY2VfQ29u
dHJvbFRyYW5zZmVySW5fUGFyYW1zLnByb3RvdHlwZS5pbml0RGVmYXVsdHNfID0gZnVuY3Rpb24o
KSB7Ci0gICAgdGhpcy5wYXJhbXMgPSBudWxsOwotICAgIHRoaXMubGVuZ3RoID0gMDsKLSAgICB0
aGlzLnRpbWVvdXQgPSAwOwotICB9OwotICBVc2JEZXZpY2VfQ29udHJvbFRyYW5zZmVySW5fUGFy
YW1zLnByb3RvdHlwZS5pbml0RmllbGRzXyA9IGZ1bmN0aW9uKGZpZWxkcykgewotICAgIGZvcih2
YXIgZmllbGQgaW4gZmllbGRzKSB7Ci0gICAgICAgIGlmICh0aGlzLmhhc093blByb3BlcnR5KGZp
ZWxkKSkKLSAgICAgICAgICB0aGlzW2ZpZWxkXSA9IGZpZWxkc1tmaWVsZF07Ci0gICAgfQotICB9
OwotCi0gIFVzYkRldmljZV9Db250cm9sVHJhbnNmZXJJbl9QYXJhbXMudmFsaWRhdGUgPSBmdW5j
dGlvbihtZXNzYWdlVmFsaWRhdG9yLCBvZmZzZXQpIHsKLSAgICB2YXIgZXJyOwotICAgIGVyciA9
IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RIZWFkZXIob2Zmc2V0LCBjb2RlYy5rU3Ry
dWN0SGVhZGVyU2l6ZSk7Ci0gICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJv
ci5OT05FKQotICAgICAgICByZXR1cm4gZXJyOwotCi0gICAgdmFyIGtWZXJzaW9uU2l6ZXMgPSBb
Ci0gICAgICB7dmVyc2lvbjogMCwgbnVtQnl0ZXM6IDI0fQotICAgIF07Ci0gICAgZXJyID0gbWVz
c2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdFZlcnNpb24ob2Zmc2V0LCBrVmVyc2lvblNpemVz
KTsKLSAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCi0gICAg
ICAgIHJldHVybiBlcnI7Ci0KLQotICAgIC8vIHZhbGlkYXRlIFVzYkRldmljZV9Db250cm9sVHJh
bnNmZXJJbl9QYXJhbXMucGFyYW1zCi0gICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0
ZVN0cnVjdFBvaW50ZXIob2Zmc2V0ICsgY29kZWMua1N0cnVjdEhlYWRlclNpemUgKyAwLCBVc2JD
b250cm9sVHJhbnNmZXJQYXJhbXMsIGZhbHNlKTsKLSAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3Iu
dmFsaWRhdGlvbkVycm9yLk5PTkUpCi0gICAgICAgIHJldHVybiBlcnI7Ci0KLQotCi0gICAgcmV0
dXJuIHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORTsKLSAgfTsKLQotICBVc2JEZXZpY2Vf
Q29udHJvbFRyYW5zZmVySW5fUGFyYW1zLmVuY29kZWRTaXplID0gY29kZWMua1N0cnVjdEhlYWRl
clNpemUgKyAxNjsKLQotICBVc2JEZXZpY2VfQ29udHJvbFRyYW5zZmVySW5fUGFyYW1zLmRlY29k
ZSA9IGZ1bmN0aW9uKGRlY29kZXIpIHsKLSAgICB2YXIgcGFja2VkOwotICAgIHZhciB2YWwgPSBu
ZXcgVXNiRGV2aWNlX0NvbnRyb2xUcmFuc2ZlckluX1BhcmFtcygpOwotICAgIHZhciBudW1iZXJP
ZkJ5dGVzID0gZGVjb2Rlci5yZWFkVWludDMyKCk7Ci0gICAgdmFyIHZlcnNpb24gPSBkZWNvZGVy
LnJlYWRVaW50MzIoKTsKLSAgICB2YWwucGFyYW1zID0gZGVjb2Rlci5kZWNvZGVTdHJ1Y3RQb2lu
dGVyKFVzYkNvbnRyb2xUcmFuc2ZlclBhcmFtcyk7Ci0gICAgdmFsLmxlbmd0aCA9IGRlY29kZXIu
ZGVjb2RlU3RydWN0KGNvZGVjLlVpbnQzMik7Ci0gICAgdmFsLnRpbWVvdXQgPSBkZWNvZGVyLmRl
Y29kZVN0cnVjdChjb2RlYy5VaW50MzIpOwotICAgIHJldHVybiB2YWw7Ci0gIH07Ci0KLSAgVXNi
RGV2aWNlX0NvbnRyb2xUcmFuc2ZlckluX1BhcmFtcy5lbmNvZGUgPSBmdW5jdGlvbihlbmNvZGVy
LCB2YWwpIHsKLSAgICB2YXIgcGFja2VkOwotICAgIGVuY29kZXIud3JpdGVVaW50MzIoVXNiRGV2
aWNlX0NvbnRyb2xUcmFuc2ZlckluX1BhcmFtcy5lbmNvZGVkU2l6ZSk7Ci0gICAgZW5jb2Rlci53
cml0ZVVpbnQzMigwKTsKLSAgICBlbmNvZGVyLmVuY29kZVN0cnVjdFBvaW50ZXIoVXNiQ29udHJv
bFRyYW5zZmVyUGFyYW1zLCB2YWwucGFyYW1zKTsKLSAgICBlbmNvZGVyLmVuY29kZVN0cnVjdChj
b2RlYy5VaW50MzIsIHZhbC5sZW5ndGgpOwotICAgIGVuY29kZXIuZW5jb2RlU3RydWN0KGNvZGVj
LlVpbnQzMiwgdmFsLnRpbWVvdXQpOwotICB9OwotICBmdW5jdGlvbiBVc2JEZXZpY2VfQ29udHJv
bFRyYW5zZmVySW5fUmVzcG9uc2VQYXJhbXModmFsdWVzKSB7Ci0gICAgdGhpcy5pbml0RGVmYXVs
dHNfKCk7Ci0gICAgdGhpcy5pbml0RmllbGRzXyh2YWx1ZXMpOwotICB9Ci0KLQotICBVc2JEZXZp
Y2VfQ29udHJvbFRyYW5zZmVySW5fUmVzcG9uc2VQYXJhbXMucHJvdG90eXBlLmluaXREZWZhdWx0
c18gPSBmdW5jdGlvbigpIHsKLSAgICB0aGlzLnN0YXR1cyA9IDA7Ci0gICAgdGhpcy5kYXRhID0g
bnVsbDsKLSAgfTsKLSAgVXNiRGV2aWNlX0NvbnRyb2xUcmFuc2ZlckluX1Jlc3BvbnNlUGFyYW1z
LnByb3RvdHlwZS5pbml0RmllbGRzXyA9IGZ1bmN0aW9uKGZpZWxkcykgewotICAgIGZvcih2YXIg
ZmllbGQgaW4gZmllbGRzKSB7Ci0gICAgICAgIGlmICh0aGlzLmhhc093blByb3BlcnR5KGZpZWxk
KSkKLSAgICAgICAgICB0aGlzW2ZpZWxkXSA9IGZpZWxkc1tmaWVsZF07Ci0gICAgfQotICB9Owot
Ci0gIFVzYkRldmljZV9Db250cm9sVHJhbnNmZXJJbl9SZXNwb25zZVBhcmFtcy52YWxpZGF0ZSA9
IGZ1bmN0aW9uKG1lc3NhZ2VWYWxpZGF0b3IsIG9mZnNldCkgewotICAgIHZhciBlcnI7Ci0gICAg
ZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdEhlYWRlcihvZmZzZXQsIGNvZGVj
LmtTdHJ1Y3RIZWFkZXJTaXplKTsKLSAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlv
bkVycm9yLk5PTkUpCi0gICAgICAgIHJldHVybiBlcnI7Ci0KLSAgICB2YXIga1ZlcnNpb25TaXpl
cyA9IFsKLSAgICAgIHt2ZXJzaW9uOiAwLCBudW1CeXRlczogMjR9Ci0gICAgXTsKLSAgICBlcnIg
PSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0VmVyc2lvbihvZmZzZXQsIGtWZXJzaW9u
U2l6ZXMpOwotICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkK
LSAgICAgICAgcmV0dXJuIGVycjsKLQotCi0gICAgLy8gdmFsaWRhdGUgVXNiRGV2aWNlX0NvbnRy
b2xUcmFuc2ZlckluX1Jlc3BvbnNlUGFyYW1zLnN0YXR1cwotICAgIGVyciA9IG1lc3NhZ2VWYWxp
ZGF0b3IudmFsaWRhdGVFbnVtKG9mZnNldCArIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgMCwg
VXNiVHJhbnNmZXJTdGF0dXMpOwotICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9u
RXJyb3IuTk9ORSkKLSAgICAgICAgcmV0dXJuIGVycjsKLQotCi0gICAgLy8gdmFsaWRhdGUgVXNi
RGV2aWNlX0NvbnRyb2xUcmFuc2ZlckluX1Jlc3BvbnNlUGFyYW1zLmRhdGEKLSAgICBlcnIgPSBt
ZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlQXJyYXlQb2ludGVyKG9mZnNldCArIGNvZGVjLmtTdHJ1
Y3RIZWFkZXJTaXplICsgOCwgMSwgY29kZWMuVWludDgsIGZhbHNlLCBbMF0sIDApOwotICAgIGlm
IChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKLSAgICAgICAgcmV0dXJu
IGVycjsKLQotICAgIHJldHVybiB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkU7Ci0gIH07
Ci0KLSAgVXNiRGV2aWNlX0NvbnRyb2xUcmFuc2ZlckluX1Jlc3BvbnNlUGFyYW1zLmVuY29kZWRT
aXplID0gY29kZWMua1N0cnVjdEhlYWRlclNpemUgKyAxNjsKLQotICBVc2JEZXZpY2VfQ29udHJv
bFRyYW5zZmVySW5fUmVzcG9uc2VQYXJhbXMuZGVjb2RlID0gZnVuY3Rpb24oZGVjb2Rlcikgewot
ICAgIHZhciBwYWNrZWQ7Ci0gICAgdmFyIHZhbCA9IG5ldyBVc2JEZXZpY2VfQ29udHJvbFRyYW5z
ZmVySW5fUmVzcG9uc2VQYXJhbXMoKTsKLSAgICB2YXIgbnVtYmVyT2ZCeXRlcyA9IGRlY29kZXIu
cmVhZFVpbnQzMigpOwotICAgIHZhciB2ZXJzaW9uID0gZGVjb2Rlci5yZWFkVWludDMyKCk7Ci0g
ICAgdmFsLnN0YXR1cyA9IGRlY29kZXIuZGVjb2RlU3RydWN0KGNvZGVjLkludDMyKTsKLSAgICBk
ZWNvZGVyLnNraXAoMSk7Ci0gICAgZGVjb2Rlci5za2lwKDEpOwotICAgIGRlY29kZXIuc2tpcCgx
KTsKLSAgICBkZWNvZGVyLnNraXAoMSk7Ci0gICAgdmFsLmRhdGEgPSBkZWNvZGVyLmRlY29kZUFy
cmF5UG9pbnRlcihjb2RlYy5VaW50OCk7Ci0gICAgcmV0dXJuIHZhbDsKLSAgfTsKLQotICBVc2JE
ZXZpY2VfQ29udHJvbFRyYW5zZmVySW5fUmVzcG9uc2VQYXJhbXMuZW5jb2RlID0gZnVuY3Rpb24o
ZW5jb2RlciwgdmFsKSB7Ci0gICAgdmFyIHBhY2tlZDsKLSAgICBlbmNvZGVyLndyaXRlVWludDMy
KFVzYkRldmljZV9Db250cm9sVHJhbnNmZXJJbl9SZXNwb25zZVBhcmFtcy5lbmNvZGVkU2l6ZSk7
Ci0gICAgZW5jb2Rlci53cml0ZVVpbnQzMigwKTsKLSAgICBlbmNvZGVyLmVuY29kZVN0cnVjdChj
b2RlYy5JbnQzMiwgdmFsLnN0YXR1cyk7Ci0gICAgZW5jb2Rlci5za2lwKDEpOwotICAgIGVuY29k
ZXIuc2tpcCgxKTsKLSAgICBlbmNvZGVyLnNraXAoMSk7Ci0gICAgZW5jb2Rlci5za2lwKDEpOwot
ICAgIGVuY29kZXIuZW5jb2RlQXJyYXlQb2ludGVyKGNvZGVjLlVpbnQ4LCB2YWwuZGF0YSk7Ci0g
IH07Ci0gIGZ1bmN0aW9uIFVzYkRldmljZV9Db250cm9sVHJhbnNmZXJPdXRfUGFyYW1zKHZhbHVl
cykgewotICAgIHRoaXMuaW5pdERlZmF1bHRzXygpOwotICAgIHRoaXMuaW5pdEZpZWxkc18odmFs
dWVzKTsKLSAgfQotCi0KLSAgVXNiRGV2aWNlX0NvbnRyb2xUcmFuc2Zlck91dF9QYXJhbXMucHJv
dG90eXBlLmluaXREZWZhdWx0c18gPSBmdW5jdGlvbigpIHsKLSAgICB0aGlzLnBhcmFtcyA9IG51
bGw7Ci0gICAgdGhpcy5kYXRhID0gbnVsbDsKLSAgICB0aGlzLnRpbWVvdXQgPSAwOwotICB9Owot
ICBVc2JEZXZpY2VfQ29udHJvbFRyYW5zZmVyT3V0X1BhcmFtcy5wcm90b3R5cGUuaW5pdEZpZWxk
c18gPSBmdW5jdGlvbihmaWVsZHMpIHsKLSAgICBmb3IodmFyIGZpZWxkIGluIGZpZWxkcykgewot
ICAgICAgICBpZiAodGhpcy5oYXNPd25Qcm9wZXJ0eShmaWVsZCkpCi0gICAgICAgICAgdGhpc1tm
aWVsZF0gPSBmaWVsZHNbZmllbGRdOwotICAgIH0KLSAgfTsKLQotICBVc2JEZXZpY2VfQ29udHJv
bFRyYW5zZmVyT3V0X1BhcmFtcy52YWxpZGF0ZSA9IGZ1bmN0aW9uKG1lc3NhZ2VWYWxpZGF0b3Is
IG9mZnNldCkgewotICAgIHZhciBlcnI7Ci0gICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxp
ZGF0ZVN0cnVjdEhlYWRlcihvZmZzZXQsIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplKTsKLSAgICBp
ZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCi0gICAgICAgIHJldHVy
biBlcnI7Ci0KLSAgICB2YXIga1ZlcnNpb25TaXplcyA9IFsKLSAgICAgIHt2ZXJzaW9uOiAwLCBu
dW1CeXRlczogMzJ9Ci0gICAgXTsKLSAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRl
U3RydWN0VmVyc2lvbihvZmZzZXQsIGtWZXJzaW9uU2l6ZXMpOwotICAgIGlmIChlcnIgIT09IHZh
bGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKLSAgICAgICAgcmV0dXJuIGVycjsKLQotCi0g
ICAgLy8gdmFsaWRhdGUgVXNiRGV2aWNlX0NvbnRyb2xUcmFuc2Zlck91dF9QYXJhbXMucGFyYW1z
Ci0gICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdFBvaW50ZXIob2Zmc2V0
ICsgY29kZWMua1N0cnVjdEhlYWRlclNpemUgKyAwLCBVc2JDb250cm9sVHJhbnNmZXJQYXJhbXMs
IGZhbHNlKTsKLSAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUp
Ci0gICAgICAgIHJldHVybiBlcnI7Ci0KLQotICAgIC8vIHZhbGlkYXRlIFVzYkRldmljZV9Db250
cm9sVHJhbnNmZXJPdXRfUGFyYW1zLmRhdGEKLSAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZh
bGlkYXRlQXJyYXlQb2ludGVyKG9mZnNldCArIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgOCwg
MSwgY29kZWMuVWludDgsIGZhbHNlLCBbMF0sIDApOwotICAgIGlmIChlcnIgIT09IHZhbGlkYXRv
ci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKLSAgICAgICAgcmV0dXJuIGVycjsKLQotCi0gICAgcmV0
dXJuIHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORTsKLSAgfTsKLQotICBVc2JEZXZpY2Vf
Q29udHJvbFRyYW5zZmVyT3V0X1BhcmFtcy5lbmNvZGVkU2l6ZSA9IGNvZGVjLmtTdHJ1Y3RIZWFk
ZXJTaXplICsgMjQ7Ci0KLSAgVXNiRGV2aWNlX0NvbnRyb2xUcmFuc2Zlck91dF9QYXJhbXMuZGVj
b2RlID0gZnVuY3Rpb24oZGVjb2RlcikgewotICAgIHZhciBwYWNrZWQ7Ci0gICAgdmFyIHZhbCA9
IG5ldyBVc2JEZXZpY2VfQ29udHJvbFRyYW5zZmVyT3V0X1BhcmFtcygpOwotICAgIHZhciBudW1i
ZXJPZkJ5dGVzID0gZGVjb2Rlci5yZWFkVWludDMyKCk7Ci0gICAgdmFyIHZlcnNpb24gPSBkZWNv
ZGVyLnJlYWRVaW50MzIoKTsKLSAgICB2YWwucGFyYW1zID0gZGVjb2Rlci5kZWNvZGVTdHJ1Y3RQ
b2ludGVyKFVzYkNvbnRyb2xUcmFuc2ZlclBhcmFtcyk7Ci0gICAgdmFsLmRhdGEgPSBkZWNvZGVy
LmRlY29kZUFycmF5UG9pbnRlcihjb2RlYy5VaW50OCk7Ci0gICAgdmFsLnRpbWVvdXQgPSBkZWNv
ZGVyLmRlY29kZVN0cnVjdChjb2RlYy5VaW50MzIpOwotICAgIGRlY29kZXIuc2tpcCgxKTsKLSAg
ICBkZWNvZGVyLnNraXAoMSk7Ci0gICAgZGVjb2Rlci5za2lwKDEpOwotICAgIGRlY29kZXIuc2tp
cCgxKTsKLSAgICByZXR1cm4gdmFsOwotICB9OwotCi0gIFVzYkRldmljZV9Db250cm9sVHJhbnNm
ZXJPdXRfUGFyYW1zLmVuY29kZSA9IGZ1bmN0aW9uKGVuY29kZXIsIHZhbCkgewotICAgIHZhciBw
YWNrZWQ7Ci0gICAgZW5jb2Rlci53cml0ZVVpbnQzMihVc2JEZXZpY2VfQ29udHJvbFRyYW5zZmVy
T3V0X1BhcmFtcy5lbmNvZGVkU2l6ZSk7Ci0gICAgZW5jb2Rlci53cml0ZVVpbnQzMigwKTsKLSAg
ICBlbmNvZGVyLmVuY29kZVN0cnVjdFBvaW50ZXIoVXNiQ29udHJvbFRyYW5zZmVyUGFyYW1zLCB2
YWwucGFyYW1zKTsKLSAgICBlbmNvZGVyLmVuY29kZUFycmF5UG9pbnRlcihjb2RlYy5VaW50OCwg
dmFsLmRhdGEpOwotICAgIGVuY29kZXIuZW5jb2RlU3RydWN0KGNvZGVjLlVpbnQzMiwgdmFsLnRp
bWVvdXQpOwotICAgIGVuY29kZXIuc2tpcCgxKTsKLSAgICBlbmNvZGVyLnNraXAoMSk7Ci0gICAg
ZW5jb2Rlci5za2lwKDEpOwotICAgIGVuY29kZXIuc2tpcCgxKTsKLSAgfTsKLSAgZnVuY3Rpb24g
VXNiRGV2aWNlX0NvbnRyb2xUcmFuc2Zlck91dF9SZXNwb25zZVBhcmFtcyh2YWx1ZXMpIHsKLSAg
ICB0aGlzLmluaXREZWZhdWx0c18oKTsKLSAgICB0aGlzLmluaXRGaWVsZHNfKHZhbHVlcyk7Ci0g
IH0KLQotCi0gIFVzYkRldmljZV9Db250cm9sVHJhbnNmZXJPdXRfUmVzcG9uc2VQYXJhbXMucHJv
dG90eXBlLmluaXREZWZhdWx0c18gPSBmdW5jdGlvbigpIHsKLSAgICB0aGlzLnN0YXR1cyA9IDA7
Ci0gIH07Ci0gIFVzYkRldmljZV9Db250cm9sVHJhbnNmZXJPdXRfUmVzcG9uc2VQYXJhbXMucHJv
dG90eXBlLmluaXRGaWVsZHNfID0gZnVuY3Rpb24oZmllbGRzKSB7Ci0gICAgZm9yKHZhciBmaWVs
ZCBpbiBmaWVsZHMpIHsKLSAgICAgICAgaWYgKHRoaXMuaGFzT3duUHJvcGVydHkoZmllbGQpKQot
ICAgICAgICAgIHRoaXNbZmllbGRdID0gZmllbGRzW2ZpZWxkXTsKLSAgICB9Ci0gIH07Ci0KLSAg
VXNiRGV2aWNlX0NvbnRyb2xUcmFuc2Zlck91dF9SZXNwb25zZVBhcmFtcy52YWxpZGF0ZSA9IGZ1
bmN0aW9uKG1lc3NhZ2VWYWxpZGF0b3IsIG9mZnNldCkgewotICAgIHZhciBlcnI7Ci0gICAgZXJy
ID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdEhlYWRlcihvZmZzZXQsIGNvZGVjLmtT
dHJ1Y3RIZWFkZXJTaXplKTsKLSAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVy
cm9yLk5PTkUpCi0gICAgICAgIHJldHVybiBlcnI7Ci0KLSAgICB2YXIga1ZlcnNpb25TaXplcyA9
IFsKLSAgICAgIHt2ZXJzaW9uOiAwLCBudW1CeXRlczogMTZ9Ci0gICAgXTsKLSAgICBlcnIgPSBt
ZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0VmVyc2lvbihvZmZzZXQsIGtWZXJzaW9uU2l6
ZXMpOwotICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKLSAg
ICAgICAgcmV0dXJuIGVycjsKLQotCi0gICAgLy8gdmFsaWRhdGUgVXNiRGV2aWNlX0NvbnRyb2xU
cmFuc2Zlck91dF9SZXNwb25zZVBhcmFtcy5zdGF0dXMKLSAgICBlcnIgPSBtZXNzYWdlVmFsaWRh
dG9yLnZhbGlkYXRlRW51bShvZmZzZXQgKyBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDAsIFVz
YlRyYW5zZmVyU3RhdHVzKTsKLSAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVy
cm9yLk5PTkUpCi0gICAgICAgIHJldHVybiBlcnI7Ci0KLSAgICByZXR1cm4gdmFsaWRhdG9yLnZh
bGlkYXRpb25FcnJvci5OT05FOwotICB9OwotCi0gIFVzYkRldmljZV9Db250cm9sVHJhbnNmZXJP
dXRfUmVzcG9uc2VQYXJhbXMuZW5jb2RlZFNpemUgPSBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSAr
IDg7Ci0KLSAgVXNiRGV2aWNlX0NvbnRyb2xUcmFuc2Zlck91dF9SZXNwb25zZVBhcmFtcy5kZWNv
ZGUgPSBmdW5jdGlvbihkZWNvZGVyKSB7Ci0gICAgdmFyIHBhY2tlZDsKLSAgICB2YXIgdmFsID0g
bmV3IFVzYkRldmljZV9Db250cm9sVHJhbnNmZXJPdXRfUmVzcG9uc2VQYXJhbXMoKTsKLSAgICB2
YXIgbnVtYmVyT2ZCeXRlcyA9IGRlY29kZXIucmVhZFVpbnQzMigpOwotICAgIHZhciB2ZXJzaW9u
ID0gZGVjb2Rlci5yZWFkVWludDMyKCk7Ci0gICAgdmFsLnN0YXR1cyA9IGRlY29kZXIuZGVjb2Rl
U3RydWN0KGNvZGVjLkludDMyKTsKLSAgICBkZWNvZGVyLnNraXAoMSk7Ci0gICAgZGVjb2Rlci5z
a2lwKDEpOwotICAgIGRlY29kZXIuc2tpcCgxKTsKLSAgICBkZWNvZGVyLnNraXAoMSk7Ci0gICAg
cmV0dXJuIHZhbDsKLSAgfTsKLQotICBVc2JEZXZpY2VfQ29udHJvbFRyYW5zZmVyT3V0X1Jlc3Bv
bnNlUGFyYW1zLmVuY29kZSA9IGZ1bmN0aW9uKGVuY29kZXIsIHZhbCkgewotICAgIHZhciBwYWNr
ZWQ7Ci0gICAgZW5jb2Rlci53cml0ZVVpbnQzMihVc2JEZXZpY2VfQ29udHJvbFRyYW5zZmVyT3V0
X1Jlc3BvbnNlUGFyYW1zLmVuY29kZWRTaXplKTsKLSAgICBlbmNvZGVyLndyaXRlVWludDMyKDAp
OwotICAgIGVuY29kZXIuZW5jb2RlU3RydWN0KGNvZGVjLkludDMyLCB2YWwuc3RhdHVzKTsKLSAg
ICBlbmNvZGVyLnNraXAoMSk7Ci0gICAgZW5jb2Rlci5za2lwKDEpOwotICAgIGVuY29kZXIuc2tp
cCgxKTsKLSAgICBlbmNvZGVyLnNraXAoMSk7Ci0gIH07Ci0gIGZ1bmN0aW9uIFVzYkRldmljZV9H
ZW5lcmljVHJhbnNmZXJJbl9QYXJhbXModmFsdWVzKSB7Ci0gICAgdGhpcy5pbml0RGVmYXVsdHNf
KCk7Ci0gICAgdGhpcy5pbml0RmllbGRzXyh2YWx1ZXMpOwotICB9Ci0KLQotICBVc2JEZXZpY2Vf
R2VuZXJpY1RyYW5zZmVySW5fUGFyYW1zLnByb3RvdHlwZS5pbml0RGVmYXVsdHNfID0gZnVuY3Rp
b24oKSB7Ci0gICAgdGhpcy5lbmRwb2ludE51bWJlciA9IDA7Ci0gICAgdGhpcy5sZW5ndGggPSAw
OwotICAgIHRoaXMudGltZW91dCA9IDA7Ci0gIH07Ci0gIFVzYkRldmljZV9HZW5lcmljVHJhbnNm
ZXJJbl9QYXJhbXMucHJvdG90eXBlLmluaXRGaWVsZHNfID0gZnVuY3Rpb24oZmllbGRzKSB7Ci0g
ICAgZm9yKHZhciBmaWVsZCBpbiBmaWVsZHMpIHsKLSAgICAgICAgaWYgKHRoaXMuaGFzT3duUHJv
cGVydHkoZmllbGQpKQotICAgICAgICAgIHRoaXNbZmllbGRdID0gZmllbGRzW2ZpZWxkXTsKLSAg
ICB9Ci0gIH07Ci0KLSAgVXNiRGV2aWNlX0dlbmVyaWNUcmFuc2ZlckluX1BhcmFtcy52YWxpZGF0
ZSA9IGZ1bmN0aW9uKG1lc3NhZ2VWYWxpZGF0b3IsIG9mZnNldCkgewotICAgIHZhciBlcnI7Ci0g
ICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdEhlYWRlcihvZmZzZXQsIGNv
ZGVjLmtTdHJ1Y3RIZWFkZXJTaXplKTsKLSAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRh
dGlvbkVycm9yLk5PTkUpCi0gICAgICAgIHJldHVybiBlcnI7Ci0KLSAgICB2YXIga1ZlcnNpb25T
aXplcyA9IFsKLSAgICAgIHt2ZXJzaW9uOiAwLCBudW1CeXRlczogMjR9Ci0gICAgXTsKLSAgICBl
cnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0VmVyc2lvbihvZmZzZXQsIGtWZXJz
aW9uU2l6ZXMpOwotICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9O
RSkKLSAgICAgICAgcmV0dXJuIGVycjsKLQotCi0KLQotICAgIHJldHVybiB2YWxpZGF0b3IudmFs
aWRhdGlvbkVycm9yLk5PTkU7Ci0gIH07Ci0KLSAgVXNiRGV2aWNlX0dlbmVyaWNUcmFuc2Zlcklu
X1BhcmFtcy5lbmNvZGVkU2l6ZSA9IGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgMTY7Ci0KLSAg
VXNiRGV2aWNlX0dlbmVyaWNUcmFuc2ZlckluX1BhcmFtcy5kZWNvZGUgPSBmdW5jdGlvbihkZWNv
ZGVyKSB7Ci0gICAgdmFyIHBhY2tlZDsKLSAgICB2YXIgdmFsID0gbmV3IFVzYkRldmljZV9HZW5l
cmljVHJhbnNmZXJJbl9QYXJhbXMoKTsKLSAgICB2YXIgbnVtYmVyT2ZCeXRlcyA9IGRlY29kZXIu
cmVhZFVpbnQzMigpOwotICAgIHZhciB2ZXJzaW9uID0gZGVjb2Rlci5yZWFkVWludDMyKCk7Ci0g
ICAgdmFsLmVuZHBvaW50TnVtYmVyID0gZGVjb2Rlci5kZWNvZGVTdHJ1Y3QoY29kZWMuVWludDgp
OwotICAgIGRlY29kZXIuc2tpcCgxKTsKLSAgICBkZWNvZGVyLnNraXAoMSk7Ci0gICAgZGVjb2Rl
ci5za2lwKDEpOwotICAgIHZhbC5sZW5ndGggPSBkZWNvZGVyLmRlY29kZVN0cnVjdChjb2RlYy5V
aW50MzIpOwotICAgIHZhbC50aW1lb3V0ID0gZGVjb2Rlci5kZWNvZGVTdHJ1Y3QoY29kZWMuVWlu
dDMyKTsKLSAgICBkZWNvZGVyLnNraXAoMSk7Ci0gICAgZGVjb2Rlci5za2lwKDEpOwotICAgIGRl
Y29kZXIuc2tpcCgxKTsKLSAgICBkZWNvZGVyLnNraXAoMSk7Ci0gICAgcmV0dXJuIHZhbDsKLSAg
fTsKLQotICBVc2JEZXZpY2VfR2VuZXJpY1RyYW5zZmVySW5fUGFyYW1zLmVuY29kZSA9IGZ1bmN0
aW9uKGVuY29kZXIsIHZhbCkgewotICAgIHZhciBwYWNrZWQ7Ci0gICAgZW5jb2Rlci53cml0ZVVp
bnQzMihVc2JEZXZpY2VfR2VuZXJpY1RyYW5zZmVySW5fUGFyYW1zLmVuY29kZWRTaXplKTsKLSAg
ICBlbmNvZGVyLndyaXRlVWludDMyKDApOwotICAgIGVuY29kZXIuZW5jb2RlU3RydWN0KGNvZGVj
LlVpbnQ4LCB2YWwuZW5kcG9pbnROdW1iZXIpOwotICAgIGVuY29kZXIuc2tpcCgxKTsKLSAgICBl
bmNvZGVyLnNraXAoMSk7Ci0gICAgZW5jb2Rlci5za2lwKDEpOwotICAgIGVuY29kZXIuZW5jb2Rl
U3RydWN0KGNvZGVjLlVpbnQzMiwgdmFsLmxlbmd0aCk7Ci0gICAgZW5jb2Rlci5lbmNvZGVTdHJ1
Y3QoY29kZWMuVWludDMyLCB2YWwudGltZW91dCk7Ci0gICAgZW5jb2Rlci5za2lwKDEpOwotICAg
IGVuY29kZXIuc2tpcCgxKTsKLSAgICBlbmNvZGVyLnNraXAoMSk7Ci0gICAgZW5jb2Rlci5za2lw
KDEpOwotICB9OwotICBmdW5jdGlvbiBVc2JEZXZpY2VfR2VuZXJpY1RyYW5zZmVySW5fUmVzcG9u
c2VQYXJhbXModmFsdWVzKSB7Ci0gICAgdGhpcy5pbml0RGVmYXVsdHNfKCk7Ci0gICAgdGhpcy5p
bml0RmllbGRzXyh2YWx1ZXMpOwotICB9Ci0KLQotICBVc2JEZXZpY2VfR2VuZXJpY1RyYW5zZmVy
SW5fUmVzcG9uc2VQYXJhbXMucHJvdG90eXBlLmluaXREZWZhdWx0c18gPSBmdW5jdGlvbigpIHsK
LSAgICB0aGlzLnN0YXR1cyA9IDA7Ci0gICAgdGhpcy5kYXRhID0gbnVsbDsKLSAgfTsKLSAgVXNi
RGV2aWNlX0dlbmVyaWNUcmFuc2ZlckluX1Jlc3BvbnNlUGFyYW1zLnByb3RvdHlwZS5pbml0Rmll
bGRzXyA9IGZ1bmN0aW9uKGZpZWxkcykgewotICAgIGZvcih2YXIgZmllbGQgaW4gZmllbGRzKSB7
Ci0gICAgICAgIGlmICh0aGlzLmhhc093blByb3BlcnR5KGZpZWxkKSkKLSAgICAgICAgICB0aGlz
W2ZpZWxkXSA9IGZpZWxkc1tmaWVsZF07Ci0gICAgfQotICB9OwotCi0gIFVzYkRldmljZV9HZW5l
cmljVHJhbnNmZXJJbl9SZXNwb25zZVBhcmFtcy52YWxpZGF0ZSA9IGZ1bmN0aW9uKG1lc3NhZ2VW
YWxpZGF0b3IsIG9mZnNldCkgewotICAgIHZhciBlcnI7Ci0gICAgZXJyID0gbWVzc2FnZVZhbGlk
YXRvci52YWxpZGF0ZVN0cnVjdEhlYWRlcihvZmZzZXQsIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXpl
KTsKLSAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCi0gICAg
ICAgIHJldHVybiBlcnI7Ci0KLSAgICB2YXIga1ZlcnNpb25TaXplcyA9IFsKLSAgICAgIHt2ZXJz
aW9uOiAwLCBudW1CeXRlczogMjR9Ci0gICAgXTsKLSAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9y
LnZhbGlkYXRlU3RydWN0VmVyc2lvbihvZmZzZXQsIGtWZXJzaW9uU2l6ZXMpOwotICAgIGlmIChl
cnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKLSAgICAgICAgcmV0dXJuIGVy
cjsKLQotCi0gICAgLy8gdmFsaWRhdGUgVXNiRGV2aWNlX0dlbmVyaWNUcmFuc2ZlckluX1Jlc3Bv
bnNlUGFyYW1zLnN0YXR1cwotICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVFbnVt
KG9mZnNldCArIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgMCwgVXNiVHJhbnNmZXJTdGF0dXMp
OwotICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKLSAgICAg
ICAgcmV0dXJuIGVycjsKLQotCi0gICAgLy8gdmFsaWRhdGUgVXNiRGV2aWNlX0dlbmVyaWNUcmFu
c2ZlckluX1Jlc3BvbnNlUGFyYW1zLmRhdGEKLSAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZh
bGlkYXRlQXJyYXlQb2ludGVyKG9mZnNldCArIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgOCwg
MSwgY29kZWMuVWludDgsIGZhbHNlLCBbMF0sIDApOwotICAgIGlmIChlcnIgIT09IHZhbGlkYXRv
ci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKLSAgICAgICAgcmV0dXJuIGVycjsKLQotICAgIHJldHVy
biB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkU7Ci0gIH07Ci0KLSAgVXNiRGV2aWNlX0dl
bmVyaWNUcmFuc2ZlckluX1Jlc3BvbnNlUGFyYW1zLmVuY29kZWRTaXplID0gY29kZWMua1N0cnVj
dEhlYWRlclNpemUgKyAxNjsKLQotICBVc2JEZXZpY2VfR2VuZXJpY1RyYW5zZmVySW5fUmVzcG9u
c2VQYXJhbXMuZGVjb2RlID0gZnVuY3Rpb24oZGVjb2RlcikgewotICAgIHZhciBwYWNrZWQ7Ci0g
ICAgdmFyIHZhbCA9IG5ldyBVc2JEZXZpY2VfR2VuZXJpY1RyYW5zZmVySW5fUmVzcG9uc2VQYXJh
bXMoKTsKLSAgICB2YXIgbnVtYmVyT2ZCeXRlcyA9IGRlY29kZXIucmVhZFVpbnQzMigpOwotICAg
IHZhciB2ZXJzaW9uID0gZGVjb2Rlci5yZWFkVWludDMyKCk7Ci0gICAgdmFsLnN0YXR1cyA9IGRl
Y29kZXIuZGVjb2RlU3RydWN0KGNvZGVjLkludDMyKTsKLSAgICBkZWNvZGVyLnNraXAoMSk7Ci0g
ICAgZGVjb2Rlci5za2lwKDEpOwotICAgIGRlY29kZXIuc2tpcCgxKTsKLSAgICBkZWNvZGVyLnNr
aXAoMSk7Ci0gICAgdmFsLmRhdGEgPSBkZWNvZGVyLmRlY29kZUFycmF5UG9pbnRlcihjb2RlYy5V
aW50OCk7Ci0gICAgcmV0dXJuIHZhbDsKLSAgfTsKLQotICBVc2JEZXZpY2VfR2VuZXJpY1RyYW5z
ZmVySW5fUmVzcG9uc2VQYXJhbXMuZW5jb2RlID0gZnVuY3Rpb24oZW5jb2RlciwgdmFsKSB7Ci0g
ICAgdmFyIHBhY2tlZDsKLSAgICBlbmNvZGVyLndyaXRlVWludDMyKFVzYkRldmljZV9HZW5lcmlj
VHJhbnNmZXJJbl9SZXNwb25zZVBhcmFtcy5lbmNvZGVkU2l6ZSk7Ci0gICAgZW5jb2Rlci53cml0
ZVVpbnQzMigwKTsKLSAgICBlbmNvZGVyLmVuY29kZVN0cnVjdChjb2RlYy5JbnQzMiwgdmFsLnN0
YXR1cyk7Ci0gICAgZW5jb2Rlci5za2lwKDEpOwotICAgIGVuY29kZXIuc2tpcCgxKTsKLSAgICBl
bmNvZGVyLnNraXAoMSk7Ci0gICAgZW5jb2Rlci5za2lwKDEpOwotICAgIGVuY29kZXIuZW5jb2Rl
QXJyYXlQb2ludGVyKGNvZGVjLlVpbnQ4LCB2YWwuZGF0YSk7Ci0gIH07Ci0gIGZ1bmN0aW9uIFVz
YkRldmljZV9HZW5lcmljVHJhbnNmZXJPdXRfUGFyYW1zKHZhbHVlcykgewotICAgIHRoaXMuaW5p
dERlZmF1bHRzXygpOwotICAgIHRoaXMuaW5pdEZpZWxkc18odmFsdWVzKTsKLSAgfQotCi0KLSAg
VXNiRGV2aWNlX0dlbmVyaWNUcmFuc2Zlck91dF9QYXJhbXMucHJvdG90eXBlLmluaXREZWZhdWx0
c18gPSBmdW5jdGlvbigpIHsKLSAgICB0aGlzLmVuZHBvaW50TnVtYmVyID0gMDsKLSAgICB0aGlz
LnRpbWVvdXQgPSAwOwotICAgIHRoaXMuZGF0YSA9IG51bGw7Ci0gIH07Ci0gIFVzYkRldmljZV9H
ZW5lcmljVHJhbnNmZXJPdXRfUGFyYW1zLnByb3RvdHlwZS5pbml0RmllbGRzXyA9IGZ1bmN0aW9u
KGZpZWxkcykgewotICAgIGZvcih2YXIgZmllbGQgaW4gZmllbGRzKSB7Ci0gICAgICAgIGlmICh0
aGlzLmhhc093blByb3BlcnR5KGZpZWxkKSkKLSAgICAgICAgICB0aGlzW2ZpZWxkXSA9IGZpZWxk
c1tmaWVsZF07Ci0gICAgfQotICB9OwotCi0gIFVzYkRldmljZV9HZW5lcmljVHJhbnNmZXJPdXRf
UGFyYW1zLnZhbGlkYXRlID0gZnVuY3Rpb24obWVzc2FnZVZhbGlkYXRvciwgb2Zmc2V0KSB7Ci0g
ICAgdmFyIGVycjsKLSAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0SGVh
ZGVyKG9mZnNldCwgY29kZWMua1N0cnVjdEhlYWRlclNpemUpOwotICAgIGlmIChlcnIgIT09IHZh
bGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKLSAgICAgICAgcmV0dXJuIGVycjsKLQotICAg
IHZhciBrVmVyc2lvblNpemVzID0gWwotICAgICAge3ZlcnNpb246IDAsIG51bUJ5dGVzOiAyNH0K
LSAgICBdOwotICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RWZXJzaW9u
KG9mZnNldCwga1ZlcnNpb25TaXplcyk7Ci0gICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlk
YXRpb25FcnJvci5OT05FKQotICAgICAgICByZXR1cm4gZXJyOwotCi0KLQotICAgIC8vIHZhbGlk
YXRlIFVzYkRldmljZV9HZW5lcmljVHJhbnNmZXJPdXRfUGFyYW1zLmRhdGEKLSAgICBlcnIgPSBt
ZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlQXJyYXlQb2ludGVyKG9mZnNldCArIGNvZGVjLmtTdHJ1
Y3RIZWFkZXJTaXplICsgOCwgMSwgY29kZWMuVWludDgsIGZhbHNlLCBbMF0sIDApOwotICAgIGlm
IChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKLSAgICAgICAgcmV0dXJu
IGVycjsKLQotCi0gICAgcmV0dXJuIHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORTsKLSAg
fTsKLQotICBVc2JEZXZpY2VfR2VuZXJpY1RyYW5zZmVyT3V0X1BhcmFtcy5lbmNvZGVkU2l6ZSA9
IGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgMTY7Ci0KLSAgVXNiRGV2aWNlX0dlbmVyaWNUcmFu
c2Zlck91dF9QYXJhbXMuZGVjb2RlID0gZnVuY3Rpb24oZGVjb2RlcikgewotICAgIHZhciBwYWNr
ZWQ7Ci0gICAgdmFyIHZhbCA9IG5ldyBVc2JEZXZpY2VfR2VuZXJpY1RyYW5zZmVyT3V0X1BhcmFt
cygpOwotICAgIHZhciBudW1iZXJPZkJ5dGVzID0gZGVjb2Rlci5yZWFkVWludDMyKCk7Ci0gICAg
dmFyIHZlcnNpb24gPSBkZWNvZGVyLnJlYWRVaW50MzIoKTsKLSAgICB2YWwuZW5kcG9pbnROdW1i
ZXIgPSBkZWNvZGVyLmRlY29kZVN0cnVjdChjb2RlYy5VaW50OCk7Ci0gICAgZGVjb2Rlci5za2lw
KDEpOwotICAgIGRlY29kZXIuc2tpcCgxKTsKLSAgICBkZWNvZGVyLnNraXAoMSk7Ci0gICAgdmFs
LnRpbWVvdXQgPSBkZWNvZGVyLmRlY29kZVN0cnVjdChjb2RlYy5VaW50MzIpOwotICAgIHZhbC5k
YXRhID0gZGVjb2Rlci5kZWNvZGVBcnJheVBvaW50ZXIoY29kZWMuVWludDgpOwotICAgIHJldHVy
biB2YWw7Ci0gIH07Ci0KLSAgVXNiRGV2aWNlX0dlbmVyaWNUcmFuc2Zlck91dF9QYXJhbXMuZW5j
b2RlID0gZnVuY3Rpb24oZW5jb2RlciwgdmFsKSB7Ci0gICAgdmFyIHBhY2tlZDsKLSAgICBlbmNv
ZGVyLndyaXRlVWludDMyKFVzYkRldmljZV9HZW5lcmljVHJhbnNmZXJPdXRfUGFyYW1zLmVuY29k
ZWRTaXplKTsKLSAgICBlbmNvZGVyLndyaXRlVWludDMyKDApOwotICAgIGVuY29kZXIuZW5jb2Rl
U3RydWN0KGNvZGVjLlVpbnQ4LCB2YWwuZW5kcG9pbnROdW1iZXIpOwotICAgIGVuY29kZXIuc2tp
cCgxKTsKLSAgICBlbmNvZGVyLnNraXAoMSk7Ci0gICAgZW5jb2Rlci5za2lwKDEpOwotICAgIGVu
Y29kZXIuZW5jb2RlU3RydWN0KGNvZGVjLlVpbnQzMiwgdmFsLnRpbWVvdXQpOwotICAgIGVuY29k
ZXIuZW5jb2RlQXJyYXlQb2ludGVyKGNvZGVjLlVpbnQ4LCB2YWwuZGF0YSk7Ci0gIH07Ci0gIGZ1
bmN0aW9uIFVzYkRldmljZV9HZW5lcmljVHJhbnNmZXJPdXRfUmVzcG9uc2VQYXJhbXModmFsdWVz
KSB7Ci0gICAgdGhpcy5pbml0RGVmYXVsdHNfKCk7Ci0gICAgdGhpcy5pbml0RmllbGRzXyh2YWx1
ZXMpOwotICB9Ci0KLQotICBVc2JEZXZpY2VfR2VuZXJpY1RyYW5zZmVyT3V0X1Jlc3BvbnNlUGFy
YW1zLnByb3RvdHlwZS5pbml0RGVmYXVsdHNfID0gZnVuY3Rpb24oKSB7Ci0gICAgdGhpcy5zdGF0
dXMgPSAwOwotICB9OwotICBVc2JEZXZpY2VfR2VuZXJpY1RyYW5zZmVyT3V0X1Jlc3BvbnNlUGFy
YW1zLnByb3RvdHlwZS5pbml0RmllbGRzXyA9IGZ1bmN0aW9uKGZpZWxkcykgewotICAgIGZvcih2
YXIgZmllbGQgaW4gZmllbGRzKSB7Ci0gICAgICAgIGlmICh0aGlzLmhhc093blByb3BlcnR5KGZp
ZWxkKSkKLSAgICAgICAgICB0aGlzW2ZpZWxkXSA9IGZpZWxkc1tmaWVsZF07Ci0gICAgfQotICB9
OwotCi0gIFVzYkRldmljZV9HZW5lcmljVHJhbnNmZXJPdXRfUmVzcG9uc2VQYXJhbXMudmFsaWRh
dGUgPSBmdW5jdGlvbihtZXNzYWdlVmFsaWRhdG9yLCBvZmZzZXQpIHsKLSAgICB2YXIgZXJyOwot
ICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RIZWFkZXIob2Zmc2V0LCBj
b2RlYy5rU3RydWN0SGVhZGVyU2l6ZSk7Ci0gICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlk
YXRpb25FcnJvci5OT05FKQotICAgICAgICByZXR1cm4gZXJyOwotCi0gICAgdmFyIGtWZXJzaW9u
U2l6ZXMgPSBbCi0gICAgICB7dmVyc2lvbjogMCwgbnVtQnl0ZXM6IDE2fQotICAgIF07Ci0gICAg
ZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdFZlcnNpb24ob2Zmc2V0LCBrVmVy
c2lvblNpemVzKTsKLSAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5P
TkUpCi0gICAgICAgIHJldHVybiBlcnI7Ci0KLQotICAgIC8vIHZhbGlkYXRlIFVzYkRldmljZV9H
ZW5lcmljVHJhbnNmZXJPdXRfUmVzcG9uc2VQYXJhbXMuc3RhdHVzCi0gICAgZXJyID0gbWVzc2Fn
ZVZhbGlkYXRvci52YWxpZGF0ZUVudW0ob2Zmc2V0ICsgY29kZWMua1N0cnVjdEhlYWRlclNpemUg
KyAwLCBVc2JUcmFuc2ZlclN0YXR1cyk7Ci0gICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlk
YXRpb25FcnJvci5OT05FKQotICAgICAgICByZXR1cm4gZXJyOwotCi0gICAgcmV0dXJuIHZhbGlk
YXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORTsKLSAgfTsKLQotICBVc2JEZXZpY2VfR2VuZXJpY1Ry
YW5zZmVyT3V0X1Jlc3BvbnNlUGFyYW1zLmVuY29kZWRTaXplID0gY29kZWMua1N0cnVjdEhlYWRl
clNpemUgKyA4OwotCi0gIFVzYkRldmljZV9HZW5lcmljVHJhbnNmZXJPdXRfUmVzcG9uc2VQYXJh
bXMuZGVjb2RlID0gZnVuY3Rpb24oZGVjb2RlcikgewotICAgIHZhciBwYWNrZWQ7Ci0gICAgdmFy
IHZhbCA9IG5ldyBVc2JEZXZpY2VfR2VuZXJpY1RyYW5zZmVyT3V0X1Jlc3BvbnNlUGFyYW1zKCk7
Ci0gICAgdmFyIG51bWJlck9mQnl0ZXMgPSBkZWNvZGVyLnJlYWRVaW50MzIoKTsKLSAgICB2YXIg
dmVyc2lvbiA9IGRlY29kZXIucmVhZFVpbnQzMigpOwotICAgIHZhbC5zdGF0dXMgPSBkZWNvZGVy
LmRlY29kZVN0cnVjdChjb2RlYy5JbnQzMik7Ci0gICAgZGVjb2Rlci5za2lwKDEpOwotICAgIGRl
Y29kZXIuc2tpcCgxKTsKLSAgICBkZWNvZGVyLnNraXAoMSk7Ci0gICAgZGVjb2Rlci5za2lwKDEp
OwotICAgIHJldHVybiB2YWw7Ci0gIH07Ci0KLSAgVXNiRGV2aWNlX0dlbmVyaWNUcmFuc2Zlck91
dF9SZXNwb25zZVBhcmFtcy5lbmNvZGUgPSBmdW5jdGlvbihlbmNvZGVyLCB2YWwpIHsKLSAgICB2
YXIgcGFja2VkOwotICAgIGVuY29kZXIud3JpdGVVaW50MzIoVXNiRGV2aWNlX0dlbmVyaWNUcmFu
c2Zlck91dF9SZXNwb25zZVBhcmFtcy5lbmNvZGVkU2l6ZSk7Ci0gICAgZW5jb2Rlci53cml0ZVVp
bnQzMigwKTsKLSAgICBlbmNvZGVyLmVuY29kZVN0cnVjdChjb2RlYy5JbnQzMiwgdmFsLnN0YXR1
cyk7Ci0gICAgZW5jb2Rlci5za2lwKDEpOwotICAgIGVuY29kZXIuc2tpcCgxKTsKLSAgICBlbmNv
ZGVyLnNraXAoMSk7Ci0gICAgZW5jb2Rlci5za2lwKDEpOwotICB9OwotICBmdW5jdGlvbiBVc2JE
ZXZpY2VfSXNvY2hyb25vdXNUcmFuc2ZlckluX1BhcmFtcyh2YWx1ZXMpIHsKLSAgICB0aGlzLmlu
aXREZWZhdWx0c18oKTsKLSAgICB0aGlzLmluaXRGaWVsZHNfKHZhbHVlcyk7Ci0gIH0KLQotCi0g
IFVzYkRldmljZV9Jc29jaHJvbm91c1RyYW5zZmVySW5fUGFyYW1zLnByb3RvdHlwZS5pbml0RGVm
YXVsdHNfID0gZnVuY3Rpb24oKSB7Ci0gICAgdGhpcy5lbmRwb2ludE51bWJlciA9IDA7Ci0gICAg
dGhpcy50aW1lb3V0ID0gMDsKLSAgICB0aGlzLnBhY2tldExlbmd0aHMgPSBudWxsOwotICB9Owot
ICBVc2JEZXZpY2VfSXNvY2hyb25vdXNUcmFuc2ZlckluX1BhcmFtcy5wcm90b3R5cGUuaW5pdEZp
ZWxkc18gPSBmdW5jdGlvbihmaWVsZHMpIHsKLSAgICBmb3IodmFyIGZpZWxkIGluIGZpZWxkcykg
ewotICAgICAgICBpZiAodGhpcy5oYXNPd25Qcm9wZXJ0eShmaWVsZCkpCi0gICAgICAgICAgdGhp
c1tmaWVsZF0gPSBmaWVsZHNbZmllbGRdOwotICAgIH0KLSAgfTsKLQotICBVc2JEZXZpY2VfSXNv
Y2hyb25vdXNUcmFuc2ZlckluX1BhcmFtcy52YWxpZGF0ZSA9IGZ1bmN0aW9uKG1lc3NhZ2VWYWxp
ZGF0b3IsIG9mZnNldCkgewotICAgIHZhciBlcnI7Ci0gICAgZXJyID0gbWVzc2FnZVZhbGlkYXRv
ci52YWxpZGF0ZVN0cnVjdEhlYWRlcihvZmZzZXQsIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplKTsK
LSAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCi0gICAgICAg
IHJldHVybiBlcnI7Ci0KLSAgICB2YXIga1ZlcnNpb25TaXplcyA9IFsKLSAgICAgIHt2ZXJzaW9u
OiAwLCBudW1CeXRlczogMjR9Ci0gICAgXTsKLSAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZh
bGlkYXRlU3RydWN0VmVyc2lvbihvZmZzZXQsIGtWZXJzaW9uU2l6ZXMpOwotICAgIGlmIChlcnIg
IT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKLSAgICAgICAgcmV0dXJuIGVycjsK
LQotCi0KLSAgICAvLyB2YWxpZGF0ZSBVc2JEZXZpY2VfSXNvY2hyb25vdXNUcmFuc2ZlckluX1Bh
cmFtcy5wYWNrZXRMZW5ndGhzCi0gICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZUFy
cmF5UG9pbnRlcihvZmZzZXQgKyBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDgsIDQsIGNvZGVj
LlVpbnQzMiwgZmFsc2UsIFswXSwgMCk7Ci0gICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlk
YXRpb25FcnJvci5OT05FKQotICAgICAgICByZXR1cm4gZXJyOwotCi0KLSAgICByZXR1cm4gdmFs
aWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FOwotICB9OwotCi0gIFVzYkRldmljZV9Jc29jaHJv
bm91c1RyYW5zZmVySW5fUGFyYW1zLmVuY29kZWRTaXplID0gY29kZWMua1N0cnVjdEhlYWRlclNp
emUgKyAxNjsKLQotICBVc2JEZXZpY2VfSXNvY2hyb25vdXNUcmFuc2ZlckluX1BhcmFtcy5kZWNv
ZGUgPSBmdW5jdGlvbihkZWNvZGVyKSB7Ci0gICAgdmFyIHBhY2tlZDsKLSAgICB2YXIgdmFsID0g
bmV3IFVzYkRldmljZV9Jc29jaHJvbm91c1RyYW5zZmVySW5fUGFyYW1zKCk7Ci0gICAgdmFyIG51
bWJlck9mQnl0ZXMgPSBkZWNvZGVyLnJlYWRVaW50MzIoKTsKLSAgICB2YXIgdmVyc2lvbiA9IGRl
Y29kZXIucmVhZFVpbnQzMigpOwotICAgIHZhbC5lbmRwb2ludE51bWJlciA9IGRlY29kZXIuZGVj
b2RlU3RydWN0KGNvZGVjLlVpbnQ4KTsKLSAgICBkZWNvZGVyLnNraXAoMSk7Ci0gICAgZGVjb2Rl
ci5za2lwKDEpOwotICAgIGRlY29kZXIuc2tpcCgxKTsKLSAgICB2YWwudGltZW91dCA9IGRlY29k
ZXIuZGVjb2RlU3RydWN0KGNvZGVjLlVpbnQzMik7Ci0gICAgdmFsLnBhY2tldExlbmd0aHMgPSBk
ZWNvZGVyLmRlY29kZUFycmF5UG9pbnRlcihjb2RlYy5VaW50MzIpOwotICAgIHJldHVybiB2YWw7
Ci0gIH07Ci0KLSAgVXNiRGV2aWNlX0lzb2Nocm9ub3VzVHJhbnNmZXJJbl9QYXJhbXMuZW5jb2Rl
ID0gZnVuY3Rpb24oZW5jb2RlciwgdmFsKSB7Ci0gICAgdmFyIHBhY2tlZDsKLSAgICBlbmNvZGVy
LndyaXRlVWludDMyKFVzYkRldmljZV9Jc29jaHJvbm91c1RyYW5zZmVySW5fUGFyYW1zLmVuY29k
ZWRTaXplKTsKLSAgICBlbmNvZGVyLndyaXRlVWludDMyKDApOwotICAgIGVuY29kZXIuZW5jb2Rl
U3RydWN0KGNvZGVjLlVpbnQ4LCB2YWwuZW5kcG9pbnROdW1iZXIpOwotICAgIGVuY29kZXIuc2tp
cCgxKTsKLSAgICBlbmNvZGVyLnNraXAoMSk7Ci0gICAgZW5jb2Rlci5za2lwKDEpOwotICAgIGVu
Y29kZXIuZW5jb2RlU3RydWN0KGNvZGVjLlVpbnQzMiwgdmFsLnRpbWVvdXQpOwotICAgIGVuY29k
ZXIuZW5jb2RlQXJyYXlQb2ludGVyKGNvZGVjLlVpbnQzMiwgdmFsLnBhY2tldExlbmd0aHMpOwot
ICB9OwotICBmdW5jdGlvbiBVc2JEZXZpY2VfSXNvY2hyb25vdXNUcmFuc2ZlckluX1Jlc3BvbnNl
UGFyYW1zKHZhbHVlcykgewotICAgIHRoaXMuaW5pdERlZmF1bHRzXygpOwotICAgIHRoaXMuaW5p
dEZpZWxkc18odmFsdWVzKTsKLSAgfQotCi0KLSAgVXNiRGV2aWNlX0lzb2Nocm9ub3VzVHJhbnNm
ZXJJbl9SZXNwb25zZVBhcmFtcy5wcm90b3R5cGUuaW5pdERlZmF1bHRzXyA9IGZ1bmN0aW9uKCkg
ewotICAgIHRoaXMuZGF0YSA9IG51bGw7Ci0gICAgdGhpcy5wYWNrZXRzID0gbnVsbDsKLSAgfTsK
LSAgVXNiRGV2aWNlX0lzb2Nocm9ub3VzVHJhbnNmZXJJbl9SZXNwb25zZVBhcmFtcy5wcm90b3R5
cGUuaW5pdEZpZWxkc18gPSBmdW5jdGlvbihmaWVsZHMpIHsKLSAgICBmb3IodmFyIGZpZWxkIGlu
IGZpZWxkcykgewotICAgICAgICBpZiAodGhpcy5oYXNPd25Qcm9wZXJ0eShmaWVsZCkpCi0gICAg
ICAgICAgdGhpc1tmaWVsZF0gPSBmaWVsZHNbZmllbGRdOwotICAgIH0KLSAgfTsKLQotICBVc2JE
ZXZpY2VfSXNvY2hyb25vdXNUcmFuc2ZlckluX1Jlc3BvbnNlUGFyYW1zLnZhbGlkYXRlID0gZnVu
Y3Rpb24obWVzc2FnZVZhbGlkYXRvciwgb2Zmc2V0KSB7Ci0gICAgdmFyIGVycjsKLSAgICBlcnIg
PSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0SGVhZGVyKG9mZnNldCwgY29kZWMua1N0
cnVjdEhlYWRlclNpemUpOwotICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJy
b3IuTk9ORSkKLSAgICAgICAgcmV0dXJuIGVycjsKLQotICAgIHZhciBrVmVyc2lvblNpemVzID0g
WwotICAgICAge3ZlcnNpb246IDAsIG51bUJ5dGVzOiAyNH0KLSAgICBdOwotICAgIGVyciA9IG1l
c3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RWZXJzaW9uKG9mZnNldCwga1ZlcnNpb25TaXpl
cyk7Ci0gICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQotICAg
ICAgICByZXR1cm4gZXJyOwotCi0KLSAgICAvLyB2YWxpZGF0ZSBVc2JEZXZpY2VfSXNvY2hyb25v
dXNUcmFuc2ZlckluX1Jlc3BvbnNlUGFyYW1zLmRhdGEKLSAgICBlcnIgPSBtZXNzYWdlVmFsaWRh
dG9yLnZhbGlkYXRlQXJyYXlQb2ludGVyKG9mZnNldCArIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXpl
ICsgMCwgMSwgY29kZWMuVWludDgsIGZhbHNlLCBbMF0sIDApOwotICAgIGlmIChlcnIgIT09IHZh
bGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKLSAgICAgICAgcmV0dXJuIGVycjsKLQotCi0g
ICAgLy8gdmFsaWRhdGUgVXNiRGV2aWNlX0lzb2Nocm9ub3VzVHJhbnNmZXJJbl9SZXNwb25zZVBh
cmFtcy5wYWNrZXRzCi0gICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZUFycmF5UG9p
bnRlcihvZmZzZXQgKyBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDgsIDgsIG5ldyBjb2RlYy5Q
b2ludGVyVG8oVXNiSXNvY2hyb25vdXNQYWNrZXQpLCBmYWxzZSwgWzBdLCAwKTsKLSAgICBpZiAo
ZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCi0gICAgICAgIHJldHVybiBl
cnI7Ci0KLSAgICByZXR1cm4gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FOwotICB9Owot
Ci0gIFVzYkRldmljZV9Jc29jaHJvbm91c1RyYW5zZmVySW5fUmVzcG9uc2VQYXJhbXMuZW5jb2Rl
ZFNpemUgPSBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDE2OwotCi0gIFVzYkRldmljZV9Jc29j
aHJvbm91c1RyYW5zZmVySW5fUmVzcG9uc2VQYXJhbXMuZGVjb2RlID0gZnVuY3Rpb24oZGVjb2Rl
cikgewotICAgIHZhciBwYWNrZWQ7Ci0gICAgdmFyIHZhbCA9IG5ldyBVc2JEZXZpY2VfSXNvY2hy
b25vdXNUcmFuc2ZlckluX1Jlc3BvbnNlUGFyYW1zKCk7Ci0gICAgdmFyIG51bWJlck9mQnl0ZXMg
PSBkZWNvZGVyLnJlYWRVaW50MzIoKTsKLSAgICB2YXIgdmVyc2lvbiA9IGRlY29kZXIucmVhZFVp
bnQzMigpOwotICAgIHZhbC5kYXRhID0gZGVjb2Rlci5kZWNvZGVBcnJheVBvaW50ZXIoY29kZWMu
VWludDgpOwotICAgIHZhbC5wYWNrZXRzID0gZGVjb2Rlci5kZWNvZGVBcnJheVBvaW50ZXIobmV3
IGNvZGVjLlBvaW50ZXJUbyhVc2JJc29jaHJvbm91c1BhY2tldCkpOwotICAgIHJldHVybiB2YWw7
Ci0gIH07Ci0KLSAgVXNiRGV2aWNlX0lzb2Nocm9ub3VzVHJhbnNmZXJJbl9SZXNwb25zZVBhcmFt
cy5lbmNvZGUgPSBmdW5jdGlvbihlbmNvZGVyLCB2YWwpIHsKLSAgICB2YXIgcGFja2VkOwotICAg
IGVuY29kZXIud3JpdGVVaW50MzIoVXNiRGV2aWNlX0lzb2Nocm9ub3VzVHJhbnNmZXJJbl9SZXNw
b25zZVBhcmFtcy5lbmNvZGVkU2l6ZSk7Ci0gICAgZW5jb2Rlci53cml0ZVVpbnQzMigwKTsKLSAg
ICBlbmNvZGVyLmVuY29kZUFycmF5UG9pbnRlcihjb2RlYy5VaW50OCwgdmFsLmRhdGEpOwotICAg
IGVuY29kZXIuZW5jb2RlQXJyYXlQb2ludGVyKG5ldyBjb2RlYy5Qb2ludGVyVG8oVXNiSXNvY2hy
b25vdXNQYWNrZXQpLCB2YWwucGFja2V0cyk7Ci0gIH07Ci0gIGZ1bmN0aW9uIFVzYkRldmljZV9J
c29jaHJvbm91c1RyYW5zZmVyT3V0X1BhcmFtcyh2YWx1ZXMpIHsKLSAgICB0aGlzLmluaXREZWZh
dWx0c18oKTsKLSAgICB0aGlzLmluaXRGaWVsZHNfKHZhbHVlcyk7Ci0gIH0KLQotCi0gIFVzYkRl
dmljZV9Jc29jaHJvbm91c1RyYW5zZmVyT3V0X1BhcmFtcy5wcm90b3R5cGUuaW5pdERlZmF1bHRz
XyA9IGZ1bmN0aW9uKCkgewotICAgIHRoaXMuZW5kcG9pbnROdW1iZXIgPSAwOwotICAgIHRoaXMu
dGltZW91dCA9IDA7Ci0gICAgdGhpcy5kYXRhID0gbnVsbDsKLSAgICB0aGlzLnBhY2tldExlbmd0
aHMgPSBudWxsOwotICB9OwotICBVc2JEZXZpY2VfSXNvY2hyb25vdXNUcmFuc2Zlck91dF9QYXJh
bXMucHJvdG90eXBlLmluaXRGaWVsZHNfID0gZnVuY3Rpb24oZmllbGRzKSB7Ci0gICAgZm9yKHZh
ciBmaWVsZCBpbiBmaWVsZHMpIHsKLSAgICAgICAgaWYgKHRoaXMuaGFzT3duUHJvcGVydHkoZmll
bGQpKQotICAgICAgICAgIHRoaXNbZmllbGRdID0gZmllbGRzW2ZpZWxkXTsKLSAgICB9Ci0gIH07
Ci0KLSAgVXNiRGV2aWNlX0lzb2Nocm9ub3VzVHJhbnNmZXJPdXRfUGFyYW1zLnZhbGlkYXRlID0g
ZnVuY3Rpb24obWVzc2FnZVZhbGlkYXRvciwgb2Zmc2V0KSB7Ci0gICAgdmFyIGVycjsKLSAgICBl
cnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0SGVhZGVyKG9mZnNldCwgY29kZWMu
a1N0cnVjdEhlYWRlclNpemUpOwotICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9u
RXJyb3IuTk9ORSkKLSAgICAgICAgcmV0dXJuIGVycjsKLQotICAgIHZhciBrVmVyc2lvblNpemVz
ID0gWwotICAgICAge3ZlcnNpb246IDAsIG51bUJ5dGVzOiAzMn0KLSAgICBdOwotICAgIGVyciA9
IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RWZXJzaW9uKG9mZnNldCwga1ZlcnNpb25T
aXplcyk7Ci0gICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQot
ICAgICAgICByZXR1cm4gZXJyOwotCi0KLQotICAgIC8vIHZhbGlkYXRlIFVzYkRldmljZV9Jc29j
aHJvbm91c1RyYW5zZmVyT3V0X1BhcmFtcy5kYXRhCi0gICAgZXJyID0gbWVzc2FnZVZhbGlkYXRv
ci52YWxpZGF0ZUFycmF5UG9pbnRlcihvZmZzZXQgKyBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSAr
IDgsIDEsIGNvZGVjLlVpbnQ4LCBmYWxzZSwgWzBdLCAwKTsKLSAgICBpZiAoZXJyICE9PSB2YWxp
ZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCi0gICAgICAgIHJldHVybiBlcnI7Ci0KLQotICAg
IC8vIHZhbGlkYXRlIFVzYkRldmljZV9Jc29jaHJvbm91c1RyYW5zZmVyT3V0X1BhcmFtcy5wYWNr
ZXRMZW5ndGhzCi0gICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZUFycmF5UG9pbnRl
cihvZmZzZXQgKyBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDE2LCA0LCBjb2RlYy5VaW50MzIs
IGZhbHNlLCBbMF0sIDApOwotICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJy
b3IuTk9ORSkKLSAgICAgICAgcmV0dXJuIGVycjsKLQotCi0gICAgcmV0dXJuIHZhbGlkYXRvci52
YWxpZGF0aW9uRXJyb3IuTk9ORTsKLSAgfTsKLQotICBVc2JEZXZpY2VfSXNvY2hyb25vdXNUcmFu
c2Zlck91dF9QYXJhbXMuZW5jb2RlZFNpemUgPSBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDI0
OwotCi0gIFVzYkRldmljZV9Jc29jaHJvbm91c1RyYW5zZmVyT3V0X1BhcmFtcy5kZWNvZGUgPSBm
dW5jdGlvbihkZWNvZGVyKSB7Ci0gICAgdmFyIHBhY2tlZDsKLSAgICB2YXIgdmFsID0gbmV3IFVz
YkRldmljZV9Jc29jaHJvbm91c1RyYW5zZmVyT3V0X1BhcmFtcygpOwotICAgIHZhciBudW1iZXJP
ZkJ5dGVzID0gZGVjb2Rlci5yZWFkVWludDMyKCk7Ci0gICAgdmFyIHZlcnNpb24gPSBkZWNvZGVy
LnJlYWRVaW50MzIoKTsKLSAgICB2YWwuZW5kcG9pbnROdW1iZXIgPSBkZWNvZGVyLmRlY29kZVN0
cnVjdChjb2RlYy5VaW50OCk7Ci0gICAgZGVjb2Rlci5za2lwKDEpOwotICAgIGRlY29kZXIuc2tp
cCgxKTsKLSAgICBkZWNvZGVyLnNraXAoMSk7Ci0gICAgdmFsLnRpbWVvdXQgPSBkZWNvZGVyLmRl
Y29kZVN0cnVjdChjb2RlYy5VaW50MzIpOwotICAgIHZhbC5kYXRhID0gZGVjb2Rlci5kZWNvZGVB
cnJheVBvaW50ZXIoY29kZWMuVWludDgpOwotICAgIHZhbC5wYWNrZXRMZW5ndGhzID0gZGVjb2Rl
ci5kZWNvZGVBcnJheVBvaW50ZXIoY29kZWMuVWludDMyKTsKLSAgICByZXR1cm4gdmFsOwotICB9
OwotCi0gIFVzYkRldmljZV9Jc29jaHJvbm91c1RyYW5zZmVyT3V0X1BhcmFtcy5lbmNvZGUgPSBm
dW5jdGlvbihlbmNvZGVyLCB2YWwpIHsKLSAgICB2YXIgcGFja2VkOwotICAgIGVuY29kZXIud3Jp
dGVVaW50MzIoVXNiRGV2aWNlX0lzb2Nocm9ub3VzVHJhbnNmZXJPdXRfUGFyYW1zLmVuY29kZWRT
aXplKTsKLSAgICBlbmNvZGVyLndyaXRlVWludDMyKDApOwotICAgIGVuY29kZXIuZW5jb2RlU3Ry
dWN0KGNvZGVjLlVpbnQ4LCB2YWwuZW5kcG9pbnROdW1iZXIpOwotICAgIGVuY29kZXIuc2tpcCgx
KTsKLSAgICBlbmNvZGVyLnNraXAoMSk7Ci0gICAgZW5jb2Rlci5za2lwKDEpOwotICAgIGVuY29k
ZXIuZW5jb2RlU3RydWN0KGNvZGVjLlVpbnQzMiwgdmFsLnRpbWVvdXQpOwotICAgIGVuY29kZXIu
ZW5jb2RlQXJyYXlQb2ludGVyKGNvZGVjLlVpbnQ4LCB2YWwuZGF0YSk7Ci0gICAgZW5jb2Rlci5l
bmNvZGVBcnJheVBvaW50ZXIoY29kZWMuVWludDMyLCB2YWwucGFja2V0TGVuZ3Rocyk7Ci0gIH07
Ci0gIGZ1bmN0aW9uIFVzYkRldmljZV9Jc29jaHJvbm91c1RyYW5zZmVyT3V0X1Jlc3BvbnNlUGFy
YW1zKHZhbHVlcykgewotICAgIHRoaXMuaW5pdERlZmF1bHRzXygpOwotICAgIHRoaXMuaW5pdEZp
ZWxkc18odmFsdWVzKTsKLSAgfQotCi0KLSAgVXNiRGV2aWNlX0lzb2Nocm9ub3VzVHJhbnNmZXJP
dXRfUmVzcG9uc2VQYXJhbXMucHJvdG90eXBlLmluaXREZWZhdWx0c18gPSBmdW5jdGlvbigpIHsK
LSAgICB0aGlzLnBhY2tldHMgPSBudWxsOwotICB9OwotICBVc2JEZXZpY2VfSXNvY2hyb25vdXNU
cmFuc2Zlck91dF9SZXNwb25zZVBhcmFtcy5wcm90b3R5cGUuaW5pdEZpZWxkc18gPSBmdW5jdGlv
bihmaWVsZHMpIHsKLSAgICBmb3IodmFyIGZpZWxkIGluIGZpZWxkcykgewotICAgICAgICBpZiAo
dGhpcy5oYXNPd25Qcm9wZXJ0eShmaWVsZCkpCi0gICAgICAgICAgdGhpc1tmaWVsZF0gPSBmaWVs
ZHNbZmllbGRdOwotICAgIH0KLSAgfTsKLQotICBVc2JEZXZpY2VfSXNvY2hyb25vdXNUcmFuc2Zl
ck91dF9SZXNwb25zZVBhcmFtcy52YWxpZGF0ZSA9IGZ1bmN0aW9uKG1lc3NhZ2VWYWxpZGF0b3Is
IG9mZnNldCkgewotICAgIHZhciBlcnI7Ci0gICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxp
ZGF0ZVN0cnVjdEhlYWRlcihvZmZzZXQsIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplKTsKLSAgICBp
ZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCi0gICAgICAgIHJldHVy
biBlcnI7Ci0KLSAgICB2YXIga1ZlcnNpb25TaXplcyA9IFsKLSAgICAgIHt2ZXJzaW9uOiAwLCBu
dW1CeXRlczogMTZ9Ci0gICAgXTsKLSAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRl
U3RydWN0VmVyc2lvbihvZmZzZXQsIGtWZXJzaW9uU2l6ZXMpOwotICAgIGlmIChlcnIgIT09IHZh
bGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKLSAgICAgICAgcmV0dXJuIGVycjsKLQotCi0g
ICAgLy8gdmFsaWRhdGUgVXNiRGV2aWNlX0lzb2Nocm9ub3VzVHJhbnNmZXJPdXRfUmVzcG9uc2VQ
YXJhbXMucGFja2V0cwotICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVBcnJheVBv
aW50ZXIob2Zmc2V0ICsgY29kZWMua1N0cnVjdEhlYWRlclNpemUgKyAwLCA4LCBuZXcgY29kZWMu
UG9pbnRlclRvKFVzYklzb2Nocm9ub3VzUGFja2V0KSwgZmFsc2UsIFswXSwgMCk7Ci0gICAgaWYg
KGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQotICAgICAgICByZXR1cm4g
ZXJyOwotCi0gICAgcmV0dXJuIHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORTsKLSAgfTsK
LQotICBVc2JEZXZpY2VfSXNvY2hyb25vdXNUcmFuc2Zlck91dF9SZXNwb25zZVBhcmFtcy5lbmNv
ZGVkU2l6ZSA9IGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgODsKLQotICBVc2JEZXZpY2VfSXNv
Y2hyb25vdXNUcmFuc2Zlck91dF9SZXNwb25zZVBhcmFtcy5kZWNvZGUgPSBmdW5jdGlvbihkZWNv
ZGVyKSB7Ci0gICAgdmFyIHBhY2tlZDsKLSAgICB2YXIgdmFsID0gbmV3IFVzYkRldmljZV9Jc29j
aHJvbm91c1RyYW5zZmVyT3V0X1Jlc3BvbnNlUGFyYW1zKCk7Ci0gICAgdmFyIG51bWJlck9mQnl0
ZXMgPSBkZWNvZGVyLnJlYWRVaW50MzIoKTsKLSAgICB2YXIgdmVyc2lvbiA9IGRlY29kZXIucmVh
ZFVpbnQzMigpOwotICAgIHZhbC5wYWNrZXRzID0gZGVjb2Rlci5kZWNvZGVBcnJheVBvaW50ZXIo
bmV3IGNvZGVjLlBvaW50ZXJUbyhVc2JJc29jaHJvbm91c1BhY2tldCkpOwotICAgIHJldHVybiB2
YWw7Ci0gIH07Ci0KLSAgVXNiRGV2aWNlX0lzb2Nocm9ub3VzVHJhbnNmZXJPdXRfUmVzcG9uc2VQ
YXJhbXMuZW5jb2RlID0gZnVuY3Rpb24oZW5jb2RlciwgdmFsKSB7Ci0gICAgdmFyIHBhY2tlZDsK
LSAgICBlbmNvZGVyLndyaXRlVWludDMyKFVzYkRldmljZV9Jc29jaHJvbm91c1RyYW5zZmVyT3V0
X1Jlc3BvbnNlUGFyYW1zLmVuY29kZWRTaXplKTsKLSAgICBlbmNvZGVyLndyaXRlVWludDMyKDAp
OwotICAgIGVuY29kZXIuZW5jb2RlQXJyYXlQb2ludGVyKG5ldyBjb2RlYy5Qb2ludGVyVG8oVXNi
SXNvY2hyb25vdXNQYWNrZXQpLCB2YWwucGFja2V0cyk7Ci0gIH07Ci0gIGZ1bmN0aW9uIFVzYkRl
dmljZUNsaWVudF9PbkRldmljZU9wZW5lZF9QYXJhbXModmFsdWVzKSB7Ci0gICAgdGhpcy5pbml0
RGVmYXVsdHNfKCk7Ci0gICAgdGhpcy5pbml0RmllbGRzXyh2YWx1ZXMpOwotICB9Ci0KLQotICBV
c2JEZXZpY2VDbGllbnRfT25EZXZpY2VPcGVuZWRfUGFyYW1zLnByb3RvdHlwZS5pbml0RGVmYXVs
dHNfID0gZnVuY3Rpb24oKSB7Ci0gIH07Ci0gIFVzYkRldmljZUNsaWVudF9PbkRldmljZU9wZW5l
ZF9QYXJhbXMucHJvdG90eXBlLmluaXRGaWVsZHNfID0gZnVuY3Rpb24oZmllbGRzKSB7Ci0gICAg
Zm9yKHZhciBmaWVsZCBpbiBmaWVsZHMpIHsKLSAgICAgICAgaWYgKHRoaXMuaGFzT3duUHJvcGVy
dHkoZmllbGQpKQotICAgICAgICAgIHRoaXNbZmllbGRdID0gZmllbGRzW2ZpZWxkXTsKLSAgICB9
Ci0gIH07Ci0KLSAgVXNiRGV2aWNlQ2xpZW50X09uRGV2aWNlT3BlbmVkX1BhcmFtcy52YWxpZGF0
ZSA9IGZ1bmN0aW9uKG1lc3NhZ2VWYWxpZGF0b3IsIG9mZnNldCkgewotICAgIHZhciBlcnI7Ci0g
ICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdEhlYWRlcihvZmZzZXQsIGNv
ZGVjLmtTdHJ1Y3RIZWFkZXJTaXplKTsKLSAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRh
dGlvbkVycm9yLk5PTkUpCi0gICAgICAgIHJldHVybiBlcnI7Ci0KLSAgICB2YXIga1ZlcnNpb25T
aXplcyA9IFsKLSAgICAgIHt2ZXJzaW9uOiAwLCBudW1CeXRlczogOH0KLSAgICBdOwotICAgIGVy
ciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RWZXJzaW9uKG9mZnNldCwga1ZlcnNp
b25TaXplcyk7Ci0gICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05F
KQotICAgICAgICByZXR1cm4gZXJyOwotCi0gICAgcmV0dXJuIHZhbGlkYXRvci52YWxpZGF0aW9u
RXJyb3IuTk9ORTsKLSAgfTsKLQotICBVc2JEZXZpY2VDbGllbnRfT25EZXZpY2VPcGVuZWRfUGFy
YW1zLmVuY29kZWRTaXplID0gY29kZWMua1N0cnVjdEhlYWRlclNpemUgKyAwOwotCi0gIFVzYkRl
dmljZUNsaWVudF9PbkRldmljZU9wZW5lZF9QYXJhbXMuZGVjb2RlID0gZnVuY3Rpb24oZGVjb2Rl
cikgewotICAgIHZhciBwYWNrZWQ7Ci0gICAgdmFyIHZhbCA9IG5ldyBVc2JEZXZpY2VDbGllbnRf
T25EZXZpY2VPcGVuZWRfUGFyYW1zKCk7Ci0gICAgdmFyIG51bWJlck9mQnl0ZXMgPSBkZWNvZGVy
LnJlYWRVaW50MzIoKTsKLSAgICB2YXIgdmVyc2lvbiA9IGRlY29kZXIucmVhZFVpbnQzMigpOwot
ICAgIHJldHVybiB2YWw7Ci0gIH07Ci0KLSAgVXNiRGV2aWNlQ2xpZW50X09uRGV2aWNlT3BlbmVk
X1BhcmFtcy5lbmNvZGUgPSBmdW5jdGlvbihlbmNvZGVyLCB2YWwpIHsKLSAgICB2YXIgcGFja2Vk
OwotICAgIGVuY29kZXIud3JpdGVVaW50MzIoVXNiRGV2aWNlQ2xpZW50X09uRGV2aWNlT3BlbmVk
X1BhcmFtcy5lbmNvZGVkU2l6ZSk7Ci0gICAgZW5jb2Rlci53cml0ZVVpbnQzMigwKTsKLSAgfTsK
LSAgZnVuY3Rpb24gVXNiRGV2aWNlQ2xpZW50X09uRGV2aWNlQ2xvc2VkX1BhcmFtcyh2YWx1ZXMp
IHsKLSAgICB0aGlzLmluaXREZWZhdWx0c18oKTsKLSAgICB0aGlzLmluaXRGaWVsZHNfKHZhbHVl
cyk7Ci0gIH0KLQotCi0gIFVzYkRldmljZUNsaWVudF9PbkRldmljZUNsb3NlZF9QYXJhbXMucHJv
dG90eXBlLmluaXREZWZhdWx0c18gPSBmdW5jdGlvbigpIHsKLSAgfTsKLSAgVXNiRGV2aWNlQ2xp
ZW50X09uRGV2aWNlQ2xvc2VkX1BhcmFtcy5wcm90b3R5cGUuaW5pdEZpZWxkc18gPSBmdW5jdGlv
bihmaWVsZHMpIHsKLSAgICBmb3IodmFyIGZpZWxkIGluIGZpZWxkcykgewotICAgICAgICBpZiAo
dGhpcy5oYXNPd25Qcm9wZXJ0eShmaWVsZCkpCi0gICAgICAgICAgdGhpc1tmaWVsZF0gPSBmaWVs
ZHNbZmllbGRdOwotICAgIH0KLSAgfTsKLQotICBVc2JEZXZpY2VDbGllbnRfT25EZXZpY2VDbG9z
ZWRfUGFyYW1zLnZhbGlkYXRlID0gZnVuY3Rpb24obWVzc2FnZVZhbGlkYXRvciwgb2Zmc2V0KSB7
Ci0gICAgdmFyIGVycjsKLSAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0
SGVhZGVyKG9mZnNldCwgY29kZWMua1N0cnVjdEhlYWRlclNpemUpOwotICAgIGlmIChlcnIgIT09
IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKLSAgICAgICAgcmV0dXJuIGVycjsKLQot
ICAgIHZhciBrVmVyc2lvblNpemVzID0gWwotICAgICAge3ZlcnNpb246IDAsIG51bUJ5dGVzOiA4
fQotICAgIF07Ci0gICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdFZlcnNp
b24ob2Zmc2V0LCBrVmVyc2lvblNpemVzKTsKLSAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFs
aWRhdGlvbkVycm9yLk5PTkUpCi0gICAgICAgIHJldHVybiBlcnI7Ci0KLSAgICByZXR1cm4gdmFs
aWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FOwotICB9OwotCi0gIFVzYkRldmljZUNsaWVudF9P
bkRldmljZUNsb3NlZF9QYXJhbXMuZW5jb2RlZFNpemUgPSBjb2RlYy5rU3RydWN0SGVhZGVyU2l6
ZSArIDA7Ci0KLSAgVXNiRGV2aWNlQ2xpZW50X09uRGV2aWNlQ2xvc2VkX1BhcmFtcy5kZWNvZGUg
PSBmdW5jdGlvbihkZWNvZGVyKSB7Ci0gICAgdmFyIHBhY2tlZDsKLSAgICB2YXIgdmFsID0gbmV3
IFVzYkRldmljZUNsaWVudF9PbkRldmljZUNsb3NlZF9QYXJhbXMoKTsKLSAgICB2YXIgbnVtYmVy
T2ZCeXRlcyA9IGRlY29kZXIucmVhZFVpbnQzMigpOwotICAgIHZhciB2ZXJzaW9uID0gZGVjb2Rl
ci5yZWFkVWludDMyKCk7Ci0gICAgcmV0dXJuIHZhbDsKLSAgfTsKLQotICBVc2JEZXZpY2VDbGll
bnRfT25EZXZpY2VDbG9zZWRfUGFyYW1zLmVuY29kZSA9IGZ1bmN0aW9uKGVuY29kZXIsIHZhbCkg
ewotICAgIHZhciBwYWNrZWQ7Ci0gICAgZW5jb2Rlci53cml0ZVVpbnQzMihVc2JEZXZpY2VDbGll
bnRfT25EZXZpY2VDbG9zZWRfUGFyYW1zLmVuY29kZWRTaXplKTsKLSAgICBlbmNvZGVyLndyaXRl
VWludDMyKDApOwotICB9OwotICB2YXIga1VzYkRldmljZV9PcGVuX05hbWUgPSAwOwotICB2YXIg
a1VzYkRldmljZV9DbG9zZV9OYW1lID0gMTsKLSAgdmFyIGtVc2JEZXZpY2VfU2V0Q29uZmlndXJh
dGlvbl9OYW1lID0gMjsKLSAgdmFyIGtVc2JEZXZpY2VfQ2xhaW1JbnRlcmZhY2VfTmFtZSA9IDM7
Ci0gIHZhciBrVXNiRGV2aWNlX1JlbGVhc2VJbnRlcmZhY2VfTmFtZSA9IDQ7Ci0gIHZhciBrVXNi
RGV2aWNlX1NldEludGVyZmFjZUFsdGVybmF0ZVNldHRpbmdfTmFtZSA9IDU7Ci0gIHZhciBrVXNi
RGV2aWNlX1Jlc2V0X05hbWUgPSA2OwotICB2YXIga1VzYkRldmljZV9DbGVhckhhbHRfTmFtZSA9
IDc7Ci0gIHZhciBrVXNiRGV2aWNlX0NvbnRyb2xUcmFuc2ZlckluX05hbWUgPSA4OwotICB2YXIg
a1VzYkRldmljZV9Db250cm9sVHJhbnNmZXJPdXRfTmFtZSA9IDk7Ci0gIHZhciBrVXNiRGV2aWNl
X0dlbmVyaWNUcmFuc2ZlckluX05hbWUgPSAxMDsKLSAgdmFyIGtVc2JEZXZpY2VfR2VuZXJpY1Ry
YW5zZmVyT3V0X05hbWUgPSAxMTsKLSAgdmFyIGtVc2JEZXZpY2VfSXNvY2hyb25vdXNUcmFuc2Zl
ckluX05hbWUgPSAxMjsKLSAgdmFyIGtVc2JEZXZpY2VfSXNvY2hyb25vdXNUcmFuc2Zlck91dF9O
YW1lID0gMTM7Ci0KLSAgZnVuY3Rpb24gVXNiRGV2aWNlUHRyKGhhbmRsZU9yUHRySW5mbykgewot
ICAgIHRoaXMucHRyID0gbmV3IGJpbmRpbmdzLkludGVyZmFjZVB0ckNvbnRyb2xsZXIoVXNiRGV2
aWNlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aGFuZGxlT3JQdHJJbmZvKTsKLSAgfQotCi0gIGZ1bmN0aW9uIFVzYkRldmljZUFzc29jaWF0ZWRQ
dHIoYXNzb2NpYXRlZEludGVyZmFjZVB0ckluZm8pIHsKLSAgICB0aGlzLnB0ciA9IG5ldyBhc3Nv
Y2lhdGVkQmluZGluZ3MuQXNzb2NpYXRlZEludGVyZmFjZVB0ckNvbnRyb2xsZXIoCi0gICAgICAg
IFVzYkRldmljZSwgYXNzb2NpYXRlZEludGVyZmFjZVB0ckluZm8pOwotICB9Ci0KLSAgVXNiRGV2
aWNlQXNzb2NpYXRlZFB0ci5wcm90b3R5cGUgPQotICAgICAgT2JqZWN0LmNyZWF0ZShVc2JEZXZp
Y2VQdHIucHJvdG90eXBlKTsKLSAgVXNiRGV2aWNlQXNzb2NpYXRlZFB0ci5wcm90b3R5cGUuY29u
c3RydWN0b3IgPQotICAgICAgVXNiRGV2aWNlQXNzb2NpYXRlZFB0cjsKLQotICBmdW5jdGlvbiBV
c2JEZXZpY2VQcm94eShyZWNlaXZlcikgewotICAgIHRoaXMucmVjZWl2ZXJfID0gcmVjZWl2ZXI7
Ci0gIH0KLSAgVXNiRGV2aWNlUHRyLnByb3RvdHlwZS5vcGVuID0gZnVuY3Rpb24oKSB7Ci0gICAg
cmV0dXJuIFVzYkRldmljZVByb3h5LnByb3RvdHlwZS5vcGVuCi0gICAgICAgIC5hcHBseSh0aGlz
LnB0ci5nZXRQcm94eSgpLCBhcmd1bWVudHMpOwotICB9OwotCi0gIFVzYkRldmljZVByb3h5LnBy
b3RvdHlwZS5vcGVuID0gZnVuY3Rpb24oKSB7Ci0gICAgdmFyIHBhcmFtc18gPSBuZXcgVXNiRGV2
aWNlX09wZW5fUGFyYW1zKCk7Ci0gICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29s
dmUsIHJlamVjdCkgewotICAgICAgdmFyIGJ1aWxkZXIgPSBuZXcgY29kZWMuTWVzc2FnZVYxQnVp
bGRlcigKLSAgICAgICAgICBrVXNiRGV2aWNlX09wZW5fTmFtZSwKLSAgICAgICAgICBjb2RlYy5h
bGlnbihVc2JEZXZpY2VfT3Blbl9QYXJhbXMuZW5jb2RlZFNpemUpLAotICAgICAgICAgIGNvZGVj
LmtNZXNzYWdlRXhwZWN0c1Jlc3BvbnNlLCAwKTsKLSAgICAgIGJ1aWxkZXIuZW5jb2RlU3RydWN0
KFVzYkRldmljZV9PcGVuX1BhcmFtcywgcGFyYW1zXyk7Ci0gICAgICB2YXIgbWVzc2FnZSA9IGJ1
aWxkZXIuZmluaXNoKCk7Ci0gICAgICB0aGlzLnJlY2VpdmVyXy5hY2NlcHRBbmRFeHBlY3RSZXNw
b25zZShtZXNzYWdlKS50aGVuKGZ1bmN0aW9uKG1lc3NhZ2UpIHsKLSAgICAgICAgdmFyIHJlYWRl
ciA9IG5ldyBjb2RlYy5NZXNzYWdlUmVhZGVyKG1lc3NhZ2UpOwotICAgICAgICB2YXIgcmVzcG9u
c2VQYXJhbXMgPQotICAgICAgICAgICAgcmVhZGVyLmRlY29kZVN0cnVjdChVc2JEZXZpY2VfT3Bl
bl9SZXNwb25zZVBhcmFtcyk7Ci0gICAgICAgIHJlc29sdmUocmVzcG9uc2VQYXJhbXMpOwotICAg
ICAgfSkuY2F0Y2goZnVuY3Rpb24ocmVzdWx0KSB7Ci0gICAgICAgIHJlamVjdChFcnJvcigiQ29u
bmVjdGlvbiBlcnJvcjogIiArIHJlc3VsdCkpOwotICAgICAgfSk7Ci0gICAgfS5iaW5kKHRoaXMp
KTsKLSAgfTsKLSAgVXNiRGV2aWNlUHRyLnByb3RvdHlwZS5jbG9zZSA9IGZ1bmN0aW9uKCkgewot
ICAgIHJldHVybiBVc2JEZXZpY2VQcm94eS5wcm90b3R5cGUuY2xvc2UKLSAgICAgICAgLmFwcGx5
KHRoaXMucHRyLmdldFByb3h5KCksIGFyZ3VtZW50cyk7Ci0gIH07Ci0KLSAgVXNiRGV2aWNlUHJv
eHkucHJvdG90eXBlLmNsb3NlID0gZnVuY3Rpb24oKSB7Ci0gICAgdmFyIHBhcmFtc18gPSBuZXcg
VXNiRGV2aWNlX0Nsb3NlX1BhcmFtcygpOwotICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlv
bihyZXNvbHZlLCByZWplY3QpIHsKLSAgICAgIHZhciBidWlsZGVyID0gbmV3IGNvZGVjLk1lc3Nh
Z2VWMUJ1aWxkZXIoCi0gICAgICAgICAga1VzYkRldmljZV9DbG9zZV9OYW1lLAotICAgICAgICAg
IGNvZGVjLmFsaWduKFVzYkRldmljZV9DbG9zZV9QYXJhbXMuZW5jb2RlZFNpemUpLAotICAgICAg
ICAgIGNvZGVjLmtNZXNzYWdlRXhwZWN0c1Jlc3BvbnNlLCAwKTsKLSAgICAgIGJ1aWxkZXIuZW5j
b2RlU3RydWN0KFVzYkRldmljZV9DbG9zZV9QYXJhbXMsIHBhcmFtc18pOwotICAgICAgdmFyIG1l
c3NhZ2UgPSBidWlsZGVyLmZpbmlzaCgpOwotICAgICAgdGhpcy5yZWNlaXZlcl8uYWNjZXB0QW5k
RXhwZWN0UmVzcG9uc2UobWVzc2FnZSkudGhlbihmdW5jdGlvbihtZXNzYWdlKSB7Ci0gICAgICAg
IHZhciByZWFkZXIgPSBuZXcgY29kZWMuTWVzc2FnZVJlYWRlcihtZXNzYWdlKTsKLSAgICAgICAg
dmFyIHJlc3BvbnNlUGFyYW1zID0KLSAgICAgICAgICAgIHJlYWRlci5kZWNvZGVTdHJ1Y3QoVXNi
RGV2aWNlX0Nsb3NlX1Jlc3BvbnNlUGFyYW1zKTsKLSAgICAgICAgcmVzb2x2ZShyZXNwb25zZVBh
cmFtcyk7Ci0gICAgICB9KS5jYXRjaChmdW5jdGlvbihyZXN1bHQpIHsKLSAgICAgICAgcmVqZWN0
KEVycm9yKCJDb25uZWN0aW9uIGVycm9yOiAiICsgcmVzdWx0KSk7Ci0gICAgICB9KTsKLSAgICB9
LmJpbmQodGhpcykpOwotICB9OwotICBVc2JEZXZpY2VQdHIucHJvdG90eXBlLnNldENvbmZpZ3Vy
YXRpb24gPSBmdW5jdGlvbigpIHsKLSAgICByZXR1cm4gVXNiRGV2aWNlUHJveHkucHJvdG90eXBl
LnNldENvbmZpZ3VyYXRpb24KLSAgICAgICAgLmFwcGx5KHRoaXMucHRyLmdldFByb3h5KCksIGFy
Z3VtZW50cyk7Ci0gIH07Ci0KLSAgVXNiRGV2aWNlUHJveHkucHJvdG90eXBlLnNldENvbmZpZ3Vy
YXRpb24gPSBmdW5jdGlvbih2YWx1ZSkgewotICAgIHZhciBwYXJhbXNfID0gbmV3IFVzYkRldmlj
ZV9TZXRDb25maWd1cmF0aW9uX1BhcmFtcygpOwotICAgIHBhcmFtc18udmFsdWUgPSB2YWx1ZTsK
LSAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7Ci0gICAg
ICB2YXIgYnVpbGRlciA9IG5ldyBjb2RlYy5NZXNzYWdlVjFCdWlsZGVyKAotICAgICAgICAgIGtV
c2JEZXZpY2VfU2V0Q29uZmlndXJhdGlvbl9OYW1lLAotICAgICAgICAgIGNvZGVjLmFsaWduKFVz
YkRldmljZV9TZXRDb25maWd1cmF0aW9uX1BhcmFtcy5lbmNvZGVkU2l6ZSksCi0gICAgICAgICAg
Y29kZWMua01lc3NhZ2VFeHBlY3RzUmVzcG9uc2UsIDApOwotICAgICAgYnVpbGRlci5lbmNvZGVT
dHJ1Y3QoVXNiRGV2aWNlX1NldENvbmZpZ3VyYXRpb25fUGFyYW1zLCBwYXJhbXNfKTsKLSAgICAg
IHZhciBtZXNzYWdlID0gYnVpbGRlci5maW5pc2goKTsKLSAgICAgIHRoaXMucmVjZWl2ZXJfLmFj
Y2VwdEFuZEV4cGVjdFJlc3BvbnNlKG1lc3NhZ2UpLnRoZW4oZnVuY3Rpb24obWVzc2FnZSkgewot
ICAgICAgICB2YXIgcmVhZGVyID0gbmV3IGNvZGVjLk1lc3NhZ2VSZWFkZXIobWVzc2FnZSk7Ci0g
ICAgICAgIHZhciByZXNwb25zZVBhcmFtcyA9Ci0gICAgICAgICAgICByZWFkZXIuZGVjb2RlU3Ry
dWN0KFVzYkRldmljZV9TZXRDb25maWd1cmF0aW9uX1Jlc3BvbnNlUGFyYW1zKTsKLSAgICAgICAg
cmVzb2x2ZShyZXNwb25zZVBhcmFtcyk7Ci0gICAgICB9KS5jYXRjaChmdW5jdGlvbihyZXN1bHQp
IHsKLSAgICAgICAgcmVqZWN0KEVycm9yKCJDb25uZWN0aW9uIGVycm9yOiAiICsgcmVzdWx0KSk7
Ci0gICAgICB9KTsKLSAgICB9LmJpbmQodGhpcykpOwotICB9OwotICBVc2JEZXZpY2VQdHIucHJv
dG90eXBlLmNsYWltSW50ZXJmYWNlID0gZnVuY3Rpb24oKSB7Ci0gICAgcmV0dXJuIFVzYkRldmlj
ZVByb3h5LnByb3RvdHlwZS5jbGFpbUludGVyZmFjZQotICAgICAgICAuYXBwbHkodGhpcy5wdHIu
Z2V0UHJveHkoKSwgYXJndW1lbnRzKTsKLSAgfTsKLQotICBVc2JEZXZpY2VQcm94eS5wcm90b3R5
cGUuY2xhaW1JbnRlcmZhY2UgPSBmdW5jdGlvbihpbnRlcmZhY2VOdW1iZXIpIHsKLSAgICB2YXIg
cGFyYW1zXyA9IG5ldyBVc2JEZXZpY2VfQ2xhaW1JbnRlcmZhY2VfUGFyYW1zKCk7Ci0gICAgcGFy
YW1zXy5pbnRlcmZhY2VOdW1iZXIgPSBpbnRlcmZhY2VOdW1iZXI7Ci0gICAgcmV0dXJuIG5ldyBQ
cm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkgewotICAgICAgdmFyIGJ1aWxkZXIgPSBu
ZXcgY29kZWMuTWVzc2FnZVYxQnVpbGRlcigKLSAgICAgICAgICBrVXNiRGV2aWNlX0NsYWltSW50
ZXJmYWNlX05hbWUsCi0gICAgICAgICAgY29kZWMuYWxpZ24oVXNiRGV2aWNlX0NsYWltSW50ZXJm
YWNlX1BhcmFtcy5lbmNvZGVkU2l6ZSksCi0gICAgICAgICAgY29kZWMua01lc3NhZ2VFeHBlY3Rz
UmVzcG9uc2UsIDApOwotICAgICAgYnVpbGRlci5lbmNvZGVTdHJ1Y3QoVXNiRGV2aWNlX0NsYWlt
SW50ZXJmYWNlX1BhcmFtcywgcGFyYW1zXyk7Ci0gICAgICB2YXIgbWVzc2FnZSA9IGJ1aWxkZXIu
ZmluaXNoKCk7Ci0gICAgICB0aGlzLnJlY2VpdmVyXy5hY2NlcHRBbmRFeHBlY3RSZXNwb25zZSht
ZXNzYWdlKS50aGVuKGZ1bmN0aW9uKG1lc3NhZ2UpIHsKLSAgICAgICAgdmFyIHJlYWRlciA9IG5l
dyBjb2RlYy5NZXNzYWdlUmVhZGVyKG1lc3NhZ2UpOwotICAgICAgICB2YXIgcmVzcG9uc2VQYXJh
bXMgPQotICAgICAgICAgICAgcmVhZGVyLmRlY29kZVN0cnVjdChVc2JEZXZpY2VfQ2xhaW1JbnRl
cmZhY2VfUmVzcG9uc2VQYXJhbXMpOwotICAgICAgICByZXNvbHZlKHJlc3BvbnNlUGFyYW1zKTsK
LSAgICAgIH0pLmNhdGNoKGZ1bmN0aW9uKHJlc3VsdCkgewotICAgICAgICByZWplY3QoRXJyb3Io
IkNvbm5lY3Rpb24gZXJyb3I6ICIgKyByZXN1bHQpKTsKLSAgICAgIH0pOwotICAgIH0uYmluZCh0
aGlzKSk7Ci0gIH07Ci0gIFVzYkRldmljZVB0ci5wcm90b3R5cGUucmVsZWFzZUludGVyZmFjZSA9
IGZ1bmN0aW9uKCkgewotICAgIHJldHVybiBVc2JEZXZpY2VQcm94eS5wcm90b3R5cGUucmVsZWFz
ZUludGVyZmFjZQotICAgICAgICAuYXBwbHkodGhpcy5wdHIuZ2V0UHJveHkoKSwgYXJndW1lbnRz
KTsKLSAgfTsKLQotICBVc2JEZXZpY2VQcm94eS5wcm90b3R5cGUucmVsZWFzZUludGVyZmFjZSA9
IGZ1bmN0aW9uKGludGVyZmFjZU51bWJlcikgewotICAgIHZhciBwYXJhbXNfID0gbmV3IFVzYkRl
dmljZV9SZWxlYXNlSW50ZXJmYWNlX1BhcmFtcygpOwotICAgIHBhcmFtc18uaW50ZXJmYWNlTnVt
YmVyID0gaW50ZXJmYWNlTnVtYmVyOwotICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihy
ZXNvbHZlLCByZWplY3QpIHsKLSAgICAgIHZhciBidWlsZGVyID0gbmV3IGNvZGVjLk1lc3NhZ2VW
MUJ1aWxkZXIoCi0gICAgICAgICAga1VzYkRldmljZV9SZWxlYXNlSW50ZXJmYWNlX05hbWUsCi0g
ICAgICAgICAgY29kZWMuYWxpZ24oVXNiRGV2aWNlX1JlbGVhc2VJbnRlcmZhY2VfUGFyYW1zLmVu
Y29kZWRTaXplKSwKLSAgICAgICAgICBjb2RlYy5rTWVzc2FnZUV4cGVjdHNSZXNwb25zZSwgMCk7
Ci0gICAgICBidWlsZGVyLmVuY29kZVN0cnVjdChVc2JEZXZpY2VfUmVsZWFzZUludGVyZmFjZV9Q
YXJhbXMsIHBhcmFtc18pOwotICAgICAgdmFyIG1lc3NhZ2UgPSBidWlsZGVyLmZpbmlzaCgpOwot
ICAgICAgdGhpcy5yZWNlaXZlcl8uYWNjZXB0QW5kRXhwZWN0UmVzcG9uc2UobWVzc2FnZSkudGhl
bihmdW5jdGlvbihtZXNzYWdlKSB7Ci0gICAgICAgIHZhciByZWFkZXIgPSBuZXcgY29kZWMuTWVz
c2FnZVJlYWRlcihtZXNzYWdlKTsKLSAgICAgICAgdmFyIHJlc3BvbnNlUGFyYW1zID0KLSAgICAg
ICAgICAgIHJlYWRlci5kZWNvZGVTdHJ1Y3QoVXNiRGV2aWNlX1JlbGVhc2VJbnRlcmZhY2VfUmVz
cG9uc2VQYXJhbXMpOwotICAgICAgICByZXNvbHZlKHJlc3BvbnNlUGFyYW1zKTsKLSAgICAgIH0p
LmNhdGNoKGZ1bmN0aW9uKHJlc3VsdCkgewotICAgICAgICByZWplY3QoRXJyb3IoIkNvbm5lY3Rp
b24gZXJyb3I6ICIgKyByZXN1bHQpKTsKLSAgICAgIH0pOwotICAgIH0uYmluZCh0aGlzKSk7Ci0g
IH07Ci0gIFVzYkRldmljZVB0ci5wcm90b3R5cGUuc2V0SW50ZXJmYWNlQWx0ZXJuYXRlU2V0dGlu
ZyA9IGZ1bmN0aW9uKCkgewotICAgIHJldHVybiBVc2JEZXZpY2VQcm94eS5wcm90b3R5cGUuc2V0
SW50ZXJmYWNlQWx0ZXJuYXRlU2V0dGluZwotICAgICAgICAuYXBwbHkodGhpcy5wdHIuZ2V0UHJv
eHkoKSwgYXJndW1lbnRzKTsKLSAgfTsKLQotICBVc2JEZXZpY2VQcm94eS5wcm90b3R5cGUuc2V0
SW50ZXJmYWNlQWx0ZXJuYXRlU2V0dGluZyA9IGZ1bmN0aW9uKGludGVyZmFjZU51bWJlciwgYWx0
ZXJuYXRlU2V0dGluZykgewotICAgIHZhciBwYXJhbXNfID0gbmV3IFVzYkRldmljZV9TZXRJbnRl
cmZhY2VBbHRlcm5hdGVTZXR0aW5nX1BhcmFtcygpOwotICAgIHBhcmFtc18uaW50ZXJmYWNlTnVt
YmVyID0gaW50ZXJmYWNlTnVtYmVyOwotICAgIHBhcmFtc18uYWx0ZXJuYXRlU2V0dGluZyA9IGFs
dGVybmF0ZVNldHRpbmc7Ci0gICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUs
IHJlamVjdCkgewotICAgICAgdmFyIGJ1aWxkZXIgPSBuZXcgY29kZWMuTWVzc2FnZVYxQnVpbGRl
cigKLSAgICAgICAgICBrVXNiRGV2aWNlX1NldEludGVyZmFjZUFsdGVybmF0ZVNldHRpbmdfTmFt
ZSwKLSAgICAgICAgICBjb2RlYy5hbGlnbihVc2JEZXZpY2VfU2V0SW50ZXJmYWNlQWx0ZXJuYXRl
U2V0dGluZ19QYXJhbXMuZW5jb2RlZFNpemUpLAotICAgICAgICAgIGNvZGVjLmtNZXNzYWdlRXhw
ZWN0c1Jlc3BvbnNlLCAwKTsKLSAgICAgIGJ1aWxkZXIuZW5jb2RlU3RydWN0KFVzYkRldmljZV9T
ZXRJbnRlcmZhY2VBbHRlcm5hdGVTZXR0aW5nX1BhcmFtcywgcGFyYW1zXyk7Ci0gICAgICB2YXIg
bWVzc2FnZSA9IGJ1aWxkZXIuZmluaXNoKCk7Ci0gICAgICB0aGlzLnJlY2VpdmVyXy5hY2NlcHRB
bmRFeHBlY3RSZXNwb25zZShtZXNzYWdlKS50aGVuKGZ1bmN0aW9uKG1lc3NhZ2UpIHsKLSAgICAg
ICAgdmFyIHJlYWRlciA9IG5ldyBjb2RlYy5NZXNzYWdlUmVhZGVyKG1lc3NhZ2UpOwotICAgICAg
ICB2YXIgcmVzcG9uc2VQYXJhbXMgPQotICAgICAgICAgICAgcmVhZGVyLmRlY29kZVN0cnVjdChV
c2JEZXZpY2VfU2V0SW50ZXJmYWNlQWx0ZXJuYXRlU2V0dGluZ19SZXNwb25zZVBhcmFtcyk7Ci0g
ICAgICAgIHJlc29sdmUocmVzcG9uc2VQYXJhbXMpOwotICAgICAgfSkuY2F0Y2goZnVuY3Rpb24o
cmVzdWx0KSB7Ci0gICAgICAgIHJlamVjdChFcnJvcigiQ29ubmVjdGlvbiBlcnJvcjogIiArIHJl
c3VsdCkpOwotICAgICAgfSk7Ci0gICAgfS5iaW5kKHRoaXMpKTsKLSAgfTsKLSAgVXNiRGV2aWNl
UHRyLnByb3RvdHlwZS5yZXNldCA9IGZ1bmN0aW9uKCkgewotICAgIHJldHVybiBVc2JEZXZpY2VQ
cm94eS5wcm90b3R5cGUucmVzZXQKLSAgICAgICAgLmFwcGx5KHRoaXMucHRyLmdldFByb3h5KCks
IGFyZ3VtZW50cyk7Ci0gIH07Ci0KLSAgVXNiRGV2aWNlUHJveHkucHJvdG90eXBlLnJlc2V0ID0g
ZnVuY3Rpb24oKSB7Ci0gICAgdmFyIHBhcmFtc18gPSBuZXcgVXNiRGV2aWNlX1Jlc2V0X1BhcmFt
cygpOwotICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3QpIHsK
LSAgICAgIHZhciBidWlsZGVyID0gbmV3IGNvZGVjLk1lc3NhZ2VWMUJ1aWxkZXIoCi0gICAgICAg
ICAga1VzYkRldmljZV9SZXNldF9OYW1lLAotICAgICAgICAgIGNvZGVjLmFsaWduKFVzYkRldmlj
ZV9SZXNldF9QYXJhbXMuZW5jb2RlZFNpemUpLAotICAgICAgICAgIGNvZGVjLmtNZXNzYWdlRXhw
ZWN0c1Jlc3BvbnNlLCAwKTsKLSAgICAgIGJ1aWxkZXIuZW5jb2RlU3RydWN0KFVzYkRldmljZV9S
ZXNldF9QYXJhbXMsIHBhcmFtc18pOwotICAgICAgdmFyIG1lc3NhZ2UgPSBidWlsZGVyLmZpbmlz
aCgpOwotICAgICAgdGhpcy5yZWNlaXZlcl8uYWNjZXB0QW5kRXhwZWN0UmVzcG9uc2UobWVzc2Fn
ZSkudGhlbihmdW5jdGlvbihtZXNzYWdlKSB7Ci0gICAgICAgIHZhciByZWFkZXIgPSBuZXcgY29k
ZWMuTWVzc2FnZVJlYWRlcihtZXNzYWdlKTsKLSAgICAgICAgdmFyIHJlc3BvbnNlUGFyYW1zID0K
LSAgICAgICAgICAgIHJlYWRlci5kZWNvZGVTdHJ1Y3QoVXNiRGV2aWNlX1Jlc2V0X1Jlc3BvbnNl
UGFyYW1zKTsKLSAgICAgICAgcmVzb2x2ZShyZXNwb25zZVBhcmFtcyk7Ci0gICAgICB9KS5jYXRj
aChmdW5jdGlvbihyZXN1bHQpIHsKLSAgICAgICAgcmVqZWN0KEVycm9yKCJDb25uZWN0aW9uIGVy
cm9yOiAiICsgcmVzdWx0KSk7Ci0gICAgICB9KTsKLSAgICB9LmJpbmQodGhpcykpOwotICB9Owot
ICBVc2JEZXZpY2VQdHIucHJvdG90eXBlLmNsZWFySGFsdCA9IGZ1bmN0aW9uKCkgewotICAgIHJl
dHVybiBVc2JEZXZpY2VQcm94eS5wcm90b3R5cGUuY2xlYXJIYWx0Ci0gICAgICAgIC5hcHBseSh0
aGlzLnB0ci5nZXRQcm94eSgpLCBhcmd1bWVudHMpOwotICB9OwotCi0gIFVzYkRldmljZVByb3h5
LnByb3RvdHlwZS5jbGVhckhhbHQgPSBmdW5jdGlvbihlbmRwb2ludCkgewotICAgIHZhciBwYXJh
bXNfID0gbmV3IFVzYkRldmljZV9DbGVhckhhbHRfUGFyYW1zKCk7Ci0gICAgcGFyYW1zXy5lbmRw
b2ludCA9IGVuZHBvaW50OwotICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZl
LCByZWplY3QpIHsKLSAgICAgIHZhciBidWlsZGVyID0gbmV3IGNvZGVjLk1lc3NhZ2VWMUJ1aWxk
ZXIoCi0gICAgICAgICAga1VzYkRldmljZV9DbGVhckhhbHRfTmFtZSwKLSAgICAgICAgICBjb2Rl
Yy5hbGlnbihVc2JEZXZpY2VfQ2xlYXJIYWx0X1BhcmFtcy5lbmNvZGVkU2l6ZSksCi0gICAgICAg
ICAgY29kZWMua01lc3NhZ2VFeHBlY3RzUmVzcG9uc2UsIDApOwotICAgICAgYnVpbGRlci5lbmNv
ZGVTdHJ1Y3QoVXNiRGV2aWNlX0NsZWFySGFsdF9QYXJhbXMsIHBhcmFtc18pOwotICAgICAgdmFy
IG1lc3NhZ2UgPSBidWlsZGVyLmZpbmlzaCgpOwotICAgICAgdGhpcy5yZWNlaXZlcl8uYWNjZXB0
QW5kRXhwZWN0UmVzcG9uc2UobWVzc2FnZSkudGhlbihmdW5jdGlvbihtZXNzYWdlKSB7Ci0gICAg
ICAgIHZhciByZWFkZXIgPSBuZXcgY29kZWMuTWVzc2FnZVJlYWRlcihtZXNzYWdlKTsKLSAgICAg
ICAgdmFyIHJlc3BvbnNlUGFyYW1zID0KLSAgICAgICAgICAgIHJlYWRlci5kZWNvZGVTdHJ1Y3Qo
VXNiRGV2aWNlX0NsZWFySGFsdF9SZXNwb25zZVBhcmFtcyk7Ci0gICAgICAgIHJlc29sdmUocmVz
cG9uc2VQYXJhbXMpOwotICAgICAgfSkuY2F0Y2goZnVuY3Rpb24ocmVzdWx0KSB7Ci0gICAgICAg
IHJlamVjdChFcnJvcigiQ29ubmVjdGlvbiBlcnJvcjogIiArIHJlc3VsdCkpOwotICAgICAgfSk7
Ci0gICAgfS5iaW5kKHRoaXMpKTsKLSAgfTsKLSAgVXNiRGV2aWNlUHRyLnByb3RvdHlwZS5jb250
cm9sVHJhbnNmZXJJbiA9IGZ1bmN0aW9uKCkgewotICAgIHJldHVybiBVc2JEZXZpY2VQcm94eS5w
cm90b3R5cGUuY29udHJvbFRyYW5zZmVySW4KLSAgICAgICAgLmFwcGx5KHRoaXMucHRyLmdldFBy
b3h5KCksIGFyZ3VtZW50cyk7Ci0gIH07Ci0KLSAgVXNiRGV2aWNlUHJveHkucHJvdG90eXBlLmNv
bnRyb2xUcmFuc2ZlckluID0gZnVuY3Rpb24ocGFyYW1zLCBsZW5ndGgsIHRpbWVvdXQpIHsKLSAg
ICB2YXIgcGFyYW1zXyA9IG5ldyBVc2JEZXZpY2VfQ29udHJvbFRyYW5zZmVySW5fUGFyYW1zKCk7
Ci0gICAgcGFyYW1zXy5wYXJhbXMgPSBwYXJhbXM7Ci0gICAgcGFyYW1zXy5sZW5ndGggPSBsZW5n
dGg7Ci0gICAgcGFyYW1zXy50aW1lb3V0ID0gdGltZW91dDsKLSAgICByZXR1cm4gbmV3IFByb21p
c2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7Ci0gICAgICB2YXIgYnVpbGRlciA9IG5ldyBj
b2RlYy5NZXNzYWdlVjFCdWlsZGVyKAotICAgICAgICAgIGtVc2JEZXZpY2VfQ29udHJvbFRyYW5z
ZmVySW5fTmFtZSwKLSAgICAgICAgICBjb2RlYy5hbGlnbihVc2JEZXZpY2VfQ29udHJvbFRyYW5z
ZmVySW5fUGFyYW1zLmVuY29kZWRTaXplKSwKLSAgICAgICAgICBjb2RlYy5rTWVzc2FnZUV4cGVj
dHNSZXNwb25zZSwgMCk7Ci0gICAgICBidWlsZGVyLmVuY29kZVN0cnVjdChVc2JEZXZpY2VfQ29u
dHJvbFRyYW5zZmVySW5fUGFyYW1zLCBwYXJhbXNfKTsKLSAgICAgIHZhciBtZXNzYWdlID0gYnVp
bGRlci5maW5pc2goKTsKLSAgICAgIHRoaXMucmVjZWl2ZXJfLmFjY2VwdEFuZEV4cGVjdFJlc3Bv
bnNlKG1lc3NhZ2UpLnRoZW4oZnVuY3Rpb24obWVzc2FnZSkgewotICAgICAgICB2YXIgcmVhZGVy
ID0gbmV3IGNvZGVjLk1lc3NhZ2VSZWFkZXIobWVzc2FnZSk7Ci0gICAgICAgIHZhciByZXNwb25z
ZVBhcmFtcyA9Ci0gICAgICAgICAgICByZWFkZXIuZGVjb2RlU3RydWN0KFVzYkRldmljZV9Db250
cm9sVHJhbnNmZXJJbl9SZXNwb25zZVBhcmFtcyk7Ci0gICAgICAgIHJlc29sdmUocmVzcG9uc2VQ
YXJhbXMpOwotICAgICAgfSkuY2F0Y2goZnVuY3Rpb24ocmVzdWx0KSB7Ci0gICAgICAgIHJlamVj
dChFcnJvcigiQ29ubmVjdGlvbiBlcnJvcjogIiArIHJlc3VsdCkpOwotICAgICAgfSk7Ci0gICAg
fS5iaW5kKHRoaXMpKTsKLSAgfTsKLSAgVXNiRGV2aWNlUHRyLnByb3RvdHlwZS5jb250cm9sVHJh
bnNmZXJPdXQgPSBmdW5jdGlvbigpIHsKLSAgICByZXR1cm4gVXNiRGV2aWNlUHJveHkucHJvdG90
eXBlLmNvbnRyb2xUcmFuc2Zlck91dAotICAgICAgICAuYXBwbHkodGhpcy5wdHIuZ2V0UHJveHko
KSwgYXJndW1lbnRzKTsKLSAgfTsKLQotICBVc2JEZXZpY2VQcm94eS5wcm90b3R5cGUuY29udHJv
bFRyYW5zZmVyT3V0ID0gZnVuY3Rpb24ocGFyYW1zLCBkYXRhLCB0aW1lb3V0KSB7Ci0gICAgdmFy
IHBhcmFtc18gPSBuZXcgVXNiRGV2aWNlX0NvbnRyb2xUcmFuc2Zlck91dF9QYXJhbXMoKTsKLSAg
ICBwYXJhbXNfLnBhcmFtcyA9IHBhcmFtczsKLSAgICBwYXJhbXNfLmRhdGEgPSBkYXRhOwotICAg
IHBhcmFtc18udGltZW91dCA9IHRpbWVvdXQ7Ci0gICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0
aW9uKHJlc29sdmUsIHJlamVjdCkgewotICAgICAgdmFyIGJ1aWxkZXIgPSBuZXcgY29kZWMuTWVz
c2FnZVYxQnVpbGRlcigKLSAgICAgICAgICBrVXNiRGV2aWNlX0NvbnRyb2xUcmFuc2Zlck91dF9O
YW1lLAotICAgICAgICAgIGNvZGVjLmFsaWduKFVzYkRldmljZV9Db250cm9sVHJhbnNmZXJPdXRf
UGFyYW1zLmVuY29kZWRTaXplKSwKLSAgICAgICAgICBjb2RlYy5rTWVzc2FnZUV4cGVjdHNSZXNw
b25zZSwgMCk7Ci0gICAgICBidWlsZGVyLmVuY29kZVN0cnVjdChVc2JEZXZpY2VfQ29udHJvbFRy
YW5zZmVyT3V0X1BhcmFtcywgcGFyYW1zXyk7Ci0gICAgICB2YXIgbWVzc2FnZSA9IGJ1aWxkZXIu
ZmluaXNoKCk7Ci0gICAgICB0aGlzLnJlY2VpdmVyXy5hY2NlcHRBbmRFeHBlY3RSZXNwb25zZSht
ZXNzYWdlKS50aGVuKGZ1bmN0aW9uKG1lc3NhZ2UpIHsKLSAgICAgICAgdmFyIHJlYWRlciA9IG5l
dyBjb2RlYy5NZXNzYWdlUmVhZGVyKG1lc3NhZ2UpOwotICAgICAgICB2YXIgcmVzcG9uc2VQYXJh
bXMgPQotICAgICAgICAgICAgcmVhZGVyLmRlY29kZVN0cnVjdChVc2JEZXZpY2VfQ29udHJvbFRy
YW5zZmVyT3V0X1Jlc3BvbnNlUGFyYW1zKTsKLSAgICAgICAgcmVzb2x2ZShyZXNwb25zZVBhcmFt
cyk7Ci0gICAgICB9KS5jYXRjaChmdW5jdGlvbihyZXN1bHQpIHsKLSAgICAgICAgcmVqZWN0KEVy
cm9yKCJDb25uZWN0aW9uIGVycm9yOiAiICsgcmVzdWx0KSk7Ci0gICAgICB9KTsKLSAgICB9LmJp
bmQodGhpcykpOwotICB9OwotICBVc2JEZXZpY2VQdHIucHJvdG90eXBlLmdlbmVyaWNUcmFuc2Zl
ckluID0gZnVuY3Rpb24oKSB7Ci0gICAgcmV0dXJuIFVzYkRldmljZVByb3h5LnByb3RvdHlwZS5n
ZW5lcmljVHJhbnNmZXJJbgotICAgICAgICAuYXBwbHkodGhpcy5wdHIuZ2V0UHJveHkoKSwgYXJn
dW1lbnRzKTsKLSAgfTsKLQotICBVc2JEZXZpY2VQcm94eS5wcm90b3R5cGUuZ2VuZXJpY1RyYW5z
ZmVySW4gPSBmdW5jdGlvbihlbmRwb2ludE51bWJlciwgbGVuZ3RoLCB0aW1lb3V0KSB7Ci0gICAg
dmFyIHBhcmFtc18gPSBuZXcgVXNiRGV2aWNlX0dlbmVyaWNUcmFuc2ZlckluX1BhcmFtcygpOwot
ICAgIHBhcmFtc18uZW5kcG9pbnROdW1iZXIgPSBlbmRwb2ludE51bWJlcjsKLSAgICBwYXJhbXNf
Lmxlbmd0aCA9IGxlbmd0aDsKLSAgICBwYXJhbXNfLnRpbWVvdXQgPSB0aW1lb3V0OwotICAgIHJl
dHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3QpIHsKLSAgICAgIHZhciBi
dWlsZGVyID0gbmV3IGNvZGVjLk1lc3NhZ2VWMUJ1aWxkZXIoCi0gICAgICAgICAga1VzYkRldmlj
ZV9HZW5lcmljVHJhbnNmZXJJbl9OYW1lLAotICAgICAgICAgIGNvZGVjLmFsaWduKFVzYkRldmlj
ZV9HZW5lcmljVHJhbnNmZXJJbl9QYXJhbXMuZW5jb2RlZFNpemUpLAotICAgICAgICAgIGNvZGVj
LmtNZXNzYWdlRXhwZWN0c1Jlc3BvbnNlLCAwKTsKLSAgICAgIGJ1aWxkZXIuZW5jb2RlU3RydWN0
KFVzYkRldmljZV9HZW5lcmljVHJhbnNmZXJJbl9QYXJhbXMsIHBhcmFtc18pOwotICAgICAgdmFy
IG1lc3NhZ2UgPSBidWlsZGVyLmZpbmlzaCgpOwotICAgICAgdGhpcy5yZWNlaXZlcl8uYWNjZXB0
QW5kRXhwZWN0UmVzcG9uc2UobWVzc2FnZSkudGhlbihmdW5jdGlvbihtZXNzYWdlKSB7Ci0gICAg
ICAgIHZhciByZWFkZXIgPSBuZXcgY29kZWMuTWVzc2FnZVJlYWRlcihtZXNzYWdlKTsKLSAgICAg
ICAgdmFyIHJlc3BvbnNlUGFyYW1zID0KLSAgICAgICAgICAgIHJlYWRlci5kZWNvZGVTdHJ1Y3Qo
VXNiRGV2aWNlX0dlbmVyaWNUcmFuc2ZlckluX1Jlc3BvbnNlUGFyYW1zKTsKLSAgICAgICAgcmVz
b2x2ZShyZXNwb25zZVBhcmFtcyk7Ci0gICAgICB9KS5jYXRjaChmdW5jdGlvbihyZXN1bHQpIHsK
LSAgICAgICAgcmVqZWN0KEVycm9yKCJDb25uZWN0aW9uIGVycm9yOiAiICsgcmVzdWx0KSk7Ci0g
ICAgICB9KTsKLSAgICB9LmJpbmQodGhpcykpOwotICB9OwotICBVc2JEZXZpY2VQdHIucHJvdG90
eXBlLmdlbmVyaWNUcmFuc2Zlck91dCA9IGZ1bmN0aW9uKCkgewotICAgIHJldHVybiBVc2JEZXZp
Y2VQcm94eS5wcm90b3R5cGUuZ2VuZXJpY1RyYW5zZmVyT3V0Ci0gICAgICAgIC5hcHBseSh0aGlz
LnB0ci5nZXRQcm94eSgpLCBhcmd1bWVudHMpOwotICB9OwotCi0gIFVzYkRldmljZVByb3h5LnBy
b3RvdHlwZS5nZW5lcmljVHJhbnNmZXJPdXQgPSBmdW5jdGlvbihlbmRwb2ludE51bWJlciwgZGF0
YSwgdGltZW91dCkgewotICAgIHZhciBwYXJhbXNfID0gbmV3IFVzYkRldmljZV9HZW5lcmljVHJh
bnNmZXJPdXRfUGFyYW1zKCk7Ci0gICAgcGFyYW1zXy5lbmRwb2ludE51bWJlciA9IGVuZHBvaW50
TnVtYmVyOwotICAgIHBhcmFtc18uZGF0YSA9IGRhdGE7Ci0gICAgcGFyYW1zXy50aW1lb3V0ID0g
dGltZW91dDsKLSAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0
KSB7Ci0gICAgICB2YXIgYnVpbGRlciA9IG5ldyBjb2RlYy5NZXNzYWdlVjFCdWlsZGVyKAotICAg
ICAgICAgIGtVc2JEZXZpY2VfR2VuZXJpY1RyYW5zZmVyT3V0X05hbWUsCi0gICAgICAgICAgY29k
ZWMuYWxpZ24oVXNiRGV2aWNlX0dlbmVyaWNUcmFuc2Zlck91dF9QYXJhbXMuZW5jb2RlZFNpemUp
LAotICAgICAgICAgIGNvZGVjLmtNZXNzYWdlRXhwZWN0c1Jlc3BvbnNlLCAwKTsKLSAgICAgIGJ1
aWxkZXIuZW5jb2RlU3RydWN0KFVzYkRldmljZV9HZW5lcmljVHJhbnNmZXJPdXRfUGFyYW1zLCBw
YXJhbXNfKTsKLSAgICAgIHZhciBtZXNzYWdlID0gYnVpbGRlci5maW5pc2goKTsKLSAgICAgIHRo
aXMucmVjZWl2ZXJfLmFjY2VwdEFuZEV4cGVjdFJlc3BvbnNlKG1lc3NhZ2UpLnRoZW4oZnVuY3Rp
b24obWVzc2FnZSkgewotICAgICAgICB2YXIgcmVhZGVyID0gbmV3IGNvZGVjLk1lc3NhZ2VSZWFk
ZXIobWVzc2FnZSk7Ci0gICAgICAgIHZhciByZXNwb25zZVBhcmFtcyA9Ci0gICAgICAgICAgICBy
ZWFkZXIuZGVjb2RlU3RydWN0KFVzYkRldmljZV9HZW5lcmljVHJhbnNmZXJPdXRfUmVzcG9uc2VQ
YXJhbXMpOwotICAgICAgICByZXNvbHZlKHJlc3BvbnNlUGFyYW1zKTsKLSAgICAgIH0pLmNhdGNo
KGZ1bmN0aW9uKHJlc3VsdCkgewotICAgICAgICByZWplY3QoRXJyb3IoIkNvbm5lY3Rpb24gZXJy
b3I6ICIgKyByZXN1bHQpKTsKLSAgICAgIH0pOwotICAgIH0uYmluZCh0aGlzKSk7Ci0gIH07Ci0g
IFVzYkRldmljZVB0ci5wcm90b3R5cGUuaXNvY2hyb25vdXNUcmFuc2ZlckluID0gZnVuY3Rpb24o
KSB7Ci0gICAgcmV0dXJuIFVzYkRldmljZVByb3h5LnByb3RvdHlwZS5pc29jaHJvbm91c1RyYW5z
ZmVySW4KLSAgICAgICAgLmFwcGx5KHRoaXMucHRyLmdldFByb3h5KCksIGFyZ3VtZW50cyk7Ci0g
IH07Ci0KLSAgVXNiRGV2aWNlUHJveHkucHJvdG90eXBlLmlzb2Nocm9ub3VzVHJhbnNmZXJJbiA9
IGZ1bmN0aW9uKGVuZHBvaW50TnVtYmVyLCBwYWNrZXRMZW5ndGhzLCB0aW1lb3V0KSB7Ci0gICAg
dmFyIHBhcmFtc18gPSBuZXcgVXNiRGV2aWNlX0lzb2Nocm9ub3VzVHJhbnNmZXJJbl9QYXJhbXMo
KTsKLSAgICBwYXJhbXNfLmVuZHBvaW50TnVtYmVyID0gZW5kcG9pbnROdW1iZXI7Ci0gICAgcGFy
YW1zXy5wYWNrZXRMZW5ndGhzID0gcGFja2V0TGVuZ3RoczsKLSAgICBwYXJhbXNfLnRpbWVvdXQg
PSB0aW1lb3V0OwotICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWpl
Y3QpIHsKLSAgICAgIHZhciBidWlsZGVyID0gbmV3IGNvZGVjLk1lc3NhZ2VWMUJ1aWxkZXIoCi0g
ICAgICAgICAga1VzYkRldmljZV9Jc29jaHJvbm91c1RyYW5zZmVySW5fTmFtZSwKLSAgICAgICAg
ICBjb2RlYy5hbGlnbihVc2JEZXZpY2VfSXNvY2hyb25vdXNUcmFuc2ZlckluX1BhcmFtcy5lbmNv
ZGVkU2l6ZSksCi0gICAgICAgICAgY29kZWMua01lc3NhZ2VFeHBlY3RzUmVzcG9uc2UsIDApOwot
ICAgICAgYnVpbGRlci5lbmNvZGVTdHJ1Y3QoVXNiRGV2aWNlX0lzb2Nocm9ub3VzVHJhbnNmZXJJ
bl9QYXJhbXMsIHBhcmFtc18pOwotICAgICAgdmFyIG1lc3NhZ2UgPSBidWlsZGVyLmZpbmlzaCgp
OwotICAgICAgdGhpcy5yZWNlaXZlcl8uYWNjZXB0QW5kRXhwZWN0UmVzcG9uc2UobWVzc2FnZSku
dGhlbihmdW5jdGlvbihtZXNzYWdlKSB7Ci0gICAgICAgIHZhciByZWFkZXIgPSBuZXcgY29kZWMu
TWVzc2FnZVJlYWRlcihtZXNzYWdlKTsKLSAgICAgICAgdmFyIHJlc3BvbnNlUGFyYW1zID0KLSAg
ICAgICAgICAgIHJlYWRlci5kZWNvZGVTdHJ1Y3QoVXNiRGV2aWNlX0lzb2Nocm9ub3VzVHJhbnNm
ZXJJbl9SZXNwb25zZVBhcmFtcyk7Ci0gICAgICAgIHJlc29sdmUocmVzcG9uc2VQYXJhbXMpOwot
ICAgICAgfSkuY2F0Y2goZnVuY3Rpb24ocmVzdWx0KSB7Ci0gICAgICAgIHJlamVjdChFcnJvcigi
Q29ubmVjdGlvbiBlcnJvcjogIiArIHJlc3VsdCkpOwotICAgICAgfSk7Ci0gICAgfS5iaW5kKHRo
aXMpKTsKLSAgfTsKLSAgVXNiRGV2aWNlUHRyLnByb3RvdHlwZS5pc29jaHJvbm91c1RyYW5zZmVy
T3V0ID0gZnVuY3Rpb24oKSB7Ci0gICAgcmV0dXJuIFVzYkRldmljZVByb3h5LnByb3RvdHlwZS5p
c29jaHJvbm91c1RyYW5zZmVyT3V0Ci0gICAgICAgIC5hcHBseSh0aGlzLnB0ci5nZXRQcm94eSgp
LCBhcmd1bWVudHMpOwotICB9OwotCi0gIFVzYkRldmljZVByb3h5LnByb3RvdHlwZS5pc29jaHJv
bm91c1RyYW5zZmVyT3V0ID0gZnVuY3Rpb24oZW5kcG9pbnROdW1iZXIsIGRhdGEsIHBhY2tldExl
bmd0aHMsIHRpbWVvdXQpIHsKLSAgICB2YXIgcGFyYW1zXyA9IG5ldyBVc2JEZXZpY2VfSXNvY2hy
b25vdXNUcmFuc2Zlck91dF9QYXJhbXMoKTsKLSAgICBwYXJhbXNfLmVuZHBvaW50TnVtYmVyID0g
ZW5kcG9pbnROdW1iZXI7Ci0gICAgcGFyYW1zXy5kYXRhID0gZGF0YTsKLSAgICBwYXJhbXNfLnBh
Y2tldExlbmd0aHMgPSBwYWNrZXRMZW5ndGhzOwotICAgIHBhcmFtc18udGltZW91dCA9IHRpbWVv
dXQ7Ci0gICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkgewot
ICAgICAgdmFyIGJ1aWxkZXIgPSBuZXcgY29kZWMuTWVzc2FnZVYxQnVpbGRlcigKLSAgICAgICAg
ICBrVXNiRGV2aWNlX0lzb2Nocm9ub3VzVHJhbnNmZXJPdXRfTmFtZSwKLSAgICAgICAgICBjb2Rl
Yy5hbGlnbihVc2JEZXZpY2VfSXNvY2hyb25vdXNUcmFuc2Zlck91dF9QYXJhbXMuZW5jb2RlZFNp
emUpLAotICAgICAgICAgIGNvZGVjLmtNZXNzYWdlRXhwZWN0c1Jlc3BvbnNlLCAwKTsKLSAgICAg
IGJ1aWxkZXIuZW5jb2RlU3RydWN0KFVzYkRldmljZV9Jc29jaHJvbm91c1RyYW5zZmVyT3V0X1Bh
cmFtcywgcGFyYW1zXyk7Ci0gICAgICB2YXIgbWVzc2FnZSA9IGJ1aWxkZXIuZmluaXNoKCk7Ci0g
ICAgICB0aGlzLnJlY2VpdmVyXy5hY2NlcHRBbmRFeHBlY3RSZXNwb25zZShtZXNzYWdlKS50aGVu
KGZ1bmN0aW9uKG1lc3NhZ2UpIHsKLSAgICAgICAgdmFyIHJlYWRlciA9IG5ldyBjb2RlYy5NZXNz
YWdlUmVhZGVyKG1lc3NhZ2UpOwotICAgICAgICB2YXIgcmVzcG9uc2VQYXJhbXMgPQotICAgICAg
ICAgICAgcmVhZGVyLmRlY29kZVN0cnVjdChVc2JEZXZpY2VfSXNvY2hyb25vdXNUcmFuc2Zlck91
dF9SZXNwb25zZVBhcmFtcyk7Ci0gICAgICAgIHJlc29sdmUocmVzcG9uc2VQYXJhbXMpOwotICAg
ICAgfSkuY2F0Y2goZnVuY3Rpb24ocmVzdWx0KSB7Ci0gICAgICAgIHJlamVjdChFcnJvcigiQ29u
bmVjdGlvbiBlcnJvcjogIiArIHJlc3VsdCkpOwotICAgICAgfSk7Ci0gICAgfS5iaW5kKHRoaXMp
KTsKLSAgfTsKLQotICBmdW5jdGlvbiBVc2JEZXZpY2VTdHViKGRlbGVnYXRlKSB7Ci0gICAgdGhp
cy5kZWxlZ2F0ZV8gPSBkZWxlZ2F0ZTsKLSAgfQotICBVc2JEZXZpY2VTdHViLnByb3RvdHlwZS5v
cGVuID0gZnVuY3Rpb24oKSB7Ci0gICAgcmV0dXJuIHRoaXMuZGVsZWdhdGVfICYmIHRoaXMuZGVs
ZWdhdGVfLm9wZW4gJiYgdGhpcy5kZWxlZ2F0ZV8ub3BlbigpOwotICB9Ci0gIFVzYkRldmljZVN0
dWIucHJvdG90eXBlLmNsb3NlID0gZnVuY3Rpb24oKSB7Ci0gICAgcmV0dXJuIHRoaXMuZGVsZWdh
dGVfICYmIHRoaXMuZGVsZWdhdGVfLmNsb3NlICYmIHRoaXMuZGVsZWdhdGVfLmNsb3NlKCk7Ci0g
IH0KLSAgVXNiRGV2aWNlU3R1Yi5wcm90b3R5cGUuc2V0Q29uZmlndXJhdGlvbiA9IGZ1bmN0aW9u
KHZhbHVlKSB7Ci0gICAgcmV0dXJuIHRoaXMuZGVsZWdhdGVfICYmIHRoaXMuZGVsZWdhdGVfLnNl
dENvbmZpZ3VyYXRpb24gJiYgdGhpcy5kZWxlZ2F0ZV8uc2V0Q29uZmlndXJhdGlvbih2YWx1ZSk7
Ci0gIH0KLSAgVXNiRGV2aWNlU3R1Yi5wcm90b3R5cGUuY2xhaW1JbnRlcmZhY2UgPSBmdW5jdGlv
bihpbnRlcmZhY2VOdW1iZXIpIHsKLSAgICByZXR1cm4gdGhpcy5kZWxlZ2F0ZV8gJiYgdGhpcy5k
ZWxlZ2F0ZV8uY2xhaW1JbnRlcmZhY2UgJiYgdGhpcy5kZWxlZ2F0ZV8uY2xhaW1JbnRlcmZhY2Uo
aW50ZXJmYWNlTnVtYmVyKTsKLSAgfQotICBVc2JEZXZpY2VTdHViLnByb3RvdHlwZS5yZWxlYXNl
SW50ZXJmYWNlID0gZnVuY3Rpb24oaW50ZXJmYWNlTnVtYmVyKSB7Ci0gICAgcmV0dXJuIHRoaXMu
ZGVsZWdhdGVfICYmIHRoaXMuZGVsZWdhdGVfLnJlbGVhc2VJbnRlcmZhY2UgJiYgdGhpcy5kZWxl
Z2F0ZV8ucmVsZWFzZUludGVyZmFjZShpbnRlcmZhY2VOdW1iZXIpOwotICB9Ci0gIFVzYkRldmlj
ZVN0dWIucHJvdG90eXBlLnNldEludGVyZmFjZUFsdGVybmF0ZVNldHRpbmcgPSBmdW5jdGlvbihp
bnRlcmZhY2VOdW1iZXIsIGFsdGVybmF0ZVNldHRpbmcpIHsKLSAgICByZXR1cm4gdGhpcy5kZWxl
Z2F0ZV8gJiYgdGhpcy5kZWxlZ2F0ZV8uc2V0SW50ZXJmYWNlQWx0ZXJuYXRlU2V0dGluZyAmJiB0
aGlzLmRlbGVnYXRlXy5zZXRJbnRlcmZhY2VBbHRlcm5hdGVTZXR0aW5nKGludGVyZmFjZU51bWJl
ciwgYWx0ZXJuYXRlU2V0dGluZyk7Ci0gIH0KLSAgVXNiRGV2aWNlU3R1Yi5wcm90b3R5cGUucmVz
ZXQgPSBmdW5jdGlvbigpIHsKLSAgICByZXR1cm4gdGhpcy5kZWxlZ2F0ZV8gJiYgdGhpcy5kZWxl
Z2F0ZV8ucmVzZXQgJiYgdGhpcy5kZWxlZ2F0ZV8ucmVzZXQoKTsKLSAgfQotICBVc2JEZXZpY2VT
dHViLnByb3RvdHlwZS5jbGVhckhhbHQgPSBmdW5jdGlvbihlbmRwb2ludCkgewotICAgIHJldHVy
biB0aGlzLmRlbGVnYXRlXyAmJiB0aGlzLmRlbGVnYXRlXy5jbGVhckhhbHQgJiYgdGhpcy5kZWxl
Z2F0ZV8uY2xlYXJIYWx0KGVuZHBvaW50KTsKLSAgfQotICBVc2JEZXZpY2VTdHViLnByb3RvdHlw
ZS5jb250cm9sVHJhbnNmZXJJbiA9IGZ1bmN0aW9uKHBhcmFtcywgbGVuZ3RoLCB0aW1lb3V0KSB7
Ci0gICAgcmV0dXJuIHRoaXMuZGVsZWdhdGVfICYmIHRoaXMuZGVsZWdhdGVfLmNvbnRyb2xUcmFu
c2ZlckluICYmIHRoaXMuZGVsZWdhdGVfLmNvbnRyb2xUcmFuc2ZlckluKHBhcmFtcywgbGVuZ3Ro
LCB0aW1lb3V0KTsKLSAgfQotICBVc2JEZXZpY2VTdHViLnByb3RvdHlwZS5jb250cm9sVHJhbnNm
ZXJPdXQgPSBmdW5jdGlvbihwYXJhbXMsIGRhdGEsIHRpbWVvdXQpIHsKLSAgICByZXR1cm4gdGhp
cy5kZWxlZ2F0ZV8gJiYgdGhpcy5kZWxlZ2F0ZV8uY29udHJvbFRyYW5zZmVyT3V0ICYmIHRoaXMu
ZGVsZWdhdGVfLmNvbnRyb2xUcmFuc2Zlck91dChwYXJhbXMsIGRhdGEsIHRpbWVvdXQpOwotICB9
Ci0gIFVzYkRldmljZVN0dWIucHJvdG90eXBlLmdlbmVyaWNUcmFuc2ZlckluID0gZnVuY3Rpb24o
ZW5kcG9pbnROdW1iZXIsIGxlbmd0aCwgdGltZW91dCkgewotICAgIHJldHVybiB0aGlzLmRlbGVn
YXRlXyAmJiB0aGlzLmRlbGVnYXRlXy5nZW5lcmljVHJhbnNmZXJJbiAmJiB0aGlzLmRlbGVnYXRl
Xy5nZW5lcmljVHJhbnNmZXJJbihlbmRwb2ludE51bWJlciwgbGVuZ3RoLCB0aW1lb3V0KTsKLSAg
fQotICBVc2JEZXZpY2VTdHViLnByb3RvdHlwZS5nZW5lcmljVHJhbnNmZXJPdXQgPSBmdW5jdGlv
bihlbmRwb2ludE51bWJlciwgZGF0YSwgdGltZW91dCkgewotICAgIHJldHVybiB0aGlzLmRlbGVn
YXRlXyAmJiB0aGlzLmRlbGVnYXRlXy5nZW5lcmljVHJhbnNmZXJPdXQgJiYgdGhpcy5kZWxlZ2F0
ZV8uZ2VuZXJpY1RyYW5zZmVyT3V0KGVuZHBvaW50TnVtYmVyLCBkYXRhLCB0aW1lb3V0KTsKLSAg
fQotICBVc2JEZXZpY2VTdHViLnByb3RvdHlwZS5pc29jaHJvbm91c1RyYW5zZmVySW4gPSBmdW5j
dGlvbihlbmRwb2ludE51bWJlciwgcGFja2V0TGVuZ3RocywgdGltZW91dCkgewotICAgIHJldHVy
biB0aGlzLmRlbGVnYXRlXyAmJiB0aGlzLmRlbGVnYXRlXy5pc29jaHJvbm91c1RyYW5zZmVySW4g
JiYgdGhpcy5kZWxlZ2F0ZV8uaXNvY2hyb25vdXNUcmFuc2ZlckluKGVuZHBvaW50TnVtYmVyLCBw
YWNrZXRMZW5ndGhzLCB0aW1lb3V0KTsKLSAgfQotICBVc2JEZXZpY2VTdHViLnByb3RvdHlwZS5p
c29jaHJvbm91c1RyYW5zZmVyT3V0ID0gZnVuY3Rpb24oZW5kcG9pbnROdW1iZXIsIGRhdGEsIHBh
Y2tldExlbmd0aHMsIHRpbWVvdXQpIHsKLSAgICByZXR1cm4gdGhpcy5kZWxlZ2F0ZV8gJiYgdGhp
cy5kZWxlZ2F0ZV8uaXNvY2hyb25vdXNUcmFuc2Zlck91dCAmJiB0aGlzLmRlbGVnYXRlXy5pc29j
aHJvbm91c1RyYW5zZmVyT3V0KGVuZHBvaW50TnVtYmVyLCBkYXRhLCBwYWNrZXRMZW5ndGhzLCB0
aW1lb3V0KTsKLSAgfQotCi0gIFVzYkRldmljZVN0dWIucHJvdG90eXBlLmFjY2VwdCA9IGZ1bmN0
aW9uKG1lc3NhZ2UpIHsKLSAgICB2YXIgcmVhZGVyID0gbmV3IGNvZGVjLk1lc3NhZ2VSZWFkZXIo
bWVzc2FnZSk7Ci0gICAgc3dpdGNoIChyZWFkZXIubWVzc2FnZU5hbWUpIHsKLSAgICBkZWZhdWx0
OgotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgfTsKLQotICBVc2JEZXZpY2VTdHViLnBy
b3RvdHlwZS5hY2NlcHRXaXRoUmVzcG9uZGVyID0KLSAgICAgIGZ1bmN0aW9uKG1lc3NhZ2UsIHJl
c3BvbmRlcikgewotICAgIHZhciByZWFkZXIgPSBuZXcgY29kZWMuTWVzc2FnZVJlYWRlcihtZXNz
YWdlKTsKLSAgICBzd2l0Y2ggKHJlYWRlci5tZXNzYWdlTmFtZSkgewotICAgIGNhc2Uga1VzYkRl
dmljZV9PcGVuX05hbWU6Ci0gICAgICB2YXIgcGFyYW1zID0gcmVhZGVyLmRlY29kZVN0cnVjdChV
c2JEZXZpY2VfT3Blbl9QYXJhbXMpOwotICAgICAgdGhpcy5vcGVuKCkudGhlbihmdW5jdGlvbihy
ZXNwb25zZSkgewotICAgICAgICB2YXIgcmVzcG9uc2VQYXJhbXMgPQotICAgICAgICAgICAgbmV3
IFVzYkRldmljZV9PcGVuX1Jlc3BvbnNlUGFyYW1zKCk7Ci0gICAgICAgIHJlc3BvbnNlUGFyYW1z
LmVycm9yID0gcmVzcG9uc2UuZXJyb3I7Ci0gICAgICAgIHZhciBidWlsZGVyID0gbmV3IGNvZGVj
Lk1lc3NhZ2VWMUJ1aWxkZXIoCi0gICAgICAgICAgICBrVXNiRGV2aWNlX09wZW5fTmFtZSwKLSAg
ICAgICAgICAgIGNvZGVjLmFsaWduKFVzYkRldmljZV9PcGVuX1Jlc3BvbnNlUGFyYW1zLmVuY29k
ZWRTaXplKSwKLSAgICAgICAgICAgIGNvZGVjLmtNZXNzYWdlSXNSZXNwb25zZSwgcmVhZGVyLnJl
cXVlc3RJRCk7Ci0gICAgICAgIGJ1aWxkZXIuZW5jb2RlU3RydWN0KFVzYkRldmljZV9PcGVuX1Jl
c3BvbnNlUGFyYW1zLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zZVBhcmFt
cyk7Ci0gICAgICAgIHZhciBtZXNzYWdlID0gYnVpbGRlci5maW5pc2goKTsKLSAgICAgICAgcmVz
cG9uZGVyLmFjY2VwdChtZXNzYWdlKTsKLSAgICAgIH0pOwotICAgICAgcmV0dXJuIHRydWU7Ci0g
ICAgY2FzZSBrVXNiRGV2aWNlX0Nsb3NlX05hbWU6Ci0gICAgICB2YXIgcGFyYW1zID0gcmVhZGVy
LmRlY29kZVN0cnVjdChVc2JEZXZpY2VfQ2xvc2VfUGFyYW1zKTsKLSAgICAgIHRoaXMuY2xvc2Uo
KS50aGVuKGZ1bmN0aW9uKHJlc3BvbnNlKSB7Ci0gICAgICAgIHZhciByZXNwb25zZVBhcmFtcyA9
Ci0gICAgICAgICAgICBuZXcgVXNiRGV2aWNlX0Nsb3NlX1Jlc3BvbnNlUGFyYW1zKCk7Ci0gICAg
ICAgIHZhciBidWlsZGVyID0gbmV3IGNvZGVjLk1lc3NhZ2VWMUJ1aWxkZXIoCi0gICAgICAgICAg
ICBrVXNiRGV2aWNlX0Nsb3NlX05hbWUsCi0gICAgICAgICAgICBjb2RlYy5hbGlnbihVc2JEZXZp
Y2VfQ2xvc2VfUmVzcG9uc2VQYXJhbXMuZW5jb2RlZFNpemUpLAotICAgICAgICAgICAgY29kZWMu
a01lc3NhZ2VJc1Jlc3BvbnNlLCByZWFkZXIucmVxdWVzdElEKTsKLSAgICAgICAgYnVpbGRlci5l
bmNvZGVTdHJ1Y3QoVXNiRGV2aWNlX0Nsb3NlX1Jlc3BvbnNlUGFyYW1zLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICByZXNwb25zZVBhcmFtcyk7Ci0gICAgICAgIHZhciBtZXNzYWdlID0g
YnVpbGRlci5maW5pc2goKTsKLSAgICAgICAgcmVzcG9uZGVyLmFjY2VwdChtZXNzYWdlKTsKLSAg
ICAgIH0pOwotICAgICAgcmV0dXJuIHRydWU7Ci0gICAgY2FzZSBrVXNiRGV2aWNlX1NldENvbmZp
Z3VyYXRpb25fTmFtZToKLSAgICAgIHZhciBwYXJhbXMgPSByZWFkZXIuZGVjb2RlU3RydWN0KFVz
YkRldmljZV9TZXRDb25maWd1cmF0aW9uX1BhcmFtcyk7Ci0gICAgICB0aGlzLnNldENvbmZpZ3Vy
YXRpb24ocGFyYW1zLnZhbHVlKS50aGVuKGZ1bmN0aW9uKHJlc3BvbnNlKSB7Ci0gICAgICAgIHZh
ciByZXNwb25zZVBhcmFtcyA9Ci0gICAgICAgICAgICBuZXcgVXNiRGV2aWNlX1NldENvbmZpZ3Vy
YXRpb25fUmVzcG9uc2VQYXJhbXMoKTsKLSAgICAgICAgcmVzcG9uc2VQYXJhbXMuc3VjY2VzcyA9
IHJlc3BvbnNlLnN1Y2Nlc3M7Ci0gICAgICAgIHZhciBidWlsZGVyID0gbmV3IGNvZGVjLk1lc3Nh
Z2VWMUJ1aWxkZXIoCi0gICAgICAgICAgICBrVXNiRGV2aWNlX1NldENvbmZpZ3VyYXRpb25fTmFt
ZSwKLSAgICAgICAgICAgIGNvZGVjLmFsaWduKFVzYkRldmljZV9TZXRDb25maWd1cmF0aW9uX1Jl
c3BvbnNlUGFyYW1zLmVuY29kZWRTaXplKSwKLSAgICAgICAgICAgIGNvZGVjLmtNZXNzYWdlSXNS
ZXNwb25zZSwgcmVhZGVyLnJlcXVlc3RJRCk7Ci0gICAgICAgIGJ1aWxkZXIuZW5jb2RlU3RydWN0
KFVzYkRldmljZV9TZXRDb25maWd1cmF0aW9uX1Jlc3BvbnNlUGFyYW1zLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICByZXNwb25zZVBhcmFtcyk7Ci0gICAgICAgIHZhciBtZXNzYWdlID0g
YnVpbGRlci5maW5pc2goKTsKLSAgICAgICAgcmVzcG9uZGVyLmFjY2VwdChtZXNzYWdlKTsKLSAg
ICAgIH0pOwotICAgICAgcmV0dXJuIHRydWU7Ci0gICAgY2FzZSBrVXNiRGV2aWNlX0NsYWltSW50
ZXJmYWNlX05hbWU6Ci0gICAgICB2YXIgcGFyYW1zID0gcmVhZGVyLmRlY29kZVN0cnVjdChVc2JE
ZXZpY2VfQ2xhaW1JbnRlcmZhY2VfUGFyYW1zKTsKLSAgICAgIHRoaXMuY2xhaW1JbnRlcmZhY2Uo
cGFyYW1zLmludGVyZmFjZU51bWJlcikudGhlbihmdW5jdGlvbihyZXNwb25zZSkgewotICAgICAg
ICB2YXIgcmVzcG9uc2VQYXJhbXMgPQotICAgICAgICAgICAgbmV3IFVzYkRldmljZV9DbGFpbUlu
dGVyZmFjZV9SZXNwb25zZVBhcmFtcygpOwotICAgICAgICByZXNwb25zZVBhcmFtcy5zdWNjZXNz
ID0gcmVzcG9uc2Uuc3VjY2VzczsKLSAgICAgICAgdmFyIGJ1aWxkZXIgPSBuZXcgY29kZWMuTWVz
c2FnZVYxQnVpbGRlcigKLSAgICAgICAgICAgIGtVc2JEZXZpY2VfQ2xhaW1JbnRlcmZhY2VfTmFt
ZSwKLSAgICAgICAgICAgIGNvZGVjLmFsaWduKFVzYkRldmljZV9DbGFpbUludGVyZmFjZV9SZXNw
b25zZVBhcmFtcy5lbmNvZGVkU2l6ZSksCi0gICAgICAgICAgICBjb2RlYy5rTWVzc2FnZUlzUmVz
cG9uc2UsIHJlYWRlci5yZXF1ZXN0SUQpOwotICAgICAgICBidWlsZGVyLmVuY29kZVN0cnVjdChV
c2JEZXZpY2VfQ2xhaW1JbnRlcmZhY2VfUmVzcG9uc2VQYXJhbXMsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHJlc3BvbnNlUGFyYW1zKTsKLSAgICAgICAgdmFyIG1lc3NhZ2UgPSBidWls
ZGVyLmZpbmlzaCgpOwotICAgICAgICByZXNwb25kZXIuYWNjZXB0KG1lc3NhZ2UpOwotICAgICAg
fSk7Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICBjYXNlIGtVc2JEZXZpY2VfUmVsZWFzZUludGVy
ZmFjZV9OYW1lOgotICAgICAgdmFyIHBhcmFtcyA9IHJlYWRlci5kZWNvZGVTdHJ1Y3QoVXNiRGV2
aWNlX1JlbGVhc2VJbnRlcmZhY2VfUGFyYW1zKTsKLSAgICAgIHRoaXMucmVsZWFzZUludGVyZmFj
ZShwYXJhbXMuaW50ZXJmYWNlTnVtYmVyKS50aGVuKGZ1bmN0aW9uKHJlc3BvbnNlKSB7Ci0gICAg
ICAgIHZhciByZXNwb25zZVBhcmFtcyA9Ci0gICAgICAgICAgICBuZXcgVXNiRGV2aWNlX1JlbGVh
c2VJbnRlcmZhY2VfUmVzcG9uc2VQYXJhbXMoKTsKLSAgICAgICAgcmVzcG9uc2VQYXJhbXMuc3Vj
Y2VzcyA9IHJlc3BvbnNlLnN1Y2Nlc3M7Ci0gICAgICAgIHZhciBidWlsZGVyID0gbmV3IGNvZGVj
Lk1lc3NhZ2VWMUJ1aWxkZXIoCi0gICAgICAgICAgICBrVXNiRGV2aWNlX1JlbGVhc2VJbnRlcmZh
Y2VfTmFtZSwKLSAgICAgICAgICAgIGNvZGVjLmFsaWduKFVzYkRldmljZV9SZWxlYXNlSW50ZXJm
YWNlX1Jlc3BvbnNlUGFyYW1zLmVuY29kZWRTaXplKSwKLSAgICAgICAgICAgIGNvZGVjLmtNZXNz
YWdlSXNSZXNwb25zZSwgcmVhZGVyLnJlcXVlc3RJRCk7Ci0gICAgICAgIGJ1aWxkZXIuZW5jb2Rl
U3RydWN0KFVzYkRldmljZV9SZWxlYXNlSW50ZXJmYWNlX1Jlc3BvbnNlUGFyYW1zLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zZVBhcmFtcyk7Ci0gICAgICAgIHZhciBtZXNz
YWdlID0gYnVpbGRlci5maW5pc2goKTsKLSAgICAgICAgcmVzcG9uZGVyLmFjY2VwdChtZXNzYWdl
KTsKLSAgICAgIH0pOwotICAgICAgcmV0dXJuIHRydWU7Ci0gICAgY2FzZSBrVXNiRGV2aWNlX1Nl
dEludGVyZmFjZUFsdGVybmF0ZVNldHRpbmdfTmFtZToKLSAgICAgIHZhciBwYXJhbXMgPSByZWFk
ZXIuZGVjb2RlU3RydWN0KFVzYkRldmljZV9TZXRJbnRlcmZhY2VBbHRlcm5hdGVTZXR0aW5nX1Bh
cmFtcyk7Ci0gICAgICB0aGlzLnNldEludGVyZmFjZUFsdGVybmF0ZVNldHRpbmcocGFyYW1zLmlu
dGVyZmFjZU51bWJlciwgcGFyYW1zLmFsdGVybmF0ZVNldHRpbmcpLnRoZW4oZnVuY3Rpb24ocmVz
cG9uc2UpIHsKLSAgICAgICAgdmFyIHJlc3BvbnNlUGFyYW1zID0KLSAgICAgICAgICAgIG5ldyBV
c2JEZXZpY2VfU2V0SW50ZXJmYWNlQWx0ZXJuYXRlU2V0dGluZ19SZXNwb25zZVBhcmFtcygpOwot
ICAgICAgICByZXNwb25zZVBhcmFtcy5zdWNjZXNzID0gcmVzcG9uc2Uuc3VjY2VzczsKLSAgICAg
ICAgdmFyIGJ1aWxkZXIgPSBuZXcgY29kZWMuTWVzc2FnZVYxQnVpbGRlcigKLSAgICAgICAgICAg
IGtVc2JEZXZpY2VfU2V0SW50ZXJmYWNlQWx0ZXJuYXRlU2V0dGluZ19OYW1lLAotICAgICAgICAg
ICAgY29kZWMuYWxpZ24oVXNiRGV2aWNlX1NldEludGVyZmFjZUFsdGVybmF0ZVNldHRpbmdfUmVz
cG9uc2VQYXJhbXMuZW5jb2RlZFNpemUpLAotICAgICAgICAgICAgY29kZWMua01lc3NhZ2VJc1Jl
c3BvbnNlLCByZWFkZXIucmVxdWVzdElEKTsKLSAgICAgICAgYnVpbGRlci5lbmNvZGVTdHJ1Y3Qo
VXNiRGV2aWNlX1NldEludGVyZmFjZUFsdGVybmF0ZVNldHRpbmdfUmVzcG9uc2VQYXJhbXMsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlUGFyYW1zKTsKLSAgICAgICAgdmFy
IG1lc3NhZ2UgPSBidWlsZGVyLmZpbmlzaCgpOwotICAgICAgICByZXNwb25kZXIuYWNjZXB0KG1l
c3NhZ2UpOwotICAgICAgfSk7Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICBjYXNlIGtVc2JEZXZp
Y2VfUmVzZXRfTmFtZToKLSAgICAgIHZhciBwYXJhbXMgPSByZWFkZXIuZGVjb2RlU3RydWN0KFVz
YkRldmljZV9SZXNldF9QYXJhbXMpOwotICAgICAgdGhpcy5yZXNldCgpLnRoZW4oZnVuY3Rpb24o
cmVzcG9uc2UpIHsKLSAgICAgICAgdmFyIHJlc3BvbnNlUGFyYW1zID0KLSAgICAgICAgICAgIG5l
dyBVc2JEZXZpY2VfUmVzZXRfUmVzcG9uc2VQYXJhbXMoKTsKLSAgICAgICAgcmVzcG9uc2VQYXJh
bXMuc3VjY2VzcyA9IHJlc3BvbnNlLnN1Y2Nlc3M7Ci0gICAgICAgIHZhciBidWlsZGVyID0gbmV3
IGNvZGVjLk1lc3NhZ2VWMUJ1aWxkZXIoCi0gICAgICAgICAgICBrVXNiRGV2aWNlX1Jlc2V0X05h
bWUsCi0gICAgICAgICAgICBjb2RlYy5hbGlnbihVc2JEZXZpY2VfUmVzZXRfUmVzcG9uc2VQYXJh
bXMuZW5jb2RlZFNpemUpLAotICAgICAgICAgICAgY29kZWMua01lc3NhZ2VJc1Jlc3BvbnNlLCBy
ZWFkZXIucmVxdWVzdElEKTsKLSAgICAgICAgYnVpbGRlci5lbmNvZGVTdHJ1Y3QoVXNiRGV2aWNl
X1Jlc2V0X1Jlc3BvbnNlUGFyYW1zLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNw
b25zZVBhcmFtcyk7Ci0gICAgICAgIHZhciBtZXNzYWdlID0gYnVpbGRlci5maW5pc2goKTsKLSAg
ICAgICAgcmVzcG9uZGVyLmFjY2VwdChtZXNzYWdlKTsKLSAgICAgIH0pOwotICAgICAgcmV0dXJu
IHRydWU7Ci0gICAgY2FzZSBrVXNiRGV2aWNlX0NsZWFySGFsdF9OYW1lOgotICAgICAgdmFyIHBh
cmFtcyA9IHJlYWRlci5kZWNvZGVTdHJ1Y3QoVXNiRGV2aWNlX0NsZWFySGFsdF9QYXJhbXMpOwot
ICAgICAgdGhpcy5jbGVhckhhbHQocGFyYW1zLmVuZHBvaW50KS50aGVuKGZ1bmN0aW9uKHJlc3Bv
bnNlKSB7Ci0gICAgICAgIHZhciByZXNwb25zZVBhcmFtcyA9Ci0gICAgICAgICAgICBuZXcgVXNi
RGV2aWNlX0NsZWFySGFsdF9SZXNwb25zZVBhcmFtcygpOwotICAgICAgICByZXNwb25zZVBhcmFt
cy5zdWNjZXNzID0gcmVzcG9uc2Uuc3VjY2VzczsKLSAgICAgICAgdmFyIGJ1aWxkZXIgPSBuZXcg
Y29kZWMuTWVzc2FnZVYxQnVpbGRlcigKLSAgICAgICAgICAgIGtVc2JEZXZpY2VfQ2xlYXJIYWx0
X05hbWUsCi0gICAgICAgICAgICBjb2RlYy5hbGlnbihVc2JEZXZpY2VfQ2xlYXJIYWx0X1Jlc3Bv
bnNlUGFyYW1zLmVuY29kZWRTaXplKSwKLSAgICAgICAgICAgIGNvZGVjLmtNZXNzYWdlSXNSZXNw
b25zZSwgcmVhZGVyLnJlcXVlc3RJRCk7Ci0gICAgICAgIGJ1aWxkZXIuZW5jb2RlU3RydWN0KFVz
YkRldmljZV9DbGVhckhhbHRfUmVzcG9uc2VQYXJhbXMsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHJlc3BvbnNlUGFyYW1zKTsKLSAgICAgICAgdmFyIG1lc3NhZ2UgPSBidWlsZGVyLmZp
bmlzaCgpOwotICAgICAgICByZXNwb25kZXIuYWNjZXB0KG1lc3NhZ2UpOwotICAgICAgfSk7Ci0g
ICAgICByZXR1cm4gdHJ1ZTsKLSAgICBjYXNlIGtVc2JEZXZpY2VfQ29udHJvbFRyYW5zZmVySW5f
TmFtZToKLSAgICAgIHZhciBwYXJhbXMgPSByZWFkZXIuZGVjb2RlU3RydWN0KFVzYkRldmljZV9D
b250cm9sVHJhbnNmZXJJbl9QYXJhbXMpOwotICAgICAgdGhpcy5jb250cm9sVHJhbnNmZXJJbihw
YXJhbXMucGFyYW1zLCBwYXJhbXMubGVuZ3RoLCBwYXJhbXMudGltZW91dCkudGhlbihmdW5jdGlv
bihyZXNwb25zZSkgewotICAgICAgICB2YXIgcmVzcG9uc2VQYXJhbXMgPQotICAgICAgICAgICAg
bmV3IFVzYkRldmljZV9Db250cm9sVHJhbnNmZXJJbl9SZXNwb25zZVBhcmFtcygpOwotICAgICAg
ICByZXNwb25zZVBhcmFtcy5zdGF0dXMgPSByZXNwb25zZS5zdGF0dXM7Ci0gICAgICAgIHJlc3Bv
bnNlUGFyYW1zLmRhdGEgPSByZXNwb25zZS5kYXRhOwotICAgICAgICB2YXIgYnVpbGRlciA9IG5l
dyBjb2RlYy5NZXNzYWdlVjFCdWlsZGVyKAotICAgICAgICAgICAga1VzYkRldmljZV9Db250cm9s
VHJhbnNmZXJJbl9OYW1lLAotICAgICAgICAgICAgY29kZWMuYWxpZ24oVXNiRGV2aWNlX0NvbnRy
b2xUcmFuc2ZlckluX1Jlc3BvbnNlUGFyYW1zLmVuY29kZWRTaXplKSwKLSAgICAgICAgICAgIGNv
ZGVjLmtNZXNzYWdlSXNSZXNwb25zZSwgcmVhZGVyLnJlcXVlc3RJRCk7Ci0gICAgICAgIGJ1aWxk
ZXIuZW5jb2RlU3RydWN0KFVzYkRldmljZV9Db250cm9sVHJhbnNmZXJJbl9SZXNwb25zZVBhcmFt
cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2VQYXJhbXMpOwotICAgICAg
ICB2YXIgbWVzc2FnZSA9IGJ1aWxkZXIuZmluaXNoKCk7Ci0gICAgICAgIHJlc3BvbmRlci5hY2Nl
cHQobWVzc2FnZSk7Ci0gICAgICB9KTsKLSAgICAgIHJldHVybiB0cnVlOwotICAgIGNhc2Uga1Vz
YkRldmljZV9Db250cm9sVHJhbnNmZXJPdXRfTmFtZToKLSAgICAgIHZhciBwYXJhbXMgPSByZWFk
ZXIuZGVjb2RlU3RydWN0KFVzYkRldmljZV9Db250cm9sVHJhbnNmZXJPdXRfUGFyYW1zKTsKLSAg
ICAgIHRoaXMuY29udHJvbFRyYW5zZmVyT3V0KHBhcmFtcy5wYXJhbXMsIHBhcmFtcy5kYXRhLCBw
YXJhbXMudGltZW91dCkudGhlbihmdW5jdGlvbihyZXNwb25zZSkgewotICAgICAgICB2YXIgcmVz
cG9uc2VQYXJhbXMgPQotICAgICAgICAgICAgbmV3IFVzYkRldmljZV9Db250cm9sVHJhbnNmZXJP
dXRfUmVzcG9uc2VQYXJhbXMoKTsKLSAgICAgICAgcmVzcG9uc2VQYXJhbXMuc3RhdHVzID0gcmVz
cG9uc2Uuc3RhdHVzOwotICAgICAgICB2YXIgYnVpbGRlciA9IG5ldyBjb2RlYy5NZXNzYWdlVjFC
dWlsZGVyKAotICAgICAgICAgICAga1VzYkRldmljZV9Db250cm9sVHJhbnNmZXJPdXRfTmFtZSwK
LSAgICAgICAgICAgIGNvZGVjLmFsaWduKFVzYkRldmljZV9Db250cm9sVHJhbnNmZXJPdXRfUmVz
cG9uc2VQYXJhbXMuZW5jb2RlZFNpemUpLAotICAgICAgICAgICAgY29kZWMua01lc3NhZ2VJc1Jl
c3BvbnNlLCByZWFkZXIucmVxdWVzdElEKTsKLSAgICAgICAgYnVpbGRlci5lbmNvZGVTdHJ1Y3Qo
VXNiRGV2aWNlX0NvbnRyb2xUcmFuc2Zlck91dF9SZXNwb25zZVBhcmFtcywKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcmVzcG9uc2VQYXJhbXMpOwotICAgICAgICB2YXIgbWVzc2FnZSA9
IGJ1aWxkZXIuZmluaXNoKCk7Ci0gICAgICAgIHJlc3BvbmRlci5hY2NlcHQobWVzc2FnZSk7Ci0g
ICAgICB9KTsKLSAgICAgIHJldHVybiB0cnVlOwotICAgIGNhc2Uga1VzYkRldmljZV9HZW5lcmlj
VHJhbnNmZXJJbl9OYW1lOgotICAgICAgdmFyIHBhcmFtcyA9IHJlYWRlci5kZWNvZGVTdHJ1Y3Qo
VXNiRGV2aWNlX0dlbmVyaWNUcmFuc2ZlckluX1BhcmFtcyk7Ci0gICAgICB0aGlzLmdlbmVyaWNU
cmFuc2ZlckluKHBhcmFtcy5lbmRwb2ludE51bWJlciwgcGFyYW1zLmxlbmd0aCwgcGFyYW1zLnRp
bWVvdXQpLnRoZW4oZnVuY3Rpb24ocmVzcG9uc2UpIHsKLSAgICAgICAgdmFyIHJlc3BvbnNlUGFy
YW1zID0KLSAgICAgICAgICAgIG5ldyBVc2JEZXZpY2VfR2VuZXJpY1RyYW5zZmVySW5fUmVzcG9u
c2VQYXJhbXMoKTsKLSAgICAgICAgcmVzcG9uc2VQYXJhbXMuc3RhdHVzID0gcmVzcG9uc2Uuc3Rh
dHVzOwotICAgICAgICByZXNwb25zZVBhcmFtcy5kYXRhID0gcmVzcG9uc2UuZGF0YTsKLSAgICAg
ICAgdmFyIGJ1aWxkZXIgPSBuZXcgY29kZWMuTWVzc2FnZVYxQnVpbGRlcigKLSAgICAgICAgICAg
IGtVc2JEZXZpY2VfR2VuZXJpY1RyYW5zZmVySW5fTmFtZSwKLSAgICAgICAgICAgIGNvZGVjLmFs
aWduKFVzYkRldmljZV9HZW5lcmljVHJhbnNmZXJJbl9SZXNwb25zZVBhcmFtcy5lbmNvZGVkU2l6
ZSksCi0gICAgICAgICAgICBjb2RlYy5rTWVzc2FnZUlzUmVzcG9uc2UsIHJlYWRlci5yZXF1ZXN0
SUQpOwotICAgICAgICBidWlsZGVyLmVuY29kZVN0cnVjdChVc2JEZXZpY2VfR2VuZXJpY1RyYW5z
ZmVySW5fUmVzcG9uc2VQYXJhbXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3Bv
bnNlUGFyYW1zKTsKLSAgICAgICAgdmFyIG1lc3NhZ2UgPSBidWlsZGVyLmZpbmlzaCgpOwotICAg
ICAgICByZXNwb25kZXIuYWNjZXB0KG1lc3NhZ2UpOwotICAgICAgfSk7Ci0gICAgICByZXR1cm4g
dHJ1ZTsKLSAgICBjYXNlIGtVc2JEZXZpY2VfR2VuZXJpY1RyYW5zZmVyT3V0X05hbWU6Ci0gICAg
ICB2YXIgcGFyYW1zID0gcmVhZGVyLmRlY29kZVN0cnVjdChVc2JEZXZpY2VfR2VuZXJpY1RyYW5z
ZmVyT3V0X1BhcmFtcyk7Ci0gICAgICB0aGlzLmdlbmVyaWNUcmFuc2Zlck91dChwYXJhbXMuZW5k
cG9pbnROdW1iZXIsIHBhcmFtcy5kYXRhLCBwYXJhbXMudGltZW91dCkudGhlbihmdW5jdGlvbihy
ZXNwb25zZSkgewotICAgICAgICB2YXIgcmVzcG9uc2VQYXJhbXMgPQotICAgICAgICAgICAgbmV3
IFVzYkRldmljZV9HZW5lcmljVHJhbnNmZXJPdXRfUmVzcG9uc2VQYXJhbXMoKTsKLSAgICAgICAg
cmVzcG9uc2VQYXJhbXMuc3RhdHVzID0gcmVzcG9uc2Uuc3RhdHVzOwotICAgICAgICB2YXIgYnVp
bGRlciA9IG5ldyBjb2RlYy5NZXNzYWdlVjFCdWlsZGVyKAotICAgICAgICAgICAga1VzYkRldmlj
ZV9HZW5lcmljVHJhbnNmZXJPdXRfTmFtZSwKLSAgICAgICAgICAgIGNvZGVjLmFsaWduKFVzYkRl
dmljZV9HZW5lcmljVHJhbnNmZXJPdXRfUmVzcG9uc2VQYXJhbXMuZW5jb2RlZFNpemUpLAotICAg
ICAgICAgICAgY29kZWMua01lc3NhZ2VJc1Jlc3BvbnNlLCByZWFkZXIucmVxdWVzdElEKTsKLSAg
ICAgICAgYnVpbGRlci5lbmNvZGVTdHJ1Y3QoVXNiRGV2aWNlX0dlbmVyaWNUcmFuc2Zlck91dF9S
ZXNwb25zZVBhcmFtcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2VQYXJh
bXMpOwotICAgICAgICB2YXIgbWVzc2FnZSA9IGJ1aWxkZXIuZmluaXNoKCk7Ci0gICAgICAgIHJl
c3BvbmRlci5hY2NlcHQobWVzc2FnZSk7Ci0gICAgICB9KTsKLSAgICAgIHJldHVybiB0cnVlOwot
ICAgIGNhc2Uga1VzYkRldmljZV9Jc29jaHJvbm91c1RyYW5zZmVySW5fTmFtZToKLSAgICAgIHZh
ciBwYXJhbXMgPSByZWFkZXIuZGVjb2RlU3RydWN0KFVzYkRldmljZV9Jc29jaHJvbm91c1RyYW5z
ZmVySW5fUGFyYW1zKTsKLSAgICAgIHRoaXMuaXNvY2hyb25vdXNUcmFuc2ZlckluKHBhcmFtcy5l
bmRwb2ludE51bWJlciwgcGFyYW1zLnBhY2tldExlbmd0aHMsIHBhcmFtcy50aW1lb3V0KS50aGVu
KGZ1bmN0aW9uKHJlc3BvbnNlKSB7Ci0gICAgICAgIHZhciByZXNwb25zZVBhcmFtcyA9Ci0gICAg
ICAgICAgICBuZXcgVXNiRGV2aWNlX0lzb2Nocm9ub3VzVHJhbnNmZXJJbl9SZXNwb25zZVBhcmFt
cygpOwotICAgICAgICByZXNwb25zZVBhcmFtcy5kYXRhID0gcmVzcG9uc2UuZGF0YTsKLSAgICAg
ICAgcmVzcG9uc2VQYXJhbXMucGFja2V0cyA9IHJlc3BvbnNlLnBhY2tldHM7Ci0gICAgICAgIHZh
ciBidWlsZGVyID0gbmV3IGNvZGVjLk1lc3NhZ2VWMUJ1aWxkZXIoCi0gICAgICAgICAgICBrVXNi
RGV2aWNlX0lzb2Nocm9ub3VzVHJhbnNmZXJJbl9OYW1lLAotICAgICAgICAgICAgY29kZWMuYWxp
Z24oVXNiRGV2aWNlX0lzb2Nocm9ub3VzVHJhbnNmZXJJbl9SZXNwb25zZVBhcmFtcy5lbmNvZGVk
U2l6ZSksCi0gICAgICAgICAgICBjb2RlYy5rTWVzc2FnZUlzUmVzcG9uc2UsIHJlYWRlci5yZXF1
ZXN0SUQpOwotICAgICAgICBidWlsZGVyLmVuY29kZVN0cnVjdChVc2JEZXZpY2VfSXNvY2hyb25v
dXNUcmFuc2ZlckluX1Jlc3BvbnNlUGFyYW1zLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICByZXNwb25zZVBhcmFtcyk7Ci0gICAgICAgIHZhciBtZXNzYWdlID0gYnVpbGRlci5maW5pc2go
KTsKLSAgICAgICAgcmVzcG9uZGVyLmFjY2VwdChtZXNzYWdlKTsKLSAgICAgIH0pOwotICAgICAg
cmV0dXJuIHRydWU7Ci0gICAgY2FzZSBrVXNiRGV2aWNlX0lzb2Nocm9ub3VzVHJhbnNmZXJPdXRf
TmFtZToKLSAgICAgIHZhciBwYXJhbXMgPSByZWFkZXIuZGVjb2RlU3RydWN0KFVzYkRldmljZV9J
c29jaHJvbm91c1RyYW5zZmVyT3V0X1BhcmFtcyk7Ci0gICAgICB0aGlzLmlzb2Nocm9ub3VzVHJh
bnNmZXJPdXQocGFyYW1zLmVuZHBvaW50TnVtYmVyLCBwYXJhbXMuZGF0YSwgcGFyYW1zLnBhY2tl
dExlbmd0aHMsIHBhcmFtcy50aW1lb3V0KS50aGVuKGZ1bmN0aW9uKHJlc3BvbnNlKSB7Ci0gICAg
ICAgIHZhciByZXNwb25zZVBhcmFtcyA9Ci0gICAgICAgICAgICBuZXcgVXNiRGV2aWNlX0lzb2No
cm9ub3VzVHJhbnNmZXJPdXRfUmVzcG9uc2VQYXJhbXMoKTsKLSAgICAgICAgcmVzcG9uc2VQYXJh
bXMucGFja2V0cyA9IHJlc3BvbnNlLnBhY2tldHM7Ci0gICAgICAgIHZhciBidWlsZGVyID0gbmV3
IGNvZGVjLk1lc3NhZ2VWMUJ1aWxkZXIoCi0gICAgICAgICAgICBrVXNiRGV2aWNlX0lzb2Nocm9u
b3VzVHJhbnNmZXJPdXRfTmFtZSwKLSAgICAgICAgICAgIGNvZGVjLmFsaWduKFVzYkRldmljZV9J
c29jaHJvbm91c1RyYW5zZmVyT3V0X1Jlc3BvbnNlUGFyYW1zLmVuY29kZWRTaXplKSwKLSAgICAg
ICAgICAgIGNvZGVjLmtNZXNzYWdlSXNSZXNwb25zZSwgcmVhZGVyLnJlcXVlc3RJRCk7Ci0gICAg
ICAgIGJ1aWxkZXIuZW5jb2RlU3RydWN0KFVzYkRldmljZV9Jc29jaHJvbm91c1RyYW5zZmVyT3V0
X1Jlc3BvbnNlUGFyYW1zLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zZVBh
cmFtcyk7Ci0gICAgICAgIHZhciBtZXNzYWdlID0gYnVpbGRlci5maW5pc2goKTsKLSAgICAgICAg
cmVzcG9uZGVyLmFjY2VwdChtZXNzYWdlKTsKLSAgICAgIH0pOwotICAgICAgcmV0dXJuIHRydWU7
Ci0gICAgZGVmYXVsdDoKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gIH07Ci0KLSAgZnVu
Y3Rpb24gdmFsaWRhdGVVc2JEZXZpY2VSZXF1ZXN0KG1lc3NhZ2VWYWxpZGF0b3IpIHsKLSAgICB2
YXIgbWVzc2FnZSA9IG1lc3NhZ2VWYWxpZGF0b3IubWVzc2FnZTsKLSAgICB2YXIgcGFyYW1zQ2xh
c3MgPSBudWxsOwotICAgIHN3aXRjaCAobWVzc2FnZS5nZXROYW1lKCkpIHsKLSAgICAgIGNhc2Ug
a1VzYkRldmljZV9PcGVuX05hbWU6Ci0gICAgICAgIGlmIChtZXNzYWdlLmV4cGVjdHNSZXNwb25z
ZSgpKQotICAgICAgICAgIHBhcmFtc0NsYXNzID0gVXNiRGV2aWNlX09wZW5fUGFyYW1zOwotICAg
ICAgYnJlYWs7Ci0gICAgICBjYXNlIGtVc2JEZXZpY2VfQ2xvc2VfTmFtZToKLSAgICAgICAgaWYg
KG1lc3NhZ2UuZXhwZWN0c1Jlc3BvbnNlKCkpCi0gICAgICAgICAgcGFyYW1zQ2xhc3MgPSBVc2JE
ZXZpY2VfQ2xvc2VfUGFyYW1zOwotICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIGtVc2JEZXZpY2Vf
U2V0Q29uZmlndXJhdGlvbl9OYW1lOgotICAgICAgICBpZiAobWVzc2FnZS5leHBlY3RzUmVzcG9u
c2UoKSkKLSAgICAgICAgICBwYXJhbXNDbGFzcyA9IFVzYkRldmljZV9TZXRDb25maWd1cmF0aW9u
X1BhcmFtczsKLSAgICAgIGJyZWFrOwotICAgICAgY2FzZSBrVXNiRGV2aWNlX0NsYWltSW50ZXJm
YWNlX05hbWU6Ci0gICAgICAgIGlmIChtZXNzYWdlLmV4cGVjdHNSZXNwb25zZSgpKQotICAgICAg
ICAgIHBhcmFtc0NsYXNzID0gVXNiRGV2aWNlX0NsYWltSW50ZXJmYWNlX1BhcmFtczsKLSAgICAg
IGJyZWFrOwotICAgICAgY2FzZSBrVXNiRGV2aWNlX1JlbGVhc2VJbnRlcmZhY2VfTmFtZToKLSAg
ICAgICAgaWYgKG1lc3NhZ2UuZXhwZWN0c1Jlc3BvbnNlKCkpCi0gICAgICAgICAgcGFyYW1zQ2xh
c3MgPSBVc2JEZXZpY2VfUmVsZWFzZUludGVyZmFjZV9QYXJhbXM7Ci0gICAgICBicmVhazsKLSAg
ICAgIGNhc2Uga1VzYkRldmljZV9TZXRJbnRlcmZhY2VBbHRlcm5hdGVTZXR0aW5nX05hbWU6Ci0g
ICAgICAgIGlmIChtZXNzYWdlLmV4cGVjdHNSZXNwb25zZSgpKQotICAgICAgICAgIHBhcmFtc0Ns
YXNzID0gVXNiRGV2aWNlX1NldEludGVyZmFjZUFsdGVybmF0ZVNldHRpbmdfUGFyYW1zOwotICAg
ICAgYnJlYWs7Ci0gICAgICBjYXNlIGtVc2JEZXZpY2VfUmVzZXRfTmFtZToKLSAgICAgICAgaWYg
KG1lc3NhZ2UuZXhwZWN0c1Jlc3BvbnNlKCkpCi0gICAgICAgICAgcGFyYW1zQ2xhc3MgPSBVc2JE
ZXZpY2VfUmVzZXRfUGFyYW1zOwotICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIGtVc2JEZXZpY2Vf
Q2xlYXJIYWx0X05hbWU6Ci0gICAgICAgIGlmIChtZXNzYWdlLmV4cGVjdHNSZXNwb25zZSgpKQot
ICAgICAgICAgIHBhcmFtc0NsYXNzID0gVXNiRGV2aWNlX0NsZWFySGFsdF9QYXJhbXM7Ci0gICAg
ICBicmVhazsKLSAgICAgIGNhc2Uga1VzYkRldmljZV9Db250cm9sVHJhbnNmZXJJbl9OYW1lOgot
ICAgICAgICBpZiAobWVzc2FnZS5leHBlY3RzUmVzcG9uc2UoKSkKLSAgICAgICAgICBwYXJhbXND
bGFzcyA9IFVzYkRldmljZV9Db250cm9sVHJhbnNmZXJJbl9QYXJhbXM7Ci0gICAgICBicmVhazsK
LSAgICAgIGNhc2Uga1VzYkRldmljZV9Db250cm9sVHJhbnNmZXJPdXRfTmFtZToKLSAgICAgICAg
aWYgKG1lc3NhZ2UuZXhwZWN0c1Jlc3BvbnNlKCkpCi0gICAgICAgICAgcGFyYW1zQ2xhc3MgPSBV
c2JEZXZpY2VfQ29udHJvbFRyYW5zZmVyT3V0X1BhcmFtczsKLSAgICAgIGJyZWFrOwotICAgICAg
Y2FzZSBrVXNiRGV2aWNlX0dlbmVyaWNUcmFuc2ZlckluX05hbWU6Ci0gICAgICAgIGlmIChtZXNz
YWdlLmV4cGVjdHNSZXNwb25zZSgpKQotICAgICAgICAgIHBhcmFtc0NsYXNzID0gVXNiRGV2aWNl
X0dlbmVyaWNUcmFuc2ZlckluX1BhcmFtczsKLSAgICAgIGJyZWFrOwotICAgICAgY2FzZSBrVXNi
RGV2aWNlX0dlbmVyaWNUcmFuc2Zlck91dF9OYW1lOgotICAgICAgICBpZiAobWVzc2FnZS5leHBl
Y3RzUmVzcG9uc2UoKSkKLSAgICAgICAgICBwYXJhbXNDbGFzcyA9IFVzYkRldmljZV9HZW5lcmlj
VHJhbnNmZXJPdXRfUGFyYW1zOwotICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIGtVc2JEZXZpY2Vf
SXNvY2hyb25vdXNUcmFuc2ZlckluX05hbWU6Ci0gICAgICAgIGlmIChtZXNzYWdlLmV4cGVjdHNS
ZXNwb25zZSgpKQotICAgICAgICAgIHBhcmFtc0NsYXNzID0gVXNiRGV2aWNlX0lzb2Nocm9ub3Vz
VHJhbnNmZXJJbl9QYXJhbXM7Ci0gICAgICBicmVhazsKLSAgICAgIGNhc2Uga1VzYkRldmljZV9J
c29jaHJvbm91c1RyYW5zZmVyT3V0X05hbWU6Ci0gICAgICAgIGlmIChtZXNzYWdlLmV4cGVjdHNS
ZXNwb25zZSgpKQotICAgICAgICAgIHBhcmFtc0NsYXNzID0gVXNiRGV2aWNlX0lzb2Nocm9ub3Vz
VHJhbnNmZXJPdXRfUGFyYW1zOwotICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGlmIChwYXJhbXND
bGFzcyA9PT0gbnVsbCkKLSAgICAgIHJldHVybiB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5P
TkU7Ci0gICAgcmV0dXJuIHBhcmFtc0NsYXNzLnZhbGlkYXRlKG1lc3NhZ2VWYWxpZGF0b3IsIG1l
c3NhZ2VWYWxpZGF0b3IubWVzc2FnZS5nZXRIZWFkZXJOdW1CeXRlcygpKTsKLSAgfQotCi0gIGZ1
bmN0aW9uIHZhbGlkYXRlVXNiRGV2aWNlUmVzcG9uc2UobWVzc2FnZVZhbGlkYXRvcikgewotICAg
dmFyIG1lc3NhZ2UgPSBtZXNzYWdlVmFsaWRhdG9yLm1lc3NhZ2U7Ci0gICB2YXIgcGFyYW1zQ2xh
c3MgPSBudWxsOwotICAgc3dpdGNoIChtZXNzYWdlLmdldE5hbWUoKSkgewotICAgICAgY2FzZSBr
VXNiRGV2aWNlX09wZW5fTmFtZToKLSAgICAgICAgaWYgKG1lc3NhZ2UuaXNSZXNwb25zZSgpKQot
ICAgICAgICAgIHBhcmFtc0NsYXNzID0gVXNiRGV2aWNlX09wZW5fUmVzcG9uc2VQYXJhbXM7Ci0g
ICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBrVXNiRGV2aWNlX0Nsb3NlX05hbWU6Ci0gICAgICAg
IGlmIChtZXNzYWdlLmlzUmVzcG9uc2UoKSkKLSAgICAgICAgICBwYXJhbXNDbGFzcyA9IFVzYkRl
dmljZV9DbG9zZV9SZXNwb25zZVBhcmFtczsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIGtV
c2JEZXZpY2VfU2V0Q29uZmlndXJhdGlvbl9OYW1lOgotICAgICAgICBpZiAobWVzc2FnZS5pc1Jl
c3BvbnNlKCkpCi0gICAgICAgICAgcGFyYW1zQ2xhc3MgPSBVc2JEZXZpY2VfU2V0Q29uZmlndXJh
dGlvbl9SZXNwb25zZVBhcmFtczsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIGtVc2JEZXZp
Y2VfQ2xhaW1JbnRlcmZhY2VfTmFtZToKLSAgICAgICAgaWYgKG1lc3NhZ2UuaXNSZXNwb25zZSgp
KQotICAgICAgICAgIHBhcmFtc0NsYXNzID0gVXNiRGV2aWNlX0NsYWltSW50ZXJmYWNlX1Jlc3Bv
bnNlUGFyYW1zOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2Uga1VzYkRldmljZV9SZWxlYXNl
SW50ZXJmYWNlX05hbWU6Ci0gICAgICAgIGlmIChtZXNzYWdlLmlzUmVzcG9uc2UoKSkKLSAgICAg
ICAgICBwYXJhbXNDbGFzcyA9IFVzYkRldmljZV9SZWxlYXNlSW50ZXJmYWNlX1Jlc3BvbnNlUGFy
YW1zOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2Uga1VzYkRldmljZV9TZXRJbnRlcmZhY2VB
bHRlcm5hdGVTZXR0aW5nX05hbWU6Ci0gICAgICAgIGlmIChtZXNzYWdlLmlzUmVzcG9uc2UoKSkK
LSAgICAgICAgICBwYXJhbXNDbGFzcyA9IFVzYkRldmljZV9TZXRJbnRlcmZhY2VBbHRlcm5hdGVT
ZXR0aW5nX1Jlc3BvbnNlUGFyYW1zOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2Uga1VzYkRl
dmljZV9SZXNldF9OYW1lOgotICAgICAgICBpZiAobWVzc2FnZS5pc1Jlc3BvbnNlKCkpCi0gICAg
ICAgICAgcGFyYW1zQ2xhc3MgPSBVc2JEZXZpY2VfUmVzZXRfUmVzcG9uc2VQYXJhbXM7Ci0gICAg
ICAgIGJyZWFrOwotICAgICAgY2FzZSBrVXNiRGV2aWNlX0NsZWFySGFsdF9OYW1lOgotICAgICAg
ICBpZiAobWVzc2FnZS5pc1Jlc3BvbnNlKCkpCi0gICAgICAgICAgcGFyYW1zQ2xhc3MgPSBVc2JE
ZXZpY2VfQ2xlYXJIYWx0X1Jlc3BvbnNlUGFyYW1zOwotICAgICAgICBicmVhazsKLSAgICAgIGNh
c2Uga1VzYkRldmljZV9Db250cm9sVHJhbnNmZXJJbl9OYW1lOgotICAgICAgICBpZiAobWVzc2Fn
ZS5pc1Jlc3BvbnNlKCkpCi0gICAgICAgICAgcGFyYW1zQ2xhc3MgPSBVc2JEZXZpY2VfQ29udHJv
bFRyYW5zZmVySW5fUmVzcG9uc2VQYXJhbXM7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBr
VXNiRGV2aWNlX0NvbnRyb2xUcmFuc2Zlck91dF9OYW1lOgotICAgICAgICBpZiAobWVzc2FnZS5p
c1Jlc3BvbnNlKCkpCi0gICAgICAgICAgcGFyYW1zQ2xhc3MgPSBVc2JEZXZpY2VfQ29udHJvbFRy
YW5zZmVyT3V0X1Jlc3BvbnNlUGFyYW1zOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2Uga1Vz
YkRldmljZV9HZW5lcmljVHJhbnNmZXJJbl9OYW1lOgotICAgICAgICBpZiAobWVzc2FnZS5pc1Jl
c3BvbnNlKCkpCi0gICAgICAgICAgcGFyYW1zQ2xhc3MgPSBVc2JEZXZpY2VfR2VuZXJpY1RyYW5z
ZmVySW5fUmVzcG9uc2VQYXJhbXM7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBrVXNiRGV2
aWNlX0dlbmVyaWNUcmFuc2Zlck91dF9OYW1lOgotICAgICAgICBpZiAobWVzc2FnZS5pc1Jlc3Bv
bnNlKCkpCi0gICAgICAgICAgcGFyYW1zQ2xhc3MgPSBVc2JEZXZpY2VfR2VuZXJpY1RyYW5zZmVy
T3V0X1Jlc3BvbnNlUGFyYW1zOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2Uga1VzYkRldmlj
ZV9Jc29jaHJvbm91c1RyYW5zZmVySW5fTmFtZToKLSAgICAgICAgaWYgKG1lc3NhZ2UuaXNSZXNw
b25zZSgpKQotICAgICAgICAgIHBhcmFtc0NsYXNzID0gVXNiRGV2aWNlX0lzb2Nocm9ub3VzVHJh
bnNmZXJJbl9SZXNwb25zZVBhcmFtczsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIGtVc2JE
ZXZpY2VfSXNvY2hyb25vdXNUcmFuc2Zlck91dF9OYW1lOgotICAgICAgICBpZiAobWVzc2FnZS5p
c1Jlc3BvbnNlKCkpCi0gICAgICAgICAgcGFyYW1zQ2xhc3MgPSBVc2JEZXZpY2VfSXNvY2hyb25v
dXNUcmFuc2Zlck91dF9SZXNwb25zZVBhcmFtczsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAg
IGlmIChwYXJhbXNDbGFzcyA9PT0gbnVsbCkKLSAgICAgIHJldHVybiB2YWxpZGF0b3IudmFsaWRh
dGlvbkVycm9yLk5PTkU7Ci0gICAgcmV0dXJuIHBhcmFtc0NsYXNzLnZhbGlkYXRlKG1lc3NhZ2VW
YWxpZGF0b3IsIG1lc3NhZ2VWYWxpZGF0b3IubWVzc2FnZS5nZXRIZWFkZXJOdW1CeXRlcygpKTsK
LSAgfQotCi0gIHZhciBVc2JEZXZpY2UgPSB7Ci0gICAgbmFtZTogJ2RldmljZS5tb2pvbS5Vc2JE
ZXZpY2UnLAotICAgIGtWZXJzaW9uOiAwLAotICAgIHB0ckNsYXNzOiBVc2JEZXZpY2VQdHIsCi0g
ICAgcHJveHlDbGFzczogVXNiRGV2aWNlUHJveHksCi0gICAgc3R1YkNsYXNzOiBVc2JEZXZpY2VT
dHViLAotICAgIHZhbGlkYXRlUmVxdWVzdDogdmFsaWRhdGVVc2JEZXZpY2VSZXF1ZXN0LAotICAg
IHZhbGlkYXRlUmVzcG9uc2U6IHZhbGlkYXRlVXNiRGV2aWNlUmVzcG9uc2UsCi0gIH07Ci0gIFVz
YkRldmljZVN0dWIucHJvdG90eXBlLnZhbGlkYXRvciA9IHZhbGlkYXRlVXNiRGV2aWNlUmVxdWVz
dDsKLSAgVXNiRGV2aWNlUHJveHkucHJvdG90eXBlLnZhbGlkYXRvciA9IHZhbGlkYXRlVXNiRGV2
aWNlUmVzcG9uc2U7Ci0gIHZhciBrVXNiRGV2aWNlQ2xpZW50X09uRGV2aWNlT3BlbmVkX05hbWUg
PSAwOwotICB2YXIga1VzYkRldmljZUNsaWVudF9PbkRldmljZUNsb3NlZF9OYW1lID0gMTsKLQot
ICBmdW5jdGlvbiBVc2JEZXZpY2VDbGllbnRQdHIoaGFuZGxlT3JQdHJJbmZvKSB7Ci0gICAgdGhp
cy5wdHIgPSBuZXcgYmluZGluZ3MuSW50ZXJmYWNlUHRyQ29udHJvbGxlcihVc2JEZXZpY2VDbGll
bnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBo
YW5kbGVPclB0ckluZm8pOwotICB9Ci0KLSAgZnVuY3Rpb24gVXNiRGV2aWNlQ2xpZW50QXNzb2Np
YXRlZFB0cihhc3NvY2lhdGVkSW50ZXJmYWNlUHRySW5mbykgewotICAgIHRoaXMucHRyID0gbmV3
IGFzc29jaWF0ZWRCaW5kaW5ncy5Bc3NvY2lhdGVkSW50ZXJmYWNlUHRyQ29udHJvbGxlcigKLSAg
ICAgICAgVXNiRGV2aWNlQ2xpZW50LCBhc3NvY2lhdGVkSW50ZXJmYWNlUHRySW5mbyk7Ci0gIH0K
LQotICBVc2JEZXZpY2VDbGllbnRBc3NvY2lhdGVkUHRyLnByb3RvdHlwZSA9Ci0gICAgICBPYmpl
Y3QuY3JlYXRlKFVzYkRldmljZUNsaWVudFB0ci5wcm90b3R5cGUpOwotICBVc2JEZXZpY2VDbGll
bnRBc3NvY2lhdGVkUHRyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9Ci0gICAgICBVc2JEZXZpY2VD
bGllbnRBc3NvY2lhdGVkUHRyOwotCi0gIGZ1bmN0aW9uIFVzYkRldmljZUNsaWVudFByb3h5KHJl
Y2VpdmVyKSB7Ci0gICAgdGhpcy5yZWNlaXZlcl8gPSByZWNlaXZlcjsKLSAgfQotICBVc2JEZXZp
Y2VDbGllbnRQdHIucHJvdG90eXBlLm9uRGV2aWNlT3BlbmVkID0gZnVuY3Rpb24oKSB7Ci0gICAg
cmV0dXJuIFVzYkRldmljZUNsaWVudFByb3h5LnByb3RvdHlwZS5vbkRldmljZU9wZW5lZAotICAg
ICAgICAuYXBwbHkodGhpcy5wdHIuZ2V0UHJveHkoKSwgYXJndW1lbnRzKTsKLSAgfTsKLQotICBV
c2JEZXZpY2VDbGllbnRQcm94eS5wcm90b3R5cGUub25EZXZpY2VPcGVuZWQgPSBmdW5jdGlvbigp
IHsKLSAgICB2YXIgcGFyYW1zXyA9IG5ldyBVc2JEZXZpY2VDbGllbnRfT25EZXZpY2VPcGVuZWRf
UGFyYW1zKCk7Ci0gICAgdmFyIGJ1aWxkZXIgPSBuZXcgY29kZWMuTWVzc2FnZVYwQnVpbGRlcigK
LSAgICAgICAga1VzYkRldmljZUNsaWVudF9PbkRldmljZU9wZW5lZF9OYW1lLAotICAgICAgICBj
b2RlYy5hbGlnbihVc2JEZXZpY2VDbGllbnRfT25EZXZpY2VPcGVuZWRfUGFyYW1zLmVuY29kZWRT
aXplKSk7Ci0gICAgYnVpbGRlci5lbmNvZGVTdHJ1Y3QoVXNiRGV2aWNlQ2xpZW50X09uRGV2aWNl
T3BlbmVkX1BhcmFtcywgcGFyYW1zXyk7Ci0gICAgdmFyIG1lc3NhZ2UgPSBidWlsZGVyLmZpbmlz
aCgpOwotICAgIHRoaXMucmVjZWl2ZXJfLmFjY2VwdChtZXNzYWdlKTsKLSAgfTsKLSAgVXNiRGV2
aWNlQ2xpZW50UHRyLnByb3RvdHlwZS5vbkRldmljZUNsb3NlZCA9IGZ1bmN0aW9uKCkgewotICAg
IHJldHVybiBVc2JEZXZpY2VDbGllbnRQcm94eS5wcm90b3R5cGUub25EZXZpY2VDbG9zZWQKLSAg
ICAgICAgLmFwcGx5KHRoaXMucHRyLmdldFByb3h5KCksIGFyZ3VtZW50cyk7Ci0gIH07Ci0KLSAg
VXNiRGV2aWNlQ2xpZW50UHJveHkucHJvdG90eXBlLm9uRGV2aWNlQ2xvc2VkID0gZnVuY3Rpb24o
KSB7Ci0gICAgdmFyIHBhcmFtc18gPSBuZXcgVXNiRGV2aWNlQ2xpZW50X09uRGV2aWNlQ2xvc2Vk
X1BhcmFtcygpOwotICAgIHZhciBidWlsZGVyID0gbmV3IGNvZGVjLk1lc3NhZ2VWMEJ1aWxkZXIo
Ci0gICAgICAgIGtVc2JEZXZpY2VDbGllbnRfT25EZXZpY2VDbG9zZWRfTmFtZSwKLSAgICAgICAg
Y29kZWMuYWxpZ24oVXNiRGV2aWNlQ2xpZW50X09uRGV2aWNlQ2xvc2VkX1BhcmFtcy5lbmNvZGVk
U2l6ZSkpOwotICAgIGJ1aWxkZXIuZW5jb2RlU3RydWN0KFVzYkRldmljZUNsaWVudF9PbkRldmlj
ZUNsb3NlZF9QYXJhbXMsIHBhcmFtc18pOwotICAgIHZhciBtZXNzYWdlID0gYnVpbGRlci5maW5p
c2goKTsKLSAgICB0aGlzLnJlY2VpdmVyXy5hY2NlcHQobWVzc2FnZSk7Ci0gIH07Ci0KLSAgZnVu
Y3Rpb24gVXNiRGV2aWNlQ2xpZW50U3R1YihkZWxlZ2F0ZSkgewotICAgIHRoaXMuZGVsZWdhdGVf
ID0gZGVsZWdhdGU7Ci0gIH0KLSAgVXNiRGV2aWNlQ2xpZW50U3R1Yi5wcm90b3R5cGUub25EZXZp
Y2VPcGVuZWQgPSBmdW5jdGlvbigpIHsKLSAgICByZXR1cm4gdGhpcy5kZWxlZ2F0ZV8gJiYgdGhp
cy5kZWxlZ2F0ZV8ub25EZXZpY2VPcGVuZWQgJiYgdGhpcy5kZWxlZ2F0ZV8ub25EZXZpY2VPcGVu
ZWQoKTsKLSAgfQotICBVc2JEZXZpY2VDbGllbnRTdHViLnByb3RvdHlwZS5vbkRldmljZUNsb3Nl
ZCA9IGZ1bmN0aW9uKCkgewotICAgIHJldHVybiB0aGlzLmRlbGVnYXRlXyAmJiB0aGlzLmRlbGVn
YXRlXy5vbkRldmljZUNsb3NlZCAmJiB0aGlzLmRlbGVnYXRlXy5vbkRldmljZUNsb3NlZCgpOwot
ICB9Ci0KLSAgVXNiRGV2aWNlQ2xpZW50U3R1Yi5wcm90b3R5cGUuYWNjZXB0ID0gZnVuY3Rpb24o
bWVzc2FnZSkgewotICAgIHZhciByZWFkZXIgPSBuZXcgY29kZWMuTWVzc2FnZVJlYWRlcihtZXNz
YWdlKTsKLSAgICBzd2l0Y2ggKHJlYWRlci5tZXNzYWdlTmFtZSkgewotICAgIGNhc2Uga1VzYkRl
dmljZUNsaWVudF9PbkRldmljZU9wZW5lZF9OYW1lOgotICAgICAgdmFyIHBhcmFtcyA9IHJlYWRl
ci5kZWNvZGVTdHJ1Y3QoVXNiRGV2aWNlQ2xpZW50X09uRGV2aWNlT3BlbmVkX1BhcmFtcyk7Ci0g
ICAgICB0aGlzLm9uRGV2aWNlT3BlbmVkKCk7Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICBjYXNl
IGtVc2JEZXZpY2VDbGllbnRfT25EZXZpY2VDbG9zZWRfTmFtZToKLSAgICAgIHZhciBwYXJhbXMg
PSByZWFkZXIuZGVjb2RlU3RydWN0KFVzYkRldmljZUNsaWVudF9PbkRldmljZUNsb3NlZF9QYXJh
bXMpOwotICAgICAgdGhpcy5vbkRldmljZUNsb3NlZCgpOwotICAgICAgcmV0dXJuIHRydWU7Ci0g
ICAgZGVmYXVsdDoKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gIH07Ci0KLSAgVXNiRGV2
aWNlQ2xpZW50U3R1Yi5wcm90b3R5cGUuYWNjZXB0V2l0aFJlc3BvbmRlciA9Ci0gICAgICBmdW5j
dGlvbihtZXNzYWdlLCByZXNwb25kZXIpIHsKLSAgICB2YXIgcmVhZGVyID0gbmV3IGNvZGVjLk1l
c3NhZ2VSZWFkZXIobWVzc2FnZSk7Ci0gICAgc3dpdGNoIChyZWFkZXIubWVzc2FnZU5hbWUpIHsK
LSAgICBkZWZhdWx0OgotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgfTsKLQotICBmdW5j
dGlvbiB2YWxpZGF0ZVVzYkRldmljZUNsaWVudFJlcXVlc3QobWVzc2FnZVZhbGlkYXRvcikgewot
ICAgIHZhciBtZXNzYWdlID0gbWVzc2FnZVZhbGlkYXRvci5tZXNzYWdlOwotICAgIHZhciBwYXJh
bXNDbGFzcyA9IG51bGw7Ci0gICAgc3dpdGNoIChtZXNzYWdlLmdldE5hbWUoKSkgewotICAgICAg
Y2FzZSBrVXNiRGV2aWNlQ2xpZW50X09uRGV2aWNlT3BlbmVkX05hbWU6Ci0gICAgICAgIGlmICgh
bWVzc2FnZS5leHBlY3RzUmVzcG9uc2UoKSAmJiAhbWVzc2FnZS5pc1Jlc3BvbnNlKCkpCi0gICAg
ICAgICAgcGFyYW1zQ2xhc3MgPSBVc2JEZXZpY2VDbGllbnRfT25EZXZpY2VPcGVuZWRfUGFyYW1z
OwotICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIGtVc2JEZXZpY2VDbGllbnRfT25EZXZpY2VDbG9z
ZWRfTmFtZToKLSAgICAgICAgaWYgKCFtZXNzYWdlLmV4cGVjdHNSZXNwb25zZSgpICYmICFtZXNz
YWdlLmlzUmVzcG9uc2UoKSkKLSAgICAgICAgICBwYXJhbXNDbGFzcyA9IFVzYkRldmljZUNsaWVu
dF9PbkRldmljZUNsb3NlZF9QYXJhbXM7Ci0gICAgICBicmVhazsKLSAgICB9Ci0gICAgaWYgKHBh
cmFtc0NsYXNzID09PSBudWxsKQotICAgICAgcmV0dXJuIHZhbGlkYXRvci52YWxpZGF0aW9uRXJy
b3IuTk9ORTsKLSAgICByZXR1cm4gcGFyYW1zQ2xhc3MudmFsaWRhdGUobWVzc2FnZVZhbGlkYXRv
ciwgbWVzc2FnZVZhbGlkYXRvci5tZXNzYWdlLmdldEhlYWRlck51bUJ5dGVzKCkpOwotICB9Ci0K
LSAgZnVuY3Rpb24gdmFsaWRhdGVVc2JEZXZpY2VDbGllbnRSZXNwb25zZShtZXNzYWdlVmFsaWRh
dG9yKSB7Ci0gICAgcmV0dXJuIHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORTsKLSAgfQot
Ci0gIHZhciBVc2JEZXZpY2VDbGllbnQgPSB7Ci0gICAgbmFtZTogJ2RldmljZS5tb2pvbS5Vc2JE
ZXZpY2VDbGllbnQnLAotICAgIGtWZXJzaW9uOiAwLAotICAgIHB0ckNsYXNzOiBVc2JEZXZpY2VD
bGllbnRQdHIsCi0gICAgcHJveHlDbGFzczogVXNiRGV2aWNlQ2xpZW50UHJveHksCi0gICAgc3R1
YkNsYXNzOiBVc2JEZXZpY2VDbGllbnRTdHViLAotICAgIHZhbGlkYXRlUmVxdWVzdDogdmFsaWRh
dGVVc2JEZXZpY2VDbGllbnRSZXF1ZXN0LAotICAgIHZhbGlkYXRlUmVzcG9uc2U6IG51bGwsCi0g
IH07Ci0gIFVzYkRldmljZUNsaWVudFN0dWIucHJvdG90eXBlLnZhbGlkYXRvciA9IHZhbGlkYXRl
VXNiRGV2aWNlQ2xpZW50UmVxdWVzdDsKLSAgVXNiRGV2aWNlQ2xpZW50UHJveHkucHJvdG90eXBl
LnZhbGlkYXRvciA9IG51bGw7Ci0gIGV4cG9ydHMuVXNiT3BlbkRldmljZUVycm9yID0gVXNiT3Bl
bkRldmljZUVycm9yOwotICBleHBvcnRzLlVzYlRyYW5zZmVyRGlyZWN0aW9uID0gVXNiVHJhbnNm
ZXJEaXJlY3Rpb247Ci0gIGV4cG9ydHMuVXNiQ29udHJvbFRyYW5zZmVyVHlwZSA9IFVzYkNvbnRy
b2xUcmFuc2ZlclR5cGU7Ci0gIGV4cG9ydHMuVXNiQ29udHJvbFRyYW5zZmVyUmVjaXBpZW50ID0g
VXNiQ29udHJvbFRyYW5zZmVyUmVjaXBpZW50OwotICBleHBvcnRzLlVzYlRyYW5zZmVyVHlwZSA9
IFVzYlRyYW5zZmVyVHlwZTsKLSAgZXhwb3J0cy5Vc2JTeW5jaHJvbml6YXRpb25UeXBlID0gVXNi
U3luY2hyb25pemF0aW9uVHlwZTsKLSAgZXhwb3J0cy5Vc2JVc2FnZVR5cGUgPSBVc2JVc2FnZVR5
cGU7Ci0gIGV4cG9ydHMuVXNiVHJhbnNmZXJTdGF0dXMgPSBVc2JUcmFuc2ZlclN0YXR1czsKLSAg
ZXhwb3J0cy5Vc2JFbmRwb2ludEluZm8gPSBVc2JFbmRwb2ludEluZm87Ci0gIGV4cG9ydHMuVXNi
QWx0ZXJuYXRlSW50ZXJmYWNlSW5mbyA9IFVzYkFsdGVybmF0ZUludGVyZmFjZUluZm87Ci0gIGV4
cG9ydHMuVXNiSW50ZXJmYWNlSW5mbyA9IFVzYkludGVyZmFjZUluZm87Ci0gIGV4cG9ydHMuVXNi
Q29uZmlndXJhdGlvbkluZm8gPSBVc2JDb25maWd1cmF0aW9uSW5mbzsKLSAgZXhwb3J0cy5Vc2JE
ZXZpY2VJbmZvID0gVXNiRGV2aWNlSW5mbzsKLSAgZXhwb3J0cy5Vc2JDb250cm9sVHJhbnNmZXJQ
YXJhbXMgPSBVc2JDb250cm9sVHJhbnNmZXJQYXJhbXM7Ci0gIGV4cG9ydHMuVXNiSXNvY2hyb25v
dXNQYWNrZXQgPSBVc2JJc29jaHJvbm91c1BhY2tldDsKLSAgZXhwb3J0cy5Vc2JEZXZpY2UgPSBV
c2JEZXZpY2U7Ci0gIGV4cG9ydHMuVXNiRGV2aWNlUHRyID0gVXNiRGV2aWNlUHRyOwotICBleHBv
cnRzLlVzYkRldmljZUFzc29jaWF0ZWRQdHIgPSBVc2JEZXZpY2VBc3NvY2lhdGVkUHRyOwotICBl
eHBvcnRzLlVzYkRldmljZUNsaWVudCA9IFVzYkRldmljZUNsaWVudDsKLSAgZXhwb3J0cy5Vc2JE
ZXZpY2VDbGllbnRQdHIgPSBVc2JEZXZpY2VDbGllbnRQdHI7Ci0gIGV4cG9ydHMuVXNiRGV2aWNl
Q2xpZW50QXNzb2NpYXRlZFB0ciA9IFVzYkRldmljZUNsaWVudEFzc29jaWF0ZWRQdHI7Ci19KSgp
OwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0
cy9yZXNvdXJjZXMvY2hyb21pdW0vZGV2aWNlLm1vam9tLmpzLmhlYWRlcnMgYi9MYXlvdXRUZXN0
cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS9kZXZp
Y2UubW9qb20uanMuaGVhZGVycwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjgwNWMz
MjNkZjVhOTc1MjMxNjQ4YjgzMGUzM2NlMTgzYzNjYmJkMy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBs
YXRmb3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS9kZXZpY2UubW9qb20uanMuaGVhZGVycwor
KysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLUNvbnRlbnQtVHlwZTogdGV4dC9qYXZhc2NyaXB0
OyBjaGFyc2V0PXV0Zi04CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2Vi
LXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS9kZXZpY2VfZW51bWVyYXRpb25fb3B0
aW9ucy5tb2pvbS5qcyBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVz
dHMvcmVzb3VyY2VzL2Nocm9taXVtL2RldmljZV9lbnVtZXJhdGlvbl9vcHRpb25zLm1vam9tLmpz
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1YTc3NWFkMzY4NzhmMmMyYTNjZjA1ZGI1
NTY5N2I4NTFlMmE0ZGI3Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Ci0tLSBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3Vy
Y2VzL2Nocm9taXVtL2RldmljZV9lbnVtZXJhdGlvbl9vcHRpb25zLm1vam9tLmpzCisrKyAvZGV2
L251bGwKQEAgLTEsMTg0ICswLDAgQEAKLS8vIENvcHlyaWdodCAyMDE0IFRoZSBDaHJvbWl1bSBB
dXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUg
aXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQg
aW4gdGhlIExJQ0VOU0UgZmlsZS4KLQotJ3VzZSBzdHJpY3QnOwotCi0oZnVuY3Rpb24oKSB7Ci0g
IHZhciBtb2pvbUlkID0gJ2RldmljZS91c2IvcHVibGljL21vam9tL2RldmljZV9lbnVtZXJhdGlv
bl9vcHRpb25zLm1vam9tJzsKLSAgaWYgKG1vam8uaW50ZXJuYWwuaXNNb2pvbUxvYWRlZChtb2pv
bUlkKSkgewotICAgIGNvbnNvbGUud2FybignVGhlIGZvbGxvd2luZyBtb2pvbSBpcyBsb2FkZWQg
bXVsdGlwbGUgdGltZXM6ICcgKyBtb2pvbUlkKTsKLSAgICByZXR1cm47Ci0gIH0KLSAgbW9qby5p
bnRlcm5hbC5tYXJrTW9qb21Mb2FkZWQobW9qb21JZCk7Ci0gIHZhciBiaW5kaW5ncyA9IG1vam87
Ci0gIHZhciBhc3NvY2lhdGVkQmluZGluZ3MgPSBtb2pvOwotICB2YXIgY29kZWMgPSBtb2pvLmlu
dGVybmFsOwotICB2YXIgdmFsaWRhdG9yID0gbW9qby5pbnRlcm5hbDsKLQotICB2YXIgZXhwb3J0
cyA9IG1vam8uaW50ZXJuYWwuZXhwb3NlTmFtZXNwYWNlKCdkZXZpY2UubW9qb20nKTsKLSAgdmFy
IHN0cmluZzE2JCA9Ci0gICAgICBtb2pvLmludGVybmFsLmV4cG9zZU5hbWVzcGFjZSgnbW9qb0Jh
c2UubW9qb20nKTsKLSAgaWYgKG1vam8uY29uZmlnLmF1dG9Mb2FkTW9qb21EZXBzKSB7Ci0gICAg
bW9qby5pbnRlcm5hbC5sb2FkTW9qb21JZk5lY2Vzc2FyeSgKLSAgICAgICAgJ21vam8vcHVibGlj
L21vam9tL2Jhc2Uvc3RyaW5nMTYubW9qb20nLCAnLi4vLi4vLi4vLi4vbW9qby9wdWJsaWMvbW9q
b20vYmFzZS9zdHJpbmcxNi5tb2pvbS5qcycpOwotICB9Ci0KLQotCi0gIGZ1bmN0aW9uIFVzYkRl
dmljZUZpbHRlcih2YWx1ZXMpIHsKLSAgICB0aGlzLmluaXREZWZhdWx0c18oKTsKLSAgICB0aGlz
LmluaXRGaWVsZHNfKHZhbHVlcyk7Ci0gIH0KLQotCi0gIFVzYkRldmljZUZpbHRlci5wcm90b3R5
cGUuaW5pdERlZmF1bHRzXyA9IGZ1bmN0aW9uKCkgewotICAgIHRoaXMuaGFzVmVuZG9ySWQgPSBm
YWxzZTsKLSAgICB0aGlzLmhhc1Byb2R1Y3RJZCA9IGZhbHNlOwotICAgIHRoaXMuaGFzQ2xhc3ND
b2RlID0gZmFsc2U7Ci0gICAgdGhpcy5oYXNTdWJjbGFzc0NvZGUgPSBmYWxzZTsKLSAgICB0aGlz
Lmhhc1Byb3RvY29sQ29kZSA9IGZhbHNlOwotICAgIHRoaXMuY2xhc3NDb2RlID0gMDsKLSAgICB0
aGlzLnZlbmRvcklkID0gMDsKLSAgICB0aGlzLnByb2R1Y3RJZCA9IDA7Ci0gICAgdGhpcy5zdWJj
bGFzc0NvZGUgPSAwOwotICAgIHRoaXMucHJvdG9jb2xDb2RlID0gMDsKLSAgICB0aGlzLnNlcmlh
bE51bWJlciA9IG51bGw7Ci0gIH07Ci0gIFVzYkRldmljZUZpbHRlci5wcm90b3R5cGUuaW5pdEZp
ZWxkc18gPSBmdW5jdGlvbihmaWVsZHMpIHsKLSAgICBmb3IodmFyIGZpZWxkIGluIGZpZWxkcykg
ewotICAgICAgICBpZiAodGhpcy5oYXNPd25Qcm9wZXJ0eShmaWVsZCkpCi0gICAgICAgICAgdGhp
c1tmaWVsZF0gPSBmaWVsZHNbZmllbGRdOwotICAgIH0KLSAgfTsKLQotICBVc2JEZXZpY2VGaWx0
ZXIudmFsaWRhdGUgPSBmdW5jdGlvbihtZXNzYWdlVmFsaWRhdG9yLCBvZmZzZXQpIHsKLSAgICB2
YXIgZXJyOwotICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RIZWFkZXIo
b2Zmc2V0LCBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSk7Ci0gICAgaWYgKGVyciAhPT0gdmFsaWRh
dG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQotICAgICAgICByZXR1cm4gZXJyOwotCi0gICAgdmFy
IGtWZXJzaW9uU2l6ZXMgPSBbCi0gICAgICB7dmVyc2lvbjogMCwgbnVtQnl0ZXM6IDI0fQotICAg
IF07Ci0gICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdFZlcnNpb24ob2Zm
c2V0LCBrVmVyc2lvblNpemVzKTsKLSAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlv
bkVycm9yLk5PTkUpCi0gICAgICAgIHJldHVybiBlcnI7Ci0KLQotCi0KLQotCi0KLQotCi0KLQot
Ci0gICAgLy8gdmFsaWRhdGUgVXNiRGV2aWNlRmlsdGVyLnNlcmlhbE51bWJlcgotICAgIGVyciA9
IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RQb2ludGVyKG9mZnNldCArIGNvZGVjLmtT
dHJ1Y3RIZWFkZXJTaXplICsgOCwgc3RyaW5nMTYkLlN0cmluZzE2LCB0cnVlKTsKLSAgICBpZiAo
ZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCi0gICAgICAgIHJldHVybiBl
cnI7Ci0KLSAgICByZXR1cm4gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FOwotICB9Owot
Ci0gIFVzYkRldmljZUZpbHRlci5lbmNvZGVkU2l6ZSA9IGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXpl
ICsgMTY7Ci0KLSAgVXNiRGV2aWNlRmlsdGVyLmRlY29kZSA9IGZ1bmN0aW9uKGRlY29kZXIpIHsK
LSAgICB2YXIgcGFja2VkOwotICAgIHZhciB2YWwgPSBuZXcgVXNiRGV2aWNlRmlsdGVyKCk7Ci0g
ICAgdmFyIG51bWJlck9mQnl0ZXMgPSBkZWNvZGVyLnJlYWRVaW50MzIoKTsKLSAgICB2YXIgdmVy
c2lvbiA9IGRlY29kZXIucmVhZFVpbnQzMigpOwotICAgIHBhY2tlZCA9IGRlY29kZXIucmVhZFVp
bnQ4KCk7Ci0gICAgdmFsLmhhc1ZlbmRvcklkID0gKHBhY2tlZCA+PiAwKSAmIDEgPyB0cnVlIDog
ZmFsc2U7Ci0gICAgdmFsLmhhc1Byb2R1Y3RJZCA9IChwYWNrZWQgPj4gMSkgJiAxID8gdHJ1ZSA6
IGZhbHNlOwotICAgIHZhbC5oYXNDbGFzc0NvZGUgPSAocGFja2VkID4+IDIpICYgMSA/IHRydWUg
OiBmYWxzZTsKLSAgICB2YWwuaGFzU3ViY2xhc3NDb2RlID0gKHBhY2tlZCA+PiAzKSAmIDEgPyB0
cnVlIDogZmFsc2U7Ci0gICAgdmFsLmhhc1Byb3RvY29sQ29kZSA9IChwYWNrZWQgPj4gNCkgJiAx
ID8gdHJ1ZSA6IGZhbHNlOwotICAgIHZhbC5jbGFzc0NvZGUgPSBkZWNvZGVyLmRlY29kZVN0cnVj
dChjb2RlYy5VaW50OCk7Ci0gICAgdmFsLnZlbmRvcklkID0gZGVjb2Rlci5kZWNvZGVTdHJ1Y3Qo
Y29kZWMuVWludDE2KTsKLSAgICB2YWwucHJvZHVjdElkID0gZGVjb2Rlci5kZWNvZGVTdHJ1Y3Qo
Y29kZWMuVWludDE2KTsKLSAgICB2YWwuc3ViY2xhc3NDb2RlID0gZGVjb2Rlci5kZWNvZGVTdHJ1
Y3QoY29kZWMuVWludDgpOwotICAgIHZhbC5wcm90b2NvbENvZGUgPSBkZWNvZGVyLmRlY29kZVN0
cnVjdChjb2RlYy5VaW50OCk7Ci0gICAgdmFsLnNlcmlhbE51bWJlciA9IGRlY29kZXIuZGVjb2Rl
U3RydWN0UG9pbnRlcihzdHJpbmcxNiQuU3RyaW5nMTYpOwotICAgIHJldHVybiB2YWw7Ci0gIH07
Ci0KLSAgVXNiRGV2aWNlRmlsdGVyLmVuY29kZSA9IGZ1bmN0aW9uKGVuY29kZXIsIHZhbCkgewot
ICAgIHZhciBwYWNrZWQ7Ci0gICAgZW5jb2Rlci53cml0ZVVpbnQzMihVc2JEZXZpY2VGaWx0ZXIu
ZW5jb2RlZFNpemUpOwotICAgIGVuY29kZXIud3JpdGVVaW50MzIoMCk7Ci0gICAgcGFja2VkID0g
MDsKLSAgICBwYWNrZWQgfD0gKHZhbC5oYXNWZW5kb3JJZCAmIDEpIDw8IDAKLSAgICBwYWNrZWQg
fD0gKHZhbC5oYXNQcm9kdWN0SWQgJiAxKSA8PCAxCi0gICAgcGFja2VkIHw9ICh2YWwuaGFzQ2xh
c3NDb2RlICYgMSkgPDwgMgotICAgIHBhY2tlZCB8PSAodmFsLmhhc1N1YmNsYXNzQ29kZSAmIDEp
IDw8IDMKLSAgICBwYWNrZWQgfD0gKHZhbC5oYXNQcm90b2NvbENvZGUgJiAxKSA8PCA0Ci0gICAg
ZW5jb2Rlci53cml0ZVVpbnQ4KHBhY2tlZCk7Ci0gICAgZW5jb2Rlci5lbmNvZGVTdHJ1Y3QoY29k
ZWMuVWludDgsIHZhbC5jbGFzc0NvZGUpOwotICAgIGVuY29kZXIuZW5jb2RlU3RydWN0KGNvZGVj
LlVpbnQxNiwgdmFsLnZlbmRvcklkKTsKLSAgICBlbmNvZGVyLmVuY29kZVN0cnVjdChjb2RlYy5V
aW50MTYsIHZhbC5wcm9kdWN0SWQpOwotICAgIGVuY29kZXIuZW5jb2RlU3RydWN0KGNvZGVjLlVp
bnQ4LCB2YWwuc3ViY2xhc3NDb2RlKTsKLSAgICBlbmNvZGVyLmVuY29kZVN0cnVjdChjb2RlYy5V
aW50OCwgdmFsLnByb3RvY29sQ29kZSk7Ci0gICAgZW5jb2Rlci5lbmNvZGVTdHJ1Y3RQb2ludGVy
KHN0cmluZzE2JC5TdHJpbmcxNiwgdmFsLnNlcmlhbE51bWJlcik7Ci0gIH07Ci0gIGZ1bmN0aW9u
IFVzYkVudW1lcmF0aW9uT3B0aW9ucyh2YWx1ZXMpIHsKLSAgICB0aGlzLmluaXREZWZhdWx0c18o
KTsKLSAgICB0aGlzLmluaXRGaWVsZHNfKHZhbHVlcyk7Ci0gIH0KLQotCi0gIFVzYkVudW1lcmF0
aW9uT3B0aW9ucy5wcm90b3R5cGUuaW5pdERlZmF1bHRzXyA9IGZ1bmN0aW9uKCkgewotICAgIHRo
aXMuZmlsdGVycyA9IG51bGw7Ci0gIH07Ci0gIFVzYkVudW1lcmF0aW9uT3B0aW9ucy5wcm90b3R5
cGUuaW5pdEZpZWxkc18gPSBmdW5jdGlvbihmaWVsZHMpIHsKLSAgICBmb3IodmFyIGZpZWxkIGlu
IGZpZWxkcykgewotICAgICAgICBpZiAodGhpcy5oYXNPd25Qcm9wZXJ0eShmaWVsZCkpCi0gICAg
ICAgICAgdGhpc1tmaWVsZF0gPSBmaWVsZHNbZmllbGRdOwotICAgIH0KLSAgfTsKLQotICBVc2JF
bnVtZXJhdGlvbk9wdGlvbnMudmFsaWRhdGUgPSBmdW5jdGlvbihtZXNzYWdlVmFsaWRhdG9yLCBv
ZmZzZXQpIHsKLSAgICB2YXIgZXJyOwotICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRh
dGVTdHJ1Y3RIZWFkZXIob2Zmc2V0LCBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSk7Ci0gICAgaWYg
KGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQotICAgICAgICByZXR1cm4g
ZXJyOwotCi0gICAgdmFyIGtWZXJzaW9uU2l6ZXMgPSBbCi0gICAgICB7dmVyc2lvbjogMCwgbnVt
Qnl0ZXM6IDE2fQotICAgIF07Ci0gICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0
cnVjdFZlcnNpb24ob2Zmc2V0LCBrVmVyc2lvblNpemVzKTsKLSAgICBpZiAoZXJyICE9PSB2YWxp
ZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCi0gICAgICAgIHJldHVybiBlcnI7Ci0KLQotICAg
IC8vIHZhbGlkYXRlIFVzYkVudW1lcmF0aW9uT3B0aW9ucy5maWx0ZXJzCi0gICAgZXJyID0gbWVz
c2FnZVZhbGlkYXRvci52YWxpZGF0ZUFycmF5UG9pbnRlcihvZmZzZXQgKyBjb2RlYy5rU3RydWN0
SGVhZGVyU2l6ZSArIDAsIDgsIG5ldyBjb2RlYy5Qb2ludGVyVG8oVXNiRGV2aWNlRmlsdGVyKSwg
ZmFsc2UsIFswXSwgMCk7Ci0gICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJv
ci5OT05FKQotICAgICAgICByZXR1cm4gZXJyOwotCi0gICAgcmV0dXJuIHZhbGlkYXRvci52YWxp
ZGF0aW9uRXJyb3IuTk9ORTsKLSAgfTsKLQotICBVc2JFbnVtZXJhdGlvbk9wdGlvbnMuZW5jb2Rl
ZFNpemUgPSBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDg7Ci0KLSAgVXNiRW51bWVyYXRpb25P
cHRpb25zLmRlY29kZSA9IGZ1bmN0aW9uKGRlY29kZXIpIHsKLSAgICB2YXIgcGFja2VkOwotICAg
IHZhciB2YWwgPSBuZXcgVXNiRW51bWVyYXRpb25PcHRpb25zKCk7Ci0gICAgdmFyIG51bWJlck9m
Qnl0ZXMgPSBkZWNvZGVyLnJlYWRVaW50MzIoKTsKLSAgICB2YXIgdmVyc2lvbiA9IGRlY29kZXIu
cmVhZFVpbnQzMigpOwotICAgIHZhbC5maWx0ZXJzID0gZGVjb2Rlci5kZWNvZGVBcnJheVBvaW50
ZXIobmV3IGNvZGVjLlBvaW50ZXJUbyhVc2JEZXZpY2VGaWx0ZXIpKTsKLSAgICByZXR1cm4gdmFs
OwotICB9OwotCi0gIFVzYkVudW1lcmF0aW9uT3B0aW9ucy5lbmNvZGUgPSBmdW5jdGlvbihlbmNv
ZGVyLCB2YWwpIHsKLSAgICB2YXIgcGFja2VkOwotICAgIGVuY29kZXIud3JpdGVVaW50MzIoVXNi
RW51bWVyYXRpb25PcHRpb25zLmVuY29kZWRTaXplKTsKLSAgICBlbmNvZGVyLndyaXRlVWludDMy
KDApOwotICAgIGVuY29kZXIuZW5jb2RlQXJyYXlQb2ludGVyKG5ldyBjb2RlYy5Qb2ludGVyVG8o
VXNiRGV2aWNlRmlsdGVyKSwgdmFsLmZpbHRlcnMpOwotICB9OwotICBleHBvcnRzLlVzYkRldmlj
ZUZpbHRlciA9IFVzYkRldmljZUZpbHRlcjsKLSAgZXhwb3J0cy5Vc2JFbnVtZXJhdGlvbk9wdGlv
bnMgPSBVc2JFbnVtZXJhdGlvbk9wdGlvbnM7Ci19KSgpOwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9m
IGZpbGUKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0t
dGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL2RldmljZV9lbnVtZXJhdGlvbl9vcHRpb25zLm1vam9t
LmpzLmhlYWRlcnMgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3Rz
L3Jlc291cmNlcy9jaHJvbWl1bS9kZXZpY2VfZW51bWVyYXRpb25fb3B0aW9ucy5tb2pvbS5qcy5o
ZWFkZXJzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2YzYxYTM0YTRlYzJlNzUwOTZk
YjBlYjlmNzc0OGIxNDJmMGRiN2JiLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwCi0tLSBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMv
cmVzb3VyY2VzL2Nocm9taXVtL2RldmljZV9lbnVtZXJhdGlvbl9vcHRpb25zLm1vam9tLmpzLmhl
YWRlcnMKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi1Db250ZW50LVR5cGU6IHRleHQvamF2
YXNjcmlwdDsgY2hhcnNldD11dGYtOApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAt
LWdpdCBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3Vy
Y2VzL2Nocm9taXVtL2RldmljZV9tYW5hZ2VyX2NsaWVudC5tb2pvbS5qcyBiL0xheW91dFRlc3Rz
L2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL2Rldmlj
ZV9tYW5hZ2VyX2NsaWVudC5tb2pvbS5qcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
NDM5ZjY0NjU3NGRmYTc4NWQ4ZjRkMTU5OTQ1OTdlZDE1NmRhZTY5NS4uMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mv
d2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS9kZXZpY2VfbWFuYWdlcl9jbGll
bnQubW9qb20uanMKKysrIC9kZXYvbnVsbApAQCAtMSwyNjIgKzAsMCBAQAotLy8gQ29weXJpZ2h0
IDIwMTQgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ug
b2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRo
YXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotCi0ndXNlIHN0cmljdCc7
Ci0KLShmdW5jdGlvbigpIHsKLSAgdmFyIG1vam9tSWQgPSAnZGV2aWNlL3VzYi9wdWJsaWMvbW9q
b20vZGV2aWNlX21hbmFnZXJfY2xpZW50Lm1vam9tJzsKLSAgaWYgKG1vam8uaW50ZXJuYWwuaXNN
b2pvbUxvYWRlZChtb2pvbUlkKSkgewotICAgIGNvbnNvbGUud2FybignVGhlIGZvbGxvd2luZyBt
b2pvbSBpcyBsb2FkZWQgbXVsdGlwbGUgdGltZXM6ICcgKyBtb2pvbUlkKTsKLSAgICByZXR1cm47
Ci0gIH0KLSAgbW9qby5pbnRlcm5hbC5tYXJrTW9qb21Mb2FkZWQobW9qb21JZCk7Ci0gIHZhciBi
aW5kaW5ncyA9IG1vam87Ci0gIHZhciBhc3NvY2lhdGVkQmluZGluZ3MgPSBtb2pvOwotICB2YXIg
Y29kZWMgPSBtb2pvLmludGVybmFsOwotICB2YXIgdmFsaWRhdG9yID0gbW9qby5pbnRlcm5hbDsK
LQotICB2YXIgZXhwb3J0cyA9IG1vam8uaW50ZXJuYWwuZXhwb3NlTmFtZXNwYWNlKCdkZXZpY2Uu
bW9qb20nKTsKLSAgdmFyIGRldmljZSQgPQotICAgICAgbW9qby5pbnRlcm5hbC5leHBvc2VOYW1l
c3BhY2UoJ2RldmljZS5tb2pvbScpOwotICBpZiAobW9qby5jb25maWcuYXV0b0xvYWRNb2pvbURl
cHMpIHsKLSAgICBtb2pvLmludGVybmFsLmxvYWRNb2pvbUlmTmVjZXNzYXJ5KAotICAgICAgICAn
ZGV2aWNlL3VzYi9wdWJsaWMvbW9qb20vZGV2aWNlLm1vam9tJywgJ2RldmljZS5tb2pvbS5qcycp
OwotICB9Ci0KLQotCi0gIGZ1bmN0aW9uIFVzYkRldmljZU1hbmFnZXJDbGllbnRfT25EZXZpY2VB
ZGRlZF9QYXJhbXModmFsdWVzKSB7Ci0gICAgdGhpcy5pbml0RGVmYXVsdHNfKCk7Ci0gICAgdGhp
cy5pbml0RmllbGRzXyh2YWx1ZXMpOwotICB9Ci0KLQotICBVc2JEZXZpY2VNYW5hZ2VyQ2xpZW50
X09uRGV2aWNlQWRkZWRfUGFyYW1zLnByb3RvdHlwZS5pbml0RGVmYXVsdHNfID0gZnVuY3Rpb24o
KSB7Ci0gICAgdGhpcy5kZXZpY2VJbmZvID0gbnVsbDsKLSAgfTsKLSAgVXNiRGV2aWNlTWFuYWdl
ckNsaWVudF9PbkRldmljZUFkZGVkX1BhcmFtcy5wcm90b3R5cGUuaW5pdEZpZWxkc18gPSBmdW5j
dGlvbihmaWVsZHMpIHsKLSAgICBmb3IodmFyIGZpZWxkIGluIGZpZWxkcykgewotICAgICAgICBp
ZiAodGhpcy5oYXNPd25Qcm9wZXJ0eShmaWVsZCkpCi0gICAgICAgICAgdGhpc1tmaWVsZF0gPSBm
aWVsZHNbZmllbGRdOwotICAgIH0KLSAgfTsKLQotICBVc2JEZXZpY2VNYW5hZ2VyQ2xpZW50X09u
RGV2aWNlQWRkZWRfUGFyYW1zLnZhbGlkYXRlID0gZnVuY3Rpb24obWVzc2FnZVZhbGlkYXRvciwg
b2Zmc2V0KSB7Ci0gICAgdmFyIGVycjsKLSAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlk
YXRlU3RydWN0SGVhZGVyKG9mZnNldCwgY29kZWMua1N0cnVjdEhlYWRlclNpemUpOwotICAgIGlm
IChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKLSAgICAgICAgcmV0dXJu
IGVycjsKLQotICAgIHZhciBrVmVyc2lvblNpemVzID0gWwotICAgICAge3ZlcnNpb246IDAsIG51
bUJ5dGVzOiAxNn0KLSAgICBdOwotICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVT
dHJ1Y3RWZXJzaW9uKG9mZnNldCwga1ZlcnNpb25TaXplcyk7Ci0gICAgaWYgKGVyciAhPT0gdmFs
aWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQotICAgICAgICByZXR1cm4gZXJyOwotCi0KLSAg
ICAvLyB2YWxpZGF0ZSBVc2JEZXZpY2VNYW5hZ2VyQ2xpZW50X09uRGV2aWNlQWRkZWRfUGFyYW1z
LmRldmljZUluZm8KLSAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0UG9p
bnRlcihvZmZzZXQgKyBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDAsIGRldmljZSQuVXNiRGV2
aWNlSW5mbywgZmFsc2UpOwotICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJy
b3IuTk9ORSkKLSAgICAgICAgcmV0dXJuIGVycjsKLQotICAgIHJldHVybiB2YWxpZGF0b3IudmFs
aWRhdGlvbkVycm9yLk5PTkU7Ci0gIH07Ci0KLSAgVXNiRGV2aWNlTWFuYWdlckNsaWVudF9PbkRl
dmljZUFkZGVkX1BhcmFtcy5lbmNvZGVkU2l6ZSA9IGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsg
ODsKLQotICBVc2JEZXZpY2VNYW5hZ2VyQ2xpZW50X09uRGV2aWNlQWRkZWRfUGFyYW1zLmRlY29k
ZSA9IGZ1bmN0aW9uKGRlY29kZXIpIHsKLSAgICB2YXIgcGFja2VkOwotICAgIHZhciB2YWwgPSBu
ZXcgVXNiRGV2aWNlTWFuYWdlckNsaWVudF9PbkRldmljZUFkZGVkX1BhcmFtcygpOwotICAgIHZh
ciBudW1iZXJPZkJ5dGVzID0gZGVjb2Rlci5yZWFkVWludDMyKCk7Ci0gICAgdmFyIHZlcnNpb24g
PSBkZWNvZGVyLnJlYWRVaW50MzIoKTsKLSAgICB2YWwuZGV2aWNlSW5mbyA9IGRlY29kZXIuZGVj
b2RlU3RydWN0UG9pbnRlcihkZXZpY2UkLlVzYkRldmljZUluZm8pOwotICAgIHJldHVybiB2YWw7
Ci0gIH07Ci0KLSAgVXNiRGV2aWNlTWFuYWdlckNsaWVudF9PbkRldmljZUFkZGVkX1BhcmFtcy5l
bmNvZGUgPSBmdW5jdGlvbihlbmNvZGVyLCB2YWwpIHsKLSAgICB2YXIgcGFja2VkOwotICAgIGVu
Y29kZXIud3JpdGVVaW50MzIoVXNiRGV2aWNlTWFuYWdlckNsaWVudF9PbkRldmljZUFkZGVkX1Bh
cmFtcy5lbmNvZGVkU2l6ZSk7Ci0gICAgZW5jb2Rlci53cml0ZVVpbnQzMigwKTsKLSAgICBlbmNv
ZGVyLmVuY29kZVN0cnVjdFBvaW50ZXIoZGV2aWNlJC5Vc2JEZXZpY2VJbmZvLCB2YWwuZGV2aWNl
SW5mbyk7Ci0gIH07Ci0gIGZ1bmN0aW9uIFVzYkRldmljZU1hbmFnZXJDbGllbnRfT25EZXZpY2VS
ZW1vdmVkX1BhcmFtcyh2YWx1ZXMpIHsKLSAgICB0aGlzLmluaXREZWZhdWx0c18oKTsKLSAgICB0
aGlzLmluaXRGaWVsZHNfKHZhbHVlcyk7Ci0gIH0KLQotCi0gIFVzYkRldmljZU1hbmFnZXJDbGll
bnRfT25EZXZpY2VSZW1vdmVkX1BhcmFtcy5wcm90b3R5cGUuaW5pdERlZmF1bHRzXyA9IGZ1bmN0
aW9uKCkgewotICAgIHRoaXMuZGV2aWNlSW5mbyA9IG51bGw7Ci0gIH07Ci0gIFVzYkRldmljZU1h
bmFnZXJDbGllbnRfT25EZXZpY2VSZW1vdmVkX1BhcmFtcy5wcm90b3R5cGUuaW5pdEZpZWxkc18g
PSBmdW5jdGlvbihmaWVsZHMpIHsKLSAgICBmb3IodmFyIGZpZWxkIGluIGZpZWxkcykgewotICAg
ICAgICBpZiAodGhpcy5oYXNPd25Qcm9wZXJ0eShmaWVsZCkpCi0gICAgICAgICAgdGhpc1tmaWVs
ZF0gPSBmaWVsZHNbZmllbGRdOwotICAgIH0KLSAgfTsKLQotICBVc2JEZXZpY2VNYW5hZ2VyQ2xp
ZW50X09uRGV2aWNlUmVtb3ZlZF9QYXJhbXMudmFsaWRhdGUgPSBmdW5jdGlvbihtZXNzYWdlVmFs
aWRhdG9yLCBvZmZzZXQpIHsKLSAgICB2YXIgZXJyOwotICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0
b3IudmFsaWRhdGVTdHJ1Y3RIZWFkZXIob2Zmc2V0LCBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSk7
Ci0gICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQotICAgICAg
ICByZXR1cm4gZXJyOwotCi0gICAgdmFyIGtWZXJzaW9uU2l6ZXMgPSBbCi0gICAgICB7dmVyc2lv
bjogMCwgbnVtQnl0ZXM6IDE2fQotICAgIF07Ci0gICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52
YWxpZGF0ZVN0cnVjdFZlcnNpb24ob2Zmc2V0LCBrVmVyc2lvblNpemVzKTsKLSAgICBpZiAoZXJy
ICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCi0gICAgICAgIHJldHVybiBlcnI7
Ci0KLQotICAgIC8vIHZhbGlkYXRlIFVzYkRldmljZU1hbmFnZXJDbGllbnRfT25EZXZpY2VSZW1v
dmVkX1BhcmFtcy5kZXZpY2VJbmZvCi0gICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0
ZVN0cnVjdFBvaW50ZXIob2Zmc2V0ICsgY29kZWMua1N0cnVjdEhlYWRlclNpemUgKyAwLCBkZXZp
Y2UkLlVzYkRldmljZUluZm8sIGZhbHNlKTsKLSAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFs
aWRhdGlvbkVycm9yLk5PTkUpCi0gICAgICAgIHJldHVybiBlcnI7Ci0KLSAgICByZXR1cm4gdmFs
aWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FOwotICB9OwotCi0gIFVzYkRldmljZU1hbmFnZXJD
bGllbnRfT25EZXZpY2VSZW1vdmVkX1BhcmFtcy5lbmNvZGVkU2l6ZSA9IGNvZGVjLmtTdHJ1Y3RI
ZWFkZXJTaXplICsgODsKLQotICBVc2JEZXZpY2VNYW5hZ2VyQ2xpZW50X09uRGV2aWNlUmVtb3Zl
ZF9QYXJhbXMuZGVjb2RlID0gZnVuY3Rpb24oZGVjb2RlcikgewotICAgIHZhciBwYWNrZWQ7Ci0g
ICAgdmFyIHZhbCA9IG5ldyBVc2JEZXZpY2VNYW5hZ2VyQ2xpZW50X09uRGV2aWNlUmVtb3ZlZF9Q
YXJhbXMoKTsKLSAgICB2YXIgbnVtYmVyT2ZCeXRlcyA9IGRlY29kZXIucmVhZFVpbnQzMigpOwot
ICAgIHZhciB2ZXJzaW9uID0gZGVjb2Rlci5yZWFkVWludDMyKCk7Ci0gICAgdmFsLmRldmljZUlu
Zm8gPSBkZWNvZGVyLmRlY29kZVN0cnVjdFBvaW50ZXIoZGV2aWNlJC5Vc2JEZXZpY2VJbmZvKTsK
LSAgICByZXR1cm4gdmFsOwotICB9OwotCi0gIFVzYkRldmljZU1hbmFnZXJDbGllbnRfT25EZXZp
Y2VSZW1vdmVkX1BhcmFtcy5lbmNvZGUgPSBmdW5jdGlvbihlbmNvZGVyLCB2YWwpIHsKLSAgICB2
YXIgcGFja2VkOwotICAgIGVuY29kZXIud3JpdGVVaW50MzIoVXNiRGV2aWNlTWFuYWdlckNsaWVu
dF9PbkRldmljZVJlbW92ZWRfUGFyYW1zLmVuY29kZWRTaXplKTsKLSAgICBlbmNvZGVyLndyaXRl
VWludDMyKDApOwotICAgIGVuY29kZXIuZW5jb2RlU3RydWN0UG9pbnRlcihkZXZpY2UkLlVzYkRl
dmljZUluZm8sIHZhbC5kZXZpY2VJbmZvKTsKLSAgfTsKLSAgdmFyIGtVc2JEZXZpY2VNYW5hZ2Vy
Q2xpZW50X09uRGV2aWNlQWRkZWRfTmFtZSA9IDA7Ci0gIHZhciBrVXNiRGV2aWNlTWFuYWdlckNs
aWVudF9PbkRldmljZVJlbW92ZWRfTmFtZSA9IDE7Ci0KLSAgZnVuY3Rpb24gVXNiRGV2aWNlTWFu
YWdlckNsaWVudFB0cihoYW5kbGVPclB0ckluZm8pIHsKLSAgICB0aGlzLnB0ciA9IG5ldyBiaW5k
aW5ncy5JbnRlcmZhY2VQdHJDb250cm9sbGVyKFVzYkRldmljZU1hbmFnZXJDbGllbnQsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVPclB0
ckluZm8pOwotICB9Ci0KLSAgZnVuY3Rpb24gVXNiRGV2aWNlTWFuYWdlckNsaWVudEFzc29jaWF0
ZWRQdHIoYXNzb2NpYXRlZEludGVyZmFjZVB0ckluZm8pIHsKLSAgICB0aGlzLnB0ciA9IG5ldyBh
c3NvY2lhdGVkQmluZGluZ3MuQXNzb2NpYXRlZEludGVyZmFjZVB0ckNvbnRyb2xsZXIoCi0gICAg
ICAgIFVzYkRldmljZU1hbmFnZXJDbGllbnQsIGFzc29jaWF0ZWRJbnRlcmZhY2VQdHJJbmZvKTsK
LSAgfQotCi0gIFVzYkRldmljZU1hbmFnZXJDbGllbnRBc3NvY2lhdGVkUHRyLnByb3RvdHlwZSA9
Ci0gICAgICBPYmplY3QuY3JlYXRlKFVzYkRldmljZU1hbmFnZXJDbGllbnRQdHIucHJvdG90eXBl
KTsKLSAgVXNiRGV2aWNlTWFuYWdlckNsaWVudEFzc29jaWF0ZWRQdHIucHJvdG90eXBlLmNvbnN0
cnVjdG9yID0KLSAgICAgIFVzYkRldmljZU1hbmFnZXJDbGllbnRBc3NvY2lhdGVkUHRyOwotCi0g
IGZ1bmN0aW9uIFVzYkRldmljZU1hbmFnZXJDbGllbnRQcm94eShyZWNlaXZlcikgewotICAgIHRo
aXMucmVjZWl2ZXJfID0gcmVjZWl2ZXI7Ci0gIH0KLSAgVXNiRGV2aWNlTWFuYWdlckNsaWVudFB0
ci5wcm90b3R5cGUub25EZXZpY2VBZGRlZCA9IGZ1bmN0aW9uKCkgewotICAgIHJldHVybiBVc2JE
ZXZpY2VNYW5hZ2VyQ2xpZW50UHJveHkucHJvdG90eXBlLm9uRGV2aWNlQWRkZWQKLSAgICAgICAg
LmFwcGx5KHRoaXMucHRyLmdldFByb3h5KCksIGFyZ3VtZW50cyk7Ci0gIH07Ci0KLSAgVXNiRGV2
aWNlTWFuYWdlckNsaWVudFByb3h5LnByb3RvdHlwZS5vbkRldmljZUFkZGVkID0gZnVuY3Rpb24o
ZGV2aWNlSW5mbykgewotICAgIHZhciBwYXJhbXNfID0gbmV3IFVzYkRldmljZU1hbmFnZXJDbGll
bnRfT25EZXZpY2VBZGRlZF9QYXJhbXMoKTsKLSAgICBwYXJhbXNfLmRldmljZUluZm8gPSBkZXZp
Y2VJbmZvOwotICAgIHZhciBidWlsZGVyID0gbmV3IGNvZGVjLk1lc3NhZ2VWMEJ1aWxkZXIoCi0g
ICAgICAgIGtVc2JEZXZpY2VNYW5hZ2VyQ2xpZW50X09uRGV2aWNlQWRkZWRfTmFtZSwKLSAgICAg
ICAgY29kZWMuYWxpZ24oVXNiRGV2aWNlTWFuYWdlckNsaWVudF9PbkRldmljZUFkZGVkX1BhcmFt
cy5lbmNvZGVkU2l6ZSkpOwotICAgIGJ1aWxkZXIuZW5jb2RlU3RydWN0KFVzYkRldmljZU1hbmFn
ZXJDbGllbnRfT25EZXZpY2VBZGRlZF9QYXJhbXMsIHBhcmFtc18pOwotICAgIHZhciBtZXNzYWdl
ID0gYnVpbGRlci5maW5pc2goKTsKLSAgICB0aGlzLnJlY2VpdmVyXy5hY2NlcHQobWVzc2FnZSk7
Ci0gIH07Ci0gIFVzYkRldmljZU1hbmFnZXJDbGllbnRQdHIucHJvdG90eXBlLm9uRGV2aWNlUmVt
b3ZlZCA9IGZ1bmN0aW9uKCkgewotICAgIHJldHVybiBVc2JEZXZpY2VNYW5hZ2VyQ2xpZW50UHJv
eHkucHJvdG90eXBlLm9uRGV2aWNlUmVtb3ZlZAotICAgICAgICAuYXBwbHkodGhpcy5wdHIuZ2V0
UHJveHkoKSwgYXJndW1lbnRzKTsKLSAgfTsKLQotICBVc2JEZXZpY2VNYW5hZ2VyQ2xpZW50UHJv
eHkucHJvdG90eXBlLm9uRGV2aWNlUmVtb3ZlZCA9IGZ1bmN0aW9uKGRldmljZUluZm8pIHsKLSAg
ICB2YXIgcGFyYW1zXyA9IG5ldyBVc2JEZXZpY2VNYW5hZ2VyQ2xpZW50X09uRGV2aWNlUmVtb3Zl
ZF9QYXJhbXMoKTsKLSAgICBwYXJhbXNfLmRldmljZUluZm8gPSBkZXZpY2VJbmZvOwotICAgIHZh
ciBidWlsZGVyID0gbmV3IGNvZGVjLk1lc3NhZ2VWMEJ1aWxkZXIoCi0gICAgICAgIGtVc2JEZXZp
Y2VNYW5hZ2VyQ2xpZW50X09uRGV2aWNlUmVtb3ZlZF9OYW1lLAotICAgICAgICBjb2RlYy5hbGln
bihVc2JEZXZpY2VNYW5hZ2VyQ2xpZW50X09uRGV2aWNlUmVtb3ZlZF9QYXJhbXMuZW5jb2RlZFNp
emUpKTsKLSAgICBidWlsZGVyLmVuY29kZVN0cnVjdChVc2JEZXZpY2VNYW5hZ2VyQ2xpZW50X09u
RGV2aWNlUmVtb3ZlZF9QYXJhbXMsIHBhcmFtc18pOwotICAgIHZhciBtZXNzYWdlID0gYnVpbGRl
ci5maW5pc2goKTsKLSAgICB0aGlzLnJlY2VpdmVyXy5hY2NlcHQobWVzc2FnZSk7Ci0gIH07Ci0K
LSAgZnVuY3Rpb24gVXNiRGV2aWNlTWFuYWdlckNsaWVudFN0dWIoZGVsZWdhdGUpIHsKLSAgICB0
aGlzLmRlbGVnYXRlXyA9IGRlbGVnYXRlOwotICB9Ci0gIFVzYkRldmljZU1hbmFnZXJDbGllbnRT
dHViLnByb3RvdHlwZS5vbkRldmljZUFkZGVkID0gZnVuY3Rpb24oZGV2aWNlSW5mbykgewotICAg
IHJldHVybiB0aGlzLmRlbGVnYXRlXyAmJiB0aGlzLmRlbGVnYXRlXy5vbkRldmljZUFkZGVkICYm
IHRoaXMuZGVsZWdhdGVfLm9uRGV2aWNlQWRkZWQoZGV2aWNlSW5mbyk7Ci0gIH0KLSAgVXNiRGV2
aWNlTWFuYWdlckNsaWVudFN0dWIucHJvdG90eXBlLm9uRGV2aWNlUmVtb3ZlZCA9IGZ1bmN0aW9u
KGRldmljZUluZm8pIHsKLSAgICByZXR1cm4gdGhpcy5kZWxlZ2F0ZV8gJiYgdGhpcy5kZWxlZ2F0
ZV8ub25EZXZpY2VSZW1vdmVkICYmIHRoaXMuZGVsZWdhdGVfLm9uRGV2aWNlUmVtb3ZlZChkZXZp
Y2VJbmZvKTsKLSAgfQotCi0gIFVzYkRldmljZU1hbmFnZXJDbGllbnRTdHViLnByb3RvdHlwZS5h
Y2NlcHQgPSBmdW5jdGlvbihtZXNzYWdlKSB7Ci0gICAgdmFyIHJlYWRlciA9IG5ldyBjb2RlYy5N
ZXNzYWdlUmVhZGVyKG1lc3NhZ2UpOwotICAgIHN3aXRjaCAocmVhZGVyLm1lc3NhZ2VOYW1lKSB7
Ci0gICAgY2FzZSBrVXNiRGV2aWNlTWFuYWdlckNsaWVudF9PbkRldmljZUFkZGVkX05hbWU6Ci0g
ICAgICB2YXIgcGFyYW1zID0gcmVhZGVyLmRlY29kZVN0cnVjdChVc2JEZXZpY2VNYW5hZ2VyQ2xp
ZW50X09uRGV2aWNlQWRkZWRfUGFyYW1zKTsKLSAgICAgIHRoaXMub25EZXZpY2VBZGRlZChwYXJh
bXMuZGV2aWNlSW5mbyk7Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICBjYXNlIGtVc2JEZXZpY2VN
YW5hZ2VyQ2xpZW50X09uRGV2aWNlUmVtb3ZlZF9OYW1lOgotICAgICAgdmFyIHBhcmFtcyA9IHJl
YWRlci5kZWNvZGVTdHJ1Y3QoVXNiRGV2aWNlTWFuYWdlckNsaWVudF9PbkRldmljZVJlbW92ZWRf
UGFyYW1zKTsKLSAgICAgIHRoaXMub25EZXZpY2VSZW1vdmVkKHBhcmFtcy5kZXZpY2VJbmZvKTsK
LSAgICAgIHJldHVybiB0cnVlOwotICAgIGRlZmF1bHQ6Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgfQotICB9OwotCi0gIFVzYkRldmljZU1hbmFnZXJDbGllbnRTdHViLnByb3RvdHlwZS5hY2Nl
cHRXaXRoUmVzcG9uZGVyID0KLSAgICAgIGZ1bmN0aW9uKG1lc3NhZ2UsIHJlc3BvbmRlcikgewot
ICAgIHZhciByZWFkZXIgPSBuZXcgY29kZWMuTWVzc2FnZVJlYWRlcihtZXNzYWdlKTsKLSAgICBz
d2l0Y2ggKHJlYWRlci5tZXNzYWdlTmFtZSkgewotICAgIGRlZmF1bHQ6Ci0gICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgfQotICB9OwotCi0gIGZ1bmN0aW9uIHZhbGlkYXRlVXNiRGV2aWNlTWFuYWdl
ckNsaWVudFJlcXVlc3QobWVzc2FnZVZhbGlkYXRvcikgewotICAgIHZhciBtZXNzYWdlID0gbWVz
c2FnZVZhbGlkYXRvci5tZXNzYWdlOwotICAgIHZhciBwYXJhbXNDbGFzcyA9IG51bGw7Ci0gICAg
c3dpdGNoIChtZXNzYWdlLmdldE5hbWUoKSkgewotICAgICAgY2FzZSBrVXNiRGV2aWNlTWFuYWdl
ckNsaWVudF9PbkRldmljZUFkZGVkX05hbWU6Ci0gICAgICAgIGlmICghbWVzc2FnZS5leHBlY3Rz
UmVzcG9uc2UoKSAmJiAhbWVzc2FnZS5pc1Jlc3BvbnNlKCkpCi0gICAgICAgICAgcGFyYW1zQ2xh
c3MgPSBVc2JEZXZpY2VNYW5hZ2VyQ2xpZW50X09uRGV2aWNlQWRkZWRfUGFyYW1zOwotICAgICAg
YnJlYWs7Ci0gICAgICBjYXNlIGtVc2JEZXZpY2VNYW5hZ2VyQ2xpZW50X09uRGV2aWNlUmVtb3Zl
ZF9OYW1lOgotICAgICAgICBpZiAoIW1lc3NhZ2UuZXhwZWN0c1Jlc3BvbnNlKCkgJiYgIW1lc3Nh
Z2UuaXNSZXNwb25zZSgpKQotICAgICAgICAgIHBhcmFtc0NsYXNzID0gVXNiRGV2aWNlTWFuYWdl
ckNsaWVudF9PbkRldmljZVJlbW92ZWRfUGFyYW1zOwotICAgICAgYnJlYWs7Ci0gICAgfQotICAg
IGlmIChwYXJhbXNDbGFzcyA9PT0gbnVsbCkKLSAgICAgIHJldHVybiB2YWxpZGF0b3IudmFsaWRh
dGlvbkVycm9yLk5PTkU7Ci0gICAgcmV0dXJuIHBhcmFtc0NsYXNzLnZhbGlkYXRlKG1lc3NhZ2VW
YWxpZGF0b3IsIG1lc3NhZ2VWYWxpZGF0b3IubWVzc2FnZS5nZXRIZWFkZXJOdW1CeXRlcygpKTsK
LSAgfQotCi0gIGZ1bmN0aW9uIHZhbGlkYXRlVXNiRGV2aWNlTWFuYWdlckNsaWVudFJlc3BvbnNl
KG1lc3NhZ2VWYWxpZGF0b3IpIHsKLSAgICByZXR1cm4gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJv
ci5OT05FOwotICB9Ci0KLSAgdmFyIFVzYkRldmljZU1hbmFnZXJDbGllbnQgPSB7Ci0gICAgbmFt
ZTogJ2RldmljZS5tb2pvbS5Vc2JEZXZpY2VNYW5hZ2VyQ2xpZW50JywKLSAgICBrVmVyc2lvbjog
MCwKLSAgICBwdHJDbGFzczogVXNiRGV2aWNlTWFuYWdlckNsaWVudFB0ciwKLSAgICBwcm94eUNs
YXNzOiBVc2JEZXZpY2VNYW5hZ2VyQ2xpZW50UHJveHksCi0gICAgc3R1YkNsYXNzOiBVc2JEZXZp
Y2VNYW5hZ2VyQ2xpZW50U3R1YiwKLSAgICB2YWxpZGF0ZVJlcXVlc3Q6IHZhbGlkYXRlVXNiRGV2
aWNlTWFuYWdlckNsaWVudFJlcXVlc3QsCi0gICAgdmFsaWRhdGVSZXNwb25zZTogbnVsbCwKLSAg
fTsKLSAgVXNiRGV2aWNlTWFuYWdlckNsaWVudFN0dWIucHJvdG90eXBlLnZhbGlkYXRvciA9IHZh
bGlkYXRlVXNiRGV2aWNlTWFuYWdlckNsaWVudFJlcXVlc3Q7Ci0gIFVzYkRldmljZU1hbmFnZXJD
bGllbnRQcm94eS5wcm90b3R5cGUudmFsaWRhdG9yID0gbnVsbDsKLSAgZXhwb3J0cy5Vc2JEZXZp
Y2VNYW5hZ2VyQ2xpZW50ID0gVXNiRGV2aWNlTWFuYWdlckNsaWVudDsKLSAgZXhwb3J0cy5Vc2JE
ZXZpY2VNYW5hZ2VyQ2xpZW50UHRyID0gVXNiRGV2aWNlTWFuYWdlckNsaWVudFB0cjsKLSAgZXhw
b3J0cy5Vc2JEZXZpY2VNYW5hZ2VyQ2xpZW50QXNzb2NpYXRlZFB0ciA9IFVzYkRldmljZU1hbmFn
ZXJDbGllbnRBc3NvY2lhdGVkUHRyOwotfSkoKTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxl
CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3Rz
L3Jlc291cmNlcy9jaHJvbWl1bS9kZXZpY2VfbWFuYWdlcl9jbGllbnQubW9qb20uanMuaGVhZGVy
cyBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2Vz
L2Nocm9taXVtL2RldmljZV9tYW5hZ2VyX2NsaWVudC5tb2pvbS5qcy5oZWFkZXJzCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2YzYxYTM0YTRlYzJlNzUwOTZkYjBlYjlmNzc0OGIxNDJm
MGRiN2JiLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL0xh
eW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9t
aXVtL2RldmljZV9tYW5hZ2VyX2NsaWVudC5tb2pvbS5qcy5oZWFkZXJzCisrKyAvZGV2L251bGwK
QEAgLTEgKzAsMCBAQAotQ29udGVudC1UeXBlOiB0ZXh0L2phdmFzY3JpcHQ7IGNoYXJzZXQ9dXRm
LTgKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9p
bXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS9nZW5lcmlj
X3NlbnNvcl9tb2Nrcy5qcyBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0t
dGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL2dlbmVyaWNfc2Vuc29yX21vY2tzLmpzCmluZGV4IGZl
MmY3MGJlMzRlYmRlZWI3NGRkYWM1ZTVmYTRiMzk2ODRiMGUzYjUuLmZmMTFjYTFhYjBiYzNiNzcw
NzU2MThmZTViNTc5ODQyNTE1MmM1ZWQgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2ltcG9ydGVk
L3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL2dlbmVyaWNfc2Vuc29y
X21vY2tzLmpzCisrKyBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVz
dHMvcmVzb3VyY2VzL2Nocm9taXVtL2dlbmVyaWNfc2Vuc29yX21vY2tzLmpzCkBAIC00Niw3ICs0
Niw5IEBAIHZhciBHZW5lcmljU2Vuc29yVGVzdCA9ICgoKSA9PiB7CiAgICAgICB0aGlzLnJlYWRp
bmdEYXRhXyA9IG51bGw7CiAgICAgICB0aGlzLnJlcXVlc3RlZEZyZXF1ZW5jaWVzXyA9IFtdOwog
ICAgICAgbGV0IHJ2ID0gaGFuZGxlLm1hcEJ1ZmZlcihvZmZzZXQsIHNpemUpOwotICAgICAgYXNz
ZXJ0X2VxdWFscyhydi5yZXN1bHQsIE1vam8uUkVTVUxUX09LLCAiRmFpbGVkIHRvIG1hcCBzaGFy
ZWQgYnVmZmVyIik7CisgICAgICBpZiAocnYucmVzdWx0ICE9IE1vam8uUkVTVUxUX09LKSB7Cisg
ICAgICAgIHRocm93IG5ldyBFcnJvcigiTW9ja1NlbnNvcigpOiBGYWlsZWQgdG8gbWFwIHNoYXJl
ZCBidWZmZXIiKTsKKyAgICAgIH0KICAgICAgIHRoaXMuYnVmZmVyXyA9IG5ldyBGbG9hdDY0QXJy
YXkocnYuYnVmZmVyKTsKICAgICAgIHRoaXMuYnVmZmVyXy5maWxsKDApOwogICAgICAgdGhpcy5i
aW5kaW5nXyA9IG5ldyBtb2pvLkJpbmRpbmcoZGV2aWNlLm1vam9tLlNlbnNvciwgdGhpcywKQEAg
LTY0LDggKzY2LDYgQEAgdmFyIEdlbmVyaWNTZW5zb3JUZXN0ID0gKCgpID0+IHsKICAgICAvLyBB
ZGRzIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBzZW5zb3IgYW5kIHN0YXJ0cyByZXBvcnRpbmcgZmFr
ZSBkYXRhCiAgICAgLy8gdGhyb3VnaCBzZXRTZW5zb3JSZWFkaW5nIGZ1bmN0aW9uLgogICAgIGFz
eW5jIGFkZENvbmZpZ3VyYXRpb24oY29uZmlndXJhdGlvbikgewotICAgICAgYXNzZXJ0X25vdF9l
cXVhbHMoY29uZmlndXJhdGlvbiwgbnVsbCwgIkludmFsaWQgc2Vuc29yIGNvbmZpZ3VyYXRpb24u
Iik7Ci0KICAgICAgIHRoaXMucmVxdWVzdGVkRnJlcXVlbmNpZXNfLnB1c2goY29uZmlndXJhdGlv
bi5mcmVxdWVuY3kpOwogICAgICAgLy8gU29ydCB1c2luZyBkZXNjZW5kaW5nIG9yZGVyLgogICAg
ICAgdGhpcy5yZXF1ZXN0ZWRGcmVxdWVuY2llc18uc29ydCgKQEAgLTk3LDYgKzk3LDE0IEBAIHZh
ciBHZW5lcmljU2Vuc29yVGVzdCA9ICgoKSA9PiB7CiAgICAgICB0aGlzLm5vdGlmeU9uUmVhZGlu
Z0NoYW5nZV8gPSBub3RpZnlPblJlYWRpbmdDaGFuZ2U7CiAgICAgfQogCisgICAgcmVzdW1lKCkg
eworICAgICAgdGhpcy5zdGFydFJlYWRpbmcoKTsKKyAgICB9CisKKyAgICBzdXNwZW5kKCkgewor
ICAgICAgdGhpcy5zdG9wUmVhZGluZygpOworICAgIH0KKwogICAgIC8vIE1vY2sgZnVuY3Rpb25z
CiAKICAgICAvLyBSZXNldHMgbW9jayBTZW5zb3Igc3RhdGUuCkBAIC0xNDMsOCArMTUxLDEwIEBA
IHZhciBHZW5lcmljU2Vuc29yVGVzdCA9ICgoKSA9PiB7CiAgICAgICAgICAgLy8gfGJ1ZmZlcl98
IGlzIGEgVHlwZWRBcnJheSwgc28gd2UgbmVlZCB0byBtYWtlIHN1cmUgcGFzcyBhbgogICAgICAg
ICAgIC8vIGFycmF5IHRvIHNldCgpLgogICAgICAgICAgIGNvbnN0IHJlYWRpbmcgPSB0aGlzLnJl
YWRpbmdEYXRhXy5uZXh0KCkudmFsdWU7Ci0gICAgICAgICAgYXNzZXJ0X3RydWUoQXJyYXkuaXNB
cnJheShyZWFkaW5nKSwgIlRoZSByZWFkaW5ncyBwYXNzZWQgdG8gIiArCi0gICAgICAgICAgICAg
ICJzZXRTZW5zb3JSZWFkaW5nKCkgbXVzdCBiZSBhcnJheXMuIik7CisgICAgICAgICAgaWYgKCFB
cnJheS5pc0FycmF5KHJlYWRpbmcpKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9y
KCJzdGFydFJlYWRpbmcoKTogVGhlIHJlYWRpbmdzIHBhc3NlZCB0byAiICsKKyAgICAgICAgICAg
ICAgInNldFNlbnNvclJlYWRpbmcoKSBtdXN0IGJlIGFycmF5cyIpOworICAgICAgICAgIH0KICAg
ICAgICAgICB0aGlzLmJ1ZmZlcl8uc2V0KHJlYWRpbmcsIDIpOwogICAgICAgICB9CiAgICAgICAg
IC8vIEZvciBhbGwgdGVzdHMgc2Vuc29yIHJlYWRpbmcgc2hvdWxkIGhhdmUgbW9ub3RvbmljYWxs
eQpAQCAtMTY1LDkgKzE3NSwxNSBAQCB2YXIgR2VuZXJpY1NlbnNvclRlc3QgPSAoKCkgPT4gewog
ICAgIH0KIAogICAgIGdldFNhbXBsaW5nRnJlcXVlbmN5KCkgewotICAgICAgIGFzc2VydF90cnVl
KHRoaXMucmVxdWVzdGVkRnJlcXVlbmNpZXNfLmxlbmd0aCA+IDApOworICAgICAgaWYgKHRoaXMu
cmVxdWVzdGVkRnJlcXVlbmNpZXNfLmxlbmd0aCA9PSAwKSB7CisgICAgICAgIHRocm93IG5ldyBF
cnJvcigiZ2V0U2FtcGxpbmdGcmVxdWVuY3koKTogTm8gY29uZmlndXJlZCBmcmVxdWVuY3kiKTsK
KyAgICAgIH0KICAgICAgICByZXR1cm4gdGhpcy5yZXF1ZXN0ZWRGcmVxdWVuY2llc19bMF07CiAg
ICAgfQorCisgICAgaXNSZWFkaW5nRGF0YSgpIHsKKyAgICAgIHJldHVybiB0aGlzLnNlbnNvclJl
YWRpbmdUaW1lcklkXyAhPSBudWxsOworICAgIH0KICAgfQogCiAgIC8vIENsYXNzIHRoYXQgbW9j
a3MgU2Vuc29yUHJvdmlkZXIgaW50ZXJmYWNlIGRlZmluZWQgaW4KQEAgLTE3OSw3ICsxOTUsOSBA
QCB2YXIgR2VuZXJpY1NlbnNvclRlc3QgPSAoKCkgPT4gewogICAgICAgdGhpcy5zaGFyZWRCdWZm
ZXJTaXplSW5CeXRlc18gPSB0aGlzLnJlYWRpbmdTaXplSW5CeXRlc18gKgogICAgICAgICAgICAg
ICAoZGV2aWNlLm1vam9tLlNlbnNvclR5cGUuTUFYX1ZBTFVFICsgMSk7CiAgICAgICBjb25zdCBy
diA9IE1vam8uY3JlYXRlU2hhcmVkQnVmZmVyKHRoaXMuc2hhcmVkQnVmZmVyU2l6ZUluQnl0ZXNf
KTsKLSAgICAgIGFzc2VydF9lcXVhbHMocnYucmVzdWx0LCBNb2pvLlJFU1VMVF9PSywgIkZhaWxl
ZCB0byBjcmVhdGUgYnVmZmVyIik7CisgICAgICBpZiAocnYucmVzdWx0ICE9IE1vam8uUkVTVUxU
X09LKSB7CisgICAgICAgIHRocm93IG5ldyBFcnJvcigiTW9ja1NlbnNvclByb3ZpZGVyOiBGYWls
ZWQgdG8gbWFwIHNoYXJlZCBidWZmZXIiKTsKKyAgICAgIH0KICAgICAgIHRoaXMuc2hhcmVkQnVm
ZmVySGFuZGxlXyA9IHJ2LmhhbmRsZTsKICAgICAgIHRoaXMuYWN0aXZlU2Vuc29yc18gPSBuZXcg
TWFwKCk7CiAgICAgICB0aGlzLnJlc29sdmVGdW5jc18gPSBuZXcgTWFwKCk7CkBAIC0yMzksOCAr
MjU3LDkgQEAgdmFyIEdlbmVyaWNTZW5zb3JUZXN0ID0gKCgpID0+IHsKICAgICAgIH0KIAogICAg
ICAgY29uc3QgcnYgPSB0aGlzLnNoYXJlZEJ1ZmZlckhhbmRsZV8uZHVwbGljYXRlQnVmZmVySGFu
ZGxlKCk7Ci0KLSAgICAgIGFzc2VydF9lcXVhbHMocnYucmVzdWx0LCBNb2pvLlJFU1VMVF9PSyk7
CisgICAgICBpZiAocnYucmVzdWx0ICE9IE1vam8uUkVTVUxUX09LKSB7CisgICAgICAgIHRocm93
IG5ldyBFcnJvcigiZ2V0U2Vuc29yKCk6IGZhaWxlZCB0byBkdXBsaWNhdGUgTW9qbyBidWZmZXIg
aGFuZGxlciIpOworICAgICAgfQogCiAgICAgICBjb25zdCBkZWZhdWx0Q29uZmlnID0geyBmcmVx
dWVuY3k6IERFRkFVTFRfRlJFUVVFTkNZIH07CiAgICAgICAvLyBDb25zaWRlciBzZW5zb3IgdHJh
aXRzIHRvIG1lZXQgYXNzZXJ0aW9ucyBpbiBDKysgY29kZSAoc2VlCkBAIC0zMjUsNyArMzQ0LDkg
QEAgdmFyIEdlbmVyaWNTZW5zb3JUZXN0ID0gKCgpID0+IHsKICAgICAvLyBSZXR1cm5zIG1vY2sg
c2Vuc29yIHRoYXQgd2FzIGNyZWF0ZWQgaW4gZ2V0U2Vuc29yIHRvIHRoZSBsYXlvdXQgdGVzdC4K
ICAgICBnZXRDcmVhdGVkU2Vuc29yKHNlbnNvclR5cGUpIHsKICAgICAgIGNvbnN0IHR5cGUgPSB0
aGlzLm1vam9tU2Vuc29yVHlwZV8uZ2V0KHNlbnNvclR5cGUpOwotICAgICAgYXNzZXJ0X2VxdWFs
cyh0eXBlb2YgdHlwZSwgIm51bWJlciIsICJBIHNlbnNvciB0eXBlIG11c3QgYmUgc3BlY2lmaWVk
LiIpOworICAgICAgaWYgKHR5cGVvZiB0eXBlICE9ICJudW1iZXIiKSB7CisgICAgICAgIHRocm93
IG5ldyBUeXBlRXJyb3IoYGdldENyZWF0ZWRTZW5zb3IoKTogSW52YWxpZCBzZW5zb3IgdHlwZSAk
e3NlbnNvclR5cGV9YCk7CisgICAgICB9CiAKICAgICAgIGlmICh0aGlzLmFjdGl2ZVNlbnNvcnNf
Lmhhcyh0eXBlKSkgewogICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRoaXMuYWN0aXZl
U2Vuc29yc18uZ2V0KHR5cGUpKTsKQEAgLTM2NSwxMCArMzg2LDE1IEBAIHZhciBHZW5lcmljU2Vu
c29yVGVzdCA9ICgoKSA9PiB7CiAgICAgICAgIHRocm93IG5ldyBFcnJvcignQ2FsbCByZXNldCgp
IGJlZm9yZSBpbml0aWFsaXplKCkuJyk7CiAKICAgICAgIC8vIEdyYW50IHNlbnNvciBwZXJtaXNz
aW9ucyBmb3IgQ2hyb21pdW0gdGVzdGRyaXZlci4KLSAgICAgIGZvciAoY29uc3QgZW50cnkgb2Yg
WydhY2NlbGVyb21ldGVyJywgJ2d5cm9zY29wZScsCi0gICAgICAgICAgJ21hZ25ldG9tZXRlcics
ICdhbWJpZW50LWxpZ2h0LXNlbnNvciddKSB7Ci0gICAgICAgIGF3YWl0IHRlc3RfZHJpdmVyLnNl
dF9wZXJtaXNzaW9uKHsgbmFtZTogZW50cnkgfSwgJ2dyYW50ZWQnLCBmYWxzZSk7Ci0gICAgICB9
OworICAgICAgLy8gdGVzdGRyaXZlci5qcyBvbmx5IHdvcmtzIGluIHRoZSB0b3AtbGV2ZWwgYnJv
d3NpbmcgY29udGV4dCwgc28gZG8KKyAgICAgIC8vIG5vdGhpbmcgaWYgd2UncmUgaW4gZS5nLiBh
biBpZnJhbWUuCisgICAgICBpZiAod2luZG93LnBhcmVudCA9PT0gd2luZG93KSB7CisgICAgICAg
IGZvciAoY29uc3QgZW50cnkKKyAgICAgICAgICAgICAgICAgb2YgWydhY2NlbGVyb21ldGVyJywg
J2d5cm9zY29wZScsICdtYWduZXRvbWV0ZXInLAorICAgICAgICAgICAgICAgICAgICAgJ2FtYmll
bnQtbGlnaHQtc2Vuc29yJ10pIHsKKyAgICAgICAgICBhd2FpdCB0ZXN0X2RyaXZlci5zZXRfcGVy
bWlzc2lvbih7bmFtZTogZW50cnl9LCAnZ3JhbnRlZCcsIGZhbHNlKTsKKyAgICAgICAgfQorICAg
ICAgfQogCiAgICAgICB0ZXN0SW50ZXJuYWwuc2Vuc29yUHJvdmlkZXIgPSBuZXcgTW9ja1NlbnNv
clByb3ZpZGVyOwogICAgICAgdGVzdEludGVybmFsLmluaXRpYWxpemVkID0gdHJ1ZTsKZGlmZiAt
LWdpdCBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3Vy
Y2VzL2Nocm9taXVtL2ltYWdlX2NhcHR1cmUtbW9qb20uanMuaGVhZGVycyBiL0xheW91dFRlc3Rz
L2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL2ltYWdl
X2NhcHR1cmUtbW9qb20uanMuaGVhZGVycwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
NmM2MWEzNGE0ZWMyZTc1MDk2ZGIwZWI5Zjc3NDhiMTQyZjBkYjdiYi4uMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mv
d2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS9pbWFnZV9jYXB0dXJlLW1vam9t
LmpzLmhlYWRlcnMKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi1Db250ZW50LVR5cGU6IHRl
eHQvamF2YXNjcmlwdDsgY2hhcnNldD11dGYtOApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUK
ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMv
cmVzb3VyY2VzL2Nocm9taXVtL2ltYWdlX2NhcHR1cmUubW9qb20uanMgYi9MYXlvdXRUZXN0cy9p
bXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS9pbWFnZV9j
YXB0dXJlLm1vam9tLmpzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMTQ1ZDdhMzQw
MjU0M2ExODIyOTYyOWRhMDEzM2RlYTgxZGQzNzU1Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwCi0tLSBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZv
cm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL2ltYWdlX2NhcHR1cmUubW9qb20uanMKKysrIC9k
ZXYvbnVsbApAQCAtMSwxNDAzICswLDAgQEAKLS8vIENvcHlyaWdodCAyMDE0IFRoZSBDaHJvbWl1
bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNv
ZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91
bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLQotJ3VzZSBzdHJpY3QnOwotCi0oZnVuY3Rpb24oKSB7
Ci0gIHZhciBtb2pvbUlkID0gJ21lZGlhL2NhcHR1cmUvbW9qb20vaW1hZ2VfY2FwdHVyZS5tb2pv
bSc7Ci0gIGlmIChtb2pvLmludGVybmFsLmlzTW9qb21Mb2FkZWQobW9qb21JZCkpIHsKLSAgICBj
b25zb2xlLndhcm4oJ1RoZSBmb2xsb3dpbmcgbW9qb20gaXMgbG9hZGVkIG11bHRpcGxlIHRpbWVz
OiAnICsgbW9qb21JZCk7Ci0gICAgcmV0dXJuOwotICB9Ci0gIG1vam8uaW50ZXJuYWwubWFya01v
am9tTG9hZGVkKG1vam9tSWQpOwotICB2YXIgYmluZGluZ3MgPSBtb2pvOwotICB2YXIgYXNzb2Np
YXRlZEJpbmRpbmdzID0gbW9qbzsKLSAgdmFyIGNvZGVjID0gbW9qby5pbnRlcm5hbDsKLSAgdmFy
IHZhbGlkYXRvciA9IG1vam8uaW50ZXJuYWw7Ci0KLSAgdmFyIGV4cG9ydHMgPSBtb2pvLmludGVy
bmFsLmV4cG9zZU5hbWVzcGFjZSgnbWVkaWEubW9qb20nKTsKLQotCi0gIHZhciBNZXRlcmluZ01v
ZGUgPSB7fTsKLSAgTWV0ZXJpbmdNb2RlLk5PTkUgPSAwOwotICBNZXRlcmluZ01vZGUuTUFOVUFM
ID0gTWV0ZXJpbmdNb2RlLk5PTkUgKyAxOwotICBNZXRlcmluZ01vZGUuU0lOR0xFX1NIT1QgPSBN
ZXRlcmluZ01vZGUuTUFOVUFMICsgMTsKLSAgTWV0ZXJpbmdNb2RlLkNPTlRJTlVPVVMgPSBNZXRl
cmluZ01vZGUuU0lOR0xFX1NIT1QgKyAxOwotICBNZXRlcmluZ01vZGUuTUlOX1ZBTFVFID0gMCwK
LSAgTWV0ZXJpbmdNb2RlLk1BWF9WQUxVRSA9IDMsCi0KLSAgTWV0ZXJpbmdNb2RlLmlzS25vd25F
bnVtVmFsdWUgPSBmdW5jdGlvbih2YWx1ZSkgewotICAgIHN3aXRjaCAodmFsdWUpIHsKLSAgICBj
YXNlIDA6Ci0gICAgY2FzZSAxOgotICAgIGNhc2UgMjoKLSAgICBjYXNlIDM6Ci0gICAgICByZXR1
cm4gdHJ1ZTsKLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9OwotCi0gIE1ldGVyaW5nTW9k
ZS52YWxpZGF0ZSA9IGZ1bmN0aW9uKGVudW1WYWx1ZSkgewotICAgIHZhciBpc0V4dGVuc2libGUg
PSBmYWxzZTsKLSAgICBpZiAoaXNFeHRlbnNpYmxlIHx8IHRoaXMuaXNLbm93bkVudW1WYWx1ZShl
bnVtVmFsdWUpKQotICAgICAgcmV0dXJuIHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORTsK
LQotICAgIHJldHVybiB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLlVOS05PV05fRU5VTV9WQUxV
RTsKLSAgfTsKLSAgdmFyIFJlZEV5ZVJlZHVjdGlvbiA9IHt9OwotICBSZWRFeWVSZWR1Y3Rpb24u
TkVWRVIgPSAwOwotICBSZWRFeWVSZWR1Y3Rpb24uQUxXQVlTID0gUmVkRXllUmVkdWN0aW9uLk5F
VkVSICsgMTsKLSAgUmVkRXllUmVkdWN0aW9uLkNPTlRST0xMQUJMRSA9IFJlZEV5ZVJlZHVjdGlv
bi5BTFdBWVMgKyAxOwotICBSZWRFeWVSZWR1Y3Rpb24uTUlOX1ZBTFVFID0gMCwKLSAgUmVkRXll
UmVkdWN0aW9uLk1BWF9WQUxVRSA9IDIsCi0KLSAgUmVkRXllUmVkdWN0aW9uLmlzS25vd25FbnVt
VmFsdWUgPSBmdW5jdGlvbih2YWx1ZSkgewotICAgIHN3aXRjaCAodmFsdWUpIHsKLSAgICBjYXNl
IDA6Ci0gICAgY2FzZSAxOgotICAgIGNhc2UgMjoKLSAgICAgIHJldHVybiB0cnVlOwotICAgIH0K
LSAgICByZXR1cm4gZmFsc2U7Ci0gIH07Ci0KLSAgUmVkRXllUmVkdWN0aW9uLnZhbGlkYXRlID0g
ZnVuY3Rpb24oZW51bVZhbHVlKSB7Ci0gICAgdmFyIGlzRXh0ZW5zaWJsZSA9IGZhbHNlOwotICAg
IGlmIChpc0V4dGVuc2libGUgfHwgdGhpcy5pc0tub3duRW51bVZhbHVlKGVudW1WYWx1ZSkpCi0g
ICAgICByZXR1cm4gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FOwotCi0gICAgcmV0dXJu
IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuVU5LTk9XTl9FTlVNX1ZBTFVFOwotICB9OwotICB2
YXIgRmlsbExpZ2h0TW9kZSA9IHt9OwotICBGaWxsTGlnaHRNb2RlLk9GRiA9IDA7Ci0gIEZpbGxM
aWdodE1vZGUuQVVUTyA9IEZpbGxMaWdodE1vZGUuT0ZGICsgMTsKLSAgRmlsbExpZ2h0TW9kZS5G
TEFTSCA9IEZpbGxMaWdodE1vZGUuQVVUTyArIDE7Ci0gIEZpbGxMaWdodE1vZGUuTUlOX1ZBTFVF
ID0gMCwKLSAgRmlsbExpZ2h0TW9kZS5NQVhfVkFMVUUgPSAyLAotCi0gIEZpbGxMaWdodE1vZGUu
aXNLbm93bkVudW1WYWx1ZSA9IGZ1bmN0aW9uKHZhbHVlKSB7Ci0gICAgc3dpdGNoICh2YWx1ZSkg
ewotICAgIGNhc2UgMDoKLSAgICBjYXNlIDE6Ci0gICAgY2FzZSAyOgotICAgICAgcmV0dXJuIHRy
dWU7Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLSAgfTsKLQotICBGaWxsTGlnaHRNb2RlLnZh
bGlkYXRlID0gZnVuY3Rpb24oZW51bVZhbHVlKSB7Ci0gICAgdmFyIGlzRXh0ZW5zaWJsZSA9IGZh
bHNlOwotICAgIGlmIChpc0V4dGVuc2libGUgfHwgdGhpcy5pc0tub3duRW51bVZhbHVlKGVudW1W
YWx1ZSkpCi0gICAgICByZXR1cm4gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FOwotCi0g
ICAgcmV0dXJuIHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuVU5LTk9XTl9FTlVNX1ZBTFVFOwot
ICB9OwotCi0gIGZ1bmN0aW9uIFJhbmdlKHZhbHVlcykgewotICAgIHRoaXMuaW5pdERlZmF1bHRz
XygpOwotICAgIHRoaXMuaW5pdEZpZWxkc18odmFsdWVzKTsKLSAgfQotCi0KLSAgUmFuZ2UucHJv
dG90eXBlLmluaXREZWZhdWx0c18gPSBmdW5jdGlvbigpIHsKLSAgICB0aGlzLm1heCA9IDA7Ci0g
ICAgdGhpcy5taW4gPSAwOwotICAgIHRoaXMuY3VycmVudCA9IDA7Ci0gICAgdGhpcy5zdGVwID0g
MDsKLSAgfTsKLSAgUmFuZ2UucHJvdG90eXBlLmluaXRGaWVsZHNfID0gZnVuY3Rpb24oZmllbGRz
KSB7Ci0gICAgZm9yKHZhciBmaWVsZCBpbiBmaWVsZHMpIHsKLSAgICAgICAgaWYgKHRoaXMuaGFz
T3duUHJvcGVydHkoZmllbGQpKQotICAgICAgICAgIHRoaXNbZmllbGRdID0gZmllbGRzW2ZpZWxk
XTsKLSAgICB9Ci0gIH07Ci0KLSAgUmFuZ2UudmFsaWRhdGUgPSBmdW5jdGlvbihtZXNzYWdlVmFs
aWRhdG9yLCBvZmZzZXQpIHsKLSAgICB2YXIgZXJyOwotICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0
b3IudmFsaWRhdGVTdHJ1Y3RIZWFkZXIob2Zmc2V0LCBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSk7
Ci0gICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQotICAgICAg
ICByZXR1cm4gZXJyOwotCi0gICAgdmFyIGtWZXJzaW9uU2l6ZXMgPSBbCi0gICAgICB7dmVyc2lv
bjogMCwgbnVtQnl0ZXM6IDQwfQotICAgIF07Ci0gICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52
YWxpZGF0ZVN0cnVjdFZlcnNpb24ob2Zmc2V0LCBrVmVyc2lvblNpemVzKTsKLSAgICBpZiAoZXJy
ICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCi0gICAgICAgIHJldHVybiBlcnI7
Ci0KLQotCi0KLQotICAgIHJldHVybiB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkU7Ci0g
IH07Ci0KLSAgUmFuZ2UuZW5jb2RlZFNpemUgPSBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDMy
OwotCi0gIFJhbmdlLmRlY29kZSA9IGZ1bmN0aW9uKGRlY29kZXIpIHsKLSAgICB2YXIgcGFja2Vk
OwotICAgIHZhciB2YWwgPSBuZXcgUmFuZ2UoKTsKLSAgICB2YXIgbnVtYmVyT2ZCeXRlcyA9IGRl
Y29kZXIucmVhZFVpbnQzMigpOwotICAgIHZhciB2ZXJzaW9uID0gZGVjb2Rlci5yZWFkVWludDMy
KCk7Ci0gICAgdmFsLm1heCA9IGRlY29kZXIuZGVjb2RlU3RydWN0KGNvZGVjLkRvdWJsZSk7Ci0g
ICAgdmFsLm1pbiA9IGRlY29kZXIuZGVjb2RlU3RydWN0KGNvZGVjLkRvdWJsZSk7Ci0gICAgdmFs
LmN1cnJlbnQgPSBkZWNvZGVyLmRlY29kZVN0cnVjdChjb2RlYy5Eb3VibGUpOwotICAgIHZhbC5z
dGVwID0gZGVjb2Rlci5kZWNvZGVTdHJ1Y3QoY29kZWMuRG91YmxlKTsKLSAgICByZXR1cm4gdmFs
OwotICB9OwotCi0gIFJhbmdlLmVuY29kZSA9IGZ1bmN0aW9uKGVuY29kZXIsIHZhbCkgewotICAg
IHZhciBwYWNrZWQ7Ci0gICAgZW5jb2Rlci53cml0ZVVpbnQzMihSYW5nZS5lbmNvZGVkU2l6ZSk7
Ci0gICAgZW5jb2Rlci53cml0ZVVpbnQzMigwKTsKLSAgICBlbmNvZGVyLmVuY29kZVN0cnVjdChj
b2RlYy5Eb3VibGUsIHZhbC5tYXgpOwotICAgIGVuY29kZXIuZW5jb2RlU3RydWN0KGNvZGVjLkRv
dWJsZSwgdmFsLm1pbik7Ci0gICAgZW5jb2Rlci5lbmNvZGVTdHJ1Y3QoY29kZWMuRG91YmxlLCB2
YWwuY3VycmVudCk7Ci0gICAgZW5jb2Rlci5lbmNvZGVTdHJ1Y3QoY29kZWMuRG91YmxlLCB2YWwu
c3RlcCk7Ci0gIH07Ci0gIGZ1bmN0aW9uIFBob3RvU3RhdGUodmFsdWVzKSB7Ci0gICAgdGhpcy5p
bml0RGVmYXVsdHNfKCk7Ci0gICAgdGhpcy5pbml0RmllbGRzXyh2YWx1ZXMpOwotICB9Ci0KLQot
ICBQaG90b1N0YXRlLnByb3RvdHlwZS5pbml0RGVmYXVsdHNfID0gZnVuY3Rpb24oKSB7Ci0gICAg
dGhpcy5zdXBwb3J0ZWRXaGl0ZUJhbGFuY2VNb2RlcyA9IG51bGw7Ci0gICAgdGhpcy5jdXJyZW50
V2hpdGVCYWxhbmNlTW9kZSA9IDA7Ci0gICAgdGhpcy5jdXJyZW50RXhwb3N1cmVNb2RlID0gMDsK
LSAgICB0aGlzLnN1cHBvcnRlZEV4cG9zdXJlTW9kZXMgPSBudWxsOwotICAgIHRoaXMuc3VwcG9y
dGVkRm9jdXNNb2RlcyA9IG51bGw7Ci0gICAgdGhpcy5jdXJyZW50Rm9jdXNNb2RlID0gMDsKLSAg
ICB0aGlzLnN1cHBvcnRzVG9yY2ggPSBmYWxzZTsKLSAgICB0aGlzLnRvcmNoID0gZmFsc2U7Ci0g
ICAgdGhpcy5wb2ludHNPZkludGVyZXN0ID0gbnVsbDsKLSAgICB0aGlzLmV4cG9zdXJlQ29tcGVu
c2F0aW9uID0gbnVsbDsKLSAgICB0aGlzLmV4cG9zdXJlVGltZSA9IG51bGw7Ci0gICAgdGhpcy5j
b2xvclRlbXBlcmF0dXJlID0gbnVsbDsKLSAgICB0aGlzLmlzbyA9IG51bGw7Ci0gICAgdGhpcy5i
cmlnaHRuZXNzID0gbnVsbDsKLSAgICB0aGlzLmNvbnRyYXN0ID0gbnVsbDsKLSAgICB0aGlzLnNh
dHVyYXRpb24gPSBudWxsOwotICAgIHRoaXMuc2hhcnBuZXNzID0gbnVsbDsKLSAgICB0aGlzLmZv
Y3VzRGlzdGFuY2UgPSBudWxsOwotICAgIHRoaXMucGFuID0gbnVsbDsKLSAgICB0aGlzLnRpbHQg
PSBudWxsOwotICAgIHRoaXMuem9vbSA9IG51bGw7Ci0gICAgdGhpcy5yZWRFeWVSZWR1Y3Rpb24g
PSAwOwotICAgIHRoaXMuaGVpZ2h0ID0gbnVsbDsKLSAgICB0aGlzLndpZHRoID0gbnVsbDsKLSAg
ICB0aGlzLmZpbGxMaWdodE1vZGUgPSBudWxsOwotICB9OwotICBQaG90b1N0YXRlLnByb3RvdHlw
ZS5pbml0RmllbGRzXyA9IGZ1bmN0aW9uKGZpZWxkcykgewotICAgIGZvcih2YXIgZmllbGQgaW4g
ZmllbGRzKSB7Ci0gICAgICAgIGlmICh0aGlzLmhhc093blByb3BlcnR5KGZpZWxkKSkKLSAgICAg
ICAgICB0aGlzW2ZpZWxkXSA9IGZpZWxkc1tmaWVsZF07Ci0gICAgfQotICB9OwotCi0gIFBob3Rv
U3RhdGUudmFsaWRhdGUgPSBmdW5jdGlvbihtZXNzYWdlVmFsaWRhdG9yLCBvZmZzZXQpIHsKLSAg
ICB2YXIgZXJyOwotICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RIZWFk
ZXIob2Zmc2V0LCBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSk7Ci0gICAgaWYgKGVyciAhPT0gdmFs
aWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQotICAgICAgICByZXR1cm4gZXJyOwotCi0gICAg
dmFyIGtWZXJzaW9uU2l6ZXMgPSBbCi0gICAgICB7dmVyc2lvbjogMCwgbnVtQnl0ZXM6IDE4NH0K
LSAgICBdOwotICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RWZXJzaW9u
KG9mZnNldCwga1ZlcnNpb25TaXplcyk7Ci0gICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlk
YXRpb25FcnJvci5OT05FKQotICAgICAgICByZXR1cm4gZXJyOwotCi0KLSAgICAvLyB2YWxpZGF0
ZSBQaG90b1N0YXRlLnN1cHBvcnRlZFdoaXRlQmFsYW5jZU1vZGVzCi0gICAgZXJyID0gbWVzc2Fn
ZVZhbGlkYXRvci52YWxpZGF0ZUFycmF5UG9pbnRlcihvZmZzZXQgKyBjb2RlYy5rU3RydWN0SGVh
ZGVyU2l6ZSArIDAsIDQsIG5ldyBjb2RlYy5FbnVtKE1ldGVyaW5nTW9kZSksIGZhbHNlLCBbMF0s
IDApOwotICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKLSAg
ICAgICAgcmV0dXJuIGVycjsKLQotCi0gICAgLy8gdmFsaWRhdGUgUGhvdG9TdGF0ZS5jdXJyZW50
V2hpdGVCYWxhbmNlTW9kZQotICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVFbnVt
KG9mZnNldCArIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgOCwgTWV0ZXJpbmdNb2RlKTsKLSAg
ICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCi0gICAgICAgIHJl
dHVybiBlcnI7Ci0KLQotICAgIC8vIHZhbGlkYXRlIFBob3RvU3RhdGUuc3VwcG9ydGVkRXhwb3N1
cmVNb2RlcwotICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVBcnJheVBvaW50ZXIo
b2Zmc2V0ICsgY29kZWMua1N0cnVjdEhlYWRlclNpemUgKyAxNiwgNCwgbmV3IGNvZGVjLkVudW0o
TWV0ZXJpbmdNb2RlKSwgZmFsc2UsIFswXSwgMCk7Ci0gICAgaWYgKGVyciAhPT0gdmFsaWRhdG9y
LnZhbGlkYXRpb25FcnJvci5OT05FKQotICAgICAgICByZXR1cm4gZXJyOwotCi0KLSAgICAvLyB2
YWxpZGF0ZSBQaG90b1N0YXRlLmN1cnJlbnRFeHBvc3VyZU1vZGUKLSAgICBlcnIgPSBtZXNzYWdl
VmFsaWRhdG9yLnZhbGlkYXRlRW51bShvZmZzZXQgKyBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSAr
IDEyLCBNZXRlcmluZ01vZGUpOwotICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9u
RXJyb3IuTk9ORSkKLSAgICAgICAgcmV0dXJuIGVycjsKLQotCi0gICAgLy8gdmFsaWRhdGUgUGhv
dG9TdGF0ZS5zdXBwb3J0ZWRGb2N1c01vZGVzCi0gICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52
YWxpZGF0ZUFycmF5UG9pbnRlcihvZmZzZXQgKyBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDI0
LCA0LCBuZXcgY29kZWMuRW51bShNZXRlcmluZ01vZGUpLCBmYWxzZSwgWzBdLCAwKTsKLSAgICBp
ZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCi0gICAgICAgIHJldHVy
biBlcnI7Ci0KLQotICAgIC8vIHZhbGlkYXRlIFBob3RvU3RhdGUuY3VycmVudEZvY3VzTW9kZQot
ICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVFbnVtKG9mZnNldCArIGNvZGVjLmtT
dHJ1Y3RIZWFkZXJTaXplICsgMzIsIE1ldGVyaW5nTW9kZSk7Ci0gICAgaWYgKGVyciAhPT0gdmFs
aWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQotICAgICAgICByZXR1cm4gZXJyOwotCi0KLSAg
ICAvLyB2YWxpZGF0ZSBQaG90b1N0YXRlLnBvaW50c09mSW50ZXJlc3QKLSAgICBlcnIgPSBtZXNz
YWdlVmFsaWRhdG9yLnZhbGlkYXRlQXJyYXlQb2ludGVyKG9mZnNldCArIGNvZGVjLmtTdHJ1Y3RI
ZWFkZXJTaXplICsgNDAsIDgsIG5ldyBjb2RlYy5Qb2ludGVyVG8oUG9pbnQyRCksIGZhbHNlLCBb
MF0sIDApOwotICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkK
LSAgICAgICAgcmV0dXJuIGVycjsKLQotCi0gICAgLy8gdmFsaWRhdGUgUGhvdG9TdGF0ZS5leHBv
c3VyZUNvbXBlbnNhdGlvbgotICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1
Y3RQb2ludGVyKG9mZnNldCArIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgNDgsIFJhbmdlLCBm
YWxzZSk7Ci0gICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQot
ICAgICAgICByZXR1cm4gZXJyOwotCi0KLSAgICAvLyB2YWxpZGF0ZSBQaG90b1N0YXRlLmV4cG9z
dXJlVGltZQotICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RQb2ludGVy
KG9mZnNldCArIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgNTYsIFJhbmdlLCBmYWxzZSk7Ci0g
ICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQotICAgICAgICBy
ZXR1cm4gZXJyOwotCi0KLSAgICAvLyB2YWxpZGF0ZSBQaG90b1N0YXRlLmNvbG9yVGVtcGVyYXR1
cmUKLSAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0UG9pbnRlcihvZmZz
ZXQgKyBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDY0LCBSYW5nZSwgZmFsc2UpOwotICAgIGlm
IChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKLSAgICAgICAgcmV0dXJu
IGVycjsKLQotCi0gICAgLy8gdmFsaWRhdGUgUGhvdG9TdGF0ZS5pc28KLSAgICBlcnIgPSBtZXNz
YWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0UG9pbnRlcihvZmZzZXQgKyBjb2RlYy5rU3RydWN0
SGVhZGVyU2l6ZSArIDcyLCBSYW5nZSwgZmFsc2UpOwotICAgIGlmIChlcnIgIT09IHZhbGlkYXRv
ci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKLSAgICAgICAgcmV0dXJuIGVycjsKLQotCi0gICAgLy8g
dmFsaWRhdGUgUGhvdG9TdGF0ZS5icmlnaHRuZXNzCi0gICAgZXJyID0gbWVzc2FnZVZhbGlkYXRv
ci52YWxpZGF0ZVN0cnVjdFBvaW50ZXIob2Zmc2V0ICsgY29kZWMua1N0cnVjdEhlYWRlclNpemUg
KyA4MCwgUmFuZ2UsIGZhbHNlKTsKLSAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlv
bkVycm9yLk5PTkUpCi0gICAgICAgIHJldHVybiBlcnI7Ci0KLQotICAgIC8vIHZhbGlkYXRlIFBo
b3RvU3RhdGUuY29udHJhc3QKLSAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3Ry
dWN0UG9pbnRlcihvZmZzZXQgKyBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDg4LCBSYW5nZSwg
ZmFsc2UpOwotICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkK
LSAgICAgICAgcmV0dXJuIGVycjsKLQotCi0gICAgLy8gdmFsaWRhdGUgUGhvdG9TdGF0ZS5zYXR1
cmF0aW9uCi0gICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdFBvaW50ZXIo
b2Zmc2V0ICsgY29kZWMua1N0cnVjdEhlYWRlclNpemUgKyA5NiwgUmFuZ2UsIGZhbHNlKTsKLSAg
ICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCi0gICAgICAgIHJl
dHVybiBlcnI7Ci0KLQotICAgIC8vIHZhbGlkYXRlIFBob3RvU3RhdGUuc2hhcnBuZXNzCi0gICAg
ZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdFBvaW50ZXIob2Zmc2V0ICsgY29k
ZWMua1N0cnVjdEhlYWRlclNpemUgKyAxMDQsIFJhbmdlLCBmYWxzZSk7Ci0gICAgaWYgKGVyciAh
PT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQotICAgICAgICByZXR1cm4gZXJyOwot
Ci0KLSAgICAvLyB2YWxpZGF0ZSBQaG90b1N0YXRlLmZvY3VzRGlzdGFuY2UKLSAgICBlcnIgPSBt
ZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0UG9pbnRlcihvZmZzZXQgKyBjb2RlYy5rU3Ry
dWN0SGVhZGVyU2l6ZSArIDExMiwgUmFuZ2UsIGZhbHNlKTsKLSAgICBpZiAoZXJyICE9PSB2YWxp
ZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCi0gICAgICAgIHJldHVybiBlcnI7Ci0KLQotICAg
IC8vIHZhbGlkYXRlIFBob3RvU3RhdGUucGFuCi0gICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52
YWxpZGF0ZVN0cnVjdFBvaW50ZXIob2Zmc2V0ICsgY29kZWMua1N0cnVjdEhlYWRlclNpemUgKyAx
MjAsIFJhbmdlLCBmYWxzZSk7Ci0gICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25F
cnJvci5OT05FKQotICAgICAgICByZXR1cm4gZXJyOwotCi0KLSAgICAvLyB2YWxpZGF0ZSBQaG90
b1N0YXRlLnRpbHQKLSAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0UG9p
bnRlcihvZmZzZXQgKyBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDEyOCwgUmFuZ2UsIGZhbHNl
KTsKLSAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCi0gICAg
ICAgIHJldHVybiBlcnI7Ci0KLQotICAgIC8vIHZhbGlkYXRlIFBob3RvU3RhdGUuem9vbQotICAg
IGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RQb2ludGVyKG9mZnNldCArIGNv
ZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgMTM2LCBSYW5nZSwgZmFsc2UpOwotICAgIGlmIChlcnIg
IT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKLSAgICAgICAgcmV0dXJuIGVycjsK
LQotCi0KLQotICAgIC8vIHZhbGlkYXRlIFBob3RvU3RhdGUucmVkRXllUmVkdWN0aW9uCi0gICAg
ZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZUVudW0ob2Zmc2V0ICsgY29kZWMua1N0cnVj
dEhlYWRlclNpemUgKyAxNDQsIFJlZEV5ZVJlZHVjdGlvbik7Ci0gICAgaWYgKGVyciAhPT0gdmFs
aWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQotICAgICAgICByZXR1cm4gZXJyOwotCi0KLSAg
ICAvLyB2YWxpZGF0ZSBQaG90b1N0YXRlLmhlaWdodAotICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0
b3IudmFsaWRhdGVTdHJ1Y3RQb2ludGVyKG9mZnNldCArIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXpl
ICsgMTUyLCBSYW5nZSwgZmFsc2UpOwotICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0
aW9uRXJyb3IuTk9ORSkKLSAgICAgICAgcmV0dXJuIGVycjsKLQotCi0gICAgLy8gdmFsaWRhdGUg
UGhvdG9TdGF0ZS53aWR0aAotICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1
Y3RQb2ludGVyKG9mZnNldCArIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgMTYwLCBSYW5nZSwg
ZmFsc2UpOwotICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkK
LSAgICAgICAgcmV0dXJuIGVycjsKLQotCi0gICAgLy8gdmFsaWRhdGUgUGhvdG9TdGF0ZS5maWxs
TGlnaHRNb2RlCi0gICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZUFycmF5UG9pbnRl
cihvZmZzZXQgKyBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDE2OCwgNCwgbmV3IGNvZGVjLkVu
dW0oRmlsbExpZ2h0TW9kZSksIGZhbHNlLCBbMF0sIDApOwotICAgIGlmIChlcnIgIT09IHZhbGlk
YXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKLSAgICAgICAgcmV0dXJuIGVycjsKLQotICAgIHJl
dHVybiB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkU7Ci0gIH07Ci0KLSAgUGhvdG9TdGF0
ZS5lbmNvZGVkU2l6ZSA9IGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgMTc2OwotCi0gIFBob3Rv
U3RhdGUuZGVjb2RlID0gZnVuY3Rpb24oZGVjb2RlcikgewotICAgIHZhciBwYWNrZWQ7Ci0gICAg
dmFyIHZhbCA9IG5ldyBQaG90b1N0YXRlKCk7Ci0gICAgdmFyIG51bWJlck9mQnl0ZXMgPSBkZWNv
ZGVyLnJlYWRVaW50MzIoKTsKLSAgICB2YXIgdmVyc2lvbiA9IGRlY29kZXIucmVhZFVpbnQzMigp
OwotICAgIHZhbC5zdXBwb3J0ZWRXaGl0ZUJhbGFuY2VNb2RlcyA9IGRlY29kZXIuZGVjb2RlQXJy
YXlQb2ludGVyKG5ldyBjb2RlYy5FbnVtKE1ldGVyaW5nTW9kZSkpOwotICAgIHZhbC5jdXJyZW50
V2hpdGVCYWxhbmNlTW9kZSA9IGRlY29kZXIuZGVjb2RlU3RydWN0KGNvZGVjLkludDMyKTsKLSAg
ICB2YWwuY3VycmVudEV4cG9zdXJlTW9kZSA9IGRlY29kZXIuZGVjb2RlU3RydWN0KGNvZGVjLklu
dDMyKTsKLSAgICB2YWwuc3VwcG9ydGVkRXhwb3N1cmVNb2RlcyA9IGRlY29kZXIuZGVjb2RlQXJy
YXlQb2ludGVyKG5ldyBjb2RlYy5FbnVtKE1ldGVyaW5nTW9kZSkpOwotICAgIHZhbC5zdXBwb3J0
ZWRGb2N1c01vZGVzID0gZGVjb2Rlci5kZWNvZGVBcnJheVBvaW50ZXIobmV3IGNvZGVjLkVudW0o
TWV0ZXJpbmdNb2RlKSk7Ci0gICAgdmFsLmN1cnJlbnRGb2N1c01vZGUgPSBkZWNvZGVyLmRlY29k
ZVN0cnVjdChjb2RlYy5JbnQzMik7Ci0gICAgcGFja2VkID0gZGVjb2Rlci5yZWFkVWludDgoKTsK
LSAgICB2YWwuc3VwcG9ydHNUb3JjaCA9IChwYWNrZWQgPj4gMCkgJiAxID8gdHJ1ZSA6IGZhbHNl
OwotICAgIHZhbC50b3JjaCA9IChwYWNrZWQgPj4gMSkgJiAxID8gdHJ1ZSA6IGZhbHNlOwotICAg
IGRlY29kZXIuc2tpcCgxKTsKLSAgICBkZWNvZGVyLnNraXAoMSk7Ci0gICAgZGVjb2Rlci5za2lw
KDEpOwotICAgIHZhbC5wb2ludHNPZkludGVyZXN0ID0gZGVjb2Rlci5kZWNvZGVBcnJheVBvaW50
ZXIobmV3IGNvZGVjLlBvaW50ZXJUbyhQb2ludDJEKSk7Ci0gICAgdmFsLmV4cG9zdXJlQ29tcGVu
c2F0aW9uID0gZGVjb2Rlci5kZWNvZGVTdHJ1Y3RQb2ludGVyKFJhbmdlKTsKLSAgICB2YWwuZXhw
b3N1cmVUaW1lID0gZGVjb2Rlci5kZWNvZGVTdHJ1Y3RQb2ludGVyKFJhbmdlKTsKLSAgICB2YWwu
Y29sb3JUZW1wZXJhdHVyZSA9IGRlY29kZXIuZGVjb2RlU3RydWN0UG9pbnRlcihSYW5nZSk7Ci0g
ICAgdmFsLmlzbyA9IGRlY29kZXIuZGVjb2RlU3RydWN0UG9pbnRlcihSYW5nZSk7Ci0gICAgdmFs
LmJyaWdodG5lc3MgPSBkZWNvZGVyLmRlY29kZVN0cnVjdFBvaW50ZXIoUmFuZ2UpOwotICAgIHZh
bC5jb250cmFzdCA9IGRlY29kZXIuZGVjb2RlU3RydWN0UG9pbnRlcihSYW5nZSk7Ci0gICAgdmFs
LnNhdHVyYXRpb24gPSBkZWNvZGVyLmRlY29kZVN0cnVjdFBvaW50ZXIoUmFuZ2UpOwotICAgIHZh
bC5zaGFycG5lc3MgPSBkZWNvZGVyLmRlY29kZVN0cnVjdFBvaW50ZXIoUmFuZ2UpOwotICAgIHZh
bC5mb2N1c0Rpc3RhbmNlID0gZGVjb2Rlci5kZWNvZGVTdHJ1Y3RQb2ludGVyKFJhbmdlKTsKLSAg
ICB2YWwucGFuID0gZGVjb2Rlci5kZWNvZGVTdHJ1Y3RQb2ludGVyKFJhbmdlKTsKLSAgICB2YWwu
dGlsdCA9IGRlY29kZXIuZGVjb2RlU3RydWN0UG9pbnRlcihSYW5nZSk7Ci0gICAgdmFsLnpvb20g
PSBkZWNvZGVyLmRlY29kZVN0cnVjdFBvaW50ZXIoUmFuZ2UpOwotICAgIHZhbC5yZWRFeWVSZWR1
Y3Rpb24gPSBkZWNvZGVyLmRlY29kZVN0cnVjdChjb2RlYy5JbnQzMik7Ci0gICAgZGVjb2Rlci5z
a2lwKDEpOwotICAgIGRlY29kZXIuc2tpcCgxKTsKLSAgICBkZWNvZGVyLnNraXAoMSk7Ci0gICAg
ZGVjb2Rlci5za2lwKDEpOwotICAgIHZhbC5oZWlnaHQgPSBkZWNvZGVyLmRlY29kZVN0cnVjdFBv
aW50ZXIoUmFuZ2UpOwotICAgIHZhbC53aWR0aCA9IGRlY29kZXIuZGVjb2RlU3RydWN0UG9pbnRl
cihSYW5nZSk7Ci0gICAgdmFsLmZpbGxMaWdodE1vZGUgPSBkZWNvZGVyLmRlY29kZUFycmF5UG9p
bnRlcihuZXcgY29kZWMuRW51bShGaWxsTGlnaHRNb2RlKSk7Ci0gICAgcmV0dXJuIHZhbDsKLSAg
fTsKLQotICBQaG90b1N0YXRlLmVuY29kZSA9IGZ1bmN0aW9uKGVuY29kZXIsIHZhbCkgewotICAg
IHZhciBwYWNrZWQ7Ci0gICAgZW5jb2Rlci53cml0ZVVpbnQzMihQaG90b1N0YXRlLmVuY29kZWRT
aXplKTsKLSAgICBlbmNvZGVyLndyaXRlVWludDMyKDApOwotICAgIGVuY29kZXIuZW5jb2RlQXJy
YXlQb2ludGVyKG5ldyBjb2RlYy5FbnVtKE1ldGVyaW5nTW9kZSksIHZhbC5zdXBwb3J0ZWRXaGl0
ZUJhbGFuY2VNb2Rlcyk7Ci0gICAgZW5jb2Rlci5lbmNvZGVTdHJ1Y3QoY29kZWMuSW50MzIsIHZh
bC5jdXJyZW50V2hpdGVCYWxhbmNlTW9kZSk7Ci0gICAgZW5jb2Rlci5lbmNvZGVTdHJ1Y3QoY29k
ZWMuSW50MzIsIHZhbC5jdXJyZW50RXhwb3N1cmVNb2RlKTsKLSAgICBlbmNvZGVyLmVuY29kZUFy
cmF5UG9pbnRlcihuZXcgY29kZWMuRW51bShNZXRlcmluZ01vZGUpLCB2YWwuc3VwcG9ydGVkRXhw
b3N1cmVNb2Rlcyk7Ci0gICAgZW5jb2Rlci5lbmNvZGVBcnJheVBvaW50ZXIobmV3IGNvZGVjLkVu
dW0oTWV0ZXJpbmdNb2RlKSwgdmFsLnN1cHBvcnRlZEZvY3VzTW9kZXMpOwotICAgIGVuY29kZXIu
ZW5jb2RlU3RydWN0KGNvZGVjLkludDMyLCB2YWwuY3VycmVudEZvY3VzTW9kZSk7Ci0gICAgcGFj
a2VkID0gMDsKLSAgICBwYWNrZWQgfD0gKHZhbC5zdXBwb3J0c1RvcmNoICYgMSkgPDwgMAotICAg
IHBhY2tlZCB8PSAodmFsLnRvcmNoICYgMSkgPDwgMQotICAgIGVuY29kZXIud3JpdGVVaW50OChw
YWNrZWQpOwotICAgIGVuY29kZXIuc2tpcCgxKTsKLSAgICBlbmNvZGVyLnNraXAoMSk7Ci0gICAg
ZW5jb2Rlci5za2lwKDEpOwotICAgIGVuY29kZXIuZW5jb2RlQXJyYXlQb2ludGVyKG5ldyBjb2Rl
Yy5Qb2ludGVyVG8oUG9pbnQyRCksIHZhbC5wb2ludHNPZkludGVyZXN0KTsKLSAgICBlbmNvZGVy
LmVuY29kZVN0cnVjdFBvaW50ZXIoUmFuZ2UsIHZhbC5leHBvc3VyZUNvbXBlbnNhdGlvbik7Ci0g
ICAgZW5jb2Rlci5lbmNvZGVTdHJ1Y3RQb2ludGVyKFJhbmdlLCB2YWwuZXhwb3N1cmVUaW1lKTsK
LSAgICBlbmNvZGVyLmVuY29kZVN0cnVjdFBvaW50ZXIoUmFuZ2UsIHZhbC5jb2xvclRlbXBlcmF0
dXJlKTsKLSAgICBlbmNvZGVyLmVuY29kZVN0cnVjdFBvaW50ZXIoUmFuZ2UsIHZhbC5pc28pOwot
ICAgIGVuY29kZXIuZW5jb2RlU3RydWN0UG9pbnRlcihSYW5nZSwgdmFsLmJyaWdodG5lc3MpOwot
ICAgIGVuY29kZXIuZW5jb2RlU3RydWN0UG9pbnRlcihSYW5nZSwgdmFsLmNvbnRyYXN0KTsKLSAg
ICBlbmNvZGVyLmVuY29kZVN0cnVjdFBvaW50ZXIoUmFuZ2UsIHZhbC5zYXR1cmF0aW9uKTsKLSAg
ICBlbmNvZGVyLmVuY29kZVN0cnVjdFBvaW50ZXIoUmFuZ2UsIHZhbC5zaGFycG5lc3MpOwotICAg
IGVuY29kZXIuZW5jb2RlU3RydWN0UG9pbnRlcihSYW5nZSwgdmFsLmZvY3VzRGlzdGFuY2UpOwot
ICAgIGVuY29kZXIuZW5jb2RlU3RydWN0UG9pbnRlcihSYW5nZSwgdmFsLnBhbik7Ci0gICAgZW5j
b2Rlci5lbmNvZGVTdHJ1Y3RQb2ludGVyKFJhbmdlLCB2YWwudGlsdCk7Ci0gICAgZW5jb2Rlci5l
bmNvZGVTdHJ1Y3RQb2ludGVyKFJhbmdlLCB2YWwuem9vbSk7Ci0gICAgZW5jb2Rlci5lbmNvZGVT
dHJ1Y3QoY29kZWMuSW50MzIsIHZhbC5yZWRFeWVSZWR1Y3Rpb24pOwotICAgIGVuY29kZXIuc2tp
cCgxKTsKLSAgICBlbmNvZGVyLnNraXAoMSk7Ci0gICAgZW5jb2Rlci5za2lwKDEpOwotICAgIGVu
Y29kZXIuc2tpcCgxKTsKLSAgICBlbmNvZGVyLmVuY29kZVN0cnVjdFBvaW50ZXIoUmFuZ2UsIHZh
bC5oZWlnaHQpOwotICAgIGVuY29kZXIuZW5jb2RlU3RydWN0UG9pbnRlcihSYW5nZSwgdmFsLndp
ZHRoKTsKLSAgICBlbmNvZGVyLmVuY29kZUFycmF5UG9pbnRlcihuZXcgY29kZWMuRW51bShGaWxs
TGlnaHRNb2RlKSwgdmFsLmZpbGxMaWdodE1vZGUpOwotICB9OwotICBmdW5jdGlvbiBQb2ludDJE
KHZhbHVlcykgewotICAgIHRoaXMuaW5pdERlZmF1bHRzXygpOwotICAgIHRoaXMuaW5pdEZpZWxk
c18odmFsdWVzKTsKLSAgfQotCi0KLSAgUG9pbnQyRC5wcm90b3R5cGUuaW5pdERlZmF1bHRzXyA9
IGZ1bmN0aW9uKCkgewotICAgIHRoaXMueCA9IDA7Ci0gICAgdGhpcy55ID0gMDsKLSAgfTsKLSAg
UG9pbnQyRC5wcm90b3R5cGUuaW5pdEZpZWxkc18gPSBmdW5jdGlvbihmaWVsZHMpIHsKLSAgICBm
b3IodmFyIGZpZWxkIGluIGZpZWxkcykgewotICAgICAgICBpZiAodGhpcy5oYXNPd25Qcm9wZXJ0
eShmaWVsZCkpCi0gICAgICAgICAgdGhpc1tmaWVsZF0gPSBmaWVsZHNbZmllbGRdOwotICAgIH0K
LSAgfTsKLQotICBQb2ludDJELnZhbGlkYXRlID0gZnVuY3Rpb24obWVzc2FnZVZhbGlkYXRvciwg
b2Zmc2V0KSB7Ci0gICAgdmFyIGVycjsKLSAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlk
YXRlU3RydWN0SGVhZGVyKG9mZnNldCwgY29kZWMua1N0cnVjdEhlYWRlclNpemUpOwotICAgIGlm
IChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKLSAgICAgICAgcmV0dXJu
IGVycjsKLQotICAgIHZhciBrVmVyc2lvblNpemVzID0gWwotICAgICAge3ZlcnNpb246IDAsIG51
bUJ5dGVzOiAyNH0KLSAgICBdOwotICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVT
dHJ1Y3RWZXJzaW9uKG9mZnNldCwga1ZlcnNpb25TaXplcyk7Ci0gICAgaWYgKGVyciAhPT0gdmFs
aWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQotICAgICAgICByZXR1cm4gZXJyOwotCi0KLQot
ICAgIHJldHVybiB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkU7Ci0gIH07Ci0KLSAgUG9p
bnQyRC5lbmNvZGVkU2l6ZSA9IGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgMTY7Ci0KLSAgUG9p
bnQyRC5kZWNvZGUgPSBmdW5jdGlvbihkZWNvZGVyKSB7Ci0gICAgdmFyIHBhY2tlZDsKLSAgICB2
YXIgdmFsID0gbmV3IFBvaW50MkQoKTsKLSAgICB2YXIgbnVtYmVyT2ZCeXRlcyA9IGRlY29kZXIu
cmVhZFVpbnQzMigpOwotICAgIHZhciB2ZXJzaW9uID0gZGVjb2Rlci5yZWFkVWludDMyKCk7Ci0g
ICAgdmFsLnggPSBkZWNvZGVyLmRlY29kZVN0cnVjdChjb2RlYy5Eb3VibGUpOwotICAgIHZhbC55
ID0gZGVjb2Rlci5kZWNvZGVTdHJ1Y3QoY29kZWMuRG91YmxlKTsKLSAgICByZXR1cm4gdmFsOwot
ICB9OwotCi0gIFBvaW50MkQuZW5jb2RlID0gZnVuY3Rpb24oZW5jb2RlciwgdmFsKSB7Ci0gICAg
dmFyIHBhY2tlZDsKLSAgICBlbmNvZGVyLndyaXRlVWludDMyKFBvaW50MkQuZW5jb2RlZFNpemUp
OwotICAgIGVuY29kZXIud3JpdGVVaW50MzIoMCk7Ci0gICAgZW5jb2Rlci5lbmNvZGVTdHJ1Y3Qo
Y29kZWMuRG91YmxlLCB2YWwueCk7Ci0gICAgZW5jb2Rlci5lbmNvZGVTdHJ1Y3QoY29kZWMuRG91
YmxlLCB2YWwueSk7Ci0gIH07Ci0gIGZ1bmN0aW9uIFBob3RvU2V0dGluZ3ModmFsdWVzKSB7Ci0g
ICAgdGhpcy5pbml0RGVmYXVsdHNfKCk7Ci0gICAgdGhpcy5pbml0RmllbGRzXyh2YWx1ZXMpOwot
ICB9Ci0KLQotICBQaG90b1NldHRpbmdzLnByb3RvdHlwZS5pbml0RGVmYXVsdHNfID0gZnVuY3Rp
b24oKSB7Ci0gICAgdGhpcy5oYXNXaGl0ZUJhbGFuY2VNb2RlID0gZmFsc2U7Ci0gICAgdGhpcy5o
YXNFeHBvc3VyZU1vZGUgPSBmYWxzZTsKLSAgICB0aGlzLmhhc0ZvY3VzTW9kZSA9IGZhbHNlOwot
ICAgIHRoaXMuaGFzRXhwb3N1cmVDb21wZW5zYXRpb24gPSBmYWxzZTsKLSAgICB0aGlzLmhhc0V4
cG9zdXJlVGltZSA9IGZhbHNlOwotICAgIHRoaXMuaGFzQ29sb3JUZW1wZXJhdHVyZSA9IGZhbHNl
OwotICAgIHRoaXMuaGFzSXNvID0gZmFsc2U7Ci0gICAgdGhpcy5oYXNCcmlnaHRuZXNzID0gZmFs
c2U7Ci0gICAgdGhpcy5oYXNDb250cmFzdCA9IGZhbHNlOwotICAgIHRoaXMuaGFzU2F0dXJhdGlv
biA9IGZhbHNlOwotICAgIHRoaXMuaGFzU2hhcnBuZXNzID0gZmFsc2U7Ci0gICAgdGhpcy5oYXNG
b2N1c0Rpc3RhbmNlID0gZmFsc2U7Ci0gICAgdGhpcy5oYXNQYW4gPSBmYWxzZTsKLSAgICB0aGlz
Lmhhc1RpbHQgPSBmYWxzZTsKLSAgICB0aGlzLmhhc1pvb20gPSBmYWxzZTsKLSAgICB0aGlzLmhh
c1RvcmNoID0gZmFsc2U7Ci0gICAgdGhpcy50b3JjaCA9IGZhbHNlOwotICAgIHRoaXMuaGFzRmls
bExpZ2h0TW9kZSA9IGZhbHNlOwotICAgIHRoaXMuaGFzV2lkdGggPSBmYWxzZTsKLSAgICB0aGlz
Lmhhc0hlaWdodCA9IGZhbHNlOwotICAgIHRoaXMuaGFzUmVkRXllUmVkdWN0aW9uID0gZmFsc2U7
Ci0gICAgdGhpcy5yZWRFeWVSZWR1Y3Rpb24gPSBmYWxzZTsKLSAgICB0aGlzLndoaXRlQmFsYW5j
ZU1vZGUgPSAwOwotICAgIHRoaXMuZXhwb3N1cmVNb2RlID0gMDsKLSAgICB0aGlzLmZvY3VzTW9k
ZSA9IDA7Ci0gICAgdGhpcy5wb2ludHNPZkludGVyZXN0ID0gbnVsbDsKLSAgICB0aGlzLmV4cG9z
dXJlQ29tcGVuc2F0aW9uID0gMDsKLSAgICB0aGlzLmV4cG9zdXJlVGltZSA9IDA7Ci0gICAgdGhp
cy5jb2xvclRlbXBlcmF0dXJlID0gMDsKLSAgICB0aGlzLmlzbyA9IDA7Ci0gICAgdGhpcy5icmln
aHRuZXNzID0gMDsKLSAgICB0aGlzLmNvbnRyYXN0ID0gMDsKLSAgICB0aGlzLnNhdHVyYXRpb24g
PSAwOwotICAgIHRoaXMuc2hhcnBuZXNzID0gMDsKLSAgICB0aGlzLmZvY3VzRGlzdGFuY2UgPSAw
OwotICAgIHRoaXMucGFuID0gMDsKLSAgICB0aGlzLnRpbHQgPSAwOwotICAgIHRoaXMuem9vbSA9
IDA7Ci0gICAgdGhpcy5maWxsTGlnaHRNb2RlID0gMDsKLSAgICB0aGlzLndpZHRoID0gMDsKLSAg
ICB0aGlzLmhlaWdodCA9IDA7Ci0gIH07Ci0gIFBob3RvU2V0dGluZ3MucHJvdG90eXBlLmluaXRG
aWVsZHNfID0gZnVuY3Rpb24oZmllbGRzKSB7Ci0gICAgZm9yKHZhciBmaWVsZCBpbiBmaWVsZHMp
IHsKLSAgICAgICAgaWYgKHRoaXMuaGFzT3duUHJvcGVydHkoZmllbGQpKQotICAgICAgICAgIHRo
aXNbZmllbGRdID0gZmllbGRzW2ZpZWxkXTsKLSAgICB9Ci0gIH07Ci0KLSAgUGhvdG9TZXR0aW5n
cy52YWxpZGF0ZSA9IGZ1bmN0aW9uKG1lc3NhZ2VWYWxpZGF0b3IsIG9mZnNldCkgewotICAgIHZh
ciBlcnI7Ci0gICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdEhlYWRlcihv
ZmZzZXQsIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplKTsKLSAgICBpZiAoZXJyICE9PSB2YWxpZGF0
b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCi0gICAgICAgIHJldHVybiBlcnI7Ci0KLSAgICB2YXIg
a1ZlcnNpb25TaXplcyA9IFsKLSAgICAgIHt2ZXJzaW9uOiAwLCBudW1CeXRlczogMTUyfQotICAg
IF07Ci0gICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdFZlcnNpb24ob2Zm
c2V0LCBrVmVyc2lvblNpemVzKTsKLSAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlv
bkVycm9yLk5PTkUpCi0gICAgICAgIHJldHVybiBlcnI7Ci0KLQotCi0gICAgLy8gdmFsaWRhdGUg
UGhvdG9TZXR0aW5ncy53aGl0ZUJhbGFuY2VNb2RlCi0gICAgZXJyID0gbWVzc2FnZVZhbGlkYXRv
ci52YWxpZGF0ZUVudW0ob2Zmc2V0ICsgY29kZWMua1N0cnVjdEhlYWRlclNpemUgKyA0LCBNZXRl
cmluZ01vZGUpOwotICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9O
RSkKLSAgICAgICAgcmV0dXJuIGVycjsKLQotCi0KLSAgICAvLyB2YWxpZGF0ZSBQaG90b1NldHRp
bmdzLmV4cG9zdXJlTW9kZQotICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVFbnVt
KG9mZnNldCArIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgOCwgTWV0ZXJpbmdNb2RlKTsKLSAg
ICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCi0gICAgICAgIHJl
dHVybiBlcnI7Ci0KLQotCi0gICAgLy8gdmFsaWRhdGUgUGhvdG9TZXR0aW5ncy5mb2N1c01vZGUK
LSAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlRW51bShvZmZzZXQgKyBjb2RlYy5r
U3RydWN0SGVhZGVyU2l6ZSArIDEyLCBNZXRlcmluZ01vZGUpOwotICAgIGlmIChlcnIgIT09IHZh
bGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKLSAgICAgICAgcmV0dXJuIGVycjsKLQotCi0g
ICAgLy8gdmFsaWRhdGUgUGhvdG9TZXR0aW5ncy5wb2ludHNPZkludGVyZXN0Ci0gICAgZXJyID0g
bWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZUFycmF5UG9pbnRlcihvZmZzZXQgKyBjb2RlYy5rU3Ry
dWN0SGVhZGVyU2l6ZSArIDE2LCA4LCBuZXcgY29kZWMuUG9pbnRlclRvKFBvaW50MkQpLCBmYWxz
ZSwgWzBdLCAwKTsKLSAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5P
TkUpCi0gICAgICAgIHJldHVybiBlcnI7Ci0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0K
LQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotICAgIC8vIHZhbGlkYXRlIFBob3RvU2V0dGluZ3Mu
ZmlsbExpZ2h0TW9kZQotICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVFbnVtKG9m
ZnNldCArIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgMTIwLCBGaWxsTGlnaHRNb2RlKTsKLSAg
ICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCi0gICAgICAgIHJl
dHVybiBlcnI7Ci0KLQotCi0KLQotCi0KLSAgICByZXR1cm4gdmFsaWRhdG9yLnZhbGlkYXRpb25F
cnJvci5OT05FOwotICB9OwotCi0gIFBob3RvU2V0dGluZ3MuZW5jb2RlZFNpemUgPSBjb2RlYy5r
U3RydWN0SGVhZGVyU2l6ZSArIDE0NDsKLQotICBQaG90b1NldHRpbmdzLmRlY29kZSA9IGZ1bmN0
aW9uKGRlY29kZXIpIHsKLSAgICB2YXIgcGFja2VkOwotICAgIHZhciB2YWwgPSBuZXcgUGhvdG9T
ZXR0aW5ncygpOwotICAgIHZhciBudW1iZXJPZkJ5dGVzID0gZGVjb2Rlci5yZWFkVWludDMyKCk7
Ci0gICAgdmFyIHZlcnNpb24gPSBkZWNvZGVyLnJlYWRVaW50MzIoKTsKLSAgICBwYWNrZWQgPSBk
ZWNvZGVyLnJlYWRVaW50OCgpOwotICAgIHZhbC5oYXNXaGl0ZUJhbGFuY2VNb2RlID0gKHBhY2tl
ZCA+PiAwKSAmIDEgPyB0cnVlIDogZmFsc2U7Ci0gICAgdmFsLmhhc0V4cG9zdXJlTW9kZSA9IChw
YWNrZWQgPj4gMSkgJiAxID8gdHJ1ZSA6IGZhbHNlOwotICAgIHZhbC5oYXNGb2N1c01vZGUgPSAo
cGFja2VkID4+IDIpICYgMSA/IHRydWUgOiBmYWxzZTsKLSAgICB2YWwuaGFzRXhwb3N1cmVDb21w
ZW5zYXRpb24gPSAocGFja2VkID4+IDMpICYgMSA/IHRydWUgOiBmYWxzZTsKLSAgICB2YWwuaGFz
RXhwb3N1cmVUaW1lID0gKHBhY2tlZCA+PiA0KSAmIDEgPyB0cnVlIDogZmFsc2U7Ci0gICAgdmFs
Lmhhc0NvbG9yVGVtcGVyYXR1cmUgPSAocGFja2VkID4+IDUpICYgMSA/IHRydWUgOiBmYWxzZTsK
LSAgICB2YWwuaGFzSXNvID0gKHBhY2tlZCA+PiA2KSAmIDEgPyB0cnVlIDogZmFsc2U7Ci0gICAg
dmFsLmhhc0JyaWdodG5lc3MgPSAocGFja2VkID4+IDcpICYgMSA/IHRydWUgOiBmYWxzZTsKLSAg
ICBwYWNrZWQgPSBkZWNvZGVyLnJlYWRVaW50OCgpOwotICAgIHZhbC5oYXNDb250cmFzdCA9IChw
YWNrZWQgPj4gMCkgJiAxID8gdHJ1ZSA6IGZhbHNlOwotICAgIHZhbC5oYXNTYXR1cmF0aW9uID0g
KHBhY2tlZCA+PiAxKSAmIDEgPyB0cnVlIDogZmFsc2U7Ci0gICAgdmFsLmhhc1NoYXJwbmVzcyA9
IChwYWNrZWQgPj4gMikgJiAxID8gdHJ1ZSA6IGZhbHNlOwotICAgIHZhbC5oYXNGb2N1c0Rpc3Rh
bmNlID0gKHBhY2tlZCA+PiAzKSAmIDEgPyB0cnVlIDogZmFsc2U7Ci0gICAgdmFsLmhhc1BhbiA9
IChwYWNrZWQgPj4gNCkgJiAxID8gdHJ1ZSA6IGZhbHNlOwotICAgIHZhbC5oYXNUaWx0ID0gKHBh
Y2tlZCA+PiA1KSAmIDEgPyB0cnVlIDogZmFsc2U7Ci0gICAgdmFsLmhhc1pvb20gPSAocGFja2Vk
ID4+IDYpICYgMSA/IHRydWUgOiBmYWxzZTsKLSAgICB2YWwuaGFzVG9yY2ggPSAocGFja2VkID4+
IDcpICYgMSA/IHRydWUgOiBmYWxzZTsKLSAgICBwYWNrZWQgPSBkZWNvZGVyLnJlYWRVaW50OCgp
OwotICAgIHZhbC50b3JjaCA9IChwYWNrZWQgPj4gMCkgJiAxID8gdHJ1ZSA6IGZhbHNlOwotICAg
IHZhbC5oYXNGaWxsTGlnaHRNb2RlID0gKHBhY2tlZCA+PiAxKSAmIDEgPyB0cnVlIDogZmFsc2U7
Ci0gICAgdmFsLmhhc1dpZHRoID0gKHBhY2tlZCA+PiAyKSAmIDEgPyB0cnVlIDogZmFsc2U7Ci0g
ICAgdmFsLmhhc0hlaWdodCA9IChwYWNrZWQgPj4gMykgJiAxID8gdHJ1ZSA6IGZhbHNlOwotICAg
IHZhbC5oYXNSZWRFeWVSZWR1Y3Rpb24gPSAocGFja2VkID4+IDQpICYgMSA/IHRydWUgOiBmYWxz
ZTsKLSAgICB2YWwucmVkRXllUmVkdWN0aW9uID0gKHBhY2tlZCA+PiA1KSAmIDEgPyB0cnVlIDog
ZmFsc2U7Ci0gICAgZGVjb2Rlci5za2lwKDEpOwotICAgIHZhbC53aGl0ZUJhbGFuY2VNb2RlID0g
ZGVjb2Rlci5kZWNvZGVTdHJ1Y3QoY29kZWMuSW50MzIpOwotICAgIHZhbC5leHBvc3VyZU1vZGUg
PSBkZWNvZGVyLmRlY29kZVN0cnVjdChjb2RlYy5JbnQzMik7Ci0gICAgdmFsLmZvY3VzTW9kZSA9
IGRlY29kZXIuZGVjb2RlU3RydWN0KGNvZGVjLkludDMyKTsKLSAgICB2YWwucG9pbnRzT2ZJbnRl
cmVzdCA9IGRlY29kZXIuZGVjb2RlQXJyYXlQb2ludGVyKG5ldyBjb2RlYy5Qb2ludGVyVG8oUG9p
bnQyRCkpOwotICAgIHZhbC5leHBvc3VyZUNvbXBlbnNhdGlvbiA9IGRlY29kZXIuZGVjb2RlU3Ry
dWN0KGNvZGVjLkRvdWJsZSk7Ci0gICAgdmFsLmV4cG9zdXJlVGltZSA9IGRlY29kZXIuZGVjb2Rl
U3RydWN0KGNvZGVjLkRvdWJsZSk7Ci0gICAgdmFsLmNvbG9yVGVtcGVyYXR1cmUgPSBkZWNvZGVy
LmRlY29kZVN0cnVjdChjb2RlYy5Eb3VibGUpOwotICAgIHZhbC5pc28gPSBkZWNvZGVyLmRlY29k
ZVN0cnVjdChjb2RlYy5Eb3VibGUpOwotICAgIHZhbC5icmlnaHRuZXNzID0gZGVjb2Rlci5kZWNv
ZGVTdHJ1Y3QoY29kZWMuRG91YmxlKTsKLSAgICB2YWwuY29udHJhc3QgPSBkZWNvZGVyLmRlY29k
ZVN0cnVjdChjb2RlYy5Eb3VibGUpOwotICAgIHZhbC5zYXR1cmF0aW9uID0gZGVjb2Rlci5kZWNv
ZGVTdHJ1Y3QoY29kZWMuRG91YmxlKTsKLSAgICB2YWwuc2hhcnBuZXNzID0gZGVjb2Rlci5kZWNv
ZGVTdHJ1Y3QoY29kZWMuRG91YmxlKTsKLSAgICB2YWwuZm9jdXNEaXN0YW5jZSA9IGRlY29kZXIu
ZGVjb2RlU3RydWN0KGNvZGVjLkRvdWJsZSk7Ci0gICAgdmFsLnBhbiA9IGRlY29kZXIuZGVjb2Rl
U3RydWN0KGNvZGVjLkRvdWJsZSk7Ci0gICAgdmFsLnRpbHQgPSBkZWNvZGVyLmRlY29kZVN0cnVj
dChjb2RlYy5Eb3VibGUpOwotICAgIHZhbC56b29tID0gZGVjb2Rlci5kZWNvZGVTdHJ1Y3QoY29k
ZWMuRG91YmxlKTsKLSAgICB2YWwuZmlsbExpZ2h0TW9kZSA9IGRlY29kZXIuZGVjb2RlU3RydWN0
KGNvZGVjLkludDMyKTsKLSAgICBkZWNvZGVyLnNraXAoMSk7Ci0gICAgZGVjb2Rlci5za2lwKDEp
OwotICAgIGRlY29kZXIuc2tpcCgxKTsKLSAgICBkZWNvZGVyLnNraXAoMSk7Ci0gICAgdmFsLndp
ZHRoID0gZGVjb2Rlci5kZWNvZGVTdHJ1Y3QoY29kZWMuRG91YmxlKTsKLSAgICB2YWwuaGVpZ2h0
ID0gZGVjb2Rlci5kZWNvZGVTdHJ1Y3QoY29kZWMuRG91YmxlKTsKLSAgICByZXR1cm4gdmFsOwot
ICB9OwotCi0gIFBob3RvU2V0dGluZ3MuZW5jb2RlID0gZnVuY3Rpb24oZW5jb2RlciwgdmFsKSB7
Ci0gICAgdmFyIHBhY2tlZDsKLSAgICBlbmNvZGVyLndyaXRlVWludDMyKFBob3RvU2V0dGluZ3Mu
ZW5jb2RlZFNpemUpOwotICAgIGVuY29kZXIud3JpdGVVaW50MzIoMCk7Ci0gICAgcGFja2VkID0g
MDsKLSAgICBwYWNrZWQgfD0gKHZhbC5oYXNXaGl0ZUJhbGFuY2VNb2RlICYgMSkgPDwgMAotICAg
IHBhY2tlZCB8PSAodmFsLmhhc0V4cG9zdXJlTW9kZSAmIDEpIDw8IDEKLSAgICBwYWNrZWQgfD0g
KHZhbC5oYXNGb2N1c01vZGUgJiAxKSA8PCAyCi0gICAgcGFja2VkIHw9ICh2YWwuaGFzRXhwb3N1
cmVDb21wZW5zYXRpb24gJiAxKSA8PCAzCi0gICAgcGFja2VkIHw9ICh2YWwuaGFzRXhwb3N1cmVU
aW1lICYgMSkgPDwgNAotICAgIHBhY2tlZCB8PSAodmFsLmhhc0NvbG9yVGVtcGVyYXR1cmUgJiAx
KSA8PCA1Ci0gICAgcGFja2VkIHw9ICh2YWwuaGFzSXNvICYgMSkgPDwgNgotICAgIHBhY2tlZCB8
PSAodmFsLmhhc0JyaWdodG5lc3MgJiAxKSA8PCA3Ci0gICAgZW5jb2Rlci53cml0ZVVpbnQ4KHBh
Y2tlZCk7Ci0gICAgcGFja2VkID0gMDsKLSAgICBwYWNrZWQgfD0gKHZhbC5oYXNDb250cmFzdCAm
IDEpIDw8IDAKLSAgICBwYWNrZWQgfD0gKHZhbC5oYXNTYXR1cmF0aW9uICYgMSkgPDwgMQotICAg
IHBhY2tlZCB8PSAodmFsLmhhc1NoYXJwbmVzcyAmIDEpIDw8IDIKLSAgICBwYWNrZWQgfD0gKHZh
bC5oYXNGb2N1c0Rpc3RhbmNlICYgMSkgPDwgMwotICAgIHBhY2tlZCB8PSAodmFsLmhhc1BhbiAm
IDEpIDw8IDQKLSAgICBwYWNrZWQgfD0gKHZhbC5oYXNUaWx0ICYgMSkgPDwgNQotICAgIHBhY2tl
ZCB8PSAodmFsLmhhc1pvb20gJiAxKSA8PCA2Ci0gICAgcGFja2VkIHw9ICh2YWwuaGFzVG9yY2gg
JiAxKSA8PCA3Ci0gICAgZW5jb2Rlci53cml0ZVVpbnQ4KHBhY2tlZCk7Ci0gICAgcGFja2VkID0g
MDsKLSAgICBwYWNrZWQgfD0gKHZhbC50b3JjaCAmIDEpIDw8IDAKLSAgICBwYWNrZWQgfD0gKHZh
bC5oYXNGaWxsTGlnaHRNb2RlICYgMSkgPDwgMQotICAgIHBhY2tlZCB8PSAodmFsLmhhc1dpZHRo
ICYgMSkgPDwgMgotICAgIHBhY2tlZCB8PSAodmFsLmhhc0hlaWdodCAmIDEpIDw8IDMKLSAgICBw
YWNrZWQgfD0gKHZhbC5oYXNSZWRFeWVSZWR1Y3Rpb24gJiAxKSA8PCA0Ci0gICAgcGFja2VkIHw9
ICh2YWwucmVkRXllUmVkdWN0aW9uICYgMSkgPDwgNQotICAgIGVuY29kZXIud3JpdGVVaW50OChw
YWNrZWQpOwotICAgIGVuY29kZXIuc2tpcCgxKTsKLSAgICBlbmNvZGVyLmVuY29kZVN0cnVjdChj
b2RlYy5JbnQzMiwgdmFsLndoaXRlQmFsYW5jZU1vZGUpOwotICAgIGVuY29kZXIuZW5jb2RlU3Ry
dWN0KGNvZGVjLkludDMyLCB2YWwuZXhwb3N1cmVNb2RlKTsKLSAgICBlbmNvZGVyLmVuY29kZVN0
cnVjdChjb2RlYy5JbnQzMiwgdmFsLmZvY3VzTW9kZSk7Ci0gICAgZW5jb2Rlci5lbmNvZGVBcnJh
eVBvaW50ZXIobmV3IGNvZGVjLlBvaW50ZXJUbyhQb2ludDJEKSwgdmFsLnBvaW50c09mSW50ZXJl
c3QpOwotICAgIGVuY29kZXIuZW5jb2RlU3RydWN0KGNvZGVjLkRvdWJsZSwgdmFsLmV4cG9zdXJl
Q29tcGVuc2F0aW9uKTsKLSAgICBlbmNvZGVyLmVuY29kZVN0cnVjdChjb2RlYy5Eb3VibGUsIHZh
bC5leHBvc3VyZVRpbWUpOwotICAgIGVuY29kZXIuZW5jb2RlU3RydWN0KGNvZGVjLkRvdWJsZSwg
dmFsLmNvbG9yVGVtcGVyYXR1cmUpOwotICAgIGVuY29kZXIuZW5jb2RlU3RydWN0KGNvZGVjLkRv
dWJsZSwgdmFsLmlzbyk7Ci0gICAgZW5jb2Rlci5lbmNvZGVTdHJ1Y3QoY29kZWMuRG91YmxlLCB2
YWwuYnJpZ2h0bmVzcyk7Ci0gICAgZW5jb2Rlci5lbmNvZGVTdHJ1Y3QoY29kZWMuRG91YmxlLCB2
YWwuY29udHJhc3QpOwotICAgIGVuY29kZXIuZW5jb2RlU3RydWN0KGNvZGVjLkRvdWJsZSwgdmFs
LnNhdHVyYXRpb24pOwotICAgIGVuY29kZXIuZW5jb2RlU3RydWN0KGNvZGVjLkRvdWJsZSwgdmFs
LnNoYXJwbmVzcyk7Ci0gICAgZW5jb2Rlci5lbmNvZGVTdHJ1Y3QoY29kZWMuRG91YmxlLCB2YWwu
Zm9jdXNEaXN0YW5jZSk7Ci0gICAgZW5jb2Rlci5lbmNvZGVTdHJ1Y3QoY29kZWMuRG91YmxlLCB2
YWwucGFuKTsKLSAgICBlbmNvZGVyLmVuY29kZVN0cnVjdChjb2RlYy5Eb3VibGUsIHZhbC50aWx0
KTsKLSAgICBlbmNvZGVyLmVuY29kZVN0cnVjdChjb2RlYy5Eb3VibGUsIHZhbC56b29tKTsKLSAg
ICBlbmNvZGVyLmVuY29kZVN0cnVjdChjb2RlYy5JbnQzMiwgdmFsLmZpbGxMaWdodE1vZGUpOwot
ICAgIGVuY29kZXIuc2tpcCgxKTsKLSAgICBlbmNvZGVyLnNraXAoMSk7Ci0gICAgZW5jb2Rlci5z
a2lwKDEpOwotICAgIGVuY29kZXIuc2tpcCgxKTsKLSAgICBlbmNvZGVyLmVuY29kZVN0cnVjdChj
b2RlYy5Eb3VibGUsIHZhbC53aWR0aCk7Ci0gICAgZW5jb2Rlci5lbmNvZGVTdHJ1Y3QoY29kZWMu
RG91YmxlLCB2YWwuaGVpZ2h0KTsKLSAgfTsKLSAgZnVuY3Rpb24gQmxvYih2YWx1ZXMpIHsKLSAg
ICB0aGlzLmluaXREZWZhdWx0c18oKTsKLSAgICB0aGlzLmluaXRGaWVsZHNfKHZhbHVlcyk7Ci0g
IH0KLQotCi0gIEJsb2IucHJvdG90eXBlLmluaXREZWZhdWx0c18gPSBmdW5jdGlvbigpIHsKLSAg
ICB0aGlzLm1pbWVUeXBlID0gbnVsbDsKLSAgICB0aGlzLmRhdGEgPSBudWxsOwotICB9OwotICBC
bG9iLnByb3RvdHlwZS5pbml0RmllbGRzXyA9IGZ1bmN0aW9uKGZpZWxkcykgewotICAgIGZvcih2
YXIgZmllbGQgaW4gZmllbGRzKSB7Ci0gICAgICAgIGlmICh0aGlzLmhhc093blByb3BlcnR5KGZp
ZWxkKSkKLSAgICAgICAgICB0aGlzW2ZpZWxkXSA9IGZpZWxkc1tmaWVsZF07Ci0gICAgfQotICB9
OwotCi0gIEJsb2IudmFsaWRhdGUgPSBmdW5jdGlvbihtZXNzYWdlVmFsaWRhdG9yLCBvZmZzZXQp
IHsKLSAgICB2YXIgZXJyOwotICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1
Y3RIZWFkZXIob2Zmc2V0LCBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSk7Ci0gICAgaWYgKGVyciAh
PT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQotICAgICAgICByZXR1cm4gZXJyOwot
Ci0gICAgdmFyIGtWZXJzaW9uU2l6ZXMgPSBbCi0gICAgICB7dmVyc2lvbjogMCwgbnVtQnl0ZXM6
IDI0fQotICAgIF07Ci0gICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdFZl
cnNpb24ob2Zmc2V0LCBrVmVyc2lvblNpemVzKTsKLSAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3Iu
dmFsaWRhdGlvbkVycm9yLk5PTkUpCi0gICAgICAgIHJldHVybiBlcnI7Ci0KLQotICAgIC8vIHZh
bGlkYXRlIEJsb2IubWltZVR5cGUKLSAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRl
U3RyaW5nUG9pbnRlcihvZmZzZXQgKyBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDAsIGZhbHNl
KQotICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKLSAgICAg
ICAgcmV0dXJuIGVycjsKLQotCi0gICAgLy8gdmFsaWRhdGUgQmxvYi5kYXRhCi0gICAgZXJyID0g
bWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZUFycmF5UG9pbnRlcihvZmZzZXQgKyBjb2RlYy5rU3Ry
dWN0SGVhZGVyU2l6ZSArIDgsIDEsIGNvZGVjLlVpbnQ4LCBmYWxzZSwgWzBdLCAwKTsKLSAgICBp
ZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCi0gICAgICAgIHJldHVy
biBlcnI7Ci0KLSAgICByZXR1cm4gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FOwotICB9
OwotCi0gIEJsb2IuZW5jb2RlZFNpemUgPSBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDE2Owot
Ci0gIEJsb2IuZGVjb2RlID0gZnVuY3Rpb24oZGVjb2RlcikgewotICAgIHZhciBwYWNrZWQ7Ci0g
ICAgdmFyIHZhbCA9IG5ldyBCbG9iKCk7Ci0gICAgdmFyIG51bWJlck9mQnl0ZXMgPSBkZWNvZGVy
LnJlYWRVaW50MzIoKTsKLSAgICB2YXIgdmVyc2lvbiA9IGRlY29kZXIucmVhZFVpbnQzMigpOwot
ICAgIHZhbC5taW1lVHlwZSA9IGRlY29kZXIuZGVjb2RlU3RydWN0KGNvZGVjLlN0cmluZyk7Ci0g
ICAgdmFsLmRhdGEgPSBkZWNvZGVyLmRlY29kZUFycmF5UG9pbnRlcihjb2RlYy5VaW50OCk7Ci0g
ICAgcmV0dXJuIHZhbDsKLSAgfTsKLQotICBCbG9iLmVuY29kZSA9IGZ1bmN0aW9uKGVuY29kZXIs
IHZhbCkgewotICAgIHZhciBwYWNrZWQ7Ci0gICAgZW5jb2Rlci53cml0ZVVpbnQzMihCbG9iLmVu
Y29kZWRTaXplKTsKLSAgICBlbmNvZGVyLndyaXRlVWludDMyKDApOwotICAgIGVuY29kZXIuZW5j
b2RlU3RydWN0KGNvZGVjLlN0cmluZywgdmFsLm1pbWVUeXBlKTsKLSAgICBlbmNvZGVyLmVuY29k
ZUFycmF5UG9pbnRlcihjb2RlYy5VaW50OCwgdmFsLmRhdGEpOwotICB9OwotICBmdW5jdGlvbiBJ
bWFnZUNhcHR1cmVfR2V0UGhvdG9TdGF0ZV9QYXJhbXModmFsdWVzKSB7Ci0gICAgdGhpcy5pbml0
RGVmYXVsdHNfKCk7Ci0gICAgdGhpcy5pbml0RmllbGRzXyh2YWx1ZXMpOwotICB9Ci0KLQotICBJ
bWFnZUNhcHR1cmVfR2V0UGhvdG9TdGF0ZV9QYXJhbXMucHJvdG90eXBlLmluaXREZWZhdWx0c18g
PSBmdW5jdGlvbigpIHsKLSAgICB0aGlzLnNvdXJjZUlkID0gbnVsbDsKLSAgfTsKLSAgSW1hZ2VD
YXB0dXJlX0dldFBob3RvU3RhdGVfUGFyYW1zLnByb3RvdHlwZS5pbml0RmllbGRzXyA9IGZ1bmN0
aW9uKGZpZWxkcykgewotICAgIGZvcih2YXIgZmllbGQgaW4gZmllbGRzKSB7Ci0gICAgICAgIGlm
ICh0aGlzLmhhc093blByb3BlcnR5KGZpZWxkKSkKLSAgICAgICAgICB0aGlzW2ZpZWxkXSA9IGZp
ZWxkc1tmaWVsZF07Ci0gICAgfQotICB9OwotCi0gIEltYWdlQ2FwdHVyZV9HZXRQaG90b1N0YXRl
X1BhcmFtcy52YWxpZGF0ZSA9IGZ1bmN0aW9uKG1lc3NhZ2VWYWxpZGF0b3IsIG9mZnNldCkgewot
ICAgIHZhciBlcnI7Ci0gICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdEhl
YWRlcihvZmZzZXQsIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplKTsKLSAgICBpZiAoZXJyICE9PSB2
YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCi0gICAgICAgIHJldHVybiBlcnI7Ci0KLSAg
ICB2YXIga1ZlcnNpb25TaXplcyA9IFsKLSAgICAgIHt2ZXJzaW9uOiAwLCBudW1CeXRlczogMTZ9
Ci0gICAgXTsKLSAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0VmVyc2lv
bihvZmZzZXQsIGtWZXJzaW9uU2l6ZXMpOwotICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxp
ZGF0aW9uRXJyb3IuTk9ORSkKLSAgICAgICAgcmV0dXJuIGVycjsKLQotCi0gICAgLy8gdmFsaWRh
dGUgSW1hZ2VDYXB0dXJlX0dldFBob3RvU3RhdGVfUGFyYW1zLnNvdXJjZUlkCi0gICAgZXJyID0g
bWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cmluZ1BvaW50ZXIob2Zmc2V0ICsgY29kZWMua1N0
cnVjdEhlYWRlclNpemUgKyAwLCBmYWxzZSkKLSAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFs
aWRhdGlvbkVycm9yLk5PTkUpCi0gICAgICAgIHJldHVybiBlcnI7Ci0KLSAgICByZXR1cm4gdmFs
aWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FOwotICB9OwotCi0gIEltYWdlQ2FwdHVyZV9HZXRQ
aG90b1N0YXRlX1BhcmFtcy5lbmNvZGVkU2l6ZSA9IGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsg
ODsKLQotICBJbWFnZUNhcHR1cmVfR2V0UGhvdG9TdGF0ZV9QYXJhbXMuZGVjb2RlID0gZnVuY3Rp
b24oZGVjb2RlcikgewotICAgIHZhciBwYWNrZWQ7Ci0gICAgdmFyIHZhbCA9IG5ldyBJbWFnZUNh
cHR1cmVfR2V0UGhvdG9TdGF0ZV9QYXJhbXMoKTsKLSAgICB2YXIgbnVtYmVyT2ZCeXRlcyA9IGRl
Y29kZXIucmVhZFVpbnQzMigpOwotICAgIHZhciB2ZXJzaW9uID0gZGVjb2Rlci5yZWFkVWludDMy
KCk7Ci0gICAgdmFsLnNvdXJjZUlkID0gZGVjb2Rlci5kZWNvZGVTdHJ1Y3QoY29kZWMuU3RyaW5n
KTsKLSAgICByZXR1cm4gdmFsOwotICB9OwotCi0gIEltYWdlQ2FwdHVyZV9HZXRQaG90b1N0YXRl
X1BhcmFtcy5lbmNvZGUgPSBmdW5jdGlvbihlbmNvZGVyLCB2YWwpIHsKLSAgICB2YXIgcGFja2Vk
OwotICAgIGVuY29kZXIud3JpdGVVaW50MzIoSW1hZ2VDYXB0dXJlX0dldFBob3RvU3RhdGVfUGFy
YW1zLmVuY29kZWRTaXplKTsKLSAgICBlbmNvZGVyLndyaXRlVWludDMyKDApOwotICAgIGVuY29k
ZXIuZW5jb2RlU3RydWN0KGNvZGVjLlN0cmluZywgdmFsLnNvdXJjZUlkKTsKLSAgfTsKLSAgZnVu
Y3Rpb24gSW1hZ2VDYXB0dXJlX0dldFBob3RvU3RhdGVfUmVzcG9uc2VQYXJhbXModmFsdWVzKSB7
Ci0gICAgdGhpcy5pbml0RGVmYXVsdHNfKCk7Ci0gICAgdGhpcy5pbml0RmllbGRzXyh2YWx1ZXMp
OwotICB9Ci0KLQotICBJbWFnZUNhcHR1cmVfR2V0UGhvdG9TdGF0ZV9SZXNwb25zZVBhcmFtcy5w
cm90b3R5cGUuaW5pdERlZmF1bHRzXyA9IGZ1bmN0aW9uKCkgewotICAgIHRoaXMuc3RhdGUgPSBu
dWxsOwotICB9OwotICBJbWFnZUNhcHR1cmVfR2V0UGhvdG9TdGF0ZV9SZXNwb25zZVBhcmFtcy5w
cm90b3R5cGUuaW5pdEZpZWxkc18gPSBmdW5jdGlvbihmaWVsZHMpIHsKLSAgICBmb3IodmFyIGZp
ZWxkIGluIGZpZWxkcykgewotICAgICAgICBpZiAodGhpcy5oYXNPd25Qcm9wZXJ0eShmaWVsZCkp
Ci0gICAgICAgICAgdGhpc1tmaWVsZF0gPSBmaWVsZHNbZmllbGRdOwotICAgIH0KLSAgfTsKLQot
ICBJbWFnZUNhcHR1cmVfR2V0UGhvdG9TdGF0ZV9SZXNwb25zZVBhcmFtcy52YWxpZGF0ZSA9IGZ1
bmN0aW9uKG1lc3NhZ2VWYWxpZGF0b3IsIG9mZnNldCkgewotICAgIHZhciBlcnI7Ci0gICAgZXJy
ID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdEhlYWRlcihvZmZzZXQsIGNvZGVjLmtT
dHJ1Y3RIZWFkZXJTaXplKTsKLSAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVy
cm9yLk5PTkUpCi0gICAgICAgIHJldHVybiBlcnI7Ci0KLSAgICB2YXIga1ZlcnNpb25TaXplcyA9
IFsKLSAgICAgIHt2ZXJzaW9uOiAwLCBudW1CeXRlczogMTZ9Ci0gICAgXTsKLSAgICBlcnIgPSBt
ZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0VmVyc2lvbihvZmZzZXQsIGtWZXJzaW9uU2l6
ZXMpOwotICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKLSAg
ICAgICAgcmV0dXJuIGVycjsKLQotCi0gICAgLy8gdmFsaWRhdGUgSW1hZ2VDYXB0dXJlX0dldFBo
b3RvU3RhdGVfUmVzcG9uc2VQYXJhbXMuc3RhdGUKLSAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9y
LnZhbGlkYXRlU3RydWN0UG9pbnRlcihvZmZzZXQgKyBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSAr
IDAsIFBob3RvU3RhdGUsIGZhbHNlKTsKLSAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRh
dGlvbkVycm9yLk5PTkUpCi0gICAgICAgIHJldHVybiBlcnI7Ci0KLSAgICByZXR1cm4gdmFsaWRh
dG9yLnZhbGlkYXRpb25FcnJvci5OT05FOwotICB9OwotCi0gIEltYWdlQ2FwdHVyZV9HZXRQaG90
b1N0YXRlX1Jlc3BvbnNlUGFyYW1zLmVuY29kZWRTaXplID0gY29kZWMua1N0cnVjdEhlYWRlclNp
emUgKyA4OwotCi0gIEltYWdlQ2FwdHVyZV9HZXRQaG90b1N0YXRlX1Jlc3BvbnNlUGFyYW1zLmRl
Y29kZSA9IGZ1bmN0aW9uKGRlY29kZXIpIHsKLSAgICB2YXIgcGFja2VkOwotICAgIHZhciB2YWwg
PSBuZXcgSW1hZ2VDYXB0dXJlX0dldFBob3RvU3RhdGVfUmVzcG9uc2VQYXJhbXMoKTsKLSAgICB2
YXIgbnVtYmVyT2ZCeXRlcyA9IGRlY29kZXIucmVhZFVpbnQzMigpOwotICAgIHZhciB2ZXJzaW9u
ID0gZGVjb2Rlci5yZWFkVWludDMyKCk7Ci0gICAgdmFsLnN0YXRlID0gZGVjb2Rlci5kZWNvZGVT
dHJ1Y3RQb2ludGVyKFBob3RvU3RhdGUpOwotICAgIHJldHVybiB2YWw7Ci0gIH07Ci0KLSAgSW1h
Z2VDYXB0dXJlX0dldFBob3RvU3RhdGVfUmVzcG9uc2VQYXJhbXMuZW5jb2RlID0gZnVuY3Rpb24o
ZW5jb2RlciwgdmFsKSB7Ci0gICAgdmFyIHBhY2tlZDsKLSAgICBlbmNvZGVyLndyaXRlVWludDMy
KEltYWdlQ2FwdHVyZV9HZXRQaG90b1N0YXRlX1Jlc3BvbnNlUGFyYW1zLmVuY29kZWRTaXplKTsK
LSAgICBlbmNvZGVyLndyaXRlVWludDMyKDApOwotICAgIGVuY29kZXIuZW5jb2RlU3RydWN0UG9p
bnRlcihQaG90b1N0YXRlLCB2YWwuc3RhdGUpOwotICB9OwotICBmdW5jdGlvbiBJbWFnZUNhcHR1
cmVfU2V0T3B0aW9uc19QYXJhbXModmFsdWVzKSB7Ci0gICAgdGhpcy5pbml0RGVmYXVsdHNfKCk7
Ci0gICAgdGhpcy5pbml0RmllbGRzXyh2YWx1ZXMpOwotICB9Ci0KLQotICBJbWFnZUNhcHR1cmVf
U2V0T3B0aW9uc19QYXJhbXMucHJvdG90eXBlLmluaXREZWZhdWx0c18gPSBmdW5jdGlvbigpIHsK
LSAgICB0aGlzLnNvdXJjZUlkID0gbnVsbDsKLSAgICB0aGlzLnNldHRpbmdzID0gbnVsbDsKLSAg
fTsKLSAgSW1hZ2VDYXB0dXJlX1NldE9wdGlvbnNfUGFyYW1zLnByb3RvdHlwZS5pbml0RmllbGRz
XyA9IGZ1bmN0aW9uKGZpZWxkcykgewotICAgIGZvcih2YXIgZmllbGQgaW4gZmllbGRzKSB7Ci0g
ICAgICAgIGlmICh0aGlzLmhhc093blByb3BlcnR5KGZpZWxkKSkKLSAgICAgICAgICB0aGlzW2Zp
ZWxkXSA9IGZpZWxkc1tmaWVsZF07Ci0gICAgfQotICB9OwotCi0gIEltYWdlQ2FwdHVyZV9TZXRP
cHRpb25zX1BhcmFtcy52YWxpZGF0ZSA9IGZ1bmN0aW9uKG1lc3NhZ2VWYWxpZGF0b3IsIG9mZnNl
dCkgewotICAgIHZhciBlcnI7Ci0gICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0
cnVjdEhlYWRlcihvZmZzZXQsIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplKTsKLSAgICBpZiAoZXJy
ICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCi0gICAgICAgIHJldHVybiBlcnI7
Ci0KLSAgICB2YXIga1ZlcnNpb25TaXplcyA9IFsKLSAgICAgIHt2ZXJzaW9uOiAwLCBudW1CeXRl
czogMjR9Ci0gICAgXTsKLSAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0
VmVyc2lvbihvZmZzZXQsIGtWZXJzaW9uU2l6ZXMpOwotICAgIGlmIChlcnIgIT09IHZhbGlkYXRv
ci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKLSAgICAgICAgcmV0dXJuIGVycjsKLQotCi0gICAgLy8g
dmFsaWRhdGUgSW1hZ2VDYXB0dXJlX1NldE9wdGlvbnNfUGFyYW1zLnNvdXJjZUlkCi0gICAgZXJy
ID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cmluZ1BvaW50ZXIob2Zmc2V0ICsgY29kZWMu
a1N0cnVjdEhlYWRlclNpemUgKyAwLCBmYWxzZSkKLSAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3Iu
dmFsaWRhdGlvbkVycm9yLk5PTkUpCi0gICAgICAgIHJldHVybiBlcnI7Ci0KLQotICAgIC8vIHZh
bGlkYXRlIEltYWdlQ2FwdHVyZV9TZXRPcHRpb25zX1BhcmFtcy5zZXR0aW5ncwotICAgIGVyciA9
IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RQb2ludGVyKG9mZnNldCArIGNvZGVjLmtT
dHJ1Y3RIZWFkZXJTaXplICsgOCwgUGhvdG9TZXR0aW5ncywgZmFsc2UpOwotICAgIGlmIChlcnIg
IT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKLSAgICAgICAgcmV0dXJuIGVycjsK
LQotICAgIHJldHVybiB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkU7Ci0gIH07Ci0KLSAg
SW1hZ2VDYXB0dXJlX1NldE9wdGlvbnNfUGFyYW1zLmVuY29kZWRTaXplID0gY29kZWMua1N0cnVj
dEhlYWRlclNpemUgKyAxNjsKLQotICBJbWFnZUNhcHR1cmVfU2V0T3B0aW9uc19QYXJhbXMuZGVj
b2RlID0gZnVuY3Rpb24oZGVjb2RlcikgewotICAgIHZhciBwYWNrZWQ7Ci0gICAgdmFyIHZhbCA9
IG5ldyBJbWFnZUNhcHR1cmVfU2V0T3B0aW9uc19QYXJhbXMoKTsKLSAgICB2YXIgbnVtYmVyT2ZC
eXRlcyA9IGRlY29kZXIucmVhZFVpbnQzMigpOwotICAgIHZhciB2ZXJzaW9uID0gZGVjb2Rlci5y
ZWFkVWludDMyKCk7Ci0gICAgdmFsLnNvdXJjZUlkID0gZGVjb2Rlci5kZWNvZGVTdHJ1Y3QoY29k
ZWMuU3RyaW5nKTsKLSAgICB2YWwuc2V0dGluZ3MgPSBkZWNvZGVyLmRlY29kZVN0cnVjdFBvaW50
ZXIoUGhvdG9TZXR0aW5ncyk7Ci0gICAgcmV0dXJuIHZhbDsKLSAgfTsKLQotICBJbWFnZUNhcHR1
cmVfU2V0T3B0aW9uc19QYXJhbXMuZW5jb2RlID0gZnVuY3Rpb24oZW5jb2RlciwgdmFsKSB7Ci0g
ICAgdmFyIHBhY2tlZDsKLSAgICBlbmNvZGVyLndyaXRlVWludDMyKEltYWdlQ2FwdHVyZV9TZXRP
cHRpb25zX1BhcmFtcy5lbmNvZGVkU2l6ZSk7Ci0gICAgZW5jb2Rlci53cml0ZVVpbnQzMigwKTsK
LSAgICBlbmNvZGVyLmVuY29kZVN0cnVjdChjb2RlYy5TdHJpbmcsIHZhbC5zb3VyY2VJZCk7Ci0g
ICAgZW5jb2Rlci5lbmNvZGVTdHJ1Y3RQb2ludGVyKFBob3RvU2V0dGluZ3MsIHZhbC5zZXR0aW5n
cyk7Ci0gIH07Ci0gIGZ1bmN0aW9uIEltYWdlQ2FwdHVyZV9TZXRPcHRpb25zX1Jlc3BvbnNlUGFy
YW1zKHZhbHVlcykgewotICAgIHRoaXMuaW5pdERlZmF1bHRzXygpOwotICAgIHRoaXMuaW5pdEZp
ZWxkc18odmFsdWVzKTsKLSAgfQotCi0KLSAgSW1hZ2VDYXB0dXJlX1NldE9wdGlvbnNfUmVzcG9u
c2VQYXJhbXMucHJvdG90eXBlLmluaXREZWZhdWx0c18gPSBmdW5jdGlvbigpIHsKLSAgICB0aGlz
LnN1Y2Nlc3MgPSBmYWxzZTsKLSAgfTsKLSAgSW1hZ2VDYXB0dXJlX1NldE9wdGlvbnNfUmVzcG9u
c2VQYXJhbXMucHJvdG90eXBlLmluaXRGaWVsZHNfID0gZnVuY3Rpb24oZmllbGRzKSB7Ci0gICAg
Zm9yKHZhciBmaWVsZCBpbiBmaWVsZHMpIHsKLSAgICAgICAgaWYgKHRoaXMuaGFzT3duUHJvcGVy
dHkoZmllbGQpKQotICAgICAgICAgIHRoaXNbZmllbGRdID0gZmllbGRzW2ZpZWxkXTsKLSAgICB9
Ci0gIH07Ci0KLSAgSW1hZ2VDYXB0dXJlX1NldE9wdGlvbnNfUmVzcG9uc2VQYXJhbXMudmFsaWRh
dGUgPSBmdW5jdGlvbihtZXNzYWdlVmFsaWRhdG9yLCBvZmZzZXQpIHsKLSAgICB2YXIgZXJyOwot
ICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RIZWFkZXIob2Zmc2V0LCBj
b2RlYy5rU3RydWN0SGVhZGVyU2l6ZSk7Ci0gICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlk
YXRpb25FcnJvci5OT05FKQotICAgICAgICByZXR1cm4gZXJyOwotCi0gICAgdmFyIGtWZXJzaW9u
U2l6ZXMgPSBbCi0gICAgICB7dmVyc2lvbjogMCwgbnVtQnl0ZXM6IDE2fQotICAgIF07Ci0gICAg
ZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdFZlcnNpb24ob2Zmc2V0LCBrVmVy
c2lvblNpemVzKTsKLSAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5P
TkUpCi0gICAgICAgIHJldHVybiBlcnI7Ci0KLQotICAgIHJldHVybiB2YWxpZGF0b3IudmFsaWRh
dGlvbkVycm9yLk5PTkU7Ci0gIH07Ci0KLSAgSW1hZ2VDYXB0dXJlX1NldE9wdGlvbnNfUmVzcG9u
c2VQYXJhbXMuZW5jb2RlZFNpemUgPSBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDg7Ci0KLSAg
SW1hZ2VDYXB0dXJlX1NldE9wdGlvbnNfUmVzcG9uc2VQYXJhbXMuZGVjb2RlID0gZnVuY3Rpb24o
ZGVjb2RlcikgewotICAgIHZhciBwYWNrZWQ7Ci0gICAgdmFyIHZhbCA9IG5ldyBJbWFnZUNhcHR1
cmVfU2V0T3B0aW9uc19SZXNwb25zZVBhcmFtcygpOwotICAgIHZhciBudW1iZXJPZkJ5dGVzID0g
ZGVjb2Rlci5yZWFkVWludDMyKCk7Ci0gICAgdmFyIHZlcnNpb24gPSBkZWNvZGVyLnJlYWRVaW50
MzIoKTsKLSAgICBwYWNrZWQgPSBkZWNvZGVyLnJlYWRVaW50OCgpOwotICAgIHZhbC5zdWNjZXNz
ID0gKHBhY2tlZCA+PiAwKSAmIDEgPyB0cnVlIDogZmFsc2U7Ci0gICAgZGVjb2Rlci5za2lwKDEp
OwotICAgIGRlY29kZXIuc2tpcCgxKTsKLSAgICBkZWNvZGVyLnNraXAoMSk7Ci0gICAgZGVjb2Rl
ci5za2lwKDEpOwotICAgIGRlY29kZXIuc2tpcCgxKTsKLSAgICBkZWNvZGVyLnNraXAoMSk7Ci0g
ICAgZGVjb2Rlci5za2lwKDEpOwotICAgIHJldHVybiB2YWw7Ci0gIH07Ci0KLSAgSW1hZ2VDYXB0
dXJlX1NldE9wdGlvbnNfUmVzcG9uc2VQYXJhbXMuZW5jb2RlID0gZnVuY3Rpb24oZW5jb2Rlciwg
dmFsKSB7Ci0gICAgdmFyIHBhY2tlZDsKLSAgICBlbmNvZGVyLndyaXRlVWludDMyKEltYWdlQ2Fw
dHVyZV9TZXRPcHRpb25zX1Jlc3BvbnNlUGFyYW1zLmVuY29kZWRTaXplKTsKLSAgICBlbmNvZGVy
LndyaXRlVWludDMyKDApOwotICAgIHBhY2tlZCA9IDA7Ci0gICAgcGFja2VkIHw9ICh2YWwuc3Vj
Y2VzcyAmIDEpIDw8IDAKLSAgICBlbmNvZGVyLndyaXRlVWludDgocGFja2VkKTsKLSAgICBlbmNv
ZGVyLnNraXAoMSk7Ci0gICAgZW5jb2Rlci5za2lwKDEpOwotICAgIGVuY29kZXIuc2tpcCgxKTsK
LSAgICBlbmNvZGVyLnNraXAoMSk7Ci0gICAgZW5jb2Rlci5za2lwKDEpOwotICAgIGVuY29kZXIu
c2tpcCgxKTsKLSAgICBlbmNvZGVyLnNraXAoMSk7Ci0gIH07Ci0gIGZ1bmN0aW9uIEltYWdlQ2Fw
dHVyZV9UYWtlUGhvdG9fUGFyYW1zKHZhbHVlcykgewotICAgIHRoaXMuaW5pdERlZmF1bHRzXygp
OwotICAgIHRoaXMuaW5pdEZpZWxkc18odmFsdWVzKTsKLSAgfQotCi0KLSAgSW1hZ2VDYXB0dXJl
X1Rha2VQaG90b19QYXJhbXMucHJvdG90eXBlLmluaXREZWZhdWx0c18gPSBmdW5jdGlvbigpIHsK
LSAgICB0aGlzLnNvdXJjZUlkID0gbnVsbDsKLSAgfTsKLSAgSW1hZ2VDYXB0dXJlX1Rha2VQaG90
b19QYXJhbXMucHJvdG90eXBlLmluaXRGaWVsZHNfID0gZnVuY3Rpb24oZmllbGRzKSB7Ci0gICAg
Zm9yKHZhciBmaWVsZCBpbiBmaWVsZHMpIHsKLSAgICAgICAgaWYgKHRoaXMuaGFzT3duUHJvcGVy
dHkoZmllbGQpKQotICAgICAgICAgIHRoaXNbZmllbGRdID0gZmllbGRzW2ZpZWxkXTsKLSAgICB9
Ci0gIH07Ci0KLSAgSW1hZ2VDYXB0dXJlX1Rha2VQaG90b19QYXJhbXMudmFsaWRhdGUgPSBmdW5j
dGlvbihtZXNzYWdlVmFsaWRhdG9yLCBvZmZzZXQpIHsKLSAgICB2YXIgZXJyOwotICAgIGVyciA9
IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RIZWFkZXIob2Zmc2V0LCBjb2RlYy5rU3Ry
dWN0SGVhZGVyU2l6ZSk7Ci0gICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJv
ci5OT05FKQotICAgICAgICByZXR1cm4gZXJyOwotCi0gICAgdmFyIGtWZXJzaW9uU2l6ZXMgPSBb
Ci0gICAgICB7dmVyc2lvbjogMCwgbnVtQnl0ZXM6IDE2fQotICAgIF07Ci0gICAgZXJyID0gbWVz
c2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdFZlcnNpb24ob2Zmc2V0LCBrVmVyc2lvblNpemVz
KTsKLSAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCi0gICAg
ICAgIHJldHVybiBlcnI7Ci0KLQotICAgIC8vIHZhbGlkYXRlIEltYWdlQ2FwdHVyZV9UYWtlUGhv
dG9fUGFyYW1zLnNvdXJjZUlkCi0gICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0
cmluZ1BvaW50ZXIob2Zmc2V0ICsgY29kZWMua1N0cnVjdEhlYWRlclNpemUgKyAwLCBmYWxzZSkK
LSAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCi0gICAgICAg
IHJldHVybiBlcnI7Ci0KLSAgICByZXR1cm4gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05F
OwotICB9OwotCi0gIEltYWdlQ2FwdHVyZV9UYWtlUGhvdG9fUGFyYW1zLmVuY29kZWRTaXplID0g
Y29kZWMua1N0cnVjdEhlYWRlclNpemUgKyA4OwotCi0gIEltYWdlQ2FwdHVyZV9UYWtlUGhvdG9f
UGFyYW1zLmRlY29kZSA9IGZ1bmN0aW9uKGRlY29kZXIpIHsKLSAgICB2YXIgcGFja2VkOwotICAg
IHZhciB2YWwgPSBuZXcgSW1hZ2VDYXB0dXJlX1Rha2VQaG90b19QYXJhbXMoKTsKLSAgICB2YXIg
bnVtYmVyT2ZCeXRlcyA9IGRlY29kZXIucmVhZFVpbnQzMigpOwotICAgIHZhciB2ZXJzaW9uID0g
ZGVjb2Rlci5yZWFkVWludDMyKCk7Ci0gICAgdmFsLnNvdXJjZUlkID0gZGVjb2Rlci5kZWNvZGVT
dHJ1Y3QoY29kZWMuU3RyaW5nKTsKLSAgICByZXR1cm4gdmFsOwotICB9OwotCi0gIEltYWdlQ2Fw
dHVyZV9UYWtlUGhvdG9fUGFyYW1zLmVuY29kZSA9IGZ1bmN0aW9uKGVuY29kZXIsIHZhbCkgewot
ICAgIHZhciBwYWNrZWQ7Ci0gICAgZW5jb2Rlci53cml0ZVVpbnQzMihJbWFnZUNhcHR1cmVfVGFr
ZVBob3RvX1BhcmFtcy5lbmNvZGVkU2l6ZSk7Ci0gICAgZW5jb2Rlci53cml0ZVVpbnQzMigwKTsK
LSAgICBlbmNvZGVyLmVuY29kZVN0cnVjdChjb2RlYy5TdHJpbmcsIHZhbC5zb3VyY2VJZCk7Ci0g
IH07Ci0gIGZ1bmN0aW9uIEltYWdlQ2FwdHVyZV9UYWtlUGhvdG9fUmVzcG9uc2VQYXJhbXModmFs
dWVzKSB7Ci0gICAgdGhpcy5pbml0RGVmYXVsdHNfKCk7Ci0gICAgdGhpcy5pbml0RmllbGRzXyh2
YWx1ZXMpOwotICB9Ci0KLQotICBJbWFnZUNhcHR1cmVfVGFrZVBob3RvX1Jlc3BvbnNlUGFyYW1z
LnByb3RvdHlwZS5pbml0RGVmYXVsdHNfID0gZnVuY3Rpb24oKSB7Ci0gICAgdGhpcy5ibG9iID0g
bnVsbDsKLSAgfTsKLSAgSW1hZ2VDYXB0dXJlX1Rha2VQaG90b19SZXNwb25zZVBhcmFtcy5wcm90
b3R5cGUuaW5pdEZpZWxkc18gPSBmdW5jdGlvbihmaWVsZHMpIHsKLSAgICBmb3IodmFyIGZpZWxk
IGluIGZpZWxkcykgewotICAgICAgICBpZiAodGhpcy5oYXNPd25Qcm9wZXJ0eShmaWVsZCkpCi0g
ICAgICAgICAgdGhpc1tmaWVsZF0gPSBmaWVsZHNbZmllbGRdOwotICAgIH0KLSAgfTsKLQotICBJ
bWFnZUNhcHR1cmVfVGFrZVBob3RvX1Jlc3BvbnNlUGFyYW1zLnZhbGlkYXRlID0gZnVuY3Rpb24o
bWVzc2FnZVZhbGlkYXRvciwgb2Zmc2V0KSB7Ci0gICAgdmFyIGVycjsKLSAgICBlcnIgPSBtZXNz
YWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0SGVhZGVyKG9mZnNldCwgY29kZWMua1N0cnVjdEhl
YWRlclNpemUpOwotICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9O
RSkKLSAgICAgICAgcmV0dXJuIGVycjsKLQotICAgIHZhciBrVmVyc2lvblNpemVzID0gWwotICAg
ICAge3ZlcnNpb246IDAsIG51bUJ5dGVzOiAxNn0KLSAgICBdOwotICAgIGVyciA9IG1lc3NhZ2VW
YWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RWZXJzaW9uKG9mZnNldCwga1ZlcnNpb25TaXplcyk7Ci0g
ICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQotICAgICAgICBy
ZXR1cm4gZXJyOwotCi0KLSAgICAvLyB2YWxpZGF0ZSBJbWFnZUNhcHR1cmVfVGFrZVBob3RvX1Jl
c3BvbnNlUGFyYW1zLmJsb2IKLSAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3Ry
dWN0UG9pbnRlcihvZmZzZXQgKyBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDAsIEJsb2IsIGZh
bHNlKTsKLSAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCi0g
ICAgICAgIHJldHVybiBlcnI7Ci0KLSAgICByZXR1cm4gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJv
ci5OT05FOwotICB9OwotCi0gIEltYWdlQ2FwdHVyZV9UYWtlUGhvdG9fUmVzcG9uc2VQYXJhbXMu
ZW5jb2RlZFNpemUgPSBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDg7Ci0KLSAgSW1hZ2VDYXB0
dXJlX1Rha2VQaG90b19SZXNwb25zZVBhcmFtcy5kZWNvZGUgPSBmdW5jdGlvbihkZWNvZGVyKSB7
Ci0gICAgdmFyIHBhY2tlZDsKLSAgICB2YXIgdmFsID0gbmV3IEltYWdlQ2FwdHVyZV9UYWtlUGhv
dG9fUmVzcG9uc2VQYXJhbXMoKTsKLSAgICB2YXIgbnVtYmVyT2ZCeXRlcyA9IGRlY29kZXIucmVh
ZFVpbnQzMigpOwotICAgIHZhciB2ZXJzaW9uID0gZGVjb2Rlci5yZWFkVWludDMyKCk7Ci0gICAg
dmFsLmJsb2IgPSBkZWNvZGVyLmRlY29kZVN0cnVjdFBvaW50ZXIoQmxvYik7Ci0gICAgcmV0dXJu
IHZhbDsKLSAgfTsKLQotICBJbWFnZUNhcHR1cmVfVGFrZVBob3RvX1Jlc3BvbnNlUGFyYW1zLmVu
Y29kZSA9IGZ1bmN0aW9uKGVuY29kZXIsIHZhbCkgewotICAgIHZhciBwYWNrZWQ7Ci0gICAgZW5j
b2Rlci53cml0ZVVpbnQzMihJbWFnZUNhcHR1cmVfVGFrZVBob3RvX1Jlc3BvbnNlUGFyYW1zLmVu
Y29kZWRTaXplKTsKLSAgICBlbmNvZGVyLndyaXRlVWludDMyKDApOwotICAgIGVuY29kZXIuZW5j
b2RlU3RydWN0UG9pbnRlcihCbG9iLCB2YWwuYmxvYik7Ci0gIH07Ci0gIHZhciBrSW1hZ2VDYXB0
dXJlX0dldFBob3RvU3RhdGVfTmFtZSA9IDA7Ci0gIHZhciBrSW1hZ2VDYXB0dXJlX1NldE9wdGlv
bnNfTmFtZSA9IDE7Ci0gIHZhciBrSW1hZ2VDYXB0dXJlX1Rha2VQaG90b19OYW1lID0gMjsKLQot
ICBmdW5jdGlvbiBJbWFnZUNhcHR1cmVQdHIoaGFuZGxlT3JQdHJJbmZvKSB7Ci0gICAgdGhpcy5w
dHIgPSBuZXcgYmluZGluZ3MuSW50ZXJmYWNlUHRyQ29udHJvbGxlcihJbWFnZUNhcHR1cmUsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVP
clB0ckluZm8pOwotICB9Ci0KLSAgZnVuY3Rpb24gSW1hZ2VDYXB0dXJlQXNzb2NpYXRlZFB0cihh
c3NvY2lhdGVkSW50ZXJmYWNlUHRySW5mbykgewotICAgIHRoaXMucHRyID0gbmV3IGFzc29jaWF0
ZWRCaW5kaW5ncy5Bc3NvY2lhdGVkSW50ZXJmYWNlUHRyQ29udHJvbGxlcigKLSAgICAgICAgSW1h
Z2VDYXB0dXJlLCBhc3NvY2lhdGVkSW50ZXJmYWNlUHRySW5mbyk7Ci0gIH0KLQotICBJbWFnZUNh
cHR1cmVBc3NvY2lhdGVkUHRyLnByb3RvdHlwZSA9Ci0gICAgICBPYmplY3QuY3JlYXRlKEltYWdl
Q2FwdHVyZVB0ci5wcm90b3R5cGUpOwotICBJbWFnZUNhcHR1cmVBc3NvY2lhdGVkUHRyLnByb3Rv
dHlwZS5jb25zdHJ1Y3RvciA9Ci0gICAgICBJbWFnZUNhcHR1cmVBc3NvY2lhdGVkUHRyOwotCi0g
IGZ1bmN0aW9uIEltYWdlQ2FwdHVyZVByb3h5KHJlY2VpdmVyKSB7Ci0gICAgdGhpcy5yZWNlaXZl
cl8gPSByZWNlaXZlcjsKLSAgfQotICBJbWFnZUNhcHR1cmVQdHIucHJvdG90eXBlLmdldFBob3Rv
U3RhdGUgPSBmdW5jdGlvbigpIHsKLSAgICByZXR1cm4gSW1hZ2VDYXB0dXJlUHJveHkucHJvdG90
eXBlLmdldFBob3RvU3RhdGUKLSAgICAgICAgLmFwcGx5KHRoaXMucHRyLmdldFByb3h5KCksIGFy
Z3VtZW50cyk7Ci0gIH07Ci0KLSAgSW1hZ2VDYXB0dXJlUHJveHkucHJvdG90eXBlLmdldFBob3Rv
U3RhdGUgPSBmdW5jdGlvbihzb3VyY2VJZCkgewotICAgIHZhciBwYXJhbXNfID0gbmV3IEltYWdl
Q2FwdHVyZV9HZXRQaG90b1N0YXRlX1BhcmFtcygpOwotICAgIHBhcmFtc18uc291cmNlSWQgPSBz
b3VyY2VJZDsKLSAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0
KSB7Ci0gICAgICB2YXIgYnVpbGRlciA9IG5ldyBjb2RlYy5NZXNzYWdlVjFCdWlsZGVyKAotICAg
ICAgICAgIGtJbWFnZUNhcHR1cmVfR2V0UGhvdG9TdGF0ZV9OYW1lLAotICAgICAgICAgIGNvZGVj
LmFsaWduKEltYWdlQ2FwdHVyZV9HZXRQaG90b1N0YXRlX1BhcmFtcy5lbmNvZGVkU2l6ZSksCi0g
ICAgICAgICAgY29kZWMua01lc3NhZ2VFeHBlY3RzUmVzcG9uc2UsIDApOwotICAgICAgYnVpbGRl
ci5lbmNvZGVTdHJ1Y3QoSW1hZ2VDYXB0dXJlX0dldFBob3RvU3RhdGVfUGFyYW1zLCBwYXJhbXNf
KTsKLSAgICAgIHZhciBtZXNzYWdlID0gYnVpbGRlci5maW5pc2goKTsKLSAgICAgIHRoaXMucmVj
ZWl2ZXJfLmFjY2VwdEFuZEV4cGVjdFJlc3BvbnNlKG1lc3NhZ2UpLnRoZW4oZnVuY3Rpb24obWVz
c2FnZSkgewotICAgICAgICB2YXIgcmVhZGVyID0gbmV3IGNvZGVjLk1lc3NhZ2VSZWFkZXIobWVz
c2FnZSk7Ci0gICAgICAgIHZhciByZXNwb25zZVBhcmFtcyA9Ci0gICAgICAgICAgICByZWFkZXIu
ZGVjb2RlU3RydWN0KEltYWdlQ2FwdHVyZV9HZXRQaG90b1N0YXRlX1Jlc3BvbnNlUGFyYW1zKTsK
LSAgICAgICAgcmVzb2x2ZShyZXNwb25zZVBhcmFtcyk7Ci0gICAgICB9KS5jYXRjaChmdW5jdGlv
bihyZXN1bHQpIHsKLSAgICAgICAgcmVqZWN0KEVycm9yKCJDb25uZWN0aW9uIGVycm9yOiAiICsg
cmVzdWx0KSk7Ci0gICAgICB9KTsKLSAgICB9LmJpbmQodGhpcykpOwotICB9OwotICBJbWFnZUNh
cHR1cmVQdHIucHJvdG90eXBlLnNldE9wdGlvbnMgPSBmdW5jdGlvbigpIHsKLSAgICByZXR1cm4g
SW1hZ2VDYXB0dXJlUHJveHkucHJvdG90eXBlLnNldE9wdGlvbnMKLSAgICAgICAgLmFwcGx5KHRo
aXMucHRyLmdldFByb3h5KCksIGFyZ3VtZW50cyk7Ci0gIH07Ci0KLSAgSW1hZ2VDYXB0dXJlUHJv
eHkucHJvdG90eXBlLnNldE9wdGlvbnMgPSBmdW5jdGlvbihzb3VyY2VJZCwgc2V0dGluZ3MpIHsK
LSAgICB2YXIgcGFyYW1zXyA9IG5ldyBJbWFnZUNhcHR1cmVfU2V0T3B0aW9uc19QYXJhbXMoKTsK
LSAgICBwYXJhbXNfLnNvdXJjZUlkID0gc291cmNlSWQ7Ci0gICAgcGFyYW1zXy5zZXR0aW5ncyA9
IHNldHRpbmdzOwotICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWpl
Y3QpIHsKLSAgICAgIHZhciBidWlsZGVyID0gbmV3IGNvZGVjLk1lc3NhZ2VWMUJ1aWxkZXIoCi0g
ICAgICAgICAga0ltYWdlQ2FwdHVyZV9TZXRPcHRpb25zX05hbWUsCi0gICAgICAgICAgY29kZWMu
YWxpZ24oSW1hZ2VDYXB0dXJlX1NldE9wdGlvbnNfUGFyYW1zLmVuY29kZWRTaXplKSwKLSAgICAg
ICAgICBjb2RlYy5rTWVzc2FnZUV4cGVjdHNSZXNwb25zZSwgMCk7Ci0gICAgICBidWlsZGVyLmVu
Y29kZVN0cnVjdChJbWFnZUNhcHR1cmVfU2V0T3B0aW9uc19QYXJhbXMsIHBhcmFtc18pOwotICAg
ICAgdmFyIG1lc3NhZ2UgPSBidWlsZGVyLmZpbmlzaCgpOwotICAgICAgdGhpcy5yZWNlaXZlcl8u
YWNjZXB0QW5kRXhwZWN0UmVzcG9uc2UobWVzc2FnZSkudGhlbihmdW5jdGlvbihtZXNzYWdlKSB7
Ci0gICAgICAgIHZhciByZWFkZXIgPSBuZXcgY29kZWMuTWVzc2FnZVJlYWRlcihtZXNzYWdlKTsK
LSAgICAgICAgdmFyIHJlc3BvbnNlUGFyYW1zID0KLSAgICAgICAgICAgIHJlYWRlci5kZWNvZGVT
dHJ1Y3QoSW1hZ2VDYXB0dXJlX1NldE9wdGlvbnNfUmVzcG9uc2VQYXJhbXMpOwotICAgICAgICBy
ZXNvbHZlKHJlc3BvbnNlUGFyYW1zKTsKLSAgICAgIH0pLmNhdGNoKGZ1bmN0aW9uKHJlc3VsdCkg
ewotICAgICAgICByZWplY3QoRXJyb3IoIkNvbm5lY3Rpb24gZXJyb3I6ICIgKyByZXN1bHQpKTsK
LSAgICAgIH0pOwotICAgIH0uYmluZCh0aGlzKSk7Ci0gIH07Ci0gIEltYWdlQ2FwdHVyZVB0ci5w
cm90b3R5cGUudGFrZVBob3RvID0gZnVuY3Rpb24oKSB7Ci0gICAgcmV0dXJuIEltYWdlQ2FwdHVy
ZVByb3h5LnByb3RvdHlwZS50YWtlUGhvdG8KLSAgICAgICAgLmFwcGx5KHRoaXMucHRyLmdldFBy
b3h5KCksIGFyZ3VtZW50cyk7Ci0gIH07Ci0KLSAgSW1hZ2VDYXB0dXJlUHJveHkucHJvdG90eXBl
LnRha2VQaG90byA9IGZ1bmN0aW9uKHNvdXJjZUlkKSB7Ci0gICAgdmFyIHBhcmFtc18gPSBuZXcg
SW1hZ2VDYXB0dXJlX1Rha2VQaG90b19QYXJhbXMoKTsKLSAgICBwYXJhbXNfLnNvdXJjZUlkID0g
c291cmNlSWQ7Ci0gICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVj
dCkgewotICAgICAgdmFyIGJ1aWxkZXIgPSBuZXcgY29kZWMuTWVzc2FnZVYxQnVpbGRlcigKLSAg
ICAgICAgICBrSW1hZ2VDYXB0dXJlX1Rha2VQaG90b19OYW1lLAotICAgICAgICAgIGNvZGVjLmFs
aWduKEltYWdlQ2FwdHVyZV9UYWtlUGhvdG9fUGFyYW1zLmVuY29kZWRTaXplKSwKLSAgICAgICAg
ICBjb2RlYy5rTWVzc2FnZUV4cGVjdHNSZXNwb25zZSwgMCk7Ci0gICAgICBidWlsZGVyLmVuY29k
ZVN0cnVjdChJbWFnZUNhcHR1cmVfVGFrZVBob3RvX1BhcmFtcywgcGFyYW1zXyk7Ci0gICAgICB2
YXIgbWVzc2FnZSA9IGJ1aWxkZXIuZmluaXNoKCk7Ci0gICAgICB0aGlzLnJlY2VpdmVyXy5hY2Nl
cHRBbmRFeHBlY3RSZXNwb25zZShtZXNzYWdlKS50aGVuKGZ1bmN0aW9uKG1lc3NhZ2UpIHsKLSAg
ICAgICAgdmFyIHJlYWRlciA9IG5ldyBjb2RlYy5NZXNzYWdlUmVhZGVyKG1lc3NhZ2UpOwotICAg
ICAgICB2YXIgcmVzcG9uc2VQYXJhbXMgPQotICAgICAgICAgICAgcmVhZGVyLmRlY29kZVN0cnVj
dChJbWFnZUNhcHR1cmVfVGFrZVBob3RvX1Jlc3BvbnNlUGFyYW1zKTsKLSAgICAgICAgcmVzb2x2
ZShyZXNwb25zZVBhcmFtcyk7Ci0gICAgICB9KS5jYXRjaChmdW5jdGlvbihyZXN1bHQpIHsKLSAg
ICAgICAgcmVqZWN0KEVycm9yKCJDb25uZWN0aW9uIGVycm9yOiAiICsgcmVzdWx0KSk7Ci0gICAg
ICB9KTsKLSAgICB9LmJpbmQodGhpcykpOwotICB9OwotCi0gIGZ1bmN0aW9uIEltYWdlQ2FwdHVy
ZVN0dWIoZGVsZWdhdGUpIHsKLSAgICB0aGlzLmRlbGVnYXRlXyA9IGRlbGVnYXRlOwotICB9Ci0g
IEltYWdlQ2FwdHVyZVN0dWIucHJvdG90eXBlLmdldFBob3RvU3RhdGUgPSBmdW5jdGlvbihzb3Vy
Y2VJZCkgewotICAgIHJldHVybiB0aGlzLmRlbGVnYXRlXyAmJiB0aGlzLmRlbGVnYXRlXy5nZXRQ
aG90b1N0YXRlICYmIHRoaXMuZGVsZWdhdGVfLmdldFBob3RvU3RhdGUoc291cmNlSWQpOwotICB9
Ci0gIEltYWdlQ2FwdHVyZVN0dWIucHJvdG90eXBlLnNldE9wdGlvbnMgPSBmdW5jdGlvbihzb3Vy
Y2VJZCwgc2V0dGluZ3MpIHsKLSAgICByZXR1cm4gdGhpcy5kZWxlZ2F0ZV8gJiYgdGhpcy5kZWxl
Z2F0ZV8uc2V0T3B0aW9ucyAmJiB0aGlzLmRlbGVnYXRlXy5zZXRPcHRpb25zKHNvdXJjZUlkLCBz
ZXR0aW5ncyk7Ci0gIH0KLSAgSW1hZ2VDYXB0dXJlU3R1Yi5wcm90b3R5cGUudGFrZVBob3RvID0g
ZnVuY3Rpb24oc291cmNlSWQpIHsKLSAgICByZXR1cm4gdGhpcy5kZWxlZ2F0ZV8gJiYgdGhpcy5k
ZWxlZ2F0ZV8udGFrZVBob3RvICYmIHRoaXMuZGVsZWdhdGVfLnRha2VQaG90byhzb3VyY2VJZCk7
Ci0gIH0KLQotICBJbWFnZUNhcHR1cmVTdHViLnByb3RvdHlwZS5hY2NlcHQgPSBmdW5jdGlvbiht
ZXNzYWdlKSB7Ci0gICAgdmFyIHJlYWRlciA9IG5ldyBjb2RlYy5NZXNzYWdlUmVhZGVyKG1lc3Nh
Z2UpOwotICAgIHN3aXRjaCAocmVhZGVyLm1lc3NhZ2VOYW1lKSB7Ci0gICAgZGVmYXVsdDoKLSAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gIH07Ci0KLSAgSW1hZ2VDYXB0dXJlU3R1Yi5wcm90
b3R5cGUuYWNjZXB0V2l0aFJlc3BvbmRlciA9Ci0gICAgICBmdW5jdGlvbihtZXNzYWdlLCByZXNw
b25kZXIpIHsKLSAgICB2YXIgcmVhZGVyID0gbmV3IGNvZGVjLk1lc3NhZ2VSZWFkZXIobWVzc2Fn
ZSk7Ci0gICAgc3dpdGNoIChyZWFkZXIubWVzc2FnZU5hbWUpIHsKLSAgICBjYXNlIGtJbWFnZUNh
cHR1cmVfR2V0UGhvdG9TdGF0ZV9OYW1lOgotICAgICAgdmFyIHBhcmFtcyA9IHJlYWRlci5kZWNv
ZGVTdHJ1Y3QoSW1hZ2VDYXB0dXJlX0dldFBob3RvU3RhdGVfUGFyYW1zKTsKLSAgICAgIHRoaXMu
Z2V0UGhvdG9TdGF0ZShwYXJhbXMuc291cmNlSWQpLnRoZW4oZnVuY3Rpb24ocmVzcG9uc2UpIHsK
LSAgICAgICAgdmFyIHJlc3BvbnNlUGFyYW1zID0KLSAgICAgICAgICAgIG5ldyBJbWFnZUNhcHR1
cmVfR2V0UGhvdG9TdGF0ZV9SZXNwb25zZVBhcmFtcygpOwotICAgICAgICByZXNwb25zZVBhcmFt
cy5zdGF0ZSA9IHJlc3BvbnNlLnN0YXRlOwotICAgICAgICB2YXIgYnVpbGRlciA9IG5ldyBjb2Rl
Yy5NZXNzYWdlVjFCdWlsZGVyKAotICAgICAgICAgICAga0ltYWdlQ2FwdHVyZV9HZXRQaG90b1N0
YXRlX05hbWUsCi0gICAgICAgICAgICBjb2RlYy5hbGlnbihJbWFnZUNhcHR1cmVfR2V0UGhvdG9T
dGF0ZV9SZXNwb25zZVBhcmFtcy5lbmNvZGVkU2l6ZSksCi0gICAgICAgICAgICBjb2RlYy5rTWVz
c2FnZUlzUmVzcG9uc2UsIHJlYWRlci5yZXF1ZXN0SUQpOwotICAgICAgICBidWlsZGVyLmVuY29k
ZVN0cnVjdChJbWFnZUNhcHR1cmVfR2V0UGhvdG9TdGF0ZV9SZXNwb25zZVBhcmFtcywKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2VQYXJhbXMpOwotICAgICAgICB2YXIgbWVz
c2FnZSA9IGJ1aWxkZXIuZmluaXNoKCk7Ci0gICAgICAgIHJlc3BvbmRlci5hY2NlcHQobWVzc2Fn
ZSk7Ci0gICAgICB9KTsKLSAgICAgIHJldHVybiB0cnVlOwotICAgIGNhc2Uga0ltYWdlQ2FwdHVy
ZV9TZXRPcHRpb25zX05hbWU6Ci0gICAgICB2YXIgcGFyYW1zID0gcmVhZGVyLmRlY29kZVN0cnVj
dChJbWFnZUNhcHR1cmVfU2V0T3B0aW9uc19QYXJhbXMpOwotICAgICAgdGhpcy5zZXRPcHRpb25z
KHBhcmFtcy5zb3VyY2VJZCwgcGFyYW1zLnNldHRpbmdzKS50aGVuKGZ1bmN0aW9uKHJlc3BvbnNl
KSB7Ci0gICAgICAgIHZhciByZXNwb25zZVBhcmFtcyA9Ci0gICAgICAgICAgICBuZXcgSW1hZ2VD
YXB0dXJlX1NldE9wdGlvbnNfUmVzcG9uc2VQYXJhbXMoKTsKLSAgICAgICAgcmVzcG9uc2VQYXJh
bXMuc3VjY2VzcyA9IHJlc3BvbnNlLnN1Y2Nlc3M7Ci0gICAgICAgIHZhciBidWlsZGVyID0gbmV3
IGNvZGVjLk1lc3NhZ2VWMUJ1aWxkZXIoCi0gICAgICAgICAgICBrSW1hZ2VDYXB0dXJlX1NldE9w
dGlvbnNfTmFtZSwKLSAgICAgICAgICAgIGNvZGVjLmFsaWduKEltYWdlQ2FwdHVyZV9TZXRPcHRp
b25zX1Jlc3BvbnNlUGFyYW1zLmVuY29kZWRTaXplKSwKLSAgICAgICAgICAgIGNvZGVjLmtNZXNz
YWdlSXNSZXNwb25zZSwgcmVhZGVyLnJlcXVlc3RJRCk7Ci0gICAgICAgIGJ1aWxkZXIuZW5jb2Rl
U3RydWN0KEltYWdlQ2FwdHVyZV9TZXRPcHRpb25zX1Jlc3BvbnNlUGFyYW1zLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICByZXNwb25zZVBhcmFtcyk7Ci0gICAgICAgIHZhciBtZXNzYWdl
ID0gYnVpbGRlci5maW5pc2goKTsKLSAgICAgICAgcmVzcG9uZGVyLmFjY2VwdChtZXNzYWdlKTsK
LSAgICAgIH0pOwotICAgICAgcmV0dXJuIHRydWU7Ci0gICAgY2FzZSBrSW1hZ2VDYXB0dXJlX1Rh
a2VQaG90b19OYW1lOgotICAgICAgdmFyIHBhcmFtcyA9IHJlYWRlci5kZWNvZGVTdHJ1Y3QoSW1h
Z2VDYXB0dXJlX1Rha2VQaG90b19QYXJhbXMpOwotICAgICAgdGhpcy50YWtlUGhvdG8ocGFyYW1z
LnNvdXJjZUlkKS50aGVuKGZ1bmN0aW9uKHJlc3BvbnNlKSB7Ci0gICAgICAgIHZhciByZXNwb25z
ZVBhcmFtcyA9Ci0gICAgICAgICAgICBuZXcgSW1hZ2VDYXB0dXJlX1Rha2VQaG90b19SZXNwb25z
ZVBhcmFtcygpOwotICAgICAgICByZXNwb25zZVBhcmFtcy5ibG9iID0gcmVzcG9uc2UuYmxvYjsK
LSAgICAgICAgdmFyIGJ1aWxkZXIgPSBuZXcgY29kZWMuTWVzc2FnZVYxQnVpbGRlcigKLSAgICAg
ICAgICAgIGtJbWFnZUNhcHR1cmVfVGFrZVBob3RvX05hbWUsCi0gICAgICAgICAgICBjb2RlYy5h
bGlnbihJbWFnZUNhcHR1cmVfVGFrZVBob3RvX1Jlc3BvbnNlUGFyYW1zLmVuY29kZWRTaXplKSwK
LSAgICAgICAgICAgIGNvZGVjLmtNZXNzYWdlSXNSZXNwb25zZSwgcmVhZGVyLnJlcXVlc3RJRCk7
Ci0gICAgICAgIGJ1aWxkZXIuZW5jb2RlU3RydWN0KEltYWdlQ2FwdHVyZV9UYWtlUGhvdG9fUmVz
cG9uc2VQYXJhbXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlUGFyYW1z
KTsKLSAgICAgICAgdmFyIG1lc3NhZ2UgPSBidWlsZGVyLmZpbmlzaCgpOwotICAgICAgICByZXNw
b25kZXIuYWNjZXB0KG1lc3NhZ2UpOwotICAgICAgfSk7Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAg
ICBkZWZhdWx0OgotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgfTsKLQotICBmdW5jdGlv
biB2YWxpZGF0ZUltYWdlQ2FwdHVyZVJlcXVlc3QobWVzc2FnZVZhbGlkYXRvcikgewotICAgIHZh
ciBtZXNzYWdlID0gbWVzc2FnZVZhbGlkYXRvci5tZXNzYWdlOwotICAgIHZhciBwYXJhbXNDbGFz
cyA9IG51bGw7Ci0gICAgc3dpdGNoIChtZXNzYWdlLmdldE5hbWUoKSkgewotICAgICAgY2FzZSBr
SW1hZ2VDYXB0dXJlX0dldFBob3RvU3RhdGVfTmFtZToKLSAgICAgICAgaWYgKG1lc3NhZ2UuZXhw
ZWN0c1Jlc3BvbnNlKCkpCi0gICAgICAgICAgcGFyYW1zQ2xhc3MgPSBJbWFnZUNhcHR1cmVfR2V0
UGhvdG9TdGF0ZV9QYXJhbXM7Ci0gICAgICBicmVhazsKLSAgICAgIGNhc2Uga0ltYWdlQ2FwdHVy
ZV9TZXRPcHRpb25zX05hbWU6Ci0gICAgICAgIGlmIChtZXNzYWdlLmV4cGVjdHNSZXNwb25zZSgp
KQotICAgICAgICAgIHBhcmFtc0NsYXNzID0gSW1hZ2VDYXB0dXJlX1NldE9wdGlvbnNfUGFyYW1z
OwotICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIGtJbWFnZUNhcHR1cmVfVGFrZVBob3RvX05hbWU6
Ci0gICAgICAgIGlmIChtZXNzYWdlLmV4cGVjdHNSZXNwb25zZSgpKQotICAgICAgICAgIHBhcmFt
c0NsYXNzID0gSW1hZ2VDYXB0dXJlX1Rha2VQaG90b19QYXJhbXM7Ci0gICAgICBicmVhazsKLSAg
ICB9Ci0gICAgaWYgKHBhcmFtc0NsYXNzID09PSBudWxsKQotICAgICAgcmV0dXJuIHZhbGlkYXRv
ci52YWxpZGF0aW9uRXJyb3IuTk9ORTsKLSAgICByZXR1cm4gcGFyYW1zQ2xhc3MudmFsaWRhdGUo
bWVzc2FnZVZhbGlkYXRvciwgbWVzc2FnZVZhbGlkYXRvci5tZXNzYWdlLmdldEhlYWRlck51bUJ5
dGVzKCkpOwotICB9Ci0KLSAgZnVuY3Rpb24gdmFsaWRhdGVJbWFnZUNhcHR1cmVSZXNwb25zZSht
ZXNzYWdlVmFsaWRhdG9yKSB7Ci0gICB2YXIgbWVzc2FnZSA9IG1lc3NhZ2VWYWxpZGF0b3IubWVz
c2FnZTsKLSAgIHZhciBwYXJhbXNDbGFzcyA9IG51bGw7Ci0gICBzd2l0Y2ggKG1lc3NhZ2UuZ2V0
TmFtZSgpKSB7Ci0gICAgICBjYXNlIGtJbWFnZUNhcHR1cmVfR2V0UGhvdG9TdGF0ZV9OYW1lOgot
ICAgICAgICBpZiAobWVzc2FnZS5pc1Jlc3BvbnNlKCkpCi0gICAgICAgICAgcGFyYW1zQ2xhc3Mg
PSBJbWFnZUNhcHR1cmVfR2V0UGhvdG9TdGF0ZV9SZXNwb25zZVBhcmFtczsKLSAgICAgICAgYnJl
YWs7Ci0gICAgICBjYXNlIGtJbWFnZUNhcHR1cmVfU2V0T3B0aW9uc19OYW1lOgotICAgICAgICBp
ZiAobWVzc2FnZS5pc1Jlc3BvbnNlKCkpCi0gICAgICAgICAgcGFyYW1zQ2xhc3MgPSBJbWFnZUNh
cHR1cmVfU2V0T3B0aW9uc19SZXNwb25zZVBhcmFtczsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBj
YXNlIGtJbWFnZUNhcHR1cmVfVGFrZVBob3RvX05hbWU6Ci0gICAgICAgIGlmIChtZXNzYWdlLmlz
UmVzcG9uc2UoKSkKLSAgICAgICAgICBwYXJhbXNDbGFzcyA9IEltYWdlQ2FwdHVyZV9UYWtlUGhv
dG9fUmVzcG9uc2VQYXJhbXM7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBpZiAocGFyYW1z
Q2xhc3MgPT09IG51bGwpCi0gICAgICByZXR1cm4gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5O
T05FOwotICAgIHJldHVybiBwYXJhbXNDbGFzcy52YWxpZGF0ZShtZXNzYWdlVmFsaWRhdG9yLCBt
ZXNzYWdlVmFsaWRhdG9yLm1lc3NhZ2UuZ2V0SGVhZGVyTnVtQnl0ZXMoKSk7Ci0gIH0KLQotICB2
YXIgSW1hZ2VDYXB0dXJlID0gewotICAgIG5hbWU6ICdtZWRpYS5tb2pvbS5JbWFnZUNhcHR1cmUn
LAotICAgIGtWZXJzaW9uOiAwLAotICAgIHB0ckNsYXNzOiBJbWFnZUNhcHR1cmVQdHIsCi0gICAg
cHJveHlDbGFzczogSW1hZ2VDYXB0dXJlUHJveHksCi0gICAgc3R1YkNsYXNzOiBJbWFnZUNhcHR1
cmVTdHViLAotICAgIHZhbGlkYXRlUmVxdWVzdDogdmFsaWRhdGVJbWFnZUNhcHR1cmVSZXF1ZXN0
LAotICAgIHZhbGlkYXRlUmVzcG9uc2U6IHZhbGlkYXRlSW1hZ2VDYXB0dXJlUmVzcG9uc2UsCi0g
IH07Ci0gIEltYWdlQ2FwdHVyZVN0dWIucHJvdG90eXBlLnZhbGlkYXRvciA9IHZhbGlkYXRlSW1h
Z2VDYXB0dXJlUmVxdWVzdDsKLSAgSW1hZ2VDYXB0dXJlUHJveHkucHJvdG90eXBlLnZhbGlkYXRv
ciA9IHZhbGlkYXRlSW1hZ2VDYXB0dXJlUmVzcG9uc2U7Ci0gIGV4cG9ydHMuTWV0ZXJpbmdNb2Rl
ID0gTWV0ZXJpbmdNb2RlOwotICBleHBvcnRzLlJlZEV5ZVJlZHVjdGlvbiA9IFJlZEV5ZVJlZHVj
dGlvbjsKLSAgZXhwb3J0cy5GaWxsTGlnaHRNb2RlID0gRmlsbExpZ2h0TW9kZTsKLSAgZXhwb3J0
cy5SYW5nZSA9IFJhbmdlOwotICBleHBvcnRzLlBob3RvU3RhdGUgPSBQaG90b1N0YXRlOwotICBl
eHBvcnRzLlBvaW50MkQgPSBQb2ludDJEOwotICBleHBvcnRzLlBob3RvU2V0dGluZ3MgPSBQaG90
b1NldHRpbmdzOwotICBleHBvcnRzLkJsb2IgPSBCbG9iOwotICBleHBvcnRzLkltYWdlQ2FwdHVy
ZSA9IEltYWdlQ2FwdHVyZTsKLSAgZXhwb3J0cy5JbWFnZUNhcHR1cmVQdHIgPSBJbWFnZUNhcHR1
cmVQdHI7Ci0gIGV4cG9ydHMuSW1hZ2VDYXB0dXJlQXNzb2NpYXRlZFB0ciA9IEltYWdlQ2FwdHVy
ZUFzc29jaWF0ZWRQdHI7Ci19KSgpOwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAt
LWdpdCBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3Vy
Y2VzL2Nocm9taXVtL21vY2staWRsZS1kZXRlY3Rpb24uanMgYi9MYXlvdXRUZXN0cy9pbXBvcnRl
ZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS9tb2NrLWlkbGUtZGV0
ZWN0aW9uLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLmQ4OGQxYWQxYzU1YWZhZWUyNDNlMWU5MTQ2ODI3YjA3M2Mz
ODA2MTMKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBs
YXRmb3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS9tb2NrLWlkbGUtZGV0ZWN0aW9uLmpzCkBA
IC0wLDAgKzEsODMgQEAKKy8qKgorICogVGhpcyBpcyBhIHRlc3RpbmcgZnJhbWV3b3JrIHRoYXQg
ZW5hYmxlcyB1cyB0byB0ZXN0IHRoZSB1c2VyIGlkbGUgZGV0ZWN0aW9uCisgKiBieSBpbnRlcmNl
cHRpbmcgdGhlIGNvbm5lY3Rpb24gYmV0d2VlbiB0aGUgcmVuZGVyZXIgYW5kIHRoZSBicm93c2Vy
IGFuZAorICogZXhwb3NpbmcgYSBtb2NraW5nIEFQSSBmb3IgdGVzdHMuCisgKgorICogVXNhZ2U6
CisgKgorICogMSkgSW5jbHVkZSA8c2NyaXB0IHNyYz0ibW9jay5qcyI+PC9zY3JpcHQ+IGluIHlv
dXIgZmlsZS4KKyAqIDIpIFNldCBleHBlY3RhdGlvbnMKKyAqICAgZXhwZWN0KGFkZE1vbml0b3Ip
LmFuZFJldHVybigodGhyZXNob2xkLCBtb25pdG9yUHRyLCBjYWxsYmFjaykgPT4geworICogICAg
IC8vIG1vY2sgYmVoYXZpb3IKKyAqICAgfSkKKyAqIDMpIENhbGwgbmF2aWdhdG9yLmlkbGUucXVl
cnkoKQorICoKKyAqIFRoZSBtb2NraW5nIEFQSSBpcyBibGluayBhZ25vc3RpYyBhbmQgaXMgZGVz
aWduZWQgc3VjaCB0aGF0IG90aGVyIGVuZ2luZXMKKyAqIGNvdWxkIGltcGxlbWVudCBpdCB0b28u
IEhlcmUgYXJlIHRoZSBzeW1ib2xzIHRoYXQgYXJlIGV4cG9zZWQgdG8gdGVzdHM6CisgKgorICog
LSBmdW5jdGlvbiBhZGRNb25pdG9yKCk6IHRoZSBtYWluL29ubHkgZnVuY3Rpb24gdGhhdCBjYW4g
YmUgbW9ja2VkLgorICogLSBmdW5jdGlvbiBleHBlY3QoKTogdGhlIG1haW4vb25seSBmdW5jdGlv
biB0aGF0IGVuYWJsZXMgdXMgdG8gbW9jayBpdC4KKyAqIC0gZnVuY3Rpb24gY2xvc2UoKTogZGlz
Y29ubmVjdHMgdGhlIGludGVyY2VwdG9yLgorICogLSBlbnVtIFVzZXJJZGxlU3RhdGUge0lETEUs
IEFDVElWRX06IGJsaW5rIGFnbm9zdGljIGNvbnN0YW50cy4KKyAqIC0gZW51bSBTY3JlZW5JZGxl
U3RhdGUge0xPQ0tFRCwgVU5MT0NLRUR9OiBibGluayBhZ25vc3RpYyBjb25zdGFudHMuCisgKi8K
KworY2xhc3MgRmFrZUlkbGVNb25pdG9yIHsKKyAgYWRkTW9uaXRvcih0aHJlc2hvbGQsIG1vbml0
b3JQdHIsIGNhbGxiYWNrKSB7CisgICAgcmV0dXJuIHRoaXMuaGFuZGxlci5hZGRNb25pdG9yKHRo
cmVzaG9sZCwgbW9uaXRvclB0cik7CisgIH0KKyAgc2V0SGFuZGxlcihoYW5kbGVyKSB7CisgICAg
dGhpcy5oYW5kbGVyID0gaGFuZGxlcjsKKyAgICByZXR1cm4gdGhpczsKKyAgfQorICBzZXRCaW5k
aW5nKGJpbmRpbmcpIHsKKyAgICB0aGlzLmJpbmRpbmcgPSBiaW5kaW5nOworICAgIHJldHVybiB0
aGlzOworICB9CisgIGNsb3NlKCkgeworICAgIHRoaXMuYmluZGluZy5jbG9zZSgpOworICB9Cit9
CisKK2NvbnN0IFVzZXJJZGxlU3RhdGUgPSB7fTsKK2NvbnN0IFNjcmVlbklkbGVTdGF0ZSA9IHt9
OworCitmdW5jdGlvbiBhZGRNb25pdG9yKHRocmVzaG9sZCwgbW9uaXRvclB0ciwgY2FsbGJhY2sp
IHsKKyAgdGhyb3cgbmV3IEVycm9yKCJleHBlY3RlZCB0byBiZSBvdmVycmlkZW4gYnkgdGVzdHMi
KTsKK30KKworYXN5bmMgZnVuY3Rpb24gY2xvc2UoKSB7CisgIGludGVyY2VwdG9yLmNsb3NlKCk7
Cit9CisKK2Z1bmN0aW9uIGV4cGVjdChjYWxsKSB7CisgIHJldHVybiB7CisgICAgYW5kUmV0dXJu
KGNhbGxiYWNrKSB7CisgICAgICBsZXQgaGFuZGxlciA9IHt9OworICAgICAgaGFuZGxlcltjYWxs
Lm5hbWVdID0gY2FsbGJhY2s7CisgICAgICBpbnRlcmNlcHRvci5zZXRIYW5kbGVyKGhhbmRsZXIp
OworICAgIH0KKyAgfQorfQorCitmdW5jdGlvbiBpbnRlcmNlcHQoKSB7CisgIGxldCByZXN1bHQg
PSBuZXcgRmFrZUlkbGVNb25pdG9yKCk7CisKKyAgbGV0IGJpbmRpbmcgPSBuZXcgbW9qby5CaW5k
aW5nKGJsaW5rLm1vam9tLklkbGVNYW5hZ2VyLCByZXN1bHQpOworICBsZXQgaW50ZXJjZXB0b3Ig
PSBuZXcgTW9qb0ludGVyZmFjZUludGVyY2VwdG9yKGJsaW5rLm1vam9tLklkbGVNYW5hZ2VyLm5h
bWUpOworICBpbnRlcmNlcHRvci5vbmludGVyZmFjZXJlcXVlc3QgPSAoZSkgPT4geworICAgIGJp
bmRpbmcuYmluZChlLmhhbmRsZSk7CisgIH0KKworICBpbnRlcmNlcHRvci5zdGFydCgpOworCisg
IFVzZXJJZGxlU3RhdGUuQUNUSVZFID0gYmxpbmsubW9qb20uVXNlcklkbGVTdGF0ZS5rQWN0aXZl
OworICBVc2VySWRsZVN0YXRlLklETEUgPSBibGluay5tb2pvbS5Vc2VySWRsZVN0YXRlLmtJZGxl
OworICBTY3JlZW5JZGxlU3RhdGUuTE9DS0VEID0gYmxpbmsubW9qb20uU2NyZWVuSWRsZVN0YXRl
LmtMb2NrZWQ7CisgIFNjcmVlbklkbGVTdGF0ZS5VTkxPQ0tFRCA9IGJsaW5rLm1vam9tLlNjcmVl
bklkbGVTdGF0ZS5rVW5sb2NrZWQ7CisKKyAgcmVzdWx0LnNldEJpbmRpbmcoYmluZGluZyk7Cisg
IHJldHVybiByZXN1bHQ7Cit9CisKK2NvbnN0IGludGVyY2VwdG9yID0gaW50ZXJjZXB0KCk7Clwg
Tm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW1wb3J0
ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vbW9jay1pbWFnZWNh
cHR1cmUuanMgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jl
c291cmNlcy9jaHJvbWl1bS9tb2NrLWltYWdlY2FwdHVyZS5qcwppbmRleCBjZTJiOTY4MzkxMzQz
MzM5YTk5NTgxMDBmNTY0ZmE3M2Q1YzAxNTA5Li5hOGY1Yzg5NmIxZjJjYzJjOTAyNDBiZDA1M2Qy
MThjMjhkYzU0OWRkIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBs
YXRmb3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS9tb2NrLWltYWdlY2FwdHVyZS5qcworKysg
Yi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9j
aHJvbWl1bS9tb2NrLWltYWdlY2FwdHVyZS5qcwpAQCAtMTMzLDYgKzEzMyw3IEBAIHZhciBJbWFn
ZUNhcHR1cmVUZXN0ID0gKCgpID0+IHsKICAgICAgICAgICBdLAogICAgICAgICB9CiAgICAgICB9
OworICAgICAgdGhpcy5wYW5UaWx0Wm9vbVBlcm1pc3Npb25TdGF0dXNfID0gbnVsbDsKICAgICAg
IHRoaXMuc2V0dGluZ3NfID0gbnVsbDsKICAgICAgIHRoaXMuYmluZGluZ1NldF8gPSBuZXcgbW9q
by5CaW5kaW5nU2V0KG1lZGlhLm1vam9tLkltYWdlQ2FwdHVyZSk7CiAgICAgfQpAQCAtMTQyLDEx
ICsxNDMsMjQgQEAgdmFyIEltYWdlQ2FwdHVyZVRlc3QgPSAoKCkgPT4gewogICAgICAgdGhpcy5p
bnRlcmNlcHRvcl8uc3RvcCgpOwogICAgIH0KIAotICAgIGdldFBob3RvU3RhdGUoc291cmNlX2lk
KSB7Ci0gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRoaXMuc3RhdGVfKTsKKyAgICBhc3lu
YyBnZXRQaG90b1N0YXRlKHNvdXJjZV9pZCkgeworICAgICAgY29uc3Qgc2hvdWxkS2VlcFBhblRp
bHRab29tID0gYXdhaXQgdGhpcy5pc1BhblRpbHRab29tUGVybWlzc2lvbkdyYW50ZWQoKTsKKyAg
ICAgIGlmIChzaG91bGRLZWVwUGFuVGlsdFpvb20pCisgICAgICAgIHJldHVybiBQcm9taXNlLnJl
c29sdmUodGhpcy5zdGF0ZV8pOworCisgICAgICBjb25zdCBuZXdTdGF0ZSA9IHsuLi50aGlzLnN0
YXRlX307CisgICAgICBuZXdTdGF0ZS5zdGF0ZS5wYW4gPSB7fTsKKyAgICAgIG5ld1N0YXRlLnN0
YXRlLnRpbHQgPSB7fTsKKyAgICAgIG5ld1N0YXRlLnN0YXRlLnpvb20gPSB7fTsKKyAgICAgIHJl
dHVybiBQcm9taXNlLnJlc29sdmUobmV3U3RhdGUpOwogICAgIH0KIAotICAgIHNldE9wdGlvbnMo
c291cmNlX2lkLCBzZXR0aW5ncykgeworICAgIGFzeW5jIHNldE9wdGlvbnMoc291cmNlX2lkLCBz
ZXR0aW5ncykgeworICAgICAgY29uc3QgaXNBbGxvd2VkVG9Db250cm9sUGFuVGlsdFpvb20gPSBh
d2FpdCB0aGlzLmlzUGFuVGlsdFpvb21QZXJtaXNzaW9uR3JhbnRlZCgpOworICAgICAgaWYgKCFp
c0FsbG93ZWRUb0NvbnRyb2xQYW5UaWx0Wm9vbSAmJgorICAgICAgICAgIChzZXR0aW5ncy5oYXNQ
YW4gfHwgc2V0dGluZ3MuaGFzVGlsdCB8fCBzZXR0aW5ncy5oYXNab29tKSkgeworICAgICAgICBy
ZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHsgc3VjY2VzczogZmFsc2UgfSk7CisgICAgICB9CiAgICAg
ICB0aGlzLnNldHRpbmdzXyA9IHNldHRpbmdzOwogICAgICAgaWYgKHNldHRpbmdzLmhhc0lzbykK
ICAgICAgICAgdGhpcy5zdGF0ZV8uc3RhdGUuaXNvLmN1cnJlbnQgPSBzZXR0aW5ncy5pc287CkBA
IC0yMTksNiArMjMzLDE2IEBAIHZhciBJbWFnZUNhcHR1cmVUZXN0ID0gKCgpID0+IHsKICAgICAg
IH0pOwogICAgIH0KIAorICAgIGFzeW5jIGlzUGFuVGlsdFpvb21QZXJtaXNzaW9uR3JhbnRlZCgp
IHsKKyAgICAgIGlmICghdGhpcy5wYW5UaWx0Wm9vbVBlcm1pc3Npb25TdGF0dXNfKSB7CisgICAg
ICAgIHRoaXMucGFuVGlsdFpvb21QZXJtaXNzaW9uU3RhdHVzXyA9IGF3YWl0IG5hdmlnYXRvci5w
ZXJtaXNzaW9ucy5xdWVyeSh7CisgICAgICAgICAgbmFtZTogImNhbWVyYSIsCisgICAgICAgICAg
cGFuVGlsdFpvb206IHRydWUKKyAgICAgICAgfSk7CisgICAgICB9CisgICAgICByZXR1cm4gdGhp
cy5wYW5UaWx0Wm9vbVBlcm1pc3Npb25TdGF0dXNfLnN0YXRlID09ICJncmFudGVkIjsKKyAgICB9
CisKICAgICBzdGF0ZSgpIHsKICAgICAgIHJldHVybiB0aGlzLnN0YXRlXy5zdGF0ZTsKICAgICB9
CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3Rz
L3Jlc291cmNlcy9jaHJvbWl1bS9tb2NrLXNjcmVlbmVudW1lcmF0aW9uLmpzIGIvTGF5b3V0VGVz
dHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vbW9j
ay1zY3JlZW5lbnVtZXJhdGlvbi5qcwppbmRleCA1YTJkN2IxOGQyODIyOWQ5ZTBlM2U1M2EyMjAw
NmEwODJkZTI1ZGVhLi4yZTQxZjU5ZWE4MDliNjQzNGQ5MzYzMjI4YjE2MmRiY2YzNTM4ZjYxIDEw
MDY0NAotLS0gYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jl
c291cmNlcy9jaHJvbWl1bS9tb2NrLXNjcmVlbmVudW1lcmF0aW9uLmpzCisrKyBiL0xheW91dFRl
c3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL21v
Y2stc2NyZWVuZW51bWVyYXRpb24uanMKQEAgLTQ0LDExICs0NCwyMiBAQCB2YXIgU2NyZWVuRW51
bWVyYXRpb25UZXN0ID0gKCgpID0+IHsKICAgICB9CiAKICAgICBhc3luYyBnZXREaXNwbGF5cygp
IHsKKyAgICAgIGlmICghdGhpcy5zdWNjZXNzXykKKyAgICAgICAgcmV0dXJuIFByb21pc2UucmVz
b2x2ZSh7IHJlc3VsdDogdW5kZWZpbmVkLCB9KTsKKyAgICAgIGxldCB2YWx1ZSA9IG5ldyBibGlu
ay5tb2pvbS5EaXNwbGF5cygpOworICAgICAgdmFsdWUuZGlzcGxheXMgPSB0aGlzLmRpc3BsYXlz
XzsKKyAgICAgIHZhbHVlLmludGVybmFsSWQgPSB0aGlzLmludGVybmFsSWRfOworICAgICAgdmFs
dWUucHJpbWFyeUlkID0gdGhpcy5wcmltYXJ5SWRfOworICAgICAgcmV0dXJuIFByb21pc2UucmVz
b2x2ZSh7IHJlc3VsdDogdmFsdWUsIH0pOworICAgIH0KKworICAgIGFzeW5jIGhhc011bHRpcGxl
RGlzcGxheXMoKSB7CisgICAgICBpZiAoIXRoaXMuc3VjY2Vzc18pCisgICAgICAgIHJldHVybiBQ
cm9taXNlLnJlc29sdmUoeyByZXN1bHQ6IGJsaW5rLm1vam9tLk11bHRpcGxlRGlzcGxheXMua0Vy
cm9yIH0pOwogICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh7Ci0gICAgICAgIGRpc3BsYXlz
OiB0aGlzLmRpc3BsYXlzXywKLSAgICAgICAgaW50ZXJuYWxJZDogdGhpcy5pbnRlcm5hbElkXywK
LSAgICAgICAgcHJpbWFyeUlkOiB0aGlzLnByaW1hcnlJZF8sCi0gICAgICAgIHN1Y2Nlc3M6IHRo
aXMuc3VjY2Vzc18sCisgICAgICAgIHJlc3VsdDogdGhpcy5kaXNwbGF5c18ubGVuZ3RoID4gMQor
ICAgICAgICAgICAgPyBibGluay5tb2pvbS5NdWx0aXBsZURpc3BsYXlzLmtUcnVlCisgICAgICAg
ICAgICA6IGJsaW5rLm1vam9tLk11bHRpcGxlRGlzcGxheXMua0ZhbHNlLAogICAgICAgfSk7CiAg
ICAgfQogICB9CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRm
b3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS9tb2NrLXNtcy1yZWNlaXZlci5qcyBiL0xheW91
dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVt
L21vY2stc21zLXJlY2VpdmVyLmpzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNGFh
OWE4NmYyYzhhMTUzMDNmOTZjYzk4NTliMmVjMTQ2ZWIyZjU4Li4wMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWIt
cGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL21vY2stc21zLXJlY2VpdmVyLmpzCisr
KyAvZGV2L251bGwKQEAgLTEsNTEgKzAsMCBAQAotJ3VzZSBzdHJpY3QnOwotCi1jb25zdCBTbXNQ
cm92aWRlciA9ICgoKSA9PiB7Ci0KLSAgY2xhc3MgTW9ja1Ntc1JlY2VpdmVyIHsKLQotICAgIGNv
bnN0cnVjdG9yKCkgewotICAgICAgdGhpcy5tb2pvUmVjZWl2ZXJfID0gbmV3IGJsaW5rLm1vam9t
LlNtc1JlY2VpdmVyUmVjZWl2ZXIodGhpcyk7Ci0KLSAgICAgIHRoaXMuaW50ZXJjZXB0b3JfID0K
LSAgICAgICAgICBuZXcgTW9qb0ludGVyZmFjZUludGVyY2VwdG9yKGJsaW5rLm1vam9tLlNtc1Jl
Y2VpdmVyLiRpbnRlcmZhY2VOYW1lKTsKLQotICAgICAgdGhpcy5pbnRlcmNlcHRvcl8ub25pbnRl
cmZhY2VyZXF1ZXN0ID0gKGUpID0+IHsKLSAgICAgICAgdGhpcy5tb2pvUmVjZWl2ZXJfLiQuYmlu
ZEhhbmRsZShlLmhhbmRsZSk7Ci0gICAgICB9Ci0gICAgICB0aGlzLmludGVyY2VwdG9yXy5zdGFy
dCgpOwotCi0gICAgICB0aGlzLnJldHVyblZhbHVlc18gPSB7fTsKLSAgICB9Ci0KLSAgICBhc3lu
YyByZWNlaXZlKCkgewotICAgICAgbGV0IGNhbGwgPSB0aGlzLnJldHVyblZhbHVlc18ucmVjZWl2
ZSA/Ci0gICAgICAgICAgdGhpcy5yZXR1cm5WYWx1ZXNfLnJlY2VpdmUuc2hpZnQoKSA6IG51bGw7
Ci0gICAgICBpZiAoIWNhbGwpCi0gICAgICAgIHJldHVybjsKLSAgICAgIHJldHVybiBjYWxsKCk7
Ci0gICAgfQotCi0gICAgYXN5bmMgYWJvcnQoKSB7fTsKLQotICAgIHB1c2hSZXR1cm5WYWx1ZXNG
b3JUZXN0aW5nKGNhbGxOYW1lLCB2YWx1ZSkgewotICAgICAgdGhpcy5yZXR1cm5WYWx1ZXNfW2Nh
bGxOYW1lXSA9IHRoaXMucmV0dXJuVmFsdWVzX1tjYWxsTmFtZV0gfHwgW107Ci0gICAgICB0aGlz
LnJldHVyblZhbHVlc19bY2FsbE5hbWVdLnB1c2godmFsdWUpOwotICAgICAgcmV0dXJuIHRoaXM7
Ci0gICAgfQotICB9Ci0KLSAgY29uc3QgbW9ja1Ntc1JlY2VpdmVyID0gbmV3IE1vY2tTbXNSZWNl
aXZlcigpOwotCi0gIGNsYXNzIFNtc1Byb3ZpZGVyQ2hyb21pdW0gewotICAgIGNvbnN0cnVjdG9y
KCkgewotICAgICAgT2JqZWN0LmZyZWV6ZSh0aGlzKTsgLy8gTWFrZSBpdCBpbW11dGFibGUuCi0g
ICAgfQotCi0gICAgcHVzaFJldHVyblZhbHVlc0ZvclRlc3RpbmcoY2FsbE5hbWUsIGNhbGxiYWNr
KSB7Ci0gICAgICBtb2NrU21zUmVjZWl2ZXIucHVzaFJldHVyblZhbHVlc0ZvclRlc3RpbmcoY2Fs
bE5hbWUsIGNhbGxiYWNrKTsKLSAgICB9Ci0gIH0KLQotICByZXR1cm4gU21zUHJvdmlkZXJDaHJv
bWl1bTsKLX0pKCk7CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBs
YXRmb3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS9tb2pvX2JpbmRpbmdzLmpzIGIvTGF5b3V0
VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0v
bW9qb19iaW5kaW5ncy5qcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzBmNmNhZDVl
NWYwNmY0ZjY0YTBmZDRjZGNkNjkzZmNlYTEyYmI3OC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMAotLS0gYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRm
b3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS9tb2pvX2JpbmRpbmdzLmpzCisrKyAvZGV2L251
bGwKQEAgLTEsNTE0NiArMCwwIEBACi0vLyBDb3B5cmlnaHQgMjAxNyBUaGUgQ2hyb21pdW0gQXV0
aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlz
IGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGlu
IHRoZSBMSUNFTlNFIGZpbGUuCi0KLSd1c2Ugc3RyaWN0JzsKLQotaWYgKCh0eXBlb2YgbW9qbyAh
PT0gJ3VuZGVmaW5lZCcpICYmIG1vam8uYmluZGluZ3NMaWJyYXJ5SW5pdGlhbGl6ZWQpIHsKLSAg
dGhyb3cgbmV3IEVycm9yKCdUaGUgTW9qbyBiaW5kaW5ncyBsaWJyYXJ5IGhhcyBiZWVuIGluaXRp
YWxpemVkLicpOwotfQotCi12YXIgbW9qbyA9IG1vam8gfHwge307Ci1tb2pvLmJpbmRpbmdzTGli
cmFyeUluaXRpYWxpemVkID0gdHJ1ZTsKLQotbW9qby5pbnRlcm5hbCA9IG1vam8uaW50ZXJuYWwg
fHwge307Ci0KLW1vam8uY29uZmlnID0gbW9qby5jb25maWcgfHwge307Ci1pZiAodHlwZW9mIG1v
am8uY29uZmlnLmdsb2JhbCA9PT0gJ3VuZGVmaW5lZCcpIHsKLSAgbW9qby5jb25maWcuZ2xvYmFs
ID0gdGhpczsKLX0KLQotaWYgKHR5cGVvZiBtb2pvLmNvbmZpZy5hdXRvTG9hZE1vam9tRGVwcyA9
PT0gJ3VuZGVmaW5lZCcpIHsKLSAgLy8gV2hldGhlciB0byBhdXRvbWF0aWNhbGx5IGxvYWQgbW9q
b20gZGVwZW5kZW5jaWVzLgotICAvLyBGb3IgZXhhbXBsZSwgaWYgZm9vLm1vam9tIGltcG9ydHMg
YmFyLm1vam9tLCB8YXV0b0xvYWRNb2pvbURlcHN8IHNldCB0bwotICAvLyB0cnVlIG1lYW5zIHRo
YXQgbG9hZGluZyBmb28ubW9qb20uanMgd2lsbCBpbnNlcnQgYSA8c2NyaXB0PiB0YWcgdG8gbG9h
ZAotICAvLyBiYXIubW9qb20uanMsIGlmIGl0IGhhc24ndCBiZWVuIGxvYWRlZC4KLSAgLy8KLSAg
Ly8gVGhlIFVSTCBvZiBiYXIubW9qb20uanMgaXMgZGV0ZXJtaW5lZCBieSB0aGUgcmVsYXRpdmUg
cGF0aCBvZiBiYXIubW9qb20KLSAgLy8gKHJlbGF0aXZlIHRvIHRoZSBwb3NpdGlvbiBvZiBmb28u
bW9qb20gYXQgYnVpbGQgdGltZSkgYW5kIHRoZSBVUkwgb2YKLSAgLy8gZm9vLm1vam9tLmpzLiBG
b3IgZXhtcGxlLCBpZiBhdCBidWlsZCB0aW1lIHRoZSB0d28gbW9qb20gZmlsZXMgYXJlCi0gIC8v
IGxvY2F0ZWQgYXQ6Ci0gIC8vICAgYS9iL2MvZm9vLm1vam9tCi0gIC8vICAgYS9iL2QvYmFyLm1v
am9tCi0gIC8vIGFuZCB0aGUgVVJMIG9mIGZvby5tb2pvbS5qcyBpczoKLSAgLy8gICBodHRwOi8v
ZXhhbXBsZS5vcmcvc2NyaXB0cy9iL2MvZm9vLm1vam9tLmpzCi0gIC8vIHRoZW4gdGhlIFVSTCBv
ZiBiYXIubW9qb20uanMgd2lsbCBiZToKLSAgLy8gICBodHRwOi8vZXhhbXBsZS5vcmcvc2NyaXB0
cy9iL2QvYmFyLm1vam9tLmpzCi0gIC8vCi0gIC8vIElmIHlvdSB3b3VsZCBsaWtlIGJhci5tb2pv
bS5qcyB0byBsaXZlIGF0IGEgZGlmZmVyZW50IGxvY2F0aW9uLCB5b3UgbmVlZAotICAvLyB0byB0
dXJuIG9mZiB8YXV0b0xvYWRNb2pvbURlcHN8IGJlZm9yZSBsb2FkaW5nIGZvby5tb2pvbS5qcywg
YW5kIG1hbnVhbGx5Ci0gIC8vIGxvYWQgYmFyLm1vam9tLmpzIHlvdXJzZWxmLiBTaW1pbGFybHks
IHlvdSBuZWVkIHRvIHR1cm4gb2ZmIHRoZSBvcHRpb24gaWYKLSAgLy8geW91IG1lcmdlIGJhci5t
b2pvbS5qcyBhbmQgZm9vLm1vam9tLmpzIGludG8gYSBzaW5nbGUgZmlsZS4KLSAgLy8KLSAgLy8g
UGVyZm9ybWFuY2UgdGlwOiBBdm9pZCBsb2FkaW5nIHRoZSBzYW1lIG1vam9tLmpzIGZpbGUgbXVs
dGlwbGUgdGltZXMuCi0gIC8vIEFzc3VtZSB0aGF0IHxhdXRvTG9hZE1vam9tRGVwc3wgaXMgc2V0
IHRvIHRydWUsCi0gIC8vCi0gIC8vIDwhLS0KLSAgLy8gKFRoaXMgY29tbWVudCB0YWcgaXMgbmVj
ZXNzYXJ5IG9uIElPUyB0byBhdm9pZCBpbnRlcnByZXRpbmcgdGhlIGNsb3NpbmcKLSAgLy8gc2Ny
aXB0IHRhZ3MgaW4gdGhlIGV4YW1wbGUuKQotICAvLwotICAvLyBObyBkdXBsaWNhdGUgbG9hZGlu
ZzsgcmVjb21tZW5kZWQ6Ci0gIC8vIDxzY3JpcHQgc3JjPSJodHRwOi8vZXhhbXBsZS5vcmcvc2Ny
aXB0cy9iL2MvZm9vLm1vam9tLmpzIj48L3NjcmlwdD4KLSAgLy8KLSAgLy8gTm8gZHVwbGljYXRl
IGxvYWRpbmcsIGFsdGhvdWdoIHVubmVjZXNzYXJ5OgotICAvLyA8c2NyaXB0IHNyYz0iaHR0cDov
L2V4YW1wbGUub3JnL3NjcmlwdHMvYi9kL2Jhci5tb2pvbS5qcyI+PC9zY3JpcHQ+Ci0gIC8vIDxz
Y3JpcHQgc3JjPSJodHRwOi8vZXhhbXBsZS5vcmcvc2NyaXB0cy9iL2MvZm9vLm1vam9tLmpzIj48
L3NjcmlwdD4KLSAgLy8KLSAgLy8gTG9hZCBiYXIubW9qb20uanMgdHdpY2U7IHNob3VsZCBiZSBh
dm9pZGVkOgotICAvLyA8c2NyaXB0IHNyYz0iaHR0cDovL2V4YW1wbGUub3JnL3NjcmlwdHMvYi9j
L2Zvby5tb2pvbS5qcyI+PC9zY3JpcHQ+Ci0gIC8vIDxzY3JpcHQgc3JjPSJodHRwOi8vZXhhbXBs
ZS5vcmcvc2NyaXB0cy9iL2QvYmFyLm1vam9tLmpzIj48L3NjcmlwdD4KLSAgLy8KLSAgLy8gLS0+
Ci0gIG1vam8uY29uZmlnLmF1dG9Mb2FkTW9qb21EZXBzID0gdHJ1ZTsKLX0KLQotKGZ1bmN0aW9u
KCkgewotICB2YXIgaW50ZXJuYWwgPSBtb2pvLmludGVybmFsOwotICB2YXIgY29uZmlnID0gbW9q
by5jb25maWc7Ci0KLSAgdmFyIExvYWRTdGF0ZSA9IHsKLSAgICBQRU5ESU5HX0xPQUQ6IDEsCi0g
ICAgTE9BREVEOiAyCi0gIH07Ci0KLSAgdmFyIG1vam9tUmVnaXN0cnkgPSBuZXcgTWFwKCk7Ci0K
LSAgZnVuY3Rpb24gZXhwb3NlTmFtZXNwYWNlKG5hbWVzcGFjZSkgewotICAgIHZhciBjdXJyZW50
ID0gY29uZmlnLmdsb2JhbDsKLSAgICB2YXIgcGFydHMgPSBuYW1lc3BhY2Uuc3BsaXQoJy4nKTsK
LQotICAgIGZvciAodmFyIHBhcnQ7IHBhcnRzLmxlbmd0aCAmJiAocGFydCA9IHBhcnRzLnNoaWZ0
KCkpOykgewotICAgICAgaWYgKCFjdXJyZW50W3BhcnRdKSB7Ci0gICAgICAgIGN1cnJlbnRbcGFy
dF0gPSB7fTsKLSAgICAgIH0KLSAgICAgIGN1cnJlbnQgPSBjdXJyZW50W3BhcnRdOwotICAgIH0K
LQotICAgIHJldHVybiBjdXJyZW50OwotICB9Ci0KLSAgZnVuY3Rpb24gaXNNb2pvbVBlbmRpbmdM
b2FkKGlkKSB7Ci0gICAgcmV0dXJuIG1vam9tUmVnaXN0cnkuZ2V0KGlkKSA9PT0gTG9hZFN0YXRl
LlBFTkRJTkdfTE9BRDsKLSAgfQotCi0gIGZ1bmN0aW9uIGlzTW9qb21Mb2FkZWQoaWQpIHsKLSAg
ICByZXR1cm4gbW9qb21SZWdpc3RyeS5nZXQoaWQpID09PSBMb2FkU3RhdGUuTE9BREVEOwotICB9
Ci0KLSAgZnVuY3Rpb24gbWFya01vam9tUGVuZGluZ0xvYWQoaWQpIHsKLSAgICBpZiAoaXNNb2pv
bUxvYWRlZChpZCkpIHsKLSAgICAgIHRocm93IG5ldyBFcnJvcignVGhlIGZvbGxvd2luZyBtb2pv
bSBmaWxlIGhhcyBiZWVuIGxvYWRlZDogJyArIGlkKTsKLSAgICB9Ci0KLSAgICBtb2pvbVJlZ2lz
dHJ5LnNldChpZCwgTG9hZFN0YXRlLlBFTkRJTkdfTE9BRCk7Ci0gIH0KLQotICBmdW5jdGlvbiBt
YXJrTW9qb21Mb2FkZWQoaWQpIHsKLSAgICBtb2pvbVJlZ2lzdHJ5LnNldChpZCwgTG9hZFN0YXRl
LkxPQURFRCk7Ci0gIH0KLQotICBmdW5jdGlvbiBsb2FkTW9qb21JZk5lY2Vzc2FyeShpZCwgcmVs
YXRpdmVQYXRoKSB7Ci0gICAgaWYgKG1vam9tUmVnaXN0cnkuaGFzKGlkKSkgewotICAgICAgcmV0
dXJuOwotICAgIH0KLQotICAgIGlmIChjb25maWcuZ2xvYmFsLmRvY3VtZW50ID09PSB1bmRlZmlu
ZWQpIHsKLSAgICAgIHRocm93IG5ldyBFcnJvcigKLSAgICAgICAgICAnTW9qb20gZGVwZW5kZW5j
eSBhdXRvbG9hZGluZyBpcyBub3QgaW1wbGVtZW50ZWQgaW4gd29ya2Vycy4gJyArCi0gICAgICAg
ICAgJ1BsZWFzZSBzZWUgY29uZmlnIHZhcmlhYmxlIG1vam8uY29uZmlnLmF1dG9Mb2FkTW9qb21E
ZXBzIGZvciBtb3JlICcgKwotICAgICAgICAgICdkZXRhaWxzLicpOwotICAgIH0KLQotICAgIG1h
cmtNb2pvbVBlbmRpbmdMb2FkKGlkKTsKLSAgICB2YXIgdXJsID0gbmV3IFVSTChyZWxhdGl2ZVBh
dGgsIGRvY3VtZW50LmN1cnJlbnRTY3JpcHQuc3JjKS5ocmVmOwotICAgIGNvbmZpZy5nbG9iYWwu
ZG9jdW1lbnQud3JpdGUoJzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9IicgKwot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsICsgJyI+PCcgKyAnL3NjcmlwdD4n
KTsKLSAgfQotCi0gIGludGVybmFsLmV4cG9zZU5hbWVzcGFjZSA9IGV4cG9zZU5hbWVzcGFjZTsK
LSAgaW50ZXJuYWwuaXNNb2pvbVBlbmRpbmdMb2FkID0gaXNNb2pvbVBlbmRpbmdMb2FkOwotICBp
bnRlcm5hbC5pc01vam9tTG9hZGVkID0gaXNNb2pvbUxvYWRlZDsKLSAgaW50ZXJuYWwubWFya01v
am9tUGVuZGluZ0xvYWQgPSBtYXJrTW9qb21QZW5kaW5nTG9hZDsKLSAgaW50ZXJuYWwubWFya01v
am9tTG9hZGVkID0gbWFya01vam9tTG9hZGVkOwotICBpbnRlcm5hbC5sb2FkTW9qb21JZk5lY2Vz
c2FyeSA9IGxvYWRNb2pvbUlmTmVjZXNzYXJ5OwotfSkoKTsKLS8vIENvcHlyaWdodCAyMDE3IFRo
ZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMg
c291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBi
ZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLQotKGZ1bmN0aW9uKCkgewotICB2YXIg
aW50ZXJuYWwgPSBtb2pvLmludGVybmFsOwotCi0gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0g
IC8vIHxvdXRwdXR8IGNvdWxkIGJlIGFuIGludGVyZmFjZSBwb2ludGVyLCBJbnRlcmZhY2VQdHJJ
bmZvIG9yCi0gIC8vIEFzc29jaWF0ZWRJbnRlcmZhY2VQdHJJbmZvLgotICBmdW5jdGlvbiBtYWtl
UmVxdWVzdChvdXRwdXQpIHsKLSAgICBpZiAob3V0cHV0IGluc3RhbmNlb2YgbW9qby5Bc3NvY2lh
dGVkSW50ZXJmYWNlUHRySW5mbykgewotICAgICAgdmFyIHtoYW5kbGUwLCBoYW5kbGUxfSA9IGlu
dGVybmFsLmNyZWF0ZVBhaXJQZW5kaW5nQXNzb2NpYXRpb24oKTsKLSAgICAgIG91dHB1dC5pbnRl
cmZhY2VFbmRwb2ludEhhbmRsZSA9IGhhbmRsZTA7Ci0gICAgICBvdXRwdXQudmVyc2lvbiA9IDA7
Ci0KLSAgICAgIHJldHVybiBuZXcgbW9qby5Bc3NvY2lhdGVkSW50ZXJmYWNlUmVxdWVzdChoYW5k
bGUxKTsKLSAgICB9Ci0KLSAgICBpZiAob3V0cHV0IGluc3RhbmNlb2YgbW9qby5JbnRlcmZhY2VQ
dHJJbmZvKSB7Ci0gICAgICB2YXIgcGlwZSA9IE1vam8uY3JlYXRlTWVzc2FnZVBpcGUoKTsKLSAg
ICAgIG91dHB1dC5oYW5kbGUgPSBwaXBlLmhhbmRsZTA7Ci0gICAgICBvdXRwdXQudmVyc2lvbiA9
IDA7Ci0KLSAgICAgIHJldHVybiBuZXcgbW9qby5JbnRlcmZhY2VSZXF1ZXN0KHBpcGUuaGFuZGxl
MSk7Ci0gICAgfQotCi0gICAgdmFyIHBpcGUgPSBNb2pvLmNyZWF0ZU1lc3NhZ2VQaXBlKCk7Ci0g
ICAgb3V0cHV0LnB0ci5iaW5kKG5ldyBtb2pvLkludGVyZmFjZVB0ckluZm8ocGlwZS5oYW5kbGUw
LCAwKSk7Ci0gICAgcmV0dXJuIG5ldyBtb2pvLkludGVyZmFjZVJlcXVlc3QocGlwZS5oYW5kbGUx
KTsKLSAgfQotCi0gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0gIC8vIE9wZXJhdGlvbnMgdXNl
ZCB0byBzZXR1cC9jb25maWd1cmUgYW4gaW50ZXJmYWNlIHBvaW50ZXIuIEV4cG9zZWQgYXMgdGhl
Ci0gIC8vIHxwdHJ8IGZpZWxkIG9mIGdlbmVyYXRlZCBpbnRlcmZhY2UgcG9pbnRlciBjbGFzc2Vz
LgotICAvLyB8cHRySW5mb09ySGFuZGxlfCBjb3VsZCBiZSBvbWl0dGVkIGFuZCBwYXNzZWQgaW50
byBiaW5kKCkgbGF0ZXIuCi0gIGZ1bmN0aW9uIEludGVyZmFjZVB0ckNvbnRyb2xsZXIoaW50ZXJm
YWNlVHlwZSwgcHRySW5mb09ySGFuZGxlKSB7Ci0gICAgdGhpcy52ZXJzaW9uID0gMDsKLQotICAg
IHRoaXMuaW50ZXJmYWNlVHlwZV8gPSBpbnRlcmZhY2VUeXBlOwotICAgIHRoaXMucm91dGVyXyA9
IG51bGw7Ci0gICAgdGhpcy5pbnRlcmZhY2VFbmRwb2ludENsaWVudF8gPSBudWxsOwotICAgIHRo
aXMucHJveHlfID0gbnVsbDsKLQotICAgIC8vIHxyb3V0ZXJffCBhbmQgfGludGVyZmFjZUVuZHBv
aW50Q2xpZW50X3wgYXJlIGxhemlseSBpbml0aWFsaXplZC4KLSAgICAvLyB8aGFuZGxlX3wgaXMg
dmFsaWQgYmV0d2VlbiBiaW5kKCkgYW5kCi0gICAgLy8gdGhlIGluaXRpYWxpemF0aW9uIG9mIHxy
b3V0ZXJffCBhbmQgfGludGVyZmFjZUVuZHBvaW50Q2xpZW50X3wuCi0gICAgdGhpcy5oYW5kbGVf
ID0gbnVsbDsKLQotICAgIGlmIChwdHJJbmZvT3JIYW5kbGUpCi0gICAgICB0aGlzLmJpbmQocHRy
SW5mb09ySGFuZGxlKTsKLSAgfQotCi0gIEludGVyZmFjZVB0ckNvbnRyb2xsZXIucHJvdG90eXBl
LmJpbmQgPSBmdW5jdGlvbihwdHJJbmZvT3JIYW5kbGUpIHsKLSAgICB0aGlzLnJlc2V0KCk7Ci0K
LSAgICBpZiAocHRySW5mb09ySGFuZGxlIGluc3RhbmNlb2YgbW9qby5JbnRlcmZhY2VQdHJJbmZv
KSB7Ci0gICAgICB0aGlzLnZlcnNpb24gPSBwdHJJbmZvT3JIYW5kbGUudmVyc2lvbjsKLSAgICAg
IHRoaXMuaGFuZGxlXyA9IHB0ckluZm9PckhhbmRsZS5oYW5kbGU7Ci0gICAgfSBlbHNlIHsKLSAg
ICAgIHRoaXMuaGFuZGxlXyA9IHB0ckluZm9PckhhbmRsZTsKLSAgICB9Ci0gIH07Ci0KLSAgSW50
ZXJmYWNlUHRyQ29udHJvbGxlci5wcm90b3R5cGUuaXNCb3VuZCA9IGZ1bmN0aW9uKCkgewotICAg
IHJldHVybiB0aGlzLmludGVyZmFjZUVuZHBvaW50Q2xpZW50XyAhPT0gbnVsbCB8fCB0aGlzLmhh
bmRsZV8gIT09IG51bGw7Ci0gIH07Ci0KLSAgLy8gQWx0aG91Z2ggdXNlcnMgY291bGQganVzdCBk
aXNjYXJkIHRoZSBvYmplY3QsIHJlc2V0KCkgY2xvc2VzIHRoZSBwaXBlCi0gIC8vIGltbWVkaWF0
ZWx5LgotICBJbnRlcmZhY2VQdHJDb250cm9sbGVyLnByb3RvdHlwZS5yZXNldCA9IGZ1bmN0aW9u
KCkgewotICAgIHRoaXMudmVyc2lvbiA9IDA7Ci0gICAgaWYgKHRoaXMuaW50ZXJmYWNlRW5kcG9p
bnRDbGllbnRfKSB7Ci0gICAgICB0aGlzLmludGVyZmFjZUVuZHBvaW50Q2xpZW50Xy5jbG9zZSgp
OwotICAgICAgdGhpcy5pbnRlcmZhY2VFbmRwb2ludENsaWVudF8gPSBudWxsOwotICAgIH0KLSAg
ICBpZiAodGhpcy5yb3V0ZXJfKSB7Ci0gICAgICB0aGlzLnJvdXRlcl8uY2xvc2UoKTsKLSAgICAg
IHRoaXMucm91dGVyXyA9IG51bGw7Ci0KLSAgICAgIHRoaXMucHJveHlfID0gbnVsbDsKLSAgICB9
Ci0gICAgaWYgKHRoaXMuaGFuZGxlXykgewotICAgICAgdGhpcy5oYW5kbGVfLmNsb3NlKCk7Ci0g
ICAgICB0aGlzLmhhbmRsZV8gPSBudWxsOwotICAgIH0KLSAgfTsKLQotICBJbnRlcmZhY2VQdHJD
b250cm9sbGVyLnByb3RvdHlwZS5yZXNldFdpdGhSZWFzb24gPSBmdW5jdGlvbihyZWFzb24pIHsK
LSAgICBpZiAodGhpcy5pc0JvdW5kKCkpIHsKLSAgICAgIHRoaXMuY29uZmlndXJlUHJveHlJZk5l
Y2Vzc2FyeV8oKTsKLSAgICAgIHRoaXMuaW50ZXJmYWNlRW5kcG9pbnRDbGllbnRfLmNsb3NlKHJl
YXNvbik7Ci0gICAgICB0aGlzLmludGVyZmFjZUVuZHBvaW50Q2xpZW50XyA9IG51bGw7Ci0gICAg
fQotICAgIHRoaXMucmVzZXQoKTsKLSAgfTsKLQotICBJbnRlcmZhY2VQdHJDb250cm9sbGVyLnBy
b3RvdHlwZS5zZXRDb25uZWN0aW9uRXJyb3JIYW5kbGVyID0gZnVuY3Rpb24oCi0gICAgICBjYWxs
YmFjaykgewotICAgIGlmICghdGhpcy5pc0JvdW5kKCkpCi0gICAgICB0aHJvdyBuZXcgRXJyb3Io
IkNhbm5vdCBzZXQgY29ubmVjdGlvbiBlcnJvciBoYW5kbGVyIGlmIG5vdCBib3VuZC4iKTsKLQot
ICAgIHRoaXMuY29uZmlndXJlUHJveHlJZk5lY2Vzc2FyeV8oKTsKLSAgICB0aGlzLmludGVyZmFj
ZUVuZHBvaW50Q2xpZW50Xy5zZXRDb25uZWN0aW9uRXJyb3JIYW5kbGVyKGNhbGxiYWNrKTsKLSAg
fTsKLQotICBJbnRlcmZhY2VQdHJDb250cm9sbGVyLnByb3RvdHlwZS5wYXNzSW50ZXJmYWNlID0g
ZnVuY3Rpb24oKSB7Ci0gICAgdmFyIHJlc3VsdDsKLSAgICBpZiAodGhpcy5yb3V0ZXJfKSB7Ci0g
ICAgICAvLyBUT0RPKHl6c2hlbik6IEZpeCBSb3V0ZXIgaW50ZXJmYWNlIHRvIHN1cHBvcnQgZXh0
cmFjdGluZyBoYW5kbGUuCi0gICAgICByZXN1bHQgPSBuZXcgbW9qby5JbnRlcmZhY2VQdHJJbmZv
KAotICAgICAgICAgIHRoaXMucm91dGVyXy5jb25uZWN0b3JfLmhhbmRsZV8sIHRoaXMudmVyc2lv
bik7Ci0gICAgICB0aGlzLnJvdXRlcl8uY29ubmVjdG9yXy5oYW5kbGVfID0gbnVsbDsKLSAgICB9
IGVsc2UgewotICAgICAgLy8gVGhpcyBhbHNvIGhhbmRsZXMgdGhlIGNhc2Ugd2hlbiB0aGlzIG9i
amVjdCBpcyBub3QgYm91bmQuCi0gICAgICByZXN1bHQgPSBuZXcgbW9qby5JbnRlcmZhY2VQdHJJ
bmZvKHRoaXMuaGFuZGxlXywgdGhpcy52ZXJzaW9uKTsKLSAgICAgIHRoaXMuaGFuZGxlXyA9IG51
bGw7Ci0gICAgfQotCi0gICAgdGhpcy5yZXNldCgpOwotICAgIHJldHVybiByZXN1bHQ7Ci0gIH07
Ci0KLSAgSW50ZXJmYWNlUHRyQ29udHJvbGxlci5wcm90b3R5cGUuZ2V0UHJveHkgPSBmdW5jdGlv
bigpIHsKLSAgICB0aGlzLmNvbmZpZ3VyZVByb3h5SWZOZWNlc3NhcnlfKCk7Ci0gICAgcmV0dXJu
IHRoaXMucHJveHlfOwotICB9OwotCi0gIEludGVyZmFjZVB0ckNvbnRyb2xsZXIucHJvdG90eXBl
LmNvbmZpZ3VyZVByb3h5SWZOZWNlc3NhcnlfID0gZnVuY3Rpb24oKSB7Ci0gICAgaWYgKCF0aGlz
LmhhbmRsZV8pCi0gICAgICByZXR1cm47Ci0KLSAgICB0aGlzLnJvdXRlcl8gPSBuZXcgaW50ZXJu
YWwuUm91dGVyKHRoaXMuaGFuZGxlXywgdHJ1ZSk7Ci0gICAgdGhpcy5oYW5kbGVfID0gbnVsbDsK
LQotICAgIHRoaXMuaW50ZXJmYWNlRW5kcG9pbnRDbGllbnRfID0gbmV3IGludGVybmFsLkludGVy
ZmFjZUVuZHBvaW50Q2xpZW50KAotICAgICAgICB0aGlzLnJvdXRlcl8uY3JlYXRlTG9jYWxFbmRw
b2ludEhhbmRsZShpbnRlcm5hbC5rTWFzdGVySW50ZXJmYWNlSWQpKTsKLQotICAgIHRoaXMuaW50
ZXJmYWNlRW5kcG9pbnRDbGllbnRfIC5zZXRQYXlsb2FkVmFsaWRhdG9ycyhbCi0gICAgICAgIHRo
aXMuaW50ZXJmYWNlVHlwZV8udmFsaWRhdGVSZXNwb25zZV0pOwotICAgIHRoaXMucHJveHlfID0g
bmV3IHRoaXMuaW50ZXJmYWNlVHlwZV8ucHJveHlDbGFzcygKLSAgICAgICAgdGhpcy5pbnRlcmZh
Y2VFbmRwb2ludENsaWVudF8pOwotICB9OwotCi0gIEludGVyZmFjZVB0ckNvbnRyb2xsZXIucHJv
dG90eXBlLnF1ZXJ5VmVyc2lvbiA9IGZ1bmN0aW9uKCkgewotICAgIGZ1bmN0aW9uIG9uUXVlcnlW
ZXJzaW9uKHZlcnNpb24pIHsKLSAgICAgIHRoaXMudmVyc2lvbiA9IHZlcnNpb247Ci0gICAgICBy
ZXR1cm4gdmVyc2lvbjsKLSAgICB9Ci0KLSAgICB0aGlzLmNvbmZpZ3VyZVByb3h5SWZOZWNlc3Nh
cnlfKCk7Ci0gICAgcmV0dXJuIHRoaXMuaW50ZXJmYWNlRW5kcG9pbnRDbGllbnRfLnF1ZXJ5VmVy
c2lvbigpLnRoZW4oCi0gICAgICBvblF1ZXJ5VmVyc2lvbi5iaW5kKHRoaXMpKTsKLSAgfTsKLQot
ICBJbnRlcmZhY2VQdHJDb250cm9sbGVyLnByb3RvdHlwZS5yZXF1aXJlVmVyc2lvbiA9IGZ1bmN0
aW9uKHZlcnNpb24pIHsKLSAgICB0aGlzLmNvbmZpZ3VyZVByb3h5SWZOZWNlc3NhcnlfKCk7Ci0K
LSAgICBpZiAodGhpcy52ZXJzaW9uID49IHZlcnNpb24pIHsKLSAgICAgIHJldHVybjsKLSAgICB9
Ci0gICAgdGhpcy52ZXJzaW9uID0gdmVyc2lvbjsKLSAgICB0aGlzLmludGVyZmFjZUVuZHBvaW50
Q2xpZW50Xy5yZXF1aXJlVmVyc2lvbih2ZXJzaW9uKTsKLSAgfTsKLQotICAvLyAtLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0KLQotICAvLyB8cmVxdWVzdHwgY291bGQgYmUgb21pdHRlZCBhbmQgcGFzc2VkIGlu
dG8gYmluZCgpIGxhdGVyLgotICAvLwotICAvLyBFeGFtcGxlOgotICAvLwotICAvLyAgICAvLyBG
b29JbXBsIGltcGxlbWVudHMgbW9qb20uRm9vLgotICAvLyAgICBmdW5jdGlvbiBGb29JbXBsKCkg
eyAuLi4gfQotICAvLyAgICBGb29JbXBsLnByb3RvdHlwZS5mb29NZXRob2QxID0gZnVuY3Rpb24o
KSB7IC4uLiB9Ci0gIC8vICAgIEZvb0ltcGwucHJvdG90eXBlLmZvb01ldGhvZDIgPSBmdW5jdGlv
bigpIHsgLi4uIH0KLSAgLy8KLSAgLy8gICAgdmFyIGZvb1B0ciA9IG5ldyBtb2pvbS5Gb29QdHIo
KTsKLSAgLy8gICAgdmFyIHJlcXVlc3QgPSBtYWtlUmVxdWVzdChmb29QdHIpOwotICAvLyAgICB2
YXIgYmluZGluZyA9IG5ldyBCaW5kaW5nKG1vam9tLkZvbywgbmV3IEZvb0ltcGwoKSwgcmVxdWVz
dCk7Ci0gIC8vICAgIGZvb1B0ci5mb29NZXRob2QxKCk7Ci0gIGZ1bmN0aW9uIEJpbmRpbmcoaW50
ZXJmYWNlVHlwZSwgaW1wbCwgcmVxdWVzdE9ySGFuZGxlKSB7Ci0gICAgdGhpcy5pbnRlcmZhY2VU
eXBlXyA9IGludGVyZmFjZVR5cGU7Ci0gICAgdGhpcy5pbXBsXyA9IGltcGw7Ci0gICAgdGhpcy5y
b3V0ZXJfID0gbnVsbDsKLSAgICB0aGlzLmludGVyZmFjZUVuZHBvaW50Q2xpZW50XyA9IG51bGw7
Ci0gICAgdGhpcy5zdHViXyA9IG51bGw7Ci0KLSAgICBpZiAocmVxdWVzdE9ySGFuZGxlKQotICAg
ICAgdGhpcy5iaW5kKHJlcXVlc3RPckhhbmRsZSk7Ci0gIH0KLQotICBCaW5kaW5nLnByb3RvdHlw
ZS5pc0JvdW5kID0gZnVuY3Rpb24oKSB7Ci0gICAgcmV0dXJuIHRoaXMucm91dGVyXyAhPT0gbnVs
bDsKLSAgfTsKLQotICBCaW5kaW5nLnByb3RvdHlwZS5jcmVhdGVJbnRlcmZhY2VQdHJBbmRCaW5k
ID0gZnVuY3Rpb24oKSB7Ci0gICAgdmFyIHB0ciA9IG5ldyB0aGlzLmludGVyZmFjZVR5cGVfLnB0
ckNsYXNzKCk7Ci0gICAgLy8gVE9ETyh5enNoZW4pOiBTZXQgdGhlIHZlcnNpb24gb2YgdGhlIGlu
dGVyZmFjZSBwb2ludGVyLgotICAgIHRoaXMuYmluZChtYWtlUmVxdWVzdChwdHIpKTsKLSAgICBy
ZXR1cm4gcHRyOwotICB9OwotCi0gIEJpbmRpbmcucHJvdG90eXBlLmJpbmQgPSBmdW5jdGlvbihy
ZXF1ZXN0T3JIYW5kbGUpIHsKLSAgICB0aGlzLmNsb3NlKCk7Ci0KLSAgICB2YXIgaGFuZGxlID0g
cmVxdWVzdE9ySGFuZGxlIGluc3RhbmNlb2YgbW9qby5JbnRlcmZhY2VSZXF1ZXN0ID8KLSAgICAg
ICAgcmVxdWVzdE9ySGFuZGxlLmhhbmRsZSA6IHJlcXVlc3RPckhhbmRsZTsKLSAgICBpZiAoISho
YW5kbGUgaW5zdGFuY2VvZiBNb2pvSGFuZGxlKSkKLSAgICAgIHJldHVybjsKLQotICAgIHRoaXMu
cm91dGVyXyA9IG5ldyBpbnRlcm5hbC5Sb3V0ZXIoaGFuZGxlKTsKLQotICAgIHRoaXMuc3R1Yl8g
PSBuZXcgdGhpcy5pbnRlcmZhY2VUeXBlXy5zdHViQ2xhc3ModGhpcy5pbXBsXyk7Ci0gICAgdGhp
cy5pbnRlcmZhY2VFbmRwb2ludENsaWVudF8gPSBuZXcgaW50ZXJuYWwuSW50ZXJmYWNlRW5kcG9p
bnRDbGllbnQoCi0gICAgICAgIHRoaXMucm91dGVyXy5jcmVhdGVMb2NhbEVuZHBvaW50SGFuZGxl
KGludGVybmFsLmtNYXN0ZXJJbnRlcmZhY2VJZCksCi0gICAgICAgIHRoaXMuc3R1Yl8sIHRoaXMu
aW50ZXJmYWNlVHlwZV8ua1ZlcnNpb24pOwotCi0gICAgdGhpcy5pbnRlcmZhY2VFbmRwb2ludENs
aWVudF8gLnNldFBheWxvYWRWYWxpZGF0b3JzKFsKLSAgICAgICAgdGhpcy5pbnRlcmZhY2VUeXBl
Xy52YWxpZGF0ZVJlcXVlc3RdKTsKLSAgfTsKLQotICBCaW5kaW5nLnByb3RvdHlwZS5jbG9zZSA9
IGZ1bmN0aW9uKCkgewotICAgIGlmICghdGhpcy5pc0JvdW5kKCkpCi0gICAgICByZXR1cm47Ci0K
LSAgICBpZiAodGhpcy5pbnRlcmZhY2VFbmRwb2ludENsaWVudF8pIHsKLSAgICAgIHRoaXMuaW50
ZXJmYWNlRW5kcG9pbnRDbGllbnRfLmNsb3NlKCk7Ci0gICAgICB0aGlzLmludGVyZmFjZUVuZHBv
aW50Q2xpZW50XyA9IG51bGw7Ci0gICAgfQotCi0gICAgdGhpcy5yb3V0ZXJfLmNsb3NlKCk7Ci0g
ICAgdGhpcy5yb3V0ZXJfID0gbnVsbDsKLSAgICB0aGlzLnN0dWJfID0gbnVsbDsKLSAgfTsKLQot
ICBCaW5kaW5nLnByb3RvdHlwZS5jbG9zZVdpdGhSZWFzb24gPSBmdW5jdGlvbihyZWFzb24pIHsK
LSAgICBpZiAodGhpcy5pbnRlcmZhY2VFbmRwb2ludENsaWVudF8pIHsKLSAgICAgIHRoaXMuaW50
ZXJmYWNlRW5kcG9pbnRDbGllbnRfLmNsb3NlKHJlYXNvbik7Ci0gICAgICB0aGlzLmludGVyZmFj
ZUVuZHBvaW50Q2xpZW50XyA9IG51bGw7Ci0gICAgfQotICAgIHRoaXMuY2xvc2UoKTsKLSAgfTsK
LQotICBCaW5kaW5nLnByb3RvdHlwZS5zZXRDb25uZWN0aW9uRXJyb3JIYW5kbGVyID0gZnVuY3Rp
b24oY2FsbGJhY2spIHsKLSAgICBpZiAoIXRoaXMuaXNCb3VuZCgpKSB7Ci0gICAgICB0aHJvdyBu
ZXcgRXJyb3IoIkNhbm5vdCBzZXQgY29ubmVjdGlvbiBlcnJvciBoYW5kbGVyIGlmIG5vdCBib3Vu
ZC4iKTsKLSAgICB9Ci0gICAgdGhpcy5pbnRlcmZhY2VFbmRwb2ludENsaWVudF8uc2V0Q29ubmVj
dGlvbkVycm9ySGFuZGxlcihjYWxsYmFjayk7Ci0gIH07Ci0KLSAgQmluZGluZy5wcm90b3R5cGUu
dW5iaW5kID0gZnVuY3Rpb24oKSB7Ci0gICAgaWYgKCF0aGlzLmlzQm91bmQoKSkKLSAgICAgIHJl
dHVybiBuZXcgbW9qby5JbnRlcmZhY2VSZXF1ZXN0KG51bGwpOwotCi0gICAgdmFyIHJlc3VsdCA9
IG5ldyBtb2pvLkludGVyZmFjZVJlcXVlc3QodGhpcy5yb3V0ZXJfLmNvbm5lY3Rvcl8uaGFuZGxl
Xyk7Ci0gICAgdGhpcy5yb3V0ZXJfLmNvbm5lY3Rvcl8uaGFuZGxlXyA9IG51bGw7Ci0gICAgdGhp
cy5jbG9zZSgpOwotICAgIHJldHVybiByZXN1bHQ7Ci0gIH07Ci0KLSAgLy8gLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tCi0KLSAgZnVuY3Rpb24gQmluZGluZ1NldEVudHJ5KGJpbmRpbmdTZXQsIGludGVyZmFj
ZVR5cGUsIGJpbmRpbmdUeXBlLCBpbXBsLAotICAgICAgcmVxdWVzdE9ySGFuZGxlLCBiaW5kaW5n
SWQpIHsKLSAgICB0aGlzLmJpbmRpbmdTZXRfID0gYmluZGluZ1NldDsKLSAgICB0aGlzLmJpbmRp
bmdJZF8gPSBiaW5kaW5nSWQ7Ci0gICAgdGhpcy5iaW5kaW5nXyA9IG5ldyBiaW5kaW5nVHlwZShp
bnRlcmZhY2VUeXBlLCBpbXBsLAotICAgICAgICByZXF1ZXN0T3JIYW5kbGUpOwotCi0gICAgdGhp
cy5iaW5kaW5nXy5zZXRDb25uZWN0aW9uRXJyb3JIYW5kbGVyKGZ1bmN0aW9uKHJlYXNvbikgewot
ICAgICAgdGhpcy5iaW5kaW5nU2V0Xy5vbkNvbm5lY3Rpb25FcnJvcihiaW5kaW5nSWQsIHJlYXNv
bik7Ci0gICAgfS5iaW5kKHRoaXMpKTsKLSAgfQotCi0gIEJpbmRpbmdTZXRFbnRyeS5wcm90b3R5
cGUuY2xvc2UgPSBmdW5jdGlvbigpIHsKLSAgICB0aGlzLmJpbmRpbmdfLmNsb3NlKCk7Ci0gIH07
Ci0KLSAgZnVuY3Rpb24gQmluZGluZ1NldChpbnRlcmZhY2VUeXBlKSB7Ci0gICAgdGhpcy5pbnRl
cmZhY2VUeXBlXyA9IGludGVyZmFjZVR5cGU7Ci0gICAgdGhpcy5uZXh0QmluZGluZ0lkXyA9IDA7
Ci0gICAgdGhpcy5iaW5kaW5nc18gPSBuZXcgTWFwKCk7Ci0gICAgdGhpcy5lcnJvckhhbmRsZXJf
ID0gbnVsbDsKLSAgICB0aGlzLmJpbmRpbmdUeXBlXyA9IEJpbmRpbmc7Ci0gIH0KLQotICBCaW5k
aW5nU2V0LnByb3RvdHlwZS5pc0VtcHR5ID0gZnVuY3Rpb24oKSB7Ci0gICAgcmV0dXJuIHRoaXMu
YmluZGluZ3NfLnNpemUgPT0gMDsKLSAgfTsKLQotICBCaW5kaW5nU2V0LnByb3RvdHlwZS5hZGRC
aW5kaW5nID0gZnVuY3Rpb24oaW1wbCwgcmVxdWVzdE9ySGFuZGxlKSB7Ci0gICAgdGhpcy5iaW5k
aW5nc18uc2V0KAotICAgICAgICB0aGlzLm5leHRCaW5kaW5nSWRfLAotICAgICAgICBuZXcgQmlu
ZGluZ1NldEVudHJ5KHRoaXMsIHRoaXMuaW50ZXJmYWNlVHlwZV8sIHRoaXMuYmluZGluZ1R5cGVf
LCBpbXBsLAotICAgICAgICAgICAgcmVxdWVzdE9ySGFuZGxlLCB0aGlzLm5leHRCaW5kaW5nSWRf
KSk7Ci0gICAgKyt0aGlzLm5leHRCaW5kaW5nSWRfOwotICB9OwotCi0gIEJpbmRpbmdTZXQucHJv
dG90eXBlLmNsb3NlQWxsQmluZGluZ3MgPSBmdW5jdGlvbigpIHsKLSAgICBmb3IgKHZhciBlbnRy
eSBvZiB0aGlzLmJpbmRpbmdzXy52YWx1ZXMoKSkKLSAgICAgIGVudHJ5LmNsb3NlKCk7Ci0gICAg
dGhpcy5iaW5kaW5nc18uY2xlYXIoKTsKLSAgfTsKLQotICBCaW5kaW5nU2V0LnByb3RvdHlwZS5z
ZXRDb25uZWN0aW9uRXJyb3JIYW5kbGVyID0gZnVuY3Rpb24oY2FsbGJhY2spIHsKLSAgICB0aGlz
LmVycm9ySGFuZGxlcl8gPSBjYWxsYmFjazsKLSAgfTsKLQotICBCaW5kaW5nU2V0LnByb3RvdHlw
ZS5vbkNvbm5lY3Rpb25FcnJvciA9IGZ1bmN0aW9uKGJpbmRpbmdJZCwgcmVhc29uKSB7Ci0gICAg
dGhpcy5iaW5kaW5nc18uZGVsZXRlKGJpbmRpbmdJZCk7Ci0KLSAgICBpZiAodGhpcy5lcnJvckhh
bmRsZXJfKQotICAgICAgdGhpcy5lcnJvckhhbmRsZXJfKHJlYXNvbik7Ci0gIH07Ci0KLSAgLy8g
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tCi0KLSAgLy8gT3BlcmF0aW9ucyB1c2VkIHRvIHNldHVwL2NvbmZp
Z3VyZSBhbiBhc3NvY2lhdGVkIGludGVyZmFjZSBwb2ludGVyLgotICAvLyBFeHBvc2VkIGFzIHxw
dHJ8IGZpZWxkIG9mIGdlbmVyYXRlZCBhc3NvY2lhdGVkIGludGVyZmFjZSBwb2ludGVyIGNsYXNz
ZXMuCi0gIC8vIHxhc3NvY2lhdGVkUHRySW5mb3wgY291bGQgYmUgb21pdHRlZCBhbmQgcGFzc2Vk
IGludG8gYmluZCgpIGxhdGVyLgotICAvLwotICAvLyBFeGFtcGxlOgotICAvLyAgICAvLyBJbnRl
Z2VyU2VuZGVySW1wbCBpbXBsZW1lbnRzIG1vam9tLkludGVnZXJTZW5kZXIKLSAgLy8gICAgZnVu
Y3Rpb24gSW50ZWdlclNlbmRlckltcGwoKSB7IC4uLiB9Ci0gIC8vICAgIEludGVnZXJTZW5kZXJJ
bXBsLnByb3RvdHlwZS5lY2hvID0gZnVuY3Rpb24oKSB7IC4uLiB9Ci0gIC8vCi0gIC8vICAgIC8v
IEludGVnZXJTZW5kZXJDb25uZWN0aW9uSW1wbCBpbXBsZW1lbnRzIG1vam9tLkludGVnZXJTZW5k
ZXJDb25uZWN0aW9uCi0gIC8vICAgIGZ1bmN0aW9uIEludGVnZXJTZW5kZXJDb25uZWN0aW9uSW1w
bCgpIHsKLSAgLy8gICAgICB0aGlzLnNlbmRlckJpbmRpbmdfID0gbnVsbDsKLSAgLy8gICAgfQot
ICAvLyAgICBJbnRlZ2VyU2VuZGVyQ29ubmVjdGlvbkltcGwucHJvdG90eXBlLmdldFNlbmRlciA9
IGZ1bmN0aW9uKAotICAvLyAgICAgICAgYXNzb2NpYXRlZFJlcXVlc3QpIHsKLSAgLy8gICAgICB0
aGlzLnNlbmRlckJpbmRpbmdfID0gbmV3IEFzc29jaWF0ZWRCaW5kaW5nKG1vam9tLkludGVnZXJT
ZW5kZXIsCi0gIC8vICAgICAgICAgIG5ldyBJbnRlZ2VyU2VuZGVySW1wbCgpLAotICAvLyAgICAg
ICAgICBhc3NvY2lhdGVkUmVxdWVzdCk7Ci0gIC8vICAgIH0KLSAgLy8KLSAgLy8gICAgdmFyIGlu
dGVnZXJTZW5kZXJDb25uZWN0aW9uID0gbmV3IG1vam9tLkludGVnZXJTZW5kZXJDb25uZWN0aW9u
UHRyKCk7Ci0gIC8vICAgIHZhciBpbnRlZ2VyU2VuZGVyQ29ubmVjdGlvbkJpbmRpbmcgPSBuZXcg
QmluZGluZygKLSAgLy8gICAgICAgIG1vam9tLkludGVnZXJTZW5kZXJDb25uZWN0aW9uLAotICAv
LyAgICAgICAgbmV3IEludGVnZXJTZW5kZXJDb25uZWN0aW9uSW1wbCgpLAotICAvLyAgICAgICAg
bW9qby5tYWtlUmVxdWVzdChpbnRlZ2VyU2VuZGVyQ29ubmVjdGlvbikpOwotICAvLwotICAvLyAg
ICAvLyBBIGxvY2FsbHktY3JlYXRlZCBhc3NvY2lhdGVkIGludGVyZmFjZSBwb2ludGVyIGNhbiBv
bmx5IGJlIHVzZWQgdG8KLSAgLy8gICAgLy8gbWFrZSBjYWxscyB3aGVuIHRoZSBjb3JyZXNwb25k
aW5nIGFzc29jaWF0ZWQgcmVxdWVzdCBpcyBzZW50IG92ZXIKLSAgLy8gICAgLy8gYW5vdGhlciBp
bnRlcmZhY2UgKGVpdGhlciB0aGUgbWFzdGVyIGludGVyZmFjZSBvciBhbm90aGVyCi0gIC8vICAg
IC8vIGFzc29jaWF0ZWQgaW50ZXJmYWNlKS4KLSAgLy8gICAgdmFyIGFzc29jaWF0ZWRJbnRlcmZh
Y2VQdHJJbmZvID0gbmV3IEFzc29jaWF0ZWRJbnRlcmZhY2VQdHJJbmZvKCk7Ci0gIC8vICAgIHZh
ciBhc3NvY2lhdGVkUmVxdWVzdCA9IG1ha2VSZXF1ZXN0KGludGVyZmFjZVB0ckluZm8pOwotICAv
LwotICAvLyAgICBpbnRlZ2VyU2VuZGVyQ29ubmVjdGlvbi5nZXRTZW5kZXIoYXNzb2NpYXRlZFJl
cXVlc3QpOwotICAvLwotICAvLyAgICAvLyBDcmVhdGUgYW4gYXNzb2NpYXRlZCBpbnRlcmZhY2Ug
YW5kIGJpbmQgdGhlIGFzc29jaWF0ZWQgaGFuZGxlLgotICAvLyAgICB2YXIgaW50ZWdlclNlbmRl
ciA9IG5ldyBtb2pvbS5Bc3NvY2lhdGVkSW50ZWdlclNlbmRlclB0cigpOwotICAvLyAgICBpbnRl
Z2VyU2VuZGVyLnB0ci5iaW5kKGFzc29jaWF0ZWRJbnRlcmZhY2VQdHJJbmZvKTsKLSAgLy8gICAg
aW50ZWdlclNlbmRlci5lY2hvKCk7Ci0KLSAgZnVuY3Rpb24gQXNzb2NpYXRlZEludGVyZmFjZVB0
ckNvbnRyb2xsZXIoaW50ZXJmYWNlVHlwZSwgYXNzb2NpYXRlZFB0ckluZm8pIHsKLSAgICB0aGlz
LnZlcnNpb24gPSAwOwotCi0gICAgdGhpcy5pbnRlcmZhY2VUeXBlXyA9IGludGVyZmFjZVR5cGU7
Ci0gICAgdGhpcy5pbnRlcmZhY2VFbmRwb2ludENsaWVudF8gPSBudWxsOwotICAgIHRoaXMucHJv
eHlfID0gbnVsbDsKLQotICAgIGlmIChhc3NvY2lhdGVkUHRySW5mbykgewotICAgICAgdGhpcy5i
aW5kKGFzc29jaWF0ZWRQdHJJbmZvKTsKLSAgICB9Ci0gIH0KLQotICBBc3NvY2lhdGVkSW50ZXJm
YWNlUHRyQ29udHJvbGxlci5wcm90b3R5cGUuYmluZCA9IGZ1bmN0aW9uKAotICAgICAgYXNzb2Np
YXRlZFB0ckluZm8pIHsKLSAgICB0aGlzLnJlc2V0KCk7Ci0gICAgdGhpcy52ZXJzaW9uID0gYXNz
b2NpYXRlZFB0ckluZm8udmVyc2lvbjsKLQotICAgIHRoaXMuaW50ZXJmYWNlRW5kcG9pbnRDbGll
bnRfID0gbmV3IGludGVybmFsLkludGVyZmFjZUVuZHBvaW50Q2xpZW50KAotICAgICAgICBhc3Nv
Y2lhdGVkUHRySW5mby5pbnRlcmZhY2VFbmRwb2ludEhhbmRsZSk7Ci0KLSAgICB0aGlzLmludGVy
ZmFjZUVuZHBvaW50Q2xpZW50XyAuc2V0UGF5bG9hZFZhbGlkYXRvcnMoWwotICAgICAgICB0aGlz
LmludGVyZmFjZVR5cGVfLnZhbGlkYXRlUmVzcG9uc2VdKTsKLSAgICB0aGlzLnByb3h5XyA9IG5l
dyB0aGlzLmludGVyZmFjZVR5cGVfLnByb3h5Q2xhc3MoCi0gICAgICAgIHRoaXMuaW50ZXJmYWNl
RW5kcG9pbnRDbGllbnRfKTsKLSAgfTsKLQotICBBc3NvY2lhdGVkSW50ZXJmYWNlUHRyQ29udHJv
bGxlci5wcm90b3R5cGUuaXNCb3VuZCA9IGZ1bmN0aW9uKCkgewotICAgIHJldHVybiB0aGlzLmlu
dGVyZmFjZUVuZHBvaW50Q2xpZW50XyAhPT0gbnVsbDsKLSAgfTsKLQotICBBc3NvY2lhdGVkSW50
ZXJmYWNlUHRyQ29udHJvbGxlci5wcm90b3R5cGUucmVzZXQgPSBmdW5jdGlvbigpIHsKLSAgICB0
aGlzLnZlcnNpb24gPSAwOwotICAgIGlmICh0aGlzLmludGVyZmFjZUVuZHBvaW50Q2xpZW50Xykg
ewotICAgICAgdGhpcy5pbnRlcmZhY2VFbmRwb2ludENsaWVudF8uY2xvc2UoKTsKLSAgICAgIHRo
aXMuaW50ZXJmYWNlRW5kcG9pbnRDbGllbnRfID0gbnVsbDsKLSAgICB9Ci0gICAgaWYgKHRoaXMu
cHJveHlfKSB7Ci0gICAgICB0aGlzLnByb3h5XyA9IG51bGw7Ci0gICAgfQotICB9OwotCi0gIEFz
c29jaWF0ZWRJbnRlcmZhY2VQdHJDb250cm9sbGVyLnByb3RvdHlwZS5yZXNldFdpdGhSZWFzb24g
PSBmdW5jdGlvbigKLSAgICAgIHJlYXNvbikgewotICAgIGlmICh0aGlzLmlzQm91bmQoKSkgewot
ICAgICAgdGhpcy5pbnRlcmZhY2VFbmRwb2ludENsaWVudF8uY2xvc2UocmVhc29uKTsKLSAgICAg
IHRoaXMuaW50ZXJmYWNlRW5kcG9pbnRDbGllbnRfID0gbnVsbDsKLSAgICB9Ci0gICAgdGhpcy5y
ZXNldCgpOwotICB9OwotCi0gIC8vIEluZGljYXRlcyB3aGV0aGVyIGFuIGVycm9yIGhhcyBiZWVu
IGVuY291bnRlcmVkLiBJZiB0cnVlLCBtZXRob2QgY2FsbHMKLSAgLy8gb24gdGhpcyBpbnRlcmZh
Y2Ugd2lsbCBiZSBkcm9wcGVkIChhbmQgbWF5IGFscmVhZHkgaGF2ZSBiZWVuIGRyb3BwZWQpLgot
ICBBc3NvY2lhdGVkSW50ZXJmYWNlUHRyQ29udHJvbGxlci5wcm90b3R5cGUuZ2V0RW5jb3VudGVy
ZWRFcnJvciA9IGZ1bmN0aW9uKCkgewotICAgIHJldHVybiB0aGlzLmludGVyZmFjZUVuZHBvaW50
Q2xpZW50XyA/Ci0gICAgICAgIHRoaXMuaW50ZXJmYWNlRW5kcG9pbnRDbGllbnRfLmdldEVuY291
bnRlcmVkRXJyb3IoKSA6IGZhbHNlOwotICB9OwotCi0gIEFzc29jaWF0ZWRJbnRlcmZhY2VQdHJD
b250cm9sbGVyLnByb3RvdHlwZS5zZXRDb25uZWN0aW9uRXJyb3JIYW5kbGVyID0KLSAgICAgIGZ1
bmN0aW9uKGNhbGxiYWNrKSB7Ci0gICAgaWYgKCF0aGlzLmlzQm91bmQoKSkgewotICAgICAgdGhy
b3cgbmV3IEVycm9yKCJDYW5ub3Qgc2V0IGNvbm5lY3Rpb24gZXJyb3IgaGFuZGxlciBpZiBub3Qg
Ym91bmQuIik7Ci0gICAgfQotCi0gICAgdGhpcy5pbnRlcmZhY2VFbmRwb2ludENsaWVudF8uc2V0
Q29ubmVjdGlvbkVycm9ySGFuZGxlcihjYWxsYmFjayk7Ci0gIH07Ci0KLSAgQXNzb2NpYXRlZElu
dGVyZmFjZVB0ckNvbnRyb2xsZXIucHJvdG90eXBlLnBhc3NJbnRlcmZhY2UgPSBmdW5jdGlvbigp
IHsKLSAgICBpZiAoIXRoaXMuaXNCb3VuZCgpKSB7Ci0gICAgICByZXR1cm4gbmV3IG1vam8uQXNz
b2NpYXRlZEludGVyZmFjZVB0ckluZm8obnVsbCk7Ci0gICAgfQotCi0gICAgdmFyIHJlc3VsdCA9
IG5ldyBtb2pvLkFzc29jaWF0ZWRJbnRlcmZhY2VQdHJJbmZvKAotICAgICAgICB0aGlzLmludGVy
ZmFjZUVuZHBvaW50Q2xpZW50Xy5wYXNzSGFuZGxlKCksIHRoaXMudmVyc2lvbik7Ci0gICAgdGhp
cy5yZXNldCgpOwotICAgIHJldHVybiByZXN1bHQ7Ci0gIH07Ci0KLSAgQXNzb2NpYXRlZEludGVy
ZmFjZVB0ckNvbnRyb2xsZXIucHJvdG90eXBlLmdldFByb3h5ID0gZnVuY3Rpb24oKSB7Ci0gICAg
cmV0dXJuIHRoaXMucHJveHlfOwotICB9OwotCi0gIEFzc29jaWF0ZWRJbnRlcmZhY2VQdHJDb250
cm9sbGVyLnByb3RvdHlwZS5xdWVyeVZlcnNpb24gPSBmdW5jdGlvbigpIHsKLSAgICBmdW5jdGlv
biBvblF1ZXJ5VmVyc2lvbih2ZXJzaW9uKSB7Ci0gICAgICB0aGlzLnZlcnNpb24gPSB2ZXJzaW9u
OwotICAgICAgcmV0dXJuIHZlcnNpb247Ci0gICAgfQotCi0gICAgcmV0dXJuIHRoaXMuaW50ZXJm
YWNlRW5kcG9pbnRDbGllbnRfLnF1ZXJ5VmVyc2lvbigpLnRoZW4oCi0gICAgICBvblF1ZXJ5VmVy
c2lvbi5iaW5kKHRoaXMpKTsKLSAgfTsKLQotICBBc3NvY2lhdGVkSW50ZXJmYWNlUHRyQ29udHJv
bGxlci5wcm90b3R5cGUucmVxdWlyZVZlcnNpb24gPSBmdW5jdGlvbigKLSAgICAgIHZlcnNpb24p
IHsKLSAgICBpZiAodGhpcy52ZXJzaW9uID49IHZlcnNpb24pIHsKLSAgICAgIHJldHVybjsKLSAg
ICB9Ci0gICAgdGhpcy52ZXJzaW9uID0gdmVyc2lvbjsKLSAgICB0aGlzLmludGVyZmFjZUVuZHBv
aW50Q2xpZW50Xy5yZXF1aXJlVmVyc2lvbih2ZXJzaW9uKTsKLSAgfTsKLQotICAvLyAtLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0KLQotICAvLyB8YXNzb2NpYXRlZEludGVyZmFjZVJlcXVlc3R8IGNvdWxkIGJl
IG9taXR0ZWQgYW5kIHBhc3NlZCBpbnRvIGJpbmQoKQotICAvLyBsYXRlci4KLSAgZnVuY3Rpb24g
QXNzb2NpYXRlZEJpbmRpbmcoaW50ZXJmYWNlVHlwZSwgaW1wbCwgYXNzb2NpYXRlZEludGVyZmFj
ZVJlcXVlc3QpIHsKLSAgICB0aGlzLmludGVyZmFjZVR5cGVfID0gaW50ZXJmYWNlVHlwZTsKLSAg
ICB0aGlzLmltcGxfID0gaW1wbDsKLSAgICB0aGlzLmludGVyZmFjZUVuZHBvaW50Q2xpZW50XyA9
IG51bGw7Ci0gICAgdGhpcy5zdHViXyA9IG51bGw7Ci0KLSAgICBpZiAoYXNzb2NpYXRlZEludGVy
ZmFjZVJlcXVlc3QpIHsKLSAgICAgIHRoaXMuYmluZChhc3NvY2lhdGVkSW50ZXJmYWNlUmVxdWVz
dCk7Ci0gICAgfQotICB9Ci0KLSAgQXNzb2NpYXRlZEJpbmRpbmcucHJvdG90eXBlLmlzQm91bmQg
PSBmdW5jdGlvbigpIHsKLSAgICByZXR1cm4gdGhpcy5pbnRlcmZhY2VFbmRwb2ludENsaWVudF8g
IT09IG51bGw7Ci0gIH07Ci0KLSAgQXNzb2NpYXRlZEJpbmRpbmcucHJvdG90eXBlLmJpbmQgPSBm
dW5jdGlvbihhc3NvY2lhdGVkSW50ZXJmYWNlUmVxdWVzdCkgewotICAgIHRoaXMuY2xvc2UoKTsK
LQotICAgIHRoaXMuc3R1Yl8gPSBuZXcgdGhpcy5pbnRlcmZhY2VUeXBlXy5zdHViQ2xhc3ModGhp
cy5pbXBsXyk7Ci0gICAgdGhpcy5pbnRlcmZhY2VFbmRwb2ludENsaWVudF8gPSBuZXcgaW50ZXJu
YWwuSW50ZXJmYWNlRW5kcG9pbnRDbGllbnQoCi0gICAgICAgIGFzc29jaWF0ZWRJbnRlcmZhY2VS
ZXF1ZXN0LmludGVyZmFjZUVuZHBvaW50SGFuZGxlLCB0aGlzLnN0dWJfLAotICAgICAgICB0aGlz
LmludGVyZmFjZVR5cGVfLmtWZXJzaW9uKTsKLQotICAgIHRoaXMuaW50ZXJmYWNlRW5kcG9pbnRD
bGllbnRfIC5zZXRQYXlsb2FkVmFsaWRhdG9ycyhbCi0gICAgICAgIHRoaXMuaW50ZXJmYWNlVHlw
ZV8udmFsaWRhdGVSZXF1ZXN0XSk7Ci0gIH07Ci0KLQotICBBc3NvY2lhdGVkQmluZGluZy5wcm90
b3R5cGUuY2xvc2UgPSBmdW5jdGlvbigpIHsKLSAgICBpZiAoIXRoaXMuaXNCb3VuZCgpKSB7Ci0g
ICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKHRoaXMuaW50ZXJmYWNlRW5kcG9pbnRDbGll
bnRfKSB7Ci0gICAgICB0aGlzLmludGVyZmFjZUVuZHBvaW50Q2xpZW50Xy5jbG9zZSgpOwotICAg
ICAgdGhpcy5pbnRlcmZhY2VFbmRwb2ludENsaWVudF8gPSBudWxsOwotICAgIH0KLQotICAgIHRo
aXMuc3R1Yl8gPSBudWxsOwotICB9OwotCi0gIEFzc29jaWF0ZWRCaW5kaW5nLnByb3RvdHlwZS5j
bG9zZVdpdGhSZWFzb24gPSBmdW5jdGlvbihyZWFzb24pIHsKLSAgICBpZiAodGhpcy5pbnRlcmZh
Y2VFbmRwb2ludENsaWVudF8pIHsKLSAgICAgIHRoaXMuaW50ZXJmYWNlRW5kcG9pbnRDbGllbnRf
LmNsb3NlKHJlYXNvbik7Ci0gICAgICB0aGlzLmludGVyZmFjZUVuZHBvaW50Q2xpZW50XyA9IG51
bGw7Ci0gICAgfQotICAgIHRoaXMuY2xvc2UoKTsKLSAgfTsKLQotICBBc3NvY2lhdGVkQmluZGlu
Zy5wcm90b3R5cGUuc2V0Q29ubmVjdGlvbkVycm9ySGFuZGxlciA9IGZ1bmN0aW9uKGNhbGxiYWNr
KSB7Ci0gICAgaWYgKCF0aGlzLmlzQm91bmQoKSkgewotICAgICAgdGhyb3cgbmV3IEVycm9yKCJD
YW5ub3Qgc2V0IGNvbm5lY3Rpb24gZXJyb3IgaGFuZGxlciBpZiBub3QgYm91bmQuIik7Ci0gICAg
fQotICAgIHRoaXMuaW50ZXJmYWNlRW5kcG9pbnRDbGllbnRfLnNldENvbm5lY3Rpb25FcnJvckhh
bmRsZXIoY2FsbGJhY2spOwotICB9OwotCi0gIEFzc29jaWF0ZWRCaW5kaW5nLnByb3RvdHlwZS51
bmJpbmQgPSBmdW5jdGlvbigpIHsKLSAgICBpZiAoIXRoaXMuaXNCb3VuZCgpKSB7Ci0gICAgICBy
ZXR1cm4gbmV3IG1vam8uQXNzb2NpYXRlZEludGVyZmFjZVJlcXVlc3QobnVsbCk7Ci0gICAgfQot
Ci0gICAgdmFyIHJlc3VsdCA9IG5ldyBtb2pvLkFzc29jaWF0ZWRJbnRlcmZhY2VSZXF1ZXN0KAot
ICAgICAgICB0aGlzLmludGVyZmFjZUVuZHBvaW50Q2xpZW50Xy5wYXNzSGFuZGxlKCkpOwotICAg
IHRoaXMuY2xvc2UoKTsKLSAgICByZXR1cm4gcmVzdWx0OwotICB9OwotCi0gIC8vIC0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLQotCi0gIGZ1bmN0aW9uIEFzc29jaWF0ZWRCaW5kaW5nU2V0KGludGVyZmFjZVR5
cGUpIHsKLSAgICBtb2pvLkJpbmRpbmdTZXQuY2FsbCh0aGlzLCBpbnRlcmZhY2VUeXBlKTsKLSAg
ICB0aGlzLmJpbmRpbmdUeXBlXyA9IEFzc29jaWF0ZWRCaW5kaW5nOwotICB9Ci0KLSAgQXNzb2Np
YXRlZEJpbmRpbmdTZXQucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShCaW5kaW5nU2V0LnByb3Rv
dHlwZSk7Ci0gIEFzc29jaWF0ZWRCaW5kaW5nU2V0LnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEFz
c29jaWF0ZWRCaW5kaW5nU2V0OwotCi0gIG1vam8ubWFrZVJlcXVlc3QgPSBtYWtlUmVxdWVzdDsK
LSAgbW9qby5Bc3NvY2lhdGVkSW50ZXJmYWNlUHRyQ29udHJvbGxlciA9IEFzc29jaWF0ZWRJbnRl
cmZhY2VQdHJDb250cm9sbGVyOwotICBtb2pvLkFzc29jaWF0ZWRCaW5kaW5nID0gQXNzb2NpYXRl
ZEJpbmRpbmc7Ci0gIG1vam8uQXNzb2NpYXRlZEJpbmRpbmdTZXQgPSBBc3NvY2lhdGVkQmluZGlu
Z1NldDsKLSAgbW9qby5CaW5kaW5nID0gQmluZGluZzsKLSAgbW9qby5CaW5kaW5nU2V0ID0gQmlu
ZGluZ1NldDsKLSAgbW9qby5JbnRlcmZhY2VQdHJDb250cm9sbGVyID0gSW50ZXJmYWNlUHRyQ29u
dHJvbGxlcjsKLX0pKCk7Ci0vLyBDb3B5cmlnaHQgMjAxNiBUaGUgQ2hyb21pdW0gQXV0aG9ycy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVy
bmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBM
SUNFTlNFIGZpbGUuCi0KLShmdW5jdGlvbigpIHsKLSAgdmFyIGludGVybmFsID0gbW9qby5pbnRl
cm5hbDsKLQotICAvLyBDb25zdGFudHMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICB2YXIga0ludGVyZmFjZUlkTmFtZXNw
YWNlTWFzayA9IDB4ODAwMDAwMDA7Ci0gIHZhciBrTWFzdGVySW50ZXJmYWNlSWQgPSAweDAwMDAw
MDAwOwotICB2YXIga0ludmFsaWRJbnRlcmZhY2VJZCA9IDB4RkZGRkZGRkY7Ci0KLSAgLy8gLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tCi0KLSAgZnVuY3Rpb24gSW50ZXJmYWNlUHRySW5mbyhoYW5kbGUsIHZl
cnNpb24pIHsKLSAgICB0aGlzLmhhbmRsZSA9IGhhbmRsZTsKLSAgICB0aGlzLnZlcnNpb24gPSB2
ZXJzaW9uOwotICB9Ci0KLSAgSW50ZXJmYWNlUHRySW5mby5wcm90b3R5cGUuaXNWYWxpZCA9IGZ1
bmN0aW9uKCkgewotICAgIHJldHVybiB0aGlzLmhhbmRsZSBpbnN0YW5jZW9mIE1vam9IYW5kbGU7
Ci0gIH07Ci0KLSAgSW50ZXJmYWNlUHRySW5mby5wcm90b3R5cGUuY2xvc2UgPSBmdW5jdGlvbigp
IHsKLSAgICBpZiAoIXRoaXMuaXNWYWxpZCgpKQotICAgICAgcmV0dXJuOwotCi0gICAgdGhpcy5o
YW5kbGUuY2xvc2UoKTsKLSAgICB0aGlzLmhhbmRsZSA9IG51bGw7Ci0gICAgdGhpcy52ZXJzaW9u
ID0gMDsKLSAgfTsKLQotICBmdW5jdGlvbiBBc3NvY2lhdGVkSW50ZXJmYWNlUHRySW5mbyhpbnRl
cmZhY2VFbmRwb2ludEhhbmRsZSwgdmVyc2lvbikgewotICAgIHRoaXMuaW50ZXJmYWNlRW5kcG9p
bnRIYW5kbGUgPSBpbnRlcmZhY2VFbmRwb2ludEhhbmRsZTsKLSAgICB0aGlzLnZlcnNpb24gPSB2
ZXJzaW9uOwotICB9Ci0KLSAgQXNzb2NpYXRlZEludGVyZmFjZVB0ckluZm8ucHJvdG90eXBlLmlz
VmFsaWQgPSBmdW5jdGlvbigpIHsKLSAgICByZXR1cm4gdGhpcy5pbnRlcmZhY2VFbmRwb2ludEhh
bmRsZS5pc1ZhbGlkKCk7Ci0gIH07Ci0KLSAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLSAgZnVu
Y3Rpb24gSW50ZXJmYWNlUmVxdWVzdChoYW5kbGUpIHsKLSAgICB0aGlzLmhhbmRsZSA9IGhhbmRs
ZTsKLSAgfQotCi0gIEludGVyZmFjZVJlcXVlc3QucHJvdG90eXBlLmlzVmFsaWQgPSBmdW5jdGlv
bigpIHsKLSAgICByZXR1cm4gdGhpcy5oYW5kbGUgaW5zdGFuY2VvZiBNb2pvSGFuZGxlOwotICB9
OwotCi0gIEludGVyZmFjZVJlcXVlc3QucHJvdG90eXBlLmNsb3NlID0gZnVuY3Rpb24oKSB7Ci0g
ICAgaWYgKCF0aGlzLmlzVmFsaWQoKSkKLSAgICAgIHJldHVybjsKLQotICAgIHRoaXMuaGFuZGxl
LmNsb3NlKCk7Ci0gICAgdGhpcy5oYW5kbGUgPSBudWxsOwotICB9OwotCi0gIGZ1bmN0aW9uIEFz
c29jaWF0ZWRJbnRlcmZhY2VSZXF1ZXN0KGludGVyZmFjZUVuZHBvaW50SGFuZGxlKSB7Ci0gICAg
dGhpcy5pbnRlcmZhY2VFbmRwb2ludEhhbmRsZSA9IGludGVyZmFjZUVuZHBvaW50SGFuZGxlOwot
ICB9Ci0KLSAgQXNzb2NpYXRlZEludGVyZmFjZVJlcXVlc3QucHJvdG90eXBlLmlzVmFsaWQgPSBm
dW5jdGlvbigpIHsKLSAgICByZXR1cm4gdGhpcy5pbnRlcmZhY2VFbmRwb2ludEhhbmRsZS5pc1Zh
bGlkKCk7Ci0gIH07Ci0KLSAgQXNzb2NpYXRlZEludGVyZmFjZVJlcXVlc3QucHJvdG90eXBlLnJl
c2V0V2l0aFJlYXNvbiA9IGZ1bmN0aW9uKHJlYXNvbikgewotICAgIHRoaXMuaW50ZXJmYWNlRW5k
cG9pbnRIYW5kbGUucmVzZXQocmVhc29uKTsKLSAgfTsKLQotICBmdW5jdGlvbiBpc01hc3Rlcklu
dGVyZmFjZUlkKGludGVyZmFjZUlkKSB7Ci0gICAgcmV0dXJuIGludGVyZmFjZUlkID09PSBrTWFz
dGVySW50ZXJmYWNlSWQ7Ci0gIH0KLQotICBmdW5jdGlvbiBpc1ZhbGlkSW50ZXJmYWNlSWQoaW50
ZXJmYWNlSWQpIHsKLSAgICByZXR1cm4gaW50ZXJmYWNlSWQgIT09IGtJbnZhbGlkSW50ZXJmYWNl
SWQ7Ci0gIH0KLQotICBmdW5jdGlvbiBoYXNJbnRlcmZhY2VJZE5hbWVzcGFjZUJpdFNldChpbnRl
cmZhY2VJZCkgewotICAgIGlmIChpbnRlcmZhY2VJZCA+PSAyICoga0ludGVyZmFjZUlkTmFtZXNw
YWNlTWFzaykgewotICAgICAgdGhyb3cgbmV3IEVycm9yKCJJbnRlcmZhY2UgSUQgc2hvdWxkIGJl
IGEgMzItYml0IHVuc2lnbmVkIGludGVnZXIuIik7Ci0gICAgfQotICAgIHJldHVybiBpbnRlcmZh
Y2VJZCA+PSBrSW50ZXJmYWNlSWROYW1lc3BhY2VNYXNrOwotICB9Ci0KLSAgbW9qby5JbnRlcmZh
Y2VQdHJJbmZvID0gSW50ZXJmYWNlUHRySW5mbzsKLSAgbW9qby5JbnRlcmZhY2VSZXF1ZXN0ID0g
SW50ZXJmYWNlUmVxdWVzdDsKLSAgbW9qby5Bc3NvY2lhdGVkSW50ZXJmYWNlUHRySW5mbyA9IEFz
c29jaWF0ZWRJbnRlcmZhY2VQdHJJbmZvOwotICBtb2pvLkFzc29jaWF0ZWRJbnRlcmZhY2VSZXF1
ZXN0ID0gQXNzb2NpYXRlZEludGVyZmFjZVJlcXVlc3Q7Ci0gIGludGVybmFsLmlzTWFzdGVySW50
ZXJmYWNlSWQgPSBpc01hc3RlckludGVyZmFjZUlkOwotICBpbnRlcm5hbC5pc1ZhbGlkSW50ZXJm
YWNlSWQgPSBpc1ZhbGlkSW50ZXJmYWNlSWQ7Ci0gIGludGVybmFsLmhhc0ludGVyZmFjZUlkTmFt
ZXNwYWNlQml0U2V0ID0gaGFzSW50ZXJmYWNlSWROYW1lc3BhY2VCaXRTZXQ7Ci0gIGludGVybmFs
LmtJbnZhbGlkSW50ZXJmYWNlSWQgPSBrSW52YWxpZEludGVyZmFjZUlkOwotICBpbnRlcm5hbC5r
TWFzdGVySW50ZXJmYWNlSWQgPSBrTWFzdGVySW50ZXJmYWNlSWQ7Ci0gIGludGVybmFsLmtJbnRl
cmZhY2VJZE5hbWVzcGFjZU1hc2sgPSBrSW50ZXJmYWNlSWROYW1lc3BhY2VNYXNrOwotfSkoKTsK
LS8vIENvcHlyaWdodCAyMDE0IFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5
bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLQot
KGZ1bmN0aW9uKCkgewotICB2YXIgaW50ZXJuYWwgPSBtb2pvLmludGVybmFsOwotCi0gIHZhciBr
SG9zdElzTGl0dGxlRW5kaWFuID0gKGZ1bmN0aW9uICgpIHsKLSAgICB2YXIgZW5kaWFuQXJyYXlC
dWZmZXIgPSBuZXcgQXJyYXlCdWZmZXIoMik7Ci0gICAgdmFyIGVuZGlhblVpbnQ4QXJyYXkgPSBu
ZXcgVWludDhBcnJheShlbmRpYW5BcnJheUJ1ZmZlcik7Ci0gICAgdmFyIGVuZGlhblVpbnQxNkFy
cmF5ID0gbmV3IFVpbnQxNkFycmF5KGVuZGlhbkFycmF5QnVmZmVyKTsKLSAgICBlbmRpYW5VaW50
MTZBcnJheVswXSA9IDE7Ci0gICAgcmV0dXJuIGVuZGlhblVpbnQ4QXJyYXlbMF0gPT0gMTsKLSAg
fSkoKTsKLQotICB2YXIga0hpZ2hXb3JkTXVsdGlwbGllciA9IDB4MTAwMDAwMDAwOwotCi0gIGZ1
bmN0aW9uIEJ1ZmZlcihzaXplT3JBcnJheUJ1ZmZlcikgewotICAgIGlmIChzaXplT3JBcnJheUJ1
ZmZlciBpbnN0YW5jZW9mIEFycmF5QnVmZmVyKQotICAgICAgdGhpcy5hcnJheUJ1ZmZlciA9IHNp
emVPckFycmF5QnVmZmVyOwotICAgIGVsc2UKLSAgICAgIHRoaXMuYXJyYXlCdWZmZXIgPSBuZXcg
QXJyYXlCdWZmZXIoc2l6ZU9yQXJyYXlCdWZmZXIpOwotCi0gICAgdGhpcy5kYXRhVmlldyA9IG5l
dyBEYXRhVmlldyh0aGlzLmFycmF5QnVmZmVyKTsKLSAgICB0aGlzLm5leHQgPSAwOwotICB9Ci0K
LSAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEJ1ZmZlci5wcm90b3R5cGUsICJieXRlTGVuZ3RoIiwg
ewotICAgIGdldDogZnVuY3Rpb24oKSB7IHJldHVybiB0aGlzLmFycmF5QnVmZmVyLmJ5dGVMZW5n
dGg7IH0KLSAgfSk7Ci0KLSAgQnVmZmVyLnByb3RvdHlwZS5hbGxvYyA9IGZ1bmN0aW9uKHNpemUp
IHsKLSAgICB2YXIgcG9pbnRlciA9IHRoaXMubmV4dDsKLSAgICB0aGlzLm5leHQgKz0gc2l6ZTsK
LSAgICBpZiAodGhpcy5uZXh0ID4gdGhpcy5ieXRlTGVuZ3RoKSB7Ci0gICAgICB2YXIgbmV3U2l6
ZSA9ICgxLjUgKiAodGhpcy5ieXRlTGVuZ3RoICsgc2l6ZSkpIHwgMDsKLSAgICAgIHRoaXMuZ3Jv
dyhuZXdTaXplKTsKLSAgICB9Ci0gICAgcmV0dXJuIHBvaW50ZXI7Ci0gIH07Ci0KLSAgZnVuY3Rp
b24gY29weUFycmF5QnVmZmVyKGRzdEFycmF5QnVmZmVyLCBzcmNBcnJheUJ1ZmZlcikgewotICAg
IChuZXcgVWludDhBcnJheShkc3RBcnJheUJ1ZmZlcikpLnNldChuZXcgVWludDhBcnJheShzcmNB
cnJheUJ1ZmZlcikpOwotICB9Ci0KLSAgQnVmZmVyLnByb3RvdHlwZS5ncm93ID0gZnVuY3Rpb24o
c2l6ZSkgewotICAgIHZhciBuZXdBcnJheUJ1ZmZlciA9IG5ldyBBcnJheUJ1ZmZlcihzaXplKTsK
LSAgICBjb3B5QXJyYXlCdWZmZXIobmV3QXJyYXlCdWZmZXIsIHRoaXMuYXJyYXlCdWZmZXIpOwot
ICAgIHRoaXMuYXJyYXlCdWZmZXIgPSBuZXdBcnJheUJ1ZmZlcjsKLSAgICB0aGlzLmRhdGFWaWV3
ID0gbmV3IERhdGFWaWV3KHRoaXMuYXJyYXlCdWZmZXIpOwotICB9OwotCi0gIEJ1ZmZlci5wcm90
b3R5cGUudHJpbSA9IGZ1bmN0aW9uKCkgewotICAgIHRoaXMuYXJyYXlCdWZmZXIgPSB0aGlzLmFy
cmF5QnVmZmVyLnNsaWNlKDAsIHRoaXMubmV4dCk7Ci0gICAgdGhpcy5kYXRhVmlldyA9IG5ldyBE
YXRhVmlldyh0aGlzLmFycmF5QnVmZmVyKTsKLSAgfTsKLQotICBCdWZmZXIucHJvdG90eXBlLmdl
dFVpbnQ4ID0gZnVuY3Rpb24ob2Zmc2V0KSB7Ci0gICAgcmV0dXJuIHRoaXMuZGF0YVZpZXcuZ2V0
VWludDgob2Zmc2V0KTsKLSAgfQotICBCdWZmZXIucHJvdG90eXBlLmdldFVpbnQxNiA9IGZ1bmN0
aW9uKG9mZnNldCkgewotICAgIHJldHVybiB0aGlzLmRhdGFWaWV3LmdldFVpbnQxNihvZmZzZXQs
IGtIb3N0SXNMaXR0bGVFbmRpYW4pOwotICB9Ci0gIEJ1ZmZlci5wcm90b3R5cGUuZ2V0VWludDMy
ID0gZnVuY3Rpb24ob2Zmc2V0KSB7Ci0gICAgcmV0dXJuIHRoaXMuZGF0YVZpZXcuZ2V0VWludDMy
KG9mZnNldCwga0hvc3RJc0xpdHRsZUVuZGlhbik7Ci0gIH0KLSAgQnVmZmVyLnByb3RvdHlwZS5n
ZXRVaW50NjQgPSBmdW5jdGlvbihvZmZzZXQpIHsKLSAgICB2YXIgbG8sIGhpOwotICAgIGlmIChr
SG9zdElzTGl0dGxlRW5kaWFuKSB7Ci0gICAgICBsbyA9IHRoaXMuZGF0YVZpZXcuZ2V0VWludDMy
KG9mZnNldCwga0hvc3RJc0xpdHRsZUVuZGlhbik7Ci0gICAgICBoaSA9IHRoaXMuZGF0YVZpZXcu
Z2V0VWludDMyKG9mZnNldCArIDQsIGtIb3N0SXNMaXR0bGVFbmRpYW4pOwotICAgIH0gZWxzZSB7
Ci0gICAgICBoaSA9IHRoaXMuZGF0YVZpZXcuZ2V0VWludDMyKG9mZnNldCwga0hvc3RJc0xpdHRs
ZUVuZGlhbik7Ci0gICAgICBsbyA9IHRoaXMuZGF0YVZpZXcuZ2V0VWludDMyKG9mZnNldCArIDQs
IGtIb3N0SXNMaXR0bGVFbmRpYW4pOwotICAgIH0KLSAgICByZXR1cm4gbG8gKyBoaSAqIGtIaWdo
V29yZE11bHRpcGxpZXI7Ci0gIH0KLQotICBCdWZmZXIucHJvdG90eXBlLmdldEludDggPSBmdW5j
dGlvbihvZmZzZXQpIHsKLSAgICByZXR1cm4gdGhpcy5kYXRhVmlldy5nZXRJbnQ4KG9mZnNldCk7
Ci0gIH0KLSAgQnVmZmVyLnByb3RvdHlwZS5nZXRJbnQxNiA9IGZ1bmN0aW9uKG9mZnNldCkgewot
ICAgIHJldHVybiB0aGlzLmRhdGFWaWV3LmdldEludDE2KG9mZnNldCwga0hvc3RJc0xpdHRsZUVu
ZGlhbik7Ci0gIH0KLSAgQnVmZmVyLnByb3RvdHlwZS5nZXRJbnQzMiA9IGZ1bmN0aW9uKG9mZnNl
dCkgewotICAgIHJldHVybiB0aGlzLmRhdGFWaWV3LmdldEludDMyKG9mZnNldCwga0hvc3RJc0xp
dHRsZUVuZGlhbik7Ci0gIH0KLSAgQnVmZmVyLnByb3RvdHlwZS5nZXRJbnQ2NCA9IGZ1bmN0aW9u
KG9mZnNldCkgewotICAgIHZhciBsbywgaGk7Ci0gICAgaWYgKGtIb3N0SXNMaXR0bGVFbmRpYW4p
IHsKLSAgICAgIGxvID0gdGhpcy5kYXRhVmlldy5nZXRVaW50MzIob2Zmc2V0LCBrSG9zdElzTGl0
dGxlRW5kaWFuKTsKLSAgICAgIGhpID0gdGhpcy5kYXRhVmlldy5nZXRJbnQzMihvZmZzZXQgKyA0
LCBrSG9zdElzTGl0dGxlRW5kaWFuKTsKLSAgICB9IGVsc2UgewotICAgICAgaGkgPSB0aGlzLmRh
dGFWaWV3LmdldEludDMyKG9mZnNldCwga0hvc3RJc0xpdHRsZUVuZGlhbik7Ci0gICAgICBsbyA9
IHRoaXMuZGF0YVZpZXcuZ2V0VWludDMyKG9mZnNldCArIDQsIGtIb3N0SXNMaXR0bGVFbmRpYW4p
OwotICAgIH0KLSAgICByZXR1cm4gbG8gKyBoaSAqIGtIaWdoV29yZE11bHRpcGxpZXI7Ci0gIH0K
LQotICBCdWZmZXIucHJvdG90eXBlLmdldEZsb2F0MzIgPSBmdW5jdGlvbihvZmZzZXQpIHsKLSAg
ICByZXR1cm4gdGhpcy5kYXRhVmlldy5nZXRGbG9hdDMyKG9mZnNldCwga0hvc3RJc0xpdHRsZUVu
ZGlhbik7Ci0gIH0KLSAgQnVmZmVyLnByb3RvdHlwZS5nZXRGbG9hdDY0ID0gZnVuY3Rpb24ob2Zm
c2V0KSB7Ci0gICAgcmV0dXJuIHRoaXMuZGF0YVZpZXcuZ2V0RmxvYXQ2NChvZmZzZXQsIGtIb3N0
SXNMaXR0bGVFbmRpYW4pOwotICB9Ci0KLSAgQnVmZmVyLnByb3RvdHlwZS5zZXRVaW50OCA9IGZ1
bmN0aW9uKG9mZnNldCwgdmFsdWUpIHsKLSAgICB0aGlzLmRhdGFWaWV3LnNldFVpbnQ4KG9mZnNl
dCwgdmFsdWUpOwotICB9Ci0gIEJ1ZmZlci5wcm90b3R5cGUuc2V0VWludDE2ID0gZnVuY3Rpb24o
b2Zmc2V0LCB2YWx1ZSkgewotICAgIHRoaXMuZGF0YVZpZXcuc2V0VWludDE2KG9mZnNldCwgdmFs
dWUsIGtIb3N0SXNMaXR0bGVFbmRpYW4pOwotICB9Ci0gIEJ1ZmZlci5wcm90b3R5cGUuc2V0VWlu
dDMyID0gZnVuY3Rpb24ob2Zmc2V0LCB2YWx1ZSkgewotICAgIHRoaXMuZGF0YVZpZXcuc2V0VWlu
dDMyKG9mZnNldCwgdmFsdWUsIGtIb3N0SXNMaXR0bGVFbmRpYW4pOwotICB9Ci0gIEJ1ZmZlci5w
cm90b3R5cGUuc2V0VWludDY0ID0gZnVuY3Rpb24ob2Zmc2V0LCB2YWx1ZSkgewotICAgIHZhciBo
aSA9ICh2YWx1ZSAvIGtIaWdoV29yZE11bHRpcGxpZXIpIHwgMDsKLSAgICBpZiAoa0hvc3RJc0xp
dHRsZUVuZGlhbikgewotICAgICAgdGhpcy5kYXRhVmlldy5zZXRJbnQzMihvZmZzZXQsIHZhbHVl
LCBrSG9zdElzTGl0dGxlRW5kaWFuKTsKLSAgICAgIHRoaXMuZGF0YVZpZXcuc2V0SW50MzIob2Zm
c2V0ICsgNCwgaGksIGtIb3N0SXNMaXR0bGVFbmRpYW4pOwotICAgIH0gZWxzZSB7Ci0gICAgICB0
aGlzLmRhdGFWaWV3LnNldEludDMyKG9mZnNldCwgaGksIGtIb3N0SXNMaXR0bGVFbmRpYW4pOwot
ICAgICAgdGhpcy5kYXRhVmlldy5zZXRJbnQzMihvZmZzZXQgKyA0LCB2YWx1ZSwga0hvc3RJc0xp
dHRsZUVuZGlhbik7Ci0gICAgfQotICB9Ci0KLSAgQnVmZmVyLnByb3RvdHlwZS5zZXRJbnQ4ID0g
ZnVuY3Rpb24ob2Zmc2V0LCB2YWx1ZSkgewotICAgIHRoaXMuZGF0YVZpZXcuc2V0SW50OChvZmZz
ZXQsIHZhbHVlKTsKLSAgfQotICBCdWZmZXIucHJvdG90eXBlLnNldEludDE2ID0gZnVuY3Rpb24o
b2Zmc2V0LCB2YWx1ZSkgewotICAgIHRoaXMuZGF0YVZpZXcuc2V0SW50MTYob2Zmc2V0LCB2YWx1
ZSwga0hvc3RJc0xpdHRsZUVuZGlhbik7Ci0gIH0KLSAgQnVmZmVyLnByb3RvdHlwZS5zZXRJbnQz
MiA9IGZ1bmN0aW9uKG9mZnNldCwgdmFsdWUpIHsKLSAgICB0aGlzLmRhdGFWaWV3LnNldEludDMy
KG9mZnNldCwgdmFsdWUsIGtIb3N0SXNMaXR0bGVFbmRpYW4pOwotICB9Ci0gIEJ1ZmZlci5wcm90
b3R5cGUuc2V0SW50NjQgPSBmdW5jdGlvbihvZmZzZXQsIHZhbHVlKSB7Ci0gICAgdmFyIGhpID0g
TWF0aC5mbG9vcih2YWx1ZSAvIGtIaWdoV29yZE11bHRpcGxpZXIpOwotICAgIGlmIChrSG9zdElz
TGl0dGxlRW5kaWFuKSB7Ci0gICAgICB0aGlzLmRhdGFWaWV3LnNldEludDMyKG9mZnNldCwgdmFs
dWUsIGtIb3N0SXNMaXR0bGVFbmRpYW4pOwotICAgICAgdGhpcy5kYXRhVmlldy5zZXRJbnQzMihv
ZmZzZXQgKyA0LCBoaSwga0hvc3RJc0xpdHRsZUVuZGlhbik7Ci0gICAgfSBlbHNlIHsKLSAgICAg
IHRoaXMuZGF0YVZpZXcuc2V0SW50MzIob2Zmc2V0LCBoaSwga0hvc3RJc0xpdHRsZUVuZGlhbik7
Ci0gICAgICB0aGlzLmRhdGFWaWV3LnNldEludDMyKG9mZnNldCArIDQsIHZhbHVlLCBrSG9zdElz
TGl0dGxlRW5kaWFuKTsKLSAgICB9Ci0gIH0KLQotICBCdWZmZXIucHJvdG90eXBlLnNldEZsb2F0
MzIgPSBmdW5jdGlvbihvZmZzZXQsIHZhbHVlKSB7Ci0gICAgdGhpcy5kYXRhVmlldy5zZXRGbG9h
dDMyKG9mZnNldCwgdmFsdWUsIGtIb3N0SXNMaXR0bGVFbmRpYW4pOwotICB9Ci0gIEJ1ZmZlci5w
cm90b3R5cGUuc2V0RmxvYXQ2NCA9IGZ1bmN0aW9uKG9mZnNldCwgdmFsdWUpIHsKLSAgICB0aGlz
LmRhdGFWaWV3LnNldEZsb2F0NjQob2Zmc2V0LCB2YWx1ZSwga0hvc3RJc0xpdHRsZUVuZGlhbik7
Ci0gIH0KLQotICBpbnRlcm5hbC5CdWZmZXIgPSBCdWZmZXI7Ci19KSgpOwotLy8gQ29weXJpZ2h0
IDIwMTQgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ug
b2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRo
YXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotCi0oZnVuY3Rpb24oKSB7
Ci0gIHZhciBpbnRlcm5hbCA9IG1vam8uaW50ZXJuYWw7Ci0KLSAgdmFyIGtFcnJvclVuc2lnbmVk
ID0gIlBhc3NpbmcgbmVnYXRpdmUgdmFsdWUgdG8gdW5zaWduZWQiOwotICB2YXIga0Vycm9yQXJy
YXkgPSAiUGFzc2luZyBub24gQXJyYXkgZm9yIGFycmF5IHR5cGUiOwotICB2YXIga0Vycm9yU3Ry
aW5nID0gIlBhc3Npbmcgbm9uIFN0cmluZyBmb3Igc3RyaW5nIHR5cGUiOwotICB2YXIga0Vycm9y
TWFwID0gIlBhc3Npbmcgbm9uIE1hcCBmb3IgbWFwIHR5cGUiOwotCi0gIC8vIE1lbW9yeSAtLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tCi0KLSAgdmFyIGtBbGlnbm1lbnQgPSA4OwotCi0gIGZ1bmN0aW9uIGFsaWduKHNpemUp
IHsKLSAgICByZXR1cm4gc2l6ZSArIChrQWxpZ25tZW50IC0gKHNpemUgJSBrQWxpZ25tZW50KSkg
JSBrQWxpZ25tZW50OwotICB9Ci0KLSAgZnVuY3Rpb24gaXNBbGlnbmVkKG9mZnNldCkgewotICAg
IHJldHVybiBvZmZzZXQgPj0gMCAmJiAob2Zmc2V0ICUga0FsaWdubWVudCkgPT09IDA7Ci0gIH0K
LQotICAvLyBDb25zdGFudHMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0gIHZhciBrQXJyYXlIZWFkZXJTaXplID0gODsK
LSAgdmFyIGtTdHJ1Y3RIZWFkZXJTaXplID0gODsKLSAgdmFyIGtNZXNzYWdlVjBIZWFkZXJTaXpl
ID0gMjQ7Ci0gIHZhciBrTWVzc2FnZVYxSGVhZGVyU2l6ZSA9IDMyOwotICB2YXIga01lc3NhZ2VW
MkhlYWRlclNpemUgPSA0ODsKLSAgdmFyIGtNYXBTdHJ1Y3RQYXlsb2FkU2l6ZSA9IDE2OwotCi0g
IHZhciBrU3RydWN0SGVhZGVyTnVtQnl0ZXNPZmZzZXQgPSAwOwotICB2YXIga1N0cnVjdEhlYWRl
clZlcnNpb25PZmZzZXQgPSA0OwotCi0gIHZhciBrRW5jb2RlZEludmFsaWRIYW5kbGVWYWx1ZSA9
IDB4RkZGRkZGRkY7Ci0KLSAgLy8gRGVjb2RlciAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotICBmdW5jdGlvbiBEZWNv
ZGVyKGJ1ZmZlciwgaGFuZGxlcywgYXNzb2NpYXRlZEVuZHBvaW50SGFuZGxlcywgYmFzZSkgewot
ICAgIHRoaXMuYnVmZmVyID0gYnVmZmVyOwotICAgIHRoaXMuaGFuZGxlcyA9IGhhbmRsZXM7Ci0g
ICAgdGhpcy5hc3NvY2lhdGVkRW5kcG9pbnRIYW5kbGVzID0gYXNzb2NpYXRlZEVuZHBvaW50SGFu
ZGxlczsKLSAgICB0aGlzLmJhc2UgPSBiYXNlOwotICAgIHRoaXMubmV4dCA9IGJhc2U7Ci0gIH0K
LQotICBEZWNvZGVyLnByb3RvdHlwZS5hbGlnbiA9IGZ1bmN0aW9uKCkgewotICAgIHRoaXMubmV4
dCA9IGFsaWduKHRoaXMubmV4dCk7Ci0gIH07Ci0KLSAgRGVjb2Rlci5wcm90b3R5cGUuc2tpcCA9
IGZ1bmN0aW9uKG9mZnNldCkgewotICAgIHRoaXMubmV4dCArPSBvZmZzZXQ7Ci0gIH07Ci0KLSAg
RGVjb2Rlci5wcm90b3R5cGUucmVhZEludDggPSBmdW5jdGlvbigpIHsKLSAgICB2YXIgcmVzdWx0
ID0gdGhpcy5idWZmZXIuZ2V0SW50OCh0aGlzLm5leHQpOwotICAgIHRoaXMubmV4dCArPSAxOwot
ICAgIHJldHVybiByZXN1bHQ7Ci0gIH07Ci0KLSAgRGVjb2Rlci5wcm90b3R5cGUucmVhZFVpbnQ4
ID0gZnVuY3Rpb24oKSB7Ci0gICAgdmFyIHJlc3VsdCA9IHRoaXMuYnVmZmVyLmdldFVpbnQ4KHRo
aXMubmV4dCk7Ci0gICAgdGhpcy5uZXh0ICs9IDE7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLSAgfTsK
LQotICBEZWNvZGVyLnByb3RvdHlwZS5yZWFkSW50MTYgPSBmdW5jdGlvbigpIHsKLSAgICB2YXIg
cmVzdWx0ID0gdGhpcy5idWZmZXIuZ2V0SW50MTYodGhpcy5uZXh0KTsKLSAgICB0aGlzLm5leHQg
Kz0gMjsKLSAgICByZXR1cm4gcmVzdWx0OwotICB9OwotCi0gIERlY29kZXIucHJvdG90eXBlLnJl
YWRVaW50MTYgPSBmdW5jdGlvbigpIHsKLSAgICB2YXIgcmVzdWx0ID0gdGhpcy5idWZmZXIuZ2V0
VWludDE2KHRoaXMubmV4dCk7Ci0gICAgdGhpcy5uZXh0ICs9IDI7Ci0gICAgcmV0dXJuIHJlc3Vs
dDsKLSAgfTsKLQotICBEZWNvZGVyLnByb3RvdHlwZS5yZWFkSW50MzIgPSBmdW5jdGlvbigpIHsK
LSAgICB2YXIgcmVzdWx0ID0gdGhpcy5idWZmZXIuZ2V0SW50MzIodGhpcy5uZXh0KTsKLSAgICB0
aGlzLm5leHQgKz0gNDsKLSAgICByZXR1cm4gcmVzdWx0OwotICB9OwotCi0gIERlY29kZXIucHJv
dG90eXBlLnJlYWRVaW50MzIgPSBmdW5jdGlvbigpIHsKLSAgICB2YXIgcmVzdWx0ID0gdGhpcy5i
dWZmZXIuZ2V0VWludDMyKHRoaXMubmV4dCk7Ci0gICAgdGhpcy5uZXh0ICs9IDQ7Ci0gICAgcmV0
dXJuIHJlc3VsdDsKLSAgfTsKLQotICBEZWNvZGVyLnByb3RvdHlwZS5yZWFkSW50NjQgPSBmdW5j
dGlvbigpIHsKLSAgICB2YXIgcmVzdWx0ID0gdGhpcy5idWZmZXIuZ2V0SW50NjQodGhpcy5uZXh0
KTsKLSAgICB0aGlzLm5leHQgKz0gODsKLSAgICByZXR1cm4gcmVzdWx0OwotICB9OwotCi0gIERl
Y29kZXIucHJvdG90eXBlLnJlYWRVaW50NjQgPSBmdW5jdGlvbigpIHsKLSAgICB2YXIgcmVzdWx0
ID0gdGhpcy5idWZmZXIuZ2V0VWludDY0KHRoaXMubmV4dCk7Ci0gICAgdGhpcy5uZXh0ICs9IDg7
Ci0gICAgcmV0dXJuIHJlc3VsdDsKLSAgfTsKLQotICBEZWNvZGVyLnByb3RvdHlwZS5yZWFkRmxv
YXQgPSBmdW5jdGlvbigpIHsKLSAgICB2YXIgcmVzdWx0ID0gdGhpcy5idWZmZXIuZ2V0RmxvYXQz
Mih0aGlzLm5leHQpOwotICAgIHRoaXMubmV4dCArPSA0OwotICAgIHJldHVybiByZXN1bHQ7Ci0g
IH07Ci0KLSAgRGVjb2Rlci5wcm90b3R5cGUucmVhZERvdWJsZSA9IGZ1bmN0aW9uKCkgewotICAg
IHZhciByZXN1bHQgPSB0aGlzLmJ1ZmZlci5nZXRGbG9hdDY0KHRoaXMubmV4dCk7Ci0gICAgdGhp
cy5uZXh0ICs9IDg7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLSAgfTsKLQotICBEZWNvZGVyLnByb3Rv
dHlwZS5kZWNvZGVQb2ludGVyID0gZnVuY3Rpb24oKSB7Ci0gICAgLy8gVE9ETyhhYmFydGgpOiBU
byBjb3JyZWN0bHkgZGVjb2RlIGEgcG9pbnRlciwgd2UgbmVlZCB0byBrbm93IHRoZSByZWFsCi0g
ICAgLy8gYmFzZSBhZGRyZXNzIG9mIHRoZSBhcnJheSBidWZmZXIuCi0gICAgdmFyIG9mZnNldFBv
aW50ZXIgPSB0aGlzLm5leHQ7Ci0gICAgdmFyIG9mZnNldCA9IHRoaXMucmVhZFVpbnQ2NCgpOwot
ICAgIGlmICghb2Zmc2V0KQotICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIG9mZnNldFBvaW50
ZXIgKyBvZmZzZXQ7Ci0gIH07Ci0KLSAgRGVjb2Rlci5wcm90b3R5cGUuZGVjb2RlQW5kQ3JlYXRl
RGVjb2RlciA9IGZ1bmN0aW9uKHBvaW50ZXIpIHsKLSAgICByZXR1cm4gbmV3IERlY29kZXIodGhp
cy5idWZmZXIsIHRoaXMuaGFuZGxlcywKLSAgICAgICAgdGhpcy5hc3NvY2lhdGVkRW5kcG9pbnRI
YW5kbGVzLCBwb2ludGVyKTsKLSAgfTsKLQotICBEZWNvZGVyLnByb3RvdHlwZS5kZWNvZGVIYW5k
bGUgPSBmdW5jdGlvbigpIHsKLSAgICByZXR1cm4gdGhpcy5oYW5kbGVzW3RoaXMucmVhZFVpbnQz
MigpXSB8fCBudWxsOwotICB9OwotCi0gIERlY29kZXIucHJvdG90eXBlLmRlY29kZUFzc29jaWF0
ZWRFbmRwb2ludEhhbmRsZSA9IGZ1bmN0aW9uKCkgewotICAgIHJldHVybiB0aGlzLmFzc29jaWF0
ZWRFbmRwb2ludEhhbmRsZXNbdGhpcy5yZWFkVWludDMyKCldIHx8IG51bGw7Ci0gIH07Ci0KLSAg
RGVjb2Rlci5wcm90b3R5cGUuZGVjb2RlU3RyaW5nID0gZnVuY3Rpb24oKSB7Ci0gICAgdmFyIG51
bWJlck9mQnl0ZXMgPSB0aGlzLnJlYWRVaW50MzIoKTsKLSAgICB2YXIgbnVtYmVyT2ZFbGVtZW50
cyA9IHRoaXMucmVhZFVpbnQzMigpOwotICAgIHZhciBiYXNlID0gdGhpcy5uZXh0OwotICAgIHRo
aXMubmV4dCArPSBudW1iZXJPZkVsZW1lbnRzOwotICAgIHJldHVybiBpbnRlcm5hbC5kZWNvZGVV
dGY4U3RyaW5nKAotICAgICAgICBuZXcgVWludDhBcnJheSh0aGlzLmJ1ZmZlci5hcnJheUJ1ZmZl
ciwgYmFzZSwgbnVtYmVyT2ZFbGVtZW50cykpOwotICB9OwotCi0gIERlY29kZXIucHJvdG90eXBl
LmRlY29kZUFycmF5ID0gZnVuY3Rpb24oY2xzKSB7Ci0gICAgdmFyIG51bWJlck9mQnl0ZXMgPSB0
aGlzLnJlYWRVaW50MzIoKTsKLSAgICB2YXIgbnVtYmVyT2ZFbGVtZW50cyA9IHRoaXMucmVhZFVp
bnQzMigpOwotICAgIHZhciB2YWwgPSBuZXcgQXJyYXkobnVtYmVyT2ZFbGVtZW50cyk7Ci0gICAg
aWYgKGNscyA9PT0gUGFja2VkQm9vbCkgewotICAgICAgdmFyIGJ5dGU7Ci0gICAgICBmb3IgKHZh
ciBpID0gMDsgaSA8IG51bWJlck9mRWxlbWVudHM7ICsraSkgewotICAgICAgICBpZiAoaSAlIDgg
PT09IDApCi0gICAgICAgICAgYnl0ZSA9IHRoaXMucmVhZFVpbnQ4KCk7Ci0gICAgICAgIHZhbFtp
XSA9IChieXRlICYgKDEgPDwgaSAlIDgpKSA/IHRydWUgOiBmYWxzZTsKLSAgICAgIH0KLSAgICB9
IGVsc2UgewotICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBudW1iZXJPZkVsZW1lbnRzOyArK2kp
IHsKLSAgICAgICAgdmFsW2ldID0gY2xzLmRlY29kZSh0aGlzKTsKLSAgICAgIH0KLSAgICB9Ci0g
ICAgcmV0dXJuIHZhbDsKLSAgfTsKLQotICBEZWNvZGVyLnByb3RvdHlwZS5kZWNvZGVTdHJ1Y3Qg
PSBmdW5jdGlvbihjbHMpIHsKLSAgICByZXR1cm4gY2xzLmRlY29kZSh0aGlzKTsKLSAgfTsKLQot
ICBEZWNvZGVyLnByb3RvdHlwZS5kZWNvZGVTdHJ1Y3RQb2ludGVyID0gZnVuY3Rpb24oY2xzKSB7
Ci0gICAgdmFyIHBvaW50ZXIgPSB0aGlzLmRlY29kZVBvaW50ZXIoKTsKLSAgICBpZiAoIXBvaW50
ZXIpIHsKLSAgICAgIHJldHVybiBudWxsOwotICAgIH0KLSAgICByZXR1cm4gY2xzLmRlY29kZSh0
aGlzLmRlY29kZUFuZENyZWF0ZURlY29kZXIocG9pbnRlcikpOwotICB9OwotCi0gIERlY29kZXIu
cHJvdG90eXBlLmRlY29kZUFycmF5UG9pbnRlciA9IGZ1bmN0aW9uKGNscykgewotICAgIHZhciBw
b2ludGVyID0gdGhpcy5kZWNvZGVQb2ludGVyKCk7Ci0gICAgaWYgKCFwb2ludGVyKSB7Ci0gICAg
ICByZXR1cm4gbnVsbDsKLSAgICB9Ci0gICAgcmV0dXJuIHRoaXMuZGVjb2RlQW5kQ3JlYXRlRGVj
b2Rlcihwb2ludGVyKS5kZWNvZGVBcnJheShjbHMpOwotICB9OwotCi0gIERlY29kZXIucHJvdG90
eXBlLmRlY29kZVN0cmluZ1BvaW50ZXIgPSBmdW5jdGlvbigpIHsKLSAgICB2YXIgcG9pbnRlciA9
IHRoaXMuZGVjb2RlUG9pbnRlcigpOwotICAgIGlmICghcG9pbnRlcikgewotICAgICAgcmV0dXJu
IG51bGw7Ci0gICAgfQotICAgIHJldHVybiB0aGlzLmRlY29kZUFuZENyZWF0ZURlY29kZXIocG9p
bnRlcikuZGVjb2RlU3RyaW5nKCk7Ci0gIH07Ci0KLSAgRGVjb2Rlci5wcm90b3R5cGUuZGVjb2Rl
TWFwID0gZnVuY3Rpb24oa2V5Q2xhc3MsIHZhbHVlQ2xhc3MpIHsKLSAgICB0aGlzLnNraXAoNCk7
IC8vIG51bWJlck9mQnl0ZXMKLSAgICB0aGlzLnNraXAoNCk7IC8vIHZlcnNpb24KLSAgICB2YXIg
a2V5cyA9IHRoaXMuZGVjb2RlQXJyYXlQb2ludGVyKGtleUNsYXNzKTsKLSAgICB2YXIgdmFsdWVz
ID0gdGhpcy5kZWNvZGVBcnJheVBvaW50ZXIodmFsdWVDbGFzcyk7Ci0gICAgdmFyIHZhbCA9IG5l
dyBNYXAoKTsKLSAgICBmb3IgKHZhciBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspCi0gICAg
ICB2YWwuc2V0KGtleXNbaV0sIHZhbHVlc1tpXSk7Ci0gICAgcmV0dXJuIHZhbDsKLSAgfTsKLQot
ICBEZWNvZGVyLnByb3RvdHlwZS5kZWNvZGVNYXBQb2ludGVyID0gZnVuY3Rpb24oa2V5Q2xhc3Ms
IHZhbHVlQ2xhc3MpIHsKLSAgICB2YXIgcG9pbnRlciA9IHRoaXMuZGVjb2RlUG9pbnRlcigpOwot
ICAgIGlmICghcG9pbnRlcikgewotICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfQotICAgIHZhciBk
ZWNvZGVyID0gdGhpcy5kZWNvZGVBbmRDcmVhdGVEZWNvZGVyKHBvaW50ZXIpOwotICAgIHJldHVy
biBkZWNvZGVyLmRlY29kZU1hcChrZXlDbGFzcywgdmFsdWVDbGFzcyk7Ci0gIH07Ci0KLSAgLy8g
RW5jb2RlciAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0KLQotICBmdW5jdGlvbiBFbmNvZGVyKGJ1ZmZlciwgaGFuZGxlcywg
YXNzb2NpYXRlZEVuZHBvaW50SGFuZGxlcywgYmFzZSkgewotICAgIHRoaXMuYnVmZmVyID0gYnVm
ZmVyOwotICAgIHRoaXMuaGFuZGxlcyA9IGhhbmRsZXM7Ci0gICAgdGhpcy5hc3NvY2lhdGVkRW5k
cG9pbnRIYW5kbGVzID0gYXNzb2NpYXRlZEVuZHBvaW50SGFuZGxlczsKLSAgICB0aGlzLmJhc2Ug
PSBiYXNlOwotICAgIHRoaXMubmV4dCA9IGJhc2U7Ci0gIH0KLQotICBFbmNvZGVyLnByb3RvdHlw
ZS5hbGlnbiA9IGZ1bmN0aW9uKCkgewotICAgIHRoaXMubmV4dCA9IGFsaWduKHRoaXMubmV4dCk7
Ci0gIH07Ci0KLSAgRW5jb2Rlci5wcm90b3R5cGUuc2tpcCA9IGZ1bmN0aW9uKG9mZnNldCkgewot
ICAgIHRoaXMubmV4dCArPSBvZmZzZXQ7Ci0gIH07Ci0KLSAgRW5jb2Rlci5wcm90b3R5cGUud3Jp
dGVJbnQ4ID0gZnVuY3Rpb24odmFsKSB7Ci0gICAgdGhpcy5idWZmZXIuc2V0SW50OCh0aGlzLm5l
eHQsIHZhbCk7Ci0gICAgdGhpcy5uZXh0ICs9IDE7Ci0gIH07Ci0KLSAgRW5jb2Rlci5wcm90b3R5
cGUud3JpdGVVaW50OCA9IGZ1bmN0aW9uKHZhbCkgewotICAgIGlmICh2YWwgPCAwKSB7Ci0gICAg
ICB0aHJvdyBuZXcgRXJyb3Ioa0Vycm9yVW5zaWduZWQpOwotICAgIH0KLSAgICB0aGlzLmJ1ZmZl
ci5zZXRVaW50OCh0aGlzLm5leHQsIHZhbCk7Ci0gICAgdGhpcy5uZXh0ICs9IDE7Ci0gIH07Ci0K
LSAgRW5jb2Rlci5wcm90b3R5cGUud3JpdGVJbnQxNiA9IGZ1bmN0aW9uKHZhbCkgewotICAgIHRo
aXMuYnVmZmVyLnNldEludDE2KHRoaXMubmV4dCwgdmFsKTsKLSAgICB0aGlzLm5leHQgKz0gMjsK
LSAgfTsKLQotICBFbmNvZGVyLnByb3RvdHlwZS53cml0ZVVpbnQxNiA9IGZ1bmN0aW9uKHZhbCkg
ewotICAgIGlmICh2YWwgPCAwKSB7Ci0gICAgICB0aHJvdyBuZXcgRXJyb3Ioa0Vycm9yVW5zaWdu
ZWQpOwotICAgIH0KLSAgICB0aGlzLmJ1ZmZlci5zZXRVaW50MTYodGhpcy5uZXh0LCB2YWwpOwot
ICAgIHRoaXMubmV4dCArPSAyOwotICB9OwotCi0gIEVuY29kZXIucHJvdG90eXBlLndyaXRlSW50
MzIgPSBmdW5jdGlvbih2YWwpIHsKLSAgICB0aGlzLmJ1ZmZlci5zZXRJbnQzMih0aGlzLm5leHQs
IHZhbCk7Ci0gICAgdGhpcy5uZXh0ICs9IDQ7Ci0gIH07Ci0KLSAgRW5jb2Rlci5wcm90b3R5cGUu
d3JpdGVVaW50MzIgPSBmdW5jdGlvbih2YWwpIHsKLSAgICBpZiAodmFsIDwgMCkgewotICAgICAg
dGhyb3cgbmV3IEVycm9yKGtFcnJvclVuc2lnbmVkKTsKLSAgICB9Ci0gICAgdGhpcy5idWZmZXIu
c2V0VWludDMyKHRoaXMubmV4dCwgdmFsKTsKLSAgICB0aGlzLm5leHQgKz0gNDsKLSAgfTsKLQot
ICBFbmNvZGVyLnByb3RvdHlwZS53cml0ZUludDY0ID0gZnVuY3Rpb24odmFsKSB7Ci0gICAgdGhp
cy5idWZmZXIuc2V0SW50NjQodGhpcy5uZXh0LCB2YWwpOwotICAgIHRoaXMubmV4dCArPSA4Owot
ICB9OwotCi0gIEVuY29kZXIucHJvdG90eXBlLndyaXRlVWludDY0ID0gZnVuY3Rpb24odmFsKSB7
Ci0gICAgaWYgKHZhbCA8IDApIHsKLSAgICAgIHRocm93IG5ldyBFcnJvcihrRXJyb3JVbnNpZ25l
ZCk7Ci0gICAgfQotICAgIHRoaXMuYnVmZmVyLnNldFVpbnQ2NCh0aGlzLm5leHQsIHZhbCk7Ci0g
ICAgdGhpcy5uZXh0ICs9IDg7Ci0gIH07Ci0KLSAgRW5jb2Rlci5wcm90b3R5cGUud3JpdGVGbG9h
dCA9IGZ1bmN0aW9uKHZhbCkgewotICAgIHRoaXMuYnVmZmVyLnNldEZsb2F0MzIodGhpcy5uZXh0
LCB2YWwpOwotICAgIHRoaXMubmV4dCArPSA0OwotICB9OwotCi0gIEVuY29kZXIucHJvdG90eXBl
LndyaXRlRG91YmxlID0gZnVuY3Rpb24odmFsKSB7Ci0gICAgdGhpcy5idWZmZXIuc2V0RmxvYXQ2
NCh0aGlzLm5leHQsIHZhbCk7Ci0gICAgdGhpcy5uZXh0ICs9IDg7Ci0gIH07Ci0KLSAgRW5jb2Rl
ci5wcm90b3R5cGUuZW5jb2RlUG9pbnRlciA9IGZ1bmN0aW9uKHBvaW50ZXIpIHsKLSAgICBpZiAo
IXBvaW50ZXIpCi0gICAgICByZXR1cm4gdGhpcy53cml0ZVVpbnQ2NCgwKTsKLSAgICAvLyBUT0RP
KGFiYXJ0aCk6IFRvIGNvcnJlY3RseSBlbmNvZGUgYSBwb2ludGVyLCB3ZSBuZWVkIHRvIGtub3cg
dGhlIHJlYWwKLSAgICAvLyBiYXNlIGFkZHJlc3Mgb2YgdGhlIGFycmF5IGJ1ZmZlci4KLSAgICB2
YXIgb2Zmc2V0ID0gcG9pbnRlciAtIHRoaXMubmV4dDsKLSAgICB0aGlzLndyaXRlVWludDY0KG9m
ZnNldCk7Ci0gIH07Ci0KLSAgRW5jb2Rlci5wcm90b3R5cGUuY3JlYXRlQW5kRW5jb2RlRW5jb2Rl
ciA9IGZ1bmN0aW9uKHNpemUpIHsKLSAgICB2YXIgcG9pbnRlciA9IHRoaXMuYnVmZmVyLmFsbG9j
KGFsaWduKHNpemUpKTsKLSAgICB0aGlzLmVuY29kZVBvaW50ZXIocG9pbnRlcik7Ci0gICAgcmV0
dXJuIG5ldyBFbmNvZGVyKHRoaXMuYnVmZmVyLCB0aGlzLmhhbmRsZXMsCi0gICAgICAgIHRoaXMu
YXNzb2NpYXRlZEVuZHBvaW50SGFuZGxlcywgcG9pbnRlcik7Ci0gIH07Ci0KLSAgRW5jb2Rlci5w
cm90b3R5cGUuZW5jb2RlSGFuZGxlID0gZnVuY3Rpb24oaGFuZGxlKSB7Ci0gICAgaWYgKGhhbmRs
ZSkgewotICAgICAgdGhpcy5oYW5kbGVzLnB1c2goaGFuZGxlKTsKLSAgICAgIHRoaXMud3JpdGVV
aW50MzIodGhpcy5oYW5kbGVzLmxlbmd0aCAtIDEpOwotICAgIH0gZWxzZSB7Ci0gICAgICB0aGlz
LndyaXRlVWludDMyKGtFbmNvZGVkSW52YWxpZEhhbmRsZVZhbHVlKTsKLSAgICB9Ci0gIH07Ci0K
LSAgRW5jb2Rlci5wcm90b3R5cGUuZW5jb2RlQXNzb2NpYXRlZEVuZHBvaW50SGFuZGxlID0gZnVu
Y3Rpb24oZW5kcG9pbnRIYW5kbGUpIHsKLSAgICBpZiAoZW5kcG9pbnRIYW5kbGUpIHsKLSAgICAg
IHRoaXMuYXNzb2NpYXRlZEVuZHBvaW50SGFuZGxlcy5wdXNoKGVuZHBvaW50SGFuZGxlKTsKLSAg
ICAgIHRoaXMud3JpdGVVaW50MzIodGhpcy5hc3NvY2lhdGVkRW5kcG9pbnRIYW5kbGVzLmxlbmd0
aCAtIDEpOwotICAgIH0gZWxzZSB7Ci0gICAgICB0aGlzLndyaXRlVWludDMyKGtFbmNvZGVkSW52
YWxpZEhhbmRsZVZhbHVlKTsKLSAgICB9Ci0gIH07Ci0KLSAgRW5jb2Rlci5wcm90b3R5cGUuZW5j
b2RlU3RyaW5nID0gZnVuY3Rpb24odmFsKSB7Ci0gICAgdmFyIGJhc2UgPSB0aGlzLm5leHQgKyBr
QXJyYXlIZWFkZXJTaXplOwotICAgIHZhciBudW1iZXJPZkVsZW1lbnRzID0gaW50ZXJuYWwuZW5j
b2RlVXRmOFN0cmluZygKLSAgICAgICAgdmFsLCBuZXcgVWludDhBcnJheSh0aGlzLmJ1ZmZlci5h
cnJheUJ1ZmZlciwgYmFzZSkpOwotICAgIHZhciBudW1iZXJPZkJ5dGVzID0ga0FycmF5SGVhZGVy
U2l6ZSArIG51bWJlck9mRWxlbWVudHM7Ci0gICAgdGhpcy53cml0ZVVpbnQzMihudW1iZXJPZkJ5
dGVzKTsKLSAgICB0aGlzLndyaXRlVWludDMyKG51bWJlck9mRWxlbWVudHMpOwotICAgIHRoaXMu
bmV4dCArPSBudW1iZXJPZkVsZW1lbnRzOwotICB9OwotCi0gIEVuY29kZXIucHJvdG90eXBlLmVu
Y29kZUFycmF5ID0KLSAgICAgIGZ1bmN0aW9uKGNscywgdmFsLCBudW1iZXJPZkVsZW1lbnRzLCBl
bmNvZGVkU2l6ZSkgewotICAgIGlmIChudW1iZXJPZkVsZW1lbnRzID09PSB1bmRlZmluZWQpCi0g
ICAgICBudW1iZXJPZkVsZW1lbnRzID0gdmFsLmxlbmd0aDsKLSAgICBpZiAoZW5jb2RlZFNpemUg
PT09IHVuZGVmaW5lZCkKLSAgICAgIGVuY29kZWRTaXplID0ga0FycmF5SGVhZGVyU2l6ZSArIGNs
cy5lbmNvZGVkU2l6ZSAqIG51bWJlck9mRWxlbWVudHM7Ci0KLSAgICB0aGlzLndyaXRlVWludDMy
KGVuY29kZWRTaXplKTsKLSAgICB0aGlzLndyaXRlVWludDMyKG51bWJlck9mRWxlbWVudHMpOwot
Ci0gICAgaWYgKGNscyA9PT0gUGFja2VkQm9vbCkgewotICAgICAgdmFyIGJ5dGUgPSAwOwotICAg
ICAgZm9yIChpID0gMDsgaSA8IG51bWJlck9mRWxlbWVudHM7ICsraSkgewotICAgICAgICBpZiAo
dmFsW2ldKQotICAgICAgICAgIGJ5dGUgfD0gKDEgPDwgaSAlIDgpOwotICAgICAgICBpZiAoaSAl
IDggPT09IDcgfHwgaSA9PSBudW1iZXJPZkVsZW1lbnRzIC0gMSkgewotICAgICAgICAgIFVpbnQ4
LmVuY29kZSh0aGlzLCBieXRlKTsKLSAgICAgICAgICBieXRlID0gMDsKLSAgICAgICAgfQotICAg
ICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG51bWJlck9mRWxl
bWVudHM7ICsraSkKLSAgICAgICAgY2xzLmVuY29kZSh0aGlzLCB2YWxbaV0pOwotICAgIH0KLSAg
fTsKLQotICBFbmNvZGVyLnByb3RvdHlwZS5lbmNvZGVTdHJ1Y3QgPSBmdW5jdGlvbihjbHMsIHZh
bCkgewotICAgIHJldHVybiBjbHMuZW5jb2RlKHRoaXMsIHZhbCk7Ci0gIH07Ci0KLSAgRW5jb2Rl
ci5wcm90b3R5cGUuZW5jb2RlU3RydWN0UG9pbnRlciA9IGZ1bmN0aW9uKGNscywgdmFsKSB7Ci0g
ICAgaWYgKHZhbCA9PSBudWxsKSB7Ci0gICAgICAvLyBBbHNvIGhhbmRsZXMgdW5kZWZpbmVkLCBz
aW5jZSB1bmRlZmluZWQgPT0gbnVsbC4KLSAgICAgIHRoaXMuZW5jb2RlUG9pbnRlcih2YWwpOwot
ICAgICAgcmV0dXJuOwotICAgIH0KLSAgICB2YXIgZW5jb2RlciA9IHRoaXMuY3JlYXRlQW5kRW5j
b2RlRW5jb2RlcihjbHMuZW5jb2RlZFNpemUpOwotICAgIGNscy5lbmNvZGUoZW5jb2RlciwgdmFs
KTsKLSAgfTsKLQotICBFbmNvZGVyLnByb3RvdHlwZS5lbmNvZGVBcnJheVBvaW50ZXIgPSBmdW5j
dGlvbihjbHMsIHZhbCkgewotICAgIGlmICh2YWwgPT0gbnVsbCkgewotICAgICAgLy8gQWxzbyBo
YW5kbGVzIHVuZGVmaW5lZCwgc2luY2UgdW5kZWZpbmVkID09IG51bGwuCi0gICAgICB0aGlzLmVu
Y29kZVBvaW50ZXIodmFsKTsKLSAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICB2YXIgbnVtYmVy
T2ZFbGVtZW50cyA9IHZhbC5sZW5ndGg7Ci0gICAgaWYgKCFOdW1iZXIuaXNTYWZlSW50ZWdlcihu
dW1iZXJPZkVsZW1lbnRzKSB8fCBudW1iZXJPZkVsZW1lbnRzIDwgMCkKLSAgICAgIHRocm93IG5l
dyBFcnJvcihrRXJyb3JBcnJheSk7Ci0KLSAgICB2YXIgZW5jb2RlZFNpemUgPSBrQXJyYXlIZWFk
ZXJTaXplICsgKChjbHMgPT09IFBhY2tlZEJvb2wpID8KLSAgICAgICAgTWF0aC5jZWlsKG51bWJl
ck9mRWxlbWVudHMgLyA4KSA6IGNscy5lbmNvZGVkU2l6ZSAqIG51bWJlck9mRWxlbWVudHMpOwot
ICAgIHZhciBlbmNvZGVyID0gdGhpcy5jcmVhdGVBbmRFbmNvZGVFbmNvZGVyKGVuY29kZWRTaXpl
KTsKLSAgICBlbmNvZGVyLmVuY29kZUFycmF5KGNscywgdmFsLCBudW1iZXJPZkVsZW1lbnRzLCBl
bmNvZGVkU2l6ZSk7Ci0gIH07Ci0KLSAgRW5jb2Rlci5wcm90b3R5cGUuZW5jb2RlU3RyaW5nUG9p
bnRlciA9IGZ1bmN0aW9uKHZhbCkgewotICAgIGlmICh2YWwgPT0gbnVsbCkgewotICAgICAgLy8g
QWxzbyBoYW5kbGVzIHVuZGVmaW5lZCwgc2luY2UgdW5kZWZpbmVkID09IG51bGwuCi0gICAgICB0
aGlzLmVuY29kZVBvaW50ZXIodmFsKTsKLSAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgLy8gT25s
eSBhY2NlcHRzIHN0cmluZyBwcmltaXZpdGVzLCBub3QgU3RyaW5nIE9iamVjdHMgbGlrZSBuZXcg
U3RyaW5nKCJmb28iKQotICAgIGlmICh0eXBlb2YodmFsKSAhPT0gInN0cmluZyIpIHsKLSAgICAg
IHRocm93IG5ldyBFcnJvcihrRXJyb3JTdHJpbmcpOwotICAgIH0KLSAgICB2YXIgZW5jb2RlZFNp
emUgPSBrQXJyYXlIZWFkZXJTaXplICsgaW50ZXJuYWwudXRmOExlbmd0aCh2YWwpOwotICAgIHZh
ciBlbmNvZGVyID0gdGhpcy5jcmVhdGVBbmRFbmNvZGVFbmNvZGVyKGVuY29kZWRTaXplKTsKLSAg
ICBlbmNvZGVyLmVuY29kZVN0cmluZyh2YWwpOwotICB9OwotCi0gIEVuY29kZXIucHJvdG90eXBl
LmVuY29kZU1hcCA9IGZ1bmN0aW9uKGtleUNsYXNzLCB2YWx1ZUNsYXNzLCB2YWwpIHsKLSAgICB2
YXIga2V5cyA9IG5ldyBBcnJheSh2YWwuc2l6ZSk7Ci0gICAgdmFyIHZhbHVlcyA9IG5ldyBBcnJh
eSh2YWwuc2l6ZSk7Ci0gICAgdmFyIGkgPSAwOwotICAgIHZhbC5mb3JFYWNoKGZ1bmN0aW9uKHZh
bHVlLCBrZXkpIHsKLSAgICAgIHZhbHVlc1tpXSA9IHZhbHVlOwotICAgICAga2V5c1tpKytdID0g
a2V5OwotICAgIH0pOwotICAgIHRoaXMud3JpdGVVaW50MzIoa1N0cnVjdEhlYWRlclNpemUgKyBr
TWFwU3RydWN0UGF5bG9hZFNpemUpOwotICAgIHRoaXMud3JpdGVVaW50MzIoMCk7ICAvLyB2ZXJz
aW9uCi0gICAgdGhpcy5lbmNvZGVBcnJheVBvaW50ZXIoa2V5Q2xhc3MsIGtleXMpOwotICAgIHRo
aXMuZW5jb2RlQXJyYXlQb2ludGVyKHZhbHVlQ2xhc3MsIHZhbHVlcyk7Ci0gIH0KLQotICBFbmNv
ZGVyLnByb3RvdHlwZS5lbmNvZGVNYXBQb2ludGVyID0gZnVuY3Rpb24oa2V5Q2xhc3MsIHZhbHVl
Q2xhc3MsIHZhbCkgewotICAgIGlmICh2YWwgPT0gbnVsbCkgewotICAgICAgLy8gQWxzbyBoYW5k
bGVzIHVuZGVmaW5lZCwgc2luY2UgdW5kZWZpbmVkID09IG51bGwuCi0gICAgICB0aGlzLmVuY29k
ZVBvaW50ZXIodmFsKTsKLSAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYgKCEodmFsIGluc3Rh
bmNlb2YgTWFwKSkgewotICAgICAgdGhyb3cgbmV3IEVycm9yKGtFcnJvck1hcCk7Ci0gICAgfQot
ICAgIHZhciBlbmNvZGVkU2l6ZSA9IGtTdHJ1Y3RIZWFkZXJTaXplICsga01hcFN0cnVjdFBheWxv
YWRTaXplOwotICAgIHZhciBlbmNvZGVyID0gdGhpcy5jcmVhdGVBbmRFbmNvZGVFbmNvZGVyKGVu
Y29kZWRTaXplKTsKLSAgICBlbmNvZGVyLmVuY29kZU1hcChrZXlDbGFzcywgdmFsdWVDbGFzcywg
dmFsKTsKLSAgfTsKLQotICAvLyBNZXNzYWdlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0gIHZhciBrTWVzc2FnZUlu
dGVyZmFjZUlkT2Zmc2V0ID0ga1N0cnVjdEhlYWRlclNpemU7Ci0gIHZhciBrTWVzc2FnZU5hbWVP
ZmZzZXQgPSBrTWVzc2FnZUludGVyZmFjZUlkT2Zmc2V0ICsgNDsKLSAgdmFyIGtNZXNzYWdlRmxh
Z3NPZmZzZXQgPSBrTWVzc2FnZU5hbWVPZmZzZXQgKyA0OwotICB2YXIga01lc3NhZ2VSZXF1ZXN0
SURPZmZzZXQgPSBrTWVzc2FnZUZsYWdzT2Zmc2V0ICsgODsKLSAgdmFyIGtNZXNzYWdlUGF5bG9h
ZEludGVyZmFjZUlkc1BvaW50ZXJPZmZzZXQgPSBrTWVzc2FnZVYySGVhZGVyU2l6ZSAtIDg7Ci0K
LSAgdmFyIGtNZXNzYWdlRXhwZWN0c1Jlc3BvbnNlID0gMSA8PCAwOwotICB2YXIga01lc3NhZ2VJ
c1Jlc3BvbnNlICAgICAgPSAxIDw8IDE7Ci0KLSAgZnVuY3Rpb24gTWVzc2FnZShidWZmZXIsIGhh
bmRsZXMsIGFzc29jaWF0ZWRFbmRwb2ludEhhbmRsZXMpIHsKLSAgICBpZiAoYXNzb2NpYXRlZEVu
ZHBvaW50SGFuZGxlcyA9PT0gdW5kZWZpbmVkKSB7Ci0gICAgICBhc3NvY2lhdGVkRW5kcG9pbnRI
YW5kbGVzID0gW107Ci0gICAgfQotCi0gICAgdGhpcy5idWZmZXIgPSBidWZmZXI7Ci0gICAgdGhp
cy5oYW5kbGVzID0gaGFuZGxlczsKLSAgICB0aGlzLmFzc29jaWF0ZWRFbmRwb2ludEhhbmRsZXMg
PSBhc3NvY2lhdGVkRW5kcG9pbnRIYW5kbGVzOwotICB9Ci0KLSAgTWVzc2FnZS5wcm90b3R5cGUu
Z2V0SGVhZGVyTnVtQnl0ZXMgPSBmdW5jdGlvbigpIHsKLSAgICByZXR1cm4gdGhpcy5idWZmZXIu
Z2V0VWludDMyKGtTdHJ1Y3RIZWFkZXJOdW1CeXRlc09mZnNldCk7Ci0gIH07Ci0KLSAgTWVzc2Fn
ZS5wcm90b3R5cGUuZ2V0SGVhZGVyVmVyc2lvbiA9IGZ1bmN0aW9uKCkgewotICAgIHJldHVybiB0
aGlzLmJ1ZmZlci5nZXRVaW50MzIoa1N0cnVjdEhlYWRlclZlcnNpb25PZmZzZXQpOwotICB9Owot
Ci0gIE1lc3NhZ2UucHJvdG90eXBlLmdldE5hbWUgPSBmdW5jdGlvbigpIHsKLSAgICByZXR1cm4g
dGhpcy5idWZmZXIuZ2V0VWludDMyKGtNZXNzYWdlTmFtZU9mZnNldCk7Ci0gIH07Ci0KLSAgTWVz
c2FnZS5wcm90b3R5cGUuZ2V0RmxhZ3MgPSBmdW5jdGlvbigpIHsKLSAgICByZXR1cm4gdGhpcy5i
dWZmZXIuZ2V0VWludDMyKGtNZXNzYWdlRmxhZ3NPZmZzZXQpOwotICB9OwotCi0gIE1lc3NhZ2Uu
cHJvdG90eXBlLmdldEludGVyZmFjZUlkID0gZnVuY3Rpb24oKSB7Ci0gICAgcmV0dXJuIHRoaXMu
YnVmZmVyLmdldFVpbnQzMihrTWVzc2FnZUludGVyZmFjZUlkT2Zmc2V0KTsKLSAgfTsKLQotICBN
ZXNzYWdlLnByb3RvdHlwZS5nZXRQYXlsb2FkSW50ZXJmYWNlSWRzID0gZnVuY3Rpb24oKSB7Ci0g
ICAgaWYgKHRoaXMuZ2V0SGVhZGVyVmVyc2lvbigpIDwgMikgewotICAgICAgcmV0dXJuIG51bGw7
Ci0gICAgfQotCi0gICAgdmFyIGRlY29kZXIgPSBuZXcgRGVjb2Rlcih0aGlzLmJ1ZmZlciwgdGhp
cy5oYW5kbGVzLAotICAgICAgICB0aGlzLmFzc29jaWF0ZWRFbmRwb2ludEhhbmRsZXMsCi0gICAg
ICAgIGtNZXNzYWdlUGF5bG9hZEludGVyZmFjZUlkc1BvaW50ZXJPZmZzZXQpOwotICAgIHZhciBw
YXlsb2FkSW50ZXJmYWNlSWRzID0gZGVjb2Rlci5kZWNvZGVBcnJheVBvaW50ZXIoVWludDMyKTsK
LSAgICByZXR1cm4gcGF5bG9hZEludGVyZmFjZUlkczsKLSAgfTsKLQotICBNZXNzYWdlLnByb3Rv
dHlwZS5pc1Jlc3BvbnNlID0gZnVuY3Rpb24oKSB7Ci0gICAgcmV0dXJuICh0aGlzLmdldEZsYWdz
KCkgJiBrTWVzc2FnZUlzUmVzcG9uc2UpICE9IDA7Ci0gIH07Ci0KLSAgTWVzc2FnZS5wcm90b3R5
cGUuZXhwZWN0c1Jlc3BvbnNlID0gZnVuY3Rpb24oKSB7Ci0gICAgcmV0dXJuICh0aGlzLmdldEZs
YWdzKCkgJiBrTWVzc2FnZUV4cGVjdHNSZXNwb25zZSkgIT0gMDsKLSAgfTsKLQotICBNZXNzYWdl
LnByb3RvdHlwZS5zZXRSZXF1ZXN0SUQgPSBmdW5jdGlvbihyZXF1ZXN0SUQpIHsKLSAgICAvLyBU
T0RPKGRhcmluKTogVmVyaWZ5IHRoYXQgc3BhY2Ugd2FzIHJlc2VydmVkIGZvciB0aGlzIGZpZWxk
IQotICAgIHRoaXMuYnVmZmVyLnNldFVpbnQ2NChrTWVzc2FnZVJlcXVlc3RJRE9mZnNldCwgcmVx
dWVzdElEKTsKLSAgfTsKLQotICBNZXNzYWdlLnByb3RvdHlwZS5zZXRJbnRlcmZhY2VJZCA9IGZ1
bmN0aW9uKGludGVyZmFjZUlkKSB7Ci0gICAgdGhpcy5idWZmZXIuc2V0VWludDMyKGtNZXNzYWdl
SW50ZXJmYWNlSWRPZmZzZXQsIGludGVyZmFjZUlkKTsKLSAgfTsKLQotICBNZXNzYWdlLnByb3Rv
dHlwZS5zZXRQYXlsb2FkSW50ZXJmYWNlSWRzXyA9IGZ1bmN0aW9uKHBheWxvYWRJbnRlcmZhY2VJ
ZHMpIHsKLSAgICBpZiAodGhpcy5nZXRIZWFkZXJWZXJzaW9uKCkgPCAyKSB7Ci0gICAgICB0aHJv
dyBuZXcgRXJyb3IoCi0gICAgICAgICAgIlZlcnNpb24gb2YgbWVzc2FnZSBkb2VzIG5vdCBzdXBw
b3J0IHBheWxvYWQgaW50ZXJmYWNlIGlkcyIpOwotICAgIH0KLQotICAgIHZhciBkZWNvZGVyID0g
bmV3IERlY29kZXIodGhpcy5idWZmZXIsIHRoaXMuaGFuZGxlcywKLSAgICAgICAgdGhpcy5hc3Nv
Y2lhdGVkRW5kcG9pbnRIYW5kbGVzLAotICAgICAgICBrTWVzc2FnZVBheWxvYWRJbnRlcmZhY2VJ
ZHNQb2ludGVyT2Zmc2V0KTsKLSAgICB2YXIgcGF5bG9hZEludGVyZmFjZUlkc09mZnNldCA9IGRl
Y29kZXIuZGVjb2RlUG9pbnRlcigpOwotICAgIHZhciBlbmNvZGVyID0gbmV3IEVuY29kZXIodGhp
cy5idWZmZXIsIHRoaXMuaGFuZGxlcywKLSAgICAgICAgdGhpcy5hc3NvY2lhdGVkRW5kcG9pbnRI
YW5kbGVzLAotICAgICAgICBwYXlsb2FkSW50ZXJmYWNlSWRzT2Zmc2V0KTsKLSAgICBlbmNvZGVy
LmVuY29kZUFycmF5KFVpbnQzMiwgcGF5bG9hZEludGVyZmFjZUlkcyk7Ci0gIH07Ci0KLSAgTWVz
c2FnZS5wcm90b3R5cGUuc2VyaWFsaXplQXNzb2NpYXRlZEVuZHBvaW50SGFuZGxlcyA9IGZ1bmN0
aW9uKAotICAgICAgYXNzb2NpYXRlZEdyb3VwQ29udHJvbGxlcikgewotICAgIGlmICh0aGlzLmFz
c29jaWF0ZWRFbmRwb2ludEhhbmRsZXMubGVuZ3RoID4gMCkgewotICAgICAgaWYgKHRoaXMuZ2V0
SGVhZGVyVmVyc2lvbigpIDwgMikgewotICAgICAgICB0aHJvdyBuZXcgRXJyb3IoCi0gICAgICAg
ICAgICAiVmVyc2lvbiBvZiBtZXNzYWdlIGRvZXMgbm90IHN1cHBvcnQgYXNzb2NpYXRlZCBlbmRw
b2ludCBoYW5kbGVzIik7Ci0gICAgICB9Ci0KLSAgICAgIHZhciBkYXRhID0gW107Ci0gICAgICBm
b3IgKHZhciBpID0gMDsgaSA8IHRoaXMuYXNzb2NpYXRlZEVuZHBvaW50SGFuZGxlcy5sZW5ndGg7
IGkrKykgewotICAgICAgICB2YXIgaGFuZGxlID0gdGhpcy5hc3NvY2lhdGVkRW5kcG9pbnRIYW5k
bGVzW2ldOwotICAgICAgICBkYXRhLnB1c2goYXNzb2NpYXRlZEdyb3VwQ29udHJvbGxlci5hc3Nv
Y2lhdGVJbnRlcmZhY2UoaGFuZGxlKSk7Ci0gICAgICB9Ci0gICAgICB0aGlzLmFzc29jaWF0ZWRF
bmRwb2ludEhhbmRsZXMgPSBbXTsKLSAgICAgIHRoaXMuc2V0UGF5bG9hZEludGVyZmFjZUlkc18o
ZGF0YSk7Ci0gICAgfQotICB9OwotCi0gIE1lc3NhZ2UucHJvdG90eXBlLmRlc2VyaWFsaXplQXNz
b2NpYXRlZEVuZHBvaW50SGFuZGxlcyA9IGZ1bmN0aW9uKAotICAgICAgYXNzb2NpYXRlZEdyb3Vw
Q29udHJvbGxlcikgewotICAgIGlmICh0aGlzLmdldEhlYWRlclZlcnNpb24oKSA8IDIpIHsKLSAg
ICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIHRoaXMuYXNzb2NpYXRlZEVuZHBvaW50SGFu
ZGxlcyA9IFtdOwotICAgIHZhciBpZHMgPSB0aGlzLmdldFBheWxvYWRJbnRlcmZhY2VJZHMoKTsK
LQotICAgIHZhciByZXN1bHQgPSB0cnVlOwotICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaWRzLmxl
bmd0aDsgaSsrKSB7Ci0gICAgICB2YXIgaGFuZGxlID0gYXNzb2NpYXRlZEdyb3VwQ29udHJvbGxl
ci5jcmVhdGVMb2NhbEVuZHBvaW50SGFuZGxlKGlkc1tpXSk7Ci0gICAgICBpZiAoaW50ZXJuYWwu
aXNWYWxpZEludGVyZmFjZUlkKGlkc1tpXSkgJiYgIWhhbmRsZS5pc1ZhbGlkKCkpIHsKLSAgICAg
ICAgLy8gfGlkc1tpXXwgaXRzZWxmIGlzIHZhbGlkIGJ1dCBoYW5kbGUgY3JlYXRpb24gZmFpbGVk
LiBJbiB0aGF0IGNhc2UsCi0gICAgICAgIC8vIG1hcmsgZGVzZXJpYWxpemF0aW9uIGFzIGZhaWxl
ZCBidXQgY29udGludWUgdG8gZGVzZXJpYWxpemUgdGhlCi0gICAgICAgIC8vIHJlc3Qgb2YgaGFu
ZGxlcy4KLSAgICAgICAgcmVzdWx0ID0gZmFsc2U7Ci0gICAgICB9Ci0gICAgICB0aGlzLmFzc29j
aWF0ZWRFbmRwb2ludEhhbmRsZXMucHVzaChoYW5kbGUpOwotICAgICAgaWRzW2ldID0gaW50ZXJu
YWwua0ludmFsaWRJbnRlcmZhY2VJZDsKLSAgICB9Ci0KLSAgICB0aGlzLnNldFBheWxvYWRJbnRl
cmZhY2VJZHNfKGlkcyk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLSAgfTsKLQotCi0gIC8vIE1lc3Nh
Z2VWMEJ1aWxkZXIgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tCi0KLSAgZnVuY3Rpb24gTWVzc2FnZVYwQnVpbGRlcihtZXNzYWdlTmFtZSwg
cGF5bG9hZFNpemUpIHsKLSAgICAvLyBDdXJyZW50bHksIHdlIGRvbid0IGNvbXB1dGUgdGhlIHBh
eWxvYWQgc2l6ZSBjb3JyZWN0bHkgYWhlYWQgb2YgdGltZS4KLSAgICAvLyBJbnN0ZWFkLCB3ZSBy
ZXNpemUgdGhlIGJ1ZmZlciBhdCB0aGUgZW5kLgotICAgIHZhciBudW1iZXJPZkJ5dGVzID0ga01l
c3NhZ2VWMEhlYWRlclNpemUgKyBwYXlsb2FkU2l6ZTsKLSAgICB0aGlzLmJ1ZmZlciA9IG5ldyBp
bnRlcm5hbC5CdWZmZXIobnVtYmVyT2ZCeXRlcyk7Ci0gICAgdGhpcy5oYW5kbGVzID0gW107Ci0g
ICAgdmFyIGVuY29kZXIgPSB0aGlzLmNyZWF0ZUVuY29kZXIoa01lc3NhZ2VWMEhlYWRlclNpemUp
OwotICAgIGVuY29kZXIud3JpdGVVaW50MzIoa01lc3NhZ2VWMEhlYWRlclNpemUpOwotICAgIGVu
Y29kZXIud3JpdGVVaW50MzIoMCk7ICAvLyB2ZXJzaW9uLgotICAgIGVuY29kZXIud3JpdGVVaW50
MzIoMCk7ICAvLyBpbnRlcmZhY2UgSUQuCi0gICAgZW5jb2Rlci53cml0ZVVpbnQzMihtZXNzYWdl
TmFtZSk7Ci0gICAgZW5jb2Rlci53cml0ZVVpbnQzMigwKTsgIC8vIGZsYWdzLgotICAgIGVuY29k
ZXIud3JpdGVVaW50MzIoMCk7ICAvLyBwYWRkaW5nLgotICB9Ci0KLSAgTWVzc2FnZVYwQnVpbGRl
ci5wcm90b3R5cGUuY3JlYXRlRW5jb2RlciA9IGZ1bmN0aW9uKHNpemUpIHsKLSAgICB2YXIgcG9p
bnRlciA9IHRoaXMuYnVmZmVyLmFsbG9jKHNpemUpOwotICAgIHJldHVybiBuZXcgRW5jb2Rlcih0
aGlzLmJ1ZmZlciwgdGhpcy5oYW5kbGVzLCBbXSwgcG9pbnRlcik7Ci0gIH07Ci0KLSAgTWVzc2Fn
ZVYwQnVpbGRlci5wcm90b3R5cGUuZW5jb2RlU3RydWN0ID0gZnVuY3Rpb24oY2xzLCB2YWwpIHsK
LSAgICBjbHMuZW5jb2RlKHRoaXMuY3JlYXRlRW5jb2RlcihjbHMuZW5jb2RlZFNpemUpLCB2YWwp
OwotICB9OwotCi0gIE1lc3NhZ2VWMEJ1aWxkZXIucHJvdG90eXBlLmZpbmlzaCA9IGZ1bmN0aW9u
KCkgewotICAgIC8vIFRPRE8oYWJhcnRoKTogUmF0aGVyIHRoYW4gcmVzaXppbmcgdGhlIGJ1ZmZl
ciBhdCB0aGUgZW5kLCB3ZSBjb3VsZAotICAgIC8vIGNvbXB1dGUgdGhlIHNpemUgd2UgbmVlZCBh
aGVhZCBvZiB0aW1lLCBsaWtlIHdlIGRvIGluIEMrKy4KLSAgICB0aGlzLmJ1ZmZlci50cmltKCk7
Ci0gICAgdmFyIG1lc3NhZ2UgPSBuZXcgTWVzc2FnZSh0aGlzLmJ1ZmZlciwgdGhpcy5oYW5kbGVz
KTsKLSAgICB0aGlzLmJ1ZmZlciA9IG51bGw7Ci0gICAgdGhpcy5oYW5kbGVzID0gbnVsbDsKLSAg
ICB0aGlzLmVuY29kZXIgPSBudWxsOwotICAgIHJldHVybiBtZXNzYWdlOwotICB9OwotCi0gIC8v
IE1lc3NhZ2VWMUJ1aWxkZXIgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0KLQotICBmdW5jdGlvbiBNZXNzYWdlVjFCdWlsZGVyKG1lc3NhZ2VOYW1lLCBwYXls
b2FkU2l6ZSwgZmxhZ3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBy
ZXF1ZXN0SUQpIHsKLSAgICAvLyBDdXJyZW50bHksIHdlIGRvbid0IGNvbXB1dGUgdGhlIHBheWxv
YWQgc2l6ZSBjb3JyZWN0bHkgYWhlYWQgb2YgdGltZS4KLSAgICAvLyBJbnN0ZWFkLCB3ZSByZXNp
emUgdGhlIGJ1ZmZlciBhdCB0aGUgZW5kLgotICAgIHZhciBudW1iZXJPZkJ5dGVzID0ga01lc3Nh
Z2VWMUhlYWRlclNpemUgKyBwYXlsb2FkU2l6ZTsKLSAgICB0aGlzLmJ1ZmZlciA9IG5ldyBpbnRl
cm5hbC5CdWZmZXIobnVtYmVyT2ZCeXRlcyk7Ci0gICAgdGhpcy5oYW5kbGVzID0gW107Ci0gICAg
dmFyIGVuY29kZXIgPSB0aGlzLmNyZWF0ZUVuY29kZXIoa01lc3NhZ2VWMUhlYWRlclNpemUpOwot
ICAgIGVuY29kZXIud3JpdGVVaW50MzIoa01lc3NhZ2VWMUhlYWRlclNpemUpOwotICAgIGVuY29k
ZXIud3JpdGVVaW50MzIoMSk7ICAvLyB2ZXJzaW9uLgotICAgIGVuY29kZXIud3JpdGVVaW50MzIo
MCk7ICAvLyBpbnRlcmZhY2UgSUQuCi0gICAgZW5jb2Rlci53cml0ZVVpbnQzMihtZXNzYWdlTmFt
ZSk7Ci0gICAgZW5jb2Rlci53cml0ZVVpbnQzMihmbGFncyk7Ci0gICAgZW5jb2Rlci53cml0ZVVp
bnQzMigwKTsgIC8vIHBhZGRpbmcuCi0gICAgZW5jb2Rlci53cml0ZVVpbnQ2NChyZXF1ZXN0SUQp
OwotICB9Ci0KLSAgTWVzc2FnZVYxQnVpbGRlci5wcm90b3R5cGUgPQotICAgICAgT2JqZWN0LmNy
ZWF0ZShNZXNzYWdlVjBCdWlsZGVyLnByb3RvdHlwZSk7Ci0KLSAgTWVzc2FnZVYxQnVpbGRlci5w
cm90b3R5cGUuY29uc3RydWN0b3IgPQotICAgICAgTWVzc2FnZVYxQnVpbGRlcjsKLQotICAvLyBN
ZXNzYWdlVjIgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K
LQotICBmdW5jdGlvbiBNZXNzYWdlVjJCdWlsZGVyKG1lc3NhZ2VOYW1lLCBwYXlsb2FkU2l6ZSwg
ZmxhZ3MsIHJlcXVlc3RJRCkgewotICAgIC8vIEN1cnJlbnRseSwgd2UgZG9uJ3QgY29tcHV0ZSB0
aGUgcGF5bG9hZCBzaXplIGNvcnJlY3RseSBhaGVhZCBvZiB0aW1lLgotICAgIC8vIEluc3RlYWQs
IHdlIHJlc2l6ZSB0aGUgYnVmZmVyIGF0IHRoZSBlbmQuCi0gICAgdmFyIG51bWJlck9mQnl0ZXMg
PSBrTWVzc2FnZVYySGVhZGVyU2l6ZSArIHBheWxvYWRTaXplOwotICAgIHRoaXMuYnVmZmVyID0g
bmV3IGludGVybmFsLkJ1ZmZlcihudW1iZXJPZkJ5dGVzKTsKLSAgICB0aGlzLmhhbmRsZXMgPSBb
XTsKLQotICAgIHRoaXMucGF5bG9hZCA9IG51bGw7Ci0gICAgdGhpcy5hc3NvY2lhdGVkRW5kcG9p
bnRIYW5kbGVzID0gW107Ci0KLSAgICB0aGlzLmVuY29kZXIgPSB0aGlzLmNyZWF0ZUVuY29kZXIo
a01lc3NhZ2VWMkhlYWRlclNpemUpOwotICAgIHRoaXMuZW5jb2Rlci53cml0ZVVpbnQzMihrTWVz
c2FnZVYySGVhZGVyU2l6ZSk7Ci0gICAgdGhpcy5lbmNvZGVyLndyaXRlVWludDMyKDIpOyAgLy8g
dmVyc2lvbi4KLSAgICAvLyBHZXRzIHNldCB0byBhbiBhcHByb3ByaWF0ZSBpbnRlcmZhY2VJZCBm
b3IgdGhlIGVuZHBvaW50IGJ5IHRoZSBSb3V0ZXIuCi0gICAgdGhpcy5lbmNvZGVyLndyaXRlVWlu
dDMyKDApOyAgLy8gaW50ZXJmYWNlIElELgotICAgIHRoaXMuZW5jb2Rlci53cml0ZVVpbnQzMiht
ZXNzYWdlTmFtZSk7Ci0gICAgdGhpcy5lbmNvZGVyLndyaXRlVWludDMyKGZsYWdzKTsKLSAgICB0
aGlzLmVuY29kZXIud3JpdGVVaW50MzIoMCk7ICAvLyBwYWRkaW5nLgotICAgIHRoaXMuZW5jb2Rl
ci53cml0ZVVpbnQ2NChyZXF1ZXN0SUQpOwotICB9Ci0KLSAgTWVzc2FnZVYyQnVpbGRlci5wcm90
b3R5cGUuY3JlYXRlRW5jb2RlciA9IGZ1bmN0aW9uKHNpemUpIHsKLSAgICB2YXIgcG9pbnRlciA9
IHRoaXMuYnVmZmVyLmFsbG9jKHNpemUpOwotICAgIHJldHVybiBuZXcgRW5jb2Rlcih0aGlzLmJ1
ZmZlciwgdGhpcy5oYW5kbGVzLAotICAgICAgICB0aGlzLmFzc29jaWF0ZWRFbmRwb2ludEhhbmRs
ZXMsIHBvaW50ZXIpOwotICB9OwotCi0gIE1lc3NhZ2VWMkJ1aWxkZXIucHJvdG90eXBlLnNldFBh
eWxvYWQgPSBmdW5jdGlvbihjbHMsIHZhbCkgewotICAgIHRoaXMucGF5bG9hZCA9IHtjbHM6IGNs
cywgdmFsOiB2YWx9OwotICB9OwotCi0gIE1lc3NhZ2VWMkJ1aWxkZXIucHJvdG90eXBlLmZpbmlz
aCA9IGZ1bmN0aW9uKCkgewotICAgIGlmICghdGhpcy5wYXlsb2FkKSB7Ci0gICAgICB0aHJvdyBu
ZXcgRXJyb3IoIlBheWxvYWQgbmVlZHMgdG8gYmUgc2V0IGJlZm9yZSBjYWxsaW5nIGZpbmlzaCIp
OwotICAgIH0KLQotICAgIHRoaXMuZW5jb2Rlci5lbmNvZGVTdHJ1Y3RQb2ludGVyKHRoaXMucGF5
bG9hZC5jbHMsIHRoaXMucGF5bG9hZC52YWwpOwotICAgIHRoaXMuZW5jb2Rlci5lbmNvZGVBcnJh
eVBvaW50ZXIoVWludDMyLAotICAgICAgICBuZXcgQXJyYXkodGhpcy5hc3NvY2lhdGVkRW5kcG9p
bnRIYW5kbGVzLmxlbmd0aCkpOwotCi0gICAgdGhpcy5idWZmZXIudHJpbSgpOwotICAgIHZhciBt
ZXNzYWdlID0gbmV3IE1lc3NhZ2UodGhpcy5idWZmZXIsIHRoaXMuaGFuZGxlcywKLSAgICAgICAg
dGhpcy5hc3NvY2lhdGVkRW5kcG9pbnRIYW5kbGVzKTsKLSAgICB0aGlzLmJ1ZmZlciA9IG51bGw7
Ci0gICAgdGhpcy5oYW5kbGVzID0gbnVsbDsKLSAgICB0aGlzLmVuY29kZXIgPSBudWxsOwotICAg
IHRoaXMucGF5bG9hZCA9IG51bGw7Ci0gICAgdGhpcy5hc3NvY2lhdGVkRW5kcG9pbnRIYW5kbGVz
ID0gbnVsbDsKLQotICAgIHJldHVybiBtZXNzYWdlOwotICB9OwotCi0gIC8vIE1lc3NhZ2VSZWFk
ZXIgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tCi0KLSAgZnVuY3Rpb24gTWVzc2FnZVJlYWRlcihtZXNzYWdlKSB7Ci0gICAgdGhpcy5k
ZWNvZGVyID0gbmV3IERlY29kZXIobWVzc2FnZS5idWZmZXIsIG1lc3NhZ2UuaGFuZGxlcywKLSAg
ICAgICAgbWVzc2FnZS5hc3NvY2lhdGVkRW5kcG9pbnRIYW5kbGVzLCAwKTsKLSAgICB2YXIgbWVz
c2FnZUhlYWRlclNpemUgPSB0aGlzLmRlY29kZXIucmVhZFVpbnQzMigpOwotICAgIHRoaXMucGF5
bG9hZFNpemUgPSBtZXNzYWdlLmJ1ZmZlci5ieXRlTGVuZ3RoIC0gbWVzc2FnZUhlYWRlclNpemU7
Ci0gICAgdmFyIHZlcnNpb24gPSB0aGlzLmRlY29kZXIucmVhZFVpbnQzMigpOwotICAgIHZhciBp
bnRlcmZhY2VfaWQgPSB0aGlzLmRlY29kZXIucmVhZFVpbnQzMigpOwotICAgIHRoaXMubWVzc2Fn
ZU5hbWUgPSB0aGlzLmRlY29kZXIucmVhZFVpbnQzMigpOwotICAgIHRoaXMuZmxhZ3MgPSB0aGlz
LmRlY29kZXIucmVhZFVpbnQzMigpOwotICAgIC8vIFNraXAgdGhlIHBhZGRpbmcuCi0gICAgdGhp
cy5kZWNvZGVyLnNraXAoNCk7Ci0gICAgaWYgKHZlcnNpb24gPj0gMSkKLSAgICAgIHRoaXMucmVx
dWVzdElEID0gdGhpcy5kZWNvZGVyLnJlYWRVaW50NjQoKTsKLSAgICB0aGlzLmRlY29kZXIuc2tp
cChtZXNzYWdlSGVhZGVyU2l6ZSAtIHRoaXMuZGVjb2Rlci5uZXh0KTsKLSAgfQotCi0gIE1lc3Nh
Z2VSZWFkZXIucHJvdG90eXBlLmRlY29kZVN0cnVjdCA9IGZ1bmN0aW9uKGNscykgewotICAgIHJl
dHVybiBjbHMuZGVjb2RlKHRoaXMuZGVjb2Rlcik7Ci0gIH07Ci0KLSAgLy8gQnVpbHQtaW4gdHlw
ZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0KLQotICAvLyBUaGlzIHR5cGUgaXMgb25seSB1c2VkIHdpdGggQXJyYXlPZihQYWNrZWRC
b29sKS4KLSAgZnVuY3Rpb24gUGFja2VkQm9vbCgpIHsKLSAgfQotCi0gIGZ1bmN0aW9uIEludDgo
KSB7Ci0gIH0KLQotICBJbnQ4LmVuY29kZWRTaXplID0gMTsKLQotICBJbnQ4LmRlY29kZSA9IGZ1
bmN0aW9uKGRlY29kZXIpIHsKLSAgICByZXR1cm4gZGVjb2Rlci5yZWFkSW50OCgpOwotICB9Owot
Ci0gIEludDguZW5jb2RlID0gZnVuY3Rpb24oZW5jb2RlciwgdmFsKSB7Ci0gICAgZW5jb2Rlci53
cml0ZUludDgodmFsKTsKLSAgfTsKLQotICBVaW50OC5lbmNvZGUgPSBmdW5jdGlvbihlbmNvZGVy
LCB2YWwpIHsKLSAgICBlbmNvZGVyLndyaXRlVWludDgodmFsKTsKLSAgfTsKLQotICBmdW5jdGlv
biBVaW50OCgpIHsKLSAgfQotCi0gIFVpbnQ4LmVuY29kZWRTaXplID0gMTsKLQotICBVaW50OC5k
ZWNvZGUgPSBmdW5jdGlvbihkZWNvZGVyKSB7Ci0gICAgcmV0dXJuIGRlY29kZXIucmVhZFVpbnQ4
KCk7Ci0gIH07Ci0KLSAgVWludDguZW5jb2RlID0gZnVuY3Rpb24oZW5jb2RlciwgdmFsKSB7Ci0g
ICAgZW5jb2Rlci53cml0ZVVpbnQ4KHZhbCk7Ci0gIH07Ci0KLSAgZnVuY3Rpb24gSW50MTYoKSB7
Ci0gIH0KLQotICBJbnQxNi5lbmNvZGVkU2l6ZSA9IDI7Ci0KLSAgSW50MTYuZGVjb2RlID0gZnVu
Y3Rpb24oZGVjb2RlcikgewotICAgIHJldHVybiBkZWNvZGVyLnJlYWRJbnQxNigpOwotICB9Owot
Ci0gIEludDE2LmVuY29kZSA9IGZ1bmN0aW9uKGVuY29kZXIsIHZhbCkgewotICAgIGVuY29kZXIu
d3JpdGVJbnQxNih2YWwpOwotICB9OwotCi0gIGZ1bmN0aW9uIFVpbnQxNigpIHsKLSAgfQotCi0g
IFVpbnQxNi5lbmNvZGVkU2l6ZSA9IDI7Ci0KLSAgVWludDE2LmRlY29kZSA9IGZ1bmN0aW9uKGRl
Y29kZXIpIHsKLSAgICByZXR1cm4gZGVjb2Rlci5yZWFkVWludDE2KCk7Ci0gIH07Ci0KLSAgVWlu
dDE2LmVuY29kZSA9IGZ1bmN0aW9uKGVuY29kZXIsIHZhbCkgewotICAgIGVuY29kZXIud3JpdGVV
aW50MTYodmFsKTsKLSAgfTsKLQotICBmdW5jdGlvbiBJbnQzMigpIHsKLSAgfQotCi0gIEludDMy
LmVuY29kZWRTaXplID0gNDsKLQotICBJbnQzMi5kZWNvZGUgPSBmdW5jdGlvbihkZWNvZGVyKSB7
Ci0gICAgcmV0dXJuIGRlY29kZXIucmVhZEludDMyKCk7Ci0gIH07Ci0KLSAgSW50MzIuZW5jb2Rl
ID0gZnVuY3Rpb24oZW5jb2RlciwgdmFsKSB7Ci0gICAgZW5jb2Rlci53cml0ZUludDMyKHZhbCk7
Ci0gIH07Ci0KLSAgZnVuY3Rpb24gVWludDMyKCkgewotICB9Ci0KLSAgVWludDMyLmVuY29kZWRT
aXplID0gNDsKLQotICBVaW50MzIuZGVjb2RlID0gZnVuY3Rpb24oZGVjb2RlcikgewotICAgIHJl
dHVybiBkZWNvZGVyLnJlYWRVaW50MzIoKTsKLSAgfTsKLQotICBVaW50MzIuZW5jb2RlID0gZnVu
Y3Rpb24oZW5jb2RlciwgdmFsKSB7Ci0gICAgZW5jb2Rlci53cml0ZVVpbnQzMih2YWwpOwotICB9
OwotCi0gIGZ1bmN0aW9uIEludDY0KCkgewotICB9Ci0KLSAgSW50NjQuZW5jb2RlZFNpemUgPSA4
OwotCi0gIEludDY0LmRlY29kZSA9IGZ1bmN0aW9uKGRlY29kZXIpIHsKLSAgICByZXR1cm4gZGVj
b2Rlci5yZWFkSW50NjQoKTsKLSAgfTsKLQotICBJbnQ2NC5lbmNvZGUgPSBmdW5jdGlvbihlbmNv
ZGVyLCB2YWwpIHsKLSAgICBlbmNvZGVyLndyaXRlSW50NjQodmFsKTsKLSAgfTsKLQotICBmdW5j
dGlvbiBVaW50NjQoKSB7Ci0gIH0KLQotICBVaW50NjQuZW5jb2RlZFNpemUgPSA4OwotCi0gIFVp
bnQ2NC5kZWNvZGUgPSBmdW5jdGlvbihkZWNvZGVyKSB7Ci0gICAgcmV0dXJuIGRlY29kZXIucmVh
ZFVpbnQ2NCgpOwotICB9OwotCi0gIFVpbnQ2NC5lbmNvZGUgPSBmdW5jdGlvbihlbmNvZGVyLCB2
YWwpIHsKLSAgICBlbmNvZGVyLndyaXRlVWludDY0KHZhbCk7Ci0gIH07Ci0KLSAgZnVuY3Rpb24g
U3RyaW5nKCkgewotICB9OwotCi0gIFN0cmluZy5lbmNvZGVkU2l6ZSA9IDg7Ci0KLSAgU3RyaW5n
LmRlY29kZSA9IGZ1bmN0aW9uKGRlY29kZXIpIHsKLSAgICByZXR1cm4gZGVjb2Rlci5kZWNvZGVT
dHJpbmdQb2ludGVyKCk7Ci0gIH07Ci0KLSAgU3RyaW5nLmVuY29kZSA9IGZ1bmN0aW9uKGVuY29k
ZXIsIHZhbCkgewotICAgIGVuY29kZXIuZW5jb2RlU3RyaW5nUG9pbnRlcih2YWwpOwotICB9Owot
Ci0gIGZ1bmN0aW9uIE51bGxhYmxlU3RyaW5nKCkgewotICB9Ci0KLSAgTnVsbGFibGVTdHJpbmcu
ZW5jb2RlZFNpemUgPSBTdHJpbmcuZW5jb2RlZFNpemU7Ci0KLSAgTnVsbGFibGVTdHJpbmcuZGVj
b2RlID0gU3RyaW5nLmRlY29kZTsKLQotICBOdWxsYWJsZVN0cmluZy5lbmNvZGUgPSBTdHJpbmcu
ZW5jb2RlOwotCi0gIGZ1bmN0aW9uIEZsb2F0KCkgewotICB9Ci0KLSAgRmxvYXQuZW5jb2RlZFNp
emUgPSA0OwotCi0gIEZsb2F0LmRlY29kZSA9IGZ1bmN0aW9uKGRlY29kZXIpIHsKLSAgICByZXR1
cm4gZGVjb2Rlci5yZWFkRmxvYXQoKTsKLSAgfTsKLQotICBGbG9hdC5lbmNvZGUgPSBmdW5jdGlv
bihlbmNvZGVyLCB2YWwpIHsKLSAgICBlbmNvZGVyLndyaXRlRmxvYXQodmFsKTsKLSAgfTsKLQot
ICBmdW5jdGlvbiBEb3VibGUoKSB7Ci0gIH0KLQotICBEb3VibGUuZW5jb2RlZFNpemUgPSA4Owot
Ci0gIERvdWJsZS5kZWNvZGUgPSBmdW5jdGlvbihkZWNvZGVyKSB7Ci0gICAgcmV0dXJuIGRlY29k
ZXIucmVhZERvdWJsZSgpOwotICB9OwotCi0gIERvdWJsZS5lbmNvZGUgPSBmdW5jdGlvbihlbmNv
ZGVyLCB2YWwpIHsKLSAgICBlbmNvZGVyLndyaXRlRG91YmxlKHZhbCk7Ci0gIH07Ci0KLSAgZnVu
Y3Rpb24gRW51bShjbHMpIHsKLSAgICB0aGlzLmNscyA9IGNsczsKLSAgfQotCi0gIEVudW0ucHJv
dG90eXBlLmVuY29kZWRTaXplID0gNDsKLQotICBFbnVtLnByb3RvdHlwZS5kZWNvZGUgPSBmdW5j
dGlvbihkZWNvZGVyKSB7Ci0gICAgcmV0dXJuIGRlY29kZXIucmVhZEludDMyKCk7Ci0gIH07Ci0K
LSAgRW51bS5wcm90b3R5cGUuZW5jb2RlID0gZnVuY3Rpb24oZW5jb2RlciwgdmFsKSB7Ci0gICAg
ZW5jb2Rlci53cml0ZUludDMyKHZhbCk7Ci0gIH07Ci0KLSAgZnVuY3Rpb24gUG9pbnRlclRvKGNs
cykgewotICAgIHRoaXMuY2xzID0gY2xzOwotICB9Ci0KLSAgUG9pbnRlclRvLnByb3RvdHlwZS5l
bmNvZGVkU2l6ZSA9IDg7Ci0KLSAgUG9pbnRlclRvLnByb3RvdHlwZS5kZWNvZGUgPSBmdW5jdGlv
bihkZWNvZGVyKSB7Ci0gICAgdmFyIHBvaW50ZXIgPSBkZWNvZGVyLmRlY29kZVBvaW50ZXIoKTsK
LSAgICBpZiAoIXBvaW50ZXIpIHsKLSAgICAgIHJldHVybiBudWxsOwotICAgIH0KLSAgICByZXR1
cm4gdGhpcy5jbHMuZGVjb2RlKGRlY29kZXIuZGVjb2RlQW5kQ3JlYXRlRGVjb2Rlcihwb2ludGVy
KSk7Ci0gIH07Ci0KLSAgUG9pbnRlclRvLnByb3RvdHlwZS5lbmNvZGUgPSBmdW5jdGlvbihlbmNv
ZGVyLCB2YWwpIHsKLSAgICBpZiAoIXZhbCkgewotICAgICAgZW5jb2Rlci5lbmNvZGVQb2ludGVy
KHZhbCk7Ci0gICAgICByZXR1cm47Ci0gICAgfQotICAgIHZhciBvYmplY3RFbmNvZGVyID0gZW5j
b2Rlci5jcmVhdGVBbmRFbmNvZGVFbmNvZGVyKHRoaXMuY2xzLmVuY29kZWRTaXplKTsKLSAgICB0
aGlzLmNscy5lbmNvZGUob2JqZWN0RW5jb2RlciwgdmFsKTsKLSAgfTsKLQotICBmdW5jdGlvbiBO
dWxsYWJsZVBvaW50ZXJUbyhjbHMpIHsKLSAgICBQb2ludGVyVG8uY2FsbCh0aGlzLCBjbHMpOwot
ICB9Ci0KLSAgTnVsbGFibGVQb2ludGVyVG8ucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShQb2lu
dGVyVG8ucHJvdG90eXBlKTsKLQotICBmdW5jdGlvbiBBcnJheU9mKGNscywgbGVuZ3RoKSB7Ci0g
ICAgdGhpcy5jbHMgPSBjbHM7Ci0gICAgdGhpcy5sZW5ndGggPSBsZW5ndGggfHwgMDsKLSAgfQot
Ci0gIEFycmF5T2YucHJvdG90eXBlLmVuY29kZWRTaXplID0gODsKLQotICBBcnJheU9mLnByb3Rv
dHlwZS5kaW1lbnNpb25zID0gZnVuY3Rpb24oKSB7Ci0gICAgcmV0dXJuIFt0aGlzLmxlbmd0aF0u
Y29uY2F0KAotICAgICAgKHRoaXMuY2xzIGluc3RhbmNlb2YgQXJyYXlPZikgPyB0aGlzLmNscy5k
aW1lbnNpb25zKCkgOiBbXSk7Ci0gIH0KLQotICBBcnJheU9mLnByb3RvdHlwZS5kZWNvZGUgPSBm
dW5jdGlvbihkZWNvZGVyKSB7Ci0gICAgcmV0dXJuIGRlY29kZXIuZGVjb2RlQXJyYXlQb2ludGVy
KHRoaXMuY2xzKTsKLSAgfTsKLQotICBBcnJheU9mLnByb3RvdHlwZS5lbmNvZGUgPSBmdW5jdGlv
bihlbmNvZGVyLCB2YWwpIHsKLSAgICBlbmNvZGVyLmVuY29kZUFycmF5UG9pbnRlcih0aGlzLmNs
cywgdmFsKTsKLSAgfTsKLQotICBmdW5jdGlvbiBOdWxsYWJsZUFycmF5T2YoY2xzKSB7Ci0gICAg
QXJyYXlPZi5jYWxsKHRoaXMsIGNscyk7Ci0gIH0KLQotICBOdWxsYWJsZUFycmF5T2YucHJvdG90
eXBlID0gT2JqZWN0LmNyZWF0ZShBcnJheU9mLnByb3RvdHlwZSk7Ci0KLSAgZnVuY3Rpb24gSGFu
ZGxlKCkgewotICB9Ci0KLSAgSGFuZGxlLmVuY29kZWRTaXplID0gNDsKLQotICBIYW5kbGUuZGVj
b2RlID0gZnVuY3Rpb24oZGVjb2RlcikgewotICAgIHJldHVybiBkZWNvZGVyLmRlY29kZUhhbmRs
ZSgpOwotICB9OwotCi0gIEhhbmRsZS5lbmNvZGUgPSBmdW5jdGlvbihlbmNvZGVyLCB2YWwpIHsK
LSAgICBlbmNvZGVyLmVuY29kZUhhbmRsZSh2YWwpOwotICB9OwotCi0gIGZ1bmN0aW9uIE51bGxh
YmxlSGFuZGxlKCkgewotICB9Ci0KLSAgTnVsbGFibGVIYW5kbGUuZW5jb2RlZFNpemUgPSBIYW5k
bGUuZW5jb2RlZFNpemU7Ci0KLSAgTnVsbGFibGVIYW5kbGUuZGVjb2RlID0gSGFuZGxlLmRlY29k
ZTsKLQotICBOdWxsYWJsZUhhbmRsZS5lbmNvZGUgPSBIYW5kbGUuZW5jb2RlOwotCi0gIGZ1bmN0
aW9uIEludGVyZmFjZShjbHMpIHsKLSAgICB0aGlzLmNscyA9IGNsczsKLSAgfQotCi0gIEludGVy
ZmFjZS5wcm90b3R5cGUuZW5jb2RlZFNpemUgPSA4OwotCi0gIEludGVyZmFjZS5wcm90b3R5cGUu
ZGVjb2RlID0gZnVuY3Rpb24oZGVjb2RlcikgewotICAgIHZhciBpbnRlcmZhY2VQdHJJbmZvID0g
bmV3IG1vam8uSW50ZXJmYWNlUHRySW5mbygKLSAgICAgICAgZGVjb2Rlci5kZWNvZGVIYW5kbGUo
KSwgZGVjb2Rlci5yZWFkVWludDMyKCkpOwotICAgIHZhciBpbnRlcmZhY2VQdHIgPSBuZXcgdGhp
cy5jbHMoKTsKLSAgICBpbnRlcmZhY2VQdHIucHRyLmJpbmQoaW50ZXJmYWNlUHRySW5mbyk7Ci0g
ICAgcmV0dXJuIGludGVyZmFjZVB0cjsKLSAgfTsKLQotICBJbnRlcmZhY2UucHJvdG90eXBlLmVu
Y29kZSA9IGZ1bmN0aW9uKGVuY29kZXIsIHZhbCkgewotICAgIHZhciBpbnRlcmZhY2VQdHJJbmZv
ID0KLSAgICAgICAgdmFsID8gdmFsLnB0ci5wYXNzSW50ZXJmYWNlKCkgOiBuZXcgbW9qby5JbnRl
cmZhY2VQdHJJbmZvKG51bGwsIDApOwotICAgIGVuY29kZXIuZW5jb2RlSGFuZGxlKGludGVyZmFj
ZVB0ckluZm8uaGFuZGxlKTsKLSAgICBlbmNvZGVyLndyaXRlVWludDMyKGludGVyZmFjZVB0cklu
Zm8udmVyc2lvbik7Ci0gIH07Ci0KLSAgZnVuY3Rpb24gTnVsbGFibGVJbnRlcmZhY2UoY2xzKSB7
Ci0gICAgSW50ZXJmYWNlLmNhbGwodGhpcywgY2xzKTsKLSAgfQotCi0gIE51bGxhYmxlSW50ZXJm
YWNlLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoSW50ZXJmYWNlLnByb3RvdHlwZSk7Ci0KLSAg
ZnVuY3Rpb24gQXNzb2NpYXRlZEludGVyZmFjZVB0ckluZm8oKSB7Ci0gIH0KLQotICBBc3NvY2lh
dGVkSW50ZXJmYWNlUHRySW5mby5wcm90b3R5cGUuZW5jb2RlZFNpemUgPSA4OwotCi0gIEFzc29j
aWF0ZWRJbnRlcmZhY2VQdHJJbmZvLmRlY29kZSA9IGZ1bmN0aW9uKGRlY29kZXIpIHsKLSAgICBy
ZXR1cm4gbmV3IG1vam8uQXNzb2NpYXRlZEludGVyZmFjZVB0ckluZm8oCi0gICAgICBkZWNvZGVy
LmRlY29kZUFzc29jaWF0ZWRFbmRwb2ludEhhbmRsZSgpLCBkZWNvZGVyLnJlYWRVaW50MzIoKSk7
Ci0gIH07Ci0KLSAgQXNzb2NpYXRlZEludGVyZmFjZVB0ckluZm8uZW5jb2RlID0gZnVuY3Rpb24o
ZW5jb2RlciwgdmFsKSB7Ci0gICAgdmFyIGFzc29jaWF0ZWRpbnRlcmZhY2VQdHJJbmZvID0KLSAg
ICAgICAgdmFsID8gdmFsIDogbmV3IG1vam8uQXNzb2NpYXRlZEludGVyZmFjZVB0ckluZm8obnVs
bCwgMCk7Ci0gICAgZW5jb2Rlci5lbmNvZGVBc3NvY2lhdGVkRW5kcG9pbnRIYW5kbGUoCi0gICAg
ICAgIGFzc29jaWF0ZWRpbnRlcmZhY2VQdHJJbmZvLmludGVyZmFjZUVuZHBvaW50SGFuZGxlKTsK
LSAgICBlbmNvZGVyLndyaXRlVWludDMyKGFzc29jaWF0ZWRpbnRlcmZhY2VQdHJJbmZvLnZlcnNp
b24pOwotICB9OwotCi0gIGZ1bmN0aW9uIE51bGxhYmxlQXNzb2NpYXRlZEludGVyZmFjZVB0cklu
Zm8oKSB7Ci0gIH0KLQotICBOdWxsYWJsZUFzc29jaWF0ZWRJbnRlcmZhY2VQdHJJbmZvLmVuY29k
ZWRTaXplID0KLSAgICAgIEFzc29jaWF0ZWRJbnRlcmZhY2VQdHJJbmZvLmVuY29kZWRTaXplOwot
Ci0gIE51bGxhYmxlQXNzb2NpYXRlZEludGVyZmFjZVB0ckluZm8uZGVjb2RlID0KLSAgICAgIEFz
c29jaWF0ZWRJbnRlcmZhY2VQdHJJbmZvLmRlY29kZTsKLQotICBOdWxsYWJsZUFzc29jaWF0ZWRJ
bnRlcmZhY2VQdHJJbmZvLmVuY29kZSA9Ci0gICAgICBBc3NvY2lhdGVkSW50ZXJmYWNlUHRySW5m
by5lbmNvZGU7Ci0KLSAgZnVuY3Rpb24gSW50ZXJmYWNlUmVxdWVzdCgpIHsKLSAgfQotCi0gIElu
dGVyZmFjZVJlcXVlc3QuZW5jb2RlZFNpemUgPSA0OwotCi0gIEludGVyZmFjZVJlcXVlc3QuZGVj
b2RlID0gZnVuY3Rpb24oZGVjb2RlcikgewotICAgIHJldHVybiBuZXcgbW9qby5JbnRlcmZhY2VS
ZXF1ZXN0KGRlY29kZXIuZGVjb2RlSGFuZGxlKCkpOwotICB9OwotCi0gIEludGVyZmFjZVJlcXVl
c3QuZW5jb2RlID0gZnVuY3Rpb24oZW5jb2RlciwgdmFsKSB7Ci0gICAgZW5jb2Rlci5lbmNvZGVI
YW5kbGUodmFsID8gdmFsLmhhbmRsZSA6IG51bGwpOwotICB9OwotCi0gIGZ1bmN0aW9uIE51bGxh
YmxlSW50ZXJmYWNlUmVxdWVzdCgpIHsKLSAgfQotCi0gIE51bGxhYmxlSW50ZXJmYWNlUmVxdWVz
dC5lbmNvZGVkU2l6ZSA9IEludGVyZmFjZVJlcXVlc3QuZW5jb2RlZFNpemU7Ci0KLSAgTnVsbGFi
bGVJbnRlcmZhY2VSZXF1ZXN0LmRlY29kZSA9IEludGVyZmFjZVJlcXVlc3QuZGVjb2RlOwotCi0g
IE51bGxhYmxlSW50ZXJmYWNlUmVxdWVzdC5lbmNvZGUgPSBJbnRlcmZhY2VSZXF1ZXN0LmVuY29k
ZTsKLQotICBmdW5jdGlvbiBBc3NvY2lhdGVkSW50ZXJmYWNlUmVxdWVzdCgpIHsKLSAgfQotCi0g
IEFzc29jaWF0ZWRJbnRlcmZhY2VSZXF1ZXN0LmRlY29kZSA9IGZ1bmN0aW9uKGRlY29kZXIpIHsK
LSAgICB2YXIgaGFuZGxlID0gZGVjb2Rlci5kZWNvZGVBc3NvY2lhdGVkRW5kcG9pbnRIYW5kbGUo
KTsKLSAgICByZXR1cm4gbmV3IG1vam8uQXNzb2NpYXRlZEludGVyZmFjZVJlcXVlc3QoaGFuZGxl
KTsKLSAgfTsKLQotICBBc3NvY2lhdGVkSW50ZXJmYWNlUmVxdWVzdC5lbmNvZGUgPSBmdW5jdGlv
bihlbmNvZGVyLCB2YWwpIHsKLSAgICBlbmNvZGVyLmVuY29kZUFzc29jaWF0ZWRFbmRwb2ludEhh
bmRsZSgKLSAgICAgICAgdmFsID8gdmFsLmludGVyZmFjZUVuZHBvaW50SGFuZGxlIDogbnVsbCk7
Ci0gIH07Ci0KLSAgQXNzb2NpYXRlZEludGVyZmFjZVJlcXVlc3QuZW5jb2RlZFNpemUgPSA0Owot
Ci0gIGZ1bmN0aW9uIE51bGxhYmxlQXNzb2NpYXRlZEludGVyZmFjZVJlcXVlc3QoKSB7Ci0gIH0K
LQotICBOdWxsYWJsZUFzc29jaWF0ZWRJbnRlcmZhY2VSZXF1ZXN0LmVuY29kZWRTaXplID0KLSAg
ICAgIEFzc29jaWF0ZWRJbnRlcmZhY2VSZXF1ZXN0LmVuY29kZWRTaXplOwotCi0gIE51bGxhYmxl
QXNzb2NpYXRlZEludGVyZmFjZVJlcXVlc3QuZGVjb2RlID0KLSAgICAgIEFzc29jaWF0ZWRJbnRl
cmZhY2VSZXF1ZXN0LmRlY29kZTsKLQotICBOdWxsYWJsZUFzc29jaWF0ZWRJbnRlcmZhY2VSZXF1
ZXN0LmVuY29kZSA9Ci0gICAgICBBc3NvY2lhdGVkSW50ZXJmYWNlUmVxdWVzdC5lbmNvZGU7Ci0K
LSAgZnVuY3Rpb24gTWFwT2Yoa2V5Q2xhc3MsIHZhbHVlQ2xhc3MpIHsKLSAgICB0aGlzLmtleUNs
YXNzID0ga2V5Q2xhc3M7Ci0gICAgdGhpcy52YWx1ZUNsYXNzID0gdmFsdWVDbGFzczsKLSAgfQot
Ci0gIE1hcE9mLnByb3RvdHlwZS5lbmNvZGVkU2l6ZSA9IDg7Ci0KLSAgTWFwT2YucHJvdG90eXBl
LmRlY29kZSA9IGZ1bmN0aW9uKGRlY29kZXIpIHsKLSAgICByZXR1cm4gZGVjb2Rlci5kZWNvZGVN
YXBQb2ludGVyKHRoaXMua2V5Q2xhc3MsIHRoaXMudmFsdWVDbGFzcyk7Ci0gIH07Ci0KLSAgTWFw
T2YucHJvdG90eXBlLmVuY29kZSA9IGZ1bmN0aW9uKGVuY29kZXIsIHZhbCkgewotICAgIGVuY29k
ZXIuZW5jb2RlTWFwUG9pbnRlcih0aGlzLmtleUNsYXNzLCB0aGlzLnZhbHVlQ2xhc3MsIHZhbCk7
Ci0gIH07Ci0KLSAgZnVuY3Rpb24gTnVsbGFibGVNYXBPZihrZXlDbGFzcywgdmFsdWVDbGFzcykg
ewotICAgIE1hcE9mLmNhbGwodGhpcywga2V5Q2xhc3MsIHZhbHVlQ2xhc3MpOwotICB9Ci0KLSAg
TnVsbGFibGVNYXBPZi5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKE1hcE9mLnByb3RvdHlwZSk7
Ci0KLSAgaW50ZXJuYWwuYWxpZ24gPSBhbGlnbjsKLSAgaW50ZXJuYWwuaXNBbGlnbmVkID0gaXNB
bGlnbmVkOwotICBpbnRlcm5hbC5NZXNzYWdlID0gTWVzc2FnZTsKLSAgaW50ZXJuYWwuTWVzc2Fn
ZVYwQnVpbGRlciA9IE1lc3NhZ2VWMEJ1aWxkZXI7Ci0gIGludGVybmFsLk1lc3NhZ2VWMUJ1aWxk
ZXIgPSBNZXNzYWdlVjFCdWlsZGVyOwotICBpbnRlcm5hbC5NZXNzYWdlVjJCdWlsZGVyID0gTWVz
c2FnZVYyQnVpbGRlcjsKLSAgaW50ZXJuYWwuTWVzc2FnZVJlYWRlciA9IE1lc3NhZ2VSZWFkZXI7
Ci0gIGludGVybmFsLmtBcnJheUhlYWRlclNpemUgPSBrQXJyYXlIZWFkZXJTaXplOwotICBpbnRl
cm5hbC5rTWFwU3RydWN0UGF5bG9hZFNpemUgPSBrTWFwU3RydWN0UGF5bG9hZFNpemU7Ci0gIGlu
dGVybmFsLmtTdHJ1Y3RIZWFkZXJTaXplID0ga1N0cnVjdEhlYWRlclNpemU7Ci0gIGludGVybmFs
LmtFbmNvZGVkSW52YWxpZEhhbmRsZVZhbHVlID0ga0VuY29kZWRJbnZhbGlkSGFuZGxlVmFsdWU7
Ci0gIGludGVybmFsLmtNZXNzYWdlVjBIZWFkZXJTaXplID0ga01lc3NhZ2VWMEhlYWRlclNpemU7
Ci0gIGludGVybmFsLmtNZXNzYWdlVjFIZWFkZXJTaXplID0ga01lc3NhZ2VWMUhlYWRlclNpemU7
Ci0gIGludGVybmFsLmtNZXNzYWdlVjJIZWFkZXJTaXplID0ga01lc3NhZ2VWMkhlYWRlclNpemU7
Ci0gIGludGVybmFsLmtNZXNzYWdlUGF5bG9hZEludGVyZmFjZUlkc1BvaW50ZXJPZmZzZXQgPQot
ICAgICAga01lc3NhZ2VQYXlsb2FkSW50ZXJmYWNlSWRzUG9pbnRlck9mZnNldDsKLSAgaW50ZXJu
YWwua01lc3NhZ2VFeHBlY3RzUmVzcG9uc2UgPSBrTWVzc2FnZUV4cGVjdHNSZXNwb25zZTsKLSAg
aW50ZXJuYWwua01lc3NhZ2VJc1Jlc3BvbnNlID0ga01lc3NhZ2VJc1Jlc3BvbnNlOwotICBpbnRl
cm5hbC5JbnQ4ID0gSW50ODsKLSAgaW50ZXJuYWwuVWludDggPSBVaW50ODsKLSAgaW50ZXJuYWwu
SW50MTYgPSBJbnQxNjsKLSAgaW50ZXJuYWwuVWludDE2ID0gVWludDE2OwotICBpbnRlcm5hbC5J
bnQzMiA9IEludDMyOwotICBpbnRlcm5hbC5VaW50MzIgPSBVaW50MzI7Ci0gIGludGVybmFsLklu
dDY0ID0gSW50NjQ7Ci0gIGludGVybmFsLlVpbnQ2NCA9IFVpbnQ2NDsKLSAgaW50ZXJuYWwuRmxv
YXQgPSBGbG9hdDsKLSAgaW50ZXJuYWwuRG91YmxlID0gRG91YmxlOwotICBpbnRlcm5hbC5TdHJp
bmcgPSBTdHJpbmc7Ci0gIGludGVybmFsLkVudW0gPSBFbnVtOwotICBpbnRlcm5hbC5OdWxsYWJs
ZVN0cmluZyA9IE51bGxhYmxlU3RyaW5nOwotICBpbnRlcm5hbC5Qb2ludGVyVG8gPSBQb2ludGVy
VG87Ci0gIGludGVybmFsLk51bGxhYmxlUG9pbnRlclRvID0gTnVsbGFibGVQb2ludGVyVG87Ci0g
IGludGVybmFsLkFycmF5T2YgPSBBcnJheU9mOwotICBpbnRlcm5hbC5OdWxsYWJsZUFycmF5T2Yg
PSBOdWxsYWJsZUFycmF5T2Y7Ci0gIGludGVybmFsLlBhY2tlZEJvb2wgPSBQYWNrZWRCb29sOwot
ICBpbnRlcm5hbC5IYW5kbGUgPSBIYW5kbGU7Ci0gIGludGVybmFsLk51bGxhYmxlSGFuZGxlID0g
TnVsbGFibGVIYW5kbGU7Ci0gIGludGVybmFsLkludGVyZmFjZSA9IEludGVyZmFjZTsKLSAgaW50
ZXJuYWwuTnVsbGFibGVJbnRlcmZhY2UgPSBOdWxsYWJsZUludGVyZmFjZTsKLSAgaW50ZXJuYWwu
SW50ZXJmYWNlUmVxdWVzdCA9IEludGVyZmFjZVJlcXVlc3Q7Ci0gIGludGVybmFsLk51bGxhYmxl
SW50ZXJmYWNlUmVxdWVzdCA9IE51bGxhYmxlSW50ZXJmYWNlUmVxdWVzdDsKLSAgaW50ZXJuYWwu
QXNzb2NpYXRlZEludGVyZmFjZVB0ckluZm8gPSBBc3NvY2lhdGVkSW50ZXJmYWNlUHRySW5mbzsK
LSAgaW50ZXJuYWwuTnVsbGFibGVBc3NvY2lhdGVkSW50ZXJmYWNlUHRySW5mbyA9Ci0gICAgICBO
dWxsYWJsZUFzc29jaWF0ZWRJbnRlcmZhY2VQdHJJbmZvOwotICBpbnRlcm5hbC5Bc3NvY2lhdGVk
SW50ZXJmYWNlUmVxdWVzdCA9IEFzc29jaWF0ZWRJbnRlcmZhY2VSZXF1ZXN0OwotICBpbnRlcm5h
bC5OdWxsYWJsZUFzc29jaWF0ZWRJbnRlcmZhY2VSZXF1ZXN0ID0KLSAgICAgIE51bGxhYmxlQXNz
b2NpYXRlZEludGVyZmFjZVJlcXVlc3Q7Ci0gIGludGVybmFsLk1hcE9mID0gTWFwT2Y7Ci0gIGlu
dGVybmFsLk51bGxhYmxlTWFwT2YgPSBOdWxsYWJsZU1hcE9mOwotfSkoKTsKLS8vIENvcHlyaWdo
dCAyMDE0IFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNl
IG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0
aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLQotKGZ1bmN0aW9uKCkg
ewotICB2YXIgaW50ZXJuYWwgPSBtb2pvLmludGVybmFsOwotCi0gIGZ1bmN0aW9uIENvbm5lY3Rv
cihoYW5kbGUpIHsKLSAgICBpZiAoIShoYW5kbGUgaW5zdGFuY2VvZiBNb2pvSGFuZGxlKSkKLSAg
ICAgIHRocm93IG5ldyBFcnJvcigiQ29ubmVjdG9yOiBub3QgYSBoYW5kbGUgIiArIGhhbmRsZSk7
Ci0gICAgdGhpcy5oYW5kbGVfID0gaGFuZGxlOwotICAgIHRoaXMuZHJvcFdyaXRlc18gPSBmYWxz
ZTsKLSAgICB0aGlzLmVycm9yXyA9IGZhbHNlOwotICAgIHRoaXMuaW5jb21pbmdSZWNlaXZlcl8g
PSBudWxsOwotICAgIHRoaXMucmVhZFdhdGNoZXJfID0gbnVsbDsKLSAgICB0aGlzLmVycm9ySGFu
ZGxlcl8gPSBudWxsOwotICAgIHRoaXMucGF1c2VkXyA9IGZhbHNlOwotCi0gICAgdGhpcy53YWl0
VG9SZWFkTW9yZSgpOwotICB9Ci0KLSAgQ29ubmVjdG9yLnByb3RvdHlwZS5jbG9zZSA9IGZ1bmN0
aW9uKCkgewotICAgIHRoaXMuY2FuY2VsV2FpdCgpOwotICAgIGlmICh0aGlzLmhhbmRsZV8gIT0g
bnVsbCkgewotICAgICAgdGhpcy5oYW5kbGVfLmNsb3NlKCk7Ci0gICAgICB0aGlzLmhhbmRsZV8g
PSBudWxsOwotICAgIH0KLSAgfTsKLQotICBDb25uZWN0b3IucHJvdG90eXBlLnBhdXNlSW5jb21p
bmdNZXRob2RDYWxsUHJvY2Vzc2luZyA9IGZ1bmN0aW9uKCkgewotICAgIGlmICh0aGlzLnBhdXNl
ZF8pIHsKLSAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgdGhpcy5wYXVzZWRfPSB0cnVlOwotICAg
IHRoaXMuY2FuY2VsV2FpdCgpOwotICB9OwotCi0gIENvbm5lY3Rvci5wcm90b3R5cGUucmVzdW1l
SW5jb21pbmdNZXRob2RDYWxsUHJvY2Vzc2luZyA9IGZ1bmN0aW9uKCkgewotICAgIGlmICghdGhp
cy5wYXVzZWRfKSB7Ci0gICAgICByZXR1cm47Ci0gICAgfQotICAgIHRoaXMucGF1c2VkXz0gZmFs
c2U7Ci0gICAgdGhpcy53YWl0VG9SZWFkTW9yZSgpOwotICB9OwotCi0gIENvbm5lY3Rvci5wcm90
b3R5cGUuYWNjZXB0ID0gZnVuY3Rpb24obWVzc2FnZSkgewotICAgIGlmICh0aGlzLmVycm9yXykK
LSAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmICh0aGlzLmRyb3BXcml0ZXNfKQotICAgICAg
cmV0dXJuIHRydWU7Ci0KLSAgICB2YXIgcmVzdWx0ID0gdGhpcy5oYW5kbGVfLndyaXRlTWVzc2Fn
ZSgKLSAgICAgICAgbmV3IFVpbnQ4QXJyYXkobWVzc2FnZS5idWZmZXIuYXJyYXlCdWZmZXIpLCBt
ZXNzYWdlLmhhbmRsZXMpOwotICAgIHN3aXRjaCAocmVzdWx0KSB7Ci0gICAgICBjYXNlIE1vam8u
UkVTVUxUX09LOgotICAgICAgICAvLyBUaGUgaGFuZGxlcyB3ZXJlIHN1Y2Nlc3NmdWxseSB0cmFu
c2ZlcnJlZCwgc28gd2UgZG9uJ3Qgb3duIHRoZW0KLSAgICAgICAgLy8gYW55bW9yZS4KLSAgICAg
ICAgbWVzc2FnZS5oYW5kbGVzID0gW107Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBNb2pv
LlJFU1VMVF9GQUlMRURfUFJFQ09ORElUSU9OOgotICAgICAgICAvLyBUaGVyZSdzIG5vIHBvaW50
IGluIGNvbnRpbnVpbmcgdG8gd3JpdGUgdG8gdGhpcyBwaXBlIHNpbmNlIHRoZSBvdGhlcgotICAg
ICAgICAvLyBlbmQgaXMgZ29uZS4gQXZvaWQgd3JpdGluZyBhbnkgZnV0dXJlIG1lc3NhZ2VzLiBI
aWRlIHdyaXRlIGZhaWx1cmVzCi0gICAgICAgIC8vIGZyb20gdGhlIGNhbGxlciBzaW5jZSB3ZSdk
IGxpa2UgdGhlbSB0byBjb250aW51ZSBjb25zdW1pbmcgYW55Ci0gICAgICAgIC8vIGJhY2tsb2cg
b2YgaW5jb21pbmcgbWVzc2FnZXMgYmVmb3JlIHJlZ2FyZGluZyB0aGUgbWVzc2FnZSBwaXBlIGFz
Ci0gICAgICAgIC8vIGNsb3NlZC4KLSAgICAgICAgdGhpcy5kcm9wV3JpdGVzXyA9IHRydWU7Ci0g
ICAgICAgIGJyZWFrOwotICAgICAgZGVmYXVsdDoKLSAgICAgICAgLy8gVGhpcyBwYXJ0aWN1bGFy
IHdyaXRlIHdhcyByZWplY3RlZCwgcHJlc3VtYWJseSBiZWNhdXNlIG9mIGJhZCBpbnB1dC4KLSAg
ICAgICAgLy8gVGhlIHBpcGUgaXMgbm90IG5lY2Vzc2FyaWx5IGluIGEgYmFkIHN0YXRlLgotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIHJldHVybiB0cnVlOwotICB9OwotCi0gIENv
bm5lY3Rvci5wcm90b3R5cGUuc2V0SW5jb21pbmdSZWNlaXZlciA9IGZ1bmN0aW9uKHJlY2VpdmVy
KSB7Ci0gICAgdGhpcy5pbmNvbWluZ1JlY2VpdmVyXyA9IHJlY2VpdmVyOwotICB9OwotCi0gIENv
bm5lY3Rvci5wcm90b3R5cGUuc2V0RXJyb3JIYW5kbGVyID0gZnVuY3Rpb24oaGFuZGxlcikgewot
ICAgIHRoaXMuZXJyb3JIYW5kbGVyXyA9IGhhbmRsZXI7Ci0gIH07Ci0KLSAgQ29ubmVjdG9yLnBy
b3RvdHlwZS5yZWFkTW9yZV8gPSBmdW5jdGlvbihyZXN1bHQpIHsKLSAgICBmb3IgKDs7KSB7Ci0g
ICAgICBpZiAodGhpcy5wYXVzZWRfKSB7Ci0gICAgICAgIHJldHVybjsKLSAgICAgIH0KLQotICAg
ICAgdmFyIHJlYWQgPSB0aGlzLmhhbmRsZV8ucmVhZE1lc3NhZ2UoKTsKLSAgICAgIGlmICh0aGlz
LmhhbmRsZV8gPT0gbnVsbCkgLy8gVGhlIGNvbm5lY3RvciBoYXMgYmVlbiBjbG9zZWQuCi0gICAg
ICAgIHJldHVybjsKLSAgICAgIGlmIChyZWFkLnJlc3VsdCA9PSBNb2pvLlJFU1VMVF9TSE9VTERf
V0FJVCkKLSAgICAgICAgcmV0dXJuOwotICAgICAgaWYgKHJlYWQucmVzdWx0ICE9IE1vam8uUkVT
VUxUX09LKSB7Ci0gICAgICAgIHRoaXMuaGFuZGxlRXJyb3IocmVhZC5yZXN1bHQgIT09IE1vam8u
UkVTVUxUX0ZBSUxFRF9QUkVDT05ESVRJT04sCi0gICAgICAgICAgICBmYWxzZSk7Ci0gICAgICAg
IHJldHVybjsKLSAgICAgIH0KLSAgICAgIHZhciBtZXNzYWdlQnVmZmVyID0gbmV3IGludGVybmFs
LkJ1ZmZlcihyZWFkLmJ1ZmZlcik7Ci0gICAgICB2YXIgbWVzc2FnZSA9IG5ldyBpbnRlcm5hbC5N
ZXNzYWdlKG1lc3NhZ2VCdWZmZXIsIHJlYWQuaGFuZGxlcyk7Ci0gICAgICB2YXIgcmVjZWl2ZXJS
ZXN1bHQgPSB0aGlzLmluY29taW5nUmVjZWl2ZXJfICYmCi0gICAgICAgICAgdGhpcy5pbmNvbWlu
Z1JlY2VpdmVyXy5hY2NlcHQobWVzc2FnZSk7Ci0KLSAgICAgIC8vIERpc3BhdGNoaW5nIHRoZSBt
ZXNzYWdlIG1heSBoYXZlIGNsb3NlZCB0aGUgY29ubmVjdG9yLgotICAgICAgaWYgKHRoaXMuaGFu
ZGxlXyA9PSBudWxsKQotICAgICAgICByZXR1cm47Ci0KLSAgICAgIC8vIEhhbmRsZSBpbnZhbGlk
IGluY29taW5nIG1lc3NhZ2UuCi0gICAgICBpZiAoIWludGVybmFsLmlzVGVzdGluZ01vZGUoKSAm
JiAhcmVjZWl2ZXJSZXN1bHQpIHsKLSAgICAgICAgLy8gVE9ETyh5enNoZW4pOiBDb25zaWRlciBu
b3RpZnlpbmcgdGhlIGVtYmVkZGVyLgotICAgICAgICB0aGlzLmhhbmRsZUVycm9yKHRydWUsIGZh
bHNlKTsKLSAgICAgIH0KLSAgICB9Ci0gIH07Ci0KLSAgQ29ubmVjdG9yLnByb3RvdHlwZS5jYW5j
ZWxXYWl0ID0gZnVuY3Rpb24oKSB7Ci0gICAgaWYgKHRoaXMucmVhZFdhdGNoZXJfKSB7Ci0gICAg
ICB0aGlzLnJlYWRXYXRjaGVyXy5jYW5jZWwoKTsKLSAgICAgIHRoaXMucmVhZFdhdGNoZXJfID0g
bnVsbDsKLSAgICB9Ci0gIH07Ci0KLSAgQ29ubmVjdG9yLnByb3RvdHlwZS53YWl0VG9SZWFkTW9y
ZSA9IGZ1bmN0aW9uKCkgewotICAgIGlmICh0aGlzLmhhbmRsZV8pIHsKLSAgICAgIHRoaXMucmVh
ZFdhdGNoZXJfID0gdGhpcy5oYW5kbGVfLndhdGNoKHtyZWFkYWJsZTogdHJ1ZX0sCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJlYWRNb3JlXy5iaW5k
KHRoaXMpKTsKLSAgICB9Ci0gIH07Ci0KLSAgQ29ubmVjdG9yLnByb3RvdHlwZS5oYW5kbGVFcnJv
ciA9IGZ1bmN0aW9uKGZvcmNlUGlwZVJlc2V0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZm9yY2VBc3luY0hhbmRsZXIpIHsKLSAgICBpZiAodGhpcy5lcnJv
cl8gfHwgdGhpcy5oYW5kbGVfID09PSBudWxsKSB7Ci0gICAgICByZXR1cm47Ci0gICAgfQotCi0g
ICAgaWYgKHRoaXMucGF1c2VkXykgewotICAgICAgLy8gRW5mb3JjZSBjYWxsaW5nIHRoZSBlcnJv
ciBoYW5kbGVyIGFzeW5jaHJvbm91c2x5IGlmIHRoZSB1c2VyIGhhcwotICAgICAgLy8gcGF1c2Vk
IHJlY2VpdmluZyBtZXNzYWdlcy4gV2UgbmVlZCB0byB3YWl0IHVudGlsIHRoZSB1c2VyIHN0YXJ0
cwotICAgICAgLy8gcmVjZWl2aW5nIG1lc3NhZ2VzIGFnYWluLgotICAgICAgZm9yY2VBc3luY0hh
bmRsZXIgPSB0cnVlOwotICAgIH0KLQotICAgIGlmICghZm9yY2VQaXBlUmVzZXQgJiYgZm9yY2VB
c3luY0hhbmRsZXIpIHsKLSAgICAgIGZvcmNlUGlwZVJlc2V0ID0gdHJ1ZTsKLSAgICB9Ci0KLSAg
ICB0aGlzLmNhbmNlbFdhaXQoKTsKLSAgICBpZiAoZm9yY2VQaXBlUmVzZXQpIHsKLSAgICAgIHRo
aXMuaGFuZGxlXy5jbG9zZSgpOwotICAgICAgdmFyIGR1bW15UGlwZSA9IE1vam8uY3JlYXRlTWVz
c2FnZVBpcGUoKTsKLSAgICAgIHRoaXMuaGFuZGxlXyA9IGR1bW15UGlwZS5oYW5kbGUwOwotICAg
IH0KLQotICAgIGlmIChmb3JjZUFzeW5jSGFuZGxlcikgewotICAgICAgaWYgKCF0aGlzLnBhdXNl
ZF8pIHsKLSAgICAgICAgdGhpcy53YWl0VG9SZWFkTW9yZSgpOwotICAgICAgfQotICAgIH0gZWxz
ZSB7Ci0gICAgICB0aGlzLmVycm9yXyA9IHRydWU7Ci0gICAgICBpZiAodGhpcy5lcnJvckhhbmRs
ZXJfKSB7Ci0gICAgICAgIHRoaXMuZXJyb3JIYW5kbGVyXy5vbkVycm9yKCk7Ci0gICAgICB9Ci0g
ICAgfQotICB9OwotCi0gIGludGVybmFsLkNvbm5lY3RvciA9IENvbm5lY3RvcjsKLX0pKCk7Ci0v
LyBDb3B5cmlnaHQgMjAxNyBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxl
IGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLShm
dW5jdGlvbigpIHsKLSAgdmFyIGludGVybmFsID0gbW9qby5pbnRlcm5hbDsKLQotICBmdW5jdGlv
biB2YWxpZGF0ZUNvbnRyb2xSZXF1ZXN0V2l0aFJlc3BvbnNlKG1lc3NhZ2UpIHsKLSAgICB2YXIg
bWVzc2FnZVZhbGlkYXRvciA9IG5ldyBpbnRlcm5hbC5WYWxpZGF0b3IobWVzc2FnZSk7Ci0gICAg
dmFyIGVycm9yID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZU1lc3NhZ2VJc1JlcXVlc3RFeHBl
Y3RpbmdSZXNwb25zZSgpOwotICAgIGlmIChlcnJvciAhPT0gaW50ZXJuYWwudmFsaWRhdGlvbkVy
cm9yLk5PTkUpIHsKLSAgICAgIHRocm93IGVycm9yOwotICAgIH0KLQotICAgIGlmIChtZXNzYWdl
LmdldE5hbWUoKSAhPSBtb2pvLmludGVyZmFjZUNvbnRyb2wua1J1bk1lc3NhZ2VJZCkgewotICAg
ICAgdGhyb3cgbmV3IEVycm9yKCJDb250cm9sIG1lc3NhZ2UgbmFtZSBpcyBub3Qga1J1bk1lc3Nh
Z2VJZCIpOwotICAgIH0KLQotICAgIC8vIFZhbGlkYXRlIHBheWxvYWQuCi0gICAgZXJyb3IgPSBt
b2pvLmludGVyZmFjZUNvbnRyb2wuUnVuTWVzc2FnZVBhcmFtcy52YWxpZGF0ZShtZXNzYWdlVmFs
aWRhdG9yLAotICAgICAgICBtZXNzYWdlLmdldEhlYWRlck51bUJ5dGVzKCkpOwotICAgIGlmIChl
cnJvciAhPSBpbnRlcm5hbC52YWxpZGF0aW9uRXJyb3IuTk9ORSkgewotICAgICAgdGhyb3cgZXJy
b3I7Ci0gICAgfQotICB9Ci0KLSAgZnVuY3Rpb24gdmFsaWRhdGVDb250cm9sUmVxdWVzdFdpdGhv
dXRSZXNwb25zZShtZXNzYWdlKSB7Ci0gICAgdmFyIG1lc3NhZ2VWYWxpZGF0b3IgPSBuZXcgaW50
ZXJuYWwuVmFsaWRhdG9yKG1lc3NhZ2UpOwotICAgIHZhciBlcnJvciA9IG1lc3NhZ2VWYWxpZGF0
b3IudmFsaWRhdGVNZXNzYWdlSXNSZXF1ZXN0V2l0aG91dFJlc3BvbnNlKCk7Ci0gICAgaWYgKGVy
cm9yICE9IGludGVybmFsLnZhbGlkYXRpb25FcnJvci5OT05FKSB7Ci0gICAgICB0aHJvdyBlcnJv
cjsKLSAgICB9Ci0KLSAgICBpZiAobWVzc2FnZS5nZXROYW1lKCkgIT0gbW9qby5pbnRlcmZhY2VD
b250cm9sLmtSdW5PckNsb3NlUGlwZU1lc3NhZ2VJZCkgewotICAgICAgdGhyb3cgbmV3IEVycm9y
KCJDb250cm9sIG1lc3NhZ2UgbmFtZSBpcyBub3Qga1J1bk9yQ2xvc2VQaXBlTWVzc2FnZUlkIik7
Ci0gICAgfQotCi0gICAgLy8gVmFsaWRhdGUgcGF5bG9hZC4KLSAgICBlcnJvciA9IG1vam8uaW50
ZXJmYWNlQ29udHJvbC5SdW5PckNsb3NlUGlwZU1lc3NhZ2VQYXJhbXMudmFsaWRhdGUoCi0gICAg
ICAgIG1lc3NhZ2VWYWxpZGF0b3IsIG1lc3NhZ2UuZ2V0SGVhZGVyTnVtQnl0ZXMoKSk7Ci0gICAg
aWYgKGVycm9yICE9IGludGVybmFsLnZhbGlkYXRpb25FcnJvci5OT05FKSB7Ci0gICAgICB0aHJv
dyBlcnJvcjsKLSAgICB9Ci0gIH0KLQotICBmdW5jdGlvbiBydW5PckNsb3NlUGlwZShtZXNzYWdl
LCBpbnRlcmZhY2VWZXJzaW9uKSB7Ci0gICAgdmFyIHJlYWRlciA9IG5ldyBpbnRlcm5hbC5NZXNz
YWdlUmVhZGVyKG1lc3NhZ2UpOwotICAgIHZhciBydW5PckNsb3NlUGlwZU1lc3NhZ2VQYXJhbXMg
PSByZWFkZXIuZGVjb2RlU3RydWN0KAotICAgICAgICBtb2pvLmludGVyZmFjZUNvbnRyb2wuUnVu
T3JDbG9zZVBpcGVNZXNzYWdlUGFyYW1zKTsKLSAgICByZXR1cm4gaW50ZXJmYWNlVmVyc2lvbiA+
PQotICAgICAgICBydW5PckNsb3NlUGlwZU1lc3NhZ2VQYXJhbXMuaW5wdXQucmVxdWlyZVZlcnNp
b24udmVyc2lvbjsKLSAgfQotCi0gIGZ1bmN0aW9uIHJ1bihtZXNzYWdlLCByZXNwb25kZXIsIGlu
dGVyZmFjZVZlcnNpb24pIHsKLSAgICB2YXIgcmVhZGVyID0gbmV3IGludGVybmFsLk1lc3NhZ2VS
ZWFkZXIobWVzc2FnZSk7Ci0gICAgdmFyIHJ1bk1lc3NhZ2VQYXJhbXMgPQotICAgICAgICByZWFk
ZXIuZGVjb2RlU3RydWN0KG1vam8uaW50ZXJmYWNlQ29udHJvbC5SdW5NZXNzYWdlUGFyYW1zKTsK
LSAgICB2YXIgcnVuT3V0cHV0ID0gbnVsbDsKLQotICAgIGlmIChydW5NZXNzYWdlUGFyYW1zLmlu
cHV0LnF1ZXJ5VmVyc2lvbikgewotICAgICAgcnVuT3V0cHV0ID0gbmV3IG1vam8uaW50ZXJmYWNl
Q29udHJvbC5SdW5PdXRwdXQoKTsKLSAgICAgIHJ1bk91dHB1dC5xdWVyeVZlcnNpb25SZXN1bHQg
PSBuZXcKLSAgICAgICAgICBtb2pvLmludGVyZmFjZUNvbnRyb2wuUXVlcnlWZXJzaW9uUmVzdWx0
KAotICAgICAgICAgICAgICB7J3ZlcnNpb24nOiBpbnRlcmZhY2VWZXJzaW9ufSk7Ci0gICAgfQot
Ci0gICAgdmFyIHJ1blJlc3BvbnNlTWVzc2FnZVBhcmFtcyA9IG5ldwotICAgICAgICBtb2pvLmlu
dGVyZmFjZUNvbnRyb2wuUnVuUmVzcG9uc2VNZXNzYWdlUGFyYW1zKCk7Ci0gICAgcnVuUmVzcG9u
c2VNZXNzYWdlUGFyYW1zLm91dHB1dCA9IHJ1bk91dHB1dDsKLQotICAgIHZhciBtZXNzYWdlTmFt
ZSA9IG1vam8uaW50ZXJmYWNlQ29udHJvbC5rUnVuTWVzc2FnZUlkOwotICAgIHZhciBwYXlsb2Fk
U2l6ZSA9Ci0gICAgICAgIG1vam8uaW50ZXJmYWNlQ29udHJvbC5SdW5SZXNwb25zZU1lc3NhZ2VQ
YXJhbXMuZW5jb2RlZFNpemU7Ci0gICAgdmFyIHJlcXVlc3RJRCA9IHJlYWRlci5yZXF1ZXN0SUQ7
Ci0gICAgdmFyIGJ1aWxkZXIgPSBuZXcgaW50ZXJuYWwuTWVzc2FnZVYxQnVpbGRlcihtZXNzYWdl
TmFtZSwKLSAgICAgICAgcGF5bG9hZFNpemUsIGludGVybmFsLmtNZXNzYWdlSXNSZXNwb25zZSwg
cmVxdWVzdElEKTsKLSAgICBidWlsZGVyLmVuY29kZVN0cnVjdChtb2pvLmludGVyZmFjZUNvbnRy
b2wuUnVuUmVzcG9uc2VNZXNzYWdlUGFyYW1zLAotICAgICAgICAgICAgICAgICAgICAgICAgIHJ1
blJlc3BvbnNlTWVzc2FnZVBhcmFtcyk7Ci0gICAgcmVzcG9uZGVyLmFjY2VwdChidWlsZGVyLmZp
bmlzaCgpKTsKLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotCi0gIGZ1bmN0aW9uIGlzSW50ZXJmYWNl
Q29udHJvbE1lc3NhZ2UobWVzc2FnZSkgewotICAgIHJldHVybiBtZXNzYWdlLmdldE5hbWUoKSA9
PSBtb2pvLmludGVyZmFjZUNvbnRyb2wua1J1bk1lc3NhZ2VJZCB8fAotICAgICAgICAgICBtZXNz
YWdlLmdldE5hbWUoKSA9PSBtb2pvLmludGVyZmFjZUNvbnRyb2wua1J1bk9yQ2xvc2VQaXBlTWVz
c2FnZUlkOwotICB9Ci0KLSAgZnVuY3Rpb24gQ29udHJvbE1lc3NhZ2VIYW5kbGVyKGludGVyZmFj
ZVZlcnNpb24pIHsKLSAgICB0aGlzLmludGVyZmFjZVZlcnNpb25fID0gaW50ZXJmYWNlVmVyc2lv
bjsKLSAgfQotCi0gIENvbnRyb2xNZXNzYWdlSGFuZGxlci5wcm90b3R5cGUuYWNjZXB0ID0gZnVu
Y3Rpb24obWVzc2FnZSkgewotICAgIHZhbGlkYXRlQ29udHJvbFJlcXVlc3RXaXRob3V0UmVzcG9u
c2UobWVzc2FnZSk7Ci0gICAgcmV0dXJuIHJ1bk9yQ2xvc2VQaXBlKG1lc3NhZ2UsIHRoaXMuaW50
ZXJmYWNlVmVyc2lvbl8pOwotICB9OwotCi0gIENvbnRyb2xNZXNzYWdlSGFuZGxlci5wcm90b3R5
cGUuYWNjZXB0V2l0aFJlc3BvbmRlciA9IGZ1bmN0aW9uKG1lc3NhZ2UsCi0gICAgICByZXNwb25k
ZXIpIHsKLSAgICB2YWxpZGF0ZUNvbnRyb2xSZXF1ZXN0V2l0aFJlc3BvbnNlKG1lc3NhZ2UpOwot
ICAgIHJldHVybiBydW4obWVzc2FnZSwgcmVzcG9uZGVyLCB0aGlzLmludGVyZmFjZVZlcnNpb25f
KTsKLSAgfTsKLQotICBpbnRlcm5hbC5Db250cm9sTWVzc2FnZUhhbmRsZXIgPSBDb250cm9sTWVz
c2FnZUhhbmRsZXI7Ci0gIGludGVybmFsLmlzSW50ZXJmYWNlQ29udHJvbE1lc3NhZ2UgPSBpc0lu
dGVyZmFjZUNvbnRyb2xNZXNzYWdlOwotfSkoKTsKLS8vIENvcHlyaWdodCAyMDE3IFRoZSBDaHJv
bWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNl
IGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8g
Zm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLQotKGZ1bmN0aW9uKCkgewotICB2YXIgaW50ZXJu
YWwgPSBtb2pvLmludGVybmFsOwotCi0gIGZ1bmN0aW9uIGNvbnN0cnVjdFJ1bk9yQ2xvc2VQaXBl
TWVzc2FnZShydW5PckNsb3NlUGlwZUlucHV0KSB7Ci0gICAgdmFyIHJ1bk9yQ2xvc2VQaXBlTWVz
c2FnZVBhcmFtcyA9IG5ldwotICAgICAgICBtb2pvLmludGVyZmFjZUNvbnRyb2wuUnVuT3JDbG9z
ZVBpcGVNZXNzYWdlUGFyYW1zKCk7Ci0gICAgcnVuT3JDbG9zZVBpcGVNZXNzYWdlUGFyYW1zLmlu
cHV0ID0gcnVuT3JDbG9zZVBpcGVJbnB1dDsKLQotICAgIHZhciBtZXNzYWdlTmFtZSA9IG1vam8u
aW50ZXJmYWNlQ29udHJvbC5rUnVuT3JDbG9zZVBpcGVNZXNzYWdlSWQ7Ci0gICAgdmFyIHBheWxv
YWRTaXplID0KLSAgICAgICAgbW9qby5pbnRlcmZhY2VDb250cm9sLlJ1bk9yQ2xvc2VQaXBlTWVz
c2FnZVBhcmFtcy5lbmNvZGVkU2l6ZTsKLSAgICB2YXIgYnVpbGRlciA9IG5ldyBpbnRlcm5hbC5N
ZXNzYWdlVjBCdWlsZGVyKG1lc3NhZ2VOYW1lLCBwYXlsb2FkU2l6ZSk7Ci0gICAgYnVpbGRlci5l
bmNvZGVTdHJ1Y3QobW9qby5pbnRlcmZhY2VDb250cm9sLlJ1bk9yQ2xvc2VQaXBlTWVzc2FnZVBh
cmFtcywKLSAgICAgICAgICAgICAgICAgICAgICAgICBydW5PckNsb3NlUGlwZU1lc3NhZ2VQYXJh
bXMpOwotICAgIHZhciBtZXNzYWdlID0gYnVpbGRlci5maW5pc2goKTsKLSAgICByZXR1cm4gbWVz
c2FnZTsKLSAgfQotCi0gIGZ1bmN0aW9uIHZhbGlkYXRlQ29udHJvbFJlc3BvbnNlKG1lc3NhZ2Up
IHsKLSAgICB2YXIgbWVzc2FnZVZhbGlkYXRvciA9IG5ldyBpbnRlcm5hbC5WYWxpZGF0b3IobWVz
c2FnZSk7Ci0gICAgdmFyIGVycm9yID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZU1lc3NhZ2VJ
c1Jlc3BvbnNlKCk7Ci0gICAgaWYgKGVycm9yICE9IGludGVybmFsLnZhbGlkYXRpb25FcnJvci5O
T05FKSB7Ci0gICAgICB0aHJvdyBlcnJvcjsKLSAgICB9Ci0KLSAgICBpZiAobWVzc2FnZS5nZXRO
YW1lKCkgIT0gbW9qby5pbnRlcmZhY2VDb250cm9sLmtSdW5NZXNzYWdlSWQpIHsKLSAgICAgIHRo
cm93IG5ldyBFcnJvcigiQ29udHJvbCBtZXNzYWdlIG5hbWUgaXMgbm90IGtSdW5NZXNzYWdlSWQi
KTsKLSAgICB9Ci0KLSAgICAvLyBWYWxpZGF0ZSBwYXlsb2FkLgotICAgIGVycm9yID0gbW9qby5p
bnRlcmZhY2VDb250cm9sLlJ1blJlc3BvbnNlTWVzc2FnZVBhcmFtcy52YWxpZGF0ZSgKLSAgICAg
ICAgbWVzc2FnZVZhbGlkYXRvciwgbWVzc2FnZS5nZXRIZWFkZXJOdW1CeXRlcygpKTsKLSAgICBp
ZiAoZXJyb3IgIT0gaW50ZXJuYWwudmFsaWRhdGlvbkVycm9yLk5PTkUpIHsKLSAgICAgIHRocm93
IGVycm9yOwotICAgIH0KLSAgfQotCi0gIGZ1bmN0aW9uIGFjY2VwdFJ1blJlc3BvbnNlKG1lc3Nh
Z2UpIHsKLSAgICB2YWxpZGF0ZUNvbnRyb2xSZXNwb25zZShtZXNzYWdlKTsKLQotICAgIHZhciBy
ZWFkZXIgPSBuZXcgaW50ZXJuYWwuTWVzc2FnZVJlYWRlcihtZXNzYWdlKTsKLSAgICB2YXIgcnVu
UmVzcG9uc2VNZXNzYWdlUGFyYW1zID0gcmVhZGVyLmRlY29kZVN0cnVjdCgKLSAgICAgICAgbW9q
by5pbnRlcmZhY2VDb250cm9sLlJ1blJlc3BvbnNlTWVzc2FnZVBhcmFtcyk7Ci0KLSAgICByZXR1
cm4gUHJvbWlzZS5yZXNvbHZlKHJ1blJlc3BvbnNlTWVzc2FnZVBhcmFtcyk7Ci0gIH0KLQotIC8q
KgotICAqIFNlbmRzIHRoZSBnaXZlbiBydW4gbWVzc2FnZSB0aHJvdWdoIHRoZSByZWNlaXZlci4K
LSAgKiBBY2NlcHRzIHRoZSByZXNwb25zZSBtZXNzYWdlIGZyb20gdGhlIHJlY2VpdmVyIGFuZCBk
ZWNvZGVzIHRoZSBtZXNzYWdlCi0gICogc3RydWN0IHRvIFJ1blJlc3BvbnNlTWVzc2FnZVBhcmFt
cy4KLSAgKgotICAqIEBwYXJhbSAge1JvdXRlcn0gcmVjZWl2ZXIuCi0gICogQHBhcmFtICB7UnVu
TWVzc2FnZVBhcmFtc30gcnVuTWVzc2FnZVBhcmFtcyB0byBiZSBzZW50IHZpYSBhIG1lc3NhZ2Uu
Ci0gICogQHJldHVybiB7UHJvbWlzZX0gdGhhdCByZXNvbHZlcyB0byBhIFJ1blJlc3BvbnNlTWVz
c2FnZVBhcmFtcy4KLSAgKi8KLSAgZnVuY3Rpb24gc2VuZFJ1bk1lc3NhZ2UocmVjZWl2ZXIsIHJ1
bk1lc3NhZ2VQYXJhbXMpIHsKLSAgICB2YXIgbWVzc2FnZU5hbWUgPSBtb2pvLmludGVyZmFjZUNv
bnRyb2wua1J1bk1lc3NhZ2VJZDsKLSAgICB2YXIgcGF5bG9hZFNpemUgPSBtb2pvLmludGVyZmFj
ZUNvbnRyb2wuUnVuTWVzc2FnZVBhcmFtcy5lbmNvZGVkU2l6ZTsKLSAgICAvLyB8cmVxdWVzdElE
fCBpcyBzZXQgdG8gMCwgYnV0IGlzIGxhdGVyIHByb3Blcmx5IHNldCBieSBSb3V0ZXIuCi0gICAg
dmFyIGJ1aWxkZXIgPSBuZXcgaW50ZXJuYWwuTWVzc2FnZVYxQnVpbGRlcihtZXNzYWdlTmFtZSwK
LSAgICAgICAgcGF5bG9hZFNpemUsIGludGVybmFsLmtNZXNzYWdlRXhwZWN0c1Jlc3BvbnNlLCAw
KTsKLSAgICBidWlsZGVyLmVuY29kZVN0cnVjdChtb2pvLmludGVyZmFjZUNvbnRyb2wuUnVuTWVz
c2FnZVBhcmFtcywKLSAgICAgICAgICAgICAgICAgICAgICAgICBydW5NZXNzYWdlUGFyYW1zKTsK
LSAgICB2YXIgbWVzc2FnZSA9IGJ1aWxkZXIuZmluaXNoKCk7Ci0KLSAgICByZXR1cm4gcmVjZWl2
ZXIuYWNjZXB0QW5kRXhwZWN0UmVzcG9uc2UobWVzc2FnZSkudGhlbihhY2NlcHRSdW5SZXNwb25z
ZSk7Ci0gIH0KLQotICBmdW5jdGlvbiBDb250cm9sTWVzc2FnZVByb3h5KHJlY2VpdmVyKSB7Ci0g
ICAgdGhpcy5yZWNlaXZlcl8gPSByZWNlaXZlcjsKLSAgfQotCi0gIENvbnRyb2xNZXNzYWdlUHJv
eHkucHJvdG90eXBlLnF1ZXJ5VmVyc2lvbiA9IGZ1bmN0aW9uKCkgewotICAgIHZhciBydW5NZXNz
YWdlUGFyYW1zID0gbmV3IG1vam8uaW50ZXJmYWNlQ29udHJvbC5SdW5NZXNzYWdlUGFyYW1zKCk7
Ci0gICAgcnVuTWVzc2FnZVBhcmFtcy5pbnB1dCA9IG5ldyBtb2pvLmludGVyZmFjZUNvbnRyb2wu
UnVuSW5wdXQoKTsKLSAgICBydW5NZXNzYWdlUGFyYW1zLmlucHV0LnF1ZXJ5VmVyc2lvbiA9Ci0g
ICAgICAgIG5ldyBtb2pvLmludGVyZmFjZUNvbnRyb2wuUXVlcnlWZXJzaW9uKCk7Ci0KLSAgICBy
ZXR1cm4gc2VuZFJ1bk1lc3NhZ2UodGhpcy5yZWNlaXZlcl8sIHJ1bk1lc3NhZ2VQYXJhbXMpLnRo
ZW4oZnVuY3Rpb24oCi0gICAgICAgIHJ1blJlc3BvbnNlTWVzc2FnZVBhcmFtcykgewotICAgICAg
cmV0dXJuIHJ1blJlc3BvbnNlTWVzc2FnZVBhcmFtcy5vdXRwdXQucXVlcnlWZXJzaW9uUmVzdWx0
LnZlcnNpb247Ci0gICAgfSk7Ci0gIH07Ci0KLSAgQ29udHJvbE1lc3NhZ2VQcm94eS5wcm90b3R5
cGUucmVxdWlyZVZlcnNpb24gPSBmdW5jdGlvbih2ZXJzaW9uKSB7Ci0gICAgdmFyIHJ1bk9yQ2xv
c2VQaXBlSW5wdXQgPSBuZXcgbW9qby5pbnRlcmZhY2VDb250cm9sLlJ1bk9yQ2xvc2VQaXBlSW5w
dXQoKTsKLSAgICBydW5PckNsb3NlUGlwZUlucHV0LnJlcXVpcmVWZXJzaW9uID0KLSAgICAgICAg
bmV3IG1vam8uaW50ZXJmYWNlQ29udHJvbC5SZXF1aXJlVmVyc2lvbih7J3ZlcnNpb24nOiB2ZXJz
aW9ufSk7Ci0gICAgdmFyIG1lc3NhZ2UgPSBjb25zdHJ1Y3RSdW5PckNsb3NlUGlwZU1lc3NhZ2Uo
cnVuT3JDbG9zZVBpcGVJbnB1dCk7Ci0gICAgdGhpcy5yZWNlaXZlcl8uYWNjZXB0KG1lc3NhZ2Up
OwotICB9OwotCi0gIGludGVybmFsLkNvbnRyb2xNZXNzYWdlUHJveHkgPSBDb250cm9sTWVzc2Fn
ZVByb3h5OwotfSkoKTsKLS8vIENvcHlyaWdodCAyMDE3IFRoZSBDaHJvbWl1bSBBdXRob3JzLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJu
ZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJ
Q0VOU0UgZmlsZS4KLQotKGZ1bmN0aW9uKCkgewotICB2YXIgaW50ZXJuYWwgPSBtb2pvLmludGVy
bmFsOwotCi0gIGZ1bmN0aW9uIEludGVyZmFjZUVuZHBvaW50Q2xpZW50KGludGVyZmFjZUVuZHBv
aW50SGFuZGxlLCByZWNlaXZlciwKLSAgICAgIGludGVyZmFjZVZlcnNpb24pIHsKLSAgICB0aGlz
LmNvbnRyb2xsZXJfID0gbnVsbDsKLSAgICB0aGlzLmVuY291bnRlcmVkRXJyb3JfID0gZmFsc2U7
Ci0gICAgdGhpcy5oYW5kbGVfID0gaW50ZXJmYWNlRW5kcG9pbnRIYW5kbGU7Ci0gICAgdGhpcy5p
bmNvbWluZ1JlY2VpdmVyXyA9IHJlY2VpdmVyOwotCi0gICAgaWYgKGludGVyZmFjZVZlcnNpb24g
IT09IHVuZGVmaW5lZCkgewotICAgICAgdGhpcy5jb250cm9sTWVzc2FnZUhhbmRsZXJfID0gbmV3
IGludGVybmFsLkNvbnRyb2xNZXNzYWdlSGFuZGxlcigKLSAgICAgICAgICBpbnRlcmZhY2VWZXJz
aW9uKTsKLSAgICB9IGVsc2UgewotICAgICAgdGhpcy5jb250cm9sTWVzc2FnZVByb3h5XyA9IG5l
dyBpbnRlcm5hbC5Db250cm9sTWVzc2FnZVByb3h5KHRoaXMpOwotICAgIH0KLQotICAgIHRoaXMu
bmV4dFJlcXVlc3RJRF8gPSAwOwotICAgIHRoaXMuY29tcGxldGVyc18gPSBuZXcgTWFwKCk7Ci0g
ICAgdGhpcy5wYXlsb2FkVmFsaWRhdG9yc18gPSBbXTsKLSAgICB0aGlzLmNvbm5lY3Rpb25FcnJv
ckhhbmRsZXJfID0gbnVsbDsKLQotICAgIGlmIChpbnRlcmZhY2VFbmRwb2ludEhhbmRsZS5wZW5k
aW5nQXNzb2NpYXRpb24oKSkgewotICAgICAgaW50ZXJmYWNlRW5kcG9pbnRIYW5kbGUuc2V0QXNz
b2NpYXRpb25FdmVudEhhbmRsZXIoCi0gICAgICAgICAgdGhpcy5vbkFzc29jaWF0aW9uRXZlbnQu
YmluZCh0aGlzKSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgIHRoaXMuaW5pdENvbnRyb2xsZXJJZk5l
Y2Vzc2FyeV8oKTsKLSAgICB9Ci0gIH0KLQotICBJbnRlcmZhY2VFbmRwb2ludENsaWVudC5wcm90
b3R5cGUuaW5pdENvbnRyb2xsZXJJZk5lY2Vzc2FyeV8gPSBmdW5jdGlvbigpIHsKLSAgICBpZiAo
dGhpcy5jb250cm9sbGVyXyB8fCB0aGlzLmhhbmRsZV8ucGVuZGluZ0Fzc29jaWF0aW9uKCkpIHsK
LSAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICB0aGlzLmNvbnRyb2xsZXJfID0gdGhpcy5oYW5k
bGVfLmdyb3VwQ29udHJvbGxlcigpLmF0dGFjaEVuZHBvaW50Q2xpZW50KAotICAgICAgICB0aGlz
LmhhbmRsZV8sIHRoaXMpOwotICB9OwotCi0gIEludGVyZmFjZUVuZHBvaW50Q2xpZW50LnByb3Rv
dHlwZS5vbkFzc29jaWF0aW9uRXZlbnQgPSBmdW5jdGlvbigKLSAgICAgIGFzc29jaWF0aW9uRXZl
bnQpIHsKLSAgICBpZiAoYXNzb2NpYXRpb25FdmVudCA9PT0gaW50ZXJuYWwuQXNzb2NpYXRpb25F
dmVudC5BU1NPQ0lBVEVEKSB7Ci0gICAgICB0aGlzLmluaXRDb250cm9sbGVySWZOZWNlc3Nhcnlf
KCk7Ci0gICAgfSBlbHNlIGlmIChhc3NvY2lhdGlvbkV2ZW50ID09PQotICAgICAgICAgIGludGVy
bmFsLkFzc29jaWF0aW9uRXZlbnQuUEVFUl9DTE9TRURfQkVGT1JFX0FTU09DSUFUSU9OKSB7Ci0g
ICAgICBzZXRUaW1lb3V0KHRoaXMubm90aWZ5RXJyb3IuYmluZCh0aGlzLCB0aGlzLmhhbmRsZV8u
ZGlzY29ubmVjdFJlYXNvbigpKSwKLSAgICAgICAgICAgICAgICAgMCk7Ci0gICAgfQotICB9Owot
Ci0gIEludGVyZmFjZUVuZHBvaW50Q2xpZW50LnByb3RvdHlwZS5wYXNzSGFuZGxlID0gZnVuY3Rp
b24oKSB7Ci0gICAgaWYgKCF0aGlzLmhhbmRsZV8uaXNWYWxpZCgpKSB7Ci0gICAgICByZXR1cm4g
bmV3IGludGVybmFsLkludGVyZmFjZUVuZHBvaW50SGFuZGxlKCk7Ci0gICAgfQotCi0gICAgLy8g
VXNlZCB0byBjbGVhciB0aGUgcHJldmlvdXNseSBzZXQgY2FsbGJhY2suCi0gICAgdGhpcy5oYW5k
bGVfLnNldEFzc29jaWF0aW9uRXZlbnRIYW5kbGVyKHVuZGVmaW5lZCk7Ci0KLSAgICBpZiAodGhp
cy5jb250cm9sbGVyXykgewotICAgICAgdGhpcy5jb250cm9sbGVyXyA9IG51bGw7Ci0gICAgICB0
aGlzLmhhbmRsZV8uZ3JvdXBDb250cm9sbGVyKCkuZGV0YWNoRW5kcG9pbnRDbGllbnQodGhpcy5o
YW5kbGVfKTsKLSAgICB9Ci0gICAgdmFyIGhhbmRsZSA9IHRoaXMuaGFuZGxlXzsKLSAgICB0aGlz
LmhhbmRsZV8gPSBudWxsOwotICAgIHJldHVybiBoYW5kbGU7Ci0gIH07Ci0KLSAgSW50ZXJmYWNl
RW5kcG9pbnRDbGllbnQucHJvdG90eXBlLmNsb3NlID0gZnVuY3Rpb24ocmVhc29uKSB7Ci0gICAg
dmFyIGhhbmRsZSA9IHRoaXMucGFzc0hhbmRsZSgpOwotICAgIGhhbmRsZS5yZXNldChyZWFzb24p
OwotICB9OwotCi0gIEludGVyZmFjZUVuZHBvaW50Q2xpZW50LnByb3RvdHlwZS5hY2NlcHQgPSBm
dW5jdGlvbihtZXNzYWdlKSB7Ci0gICAgaWYgKG1lc3NhZ2UuYXNzb2NpYXRlZEVuZHBvaW50SGFu
ZGxlcy5sZW5ndGggPiAwKSB7Ci0gICAgICBtZXNzYWdlLnNlcmlhbGl6ZUFzc29jaWF0ZWRFbmRw
b2ludEhhbmRsZXMoCi0gICAgICAgICAgdGhpcy5oYW5kbGVfLmdyb3VwQ29udHJvbGxlcigpKTsK
LSAgICB9Ci0KLSAgICBpZiAodGhpcy5lbmNvdW50ZXJlZEVycm9yXykgewotICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIH0KLQotICAgIHRoaXMuaW5pdENvbnRyb2xsZXJJZk5lY2Vzc2FyeV8oKTsK
LSAgICByZXR1cm4gdGhpcy5jb250cm9sbGVyXy5zZW5kTWVzc2FnZShtZXNzYWdlKTsKLSAgfTsK
LQotICBJbnRlcmZhY2VFbmRwb2ludENsaWVudC5wcm90b3R5cGUuYWNjZXB0QW5kRXhwZWN0UmVz
cG9uc2UgPSBmdW5jdGlvbigKLSAgICAgIG1lc3NhZ2UpIHsKLSAgICBpZiAobWVzc2FnZS5hc3Nv
Y2lhdGVkRW5kcG9pbnRIYW5kbGVzLmxlbmd0aCA+IDApIHsKLSAgICAgIG1lc3NhZ2Uuc2VyaWFs
aXplQXNzb2NpYXRlZEVuZHBvaW50SGFuZGxlcygKLSAgICAgICAgICB0aGlzLmhhbmRsZV8uZ3Jv
dXBDb250cm9sbGVyKCkpOwotICAgIH0KLQotICAgIGlmICh0aGlzLmVuY291bnRlcmVkRXJyb3Jf
KSB7Ci0gICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoKTsKLSAgICB9Ci0KLSAgICB0aGlzLmlu
aXRDb250cm9sbGVySWZOZWNlc3NhcnlfKCk7Ci0KLSAgICAvLyBSZXNlcnZlIDAgaW4gY2FzZSB3
ZSB3YW50IGl0IHRvIGNvbnZleSBzcGVjaWFsIG1lYW5pbmcgaW4gdGhlIGZ1dHVyZS4KLSAgICB2
YXIgcmVxdWVzdElEID0gdGhpcy5uZXh0UmVxdWVzdElEXysrOwotICAgIGlmIChyZXF1ZXN0SUQg
PT09IDApCi0gICAgICByZXF1ZXN0SUQgPSB0aGlzLm5leHRSZXF1ZXN0SURfKys7Ci0KLSAgICBt
ZXNzYWdlLnNldFJlcXVlc3RJRChyZXF1ZXN0SUQpOwotICAgIHZhciByZXN1bHQgPSB0aGlzLmNv
bnRyb2xsZXJfLnNlbmRNZXNzYWdlKG1lc3NhZ2UpOwotICAgIGlmICghcmVzdWx0KQotICAgICAg
cmV0dXJuIFByb21pc2UucmVqZWN0KEVycm9yKCJDb25uZWN0aW9uIGVycm9yIikpOwotCi0gICAg
dmFyIGNvbXBsZXRlciA9IHt9OwotICAgIHRoaXMuY29tcGxldGVyc18uc2V0KHJlcXVlc3RJRCwg
Y29tcGxldGVyKTsKLSAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVq
ZWN0KSB7Ci0gICAgICBjb21wbGV0ZXIucmVzb2x2ZSA9IHJlc29sdmU7Ci0gICAgICBjb21wbGV0
ZXIucmVqZWN0ID0gcmVqZWN0OwotICAgIH0pOwotICB9OwotCi0gIEludGVyZmFjZUVuZHBvaW50
Q2xpZW50LnByb3RvdHlwZS5zZXRQYXlsb2FkVmFsaWRhdG9ycyA9IGZ1bmN0aW9uKAotICAgICAg
cGF5bG9hZFZhbGlkYXRvcnMpIHsKLSAgICB0aGlzLnBheWxvYWRWYWxpZGF0b3JzXyA9IHBheWxv
YWRWYWxpZGF0b3JzOwotICB9OwotCi0gIEludGVyZmFjZUVuZHBvaW50Q2xpZW50LnByb3RvdHlw
ZS5zZXRJbmNvbWluZ1JlY2VpdmVyID0gZnVuY3Rpb24ocmVjZWl2ZXIpIHsKLSAgICB0aGlzLmlu
Y29taW5nUmVjZWl2ZXJfID0gcmVjZWl2ZXI7Ci0gIH07Ci0KLSAgSW50ZXJmYWNlRW5kcG9pbnRD
bGllbnQucHJvdG90eXBlLnNldENvbm5lY3Rpb25FcnJvckhhbmRsZXIgPSBmdW5jdGlvbigKLSAg
ICAgIGhhbmRsZXIpIHsKLSAgICB0aGlzLmNvbm5lY3Rpb25FcnJvckhhbmRsZXJfID0gaGFuZGxl
cjsKLSAgfTsKLQotICBJbnRlcmZhY2VFbmRwb2ludENsaWVudC5wcm90b3R5cGUuaGFuZGxlSW5j
b21pbmdNZXNzYWdlID0gZnVuY3Rpb24obWVzc2FnZSwKLSAgICAgIG1lc3NhZ2VWYWxpZGF0b3Ip
IHsKLSAgICB2YXIgbm9FcnJvciA9IGludGVybmFsLnZhbGlkYXRpb25FcnJvci5OT05FOwotICAg
IHZhciBlcnIgPSBub0Vycm9yOwotICAgIGZvciAodmFyIGkgPSAwOyBlcnIgPT09IG5vRXJyb3Ig
JiYgaSA8IHRoaXMucGF5bG9hZFZhbGlkYXRvcnNfLmxlbmd0aDsgKytpKQotICAgICAgZXJyID0g
dGhpcy5wYXlsb2FkVmFsaWRhdG9yc19baV0obWVzc2FnZVZhbGlkYXRvcik7Ci0KLSAgICBpZiAo
ZXJyID09IG5vRXJyb3IpIHsKLSAgICAgIHJldHVybiB0aGlzLmhhbmRsZVZhbGlkSW5jb21pbmdN
ZXNzYWdlXyhtZXNzYWdlKTsKLSAgICB9IGVsc2UgewotICAgICAgaW50ZXJuYWwucmVwb3J0VmFs
aWRhdGlvbkVycm9yKGVycik7Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICB9OwotCi0g
IEludGVyZmFjZUVuZHBvaW50Q2xpZW50LnByb3RvdHlwZS5oYW5kbGVWYWxpZEluY29taW5nTWVz
c2FnZV8gPSBmdW5jdGlvbigKLSAgICAgIG1lc3NhZ2UpIHsKLSAgICBpZiAoaW50ZXJuYWwuaXNU
ZXN0aW5nTW9kZSgpKSB7Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBpZiAodGhp
cy5lbmNvdW50ZXJlZEVycm9yXykgewotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAg
IHZhciBvayA9IGZhbHNlOwotCi0gICAgaWYgKG1lc3NhZ2UuZXhwZWN0c1Jlc3BvbnNlKCkpIHsK
LSAgICAgIGlmIChpbnRlcm5hbC5pc0ludGVyZmFjZUNvbnRyb2xNZXNzYWdlKG1lc3NhZ2UpICYm
Ci0gICAgICAgICAgdGhpcy5jb250cm9sTWVzc2FnZUhhbmRsZXJfKSB7Ci0gICAgICAgIG9rID0g
dGhpcy5jb250cm9sTWVzc2FnZUhhbmRsZXJfLmFjY2VwdFdpdGhSZXNwb25kZXIobWVzc2FnZSwg
dGhpcyk7Ci0gICAgICB9IGVsc2UgaWYgKHRoaXMuaW5jb21pbmdSZWNlaXZlcl8pIHsKLSAgICAg
ICAgb2sgPSB0aGlzLmluY29taW5nUmVjZWl2ZXJfLmFjY2VwdFdpdGhSZXNwb25kZXIobWVzc2Fn
ZSwgdGhpcyk7Ci0gICAgICB9Ci0gICAgfSBlbHNlIGlmIChtZXNzYWdlLmlzUmVzcG9uc2UoKSkg
ewotICAgICAgdmFyIHJlYWRlciA9IG5ldyBpbnRlcm5hbC5NZXNzYWdlUmVhZGVyKG1lc3NhZ2Up
OwotICAgICAgdmFyIHJlcXVlc3RJRCA9IHJlYWRlci5yZXF1ZXN0SUQ7Ci0gICAgICB2YXIgY29t
cGxldGVyID0gdGhpcy5jb21wbGV0ZXJzXy5nZXQocmVxdWVzdElEKTsKLSAgICAgIGlmIChjb21w
bGV0ZXIpIHsKLSAgICAgICAgdGhpcy5jb21wbGV0ZXJzXy5kZWxldGUocmVxdWVzdElEKTsKLSAg
ICAgICAgY29tcGxldGVyLnJlc29sdmUobWVzc2FnZSk7Ci0gICAgICAgIG9rID0gdHJ1ZTsKLSAg
ICAgIH0gZWxzZSB7Ci0gICAgICAgIGNvbnNvbGUubG9nKCJVbmV4cGVjdGVkIHJlc3BvbnNlIHdp
dGggcmVxdWVzdCBJRDogIiArIHJlcXVlc3RJRCk7Ci0gICAgICB9Ci0gICAgfSBlbHNlIHsKLSAg
ICAgIGlmIChpbnRlcm5hbC5pc0ludGVyZmFjZUNvbnRyb2xNZXNzYWdlKG1lc3NhZ2UpICYmCi0g
ICAgICAgICAgdGhpcy5jb250cm9sTWVzc2FnZUhhbmRsZXJfKSB7Ci0gICAgICAgIG9rID0gdGhp
cy5jb250cm9sTWVzc2FnZUhhbmRsZXJfLmFjY2VwdChtZXNzYWdlKTsKLSAgICAgIH0gZWxzZSBp
ZiAodGhpcy5pbmNvbWluZ1JlY2VpdmVyXykgewotICAgICAgICBvayA9IHRoaXMuaW5jb21pbmdS
ZWNlaXZlcl8uYWNjZXB0KG1lc3NhZ2UpOwotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gb2s7
Ci0gIH07Ci0KLSAgSW50ZXJmYWNlRW5kcG9pbnRDbGllbnQucHJvdG90eXBlLm5vdGlmeUVycm9y
ID0gZnVuY3Rpb24ocmVhc29uKSB7Ci0gICAgaWYgKHRoaXMuZW5jb3VudGVyZWRFcnJvcl8pIHsK
LSAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgdGhpcy5lbmNvdW50ZXJlZEVycm9yXyA9IHRydWU7
Ci0KLSAgICB0aGlzLmNvbXBsZXRlcnNfLmZvckVhY2goZnVuY3Rpb24odmFsdWUpIHsKLSAgICAg
IHZhbHVlLnJlamVjdCgpOwotICAgIH0pOwotICAgIHRoaXMuY29tcGxldGVyc18uY2xlYXIoKTsg
IC8vIERyb3AgYW55IHJlc3BvbmRlcnMuCi0KLSAgICBpZiAodGhpcy5jb25uZWN0aW9uRXJyb3JI
YW5kbGVyXykgewotICAgICAgdGhpcy5jb25uZWN0aW9uRXJyb3JIYW5kbGVyXyhyZWFzb24pOwot
ICAgIH0KLSAgfTsKLQotICBJbnRlcmZhY2VFbmRwb2ludENsaWVudC5wcm90b3R5cGUucXVlcnlW
ZXJzaW9uID0gZnVuY3Rpb24oKSB7Ci0gICAgcmV0dXJuIHRoaXMuY29udHJvbE1lc3NhZ2VQcm94
eV8ucXVlcnlWZXJzaW9uKCk7Ci0gIH07Ci0KLSAgSW50ZXJmYWNlRW5kcG9pbnRDbGllbnQucHJv
dG90eXBlLnJlcXVpcmVWZXJzaW9uID0gZnVuY3Rpb24odmVyc2lvbikgewotICAgIHRoaXMuY29u
dHJvbE1lc3NhZ2VQcm94eV8ucmVxdWlyZVZlcnNpb24odmVyc2lvbik7Ci0gIH07Ci0KLSAgSW50
ZXJmYWNlRW5kcG9pbnRDbGllbnQucHJvdG90eXBlLmdldEVuY291bnRlcmVkRXJyb3IgPSBmdW5j
dGlvbigpIHsKLSAgICByZXR1cm4gdGhpcy5lbmNvdW50ZXJlZEVycm9yXzsKLSAgfTsKLQotICBp
bnRlcm5hbC5JbnRlcmZhY2VFbmRwb2ludENsaWVudCA9IEludGVyZmFjZUVuZHBvaW50Q2xpZW50
OwotfSkoKTsKLS8vIENvcHlyaWdodCAyMDE3IFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkg
YSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0Ug
ZmlsZS4KLQotKGZ1bmN0aW9uKCkgewotICB2YXIgaW50ZXJuYWwgPSBtb2pvLmludGVybmFsOwot
Ci0gIHZhciBBc3NvY2lhdGlvbkV2ZW50ID0gewotICAgIC8vIFRoZSBpbnRlcmZhY2UgaGFzIGJl
ZW4gYXNzb2NpYXRlZCB3aXRoIGEgbWVzc2FnZSBwaXBlLgotICAgIEFTU09DSUFURUQ6ICdhc3Nv
Y2lhdGVkJywKLSAgICAvLyBUaGUgcGVlciBvZiB0aGlzIG9iamVjdCBoYXMgYmVlbiBjbG9zZWQg
YmVmb3JlIGFzc29jaWF0aW9uLgotICAgIFBFRVJfQ0xPU0VEX0JFRk9SRV9BU1NPQ0lBVElPTjog
J3BlZXJfY2xvc2VkX2JlZm9yZV9hc3NvY2lhdGlvbicKLSAgfTsKLQotICBmdW5jdGlvbiBTdGF0
ZShpbnRlcmZhY2VJZCwgYXNzb2NpYXRlZEdyb3VwQ29udHJvbGxlcikgewotICAgIGlmIChpbnRl
cmZhY2VJZCA9PT0gdW5kZWZpbmVkKSB7Ci0gICAgICBpbnRlcmZhY2VJZCA9IGludGVybmFsLmtJ
bnZhbGlkSW50ZXJmYWNlSWQ7Ci0gICAgfQotCi0gICAgdGhpcy5pbnRlcmZhY2VJZCA9IGludGVy
ZmFjZUlkOwotICAgIHRoaXMuYXNzb2NpYXRlZEdyb3VwQ29udHJvbGxlciA9IGFzc29jaWF0ZWRH
cm91cENvbnRyb2xsZXI7Ci0gICAgdGhpcy5wZW5kaW5nQXNzb2NpYXRpb24gPSBmYWxzZTsKLSAg
ICB0aGlzLmRpc2Nvbm5lY3RSZWFzb24gPSBudWxsOwotICAgIHRoaXMucGVlclN0YXRlXyA9IG51
bGw7Ci0gICAgdGhpcy5hc3NvY2lhdGlvbkV2ZW50SGFuZGxlcl8gPSBudWxsOwotICB9Ci0KLSAg
U3RhdGUucHJvdG90eXBlLmluaXRQZW5kaW5nU3RhdGUgPSBmdW5jdGlvbihwZWVyKSB7Ci0gICAg
dGhpcy5wZW5kaW5nQXNzb2NpYXRpb24gPSB0cnVlOwotICAgIHRoaXMucGVlclN0YXRlXyA9IHBl
ZXI7Ci0gIH07Ci0KLSAgU3RhdGUucHJvdG90eXBlLmlzVmFsaWQgPSBmdW5jdGlvbigpIHsKLSAg
ICByZXR1cm4gdGhpcy5wZW5kaW5nQXNzb2NpYXRpb24gfHwKLSAgICAgICAgaW50ZXJuYWwuaXNW
YWxpZEludGVyZmFjZUlkKHRoaXMuaW50ZXJmYWNlSWQpOwotICB9OwotCi0gIFN0YXRlLnByb3Rv
dHlwZS5jbG9zZSA9IGZ1bmN0aW9uKGRpc2Nvbm5lY3RSZWFzb24pIHsKLSAgICB2YXIgY2FjaGVk
R3JvdXBDb250cm9sbGVyOwotICAgIHZhciBjYWNoZWRQZWVyU3RhdGU7Ci0gICAgdmFyIGNhY2hl
ZElkID0gaW50ZXJuYWwua0ludmFsaWRJbnRlcmZhY2VJZDsKLQotICAgIGlmICghdGhpcy5wZW5k
aW5nQXNzb2NpYXRpb24pIHsKLSAgICAgIGlmIChpbnRlcm5hbC5pc1ZhbGlkSW50ZXJmYWNlSWQo
dGhpcy5pbnRlcmZhY2VJZCkpIHsKLSAgICAgICAgY2FjaGVkR3JvdXBDb250cm9sbGVyID0gdGhp
cy5hc3NvY2lhdGVkR3JvdXBDb250cm9sbGVyOwotICAgICAgICB0aGlzLmFzc29jaWF0ZWRHcm91
cENvbnRyb2xsZXIgPSBudWxsOwotICAgICAgICBjYWNoZWRJZCA9IHRoaXMuaW50ZXJmYWNlSWQ7
Ci0gICAgICAgIHRoaXMuaW50ZXJmYWNlSWQgPSBpbnRlcm5hbC5rSW52YWxpZEludGVyZmFjZUlk
OwotICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICB0aGlzLnBlbmRpbmdBc3NvY2lhdGlvbiA9
IGZhbHNlOwotICAgICAgY2FjaGVkUGVlclN0YXRlID0gdGhpcy5wZWVyU3RhdGVfOwotICAgICAg
dGhpcy5wZWVyU3RhdGVfID0gbnVsbDsKLSAgICB9Ci0KLSAgICBpZiAoY2FjaGVkR3JvdXBDb250
cm9sbGVyKSB7Ci0gICAgICBjYWNoZWRHcm91cENvbnRyb2xsZXIuY2xvc2VFbmRwb2ludEhhbmRs
ZShjYWNoZWRJZCwKLSAgICAgICAgICBkaXNjb25uZWN0UmVhc29uKTsKLSAgICB9IGVsc2UgaWYg
KGNhY2hlZFBlZXJTdGF0ZSkgewotICAgICAgY2FjaGVkUGVlclN0YXRlLm9uUGVlckNsb3NlZEJl
Zm9yZUFzc29jaWF0aW9uKGRpc2Nvbm5lY3RSZWFzb24pOwotICAgIH0KLSAgfTsKLQotICBTdGF0
ZS5wcm90b3R5cGUucnVuQXNzb2NpYXRpb25FdmVudEhhbmRsZXIgPSBmdW5jdGlvbihhc3NvY2lh
dGlvbkV2ZW50KSB7Ci0gICAgaWYgKHRoaXMuYXNzb2NpYXRpb25FdmVudEhhbmRsZXJfKSB7Ci0g
ICAgICB2YXIgaGFuZGxlciA9IHRoaXMuYXNzb2NpYXRpb25FdmVudEhhbmRsZXJfOwotICAgICAg
dGhpcy5hc3NvY2lhdGlvbkV2ZW50SGFuZGxlcl8gPSBudWxsOwotICAgICAgaGFuZGxlcihhc3Nv
Y2lhdGlvbkV2ZW50KTsKLSAgICB9Ci0gIH07Ci0KLSAgU3RhdGUucHJvdG90eXBlLnNldEFzc29j
aWF0aW9uRXZlbnRIYW5kbGVyID0gZnVuY3Rpb24oaGFuZGxlcikgewotICAgIGlmICghdGhpcy5w
ZW5kaW5nQXNzb2NpYXRpb24gJiYKLSAgICAgICAgIWludGVybmFsLmlzVmFsaWRJbnRlcmZhY2VJ
ZCh0aGlzLmludGVyZmFjZUlkKSkgewotICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmICgh
aGFuZGxlcikgewotICAgICAgdGhpcy5hc3NvY2lhdGlvbkV2ZW50SGFuZGxlcl8gPSBudWxsOwot
ICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIHRoaXMuYXNzb2NpYXRpb25FdmVudEhhbmRsZXJf
ID0gaGFuZGxlcjsKLSAgICBpZiAoIXRoaXMucGVuZGluZ0Fzc29jaWF0aW9uKSB7Ci0gICAgICBz
ZXRUaW1lb3V0KHRoaXMucnVuQXNzb2NpYXRpb25FdmVudEhhbmRsZXIuYmluZCh0aGlzLAotICAg
ICAgICAgIEFzc29jaWF0aW9uRXZlbnQuQVNTT0NJQVRFRCksIDApOwotICAgIH0gZWxzZSBpZiAo
IXRoaXMucGVlclN0YXRlXykgewotICAgICAgc2V0VGltZW91dCh0aGlzLnJ1bkFzc29jaWF0aW9u
RXZlbnRIYW5kbGVyLmJpbmQodGhpcywKLSAgICAgICAgICBBc3NvY2lhdGlvbkV2ZW50LlBFRVJf
Q0xPU0VEX0JFRk9SRV9BU1NPQ0lBVElPTiksIDApOwotICAgIH0KLSAgfTsKLQotICBTdGF0ZS5w
cm90b3R5cGUubm90aWZ5QXNzb2NpYXRpb24gPSBmdW5jdGlvbihpbnRlcmZhY2VJZCwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGVlckdyb3VwQ29udHJv
bGxlcikgewotICAgIHZhciBjYWNoZWRQZWVyU3RhdGUgPSB0aGlzLnBlZXJTdGF0ZV87Ci0gICAg
dGhpcy5wZWVyU3RhdGVfID0gbnVsbDsKLQotICAgIHRoaXMucGVuZGluZ0Fzc29jaWF0aW9uID0g
ZmFsc2U7Ci0KLSAgICBpZiAoY2FjaGVkUGVlclN0YXRlKSB7Ci0gICAgICBjYWNoZWRQZWVyU3Rh
dGUub25Bc3NvY2lhdGVkKGludGVyZmFjZUlkLCBwZWVyR3JvdXBDb250cm9sbGVyKTsKLSAgICAg
IHJldHVybiB0cnVlOwotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci0gIH07Ci0KLSAgU3RhdGUu
cHJvdG90eXBlLm9uQXNzb2NpYXRlZCA9IGZ1bmN0aW9uKGludGVyZmFjZUlkLAotICAgICAgYXNz
b2NpYXRlZEdyb3VwQ29udHJvbGxlcikgewotICAgIGlmICghdGhpcy5wZW5kaW5nQXNzb2NpYXRp
b24pIHsKLSAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICB0aGlzLnBlbmRpbmdBc3NvY2lhdGlv
biA9IGZhbHNlOwotICAgIHRoaXMucGVlclN0YXRlXyA9IG51bGw7Ci0gICAgdGhpcy5pbnRlcmZh
Y2VJZCA9IGludGVyZmFjZUlkOwotICAgIHRoaXMuYXNzb2NpYXRlZEdyb3VwQ29udHJvbGxlciA9
IGFzc29jaWF0ZWRHcm91cENvbnRyb2xsZXI7Ci0gICAgdGhpcy5ydW5Bc3NvY2lhdGlvbkV2ZW50
SGFuZGxlcihBc3NvY2lhdGlvbkV2ZW50LkFTU09DSUFURUQpOwotICB9OwotCi0gIFN0YXRlLnBy
b3RvdHlwZS5vblBlZXJDbG9zZWRCZWZvcmVBc3NvY2lhdGlvbiA9IGZ1bmN0aW9uKGRpc2Nvbm5l
Y3RSZWFzb24pIHsKLSAgICBpZiAoIXRoaXMucGVuZGluZ0Fzc29jaWF0aW9uKSB7Ci0gICAgICBy
ZXR1cm47Ci0gICAgfQotCi0gICAgdGhpcy5wZWVyU3RhdGVfID0gbnVsbDsKLSAgICB0aGlzLmRp
c2Nvbm5lY3RSZWFzb24gPSBkaXNjb25uZWN0UmVhc29uOwotCi0gICAgdGhpcy5ydW5Bc3NvY2lh
dGlvbkV2ZW50SGFuZGxlcigKLSAgICAgICAgQXNzb2NpYXRpb25FdmVudC5QRUVSX0NMT1NFRF9C
RUZPUkVfQVNTT0NJQVRJT04pOwotICB9OwotCi0gIGZ1bmN0aW9uIGNyZWF0ZVBhaXJQZW5kaW5n
QXNzb2NpYXRpb24oKSB7Ci0gICAgdmFyIGhhbmRsZTAgPSBuZXcgSW50ZXJmYWNlRW5kcG9pbnRI
YW5kbGUoKTsKLSAgICB2YXIgaGFuZGxlMSA9IG5ldyBJbnRlcmZhY2VFbmRwb2ludEhhbmRsZSgp
OwotICAgIGhhbmRsZTAuc3RhdGVfLmluaXRQZW5kaW5nU3RhdGUoaGFuZGxlMS5zdGF0ZV8pOwot
ICAgIGhhbmRsZTEuc3RhdGVfLmluaXRQZW5kaW5nU3RhdGUoaGFuZGxlMC5zdGF0ZV8pOwotICAg
IHJldHVybiB7aGFuZGxlMDogaGFuZGxlMCwgaGFuZGxlMTogaGFuZGxlMX07Ci0gIH0KLQotICBm
dW5jdGlvbiBJbnRlcmZhY2VFbmRwb2ludEhhbmRsZShpbnRlcmZhY2VJZCwgYXNzb2NpYXRlZEdy
b3VwQ29udHJvbGxlcikgewotICAgIHRoaXMuc3RhdGVfID0gbmV3IFN0YXRlKGludGVyZmFjZUlk
LCBhc3NvY2lhdGVkR3JvdXBDb250cm9sbGVyKTsKLSAgfQotCi0gIEludGVyZmFjZUVuZHBvaW50
SGFuZGxlLnByb3RvdHlwZS5pc1ZhbGlkID0gZnVuY3Rpb24oKSB7Ci0gICAgcmV0dXJuIHRoaXMu
c3RhdGVfLmlzVmFsaWQoKTsKLSAgfTsKLQotICBJbnRlcmZhY2VFbmRwb2ludEhhbmRsZS5wcm90
b3R5cGUucGVuZGluZ0Fzc29jaWF0aW9uID0gZnVuY3Rpb24oKSB7Ci0gICAgcmV0dXJuIHRoaXMu
c3RhdGVfLnBlbmRpbmdBc3NvY2lhdGlvbjsKLSAgfTsKLQotICBJbnRlcmZhY2VFbmRwb2ludEhh
bmRsZS5wcm90b3R5cGUuaWQgPSBmdW5jdGlvbigpIHsKLSAgICByZXR1cm4gdGhpcy5zdGF0ZV8u
aW50ZXJmYWNlSWQ7Ci0gIH07Ci0KLSAgSW50ZXJmYWNlRW5kcG9pbnRIYW5kbGUucHJvdG90eXBl
Lmdyb3VwQ29udHJvbGxlciA9IGZ1bmN0aW9uKCkgewotICAgIHJldHVybiB0aGlzLnN0YXRlXy5h
c3NvY2lhdGVkR3JvdXBDb250cm9sbGVyOwotICB9OwotCi0gIEludGVyZmFjZUVuZHBvaW50SGFu
ZGxlLnByb3RvdHlwZS5kaXNjb25uZWN0UmVhc29uID0gZnVuY3Rpb24oKSB7Ci0gICAgcmV0dXJu
IHRoaXMuc3RhdGVfLmRpc2Nvbm5lY3RSZWFzb247Ci0gIH07Ci0KLSAgSW50ZXJmYWNlRW5kcG9p
bnRIYW5kbGUucHJvdG90eXBlLnNldEFzc29jaWF0aW9uRXZlbnRIYW5kbGVyID0gZnVuY3Rpb24o
Ci0gICAgICBoYW5kbGVyKSB7Ci0gICAgdGhpcy5zdGF0ZV8uc2V0QXNzb2NpYXRpb25FdmVudEhh
bmRsZXIoaGFuZGxlcik7Ci0gIH07Ci0KLSAgSW50ZXJmYWNlRW5kcG9pbnRIYW5kbGUucHJvdG90
eXBlLm5vdGlmeUFzc29jaWF0aW9uID0gZnVuY3Rpb24oaW50ZXJmYWNlSWQsCi0gICAgICBwZWVy
R3JvdXBDb250cm9sbGVyKSB7Ci0gICAgcmV0dXJuIHRoaXMuc3RhdGVfLm5vdGlmeUFzc29jaWF0
aW9uKGludGVyZmFjZUlkLCBwZWVyR3JvdXBDb250cm9sbGVyKTsKLSAgfTsKLQotICBJbnRlcmZh
Y2VFbmRwb2ludEhhbmRsZS5wcm90b3R5cGUucmVzZXQgPSBmdW5jdGlvbihyZWFzb24pIHsKLSAg
ICB0aGlzLnN0YXRlXy5jbG9zZShyZWFzb24pOwotICAgIHRoaXMuc3RhdGVfID0gbmV3IFN0YXRl
KCk7Ci0gIH07Ci0KLSAgaW50ZXJuYWwuQXNzb2NpYXRpb25FdmVudCA9IEFzc29jaWF0aW9uRXZl
bnQ7Ci0gIGludGVybmFsLkludGVyZmFjZUVuZHBvaW50SGFuZGxlID0gSW50ZXJmYWNlRW5kcG9p
bnRIYW5kbGU7Ci0gIGludGVybmFsLmNyZWF0ZVBhaXJQZW5kaW5nQXNzb2NpYXRpb24gPSBjcmVh
dGVQYWlyUGVuZGluZ0Fzc29jaWF0aW9uOwotfSkoKTsKLS8vIENvcHlyaWdodCAyMDE3IFRoZSBD
aHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291
cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQot
Ly8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLQotKGZ1bmN0aW9uKCkgewotICB2YXIgaW50
ZXJuYWwgPSBtb2pvLmludGVybmFsOwotCi0gIGZ1bmN0aW9uIHZhbGlkYXRlQ29udHJvbFJlcXVl
c3RXaXRob3V0UmVzcG9uc2UobWVzc2FnZSkgewotICAgIHZhciBtZXNzYWdlVmFsaWRhdG9yID0g
bmV3IGludGVybmFsLlZhbGlkYXRvcihtZXNzYWdlKTsKLSAgICB2YXIgZXJyb3IgPSBtZXNzYWdl
VmFsaWRhdG9yLnZhbGlkYXRlTWVzc2FnZUlzUmVxdWVzdFdpdGhvdXRSZXNwb25zZSgpOwotICAg
IGlmIChlcnJvciAhPSBpbnRlcm5hbC52YWxpZGF0aW9uRXJyb3IuTk9ORSkgewotICAgICAgdGhy
b3cgZXJyb3I7Ci0gICAgfQotCi0gICAgaWYgKG1lc3NhZ2UuZ2V0TmFtZSgpICE9IG1vam8ucGlw
ZUNvbnRyb2wua1J1bk9yQ2xvc2VQaXBlTWVzc2FnZUlkKSB7Ci0gICAgICB0aHJvdyBuZXcgRXJy
b3IoIkNvbnRyb2wgbWVzc2FnZSBuYW1lIGlzIG5vdCBrUnVuT3JDbG9zZVBpcGVNZXNzYWdlSWQi
KTsKLSAgICB9Ci0KLSAgICAvLyBWYWxpZGF0ZSBwYXlsb2FkLgotICAgIGVycm9yID0gbW9qby5w
aXBlQ29udHJvbC5SdW5PckNsb3NlUGlwZU1lc3NhZ2VQYXJhbXMudmFsaWRhdGUoCi0gICAgICAg
IG1lc3NhZ2VWYWxpZGF0b3IsIG1lc3NhZ2UuZ2V0SGVhZGVyTnVtQnl0ZXMoKSk7Ci0gICAgaWYg
KGVycm9yICE9IGludGVybmFsLnZhbGlkYXRpb25FcnJvci5OT05FKSB7Ci0gICAgICB0aHJvdyBl
cnJvcjsKLSAgICB9Ci0gIH0KLQotICBmdW5jdGlvbiBydW5PckNsb3NlUGlwZShtZXNzYWdlLCBk
ZWxlZ2F0ZSkgewotICAgIHZhciByZWFkZXIgPSBuZXcgaW50ZXJuYWwuTWVzc2FnZVJlYWRlciht
ZXNzYWdlKTsKLSAgICB2YXIgcnVuT3JDbG9zZVBpcGVNZXNzYWdlUGFyYW1zID0gcmVhZGVyLmRl
Y29kZVN0cnVjdCgKLSAgICAgICAgbW9qby5waXBlQ29udHJvbC5SdW5PckNsb3NlUGlwZU1lc3Nh
Z2VQYXJhbXMpOwotICAgIHZhciBldmVudCA9IHJ1bk9yQ2xvc2VQaXBlTWVzc2FnZVBhcmFtcy5p
bnB1dAotICAgICAgICAucGVlckFzc29jaWF0ZWRFbmRwb2ludENsb3NlZEV2ZW50OwotICAgIHJl
dHVybiBkZWxlZ2F0ZS5vblBlZXJBc3NvY2lhdGVkRW5kcG9pbnRDbG9zZWQoZXZlbnQuaWQsCi0g
ICAgICAgIGV2ZW50LmRpc2Nvbm5lY3RSZWFzb24pOwotICB9Ci0KLSAgZnVuY3Rpb24gaXNQaXBl
Q29udHJvbE1lc3NhZ2UobWVzc2FnZSkgewotICAgIHJldHVybiAhaW50ZXJuYWwuaXNWYWxpZElu
dGVyZmFjZUlkKG1lc3NhZ2UuZ2V0SW50ZXJmYWNlSWQoKSk7Ci0gIH0KLQotICBmdW5jdGlvbiBQ
aXBlQ29udHJvbE1lc3NhZ2VIYW5kbGVyKGRlbGVnYXRlKSB7Ci0gICAgdGhpcy5kZWxlZ2F0ZV8g
PSBkZWxlZ2F0ZTsKLSAgfQotCi0gIFBpcGVDb250cm9sTWVzc2FnZUhhbmRsZXIucHJvdG90eXBl
LmFjY2VwdCA9IGZ1bmN0aW9uKG1lc3NhZ2UpIHsKLSAgICB2YWxpZGF0ZUNvbnRyb2xSZXF1ZXN0
V2l0aG91dFJlc3BvbnNlKG1lc3NhZ2UpOwotICAgIHJldHVybiBydW5PckNsb3NlUGlwZShtZXNz
YWdlLCB0aGlzLmRlbGVnYXRlXyk7Ci0gIH07Ci0KLSAgaW50ZXJuYWwuUGlwZUNvbnRyb2xNZXNz
YWdlSGFuZGxlciA9IFBpcGVDb250cm9sTWVzc2FnZUhhbmRsZXI7Ci0gIGludGVybmFsLmlzUGlw
ZUNvbnRyb2xNZXNzYWdlID0gaXNQaXBlQ29udHJvbE1lc3NhZ2U7Ci19KSgpOwotLy8gQ29weXJp
Z2h0IDIwMTcgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBV
c2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNl
IHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotCi0oZnVuY3Rpb24o
KSB7Ci0gIHZhciBpbnRlcm5hbCA9IG1vam8uaW50ZXJuYWw7Ci0KLSAgZnVuY3Rpb24gY29uc3Ry
dWN0UnVuT3JDbG9zZVBpcGVNZXNzYWdlKHJ1bk9yQ2xvc2VQaXBlSW5wdXQpIHsKLSAgICB2YXIg
cnVuT3JDbG9zZVBpcGVNZXNzYWdlUGFyYW1zID0gbmV3Ci0gICAgICAgIG1vam8ucGlwZUNvbnRy
b2wuUnVuT3JDbG9zZVBpcGVNZXNzYWdlUGFyYW1zKCk7Ci0gICAgcnVuT3JDbG9zZVBpcGVNZXNz
YWdlUGFyYW1zLmlucHV0ID0gcnVuT3JDbG9zZVBpcGVJbnB1dDsKLQotICAgIHZhciBtZXNzYWdl
TmFtZSA9IG1vam8ucGlwZUNvbnRyb2wua1J1bk9yQ2xvc2VQaXBlTWVzc2FnZUlkOwotICAgIHZh
ciBwYXlsb2FkU2l6ZSA9Ci0gICAgICAgIG1vam8ucGlwZUNvbnRyb2wuUnVuT3JDbG9zZVBpcGVN
ZXNzYWdlUGFyYW1zLmVuY29kZWRTaXplOwotCi0gICAgdmFyIGJ1aWxkZXIgPSBuZXcgaW50ZXJu
YWwuTWVzc2FnZVYwQnVpbGRlcihtZXNzYWdlTmFtZSwgcGF5bG9hZFNpemUpOwotICAgIGJ1aWxk
ZXIuZW5jb2RlU3RydWN0KG1vam8ucGlwZUNvbnRyb2wuUnVuT3JDbG9zZVBpcGVNZXNzYWdlUGFy
YW1zLAotICAgICAgICAgICAgICAgICAgICAgICAgIHJ1bk9yQ2xvc2VQaXBlTWVzc2FnZVBhcmFt
cyk7Ci0gICAgdmFyIG1lc3NhZ2UgPSBidWlsZGVyLmZpbmlzaCgpOwotICAgIG1lc3NhZ2Uuc2V0
SW50ZXJmYWNlSWQoaW50ZXJuYWwua0ludmFsaWRJbnRlcmZhY2VJZCk7Ci0gICAgcmV0dXJuIG1l
c3NhZ2U7Ci0gIH0KLQotICBmdW5jdGlvbiBQaXBlQ29udHJvbE1lc3NhZ2VQcm94eShyZWNlaXZl
cikgewotICAgIHRoaXMucmVjZWl2ZXJfID0gcmVjZWl2ZXI7Ci0gIH0KLQotICBQaXBlQ29udHJv
bE1lc3NhZ2VQcm94eS5wcm90b3R5cGUubm90aWZ5UGVlckVuZHBvaW50Q2xvc2VkID0gZnVuY3Rp
b24oCi0gICAgICBpbnRlcmZhY2VJZCwgcmVhc29uKSB7Ci0gICAgdmFyIG1lc3NhZ2UgPSB0aGlz
LmNvbnN0cnVjdFBlZXJFbmRwb2ludENsb3NlZE1lc3NhZ2UoaW50ZXJmYWNlSWQsIHJlYXNvbik7
Ci0gICAgdGhpcy5yZWNlaXZlcl8uYWNjZXB0KG1lc3NhZ2UpOwotICB9OwotCi0gIFBpcGVDb250
cm9sTWVzc2FnZVByb3h5LnByb3RvdHlwZS5jb25zdHJ1Y3RQZWVyRW5kcG9pbnRDbG9zZWRNZXNz
YWdlID0KLSAgICAgIGZ1bmN0aW9uKGludGVyZmFjZUlkLCByZWFzb24pIHsKLSAgICB2YXIgZXZl
bnQgPSBuZXcgbW9qby5waXBlQ29udHJvbC5QZWVyQXNzb2NpYXRlZEVuZHBvaW50Q2xvc2VkRXZl
bnQoKTsKLSAgICBldmVudC5pZCA9IGludGVyZmFjZUlkOwotICAgIGlmIChyZWFzb24pIHsKLSAg
ICAgIGV2ZW50LmRpc2Nvbm5lY3RSZWFzb24gPSBuZXcgbW9qby5waXBlQ29udHJvbC5EaXNjb25u
ZWN0UmVhc29uKHsKLSAgICAgICAgICBjdXN0b21SZWFzb246IHJlYXNvbi5jdXN0b21SZWFzb24s
Ci0gICAgICAgICAgZGVzY3JpcHRpb246IHJlYXNvbi5kZXNjcmlwdGlvbn0pOwotICAgIH0KLSAg
ICB2YXIgcnVuT3JDbG9zZVBpcGVJbnB1dCA9IG5ldyBtb2pvLnBpcGVDb250cm9sLlJ1bk9yQ2xv
c2VQaXBlSW5wdXQoKTsKLSAgICBydW5PckNsb3NlUGlwZUlucHV0LnBlZXJBc3NvY2lhdGVkRW5k
cG9pbnRDbG9zZWRFdmVudCA9IGV2ZW50OwotICAgIHJldHVybiBjb25zdHJ1Y3RSdW5PckNsb3Nl
UGlwZU1lc3NhZ2UocnVuT3JDbG9zZVBpcGVJbnB1dCk7Ci0gIH07Ci0KLSAgaW50ZXJuYWwuUGlw
ZUNvbnRyb2xNZXNzYWdlUHJveHkgPSBQaXBlQ29udHJvbE1lc3NhZ2VQcm94eTsKLX0pKCk7Ci0v
LyBDb3B5cmlnaHQgMjAxNCBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxl
IGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLShm
dW5jdGlvbigpIHsKLSAgdmFyIGludGVybmFsID0gbW9qby5pbnRlcm5hbDsKLQotICAvKioKLSAg
ICogVGhlIHN0YXRlIG9mIHxlbmRwb2ludHwuIElmIGJvdGggdGhlIGVuZHBvaW50IGFuZCBpdHMg
cGVlciBoYXZlIGJlZW4KLSAgICogY2xvc2VkLCByZW1vdmVzIGl0IGZyb20gfGVuZHBvaW50c198
LgotICAgKiBAZW51bSB7c3RyaW5nfQotICAgKi8KLSAgdmFyIEVuZHBvaW50U3RhdGVVcGRhdGVU
eXBlID0gewotICAgIEVORFBPSU5UX0NMT1NFRDogJ2VuZHBvaW50X2Nsb3NlZCcsCi0gICAgUEVF
Ul9FTkRQT0lOVF9DTE9TRUQ6ICdwZWVyX2VuZHBvaW50X2Nsb3NlZCcKLSAgfTsKLQotICBmdW5j
dGlvbiBjaGVjayhjb25kaXRpb24sIG91dHB1dCkgewotICAgIGlmICghY29uZGl0aW9uKSB7Ci0g
ICAgICAvLyB0ZXN0aGFybmVzcy5qcyBkb2VzIG5vdCByZXRocm93IGVycm9ycyBzbyB0aGUgZXJy
b3Igc3RhY2sgbmVlZHMgdG8gYmUKLSAgICAgIC8vIGluY2x1ZGVkIGFzIGEgc3RyaW5nIGluIHRo
ZSBlcnJvciB3ZSB0aHJvdyBmb3IgZGVidWdnaW5nIGxheW91dCB0ZXN0cy4KLSAgICAgIHRocm93
IG5ldyBFcnJvcigobmV3IEVycm9yKCkpLnN0YWNrKTsKLSAgICB9Ci0gIH0KLQotICBmdW5jdGlv
biBJbnRlcmZhY2VFbmRwb2ludChyb3V0ZXIsIGludGVyZmFjZUlkKSB7Ci0gICAgdGhpcy5yb3V0
ZXJfID0gcm91dGVyOwotICAgIHRoaXMuaWQgPSBpbnRlcmZhY2VJZDsKLSAgICB0aGlzLmNsb3Nl
ZCA9IGZhbHNlOwotICAgIHRoaXMucGVlckNsb3NlZCA9IGZhbHNlOwotICAgIHRoaXMuaGFuZGxl
Q3JlYXRlZCA9IGZhbHNlOwotICAgIHRoaXMuZGlzY29ubmVjdFJlYXNvbiA9IG51bGw7Ci0gICAg
dGhpcy5jbGllbnQgPSBudWxsOwotICB9Ci0KLSAgSW50ZXJmYWNlRW5kcG9pbnQucHJvdG90eXBl
LnNlbmRNZXNzYWdlID0gZnVuY3Rpb24obWVzc2FnZSkgewotICAgIG1lc3NhZ2Uuc2V0SW50ZXJm
YWNlSWQodGhpcy5pZCk7Ci0gICAgcmV0dXJuIHRoaXMucm91dGVyXy5jb25uZWN0b3JfLmFjY2Vw
dChtZXNzYWdlKTsKLSAgfTsKLQotICBmdW5jdGlvbiBSb3V0ZXIoaGFuZGxlLCBzZXRJbnRlcmZh
Y2VJZE5hbWVzcGFjZUJpdCkgewotICAgIGlmICghKGhhbmRsZSBpbnN0YW5jZW9mIE1vam9IYW5k
bGUpKSB7Ci0gICAgICB0aHJvdyBuZXcgRXJyb3IoIlJvdXRlciBjb25zdHJ1Y3RvcjogTm90IGEg
aGFuZGxlIik7Ci0gICAgfQotICAgIGlmIChzZXRJbnRlcmZhY2VJZE5hbWVzcGFjZUJpdCA9PT0g
dW5kZWZpbmVkKSB7Ci0gICAgICBzZXRJbnRlcmZhY2VJZE5hbWVzcGFjZUJpdCA9IGZhbHNlOwot
ICAgIH0KLQotICAgIHRoaXMuY29ubmVjdG9yXyA9IG5ldyBpbnRlcm5hbC5Db25uZWN0b3IoaGFu
ZGxlKTsKLQotICAgIHRoaXMuY29ubmVjdG9yXy5zZXRJbmNvbWluZ1JlY2VpdmVyKHsKLSAgICAg
ICAgYWNjZXB0OiB0aGlzLmFjY2VwdC5iaW5kKHRoaXMpLAotICAgIH0pOwotICAgIHRoaXMuY29u
bmVjdG9yXy5zZXRFcnJvckhhbmRsZXIoewotICAgICAgICBvbkVycm9yOiB0aGlzLm9uUGlwZUNv
bm5lY3Rpb25FcnJvci5iaW5kKHRoaXMpLAotICAgIH0pOwotCi0gICAgdGhpcy5zZXRJbnRlcmZh
Y2VJZE5hbWVzcGFjZUJpdF8gPSBzZXRJbnRlcmZhY2VJZE5hbWVzcGFjZUJpdDsKLSAgICAvLyB8
Y2FjaGVkTWVzc2FnZURhdGF8IGNhY2hlcyBpbmZvbWF0aW9uIGFib3V0IGEgbWVzc2FnZSwgc28g
aXQgY2FuIGJlCi0gICAgLy8gcHJvY2Vzc2VkIGxhdGVyIGlmIGEgY2xpZW50IGlzIG5vdCB5ZXQg
YXR0YWNoZWQgdG8gdGhlIHRhcmdldCBlbmRwb2ludC4KLSAgICB0aGlzLmNhY2hlZE1lc3NhZ2VE
YXRhID0gbnVsbDsKLSAgICB0aGlzLmNvbnRyb2xNZXNzYWdlSGFuZGxlcl8gPSBuZXcgaW50ZXJu
YWwuUGlwZUNvbnRyb2xNZXNzYWdlSGFuZGxlcih0aGlzKTsKLSAgICB0aGlzLmNvbnRyb2xNZXNz
YWdlUHJveHlfID0KLSAgICAgICAgbmV3IGludGVybmFsLlBpcGVDb250cm9sTWVzc2FnZVByb3h5
KHRoaXMuY29ubmVjdG9yXyk7Ci0gICAgdGhpcy5uZXh0SW50ZXJmYWNlSWRWYWx1ZV8gPSAxOwot
ICAgIHRoaXMuZW5jb3VudGVyZWRFcnJvcl8gPSBmYWxzZTsKLSAgICB0aGlzLmVuZHBvaW50c18g
PSBuZXcgTWFwKCk7Ci0gIH0KLQotICBSb3V0ZXIucHJvdG90eXBlLmFzc29jaWF0ZUludGVyZmFj
ZSA9IGZ1bmN0aW9uKGhhbmRsZVRvU2VuZCkgewotICAgIGlmICghaGFuZGxlVG9TZW5kLnBlbmRp
bmdBc3NvY2lhdGlvbigpKSB7Ci0gICAgICByZXR1cm4gaW50ZXJuYWwua0ludmFsaWRJbnRlcmZh
Y2VJZDsKLSAgICB9Ci0KLSAgICB2YXIgaWQgPSAwOwotICAgIGRvIHsKLSAgICAgIGlmICh0aGlz
Lm5leHRJbnRlcmZhY2VJZFZhbHVlXyA+PSBpbnRlcm5hbC5rSW50ZXJmYWNlSWROYW1lc3BhY2VN
YXNrKSB7Ci0gICAgICAgIHRoaXMubmV4dEludGVyZmFjZUlkVmFsdWVfID0gMTsKLSAgICAgIH0K
LSAgICAgIGlkID0gdGhpcy5uZXh0SW50ZXJmYWNlSWRWYWx1ZV8rKzsKLSAgICAgIGlmICh0aGlz
LnNldEludGVyZmFjZUlkTmFtZXNwYWNlQml0XykgewotICAgICAgICBpZCArPSBpbnRlcm5hbC5r
SW50ZXJmYWNlSWROYW1lc3BhY2VNYXNrOwotICAgICAgfQotICAgIH0gd2hpbGUgKHRoaXMuZW5k
cG9pbnRzXy5oYXMoaWQpKTsKLQotICAgIHZhciBlbmRwb2ludCA9IG5ldyBJbnRlcmZhY2VFbmRw
b2ludCh0aGlzLCBpZCk7Ci0gICAgdGhpcy5lbmRwb2ludHNfLnNldChpZCwgZW5kcG9pbnQpOwot
ICAgIGlmICh0aGlzLmVuY291bnRlcmVkRXJyb3JfKSB7Ci0gICAgICB0aGlzLnVwZGF0ZUVuZHBv
aW50U3RhdGVNYXlSZW1vdmUoZW5kcG9pbnQsCi0gICAgICAgICAgRW5kcG9pbnRTdGF0ZVVwZGF0
ZVR5cGUuUEVFUl9FTkRQT0lOVF9DTE9TRUQpOwotICAgIH0KLSAgICBlbmRwb2ludC5oYW5kbGVD
cmVhdGVkID0gdHJ1ZTsKLQotICAgIGlmICghaGFuZGxlVG9TZW5kLm5vdGlmeUFzc29jaWF0aW9u
KGlkLCB0aGlzKSkgewotICAgICAgLy8gVGhlIHBlZXIgaGFuZGxlIG9mIHxoYW5kbGVUb1NlbmR8
LCB3aGljaCBpcyBzdXBwb3NlZCB0byBqb2luIHRoaXMKLSAgICAgIC8vIGFzc29jaWF0ZWQgZ3Jv
dXAsIGhhcyBiZWVuIGNsb3NlZC4KLSAgICAgIHRoaXMudXBkYXRlRW5kcG9pbnRTdGF0ZU1heVJl
bW92ZShlbmRwb2ludCwKLSAgICAgICAgICBFbmRwb2ludFN0YXRlVXBkYXRlVHlwZS5FTkRQT0lO
VF9DTE9TRUQpOwotCi0gICAgICBwaXBlQ29udHJvbE1lc3NhZ2Vwcm94eS5ub3RpZnlQZWVyRW5k
cG9pbnRDbG9zZWQoaWQsCi0gICAgICAgICAgaGFuZGxlVG9TZW5kLmRpc2Nvbm5lY3RSZWFzb24o
KSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIGlkOwotICB9OwotCi0gIFJvdXRlci5wcm90b3R5cGUu
YXR0YWNoRW5kcG9pbnRDbGllbnQgPSBmdW5jdGlvbigKLSAgICAgIGludGVyZmFjZUVuZHBvaW50
SGFuZGxlLCBpbnRlcmZhY2VFbmRwb2ludENsaWVudCkgewotICAgIGNoZWNrKGludGVybmFsLmlz
VmFsaWRJbnRlcmZhY2VJZChpbnRlcmZhY2VFbmRwb2ludEhhbmRsZS5pZCgpKSk7Ci0gICAgY2hl
Y2soaW50ZXJmYWNlRW5kcG9pbnRDbGllbnQpOwotCi0gICAgdmFyIGVuZHBvaW50ID0gdGhpcy5l
bmRwb2ludHNfLmdldChpbnRlcmZhY2VFbmRwb2ludEhhbmRsZS5pZCgpKTsKLSAgICBjaGVjayhl
bmRwb2ludCk7Ci0gICAgY2hlY2soIWVuZHBvaW50LmNsaWVudCk7Ci0gICAgY2hlY2soIWVuZHBv
aW50LmNsb3NlZCk7Ci0gICAgZW5kcG9pbnQuY2xpZW50ID0gaW50ZXJmYWNlRW5kcG9pbnRDbGll
bnQ7Ci0KLSAgICBpZiAoZW5kcG9pbnQucGVlckNsb3NlZCkgewotICAgICAgc2V0VGltZW91dChl
bmRwb2ludC5jbGllbnQubm90aWZ5RXJyb3IuYmluZChlbmRwb2ludC5jbGllbnQpLCAwKTsKLSAg
ICB9Ci0KLSAgICBpZiAodGhpcy5jYWNoZWRNZXNzYWdlRGF0YSAmJiBpbnRlcmZhY2VFbmRwb2lu
dEhhbmRsZS5pZCgpID09PQotICAgICAgICB0aGlzLmNhY2hlZE1lc3NhZ2VEYXRhLm1lc3NhZ2Uu
Z2V0SW50ZXJmYWNlSWQoKSkgewotICAgICAgc2V0VGltZW91dCgoZnVuY3Rpb24oKSB7Ci0gICAg
ICAgIGlmICghdGhpcy5jYWNoZWRNZXNzYWdlRGF0YSkgewotICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgfQotCi0gICAgICAgIHZhciB0YXJnZXRFbmRwb2ludCA9IHRoaXMuZW5kcG9pbnRzXy5n
ZXQoCi0gICAgICAgICAgICB0aGlzLmNhY2hlZE1lc3NhZ2VEYXRhLm1lc3NhZ2UuZ2V0SW50ZXJm
YWNlSWQoKSk7Ci0gICAgICAgIC8vIENoZWNrIHRoYXQgdGhlIHRhcmdldCBlbmRwb2ludCdzIGNs
aWVudCBzdGlsbCBleGlzdHMuCi0gICAgICAgIGlmICh0YXJnZXRFbmRwb2ludCAmJiB0YXJnZXRF
bmRwb2ludC5jbGllbnQpIHsKLSAgICAgICAgICB2YXIgbWVzc2FnZSA9IHRoaXMuY2FjaGVkTWVz
c2FnZURhdGEubWVzc2FnZTsKLSAgICAgICAgICB2YXIgbWVzc2FnZVZhbGlkYXRvciA9IHRoaXMu
Y2FjaGVkTWVzc2FnZURhdGEubWVzc2FnZVZhbGlkYXRvcjsKLSAgICAgICAgICB0aGlzLmNhY2hl
ZE1lc3NhZ2VEYXRhID0gbnVsbDsKLSAgICAgICAgICB0aGlzLmNvbm5lY3Rvcl8ucmVzdW1lSW5j
b21pbmdNZXRob2RDYWxsUHJvY2Vzc2luZygpOwotICAgICAgICAgIHZhciBvayA9IGVuZHBvaW50
LmNsaWVudC5oYW5kbGVJbmNvbWluZ01lc3NhZ2UobWVzc2FnZSwKLSAgICAgICAgICAgICAgbWVz
c2FnZVZhbGlkYXRvcik7Ci0KLSAgICAgICAgICAvLyBIYW5kbGUgaW52YWxpZCBjYWNoZWQgaW5j
b21pbmcgbWVzc2FnZS4KLSAgICAgICAgICBpZiAoIWludGVybmFsLmlzVGVzdGluZ01vZGUoKSAm
JiAhb2spIHsKLSAgICAgICAgICAgIHRoaXMuY29ubmVjdG9yXy5oYW5kbGVFcnJvcih0cnVlLCB0
cnVlKTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0pLmJpbmQodGhpcyksIDApOwot
ICAgIH0KLQotICAgIHJldHVybiBlbmRwb2ludDsKLSAgfTsKLQotICBSb3V0ZXIucHJvdG90eXBl
LmRldGFjaEVuZHBvaW50Q2xpZW50ID0gZnVuY3Rpb24oCi0gICAgICBpbnRlcmZhY2VFbmRwb2lu
dEhhbmRsZSkgewotICAgIGNoZWNrKGludGVybmFsLmlzVmFsaWRJbnRlcmZhY2VJZChpbnRlcmZh
Y2VFbmRwb2ludEhhbmRsZS5pZCgpKSk7Ci0gICAgdmFyIGVuZHBvaW50ID0gdGhpcy5lbmRwb2lu
dHNfLmdldChpbnRlcmZhY2VFbmRwb2ludEhhbmRsZS5pZCgpKTsKLSAgICBjaGVjayhlbmRwb2lu
dCk7Ci0gICAgY2hlY2soZW5kcG9pbnQuY2xpZW50KTsKLSAgICBjaGVjayghZW5kcG9pbnQuY2xv
c2VkKTsKLQotICAgIGVuZHBvaW50LmNsaWVudCA9IG51bGw7Ci0gIH07Ci0KLSAgUm91dGVyLnBy
b3RvdHlwZS5jcmVhdGVMb2NhbEVuZHBvaW50SGFuZGxlID0gZnVuY3Rpb24oCi0gICAgICBpbnRl
cmZhY2VJZCkgewotICAgIGlmICghaW50ZXJuYWwuaXNWYWxpZEludGVyZmFjZUlkKGludGVyZmFj
ZUlkKSkgewotICAgICAgcmV0dXJuIG5ldyBpbnRlcm5hbC5JbnRlcmZhY2VFbmRwb2ludEhhbmRs
ZSgpOwotICAgIH0KLQotICAgIC8vIFVubGVzcyBpdCBpcyB0aGUgbWFzdGVyIElELCB8aW50ZXJm
YWNlSWR8IGlzIGZyb20gdGhlIHJlbW90ZSBzaWRlIGFuZAotICAgIC8vIHRoZXJlZm9yZSBpdHMg
bmFtZXNwYWNlIGJpdCBpcyBzdXBwb3NlZCB0byBiZSBkaWZmZXJlbnQgdGhhbiB0aGUgdmFsdWUK
LSAgICAvLyB0aGF0IHRoaXMgcm91dGVyIHdvdWxkIHVzZS4KLSAgICBpZiAoIWludGVybmFsLmlz
TWFzdGVySW50ZXJmYWNlSWQoaW50ZXJmYWNlSWQpICYmCi0gICAgICAgIHRoaXMuc2V0SW50ZXJm
YWNlSWROYW1lc3BhY2VCaXRfID09PQotICAgICAgICAgICAgaW50ZXJuYWwuaGFzSW50ZXJmYWNl
SWROYW1lc3BhY2VCaXRTZXQoaW50ZXJmYWNlSWQpKSB7Ci0gICAgICByZXR1cm4gbmV3IGludGVy
bmFsLkludGVyZmFjZUVuZHBvaW50SGFuZGxlKCk7Ci0gICAgfQotCi0gICAgdmFyIGVuZHBvaW50
ID0gdGhpcy5lbmRwb2ludHNfLmdldChpbnRlcmZhY2VJZCk7Ci0KLSAgICBpZiAoIWVuZHBvaW50
KSB7Ci0gICAgICBlbmRwb2ludCA9IG5ldyBJbnRlcmZhY2VFbmRwb2ludCh0aGlzLCBpbnRlcmZh
Y2VJZCk7Ci0gICAgICB0aGlzLmVuZHBvaW50c18uc2V0KGludGVyZmFjZUlkLCBlbmRwb2ludCk7
Ci0KLSAgICAgIGNoZWNrKCFlbmRwb2ludC5oYW5kbGVDcmVhdGVkKTsKLQotICAgICAgaWYgKHRo
aXMuZW5jb3VudGVyZWRFcnJvcl8pIHsKLSAgICAgICAgdGhpcy51cGRhdGVFbmRwb2ludFN0YXRl
TWF5UmVtb3ZlKGVuZHBvaW50LAotICAgICAgICAgICAgRW5kcG9pbnRTdGF0ZVVwZGF0ZVR5cGUu
UEVFUl9FTkRQT0lOVF9DTE9TRUQpOwotICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICAvLyBJ
ZiB0aGUgZW5kcG9pbnQgYWxyZWFkeSBleGlzdCwgaXQgaXMgYmVjYXVzZSB3ZSBoYXZlIHJlY2Vp
dmVkIGEKLSAgICAgIC8vIG5vdGlmaWNhdGlvbiB0aGF0IHRoZSBwZWVyIGVuZHBvaW50IGhhcyBj
bG9zZWQuCi0gICAgICBjaGVjayghZW5kcG9pbnQuY2xvc2VkKTsKLSAgICAgIGNoZWNrKGVuZHBv
aW50LnBlZXJDbG9zZWQpOwotCi0gICAgICBpZiAoZW5kcG9pbnQuaGFuZGxlQ3JlYXRlZCkgewot
ICAgICAgICByZXR1cm4gbmV3IGludGVybmFsLkludGVyZmFjZUVuZHBvaW50SGFuZGxlKCk7Ci0g
ICAgICB9Ci0gICAgfQotCi0gICAgZW5kcG9pbnQuaGFuZGxlQ3JlYXRlZCA9IHRydWU7Ci0gICAg
cmV0dXJuIG5ldyBpbnRlcm5hbC5JbnRlcmZhY2VFbmRwb2ludEhhbmRsZShpbnRlcmZhY2VJZCwg
dGhpcyk7Ci0gIH07Ci0KLSAgUm91dGVyLnByb3RvdHlwZS5hY2NlcHQgPSBmdW5jdGlvbihtZXNz
YWdlKSB7Ci0gICAgdmFyIG1lc3NhZ2VWYWxpZGF0b3IgPSBuZXcgaW50ZXJuYWwuVmFsaWRhdG9y
KG1lc3NhZ2UpOwotICAgIHZhciBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlTWVzc2Fn
ZUhlYWRlcigpOwotCi0gICAgdmFyIG9rID0gZmFsc2U7Ci0gICAgaWYgKGVyciAhPT0gaW50ZXJu
YWwudmFsaWRhdGlvbkVycm9yLk5PTkUpIHsKLSAgICAgIGludGVybmFsLnJlcG9ydFZhbGlkYXRp
b25FcnJvcihlcnIpOwotICAgIH0gZWxzZSBpZiAobWVzc2FnZS5kZXNlcmlhbGl6ZUFzc29jaWF0
ZWRFbmRwb2ludEhhbmRsZXModGhpcykpIHsKLSAgICAgIGlmIChpbnRlcm5hbC5pc1BpcGVDb250
cm9sTWVzc2FnZShtZXNzYWdlKSkgewotICAgICAgICBvayA9IHRoaXMuY29udHJvbE1lc3NhZ2VI
YW5kbGVyXy5hY2NlcHQobWVzc2FnZSk7Ci0gICAgICB9IGVsc2UgewotICAgICAgICB2YXIgaW50
ZXJmYWNlSWQgPSBtZXNzYWdlLmdldEludGVyZmFjZUlkKCk7Ci0gICAgICAgIHZhciBlbmRwb2lu
dCA9IHRoaXMuZW5kcG9pbnRzXy5nZXQoaW50ZXJmYWNlSWQpOwotICAgICAgICBpZiAoIWVuZHBv
aW50IHx8IGVuZHBvaW50LmNsb3NlZCkgewotICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAg
ICB9Ci0KLSAgICAgICAgaWYgKCFlbmRwb2ludC5jbGllbnQpIHsKLSAgICAgICAgICAvLyBXZSBu
ZWVkIHRvIHdhaXQgdW50aWwgYSBjbGllbnQgaXMgYXR0YWNoZWQgaW4gb3JkZXIgdG8gZGlzcGF0
Y2gKLSAgICAgICAgICAvLyBmdXJ0aGVyIG1lc3NhZ2VzLgotICAgICAgICAgIHRoaXMuY2FjaGVk
TWVzc2FnZURhdGEgPSB7bWVzc2FnZTogbWVzc2FnZSwKLSAgICAgICAgICAgICAgbWVzc2FnZVZh
bGlkYXRvcjogbWVzc2FnZVZhbGlkYXRvcn07Ci0gICAgICAgICAgdGhpcy5jb25uZWN0b3JfLnBh
dXNlSW5jb21pbmdNZXRob2RDYWxsUHJvY2Vzc2luZygpOwotICAgICAgICAgIHJldHVybiB0cnVl
OwotICAgICAgICB9Ci0gICAgICAgIG9rID0gZW5kcG9pbnQuY2xpZW50LmhhbmRsZUluY29taW5n
TWVzc2FnZShtZXNzYWdlLCBtZXNzYWdlVmFsaWRhdG9yKTsKLSAgICAgIH0KLSAgICB9Ci0gICAg
cmV0dXJuIG9rOwotICB9OwotCi0gIFJvdXRlci5wcm90b3R5cGUuY2xvc2UgPSBmdW5jdGlvbigp
IHsKLSAgICB0aGlzLmNvbm5lY3Rvcl8uY2xvc2UoKTsKLSAgICAvLyBDbG9zaW5nIHRoZSBtZXNz
YWdlIHBpcGUgd29uJ3QgdHJpZ2dlciBjb25uZWN0aW9uIGVycm9yIGhhbmRsZXIuCi0gICAgLy8g
RXhwbGljaXRseSBjYWxsIG9uUGlwZUNvbm5lY3Rpb25FcnJvcigpIHNvIHRoYXQgYXNzb2NpYXRl
ZCBlbmRwb2ludHMKLSAgICAvLyB3aWxsIGdldCBub3RpZmllZC4KLSAgICB0aGlzLm9uUGlwZUNv
bm5lY3Rpb25FcnJvcigpOwotICB9OwotCi0gIFJvdXRlci5wcm90b3R5cGUub25QZWVyQXNzb2Np
YXRlZEVuZHBvaW50Q2xvc2VkID0gZnVuY3Rpb24oaW50ZXJmYWNlSWQsCi0gICAgICByZWFzb24p
IHsKLSAgICB2YXIgZW5kcG9pbnQgPSB0aGlzLmVuZHBvaW50c18uZ2V0KGludGVyZmFjZUlkKTsK
LSAgICBpZiAoIWVuZHBvaW50KSB7Ci0gICAgICBlbmRwb2ludCA9IG5ldyBJbnRlcmZhY2VFbmRw
b2ludCh0aGlzLCBpbnRlcmZhY2VJZCk7Ci0gICAgICB0aGlzLmVuZHBvaW50c18uc2V0KGludGVy
ZmFjZUlkLCBlbmRwb2ludCk7Ci0gICAgfQotCi0gICAgaWYgKHJlYXNvbikgewotICAgICAgZW5k
cG9pbnQuZGlzY29ubmVjdFJlYXNvbiA9IHJlYXNvbjsKLSAgICB9Ci0KLSAgICBpZiAoIWVuZHBv
aW50LnBlZXJDbG9zZWQpIHsKLSAgICAgIGlmIChlbmRwb2ludC5jbGllbnQpIHsKLSAgICAgICAg
c2V0VGltZW91dChlbmRwb2ludC5jbGllbnQubm90aWZ5RXJyb3IuYmluZChlbmRwb2ludC5jbGll
bnQsIHJlYXNvbiksCi0gICAgICAgICAgICAgICAgICAgMCk7Ci0gICAgICB9Ci0gICAgICB0aGlz
LnVwZGF0ZUVuZHBvaW50U3RhdGVNYXlSZW1vdmUoZW5kcG9pbnQsCi0gICAgICAgICAgRW5kcG9p
bnRTdGF0ZVVwZGF0ZVR5cGUuUEVFUl9FTkRQT0lOVF9DTE9TRUQpOwotICAgIH0KLSAgICByZXR1
cm4gdHJ1ZTsKLSAgfTsKLQotICBSb3V0ZXIucHJvdG90eXBlLm9uUGlwZUNvbm5lY3Rpb25FcnJv
ciA9IGZ1bmN0aW9uKCkgewotICAgIHRoaXMuZW5jb3VudGVyZWRFcnJvcl8gPSB0cnVlOwotCi0g
ICAgZm9yICh2YXIgZW5kcG9pbnQgb2YgdGhpcy5lbmRwb2ludHNfLnZhbHVlcygpKSB7Ci0gICAg
ICBpZiAoZW5kcG9pbnQuY2xpZW50KSB7Ci0gICAgICAgIHNldFRpbWVvdXQoCi0gICAgICAgICAg
ICBlbmRwb2ludC5jbGllbnQubm90aWZ5RXJyb3IuYmluZCgKLSAgICAgICAgICAgICAgICBlbmRw
b2ludC5jbGllbnQsIGVuZHBvaW50LmRpc2Nvbm5lY3RSZWFzb24pLAotICAgICAgICAgICAgMCk7
Ci0gICAgICB9Ci0gICAgICB0aGlzLnVwZGF0ZUVuZHBvaW50U3RhdGVNYXlSZW1vdmUoZW5kcG9p
bnQsCi0gICAgICAgICAgRW5kcG9pbnRTdGF0ZVVwZGF0ZVR5cGUuUEVFUl9FTkRQT0lOVF9DTE9T
RUQpOwotICAgIH0KLSAgfTsKLQotICBSb3V0ZXIucHJvdG90eXBlLmNsb3NlRW5kcG9pbnRIYW5k
bGUgPSBmdW5jdGlvbihpbnRlcmZhY2VJZCwgcmVhc29uKSB7Ci0gICAgaWYgKCFpbnRlcm5hbC5p
c1ZhbGlkSW50ZXJmYWNlSWQoaW50ZXJmYWNlSWQpKSB7Ci0gICAgICByZXR1cm47Ci0gICAgfQot
ICAgIHZhciBlbmRwb2ludCA9IHRoaXMuZW5kcG9pbnRzXy5nZXQoaW50ZXJmYWNlSWQpOwotICAg
IGNoZWNrKGVuZHBvaW50KTsKLSAgICBjaGVjayghZW5kcG9pbnQuY2xpZW50KTsKLSAgICBjaGVj
ayghZW5kcG9pbnQuY2xvc2VkKTsKLQotICAgIHRoaXMudXBkYXRlRW5kcG9pbnRTdGF0ZU1heVJl
bW92ZShlbmRwb2ludCwKLSAgICAgICAgRW5kcG9pbnRTdGF0ZVVwZGF0ZVR5cGUuRU5EUE9JTlRf
Q0xPU0VEKTsKLQotICAgIGlmICghaW50ZXJuYWwuaXNNYXN0ZXJJbnRlcmZhY2VJZChpbnRlcmZh
Y2VJZCkgfHwgcmVhc29uKSB7Ci0gICAgICB0aGlzLmNvbnRyb2xNZXNzYWdlUHJveHlfLm5vdGlm
eVBlZXJFbmRwb2ludENsb3NlZChpbnRlcmZhY2VJZCwgcmVhc29uKTsKLSAgICB9Ci0KLSAgICBp
ZiAodGhpcy5jYWNoZWRNZXNzYWdlRGF0YSAmJiBpbnRlcmZhY2VJZCA9PT0KLSAgICAgICAgdGhp
cy5jYWNoZWRNZXNzYWdlRGF0YS5tZXNzYWdlLmdldEludGVyZmFjZUlkKCkpIHsKLSAgICAgIHRo
aXMuY2FjaGVkTWVzc2FnZURhdGEgPSBudWxsOwotICAgICAgdGhpcy5jb25uZWN0b3JfLnJlc3Vt
ZUluY29taW5nTWV0aG9kQ2FsbFByb2Nlc3NpbmcoKTsKLSAgICB9Ci0gIH07Ci0KLSAgUm91dGVy
LnByb3RvdHlwZS51cGRhdGVFbmRwb2ludFN0YXRlTWF5UmVtb3ZlID0gZnVuY3Rpb24oZW5kcG9p
bnQsCi0gICAgICBlbmRwb2ludFN0YXRlVXBkYXRlVHlwZSkgewotICAgIGlmIChlbmRwb2ludFN0
YXRlVXBkYXRlVHlwZSA9PT0gRW5kcG9pbnRTdGF0ZVVwZGF0ZVR5cGUuRU5EUE9JTlRfQ0xPU0VE
KSB7Ci0gICAgICBlbmRwb2ludC5jbG9zZWQgPSB0cnVlOwotICAgIH0gZWxzZSB7Ci0gICAgICBl
bmRwb2ludC5wZWVyQ2xvc2VkID0gdHJ1ZTsKLSAgICB9Ci0gICAgaWYgKGVuZHBvaW50LmNsb3Nl
ZCAmJiBlbmRwb2ludC5wZWVyQ2xvc2VkKSB7Ci0gICAgICB0aGlzLmVuZHBvaW50c18uZGVsZXRl
KGVuZHBvaW50LmlkKTsKLSAgICB9Ci0gIH07Ci0KLSAgaW50ZXJuYWwuUm91dGVyID0gUm91dGVy
OwotfSkoKTsKLS8vIENvcHlyaWdodCAyMDE0IFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkg
YSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0Ug
ZmlsZS4KLQotLyoqCi0gKiBEZWZpbmVzIGZ1bmN0aW9ucyBmb3IgdHJhbnNsYXRpbmcgYmV0d2Vl
biBKYXZhU2NyaXB0IHN0cmluZ3MgYW5kIFVURjggc3RyaW5ncwotICogc3RvcmVkIGluIEFycmF5
QnVmZmVycy4gVGhlcmUgaXMgbXVjaCByb29tIGZvciBvcHRpbWl6YXRpb24gaW4gdGhpcyBjb2Rl
IGlmCi0gKiBpdCBwcm92ZXMgbmVjZXNzYXJ5LgotICovCi0oZnVuY3Rpb24oKSB7Ci0gIHZhciBp
bnRlcm5hbCA9IG1vam8uaW50ZXJuYWw7Ci0gIHZhciB0ZXh0RGVjb2RlciA9IG5ldyBUZXh0RGVj
b2RlcigndXRmLTgnKTsKLSAgdmFyIHRleHRFbmNvZGVyID0gbmV3IFRleHRFbmNvZGVyKCd1dGYt
OCcpOwotCi0gIC8qKgotICAgKiBEZWNvZGVzIHRoZSBVVEY4IHN0cmluZyBmcm9tIHRoZSBnaXZl
biBidWZmZXIuCi0gICAqIEBwYXJhbSB7QXJyYXlCdWZmZXJWaWV3fSBidWZmZXIgVGhlIGJ1ZmZl
ciBjb250YWluaW5nIFVURjggc3RyaW5nIGRhdGEuCi0gICAqIEByZXR1cm4ge3N0cmluZ30gVGhl
IGNvcnJlc3BvbmRpbmcgSmF2YVNjcmlwdCBzdHJpbmcuCi0gICAqLwotICBmdW5jdGlvbiBkZWNv
ZGVVdGY4U3RyaW5nKGJ1ZmZlcikgewotICAgIHJldHVybiB0ZXh0RGVjb2Rlci5kZWNvZGUoYnVm
ZmVyKTsKLSAgfQotCi0gIC8qKgotICAgKiBFbmNvZGVzIHRoZSBnaXZlbiBKYXZhU2NyaXB0IHN0
cmluZyBpbnRvIFVURjguCi0gICAqIEBwYXJhbSB7c3RyaW5nfSBzdHIgVGhlIHN0cmluZyB0byBl
bmNvZGUuCi0gICAqIEBwYXJhbSB7QXJyYXlCdWZmZXJWaWV3fSBvdXRwdXRCdWZmZXIgVGhlIGJ1
ZmZlciB0byBjb250YWluIHRoZSByZXN1bHQuCi0gICAqIFNob3VsZCBiZSBwcmUtYWxsb2NhdGVk
IHRvIGhvbGQgZW5vdWdoIHNwYWNlLiBVc2UgfHV0ZjhMZW5ndGh8IHRvIGRldGVybWluZQotICAg
KiBob3cgbXVjaCBzcGFjZSBpcyByZXF1aXJlZC4KLSAgICogQHJldHVybiB7bnVtYmVyfSBUaGUg
bnVtYmVyIG9mIGJ5dGVzIHdyaXR0ZW4gdG8gfG91dHB1dEJ1ZmZlcnwuCi0gICAqLwotICBmdW5j
dGlvbiBlbmNvZGVVdGY4U3RyaW5nKHN0ciwgb3V0cHV0QnVmZmVyKSB7Ci0gICAgY29uc3QgdXRm
OEJ1ZmZlciA9IHRleHRFbmNvZGVyLmVuY29kZShzdHIpOwotICAgIGlmIChvdXRwdXRCdWZmZXIu
bGVuZ3RoIDwgdXRmOEJ1ZmZlci5sZW5ndGgpCi0gICAgICB0aHJvdyBuZXcgRXJyb3IoIkJ1ZmZl
ciB0b28gc21hbGwgZm9yIGVuY29kZVV0ZjhTdHJpbmciKTsKLSAgICBvdXRwdXRCdWZmZXIuc2V0
KHV0ZjhCdWZmZXIpOwotICAgIHJldHVybiB1dGY4QnVmZmVyLmxlbmd0aDsKLSAgfQotCi0gIC8q
KgotICAgKiBSZXR1cm5zIHRoZSBudW1iZXIgb2YgYnl0ZXMgdGhhdCBhIFVURjggZW5jb2Rpbmcg
b2YgdGhlIEphdmFTY3JpcHQgc3RyaW5nCi0gICAqIHxzdHJ8IHdvdWxkIG9jY3VweS4KLSAgICov
Ci0gIGZ1bmN0aW9uIHV0ZjhMZW5ndGgoc3RyKSB7Ci0gICAgcmV0dXJuIHRleHRFbmNvZGVyLmVu
Y29kZShzdHIpLmxlbmd0aDsKLSAgfQotCi0gIGludGVybmFsLmRlY29kZVV0ZjhTdHJpbmcgPSBk
ZWNvZGVVdGY4U3RyaW5nOwotICBpbnRlcm5hbC5lbmNvZGVVdGY4U3RyaW5nID0gZW5jb2RlVXRm
OFN0cmluZzsKLSAgaW50ZXJuYWwudXRmOExlbmd0aCA9IHV0ZjhMZW5ndGg7Ci19KSgpOwotLy8g
Q29weXJpZ2h0IDIwMTQgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBs
aWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotCi0oZnVu
Y3Rpb24oKSB7Ci0gIHZhciBpbnRlcm5hbCA9IG1vam8uaW50ZXJuYWw7Ci0KLSAgdmFyIHZhbGlk
YXRpb25FcnJvciA9IHsKLSAgICBOT05FOiAnVkFMSURBVElPTl9FUlJPUl9OT05FJywKLSAgICBN
SVNBTElHTkVEX09CSkVDVDogJ1ZBTElEQVRJT05fRVJST1JfTUlTQUxJR05FRF9PQkpFQ1QnLAot
ICAgIElMTEVHQUxfTUVNT1JZX1JBTkdFOiAnVkFMSURBVElPTl9FUlJPUl9JTExFR0FMX01FTU9S
WV9SQU5HRScsCi0gICAgVU5FWFBFQ1RFRF9TVFJVQ1RfSEVBREVSOiAnVkFMSURBVElPTl9FUlJP
Ul9VTkVYUEVDVEVEX1NUUlVDVF9IRUFERVInLAotICAgIFVORVhQRUNURURfQVJSQVlfSEVBREVS
OiAnVkFMSURBVElPTl9FUlJPUl9VTkVYUEVDVEVEX0FSUkFZX0hFQURFUicsCi0gICAgSUxMRUdB
TF9IQU5ETEU6ICdWQUxJREFUSU9OX0VSUk9SX0lMTEVHQUxfSEFORExFJywKLSAgICBVTkVYUEVD
VEVEX0lOVkFMSURfSEFORExFOiAnVkFMSURBVElPTl9FUlJPUl9VTkVYUEVDVEVEX0lOVkFMSURf
SEFORExFJywKLSAgICBJTExFR0FMX1BPSU5URVI6ICdWQUxJREFUSU9OX0VSUk9SX0lMTEVHQUxf
UE9JTlRFUicsCi0gICAgVU5FWFBFQ1RFRF9OVUxMX1BPSU5URVI6ICdWQUxJREFUSU9OX0VSUk9S
X1VORVhQRUNURURfTlVMTF9QT0lOVEVSJywKLSAgICBJTExFR0FMX0lOVEVSRkFDRV9JRDogJ1ZB
TElEQVRJT05fRVJST1JfSUxMRUdBTF9JTlRFUkZBQ0VfSUQnLAotICAgIFVORVhQRUNURURfSU5W
QUxJRF9JTlRFUkZBQ0VfSUQ6Ci0gICAgICAgICdWQUxJREFUSU9OX0VSUk9SX1VORVhQRUNURURf
SU5WQUxJRF9JTlRFUkZBQ0VfSUQnLAotICAgIE1FU1NBR0VfSEVBREVSX0lOVkFMSURfRkxBR1M6
Ci0gICAgICAgICdWQUxJREFUSU9OX0VSUk9SX01FU1NBR0VfSEVBREVSX0lOVkFMSURfRkxBR1Mn
LAotICAgIE1FU1NBR0VfSEVBREVSX01JU1NJTkdfUkVRVUVTVF9JRDoKLSAgICAgICAgJ1ZBTElE
QVRJT05fRVJST1JfTUVTU0FHRV9IRUFERVJfTUlTU0lOR19SRVFVRVNUX0lEJywKLSAgICBESUZG
RVJFTlRfU0laRURfQVJSQVlTX0lOX01BUDoKLSAgICAgICAgJ1ZBTElEQVRJT05fRVJST1JfRElG
RkVSRU5UX1NJWkVEX0FSUkFZU19JTl9NQVAnLAotICAgIElOVkFMSURfVU5JT05fU0laRTogJ1ZB
TElEQVRJT05fRVJST1JfSU5WQUxJRF9VTklPTl9TSVpFJywKLSAgICBVTkVYUEVDVEVEX05VTExf
VU5JT046ICdWQUxJREFUSU9OX0VSUk9SX1VORVhQRUNURURfTlVMTF9VTklPTicsCi0gICAgVU5L
Tk9XTl9FTlVNX1ZBTFVFOiAnVkFMSURBVElPTl9FUlJPUl9VTktOT1dOX0VOVU1fVkFMVUUnLAot
ICB9OwotCi0gIHZhciBOVUxMX01PSk9fUE9JTlRFUiA9ICJOVUxMX01PSk9fUE9JTlRFUiI7Ci0g
IHZhciBnVmFsaWRhdGlvbkVycm9yT2JzZXJ2ZXIgPSBudWxsOwotCi0gIGZ1bmN0aW9uIHJlcG9y
dFZhbGlkYXRpb25FcnJvcihlcnJvcikgewotICAgIGlmIChnVmFsaWRhdGlvbkVycm9yT2JzZXJ2
ZXIpIHsKLSAgICAgIGdWYWxpZGF0aW9uRXJyb3JPYnNlcnZlci5sYXN0RXJyb3IgPSBlcnJvcjsK
LSAgICB9IGVsc2UgewotICAgICAgY29uc29sZS53YXJuKCdJbnZhbGlkIG1lc3NhZ2U6ICcgKyBl
cnJvcik7Ci0gICAgfQotICB9Ci0KLSAgdmFyIFZhbGlkYXRpb25FcnJvck9ic2VydmVyRm9yVGVz
dGluZyA9IChmdW5jdGlvbigpIHsKLSAgICBmdW5jdGlvbiBPYnNlcnZlcigpIHsKLSAgICAgIHRo
aXMubGFzdEVycm9yID0gdmFsaWRhdGlvbkVycm9yLk5PTkU7Ci0gICAgfQotCi0gICAgT2JzZXJ2
ZXIucHJvdG90eXBlLnJlc2V0ID0gZnVuY3Rpb24oKSB7Ci0gICAgICB0aGlzLmxhc3RFcnJvciA9
IHZhbGlkYXRpb25FcnJvci5OT05FOwotICAgIH07Ci0KLSAgICByZXR1cm4gewotICAgICAgZ2V0
SW5zdGFuY2U6IGZ1bmN0aW9uKCkgewotICAgICAgICBpZiAoIWdWYWxpZGF0aW9uRXJyb3JPYnNl
cnZlcikgewotICAgICAgICAgIGdWYWxpZGF0aW9uRXJyb3JPYnNlcnZlciA9IG5ldyBPYnNlcnZl
cigpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBnVmFsaWRhdGlvbkVycm9yT2JzZXJ2ZXI7
Ci0gICAgICB9Ci0gICAgfTsKLSAgfSkoKTsKLQotICBmdW5jdGlvbiBpc1Rlc3RpbmdNb2RlKCkg
ewotICAgIHJldHVybiBCb29sZWFuKGdWYWxpZGF0aW9uRXJyb3JPYnNlcnZlcik7Ci0gIH0KLQot
ICBmdW5jdGlvbiBjbGVhclRlc3RpbmdNb2RlKCkgewotICAgIGdWYWxpZGF0aW9uRXJyb3JPYnNl
cnZlciA9IG51bGw7Ci0gIH0KLQotICBmdW5jdGlvbiBpc0VudW1DbGFzcyhjbHMpIHsKLSAgICBy
ZXR1cm4gY2xzIGluc3RhbmNlb2YgaW50ZXJuYWwuRW51bTsKLSAgfQotCi0gIGZ1bmN0aW9uIGlz
U3RyaW5nQ2xhc3MoY2xzKSB7Ci0gICAgcmV0dXJuIGNscyA9PT0gaW50ZXJuYWwuU3RyaW5nIHx8
IGNscyA9PT0gaW50ZXJuYWwuTnVsbGFibGVTdHJpbmc7Ci0gIH0KLQotICBmdW5jdGlvbiBpc0hh
bmRsZUNsYXNzKGNscykgewotICAgIHJldHVybiBjbHMgPT09IGludGVybmFsLkhhbmRsZSB8fCBj
bHMgPT09IGludGVybmFsLk51bGxhYmxlSGFuZGxlOwotICB9Ci0KLSAgZnVuY3Rpb24gaXNJbnRl
cmZhY2VDbGFzcyhjbHMpIHsKLSAgICByZXR1cm4gY2xzIGluc3RhbmNlb2YgaW50ZXJuYWwuSW50
ZXJmYWNlOwotICB9Ci0KLSAgZnVuY3Rpb24gaXNJbnRlcmZhY2VSZXF1ZXN0Q2xhc3MoY2xzKSB7
Ci0gICAgcmV0dXJuIGNscyA9PT0gaW50ZXJuYWwuSW50ZXJmYWNlUmVxdWVzdCB8fAotICAgICAg
ICBjbHMgPT09IGludGVybmFsLk51bGxhYmxlSW50ZXJmYWNlUmVxdWVzdDsKLSAgfQotCi0gIGZ1
bmN0aW9uIGlzQXNzb2NpYXRlZEludGVyZmFjZUNsYXNzKGNscykgewotICAgIHJldHVybiBjbHMg
PT09IGludGVybmFsLkFzc29jaWF0ZWRJbnRlcmZhY2VQdHJJbmZvIHx8Ci0gICAgICAgIGNscyA9
PT0gaW50ZXJuYWwuTnVsbGFibGVBc3NvY2lhdGVkSW50ZXJmYWNlUHRySW5mbzsKLSAgfQotCi0g
IGZ1bmN0aW9uIGlzQXNzb2NpYXRlZEludGVyZmFjZVJlcXVlc3RDbGFzcyhjbHMpIHsKLSAgICBy
ZXR1cm4gY2xzID09PSBpbnRlcm5hbC5Bc3NvY2lhdGVkSW50ZXJmYWNlUmVxdWVzdCB8fAotICAg
ICAgICBjbHMgPT09IGludGVybmFsLk51bGxhYmxlQXNzb2NpYXRlZEludGVyZmFjZVJlcXVlc3Q7
Ci0gIH0KLQotICBmdW5jdGlvbiBpc051bGxhYmxlKHR5cGUpIHsKLSAgICByZXR1cm4gdHlwZSA9
PT0gaW50ZXJuYWwuTnVsbGFibGVTdHJpbmcgfHwKLSAgICAgICAgdHlwZSA9PT0gaW50ZXJuYWwu
TnVsbGFibGVIYW5kbGUgfHwKLSAgICAgICAgdHlwZSA9PT0gaW50ZXJuYWwuTnVsbGFibGVBc3Nv
Y2lhdGVkSW50ZXJmYWNlUHRySW5mbyB8fAotICAgICAgICB0eXBlID09PSBpbnRlcm5hbC5OdWxs
YWJsZUFzc29jaWF0ZWRJbnRlcmZhY2VSZXF1ZXN0IHx8Ci0gICAgICAgIHR5cGUgPT09IGludGVy
bmFsLk51bGxhYmxlSW50ZXJmYWNlIHx8Ci0gICAgICAgIHR5cGUgPT09IGludGVybmFsLk51bGxh
YmxlSW50ZXJmYWNlUmVxdWVzdCB8fAotICAgICAgICB0eXBlIGluc3RhbmNlb2YgaW50ZXJuYWwu
TnVsbGFibGVBcnJheU9mIHx8Ci0gICAgICAgIHR5cGUgaW5zdGFuY2VvZiBpbnRlcm5hbC5OdWxs
YWJsZVBvaW50ZXJUbzsKLSAgfQotCi0gIGZ1bmN0aW9uIFZhbGlkYXRvcihtZXNzYWdlKSB7Ci0g
ICAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZTsKLSAgICB0aGlzLm9mZnNldCA9IDA7Ci0gICAgdGhp
cy5oYW5kbGVJbmRleCA9IDA7Ci0gICAgdGhpcy5hc3NvY2lhdGVkRW5kcG9pbnRIYW5kbGVJbmRl
eCA9IDA7Ci0gICAgdGhpcy5wYXlsb2FkSW50ZXJmYWNlSWRzID0gbnVsbDsKLSAgICB0aGlzLm9m
ZnNldExpbWl0ID0gdGhpcy5tZXNzYWdlLmJ1ZmZlci5ieXRlTGVuZ3RoOwotICB9Ci0KLSAgT2Jq
ZWN0LmRlZmluZVByb3BlcnR5KFZhbGlkYXRvci5wcm90b3R5cGUsICJoYW5kbGVJbmRleExpbWl0
IiwgewotICAgIGdldDogZnVuY3Rpb24oKSB7IHJldHVybiB0aGlzLm1lc3NhZ2UuaGFuZGxlcy5s
ZW5ndGg7IH0KLSAgfSk7Ci0KLSAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFZhbGlkYXRvci5wcm90
b3R5cGUsICJhc3NvY2lhdGVkSGFuZGxlSW5kZXhMaW1pdCIsIHsKLSAgICBnZXQ6IGZ1bmN0aW9u
KCkgewotICAgICAgcmV0dXJuIHRoaXMucGF5bG9hZEludGVyZmFjZUlkcyA/IHRoaXMucGF5bG9h
ZEludGVyZmFjZUlkcy5sZW5ndGggOiAwOwotICAgIH0KLSAgfSk7Ci0KLSAgLy8gVHJ1ZSBpZiB3
ZSBjYW4gc2FmZWx5IGFsbG9jYXRlIGEgYmxvY2sgb2YgYnl0ZXMgZnJvbSBzdGFydCB0bwotICAv
LyB0byBzdGFydCArIG51bUJ5dGVzLgotICBWYWxpZGF0b3IucHJvdG90eXBlLmlzVmFsaWRSYW5n
ZSA9IGZ1bmN0aW9uKHN0YXJ0LCBudW1CeXRlcykgewotICAgIC8vIE9ubHkgcG9zaXRpdmUgSmF2
YVNjcmlwdCBpbnRlZ2VycyB0aGF0IGFyZSBsZXNzIHRoYW4gMl41MwotICAgIC8vIChOdW1iZXIu
TUFYX1NBRkVfSU5URUdFUikgY2FuIGJlIHJlcHJlc2VudGVkIGV4YWN0bHkuCi0gICAgaWYgKHN0
YXJ0IDwgdGhpcy5vZmZzZXQgfHwgbnVtQnl0ZXMgPD0gMCB8fAotICAgICAgICAhTnVtYmVyLmlz
U2FmZUludGVnZXIoc3RhcnQpIHx8Ci0gICAgICAgICFOdW1iZXIuaXNTYWZlSW50ZWdlcihudW1C
eXRlcykpCi0gICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICB2YXIgbmV3T2Zmc2V0ID0gc3RhcnQg
KyBudW1CeXRlczsKLSAgICBpZiAoIU51bWJlci5pc1NhZmVJbnRlZ2VyKG5ld09mZnNldCkgfHwg
bmV3T2Zmc2V0ID4gdGhpcy5vZmZzZXRMaW1pdCkKLSAgICAgIHJldHVybiBmYWxzZTsKLQotICAg
IHJldHVybiB0cnVlOwotICB9OwotCi0gIFZhbGlkYXRvci5wcm90b3R5cGUuY2xhaW1SYW5nZSA9
IGZ1bmN0aW9uKHN0YXJ0LCBudW1CeXRlcykgewotICAgIGlmICh0aGlzLmlzVmFsaWRSYW5nZShz
dGFydCwgbnVtQnl0ZXMpKSB7Ci0gICAgICB0aGlzLm9mZnNldCA9IHN0YXJ0ICsgbnVtQnl0ZXM7
Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9OwotCi0g
IFZhbGlkYXRvci5wcm90b3R5cGUuY2xhaW1IYW5kbGUgPSBmdW5jdGlvbihpbmRleCkgewotICAg
IGlmIChpbmRleCA9PT0gaW50ZXJuYWwua0VuY29kZWRJbnZhbGlkSGFuZGxlVmFsdWUpCi0gICAg
ICByZXR1cm4gdHJ1ZTsKLQotICAgIGlmIChpbmRleCA8IHRoaXMuaGFuZGxlSW5kZXggfHwgaW5k
ZXggPj0gdGhpcy5oYW5kbGVJbmRleExpbWl0KQotICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAg
Ly8gVGhpcyBpcyBzYWZlIGJlY2F1c2UgaGFuZGxlIGluZGljZXMgYXJlIHVpbnQzMi4KLSAgICB0
aGlzLmhhbmRsZUluZGV4ID0gaW5kZXggKyAxOwotICAgIHJldHVybiB0cnVlOwotICB9OwotCi0g
IFZhbGlkYXRvci5wcm90b3R5cGUuY2xhaW1Bc3NvY2lhdGVkRW5kcG9pbnRIYW5kbGUgPSBmdW5j
dGlvbihpbmRleCkgewotICAgIGlmIChpbmRleCA9PT0gaW50ZXJuYWwua0VuY29kZWRJbnZhbGlk
SGFuZGxlVmFsdWUpIHsKLSAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIGlmIChpbmRl
eCA8IHRoaXMuYXNzb2NpYXRlZEVuZHBvaW50SGFuZGxlSW5kZXggfHwKLSAgICAgICAgaW5kZXgg
Pj0gdGhpcy5hc3NvY2lhdGVkSGFuZGxlSW5kZXhMaW1pdCkgewotICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIH0KLQotICAgIC8vIFRoaXMgaXMgc2FmZSBiZWNhdXNlIGhhbmRsZSBpbmRpY2VzIGFy
ZSB1aW50MzIuCi0gICAgdGhpcy5hc3NvY2lhdGVkRW5kcG9pbnRIYW5kbGVJbmRleCA9IGluZGV4
ICsgMTsKLSAgICByZXR1cm4gdHJ1ZTsKLSAgfTsKLQotICBWYWxpZGF0b3IucHJvdG90eXBlLnZh
bGlkYXRlRW51bSA9IGZ1bmN0aW9uKG9mZnNldCwgZW51bUNsYXNzKSB7Ci0gICAgLy8gTm90ZTog
QXNzdW1lcyB0aGF0IGVudW1zIGFyZSBhbHdheXMgMzIgYml0cyEgQnV0IHRoaXMgbWF0Y2hlcwot
ICAgIC8vIG1vam9tOjpnZW5lcmF0ZTo6cGFjazo6UGFja2VkRmllbGQ6OkdldFNpemVGb3JLaW5k
LCBzbyBpdCBzaG91bGQgYmUgb2theS4KLSAgICB2YXIgdmFsdWUgPSB0aGlzLm1lc3NhZ2UuYnVm
ZmVyLmdldEludDMyKG9mZnNldCk7Ci0gICAgcmV0dXJuIGVudW1DbGFzcy52YWxpZGF0ZSh2YWx1
ZSk7Ci0gIH0KLQotICBWYWxpZGF0b3IucHJvdG90eXBlLnZhbGlkYXRlSGFuZGxlID0gZnVuY3Rp
b24ob2Zmc2V0LCBudWxsYWJsZSkgewotICAgIHZhciBpbmRleCA9IHRoaXMubWVzc2FnZS5idWZm
ZXIuZ2V0VWludDMyKG9mZnNldCk7Ci0KLSAgICBpZiAoaW5kZXggPT09IGludGVybmFsLmtFbmNv
ZGVkSW52YWxpZEhhbmRsZVZhbHVlKQotICAgICAgcmV0dXJuIG51bGxhYmxlID8KLSAgICAgICAg
ICB2YWxpZGF0aW9uRXJyb3IuTk9ORSA6IHZhbGlkYXRpb25FcnJvci5VTkVYUEVDVEVEX0lOVkFM
SURfSEFORExFOwotCi0gICAgaWYgKCF0aGlzLmNsYWltSGFuZGxlKGluZGV4KSkKLSAgICAgIHJl
dHVybiB2YWxpZGF0aW9uRXJyb3IuSUxMRUdBTF9IQU5ETEU7Ci0KLSAgICByZXR1cm4gdmFsaWRh
dGlvbkVycm9yLk5PTkU7Ci0gIH07Ci0KLSAgVmFsaWRhdG9yLnByb3RvdHlwZS52YWxpZGF0ZUFz
c29jaWF0ZWRFbmRwb2ludEhhbmRsZSA9IGZ1bmN0aW9uKG9mZnNldCwKLSAgICAgIG51bGxhYmxl
KSB7Ci0gICAgdmFyIGluZGV4ID0gdGhpcy5tZXNzYWdlLmJ1ZmZlci5nZXRVaW50MzIob2Zmc2V0
KTsKLQotICAgIGlmIChpbmRleCA9PT0gaW50ZXJuYWwua0VuY29kZWRJbnZhbGlkSGFuZGxlVmFs
dWUpIHsKLSAgICAgIHJldHVybiBudWxsYWJsZSA/IHZhbGlkYXRpb25FcnJvci5OT05FIDoKLSAg
ICAgICAgICB2YWxpZGF0aW9uRXJyb3IuVU5FWFBFQ1RFRF9JTlZBTElEX0lOVEVSRkFDRV9JRDsK
LSAgICB9Ci0KLSAgICBpZiAoIXRoaXMuY2xhaW1Bc3NvY2lhdGVkRW5kcG9pbnRIYW5kbGUoaW5k
ZXgpKSB7Ci0gICAgICByZXR1cm4gdmFsaWRhdGlvbkVycm9yLklMTEVHQUxfSU5URVJGQUNFX0lE
OwotICAgIH0KLQotICAgIHJldHVybiB2YWxpZGF0aW9uRXJyb3IuTk9ORTsKLSAgfTsKLQotICBW
YWxpZGF0b3IucHJvdG90eXBlLnZhbGlkYXRlSW50ZXJmYWNlID0gZnVuY3Rpb24ob2Zmc2V0LCBu
dWxsYWJsZSkgewotICAgIHJldHVybiB0aGlzLnZhbGlkYXRlSGFuZGxlKG9mZnNldCwgbnVsbGFi
bGUpOwotICB9OwotCi0gIFZhbGlkYXRvci5wcm90b3R5cGUudmFsaWRhdGVJbnRlcmZhY2VSZXF1
ZXN0ID0gZnVuY3Rpb24ob2Zmc2V0LCBudWxsYWJsZSkgewotICAgIHJldHVybiB0aGlzLnZhbGlk
YXRlSGFuZGxlKG9mZnNldCwgbnVsbGFibGUpOwotICB9OwotCi0gIFZhbGlkYXRvci5wcm90b3R5
cGUudmFsaWRhdGVBc3NvY2lhdGVkSW50ZXJmYWNlID0gZnVuY3Rpb24ob2Zmc2V0LAotICAgICAg
bnVsbGFibGUpIHsKLSAgICByZXR1cm4gdGhpcy52YWxpZGF0ZUFzc29jaWF0ZWRFbmRwb2ludEhh
bmRsZShvZmZzZXQsIG51bGxhYmxlKTsKLSAgfTsKLQotICBWYWxpZGF0b3IucHJvdG90eXBlLnZh
bGlkYXRlQXNzb2NpYXRlZEludGVyZmFjZVJlcXVlc3QgPSBmdW5jdGlvbigKLSAgICAgIG9mZnNl
dCwgbnVsbGFibGUpIHsKLSAgICByZXR1cm4gdGhpcy52YWxpZGF0ZUFzc29jaWF0ZWRFbmRwb2lu
dEhhbmRsZShvZmZzZXQsIG51bGxhYmxlKTsKLSAgfTsKLQotICBWYWxpZGF0b3IucHJvdG90eXBl
LnZhbGlkYXRlU3RydWN0SGVhZGVyID0gZnVuY3Rpb24ob2Zmc2V0LCBtaW5OdW1CeXRlcykgewot
ICAgIGlmICghaW50ZXJuYWwuaXNBbGlnbmVkKG9mZnNldCkpCi0gICAgICByZXR1cm4gdmFsaWRh
dGlvbkVycm9yLk1JU0FMSUdORURfT0JKRUNUOwotCi0gICAgaWYgKCF0aGlzLmlzVmFsaWRSYW5n
ZShvZmZzZXQsIGludGVybmFsLmtTdHJ1Y3RIZWFkZXJTaXplKSkKLSAgICAgIHJldHVybiB2YWxp
ZGF0aW9uRXJyb3IuSUxMRUdBTF9NRU1PUllfUkFOR0U7Ci0KLSAgICB2YXIgbnVtQnl0ZXMgPSB0
aGlzLm1lc3NhZ2UuYnVmZmVyLmdldFVpbnQzMihvZmZzZXQpOwotCi0gICAgaWYgKG51bUJ5dGVz
IDwgbWluTnVtQnl0ZXMpCi0gICAgICByZXR1cm4gdmFsaWRhdGlvbkVycm9yLlVORVhQRUNURURf
U1RSVUNUX0hFQURFUjsKLQotICAgIGlmICghdGhpcy5jbGFpbVJhbmdlKG9mZnNldCwgbnVtQnl0
ZXMpKQotICAgICAgcmV0dXJuIHZhbGlkYXRpb25FcnJvci5JTExFR0FMX01FTU9SWV9SQU5HRTsK
LQotICAgIHJldHVybiB2YWxpZGF0aW9uRXJyb3IuTk9ORTsKLSAgfTsKLQotICBWYWxpZGF0b3Iu
cHJvdG90eXBlLnZhbGlkYXRlU3RydWN0VmVyc2lvbiA9IGZ1bmN0aW9uKG9mZnNldCwgdmVyc2lv
blNpemVzKSB7Ci0gICAgdmFyIG51bUJ5dGVzID0gdGhpcy5tZXNzYWdlLmJ1ZmZlci5nZXRVaW50
MzIob2Zmc2V0KTsKLSAgICB2YXIgdmVyc2lvbiA9IHRoaXMubWVzc2FnZS5idWZmZXIuZ2V0VWlu
dDMyKG9mZnNldCArIDQpOwotCi0gICAgaWYgKHZlcnNpb24gPD0gdmVyc2lvblNpemVzW3ZlcnNp
b25TaXplcy5sZW5ndGggLSAxXS52ZXJzaW9uKSB7Ci0gICAgICAvLyBTY2FuIGluIHJldmVyc2Ug
b3JkZXIgdG8gb3B0aW1pemUgZm9yIG1vcmUgcmVjZW50IHZlcnNpb25TaXplcy4KLSAgICAgIGZv
ciAodmFyIGkgPSB2ZXJzaW9uU2l6ZXMubGVuZ3RoIC0gMTsgaSA+PSAwOyAtLWkpIHsKLSAgICAg
ICAgaWYgKHZlcnNpb24gPj0gdmVyc2lvblNpemVzW2ldLnZlcnNpb24pIHsKLSAgICAgICAgICBp
ZiAobnVtQnl0ZXMgPT0gdmVyc2lvblNpemVzW2ldLm51bUJ5dGVzKQotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgcmV0dXJuIHZhbGlkYXRpb25FcnJvci5VTkVYUEVDVEVEX1NUUlVDVF9I
RUFERVI7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9IGVsc2UgaWYgKG51bUJ5dGVzIDwgdmVy
c2lvblNpemVzW3ZlcnNpb25TaXplcy5sZW5ndGgtMV0ubnVtQnl0ZXMpIHsKLSAgICAgIHJldHVy
biB2YWxpZGF0aW9uRXJyb3IuVU5FWFBFQ1RFRF9TVFJVQ1RfSEVBREVSOwotICAgIH0KLQotICAg
IHJldHVybiB2YWxpZGF0aW9uRXJyb3IuTk9ORTsKLSAgfTsKLQotICBWYWxpZGF0b3IucHJvdG90
eXBlLmlzRmllbGRJblN0cnVjdFZlcnNpb24gPSBmdW5jdGlvbihvZmZzZXQsIGZpZWxkVmVyc2lv
bikgewotICAgIHZhciBzdHJ1Y3RWZXJzaW9uID0gdGhpcy5tZXNzYWdlLmJ1ZmZlci5nZXRVaW50
MzIob2Zmc2V0ICsgNCk7Ci0gICAgcmV0dXJuIGZpZWxkVmVyc2lvbiA8PSBzdHJ1Y3RWZXJzaW9u
OwotICB9OwotCi0gIFZhbGlkYXRvci5wcm90b3R5cGUudmFsaWRhdGVNZXNzYWdlSGVhZGVyID0g
ZnVuY3Rpb24oKSB7Ci0gICAgdmFyIGVyciA9IHRoaXMudmFsaWRhdGVTdHJ1Y3RIZWFkZXIoMCwg
aW50ZXJuYWwua01lc3NhZ2VWMEhlYWRlclNpemUpOwotICAgIGlmIChlcnIgIT0gdmFsaWRhdGlv
bkVycm9yLk5PTkUpIHsKLSAgICAgIHJldHVybiBlcnI7Ci0gICAgfQotCi0gICAgdmFyIG51bUJ5
dGVzID0gdGhpcy5tZXNzYWdlLmdldEhlYWRlck51bUJ5dGVzKCk7Ci0gICAgdmFyIHZlcnNpb24g
PSB0aGlzLm1lc3NhZ2UuZ2V0SGVhZGVyVmVyc2lvbigpOwotCi0gICAgdmFyIHZhbGlkVmVyc2lv
bkFuZE51bUJ5dGVzID0KLSAgICAgICAgKHZlcnNpb24gPT0gMCAmJiBudW1CeXRlcyA9PSBpbnRl
cm5hbC5rTWVzc2FnZVYwSGVhZGVyU2l6ZSkgfHwKLSAgICAgICAgKHZlcnNpb24gPT0gMSAmJiBu
dW1CeXRlcyA9PSBpbnRlcm5hbC5rTWVzc2FnZVYxSGVhZGVyU2l6ZSkgfHwKLSAgICAgICAgKHZl
cnNpb24gPT0gMiAmJiBudW1CeXRlcyA9PSBpbnRlcm5hbC5rTWVzc2FnZVYySGVhZGVyU2l6ZSkg
fHwKLSAgICAgICAgKHZlcnNpb24gPiAyICYmIG51bUJ5dGVzID49IGludGVybmFsLmtNZXNzYWdl
VjJIZWFkZXJTaXplKTsKLQotICAgIGlmICghdmFsaWRWZXJzaW9uQW5kTnVtQnl0ZXMpIHsKLSAg
ICAgIHJldHVybiB2YWxpZGF0aW9uRXJyb3IuVU5FWFBFQ1RFRF9TVFJVQ1RfSEVBREVSOwotICAg
IH0KLQotICAgIHZhciBleHBlY3RzUmVzcG9uc2UgPSB0aGlzLm1lc3NhZ2UuZXhwZWN0c1Jlc3Bv
bnNlKCk7Ci0gICAgdmFyIGlzUmVzcG9uc2UgPSB0aGlzLm1lc3NhZ2UuaXNSZXNwb25zZSgpOwot
Ci0gICAgaWYgKHZlcnNpb24gPT0gMCAmJiAoZXhwZWN0c1Jlc3BvbnNlIHx8IGlzUmVzcG9uc2Up
KSB7Ci0gICAgICByZXR1cm4gdmFsaWRhdGlvbkVycm9yLk1FU1NBR0VfSEVBREVSX01JU1NJTkdf
UkVRVUVTVF9JRDsKLSAgICB9Ci0KLSAgICBpZiAoaXNSZXNwb25zZSAmJiBleHBlY3RzUmVzcG9u
c2UpIHsKLSAgICAgIHJldHVybiB2YWxpZGF0aW9uRXJyb3IuTUVTU0FHRV9IRUFERVJfSU5WQUxJ
RF9GTEFHUzsKLSAgICB9Ci0KLSAgICBpZiAodmVyc2lvbiA8IDIpIHsKLSAgICAgIHJldHVybiB2
YWxpZGF0aW9uRXJyb3IuTk9ORTsKLSAgICB9Ci0KLSAgICB2YXIgZXJyID0gdGhpcy52YWxpZGF0
ZUFycmF5UG9pbnRlcigKLSAgICAgICAgaW50ZXJuYWwua01lc3NhZ2VQYXlsb2FkSW50ZXJmYWNl
SWRzUG9pbnRlck9mZnNldCwKLSAgICAgICAgaW50ZXJuYWwuVWludDMyLmVuY29kZWRTaXplLCBp
bnRlcm5hbC5VaW50MzIsIHRydWUsIFswXSwgMCk7Ci0KLSAgICBpZiAoZXJyICE9IHZhbGlkYXRp
b25FcnJvci5OT05FKSB7Ci0gICAgICByZXR1cm4gZXJyOwotICAgIH0KLQotICAgIHRoaXMucGF5
bG9hZEludGVyZmFjZUlkcyA9IHRoaXMubWVzc2FnZS5nZXRQYXlsb2FkSW50ZXJmYWNlSWRzKCk7
Ci0gICAgaWYgKHRoaXMucGF5bG9hZEludGVyZmFjZUlkcykgewotICAgICAgZm9yICh2YXIgaW50
ZXJmYWNlSWQgb2YgdGhpcy5wYXlsb2FkSW50ZXJmYWNlSWRzKSB7Ci0gICAgICAgIGlmICghaW50
ZXJuYWwuaXNWYWxpZEludGVyZmFjZUlkKGludGVyZmFjZUlkKSB8fAotICAgICAgICAgICAgaW50
ZXJuYWwuaXNNYXN0ZXJJbnRlcmZhY2VJZChpbnRlcmZhY2VJZCkpIHsKLSAgICAgICAgICByZXR1
cm4gdmFsaWRhdGlvbkVycm9yLklMTEVHQUxfSU5URVJGQUNFX0lEOwotICAgICAgICB9Ci0gICAg
ICB9Ci0gICAgfQotCi0gICAgLy8gU2V0IG9mZnNldCB0byB0aGUgc3RhcnQgb2YgdGhlIHBheWxv
YWQgYW5kIG9mZnNldExpbWl0IHRvIHRoZSBzdGFydCBvZgotICAgIC8vIHRoZSBwYXlsb2FkIGlu
dGVyZmFjZSBJZHMgc28gdGhhdCBwYXlsb2FkIGNhbiBiZSB2YWxpZGF0ZWQgdXNpbmcgdGhlCi0g
ICAgLy8gc2FtZSBtZXNzYWdlVmFsaWRhdG9yLgotICAgIHRoaXMub2Zmc2V0ID0gdGhpcy5tZXNz
YWdlLmdldEhlYWRlck51bUJ5dGVzKCk7Ci0gICAgdGhpcy5vZmZzZXRMaW1pdCA9IHRoaXMuZGVj
b2RlUG9pbnRlcigKLSAgICAgICAgaW50ZXJuYWwua01lc3NhZ2VQYXlsb2FkSW50ZXJmYWNlSWRz
UG9pbnRlck9mZnNldCk7Ci0KLSAgICByZXR1cm4gdmFsaWRhdGlvbkVycm9yLk5PTkU7Ci0gIH07
Ci0KLSAgVmFsaWRhdG9yLnByb3RvdHlwZS52YWxpZGF0ZU1lc3NhZ2VJc1JlcXVlc3RXaXRob3V0
UmVzcG9uc2UgPSBmdW5jdGlvbigpIHsKLSAgICBpZiAodGhpcy5tZXNzYWdlLmlzUmVzcG9uc2Uo
KSB8fCB0aGlzLm1lc3NhZ2UuZXhwZWN0c1Jlc3BvbnNlKCkpIHsKLSAgICAgIHJldHVybiB2YWxp
ZGF0aW9uRXJyb3IuTUVTU0FHRV9IRUFERVJfSU5WQUxJRF9GTEFHUzsKLSAgICB9Ci0gICAgcmV0
dXJuIHZhbGlkYXRpb25FcnJvci5OT05FOwotICB9OwotCi0gIFZhbGlkYXRvci5wcm90b3R5cGUu
dmFsaWRhdGVNZXNzYWdlSXNSZXF1ZXN0RXhwZWN0aW5nUmVzcG9uc2UgPSBmdW5jdGlvbigpIHsK
LSAgICBpZiAodGhpcy5tZXNzYWdlLmlzUmVzcG9uc2UoKSB8fCAhdGhpcy5tZXNzYWdlLmV4cGVj
dHNSZXNwb25zZSgpKSB7Ci0gICAgICByZXR1cm4gdmFsaWRhdGlvbkVycm9yLk1FU1NBR0VfSEVB
REVSX0lOVkFMSURfRkxBR1M7Ci0gICAgfQotICAgIHJldHVybiB2YWxpZGF0aW9uRXJyb3IuTk9O
RTsKLSAgfTsKLQotICBWYWxpZGF0b3IucHJvdG90eXBlLnZhbGlkYXRlTWVzc2FnZUlzUmVzcG9u
c2UgPSBmdW5jdGlvbigpIHsKLSAgICBpZiAodGhpcy5tZXNzYWdlLmV4cGVjdHNSZXNwb25zZSgp
IHx8ICF0aGlzLm1lc3NhZ2UuaXNSZXNwb25zZSgpKSB7Ci0gICAgICByZXR1cm4gdmFsaWRhdGlv
bkVycm9yLk1FU1NBR0VfSEVBREVSX0lOVkFMSURfRkxBR1M7Ci0gICAgfQotICAgIHJldHVybiB2
YWxpZGF0aW9uRXJyb3IuTk9ORTsKLSAgfTsKLQotICAvLyBSZXR1cm5zIHRoZSBtZXNzYWdlLmJ1
ZmZlciByZWxhdGl2ZSBvZmZzZXQgdGhpcyBwb2ludGVyICJwb2ludHMgdG8iLAotICAvLyBOVUxM
X01PSk9fUE9JTlRFUiBpZiB0aGUgcG9pbnRlciByZXByZXNlbnRzIGEgbnVsbCwgb3IgSlMgbnVs
bCBpZiB0aGUKLSAgLy8gcG9pbnRlcidzIHZhbHVlIGlzIG5vdCB2YWxpZC4KLSAgVmFsaWRhdG9y
LnByb3RvdHlwZS5kZWNvZGVQb2ludGVyID0gZnVuY3Rpb24ob2Zmc2V0KSB7Ci0gICAgdmFyIHBv
aW50ZXJWYWx1ZSA9IHRoaXMubWVzc2FnZS5idWZmZXIuZ2V0VWludDY0KG9mZnNldCk7Ci0gICAg
aWYgKHBvaW50ZXJWYWx1ZSA9PT0gMCkKLSAgICAgIHJldHVybiBOVUxMX01PSk9fUE9JTlRFUjsK
LSAgICB2YXIgYnVmZmVyT2Zmc2V0ID0gb2Zmc2V0ICsgcG9pbnRlclZhbHVlOwotICAgIHJldHVy
biBOdW1iZXIuaXNTYWZlSW50ZWdlcihidWZmZXJPZmZzZXQpID8gYnVmZmVyT2Zmc2V0IDogbnVs
bDsKLSAgfTsKLQotICBWYWxpZGF0b3IucHJvdG90eXBlLmRlY29kZVVuaW9uU2l6ZSA9IGZ1bmN0
aW9uKG9mZnNldCkgewotICAgIHJldHVybiB0aGlzLm1lc3NhZ2UuYnVmZmVyLmdldFVpbnQzMihv
ZmZzZXQpOwotICB9OwotCi0gIFZhbGlkYXRvci5wcm90b3R5cGUuZGVjb2RlVW5pb25UYWcgPSBm
dW5jdGlvbihvZmZzZXQpIHsKLSAgICByZXR1cm4gdGhpcy5tZXNzYWdlLmJ1ZmZlci5nZXRVaW50
MzIob2Zmc2V0ICsgNCk7Ci0gIH07Ci0KLSAgVmFsaWRhdG9yLnByb3RvdHlwZS52YWxpZGF0ZUFy
cmF5UG9pbnRlciA9IGZ1bmN0aW9uKAotICAgICAgb2Zmc2V0LCBlbGVtZW50U2l6ZSwgZWxlbWVu
dFR5cGUsIG51bGxhYmxlLCBleHBlY3RlZERpbWVuc2lvblNpemVzLAotICAgICAgY3VycmVudERp
bWVuc2lvbikgewotICAgIHZhciBhcnJheU9mZnNldCA9IHRoaXMuZGVjb2RlUG9pbnRlcihvZmZz
ZXQpOwotICAgIGlmIChhcnJheU9mZnNldCA9PT0gbnVsbCkKLSAgICAgIHJldHVybiB2YWxpZGF0
aW9uRXJyb3IuSUxMRUdBTF9QT0lOVEVSOwotCi0gICAgaWYgKGFycmF5T2Zmc2V0ID09PSBOVUxM
X01PSk9fUE9JTlRFUikKLSAgICAgIHJldHVybiBudWxsYWJsZSA/Ci0gICAgICAgICAgdmFsaWRh
dGlvbkVycm9yLk5PTkUgOiB2YWxpZGF0aW9uRXJyb3IuVU5FWFBFQ1RFRF9OVUxMX1BPSU5URVI7
Ci0KLSAgICByZXR1cm4gdGhpcy52YWxpZGF0ZUFycmF5KGFycmF5T2Zmc2V0LCBlbGVtZW50U2l6
ZSwgZWxlbWVudFR5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBlY3RlZERp
bWVuc2lvblNpemVzLCBjdXJyZW50RGltZW5zaW9uKTsKLSAgfTsKLQotICBWYWxpZGF0b3IucHJv
dG90eXBlLnZhbGlkYXRlU3RydWN0UG9pbnRlciA9IGZ1bmN0aW9uKAotICAgICAgb2Zmc2V0LCBz
dHJ1Y3RDbGFzcywgbnVsbGFibGUpIHsKLSAgICB2YXIgc3RydWN0T2Zmc2V0ID0gdGhpcy5kZWNv
ZGVQb2ludGVyKG9mZnNldCk7Ci0gICAgaWYgKHN0cnVjdE9mZnNldCA9PT0gbnVsbCkKLSAgICAg
IHJldHVybiB2YWxpZGF0aW9uRXJyb3IuSUxMRUdBTF9QT0lOVEVSOwotCi0gICAgaWYgKHN0cnVj
dE9mZnNldCA9PT0gTlVMTF9NT0pPX1BPSU5URVIpCi0gICAgICByZXR1cm4gbnVsbGFibGUgPwot
ICAgICAgICAgIHZhbGlkYXRpb25FcnJvci5OT05FIDogdmFsaWRhdGlvbkVycm9yLlVORVhQRUNU
RURfTlVMTF9QT0lOVEVSOwotCi0gICAgcmV0dXJuIHN0cnVjdENsYXNzLnZhbGlkYXRlKHRoaXMs
IHN0cnVjdE9mZnNldCk7Ci0gIH07Ci0KLSAgVmFsaWRhdG9yLnByb3RvdHlwZS52YWxpZGF0ZVVu
aW9uID0gZnVuY3Rpb24oCi0gICAgICBvZmZzZXQsIHVuaW9uQ2xhc3MsIG51bGxhYmxlKSB7Ci0g
ICAgdmFyIHNpemUgPSB0aGlzLm1lc3NhZ2UuYnVmZmVyLmdldFVpbnQzMihvZmZzZXQpOwotICAg
IGlmIChzaXplID09IDApIHsKLSAgICAgIHJldHVybiBudWxsYWJsZSA/Ci0gICAgICAgICAgdmFs
aWRhdGlvbkVycm9yLk5PTkUgOiB2YWxpZGF0aW9uRXJyb3IuVU5FWFBFQ1RFRF9OVUxMX1VOSU9O
OwotICAgIH0KLQotICAgIHJldHVybiB1bmlvbkNsYXNzLnZhbGlkYXRlKHRoaXMsIG9mZnNldCk7
Ci0gIH07Ci0KLSAgVmFsaWRhdG9yLnByb3RvdHlwZS52YWxpZGF0ZU5lc3RlZFVuaW9uID0gZnVu
Y3Rpb24oCi0gICAgICBvZmZzZXQsIHVuaW9uQ2xhc3MsIG51bGxhYmxlKSB7Ci0gICAgdmFyIHVu
aW9uT2Zmc2V0ID0gdGhpcy5kZWNvZGVQb2ludGVyKG9mZnNldCk7Ci0gICAgaWYgKHVuaW9uT2Zm
c2V0ID09PSBudWxsKQotICAgICAgcmV0dXJuIHZhbGlkYXRpb25FcnJvci5JTExFR0FMX1BPSU5U
RVI7Ci0KLSAgICBpZiAodW5pb25PZmZzZXQgPT09IE5VTExfTU9KT19QT0lOVEVSKQotICAgICAg
cmV0dXJuIG51bGxhYmxlID8KLSAgICAgICAgICB2YWxpZGF0aW9uRXJyb3IuTk9ORSA6IHZhbGlk
YXRpb25FcnJvci5VTkVYUEVDVEVEX05VTExfVU5JT047Ci0KLSAgICByZXR1cm4gdGhpcy52YWxp
ZGF0ZVVuaW9uKHVuaW9uT2Zmc2V0LCB1bmlvbkNsYXNzLCBudWxsYWJsZSk7Ci0gIH07Ci0KLSAg
Ly8gVGhpcyBtZXRob2QgYXNzdW1lcyB0aGF0IHRoZSBhcnJheSBhdCBhcnJheVBvaW50ZXJPZmZz
ZXQgaGFzCi0gIC8vIGJlZW4gdmFsaWRhdGVkLgotCi0gIFZhbGlkYXRvci5wcm90b3R5cGUuYXJy
YXlMZW5ndGggPSBmdW5jdGlvbihhcnJheVBvaW50ZXJPZmZzZXQpIHsKLSAgICB2YXIgYXJyYXlP
ZmZzZXQgPSB0aGlzLmRlY29kZVBvaW50ZXIoYXJyYXlQb2ludGVyT2Zmc2V0KTsKLSAgICByZXR1
cm4gdGhpcy5tZXNzYWdlLmJ1ZmZlci5nZXRVaW50MzIoYXJyYXlPZmZzZXQgKyA0KTsKLSAgfTsK
LQotICBWYWxpZGF0b3IucHJvdG90eXBlLnZhbGlkYXRlTWFwUG9pbnRlciA9IGZ1bmN0aW9uKAot
ICAgICAgb2Zmc2V0LCBtYXBJc051bGxhYmxlLCBrZXlDbGFzcywgdmFsdWVDbGFzcywgdmFsdWVJ
c051bGxhYmxlKSB7Ci0gICAgLy8gVmFsaWRhdGUgdGhlIGltcGxpY2l0IG1hcCBzdHJ1Y3Q6Ci0g
ICAgLy8gc3RydWN0IHthcnJheTxrZXlDbGFzcz4ga2V5czsgYXJyYXk8dmFsdWVDbGFzcz4gdmFs
dWVzfTsKLSAgICB2YXIgc3RydWN0T2Zmc2V0ID0gdGhpcy5kZWNvZGVQb2ludGVyKG9mZnNldCk7
Ci0gICAgaWYgKHN0cnVjdE9mZnNldCA9PT0gbnVsbCkKLSAgICAgIHJldHVybiB2YWxpZGF0aW9u
RXJyb3IuSUxMRUdBTF9QT0lOVEVSOwotCi0gICAgaWYgKHN0cnVjdE9mZnNldCA9PT0gTlVMTF9N
T0pPX1BPSU5URVIpCi0gICAgICByZXR1cm4gbWFwSXNOdWxsYWJsZSA/Ci0gICAgICAgICAgdmFs
aWRhdGlvbkVycm9yLk5PTkUgOiB2YWxpZGF0aW9uRXJyb3IuVU5FWFBFQ1RFRF9OVUxMX1BPSU5U
RVI7Ci0KLSAgICB2YXIgbWFwRW5jb2RlZFNpemUgPSBpbnRlcm5hbC5rU3RydWN0SGVhZGVyU2l6
ZSArCi0gICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJuYWwua01hcFN0cnVjdFBheWxvYWRT
aXplOwotICAgIHZhciBlcnIgPSB0aGlzLnZhbGlkYXRlU3RydWN0SGVhZGVyKHN0cnVjdE9mZnNl
dCwgbWFwRW5jb2RlZFNpemUpOwotICAgIGlmIChlcnIgIT09IHZhbGlkYXRpb25FcnJvci5OT05F
KQotICAgICAgICByZXR1cm4gZXJyOwotCi0gICAgLy8gVmFsaWRhdGUgdGhlIGtleXMgYXJyYXku
Ci0gICAgdmFyIGtleXNBcnJheVBvaW50ZXJPZmZzZXQgPSBzdHJ1Y3RPZmZzZXQgKyBpbnRlcm5h
bC5rU3RydWN0SGVhZGVyU2l6ZTsKLSAgICBlcnIgPSB0aGlzLnZhbGlkYXRlQXJyYXlQb2ludGVy
KAotICAgICAgICBrZXlzQXJyYXlQb2ludGVyT2Zmc2V0LCBrZXlDbGFzcy5lbmNvZGVkU2l6ZSwg
a2V5Q2xhc3MsIGZhbHNlLCBbMF0sIDApOwotICAgIGlmIChlcnIgIT09IHZhbGlkYXRpb25FcnJv
ci5OT05FKQotICAgICAgICByZXR1cm4gZXJyOwotCi0gICAgLy8gVmFsaWRhdGUgdGhlIHZhbHVl
cyBhcnJheS4KLSAgICB2YXIgdmFsdWVzQXJyYXlQb2ludGVyT2Zmc2V0ID0ga2V5c0FycmF5UG9p
bnRlck9mZnNldCArIDg7Ci0gICAgdmFyIHZhbHVlc0FycmF5RGltZW5zaW9ucyA9IFswXTsgLy8g
VmFsaWRhdGUgdGhlIGFjdHVhbCBsZW5ndGggYmVsb3cuCi0gICAgaWYgKHZhbHVlQ2xhc3MgaW5z
dGFuY2VvZiBpbnRlcm5hbC5BcnJheU9mKQotICAgICAgdmFsdWVzQXJyYXlEaW1lbnNpb25zID0K
LSAgICAgICAgICB2YWx1ZXNBcnJheURpbWVuc2lvbnMuY29uY2F0KHZhbHVlQ2xhc3MuZGltZW5z
aW9ucygpKTsKLSAgICB2YXIgZXJyID0gdGhpcy52YWxpZGF0ZUFycmF5UG9pbnRlcih2YWx1ZXNB
cnJheVBvaW50ZXJPZmZzZXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdmFsdWVDbGFzcy5lbmNvZGVkU2l6ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB2YWx1ZUNsYXNzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHZhbHVlSXNOdWxsYWJsZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB2YWx1ZXNBcnJheURpbWVuc2lvbnMsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgMCk7Ci0gICAgaWYgKGVyciAhPT0gdmFsaWRhdGlvbkVycm9yLk5PTkUp
Ci0gICAgICAgIHJldHVybiBlcnI7Ci0KLSAgICAvLyBWYWxpZGF0ZSB0aGUgbGVuZ3RocyBvZiB0
aGUga2V5cyBhbmQgdmFsdWVzIGFycmF5cy4KLSAgICB2YXIga2V5c0FycmF5TGVuZ3RoID0gdGhp
cy5hcnJheUxlbmd0aChrZXlzQXJyYXlQb2ludGVyT2Zmc2V0KTsKLSAgICB2YXIgdmFsdWVzQXJy
YXlMZW5ndGggPSB0aGlzLmFycmF5TGVuZ3RoKHZhbHVlc0FycmF5UG9pbnRlck9mZnNldCk7Ci0g
ICAgaWYgKGtleXNBcnJheUxlbmd0aCAhPSB2YWx1ZXNBcnJheUxlbmd0aCkKLSAgICAgIHJldHVy
biB2YWxpZGF0aW9uRXJyb3IuRElGRkVSRU5UX1NJWkVEX0FSUkFZU19JTl9NQVA7Ci0KLSAgICBy
ZXR1cm4gdmFsaWRhdGlvbkVycm9yLk5PTkU7Ci0gIH07Ci0KLSAgVmFsaWRhdG9yLnByb3RvdHlw
ZS52YWxpZGF0ZVN0cmluZ1BvaW50ZXIgPSBmdW5jdGlvbihvZmZzZXQsIG51bGxhYmxlKSB7Ci0g
ICAgcmV0dXJuIHRoaXMudmFsaWRhdGVBcnJheVBvaW50ZXIoCi0gICAgICAgIG9mZnNldCwgaW50
ZXJuYWwuVWludDguZW5jb2RlZFNpemUsIGludGVybmFsLlVpbnQ4LCBudWxsYWJsZSwgWzBdLCAw
KTsKLSAgfTsKLQotICAvLyBTaW1pbGFyIHRvIEFycmF5X0RhdGE8VD46OlZhbGlkYXRlKCkKLSAg
Ly8gbW9qby9wdWJsaWMvY3BwL2JpbmRpbmdzL2xpYi9hcnJheV9pbnRlcm5hbC5oCi0KLSAgVmFs
aWRhdG9yLnByb3RvdHlwZS52YWxpZGF0ZUFycmF5ID0KLSAgICAgIGZ1bmN0aW9uIChvZmZzZXQs
IGVsZW1lbnRTaXplLCBlbGVtZW50VHlwZSwgZXhwZWN0ZWREaW1lbnNpb25TaXplcywKLSAgICAg
ICAgICAgICAgICBjdXJyZW50RGltZW5zaW9uKSB7Ci0gICAgaWYgKCFpbnRlcm5hbC5pc0FsaWdu
ZWQob2Zmc2V0KSkKLSAgICAgIHJldHVybiB2YWxpZGF0aW9uRXJyb3IuTUlTQUxJR05FRF9PQkpF
Q1Q7Ci0KLSAgICBpZiAoIXRoaXMuaXNWYWxpZFJhbmdlKG9mZnNldCwgaW50ZXJuYWwua0FycmF5
SGVhZGVyU2l6ZSkpCi0gICAgICByZXR1cm4gdmFsaWRhdGlvbkVycm9yLklMTEVHQUxfTUVNT1JZ
X1JBTkdFOwotCi0gICAgdmFyIG51bUJ5dGVzID0gdGhpcy5tZXNzYWdlLmJ1ZmZlci5nZXRVaW50
MzIob2Zmc2V0KTsKLSAgICB2YXIgbnVtRWxlbWVudHMgPSB0aGlzLm1lc3NhZ2UuYnVmZmVyLmdl
dFVpbnQzMihvZmZzZXQgKyA0KTsKLQotICAgIC8vIE5vdGU6IHRoaXMgY29tcHV0YXRpb24gaXMg
InNhZmUiIGJlY2F1c2UgZWxlbWVudFNpemUgPD0gOCBhbmQKLSAgICAvLyBudW1FbGVtZW50cyBp
cyBhIHVpbnQzMi4KLSAgICB2YXIgZWxlbWVudHNUb3RhbFNpemUgPSAoZWxlbWVudFR5cGUgPT09
IGludGVybmFsLlBhY2tlZEJvb2wpID8KLSAgICAgICAgTWF0aC5jZWlsKG51bUVsZW1lbnRzIC8g
OCkgOiAoZWxlbWVudFNpemUgKiBudW1FbGVtZW50cyk7Ci0KLSAgICBpZiAobnVtQnl0ZXMgPCBp
bnRlcm5hbC5rQXJyYXlIZWFkZXJTaXplICsgZWxlbWVudHNUb3RhbFNpemUpCi0gICAgICByZXR1
cm4gdmFsaWRhdGlvbkVycm9yLlVORVhQRUNURURfQVJSQVlfSEVBREVSOwotCi0gICAgaWYgKGV4
cGVjdGVkRGltZW5zaW9uU2l6ZXNbY3VycmVudERpbWVuc2lvbl0gIT0gMCAmJgotICAgICAgICBu
dW1FbGVtZW50cyAhPSBleHBlY3RlZERpbWVuc2lvblNpemVzW2N1cnJlbnREaW1lbnNpb25dKSB7
Ci0gICAgICByZXR1cm4gdmFsaWRhdGlvbkVycm9yLlVORVhQRUNURURfQVJSQVlfSEVBREVSOwot
ICAgIH0KLQotICAgIGlmICghdGhpcy5jbGFpbVJhbmdlKG9mZnNldCwgbnVtQnl0ZXMpKQotICAg
ICAgcmV0dXJuIHZhbGlkYXRpb25FcnJvci5JTExFR0FMX01FTU9SWV9SQU5HRTsKLQotICAgIC8v
IFZhbGlkYXRlIHRoZSBhcnJheSdzIGVsZW1lbnRzIGlmIHRoZXkgYXJlIHBvaW50ZXJzIG9yIGhh
bmRsZXMuCi0KLSAgICB2YXIgZWxlbWVudHNPZmZzZXQgPSBvZmZzZXQgKyBpbnRlcm5hbC5rQXJy
YXlIZWFkZXJTaXplOwotICAgIHZhciBudWxsYWJsZSA9IGlzTnVsbGFibGUoZWxlbWVudFR5cGUp
OwotCi0gICAgaWYgKGlzSGFuZGxlQ2xhc3MoZWxlbWVudFR5cGUpKQotICAgICAgcmV0dXJuIHRo
aXMudmFsaWRhdGVIYW5kbGVFbGVtZW50cyhlbGVtZW50c09mZnNldCwgbnVtRWxlbWVudHMsIG51
bGxhYmxlKTsKLSAgICBpZiAoaXNJbnRlcmZhY2VDbGFzcyhlbGVtZW50VHlwZSkpCi0gICAgICBy
ZXR1cm4gdGhpcy52YWxpZGF0ZUludGVyZmFjZUVsZW1lbnRzKAotICAgICAgICAgIGVsZW1lbnRz
T2Zmc2V0LCBudW1FbGVtZW50cywgbnVsbGFibGUpOwotICAgIGlmIChpc0ludGVyZmFjZVJlcXVl
c3RDbGFzcyhlbGVtZW50VHlwZSkpCi0gICAgICByZXR1cm4gdGhpcy52YWxpZGF0ZUludGVyZmFj
ZVJlcXVlc3RFbGVtZW50cygKLSAgICAgICAgICBlbGVtZW50c09mZnNldCwgbnVtRWxlbWVudHMs
IG51bGxhYmxlKTsKLSAgICBpZiAoaXNBc3NvY2lhdGVkSW50ZXJmYWNlQ2xhc3MoZWxlbWVudFR5
cGUpKQotICAgICAgcmV0dXJuIHRoaXMudmFsaWRhdGVBc3NvY2lhdGVkSW50ZXJmYWNlRWxlbWVu
dHMoCi0gICAgICAgICAgZWxlbWVudHNPZmZzZXQsIG51bUVsZW1lbnRzLCBudWxsYWJsZSk7Ci0g
ICAgaWYgKGlzQXNzb2NpYXRlZEludGVyZmFjZVJlcXVlc3RDbGFzcyhlbGVtZW50VHlwZSkpCi0g
ICAgICByZXR1cm4gdGhpcy52YWxpZGF0ZUFzc29jaWF0ZWRJbnRlcmZhY2VSZXF1ZXN0RWxlbWVu
dHMoCi0gICAgICAgICAgZWxlbWVudHNPZmZzZXQsIG51bUVsZW1lbnRzLCBudWxsYWJsZSk7Ci0g
ICAgaWYgKGlzU3RyaW5nQ2xhc3MoZWxlbWVudFR5cGUpKQotICAgICAgcmV0dXJuIHRoaXMudmFs
aWRhdGVBcnJheUVsZW1lbnRzKAotICAgICAgICAgIGVsZW1lbnRzT2Zmc2V0LCBudW1FbGVtZW50
cywgaW50ZXJuYWwuVWludDgsIG51bGxhYmxlLCBbMF0sIDApOwotICAgIGlmIChlbGVtZW50VHlw
ZSBpbnN0YW5jZW9mIGludGVybmFsLlBvaW50ZXJUbykKLSAgICAgIHJldHVybiB0aGlzLnZhbGlk
YXRlU3RydWN0RWxlbWVudHMoCi0gICAgICAgICAgZWxlbWVudHNPZmZzZXQsIG51bUVsZW1lbnRz
LCBlbGVtZW50VHlwZS5jbHMsIG51bGxhYmxlKTsKLSAgICBpZiAoZWxlbWVudFR5cGUgaW5zdGFu
Y2VvZiBpbnRlcm5hbC5BcnJheU9mKQotICAgICAgcmV0dXJuIHRoaXMudmFsaWRhdGVBcnJheUVs
ZW1lbnRzKAotICAgICAgICAgIGVsZW1lbnRzT2Zmc2V0LCBudW1FbGVtZW50cywgZWxlbWVudFR5
cGUuY2xzLCBudWxsYWJsZSwKLSAgICAgICAgICBleHBlY3RlZERpbWVuc2lvblNpemVzLCBjdXJy
ZW50RGltZW5zaW9uICsgMSk7Ci0gICAgaWYgKGlzRW51bUNsYXNzKGVsZW1lbnRUeXBlKSkKLSAg
ICAgIHJldHVybiB0aGlzLnZhbGlkYXRlRW51bUVsZW1lbnRzKGVsZW1lbnRzT2Zmc2V0LCBudW1F
bGVtZW50cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnRU
eXBlLmNscyk7Ci0KLSAgICByZXR1cm4gdmFsaWRhdGlvbkVycm9yLk5PTkU7Ci0gIH07Ci0KLSAg
Ly8gTm90ZTogdGhlIHxvZmZzZXQgKyBpICogZWxlbWVudFNpemV8IGNvbXB1dGF0aW9uIGluIHRo
ZSB2YWxpZGF0ZUZvb0VsZW1lbnRzCi0gIC8vIG1ldGhvZHMgYmVsb3cgaXMgInNhZmUiIGJlY2F1
c2UgZWxlbWVudFNpemUgPD0gOCwgb2Zmc2V0IGFuZAotICAvLyBudW1FbGVtZW50cyBhcmUgdWlu
dDMyLCBhbmQgMCA8PSBpIDwgbnVtRWxlbWVudHMuCi0KLSAgVmFsaWRhdG9yLnByb3RvdHlwZS52
YWxpZGF0ZUhhbmRsZUVsZW1lbnRzID0KLSAgICAgIGZ1bmN0aW9uKG9mZnNldCwgbnVtRWxlbWVu
dHMsIG51bGxhYmxlKSB7Ci0gICAgdmFyIGVsZW1lbnRTaXplID0gaW50ZXJuYWwuSGFuZGxlLmVu
Y29kZWRTaXplOwotICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbnVtRWxlbWVudHM7IGkrKykgewot
ICAgICAgdmFyIGVsZW1lbnRPZmZzZXQgPSBvZmZzZXQgKyBpICogZWxlbWVudFNpemU7Ci0gICAg
ICB2YXIgZXJyID0gdGhpcy52YWxpZGF0ZUhhbmRsZShlbGVtZW50T2Zmc2V0LCBudWxsYWJsZSk7
Ci0gICAgICBpZiAoZXJyICE9IHZhbGlkYXRpb25FcnJvci5OT05FKQotICAgICAgICByZXR1cm4g
ZXJyOwotICAgIH0KLSAgICByZXR1cm4gdmFsaWRhdGlvbkVycm9yLk5PTkU7Ci0gIH07Ci0KLSAg
VmFsaWRhdG9yLnByb3RvdHlwZS52YWxpZGF0ZUludGVyZmFjZUVsZW1lbnRzID0KLSAgICAgIGZ1
bmN0aW9uKG9mZnNldCwgbnVtRWxlbWVudHMsIG51bGxhYmxlKSB7Ci0gICAgdmFyIGVsZW1lbnRT
aXplID0gaW50ZXJuYWwuSW50ZXJmYWNlLnByb3RvdHlwZS5lbmNvZGVkU2l6ZTsKLSAgICBmb3Ig
KHZhciBpID0gMDsgaSA8IG51bUVsZW1lbnRzOyBpKyspIHsKLSAgICAgIHZhciBlbGVtZW50T2Zm
c2V0ID0gb2Zmc2V0ICsgaSAqIGVsZW1lbnRTaXplOwotICAgICAgdmFyIGVyciA9IHRoaXMudmFs
aWRhdGVJbnRlcmZhY2UoZWxlbWVudE9mZnNldCwgbnVsbGFibGUpOwotICAgICAgaWYgKGVyciAh
PSB2YWxpZGF0aW9uRXJyb3IuTk9ORSkKLSAgICAgICAgcmV0dXJuIGVycjsKLSAgICB9Ci0gICAg
cmV0dXJuIHZhbGlkYXRpb25FcnJvci5OT05FOwotICB9OwotCi0gIFZhbGlkYXRvci5wcm90b3R5
cGUudmFsaWRhdGVJbnRlcmZhY2VSZXF1ZXN0RWxlbWVudHMgPQotICAgICAgZnVuY3Rpb24ob2Zm
c2V0LCBudW1FbGVtZW50cywgbnVsbGFibGUpIHsKLSAgICB2YXIgZWxlbWVudFNpemUgPSBpbnRl
cm5hbC5JbnRlcmZhY2VSZXF1ZXN0LmVuY29kZWRTaXplOwotICAgIGZvciAodmFyIGkgPSAwOyBp
IDwgbnVtRWxlbWVudHM7IGkrKykgewotICAgICAgdmFyIGVsZW1lbnRPZmZzZXQgPSBvZmZzZXQg
KyBpICogZWxlbWVudFNpemU7Ci0gICAgICB2YXIgZXJyID0gdGhpcy52YWxpZGF0ZUludGVyZmFj
ZVJlcXVlc3QoZWxlbWVudE9mZnNldCwgbnVsbGFibGUpOwotICAgICAgaWYgKGVyciAhPSB2YWxp
ZGF0aW9uRXJyb3IuTk9ORSkKLSAgICAgICAgcmV0dXJuIGVycjsKLSAgICB9Ci0gICAgcmV0dXJu
IHZhbGlkYXRpb25FcnJvci5OT05FOwotICB9OwotCi0gIFZhbGlkYXRvci5wcm90b3R5cGUudmFs
aWRhdGVBc3NvY2lhdGVkSW50ZXJmYWNlRWxlbWVudHMgPQotICAgICAgZnVuY3Rpb24ob2Zmc2V0
LCBudW1FbGVtZW50cywgbnVsbGFibGUpIHsKLSAgICB2YXIgZWxlbWVudFNpemUgPSBpbnRlcm5h
bC5Bc3NvY2lhdGVkSW50ZXJmYWNlUHRySW5mby5wcm90b3R5cGUuZW5jb2RlZFNpemU7Ci0gICAg
Zm9yICh2YXIgaSA9IDA7IGkgPCBudW1FbGVtZW50czsgaSsrKSB7Ci0gICAgICB2YXIgZWxlbWVu
dE9mZnNldCA9IG9mZnNldCArIGkgKiBlbGVtZW50U2l6ZTsKLSAgICAgIHZhciBlcnIgPSB0aGlz
LnZhbGlkYXRlQXNzb2NpYXRlZEludGVyZmFjZShlbGVtZW50T2Zmc2V0LCBudWxsYWJsZSk7Ci0g
ICAgICBpZiAoZXJyICE9IHZhbGlkYXRpb25FcnJvci5OT05FKSB7Ci0gICAgICAgIHJldHVybiBl
cnI7Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiB2YWxpZGF0aW9uRXJyb3IuTk9ORTsKLSAg
fTsKLQotICBWYWxpZGF0b3IucHJvdG90eXBlLnZhbGlkYXRlQXNzb2NpYXRlZEludGVyZmFjZVJl
cXVlc3RFbGVtZW50cyA9Ci0gICAgICBmdW5jdGlvbihvZmZzZXQsIG51bUVsZW1lbnRzLCBudWxs
YWJsZSkgewotICAgIHZhciBlbGVtZW50U2l6ZSA9IGludGVybmFsLkFzc29jaWF0ZWRJbnRlcmZh
Y2VSZXF1ZXN0LmVuY29kZWRTaXplOwotICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbnVtRWxlbWVu
dHM7IGkrKykgewotICAgICAgdmFyIGVsZW1lbnRPZmZzZXQgPSBvZmZzZXQgKyBpICogZWxlbWVu
dFNpemU7Ci0gICAgICB2YXIgZXJyID0gdGhpcy52YWxpZGF0ZUFzc29jaWF0ZWRJbnRlcmZhY2VS
ZXF1ZXN0KGVsZW1lbnRPZmZzZXQsCi0gICAgICAgICAgbnVsbGFibGUpOwotICAgICAgaWYgKGVy
ciAhPSB2YWxpZGF0aW9uRXJyb3IuTk9ORSkgewotICAgICAgICByZXR1cm4gZXJyOwotICAgICAg
fQotICAgIH0KLSAgICByZXR1cm4gdmFsaWRhdGlvbkVycm9yLk5PTkU7Ci0gIH07Ci0KLSAgLy8g
VGhlIGVsZW1lbnRDbGFzcyBwYXJhbWV0ZXIgaXMgdGhlIGVsZW1lbnQgdHlwZSBvZiB0aGUgZWxl
bWVudCBhcnJheXMuCi0gIFZhbGlkYXRvci5wcm90b3R5cGUudmFsaWRhdGVBcnJheUVsZW1lbnRz
ID0KLSAgICAgIGZ1bmN0aW9uKG9mZnNldCwgbnVtRWxlbWVudHMsIGVsZW1lbnRDbGFzcywgbnVs
bGFibGUsCi0gICAgICAgICAgICAgICBleHBlY3RlZERpbWVuc2lvblNpemVzLCBjdXJyZW50RGlt
ZW5zaW9uKSB7Ci0gICAgdmFyIGVsZW1lbnRTaXplID0gaW50ZXJuYWwuUG9pbnRlclRvLnByb3Rv
dHlwZS5lbmNvZGVkU2l6ZTsKLSAgICBmb3IgKHZhciBpID0gMDsgaSA8IG51bUVsZW1lbnRzOyBp
KyspIHsKLSAgICAgIHZhciBlbGVtZW50T2Zmc2V0ID0gb2Zmc2V0ICsgaSAqIGVsZW1lbnRTaXpl
OwotICAgICAgdmFyIGVyciA9IHRoaXMudmFsaWRhdGVBcnJheVBvaW50ZXIoCi0gICAgICAgICAg
ZWxlbWVudE9mZnNldCwgZWxlbWVudENsYXNzLmVuY29kZWRTaXplLCBlbGVtZW50Q2xhc3MsIG51
bGxhYmxlLAotICAgICAgICAgIGV4cGVjdGVkRGltZW5zaW9uU2l6ZXMsIGN1cnJlbnREaW1lbnNp
b24pOwotICAgICAgaWYgKGVyciAhPSB2YWxpZGF0aW9uRXJyb3IuTk9ORSkKLSAgICAgICAgcmV0
dXJuIGVycjsKLSAgICB9Ci0gICAgcmV0dXJuIHZhbGlkYXRpb25FcnJvci5OT05FOwotICB9Owot
Ci0gIFZhbGlkYXRvci5wcm90b3R5cGUudmFsaWRhdGVTdHJ1Y3RFbGVtZW50cyA9Ci0gICAgICBm
dW5jdGlvbihvZmZzZXQsIG51bUVsZW1lbnRzLCBzdHJ1Y3RDbGFzcywgbnVsbGFibGUpIHsKLSAg
ICB2YXIgZWxlbWVudFNpemUgPSBpbnRlcm5hbC5Qb2ludGVyVG8ucHJvdG90eXBlLmVuY29kZWRT
aXplOwotICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbnVtRWxlbWVudHM7IGkrKykgewotICAgICAg
dmFyIGVsZW1lbnRPZmZzZXQgPSBvZmZzZXQgKyBpICogZWxlbWVudFNpemU7Ci0gICAgICB2YXIg
ZXJyID0KLSAgICAgICAgICB0aGlzLnZhbGlkYXRlU3RydWN0UG9pbnRlcihlbGVtZW50T2Zmc2V0
LCBzdHJ1Y3RDbGFzcywgbnVsbGFibGUpOwotICAgICAgaWYgKGVyciAhPSB2YWxpZGF0aW9uRXJy
b3IuTk9ORSkKLSAgICAgICAgcmV0dXJuIGVycjsKLSAgICB9Ci0gICAgcmV0dXJuIHZhbGlkYXRp
b25FcnJvci5OT05FOwotICB9OwotCi0gIFZhbGlkYXRvci5wcm90b3R5cGUudmFsaWRhdGVFbnVt
RWxlbWVudHMgPQotICAgICAgZnVuY3Rpb24ob2Zmc2V0LCBudW1FbGVtZW50cywgZW51bUNsYXNz
KSB7Ci0gICAgdmFyIGVsZW1lbnRTaXplID0gaW50ZXJuYWwuRW51bS5wcm90b3R5cGUuZW5jb2Rl
ZFNpemU7Ci0gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBudW1FbGVtZW50czsgaSsrKSB7Ci0gICAg
ICB2YXIgZWxlbWVudE9mZnNldCA9IG9mZnNldCArIGkgKiBlbGVtZW50U2l6ZTsKLSAgICAgIHZh
ciBlcnIgPSB0aGlzLnZhbGlkYXRlRW51bShlbGVtZW50T2Zmc2V0LCBlbnVtQ2xhc3MpOwotICAg
ICAgaWYgKGVyciAhPSB2YWxpZGF0aW9uRXJyb3IuTk9ORSkKLSAgICAgICAgcmV0dXJuIGVycjsK
LSAgICB9Ci0gICAgcmV0dXJuIHZhbGlkYXRpb25FcnJvci5OT05FOwotICB9OwotCi0gIGludGVy
bmFsLnZhbGlkYXRpb25FcnJvciA9IHZhbGlkYXRpb25FcnJvcjsKLSAgaW50ZXJuYWwuVmFsaWRh
dG9yID0gVmFsaWRhdG9yOwotICBpbnRlcm5hbC5WYWxpZGF0aW9uRXJyb3JPYnNlcnZlckZvclRl
c3RpbmcgPQotICAgICAgVmFsaWRhdGlvbkVycm9yT2JzZXJ2ZXJGb3JUZXN0aW5nOwotICBpbnRl
cm5hbC5yZXBvcnRWYWxpZGF0aW9uRXJyb3IgPSByZXBvcnRWYWxpZGF0aW9uRXJyb3I7Ci0gIGlu
dGVybmFsLmlzVGVzdGluZ01vZGUgPSBpc1Rlc3RpbmdNb2RlOwotICBpbnRlcm5hbC5jbGVhclRl
c3RpbmdNb2RlID0gY2xlYXJUZXN0aW5nTW9kZTsKLX0pKCk7Ci0vLyBDb3B5cmlnaHQgMjAxNCBU
aGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlz
IHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4g
YmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLSd1c2Ugc3RyaWN0JzsKLQotKGZ1
bmN0aW9uKCkgewotICB2YXIgbW9qb21JZCA9ICdtb2pvL3B1YmxpYy9pbnRlcmZhY2VzL2JpbmRp
bmdzL2ludGVyZmFjZV9jb250cm9sX21lc3NhZ2VzLm1vam9tJzsKLSAgaWYgKG1vam8uaW50ZXJu
YWwuaXNNb2pvbUxvYWRlZChtb2pvbUlkKSkgewotICAgIGNvbnNvbGUud2FybignVGhlIGZvbGxv
d2luZyBtb2pvbSBpcyBsb2FkZWQgbXVsdGlwbGUgdGltZXM6ICcgKyBtb2pvbUlkKTsKLSAgICBy
ZXR1cm47Ci0gIH0KLSAgbW9qby5pbnRlcm5hbC5tYXJrTW9qb21Mb2FkZWQobW9qb21JZCk7Ci0g
IHZhciBiaW5kaW5ncyA9IG1vam87Ci0gIHZhciBhc3NvY2lhdGVkQmluZGluZ3MgPSBtb2pvOwot
ICB2YXIgY29kZWMgPSBtb2pvLmludGVybmFsOwotICB2YXIgdmFsaWRhdG9yID0gbW9qby5pbnRl
cm5hbDsKLQotICB2YXIgZXhwb3J0cyA9IG1vam8uaW50ZXJuYWwuZXhwb3NlTmFtZXNwYWNlKCdt
b2pvLmludGVyZmFjZUNvbnRyb2wnKTsKLQotCi0gIHZhciBrUnVuTWVzc2FnZUlkID0gMHhGRkZG
RkZGRjsKLSAgdmFyIGtSdW5PckNsb3NlUGlwZU1lc3NhZ2VJZCA9IDB4RkZGRkZGRkU7Ci0KLSAg
ZnVuY3Rpb24gUnVuTWVzc2FnZVBhcmFtcyh2YWx1ZXMpIHsKLSAgICB0aGlzLmluaXREZWZhdWx0
c18oKTsKLSAgICB0aGlzLmluaXRGaWVsZHNfKHZhbHVlcyk7Ci0gIH0KLQotCi0gIFJ1bk1lc3Nh
Z2VQYXJhbXMucHJvdG90eXBlLmluaXREZWZhdWx0c18gPSBmdW5jdGlvbigpIHsKLSAgICB0aGlz
LmlucHV0ID0gbnVsbDsKLSAgfTsKLSAgUnVuTWVzc2FnZVBhcmFtcy5wcm90b3R5cGUuaW5pdEZp
ZWxkc18gPSBmdW5jdGlvbihmaWVsZHMpIHsKLSAgICBmb3IodmFyIGZpZWxkIGluIGZpZWxkcykg
ewotICAgICAgICBpZiAodGhpcy5oYXNPd25Qcm9wZXJ0eShmaWVsZCkpCi0gICAgICAgICAgdGhp
c1tmaWVsZF0gPSBmaWVsZHNbZmllbGRdOwotICAgIH0KLSAgfTsKLQotICBSdW5NZXNzYWdlUGFy
YW1zLnZhbGlkYXRlID0gZnVuY3Rpb24obWVzc2FnZVZhbGlkYXRvciwgb2Zmc2V0KSB7Ci0gICAg
dmFyIGVycjsKLSAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0SGVhZGVy
KG9mZnNldCwgY29kZWMua1N0cnVjdEhlYWRlclNpemUpOwotICAgIGlmIChlcnIgIT09IHZhbGlk
YXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKLSAgICAgICAgcmV0dXJuIGVycjsKLQotICAgIHZh
ciBrVmVyc2lvblNpemVzID0gWwotICAgICAge3ZlcnNpb246IDAsIG51bUJ5dGVzOiAyNH0KLSAg
ICBdOwotICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RWZXJzaW9uKG9m
ZnNldCwga1ZlcnNpb25TaXplcyk7Ci0gICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRp
b25FcnJvci5OT05FKQotICAgICAgICByZXR1cm4gZXJyOwotCi0KLSAgICAvLyB2YWxpZGF0ZSBS
dW5NZXNzYWdlUGFyYW1zLmlucHV0Ci0gICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0
ZVVuaW9uKG9mZnNldCArIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgMCwgUnVuSW5wdXQsIGZh
bHNlKTsKLSAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCi0g
ICAgICAgIHJldHVybiBlcnI7Ci0KLSAgICByZXR1cm4gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJv
ci5OT05FOwotICB9OwotCi0gIFJ1bk1lc3NhZ2VQYXJhbXMuZW5jb2RlZFNpemUgPSBjb2RlYy5r
U3RydWN0SGVhZGVyU2l6ZSArIDE2OwotCi0gIFJ1bk1lc3NhZ2VQYXJhbXMuZGVjb2RlID0gZnVu
Y3Rpb24oZGVjb2RlcikgewotICAgIHZhciBwYWNrZWQ7Ci0gICAgdmFyIHZhbCA9IG5ldyBSdW5N
ZXNzYWdlUGFyYW1zKCk7Ci0gICAgdmFyIG51bWJlck9mQnl0ZXMgPSBkZWNvZGVyLnJlYWRVaW50
MzIoKTsKLSAgICB2YXIgdmVyc2lvbiA9IGRlY29kZXIucmVhZFVpbnQzMigpOwotICAgIHZhbC5p
bnB1dCA9IGRlY29kZXIuZGVjb2RlU3RydWN0KFJ1bklucHV0KTsKLSAgICByZXR1cm4gdmFsOwot
ICB9OwotCi0gIFJ1bk1lc3NhZ2VQYXJhbXMuZW5jb2RlID0gZnVuY3Rpb24oZW5jb2RlciwgdmFs
KSB7Ci0gICAgdmFyIHBhY2tlZDsKLSAgICBlbmNvZGVyLndyaXRlVWludDMyKFJ1bk1lc3NhZ2VQ
YXJhbXMuZW5jb2RlZFNpemUpOwotICAgIGVuY29kZXIud3JpdGVVaW50MzIoMCk7Ci0gICAgZW5j
b2Rlci5lbmNvZGVTdHJ1Y3QoUnVuSW5wdXQsIHZhbC5pbnB1dCk7Ci0gIH07Ci0gIGZ1bmN0aW9u
IFJ1blJlc3BvbnNlTWVzc2FnZVBhcmFtcyh2YWx1ZXMpIHsKLSAgICB0aGlzLmluaXREZWZhdWx0
c18oKTsKLSAgICB0aGlzLmluaXRGaWVsZHNfKHZhbHVlcyk7Ci0gIH0KLQotCi0gIFJ1blJlc3Bv
bnNlTWVzc2FnZVBhcmFtcy5wcm90b3R5cGUuaW5pdERlZmF1bHRzXyA9IGZ1bmN0aW9uKCkgewot
ICAgIHRoaXMub3V0cHV0ID0gbnVsbDsKLSAgfTsKLSAgUnVuUmVzcG9uc2VNZXNzYWdlUGFyYW1z
LnByb3RvdHlwZS5pbml0RmllbGRzXyA9IGZ1bmN0aW9uKGZpZWxkcykgewotICAgIGZvcih2YXIg
ZmllbGQgaW4gZmllbGRzKSB7Ci0gICAgICAgIGlmICh0aGlzLmhhc093blByb3BlcnR5KGZpZWxk
KSkKLSAgICAgICAgICB0aGlzW2ZpZWxkXSA9IGZpZWxkc1tmaWVsZF07Ci0gICAgfQotICB9Owot
Ci0gIFJ1blJlc3BvbnNlTWVzc2FnZVBhcmFtcy52YWxpZGF0ZSA9IGZ1bmN0aW9uKG1lc3NhZ2VW
YWxpZGF0b3IsIG9mZnNldCkgewotICAgIHZhciBlcnI7Ci0gICAgZXJyID0gbWVzc2FnZVZhbGlk
YXRvci52YWxpZGF0ZVN0cnVjdEhlYWRlcihvZmZzZXQsIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXpl
KTsKLSAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCi0gICAg
ICAgIHJldHVybiBlcnI7Ci0KLSAgICB2YXIga1ZlcnNpb25TaXplcyA9IFsKLSAgICAgIHt2ZXJz
aW9uOiAwLCBudW1CeXRlczogMjR9Ci0gICAgXTsKLSAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9y
LnZhbGlkYXRlU3RydWN0VmVyc2lvbihvZmZzZXQsIGtWZXJzaW9uU2l6ZXMpOwotICAgIGlmIChl
cnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKLSAgICAgICAgcmV0dXJuIGVy
cjsKLQotCi0gICAgLy8gdmFsaWRhdGUgUnVuUmVzcG9uc2VNZXNzYWdlUGFyYW1zLm91dHB1dAot
ICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVVbmlvbihvZmZzZXQgKyBjb2RlYy5r
U3RydWN0SGVhZGVyU2l6ZSArIDAsIFJ1bk91dHB1dCwgdHJ1ZSk7Ci0gICAgaWYgKGVyciAhPT0g
dmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQotICAgICAgICByZXR1cm4gZXJyOwotCi0g
ICAgcmV0dXJuIHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORTsKLSAgfTsKLQotICBSdW5S
ZXNwb25zZU1lc3NhZ2VQYXJhbXMuZW5jb2RlZFNpemUgPSBjb2RlYy5rU3RydWN0SGVhZGVyU2l6
ZSArIDE2OwotCi0gIFJ1blJlc3BvbnNlTWVzc2FnZVBhcmFtcy5kZWNvZGUgPSBmdW5jdGlvbihk
ZWNvZGVyKSB7Ci0gICAgdmFyIHBhY2tlZDsKLSAgICB2YXIgdmFsID0gbmV3IFJ1blJlc3BvbnNl
TWVzc2FnZVBhcmFtcygpOwotICAgIHZhciBudW1iZXJPZkJ5dGVzID0gZGVjb2Rlci5yZWFkVWlu
dDMyKCk7Ci0gICAgdmFyIHZlcnNpb24gPSBkZWNvZGVyLnJlYWRVaW50MzIoKTsKLSAgICB2YWwu
b3V0cHV0ID0gZGVjb2Rlci5kZWNvZGVTdHJ1Y3QoUnVuT3V0cHV0KTsKLSAgICByZXR1cm4gdmFs
OwotICB9OwotCi0gIFJ1blJlc3BvbnNlTWVzc2FnZVBhcmFtcy5lbmNvZGUgPSBmdW5jdGlvbihl
bmNvZGVyLCB2YWwpIHsKLSAgICB2YXIgcGFja2VkOwotICAgIGVuY29kZXIud3JpdGVVaW50MzIo
UnVuUmVzcG9uc2VNZXNzYWdlUGFyYW1zLmVuY29kZWRTaXplKTsKLSAgICBlbmNvZGVyLndyaXRl
VWludDMyKDApOwotICAgIGVuY29kZXIuZW5jb2RlU3RydWN0KFJ1bk91dHB1dCwgdmFsLm91dHB1
dCk7Ci0gIH07Ci0gIGZ1bmN0aW9uIFF1ZXJ5VmVyc2lvbih2YWx1ZXMpIHsKLSAgICB0aGlzLmlu
aXREZWZhdWx0c18oKTsKLSAgICB0aGlzLmluaXRGaWVsZHNfKHZhbHVlcyk7Ci0gIH0KLQotCi0g
IFF1ZXJ5VmVyc2lvbi5wcm90b3R5cGUuaW5pdERlZmF1bHRzXyA9IGZ1bmN0aW9uKCkgewotICB9
OwotICBRdWVyeVZlcnNpb24ucHJvdG90eXBlLmluaXRGaWVsZHNfID0gZnVuY3Rpb24oZmllbGRz
KSB7Ci0gICAgZm9yKHZhciBmaWVsZCBpbiBmaWVsZHMpIHsKLSAgICAgICAgaWYgKHRoaXMuaGFz
T3duUHJvcGVydHkoZmllbGQpKQotICAgICAgICAgIHRoaXNbZmllbGRdID0gZmllbGRzW2ZpZWxk
XTsKLSAgICB9Ci0gIH07Ci0KLSAgUXVlcnlWZXJzaW9uLnZhbGlkYXRlID0gZnVuY3Rpb24obWVz
c2FnZVZhbGlkYXRvciwgb2Zmc2V0KSB7Ci0gICAgdmFyIGVycjsKLSAgICBlcnIgPSBtZXNzYWdl
VmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0SGVhZGVyKG9mZnNldCwgY29kZWMua1N0cnVjdEhlYWRl
clNpemUpOwotICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkK
LSAgICAgICAgcmV0dXJuIGVycjsKLQotICAgIHZhciBrVmVyc2lvblNpemVzID0gWwotICAgICAg
e3ZlcnNpb246IDAsIG51bUJ5dGVzOiA4fQotICAgIF07Ci0gICAgZXJyID0gbWVzc2FnZVZhbGlk
YXRvci52YWxpZGF0ZVN0cnVjdFZlcnNpb24ob2Zmc2V0LCBrVmVyc2lvblNpemVzKTsKLSAgICBp
ZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCi0gICAgICAgIHJldHVy
biBlcnI7Ci0KLSAgICByZXR1cm4gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FOwotICB9
OwotCi0gIFF1ZXJ5VmVyc2lvbi5lbmNvZGVkU2l6ZSA9IGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXpl
ICsgMDsKLQotICBRdWVyeVZlcnNpb24uZGVjb2RlID0gZnVuY3Rpb24oZGVjb2RlcikgewotICAg
IHZhciBwYWNrZWQ7Ci0gICAgdmFyIHZhbCA9IG5ldyBRdWVyeVZlcnNpb24oKTsKLSAgICB2YXIg
bnVtYmVyT2ZCeXRlcyA9IGRlY29kZXIucmVhZFVpbnQzMigpOwotICAgIHZhciB2ZXJzaW9uID0g
ZGVjb2Rlci5yZWFkVWludDMyKCk7Ci0gICAgcmV0dXJuIHZhbDsKLSAgfTsKLQotICBRdWVyeVZl
cnNpb24uZW5jb2RlID0gZnVuY3Rpb24oZW5jb2RlciwgdmFsKSB7Ci0gICAgdmFyIHBhY2tlZDsK
LSAgICBlbmNvZGVyLndyaXRlVWludDMyKFF1ZXJ5VmVyc2lvbi5lbmNvZGVkU2l6ZSk7Ci0gICAg
ZW5jb2Rlci53cml0ZVVpbnQzMigwKTsKLSAgfTsKLSAgZnVuY3Rpb24gUXVlcnlWZXJzaW9uUmVz
dWx0KHZhbHVlcykgewotICAgIHRoaXMuaW5pdERlZmF1bHRzXygpOwotICAgIHRoaXMuaW5pdEZp
ZWxkc18odmFsdWVzKTsKLSAgfQotCi0KLSAgUXVlcnlWZXJzaW9uUmVzdWx0LnByb3RvdHlwZS5p
bml0RGVmYXVsdHNfID0gZnVuY3Rpb24oKSB7Ci0gICAgdGhpcy52ZXJzaW9uID0gMDsKLSAgfTsK
LSAgUXVlcnlWZXJzaW9uUmVzdWx0LnByb3RvdHlwZS5pbml0RmllbGRzXyA9IGZ1bmN0aW9uKGZp
ZWxkcykgewotICAgIGZvcih2YXIgZmllbGQgaW4gZmllbGRzKSB7Ci0gICAgICAgIGlmICh0aGlz
Lmhhc093blByb3BlcnR5KGZpZWxkKSkKLSAgICAgICAgICB0aGlzW2ZpZWxkXSA9IGZpZWxkc1tm
aWVsZF07Ci0gICAgfQotICB9OwotCi0gIFF1ZXJ5VmVyc2lvblJlc3VsdC52YWxpZGF0ZSA9IGZ1
bmN0aW9uKG1lc3NhZ2VWYWxpZGF0b3IsIG9mZnNldCkgewotICAgIHZhciBlcnI7Ci0gICAgZXJy
ID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdEhlYWRlcihvZmZzZXQsIGNvZGVjLmtT
dHJ1Y3RIZWFkZXJTaXplKTsKLSAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVy
cm9yLk5PTkUpCi0gICAgICAgIHJldHVybiBlcnI7Ci0KLSAgICB2YXIga1ZlcnNpb25TaXplcyA9
IFsKLSAgICAgIHt2ZXJzaW9uOiAwLCBudW1CeXRlczogMTZ9Ci0gICAgXTsKLSAgICBlcnIgPSBt
ZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0VmVyc2lvbihvZmZzZXQsIGtWZXJzaW9uU2l6
ZXMpOwotICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKLSAg
ICAgICAgcmV0dXJuIGVycjsKLQotCi0gICAgcmV0dXJuIHZhbGlkYXRvci52YWxpZGF0aW9uRXJy
b3IuTk9ORTsKLSAgfTsKLQotICBRdWVyeVZlcnNpb25SZXN1bHQuZW5jb2RlZFNpemUgPSBjb2Rl
Yy5rU3RydWN0SGVhZGVyU2l6ZSArIDg7Ci0KLSAgUXVlcnlWZXJzaW9uUmVzdWx0LmRlY29kZSA9
IGZ1bmN0aW9uKGRlY29kZXIpIHsKLSAgICB2YXIgcGFja2VkOwotICAgIHZhciB2YWwgPSBuZXcg
UXVlcnlWZXJzaW9uUmVzdWx0KCk7Ci0gICAgdmFyIG51bWJlck9mQnl0ZXMgPSBkZWNvZGVyLnJl
YWRVaW50MzIoKTsKLSAgICB2YXIgdmVyc2lvbiA9IGRlY29kZXIucmVhZFVpbnQzMigpOwotICAg
IHZhbC52ZXJzaW9uID0gZGVjb2Rlci5kZWNvZGVTdHJ1Y3QoY29kZWMuVWludDMyKTsKLSAgICBk
ZWNvZGVyLnNraXAoMSk7Ci0gICAgZGVjb2Rlci5za2lwKDEpOwotICAgIGRlY29kZXIuc2tpcCgx
KTsKLSAgICBkZWNvZGVyLnNraXAoMSk7Ci0gICAgcmV0dXJuIHZhbDsKLSAgfTsKLQotICBRdWVy
eVZlcnNpb25SZXN1bHQuZW5jb2RlID0gZnVuY3Rpb24oZW5jb2RlciwgdmFsKSB7Ci0gICAgdmFy
IHBhY2tlZDsKLSAgICBlbmNvZGVyLndyaXRlVWludDMyKFF1ZXJ5VmVyc2lvblJlc3VsdC5lbmNv
ZGVkU2l6ZSk7Ci0gICAgZW5jb2Rlci53cml0ZVVpbnQzMigwKTsKLSAgICBlbmNvZGVyLmVuY29k
ZVN0cnVjdChjb2RlYy5VaW50MzIsIHZhbC52ZXJzaW9uKTsKLSAgICBlbmNvZGVyLnNraXAoMSk7
Ci0gICAgZW5jb2Rlci5za2lwKDEpOwotICAgIGVuY29kZXIuc2tpcCgxKTsKLSAgICBlbmNvZGVy
LnNraXAoMSk7Ci0gIH07Ci0gIGZ1bmN0aW9uIEZsdXNoRm9yVGVzdGluZyh2YWx1ZXMpIHsKLSAg
ICB0aGlzLmluaXREZWZhdWx0c18oKTsKLSAgICB0aGlzLmluaXRGaWVsZHNfKHZhbHVlcyk7Ci0g
IH0KLQotCi0gIEZsdXNoRm9yVGVzdGluZy5wcm90b3R5cGUuaW5pdERlZmF1bHRzXyA9IGZ1bmN0
aW9uKCkgewotICB9OwotICBGbHVzaEZvclRlc3RpbmcucHJvdG90eXBlLmluaXRGaWVsZHNfID0g
ZnVuY3Rpb24oZmllbGRzKSB7Ci0gICAgZm9yKHZhciBmaWVsZCBpbiBmaWVsZHMpIHsKLSAgICAg
ICAgaWYgKHRoaXMuaGFzT3duUHJvcGVydHkoZmllbGQpKQotICAgICAgICAgIHRoaXNbZmllbGRd
ID0gZmllbGRzW2ZpZWxkXTsKLSAgICB9Ci0gIH07Ci0KLSAgRmx1c2hGb3JUZXN0aW5nLnZhbGlk
YXRlID0gZnVuY3Rpb24obWVzc2FnZVZhbGlkYXRvciwgb2Zmc2V0KSB7Ci0gICAgdmFyIGVycjsK
LSAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0SGVhZGVyKG9mZnNldCwg
Y29kZWMua1N0cnVjdEhlYWRlclNpemUpOwotICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxp
ZGF0aW9uRXJyb3IuTk9ORSkKLSAgICAgICAgcmV0dXJuIGVycjsKLQotICAgIHZhciBrVmVyc2lv
blNpemVzID0gWwotICAgICAge3ZlcnNpb246IDAsIG51bUJ5dGVzOiA4fQotICAgIF07Ci0gICAg
ZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdFZlcnNpb24ob2Zmc2V0LCBrVmVy
c2lvblNpemVzKTsKLSAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5P
TkUpCi0gICAgICAgIHJldHVybiBlcnI7Ci0KLSAgICByZXR1cm4gdmFsaWRhdG9yLnZhbGlkYXRp
b25FcnJvci5OT05FOwotICB9OwotCi0gIEZsdXNoRm9yVGVzdGluZy5lbmNvZGVkU2l6ZSA9IGNv
ZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgMDsKLQotICBGbHVzaEZvclRlc3RpbmcuZGVjb2RlID0g
ZnVuY3Rpb24oZGVjb2RlcikgewotICAgIHZhciBwYWNrZWQ7Ci0gICAgdmFyIHZhbCA9IG5ldyBG
bHVzaEZvclRlc3RpbmcoKTsKLSAgICB2YXIgbnVtYmVyT2ZCeXRlcyA9IGRlY29kZXIucmVhZFVp
bnQzMigpOwotICAgIHZhciB2ZXJzaW9uID0gZGVjb2Rlci5yZWFkVWludDMyKCk7Ci0gICAgcmV0
dXJuIHZhbDsKLSAgfTsKLQotICBGbHVzaEZvclRlc3RpbmcuZW5jb2RlID0gZnVuY3Rpb24oZW5j
b2RlciwgdmFsKSB7Ci0gICAgdmFyIHBhY2tlZDsKLSAgICBlbmNvZGVyLndyaXRlVWludDMyKEZs
dXNoRm9yVGVzdGluZy5lbmNvZGVkU2l6ZSk7Ci0gICAgZW5jb2Rlci53cml0ZVVpbnQzMigwKTsK
LSAgfTsKLSAgZnVuY3Rpb24gUnVuT3JDbG9zZVBpcGVNZXNzYWdlUGFyYW1zKHZhbHVlcykgewot
ICAgIHRoaXMuaW5pdERlZmF1bHRzXygpOwotICAgIHRoaXMuaW5pdEZpZWxkc18odmFsdWVzKTsK
LSAgfQotCi0KLSAgUnVuT3JDbG9zZVBpcGVNZXNzYWdlUGFyYW1zLnByb3RvdHlwZS5pbml0RGVm
YXVsdHNfID0gZnVuY3Rpb24oKSB7Ci0gICAgdGhpcy5pbnB1dCA9IG51bGw7Ci0gIH07Ci0gIFJ1
bk9yQ2xvc2VQaXBlTWVzc2FnZVBhcmFtcy5wcm90b3R5cGUuaW5pdEZpZWxkc18gPSBmdW5jdGlv
bihmaWVsZHMpIHsKLSAgICBmb3IodmFyIGZpZWxkIGluIGZpZWxkcykgewotICAgICAgICBpZiAo
dGhpcy5oYXNPd25Qcm9wZXJ0eShmaWVsZCkpCi0gICAgICAgICAgdGhpc1tmaWVsZF0gPSBmaWVs
ZHNbZmllbGRdOwotICAgIH0KLSAgfTsKLQotICBSdW5PckNsb3NlUGlwZU1lc3NhZ2VQYXJhbXMu
dmFsaWRhdGUgPSBmdW5jdGlvbihtZXNzYWdlVmFsaWRhdG9yLCBvZmZzZXQpIHsKLSAgICB2YXIg
ZXJyOwotICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RIZWFkZXIob2Zm
c2V0LCBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSk7Ci0gICAgaWYgKGVyciAhPT0gdmFsaWRhdG9y
LnZhbGlkYXRpb25FcnJvci5OT05FKQotICAgICAgICByZXR1cm4gZXJyOwotCi0gICAgdmFyIGtW
ZXJzaW9uU2l6ZXMgPSBbCi0gICAgICB7dmVyc2lvbjogMCwgbnVtQnl0ZXM6IDI0fQotICAgIF07
Ci0gICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdFZlcnNpb24ob2Zmc2V0
LCBrVmVyc2lvblNpemVzKTsKLSAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVy
cm9yLk5PTkUpCi0gICAgICAgIHJldHVybiBlcnI7Ci0KLQotICAgIC8vIHZhbGlkYXRlIFJ1bk9y
Q2xvc2VQaXBlTWVzc2FnZVBhcmFtcy5pbnB1dAotICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3Iu
dmFsaWRhdGVVbmlvbihvZmZzZXQgKyBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDAsIFJ1bk9y
Q2xvc2VQaXBlSW5wdXQsIGZhbHNlKTsKLSAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRh
dGlvbkVycm9yLk5PTkUpCi0gICAgICAgIHJldHVybiBlcnI7Ci0KLSAgICByZXR1cm4gdmFsaWRh
dG9yLnZhbGlkYXRpb25FcnJvci5OT05FOwotICB9OwotCi0gIFJ1bk9yQ2xvc2VQaXBlTWVzc2Fn
ZVBhcmFtcy5lbmNvZGVkU2l6ZSA9IGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgMTY7Ci0KLSAg
UnVuT3JDbG9zZVBpcGVNZXNzYWdlUGFyYW1zLmRlY29kZSA9IGZ1bmN0aW9uKGRlY29kZXIpIHsK
LSAgICB2YXIgcGFja2VkOwotICAgIHZhciB2YWwgPSBuZXcgUnVuT3JDbG9zZVBpcGVNZXNzYWdl
UGFyYW1zKCk7Ci0gICAgdmFyIG51bWJlck9mQnl0ZXMgPSBkZWNvZGVyLnJlYWRVaW50MzIoKTsK
LSAgICB2YXIgdmVyc2lvbiA9IGRlY29kZXIucmVhZFVpbnQzMigpOwotICAgIHZhbC5pbnB1dCA9
IGRlY29kZXIuZGVjb2RlU3RydWN0KFJ1bk9yQ2xvc2VQaXBlSW5wdXQpOwotICAgIHJldHVybiB2
YWw7Ci0gIH07Ci0KLSAgUnVuT3JDbG9zZVBpcGVNZXNzYWdlUGFyYW1zLmVuY29kZSA9IGZ1bmN0
aW9uKGVuY29kZXIsIHZhbCkgewotICAgIHZhciBwYWNrZWQ7Ci0gICAgZW5jb2Rlci53cml0ZVVp
bnQzMihSdW5PckNsb3NlUGlwZU1lc3NhZ2VQYXJhbXMuZW5jb2RlZFNpemUpOwotICAgIGVuY29k
ZXIud3JpdGVVaW50MzIoMCk7Ci0gICAgZW5jb2Rlci5lbmNvZGVTdHJ1Y3QoUnVuT3JDbG9zZVBp
cGVJbnB1dCwgdmFsLmlucHV0KTsKLSAgfTsKLSAgZnVuY3Rpb24gUmVxdWlyZVZlcnNpb24odmFs
dWVzKSB7Ci0gICAgdGhpcy5pbml0RGVmYXVsdHNfKCk7Ci0gICAgdGhpcy5pbml0RmllbGRzXyh2
YWx1ZXMpOwotICB9Ci0KLQotICBSZXF1aXJlVmVyc2lvbi5wcm90b3R5cGUuaW5pdERlZmF1bHRz
XyA9IGZ1bmN0aW9uKCkgewotICAgIHRoaXMudmVyc2lvbiA9IDA7Ci0gIH07Ci0gIFJlcXVpcmVW
ZXJzaW9uLnByb3RvdHlwZS5pbml0RmllbGRzXyA9IGZ1bmN0aW9uKGZpZWxkcykgewotICAgIGZv
cih2YXIgZmllbGQgaW4gZmllbGRzKSB7Ci0gICAgICAgIGlmICh0aGlzLmhhc093blByb3BlcnR5
KGZpZWxkKSkKLSAgICAgICAgICB0aGlzW2ZpZWxkXSA9IGZpZWxkc1tmaWVsZF07Ci0gICAgfQot
ICB9OwotCi0gIFJlcXVpcmVWZXJzaW9uLnZhbGlkYXRlID0gZnVuY3Rpb24obWVzc2FnZVZhbGlk
YXRvciwgb2Zmc2V0KSB7Ci0gICAgdmFyIGVycjsKLSAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9y
LnZhbGlkYXRlU3RydWN0SGVhZGVyKG9mZnNldCwgY29kZWMua1N0cnVjdEhlYWRlclNpemUpOwot
ICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKLSAgICAgICAg
cmV0dXJuIGVycjsKLQotICAgIHZhciBrVmVyc2lvblNpemVzID0gWwotICAgICAge3ZlcnNpb246
IDAsIG51bUJ5dGVzOiAxNn0KLSAgICBdOwotICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFs
aWRhdGVTdHJ1Y3RWZXJzaW9uKG9mZnNldCwga1ZlcnNpb25TaXplcyk7Ci0gICAgaWYgKGVyciAh
PT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQotICAgICAgICByZXR1cm4gZXJyOwot
Ci0KLSAgICByZXR1cm4gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FOwotICB9OwotCi0g
IFJlcXVpcmVWZXJzaW9uLmVuY29kZWRTaXplID0gY29kZWMua1N0cnVjdEhlYWRlclNpemUgKyA4
OwotCi0gIFJlcXVpcmVWZXJzaW9uLmRlY29kZSA9IGZ1bmN0aW9uKGRlY29kZXIpIHsKLSAgICB2
YXIgcGFja2VkOwotICAgIHZhciB2YWwgPSBuZXcgUmVxdWlyZVZlcnNpb24oKTsKLSAgICB2YXIg
bnVtYmVyT2ZCeXRlcyA9IGRlY29kZXIucmVhZFVpbnQzMigpOwotICAgIHZhciB2ZXJzaW9uID0g
ZGVjb2Rlci5yZWFkVWludDMyKCk7Ci0gICAgdmFsLnZlcnNpb24gPSBkZWNvZGVyLmRlY29kZVN0
cnVjdChjb2RlYy5VaW50MzIpOwotICAgIGRlY29kZXIuc2tpcCgxKTsKLSAgICBkZWNvZGVyLnNr
aXAoMSk7Ci0gICAgZGVjb2Rlci5za2lwKDEpOwotICAgIGRlY29kZXIuc2tpcCgxKTsKLSAgICBy
ZXR1cm4gdmFsOwotICB9OwotCi0gIFJlcXVpcmVWZXJzaW9uLmVuY29kZSA9IGZ1bmN0aW9uKGVu
Y29kZXIsIHZhbCkgewotICAgIHZhciBwYWNrZWQ7Ci0gICAgZW5jb2Rlci53cml0ZVVpbnQzMihS
ZXF1aXJlVmVyc2lvbi5lbmNvZGVkU2l6ZSk7Ci0gICAgZW5jb2Rlci53cml0ZVVpbnQzMigwKTsK
LSAgICBlbmNvZGVyLmVuY29kZVN0cnVjdChjb2RlYy5VaW50MzIsIHZhbC52ZXJzaW9uKTsKLSAg
ICBlbmNvZGVyLnNraXAoMSk7Ci0gICAgZW5jb2Rlci5za2lwKDEpOwotICAgIGVuY29kZXIuc2tp
cCgxKTsKLSAgICBlbmNvZGVyLnNraXAoMSk7Ci0gIH07Ci0KLSAgZnVuY3Rpb24gUnVuSW5wdXQo
dmFsdWUpIHsKLSAgICB0aGlzLmluaXREZWZhdWx0XygpOwotICAgIHRoaXMuaW5pdFZhbHVlXyh2
YWx1ZSk7Ci0gIH0KLQotCi0gIFJ1bklucHV0LlRhZ3MgPSB7Ci0gICAgcXVlcnlWZXJzaW9uOiAw
LAotICAgIGZsdXNoRm9yVGVzdGluZzogMSwKLSAgfTsKLQotICBSdW5JbnB1dC5wcm90b3R5cGUu
aW5pdERlZmF1bHRfID0gZnVuY3Rpb24oKSB7Ci0gICAgdGhpcy4kZGF0YSA9IG51bGw7Ci0gICAg
dGhpcy4kdGFnID0gdW5kZWZpbmVkOwotICB9Ci0KLSAgUnVuSW5wdXQucHJvdG90eXBlLmluaXRW
YWx1ZV8gPSBmdW5jdGlvbih2YWx1ZSkgewotICAgIGlmICh2YWx1ZSA9PSB1bmRlZmluZWQpIHsK
LSAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICB2YXIga2V5cyA9IE9iamVjdC5rZXlzKHZhbHVl
KTsKLSAgICBpZiAoa2V5cy5sZW5ndGggPT0gMCkgewotICAgICAgcmV0dXJuOwotICAgIH0KLQot
ICAgIGlmIChrZXlzLmxlbmd0aCA+IDEpIHsKLSAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoIllv
dSBtYXkgc2V0IG9ubHkgb25lIG1lbWJlciBvbiBhIHVuaW9uLiIpOwotICAgIH0KLQotICAgIHZh
ciBmaWVsZHMgPSBbCi0gICAgICAgICJxdWVyeVZlcnNpb24iLAotICAgICAgICAiZmx1c2hGb3JU
ZXN0aW5nIiwKLSAgICBdOwotCi0gICAgaWYgKGZpZWxkcy5pbmRleE9mKGtleXNbMF0pIDwgMCkg
ewotICAgICAgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKGtleXNbMF0gKyAiIGlzIG5vdCBhIFJ1
bklucHV0IG1lbWJlci4iKTsKLQotICAgIH0KLQotICAgIHRoaXNba2V5c1swXV0gPSB2YWx1ZVtr
ZXlzWzBdXTsKLSAgfQotICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUnVuSW5wdXQucHJvdG90eXBl
LCAicXVlcnlWZXJzaW9uIiwgewotICAgIGdldDogZnVuY3Rpb24oKSB7Ci0gICAgICBpZiAodGhp
cy4kdGFnICE9IFJ1bklucHV0LlRhZ3MucXVlcnlWZXJzaW9uKSB7Ci0gICAgICAgIHRocm93IG5l
dyBSZWZlcmVuY2VFcnJvcigKLSAgICAgICAgICAgICJSdW5JbnB1dC5xdWVyeVZlcnNpb24gaXMg
bm90IGN1cnJlbnRseSBzZXQuIik7Ci0gICAgICB9Ci0gICAgICByZXR1cm4gdGhpcy4kZGF0YTsK
LSAgICB9LAotCi0gICAgc2V0OiBmdW5jdGlvbih2YWx1ZSkgewotICAgICAgdGhpcy4kdGFnID0g
UnVuSW5wdXQuVGFncy5xdWVyeVZlcnNpb247Ci0gICAgICB0aGlzLiRkYXRhID0gdmFsdWU7Ci0g
ICAgfQotICB9KTsKLSAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFJ1bklucHV0LnByb3RvdHlwZSwg
ImZsdXNoRm9yVGVzdGluZyIsIHsKLSAgICBnZXQ6IGZ1bmN0aW9uKCkgewotICAgICAgaWYgKHRo
aXMuJHRhZyAhPSBSdW5JbnB1dC5UYWdzLmZsdXNoRm9yVGVzdGluZykgewotICAgICAgICB0aHJv
dyBuZXcgUmVmZXJlbmNlRXJyb3IoCi0gICAgICAgICAgICAiUnVuSW5wdXQuZmx1c2hGb3JUZXN0
aW5nIGlzIG5vdCBjdXJyZW50bHkgc2V0LiIpOwotICAgICAgfQotICAgICAgcmV0dXJuIHRoaXMu
JGRhdGE7Ci0gICAgfSwKLQotICAgIHNldDogZnVuY3Rpb24odmFsdWUpIHsKLSAgICAgIHRoaXMu
JHRhZyA9IFJ1bklucHV0LlRhZ3MuZmx1c2hGb3JUZXN0aW5nOwotICAgICAgdGhpcy4kZGF0YSA9
IHZhbHVlOwotICAgIH0KLSAgfSk7Ci0KLQotICAgIFJ1bklucHV0LmVuY29kZSA9IGZ1bmN0aW9u
KGVuY29kZXIsIHZhbCkgewotICAgICAgaWYgKHZhbCA9PSBudWxsKSB7Ci0gICAgICAgIGVuY29k
ZXIud3JpdGVVaW50NjQoMCk7Ci0gICAgICAgIGVuY29kZXIud3JpdGVVaW50NjQoMCk7Ci0gICAg
ICAgIHJldHVybjsKLSAgICAgIH0KLSAgICAgIGlmICh2YWwuJHRhZyA9PSB1bmRlZmluZWQpIHsK
LSAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGVuY29kZSB1bmlvbnMgd2l0aCBh
biB1bmtub3duIG1lbWJlciBzZXQuIik7Ci0gICAgICB9Ci0KLSAgICAgIGVuY29kZXIud3JpdGVV
aW50MzIoMTYpOwotICAgICAgZW5jb2Rlci53cml0ZVVpbnQzMih2YWwuJHRhZyk7Ci0gICAgICBz
d2l0Y2ggKHZhbC4kdGFnKSB7Ci0gICAgICAgIGNhc2UgUnVuSW5wdXQuVGFncy5xdWVyeVZlcnNp
b246Ci0gICAgICAgICAgZW5jb2Rlci5lbmNvZGVTdHJ1Y3RQb2ludGVyKFF1ZXJ5VmVyc2lvbiwg
dmFsLnF1ZXJ5VmVyc2lvbik7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgUnVuSW5w
dXQuVGFncy5mbHVzaEZvclRlc3Rpbmc6Ci0gICAgICAgICAgZW5jb2Rlci5lbmNvZGVTdHJ1Y3RQ
b2ludGVyKEZsdXNoRm9yVGVzdGluZywgdmFsLmZsdXNoRm9yVGVzdGluZyk7Ci0gICAgICAgICAg
YnJlYWs7Ci0gICAgICB9Ci0gICAgICBlbmNvZGVyLmFsaWduKCk7Ci0gICAgfTsKLQotCi0gICAg
UnVuSW5wdXQuZGVjb2RlID0gZnVuY3Rpb24oZGVjb2RlcikgewotICAgICAgdmFyIHNpemUgPSBk
ZWNvZGVyLnJlYWRVaW50MzIoKTsKLSAgICAgIGlmIChzaXplID09IDApIHsKLSAgICAgICAgZGVj
b2Rlci5yZWFkVWludDMyKCk7Ci0gICAgICAgIGRlY29kZXIucmVhZFVpbnQ2NCgpOwotICAgICAg
ICByZXR1cm4gbnVsbDsKLSAgICAgIH0KLQotICAgICAgdmFyIHJlc3VsdCA9IG5ldyBSdW5JbnB1
dCgpOwotICAgICAgdmFyIHRhZyA9IGRlY29kZXIucmVhZFVpbnQzMigpOwotICAgICAgc3dpdGNo
ICh0YWcpIHsKLSAgICAgICAgY2FzZSBSdW5JbnB1dC5UYWdzLnF1ZXJ5VmVyc2lvbjoKLSAgICAg
ICAgICByZXN1bHQucXVlcnlWZXJzaW9uID0gZGVjb2Rlci5kZWNvZGVTdHJ1Y3RQb2ludGVyKFF1
ZXJ5VmVyc2lvbik7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgUnVuSW5wdXQuVGFn
cy5mbHVzaEZvclRlc3Rpbmc6Ci0gICAgICAgICAgcmVzdWx0LmZsdXNoRm9yVGVzdGluZyA9IGRl
Y29kZXIuZGVjb2RlU3RydWN0UG9pbnRlcihGbHVzaEZvclRlc3RpbmcpOwotICAgICAgICAgIGJy
ZWFrOwotICAgICAgfQotICAgICAgZGVjb2Rlci5hbGlnbigpOwotCi0gICAgICByZXR1cm4gcmVz
dWx0OwotICAgIH07Ci0KLQotICAgIFJ1bklucHV0LnZhbGlkYXRlID0gZnVuY3Rpb24obWVzc2Fn
ZVZhbGlkYXRvciwgb2Zmc2V0KSB7Ci0gICAgICB2YXIgc2l6ZSA9IG1lc3NhZ2VWYWxpZGF0b3Iu
ZGVjb2RlVW5pb25TaXplKG9mZnNldCk7Ci0gICAgICBpZiAoc2l6ZSAhPSAxNikgewotICAgICAg
ICByZXR1cm4gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5JTlZBTElEX1VOSU9OX1NJWkU7Ci0g
ICAgICB9Ci0KLSAgICAgIHZhciB0YWcgPSBtZXNzYWdlVmFsaWRhdG9yLmRlY29kZVVuaW9uVGFn
KG9mZnNldCk7Ci0gICAgICB2YXIgZGF0YV9vZmZzZXQgPSBvZmZzZXQgKyA4OwotICAgICAgdmFy
IGVycjsKLSAgICAgIHN3aXRjaCAodGFnKSB7Ci0gICAgICAgIGNhc2UgUnVuSW5wdXQuVGFncy5x
dWVyeVZlcnNpb246Ci0gICAgICAgICAgCi0KLSAgICAvLyB2YWxpZGF0ZSBSdW5JbnB1dC5xdWVy
eVZlcnNpb24KLSAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0UG9pbnRl
cihkYXRhX29mZnNldCwgUXVlcnlWZXJzaW9uLCBmYWxzZSk7Ci0gICAgaWYgKGVyciAhPT0gdmFs
aWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQotICAgICAgICByZXR1cm4gZXJyOwotICAgICAg
ICAgIGJyZWFrOwotICAgICAgICBjYXNlIFJ1bklucHV0LlRhZ3MuZmx1c2hGb3JUZXN0aW5nOgot
ICAgICAgICAgIAotCi0gICAgLy8gdmFsaWRhdGUgUnVuSW5wdXQuZmx1c2hGb3JUZXN0aW5nCi0g
ICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdFBvaW50ZXIoZGF0YV9vZmZz
ZXQsIEZsdXNoRm9yVGVzdGluZywgZmFsc2UpOwotICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52
YWxpZGF0aW9uRXJyb3IuTk9ORSkKLSAgICAgICAgcmV0dXJuIGVycjsKLSAgICAgICAgICBicmVh
azsKLSAgICAgIH0KLQotICAgICAgcmV0dXJuIHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9O
RTsKLSAgICB9OwotCi0gIFJ1bklucHV0LmVuY29kZWRTaXplID0gMTY7Ci0KLSAgZnVuY3Rpb24g
UnVuT3V0cHV0KHZhbHVlKSB7Ci0gICAgdGhpcy5pbml0RGVmYXVsdF8oKTsKLSAgICB0aGlzLmlu
aXRWYWx1ZV8odmFsdWUpOwotICB9Ci0KLQotICBSdW5PdXRwdXQuVGFncyA9IHsKLSAgICBxdWVy
eVZlcnNpb25SZXN1bHQ6IDAsCi0gIH07Ci0KLSAgUnVuT3V0cHV0LnByb3RvdHlwZS5pbml0RGVm
YXVsdF8gPSBmdW5jdGlvbigpIHsKLSAgICB0aGlzLiRkYXRhID0gbnVsbDsKLSAgICB0aGlzLiR0
YWcgPSB1bmRlZmluZWQ7Ci0gIH0KLQotICBSdW5PdXRwdXQucHJvdG90eXBlLmluaXRWYWx1ZV8g
PSBmdW5jdGlvbih2YWx1ZSkgewotICAgIGlmICh2YWx1ZSA9PSB1bmRlZmluZWQpIHsKLSAgICAg
IHJldHVybjsKLSAgICB9Ci0KLSAgICB2YXIga2V5cyA9IE9iamVjdC5rZXlzKHZhbHVlKTsKLSAg
ICBpZiAoa2V5cy5sZW5ndGggPT0gMCkgewotICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlm
IChrZXlzLmxlbmd0aCA+IDEpIHsKLSAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoIllvdSBtYXkg
c2V0IG9ubHkgb25lIG1lbWJlciBvbiBhIHVuaW9uLiIpOwotICAgIH0KLQotICAgIHZhciBmaWVs
ZHMgPSBbCi0gICAgICAgICJxdWVyeVZlcnNpb25SZXN1bHQiLAotICAgIF07Ci0KLSAgICBpZiAo
ZmllbGRzLmluZGV4T2Yoa2V5c1swXSkgPCAwKSB7Ci0gICAgICB0aHJvdyBuZXcgUmVmZXJlbmNl
RXJyb3Ioa2V5c1swXSArICIgaXMgbm90IGEgUnVuT3V0cHV0IG1lbWJlci4iKTsKLQotICAgIH0K
LQotICAgIHRoaXNba2V5c1swXV0gPSB2YWx1ZVtrZXlzWzBdXTsKLSAgfQotICBPYmplY3QuZGVm
aW5lUHJvcGVydHkoUnVuT3V0cHV0LnByb3RvdHlwZSwgInF1ZXJ5VmVyc2lvblJlc3VsdCIsIHsK
LSAgICBnZXQ6IGZ1bmN0aW9uKCkgewotICAgICAgaWYgKHRoaXMuJHRhZyAhPSBSdW5PdXRwdXQu
VGFncy5xdWVyeVZlcnNpb25SZXN1bHQpIHsKLSAgICAgICAgdGhyb3cgbmV3IFJlZmVyZW5jZUVy
cm9yKAotICAgICAgICAgICAgIlJ1bk91dHB1dC5xdWVyeVZlcnNpb25SZXN1bHQgaXMgbm90IGN1
cnJlbnRseSBzZXQuIik7Ci0gICAgICB9Ci0gICAgICByZXR1cm4gdGhpcy4kZGF0YTsKLSAgICB9
LAotCi0gICAgc2V0OiBmdW5jdGlvbih2YWx1ZSkgewotICAgICAgdGhpcy4kdGFnID0gUnVuT3V0
cHV0LlRhZ3MucXVlcnlWZXJzaW9uUmVzdWx0OwotICAgICAgdGhpcy4kZGF0YSA9IHZhbHVlOwot
ICAgIH0KLSAgfSk7Ci0KLQotICAgIFJ1bk91dHB1dC5lbmNvZGUgPSBmdW5jdGlvbihlbmNvZGVy
LCB2YWwpIHsKLSAgICAgIGlmICh2YWwgPT0gbnVsbCkgewotICAgICAgICBlbmNvZGVyLndyaXRl
VWludDY0KDApOwotICAgICAgICBlbmNvZGVyLndyaXRlVWludDY0KDApOwotICAgICAgICByZXR1
cm47Ci0gICAgICB9Ci0gICAgICBpZiAodmFsLiR0YWcgPT0gdW5kZWZpbmVkKSB7Ci0gICAgICAg
IHRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBlbmNvZGUgdW5pb25zIHdpdGggYW4gdW5rbm93
biBtZW1iZXIgc2V0LiIpOwotICAgICAgfQotCi0gICAgICBlbmNvZGVyLndyaXRlVWludDMyKDE2
KTsKLSAgICAgIGVuY29kZXIud3JpdGVVaW50MzIodmFsLiR0YWcpOwotICAgICAgc3dpdGNoICh2
YWwuJHRhZykgewotICAgICAgICBjYXNlIFJ1bk91dHB1dC5UYWdzLnF1ZXJ5VmVyc2lvblJlc3Vs
dDoKLSAgICAgICAgICBlbmNvZGVyLmVuY29kZVN0cnVjdFBvaW50ZXIoUXVlcnlWZXJzaW9uUmVz
dWx0LCB2YWwucXVlcnlWZXJzaW9uUmVzdWx0KTsKLSAgICAgICAgICBicmVhazsKLSAgICAgIH0K
LSAgICAgIGVuY29kZXIuYWxpZ24oKTsKLSAgICB9OwotCi0KLSAgICBSdW5PdXRwdXQuZGVjb2Rl
ID0gZnVuY3Rpb24oZGVjb2RlcikgewotICAgICAgdmFyIHNpemUgPSBkZWNvZGVyLnJlYWRVaW50
MzIoKTsKLSAgICAgIGlmIChzaXplID09IDApIHsKLSAgICAgICAgZGVjb2Rlci5yZWFkVWludDMy
KCk7Ci0gICAgICAgIGRlY29kZXIucmVhZFVpbnQ2NCgpOwotICAgICAgICByZXR1cm4gbnVsbDsK
LSAgICAgIH0KLQotICAgICAgdmFyIHJlc3VsdCA9IG5ldyBSdW5PdXRwdXQoKTsKLSAgICAgIHZh
ciB0YWcgPSBkZWNvZGVyLnJlYWRVaW50MzIoKTsKLSAgICAgIHN3aXRjaCAodGFnKSB7Ci0gICAg
ICAgIGNhc2UgUnVuT3V0cHV0LlRhZ3MucXVlcnlWZXJzaW9uUmVzdWx0OgotICAgICAgICAgIHJl
c3VsdC5xdWVyeVZlcnNpb25SZXN1bHQgPSBkZWNvZGVyLmRlY29kZVN0cnVjdFBvaW50ZXIoUXVl
cnlWZXJzaW9uUmVzdWx0KTsKLSAgICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICAgIGRlY29k
ZXIuYWxpZ24oKTsKLQotICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9OwotCi0KLSAgICBSdW5P
dXRwdXQudmFsaWRhdGUgPSBmdW5jdGlvbihtZXNzYWdlVmFsaWRhdG9yLCBvZmZzZXQpIHsKLSAg
ICAgIHZhciBzaXplID0gbWVzc2FnZVZhbGlkYXRvci5kZWNvZGVVbmlvblNpemUob2Zmc2V0KTsK
LSAgICAgIGlmIChzaXplICE9IDE2KSB7Ci0gICAgICAgIHJldHVybiB2YWxpZGF0b3IudmFsaWRh
dGlvbkVycm9yLklOVkFMSURfVU5JT05fU0laRTsKLSAgICAgIH0KLQotICAgICAgdmFyIHRhZyA9
IG1lc3NhZ2VWYWxpZGF0b3IuZGVjb2RlVW5pb25UYWcob2Zmc2V0KTsKLSAgICAgIHZhciBkYXRh
X29mZnNldCA9IG9mZnNldCArIDg7Ci0gICAgICB2YXIgZXJyOwotICAgICAgc3dpdGNoICh0YWcp
IHsKLSAgICAgICAgY2FzZSBSdW5PdXRwdXQuVGFncy5xdWVyeVZlcnNpb25SZXN1bHQ6Ci0gICAg
ICAgICAgCi0KLSAgICAvLyB2YWxpZGF0ZSBSdW5PdXRwdXQucXVlcnlWZXJzaW9uUmVzdWx0Ci0g
ICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdFBvaW50ZXIoZGF0YV9vZmZz
ZXQsIFF1ZXJ5VmVyc2lvblJlc3VsdCwgZmFsc2UpOwotICAgIGlmIChlcnIgIT09IHZhbGlkYXRv
ci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKLSAgICAgICAgcmV0dXJuIGVycjsKLSAgICAgICAgICBi
cmVhazsKLSAgICAgIH0KLQotICAgICAgcmV0dXJuIHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3Iu
Tk9ORTsKLSAgICB9OwotCi0gIFJ1bk91dHB1dC5lbmNvZGVkU2l6ZSA9IDE2OwotCi0gIGZ1bmN0
aW9uIFJ1bk9yQ2xvc2VQaXBlSW5wdXQodmFsdWUpIHsKLSAgICB0aGlzLmluaXREZWZhdWx0Xygp
OwotICAgIHRoaXMuaW5pdFZhbHVlXyh2YWx1ZSk7Ci0gIH0KLQotCi0gIFJ1bk9yQ2xvc2VQaXBl
SW5wdXQuVGFncyA9IHsKLSAgICByZXF1aXJlVmVyc2lvbjogMCwKLSAgfTsKLQotICBSdW5PckNs
b3NlUGlwZUlucHV0LnByb3RvdHlwZS5pbml0RGVmYXVsdF8gPSBmdW5jdGlvbigpIHsKLSAgICB0
aGlzLiRkYXRhID0gbnVsbDsKLSAgICB0aGlzLiR0YWcgPSB1bmRlZmluZWQ7Ci0gIH0KLQotICBS
dW5PckNsb3NlUGlwZUlucHV0LnByb3RvdHlwZS5pbml0VmFsdWVfID0gZnVuY3Rpb24odmFsdWUp
IHsKLSAgICBpZiAodmFsdWUgPT0gdW5kZWZpbmVkKSB7Ci0gICAgICByZXR1cm47Ci0gICAgfQot
Ci0gICAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyh2YWx1ZSk7Ci0gICAgaWYgKGtleXMubGVuZ3Ro
ID09IDApIHsKLSAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAoa2V5cy5sZW5ndGggPiAx
KSB7Ci0gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCJZb3UgbWF5IHNldCBvbmx5IG9uZSBtZW1i
ZXIgb24gYSB1bmlvbi4iKTsKLSAgICB9Ci0KLSAgICB2YXIgZmllbGRzID0gWwotICAgICAgICAi
cmVxdWlyZVZlcnNpb24iLAotICAgIF07Ci0KLSAgICBpZiAoZmllbGRzLmluZGV4T2Yoa2V5c1sw
XSkgPCAwKSB7Ci0gICAgICB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3Ioa2V5c1swXSArICIgaXMg
bm90IGEgUnVuT3JDbG9zZVBpcGVJbnB1dCBtZW1iZXIuIik7Ci0KLSAgICB9Ci0KLSAgICB0aGlz
W2tleXNbMF1dID0gdmFsdWVba2V5c1swXV07Ci0gIH0KLSAgT2JqZWN0LmRlZmluZVByb3BlcnR5
KFJ1bk9yQ2xvc2VQaXBlSW5wdXQucHJvdG90eXBlLCAicmVxdWlyZVZlcnNpb24iLCB7Ci0gICAg
Z2V0OiBmdW5jdGlvbigpIHsKLSAgICAgIGlmICh0aGlzLiR0YWcgIT0gUnVuT3JDbG9zZVBpcGVJ
bnB1dC5UYWdzLnJlcXVpcmVWZXJzaW9uKSB7Ci0gICAgICAgIHRocm93IG5ldyBSZWZlcmVuY2VF
cnJvcigKLSAgICAgICAgICAgICJSdW5PckNsb3NlUGlwZUlucHV0LnJlcXVpcmVWZXJzaW9uIGlz
IG5vdCBjdXJyZW50bHkgc2V0LiIpOwotICAgICAgfQotICAgICAgcmV0dXJuIHRoaXMuJGRhdGE7
Ci0gICAgfSwKLQotICAgIHNldDogZnVuY3Rpb24odmFsdWUpIHsKLSAgICAgIHRoaXMuJHRhZyA9
IFJ1bk9yQ2xvc2VQaXBlSW5wdXQuVGFncy5yZXF1aXJlVmVyc2lvbjsKLSAgICAgIHRoaXMuJGRh
dGEgPSB2YWx1ZTsKLSAgICB9Ci0gIH0pOwotCi0KLSAgICBSdW5PckNsb3NlUGlwZUlucHV0LmVu
Y29kZSA9IGZ1bmN0aW9uKGVuY29kZXIsIHZhbCkgewotICAgICAgaWYgKHZhbCA9PSBudWxsKSB7
Ci0gICAgICAgIGVuY29kZXIud3JpdGVVaW50NjQoMCk7Ci0gICAgICAgIGVuY29kZXIud3JpdGVV
aW50NjQoMCk7Ci0gICAgICAgIHJldHVybjsKLSAgICAgIH0KLSAgICAgIGlmICh2YWwuJHRhZyA9
PSB1bmRlZmluZWQpIHsKLSAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGVuY29k
ZSB1bmlvbnMgd2l0aCBhbiB1bmtub3duIG1lbWJlciBzZXQuIik7Ci0gICAgICB9Ci0KLSAgICAg
IGVuY29kZXIud3JpdGVVaW50MzIoMTYpOwotICAgICAgZW5jb2Rlci53cml0ZVVpbnQzMih2YWwu
JHRhZyk7Ci0gICAgICBzd2l0Y2ggKHZhbC4kdGFnKSB7Ci0gICAgICAgIGNhc2UgUnVuT3JDbG9z
ZVBpcGVJbnB1dC5UYWdzLnJlcXVpcmVWZXJzaW9uOgotICAgICAgICAgIGVuY29kZXIuZW5jb2Rl
U3RydWN0UG9pbnRlcihSZXF1aXJlVmVyc2lvbiwgdmFsLnJlcXVpcmVWZXJzaW9uKTsKLSAgICAg
ICAgICBicmVhazsKLSAgICAgIH0KLSAgICAgIGVuY29kZXIuYWxpZ24oKTsKLSAgICB9OwotCi0K
LSAgICBSdW5PckNsb3NlUGlwZUlucHV0LmRlY29kZSA9IGZ1bmN0aW9uKGRlY29kZXIpIHsKLSAg
ICAgIHZhciBzaXplID0gZGVjb2Rlci5yZWFkVWludDMyKCk7Ci0gICAgICBpZiAoc2l6ZSA9PSAw
KSB7Ci0gICAgICAgIGRlY29kZXIucmVhZFVpbnQzMigpOwotICAgICAgICBkZWNvZGVyLnJlYWRV
aW50NjQoKTsKLSAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICB9Ci0KLSAgICAgIHZhciByZXN1
bHQgPSBuZXcgUnVuT3JDbG9zZVBpcGVJbnB1dCgpOwotICAgICAgdmFyIHRhZyA9IGRlY29kZXIu
cmVhZFVpbnQzMigpOwotICAgICAgc3dpdGNoICh0YWcpIHsKLSAgICAgICAgY2FzZSBSdW5PckNs
b3NlUGlwZUlucHV0LlRhZ3MucmVxdWlyZVZlcnNpb246Ci0gICAgICAgICAgcmVzdWx0LnJlcXVp
cmVWZXJzaW9uID0gZGVjb2Rlci5kZWNvZGVTdHJ1Y3RQb2ludGVyKFJlcXVpcmVWZXJzaW9uKTsK
LSAgICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICAgIGRlY29kZXIuYWxpZ24oKTsKLQotICAg
ICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9OwotCi0KLSAgICBSdW5PckNsb3NlUGlwZUlucHV0LnZh
bGlkYXRlID0gZnVuY3Rpb24obWVzc2FnZVZhbGlkYXRvciwgb2Zmc2V0KSB7Ci0gICAgICB2YXIg
c2l6ZSA9IG1lc3NhZ2VWYWxpZGF0b3IuZGVjb2RlVW5pb25TaXplKG9mZnNldCk7Ci0gICAgICBp
ZiAoc2l6ZSAhPSAxNikgewotICAgICAgICByZXR1cm4gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJv
ci5JTlZBTElEX1VOSU9OX1NJWkU7Ci0gICAgICB9Ci0KLSAgICAgIHZhciB0YWcgPSBtZXNzYWdl
VmFsaWRhdG9yLmRlY29kZVVuaW9uVGFnKG9mZnNldCk7Ci0gICAgICB2YXIgZGF0YV9vZmZzZXQg
PSBvZmZzZXQgKyA4OwotICAgICAgdmFyIGVycjsKLSAgICAgIHN3aXRjaCAodGFnKSB7Ci0gICAg
ICAgIGNhc2UgUnVuT3JDbG9zZVBpcGVJbnB1dC5UYWdzLnJlcXVpcmVWZXJzaW9uOgotICAgICAg
ICAgIAotCi0gICAgLy8gdmFsaWRhdGUgUnVuT3JDbG9zZVBpcGVJbnB1dC5yZXF1aXJlVmVyc2lv
bgotICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RQb2ludGVyKGRhdGFf
b2Zmc2V0LCBSZXF1aXJlVmVyc2lvbiwgZmFsc2UpOwotICAgIGlmIChlcnIgIT09IHZhbGlkYXRv
ci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKLSAgICAgICAgcmV0dXJuIGVycjsKLSAgICAgICAgICBi
cmVhazsKLSAgICAgIH0KLQotICAgICAgcmV0dXJuIHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3Iu
Tk9ORTsKLSAgICB9OwotCi0gIFJ1bk9yQ2xvc2VQaXBlSW5wdXQuZW5jb2RlZFNpemUgPSAxNjsK
LSAgZXhwb3J0cy5rUnVuTWVzc2FnZUlkID0ga1J1bk1lc3NhZ2VJZDsKLSAgZXhwb3J0cy5rUnVu
T3JDbG9zZVBpcGVNZXNzYWdlSWQgPSBrUnVuT3JDbG9zZVBpcGVNZXNzYWdlSWQ7Ci0gIGV4cG9y
dHMuUnVuTWVzc2FnZVBhcmFtcyA9IFJ1bk1lc3NhZ2VQYXJhbXM7Ci0gIGV4cG9ydHMuUnVuUmVz
cG9uc2VNZXNzYWdlUGFyYW1zID0gUnVuUmVzcG9uc2VNZXNzYWdlUGFyYW1zOwotICBleHBvcnRz
LlF1ZXJ5VmVyc2lvbiA9IFF1ZXJ5VmVyc2lvbjsKLSAgZXhwb3J0cy5RdWVyeVZlcnNpb25SZXN1
bHQgPSBRdWVyeVZlcnNpb25SZXN1bHQ7Ci0gIGV4cG9ydHMuRmx1c2hGb3JUZXN0aW5nID0gRmx1
c2hGb3JUZXN0aW5nOwotICBleHBvcnRzLlJ1bk9yQ2xvc2VQaXBlTWVzc2FnZVBhcmFtcyA9IFJ1
bk9yQ2xvc2VQaXBlTWVzc2FnZVBhcmFtczsKLSAgZXhwb3J0cy5SZXF1aXJlVmVyc2lvbiA9IFJl
cXVpcmVWZXJzaW9uOwotICBleHBvcnRzLlJ1bklucHV0ID0gUnVuSW5wdXQ7Ci0gIGV4cG9ydHMu
UnVuT3V0cHV0ID0gUnVuT3V0cHV0OwotICBleHBvcnRzLlJ1bk9yQ2xvc2VQaXBlSW5wdXQgPSBS
dW5PckNsb3NlUGlwZUlucHV0OwotfSkoKTsvLyBDb3B5cmlnaHQgMjAxNCBUaGUgQ2hyb21pdW0g
QXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2Rl
IGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5k
IGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLSd1c2Ugc3RyaWN0JzsKLQotKGZ1bmN0aW9uKCkgewot
ICB2YXIgbW9qb21JZCA9ICdtb2pvL3B1YmxpYy9pbnRlcmZhY2VzL2JpbmRpbmdzL3BpcGVfY29u
dHJvbF9tZXNzYWdlcy5tb2pvbSc7Ci0gIGlmIChtb2pvLmludGVybmFsLmlzTW9qb21Mb2FkZWQo
bW9qb21JZCkpIHsKLSAgICBjb25zb2xlLndhcm4oJ1RoZSBmb2xsb3dpbmcgbW9qb20gaXMgbG9h
ZGVkIG11bHRpcGxlIHRpbWVzOiAnICsgbW9qb21JZCk7Ci0gICAgcmV0dXJuOwotICB9Ci0gIG1v
am8uaW50ZXJuYWwubWFya01vam9tTG9hZGVkKG1vam9tSWQpOwotICB2YXIgYmluZGluZ3MgPSBt
b2pvOwotICB2YXIgYXNzb2NpYXRlZEJpbmRpbmdzID0gbW9qbzsKLSAgdmFyIGNvZGVjID0gbW9q
by5pbnRlcm5hbDsKLSAgdmFyIHZhbGlkYXRvciA9IG1vam8uaW50ZXJuYWw7Ci0KLSAgdmFyIGV4
cG9ydHMgPSBtb2pvLmludGVybmFsLmV4cG9zZU5hbWVzcGFjZSgnbW9qby5waXBlQ29udHJvbCcp
OwotCi0KLSAgdmFyIGtSdW5PckNsb3NlUGlwZU1lc3NhZ2VJZCA9IDB4RkZGRkZGRkU7Ci0KLSAg
ZnVuY3Rpb24gUnVuT3JDbG9zZVBpcGVNZXNzYWdlUGFyYW1zKHZhbHVlcykgewotICAgIHRoaXMu
aW5pdERlZmF1bHRzXygpOwotICAgIHRoaXMuaW5pdEZpZWxkc18odmFsdWVzKTsKLSAgfQotCi0K
LSAgUnVuT3JDbG9zZVBpcGVNZXNzYWdlUGFyYW1zLnByb3RvdHlwZS5pbml0RGVmYXVsdHNfID0g
ZnVuY3Rpb24oKSB7Ci0gICAgdGhpcy5pbnB1dCA9IG51bGw7Ci0gIH07Ci0gIFJ1bk9yQ2xvc2VQ
aXBlTWVzc2FnZVBhcmFtcy5wcm90b3R5cGUuaW5pdEZpZWxkc18gPSBmdW5jdGlvbihmaWVsZHMp
IHsKLSAgICBmb3IodmFyIGZpZWxkIGluIGZpZWxkcykgewotICAgICAgICBpZiAodGhpcy5oYXNP
d25Qcm9wZXJ0eShmaWVsZCkpCi0gICAgICAgICAgdGhpc1tmaWVsZF0gPSBmaWVsZHNbZmllbGRd
OwotICAgIH0KLSAgfTsKLQotICBSdW5PckNsb3NlUGlwZU1lc3NhZ2VQYXJhbXMudmFsaWRhdGUg
PSBmdW5jdGlvbihtZXNzYWdlVmFsaWRhdG9yLCBvZmZzZXQpIHsKLSAgICB2YXIgZXJyOwotICAg
IGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RIZWFkZXIob2Zmc2V0LCBjb2Rl
Yy5rU3RydWN0SGVhZGVyU2l6ZSk7Ci0gICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRp
b25FcnJvci5OT05FKQotICAgICAgICByZXR1cm4gZXJyOwotCi0gICAgdmFyIGtWZXJzaW9uU2l6
ZXMgPSBbCi0gICAgICB7dmVyc2lvbjogMCwgbnVtQnl0ZXM6IDI0fQotICAgIF07Ci0gICAgZXJy
ID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdFZlcnNpb24ob2Zmc2V0LCBrVmVyc2lv
blNpemVzKTsKLSAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUp
Ci0gICAgICAgIHJldHVybiBlcnI7Ci0KLQotICAgIC8vIHZhbGlkYXRlIFJ1bk9yQ2xvc2VQaXBl
TWVzc2FnZVBhcmFtcy5pbnB1dAotICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVV
bmlvbihvZmZzZXQgKyBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDAsIFJ1bk9yQ2xvc2VQaXBl
SW5wdXQsIGZhbHNlKTsKLSAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9y
Lk5PTkUpCi0gICAgICAgIHJldHVybiBlcnI7Ci0KLSAgICByZXR1cm4gdmFsaWRhdG9yLnZhbGlk
YXRpb25FcnJvci5OT05FOwotICB9OwotCi0gIFJ1bk9yQ2xvc2VQaXBlTWVzc2FnZVBhcmFtcy5l
bmNvZGVkU2l6ZSA9IGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgMTY7Ci0KLSAgUnVuT3JDbG9z
ZVBpcGVNZXNzYWdlUGFyYW1zLmRlY29kZSA9IGZ1bmN0aW9uKGRlY29kZXIpIHsKLSAgICB2YXIg
cGFja2VkOwotICAgIHZhciB2YWwgPSBuZXcgUnVuT3JDbG9zZVBpcGVNZXNzYWdlUGFyYW1zKCk7
Ci0gICAgdmFyIG51bWJlck9mQnl0ZXMgPSBkZWNvZGVyLnJlYWRVaW50MzIoKTsKLSAgICB2YXIg
dmVyc2lvbiA9IGRlY29kZXIucmVhZFVpbnQzMigpOwotICAgIHZhbC5pbnB1dCA9IGRlY29kZXIu
ZGVjb2RlU3RydWN0KFJ1bk9yQ2xvc2VQaXBlSW5wdXQpOwotICAgIHJldHVybiB2YWw7Ci0gIH07
Ci0KLSAgUnVuT3JDbG9zZVBpcGVNZXNzYWdlUGFyYW1zLmVuY29kZSA9IGZ1bmN0aW9uKGVuY29k
ZXIsIHZhbCkgewotICAgIHZhciBwYWNrZWQ7Ci0gICAgZW5jb2Rlci53cml0ZVVpbnQzMihSdW5P
ckNsb3NlUGlwZU1lc3NhZ2VQYXJhbXMuZW5jb2RlZFNpemUpOwotICAgIGVuY29kZXIud3JpdGVV
aW50MzIoMCk7Ci0gICAgZW5jb2Rlci5lbmNvZGVTdHJ1Y3QoUnVuT3JDbG9zZVBpcGVJbnB1dCwg
dmFsLmlucHV0KTsKLSAgfTsKLSAgZnVuY3Rpb24gRGlzY29ubmVjdFJlYXNvbih2YWx1ZXMpIHsK
LSAgICB0aGlzLmluaXREZWZhdWx0c18oKTsKLSAgICB0aGlzLmluaXRGaWVsZHNfKHZhbHVlcyk7
Ci0gIH0KLQotCi0gIERpc2Nvbm5lY3RSZWFzb24ucHJvdG90eXBlLmluaXREZWZhdWx0c18gPSBm
dW5jdGlvbigpIHsKLSAgICB0aGlzLmN1c3RvbVJlYXNvbiA9IDA7Ci0gICAgdGhpcy5kZXNjcmlw
dGlvbiA9IG51bGw7Ci0gIH07Ci0gIERpc2Nvbm5lY3RSZWFzb24ucHJvdG90eXBlLmluaXRGaWVs
ZHNfID0gZnVuY3Rpb24oZmllbGRzKSB7Ci0gICAgZm9yKHZhciBmaWVsZCBpbiBmaWVsZHMpIHsK
LSAgICAgICAgaWYgKHRoaXMuaGFzT3duUHJvcGVydHkoZmllbGQpKQotICAgICAgICAgIHRoaXNb
ZmllbGRdID0gZmllbGRzW2ZpZWxkXTsKLSAgICB9Ci0gIH07Ci0KLSAgRGlzY29ubmVjdFJlYXNv
bi52YWxpZGF0ZSA9IGZ1bmN0aW9uKG1lc3NhZ2VWYWxpZGF0b3IsIG9mZnNldCkgewotICAgIHZh
ciBlcnI7Ci0gICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdEhlYWRlcihv
ZmZzZXQsIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplKTsKLSAgICBpZiAoZXJyICE9PSB2YWxpZGF0
b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCi0gICAgICAgIHJldHVybiBlcnI7Ci0KLSAgICB2YXIg
a1ZlcnNpb25TaXplcyA9IFsKLSAgICAgIHt2ZXJzaW9uOiAwLCBudW1CeXRlczogMjR9Ci0gICAg
XTsKLSAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0VmVyc2lvbihvZmZz
ZXQsIGtWZXJzaW9uU2l6ZXMpOwotICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9u
RXJyb3IuTk9ORSkKLSAgICAgICAgcmV0dXJuIGVycjsKLQotCi0KLSAgICAvLyB2YWxpZGF0ZSBE
aXNjb25uZWN0UmVhc29uLmRlc2NyaXB0aW9uCi0gICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52
YWxpZGF0ZVN0cmluZ1BvaW50ZXIob2Zmc2V0ICsgY29kZWMua1N0cnVjdEhlYWRlclNpemUgKyA4
LCBmYWxzZSkKLSAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUp
Ci0gICAgICAgIHJldHVybiBlcnI7Ci0KLSAgICByZXR1cm4gdmFsaWRhdG9yLnZhbGlkYXRpb25F
cnJvci5OT05FOwotICB9OwotCi0gIERpc2Nvbm5lY3RSZWFzb24uZW5jb2RlZFNpemUgPSBjb2Rl
Yy5rU3RydWN0SGVhZGVyU2l6ZSArIDE2OwotCi0gIERpc2Nvbm5lY3RSZWFzb24uZGVjb2RlID0g
ZnVuY3Rpb24oZGVjb2RlcikgewotICAgIHZhciBwYWNrZWQ7Ci0gICAgdmFyIHZhbCA9IG5ldyBE
aXNjb25uZWN0UmVhc29uKCk7Ci0gICAgdmFyIG51bWJlck9mQnl0ZXMgPSBkZWNvZGVyLnJlYWRV
aW50MzIoKTsKLSAgICB2YXIgdmVyc2lvbiA9IGRlY29kZXIucmVhZFVpbnQzMigpOwotICAgIHZh
bC5jdXN0b21SZWFzb24gPSBkZWNvZGVyLmRlY29kZVN0cnVjdChjb2RlYy5VaW50MzIpOwotICAg
IGRlY29kZXIuc2tpcCgxKTsKLSAgICBkZWNvZGVyLnNraXAoMSk7Ci0gICAgZGVjb2Rlci5za2lw
KDEpOwotICAgIGRlY29kZXIuc2tpcCgxKTsKLSAgICB2YWwuZGVzY3JpcHRpb24gPSBkZWNvZGVy
LmRlY29kZVN0cnVjdChjb2RlYy5TdHJpbmcpOwotICAgIHJldHVybiB2YWw7Ci0gIH07Ci0KLSAg
RGlzY29ubmVjdFJlYXNvbi5lbmNvZGUgPSBmdW5jdGlvbihlbmNvZGVyLCB2YWwpIHsKLSAgICB2
YXIgcGFja2VkOwotICAgIGVuY29kZXIud3JpdGVVaW50MzIoRGlzY29ubmVjdFJlYXNvbi5lbmNv
ZGVkU2l6ZSk7Ci0gICAgZW5jb2Rlci53cml0ZVVpbnQzMigwKTsKLSAgICBlbmNvZGVyLmVuY29k
ZVN0cnVjdChjb2RlYy5VaW50MzIsIHZhbC5jdXN0b21SZWFzb24pOwotICAgIGVuY29kZXIuc2tp
cCgxKTsKLSAgICBlbmNvZGVyLnNraXAoMSk7Ci0gICAgZW5jb2Rlci5za2lwKDEpOwotICAgIGVu
Y29kZXIuc2tpcCgxKTsKLSAgICBlbmNvZGVyLmVuY29kZVN0cnVjdChjb2RlYy5TdHJpbmcsIHZh
bC5kZXNjcmlwdGlvbik7Ci0gIH07Ci0gIGZ1bmN0aW9uIFBlZXJBc3NvY2lhdGVkRW5kcG9pbnRD
bG9zZWRFdmVudCh2YWx1ZXMpIHsKLSAgICB0aGlzLmluaXREZWZhdWx0c18oKTsKLSAgICB0aGlz
LmluaXRGaWVsZHNfKHZhbHVlcyk7Ci0gIH0KLQotCi0gIFBlZXJBc3NvY2lhdGVkRW5kcG9pbnRD
bG9zZWRFdmVudC5wcm90b3R5cGUuaW5pdERlZmF1bHRzXyA9IGZ1bmN0aW9uKCkgewotICAgIHRo
aXMuaWQgPSAwOwotICAgIHRoaXMuZGlzY29ubmVjdFJlYXNvbiA9IG51bGw7Ci0gIH07Ci0gIFBl
ZXJBc3NvY2lhdGVkRW5kcG9pbnRDbG9zZWRFdmVudC5wcm90b3R5cGUuaW5pdEZpZWxkc18gPSBm
dW5jdGlvbihmaWVsZHMpIHsKLSAgICBmb3IodmFyIGZpZWxkIGluIGZpZWxkcykgewotICAgICAg
ICBpZiAodGhpcy5oYXNPd25Qcm9wZXJ0eShmaWVsZCkpCi0gICAgICAgICAgdGhpc1tmaWVsZF0g
PSBmaWVsZHNbZmllbGRdOwotICAgIH0KLSAgfTsKLQotICBQZWVyQXNzb2NpYXRlZEVuZHBvaW50
Q2xvc2VkRXZlbnQudmFsaWRhdGUgPSBmdW5jdGlvbihtZXNzYWdlVmFsaWRhdG9yLCBvZmZzZXQp
IHsKLSAgICB2YXIgZXJyOwotICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1
Y3RIZWFkZXIob2Zmc2V0LCBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSk7Ci0gICAgaWYgKGVyciAh
PT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQotICAgICAgICByZXR1cm4gZXJyOwot
Ci0gICAgdmFyIGtWZXJzaW9uU2l6ZXMgPSBbCi0gICAgICB7dmVyc2lvbjogMCwgbnVtQnl0ZXM6
IDI0fQotICAgIF07Ci0gICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdFZl
cnNpb24ob2Zmc2V0LCBrVmVyc2lvblNpemVzKTsKLSAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3Iu
dmFsaWRhdGlvbkVycm9yLk5PTkUpCi0gICAgICAgIHJldHVybiBlcnI7Ci0KLQotCi0gICAgLy8g
dmFsaWRhdGUgUGVlckFzc29jaWF0ZWRFbmRwb2ludENsb3NlZEV2ZW50LmRpc2Nvbm5lY3RSZWFz
b24KLSAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0UG9pbnRlcihvZmZz
ZXQgKyBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDgsIERpc2Nvbm5lY3RSZWFzb24sIHRydWUp
OwotICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKLSAgICAg
ICAgcmV0dXJuIGVycjsKLQotICAgIHJldHVybiB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5P
TkU7Ci0gIH07Ci0KLSAgUGVlckFzc29jaWF0ZWRFbmRwb2ludENsb3NlZEV2ZW50LmVuY29kZWRT
aXplID0gY29kZWMua1N0cnVjdEhlYWRlclNpemUgKyAxNjsKLQotICBQZWVyQXNzb2NpYXRlZEVu
ZHBvaW50Q2xvc2VkRXZlbnQuZGVjb2RlID0gZnVuY3Rpb24oZGVjb2RlcikgewotICAgIHZhciBw
YWNrZWQ7Ci0gICAgdmFyIHZhbCA9IG5ldyBQZWVyQXNzb2NpYXRlZEVuZHBvaW50Q2xvc2VkRXZl
bnQoKTsKLSAgICB2YXIgbnVtYmVyT2ZCeXRlcyA9IGRlY29kZXIucmVhZFVpbnQzMigpOwotICAg
IHZhciB2ZXJzaW9uID0gZGVjb2Rlci5yZWFkVWludDMyKCk7Ci0gICAgdmFsLmlkID0gZGVjb2Rl
ci5kZWNvZGVTdHJ1Y3QoY29kZWMuVWludDMyKTsKLSAgICBkZWNvZGVyLnNraXAoMSk7Ci0gICAg
ZGVjb2Rlci5za2lwKDEpOwotICAgIGRlY29kZXIuc2tpcCgxKTsKLSAgICBkZWNvZGVyLnNraXAo
MSk7Ci0gICAgdmFsLmRpc2Nvbm5lY3RSZWFzb24gPSBkZWNvZGVyLmRlY29kZVN0cnVjdFBvaW50
ZXIoRGlzY29ubmVjdFJlYXNvbik7Ci0gICAgcmV0dXJuIHZhbDsKLSAgfTsKLQotICBQZWVyQXNz
b2NpYXRlZEVuZHBvaW50Q2xvc2VkRXZlbnQuZW5jb2RlID0gZnVuY3Rpb24oZW5jb2RlciwgdmFs
KSB7Ci0gICAgdmFyIHBhY2tlZDsKLSAgICBlbmNvZGVyLndyaXRlVWludDMyKFBlZXJBc3NvY2lh
dGVkRW5kcG9pbnRDbG9zZWRFdmVudC5lbmNvZGVkU2l6ZSk7Ci0gICAgZW5jb2Rlci53cml0ZVVp
bnQzMigwKTsKLSAgICBlbmNvZGVyLmVuY29kZVN0cnVjdChjb2RlYy5VaW50MzIsIHZhbC5pZCk7
Ci0gICAgZW5jb2Rlci5za2lwKDEpOwotICAgIGVuY29kZXIuc2tpcCgxKTsKLSAgICBlbmNvZGVy
LnNraXAoMSk7Ci0gICAgZW5jb2Rlci5za2lwKDEpOwotICAgIGVuY29kZXIuZW5jb2RlU3RydWN0
UG9pbnRlcihEaXNjb25uZWN0UmVhc29uLCB2YWwuZGlzY29ubmVjdFJlYXNvbik7Ci0gIH07Ci0K
LSAgZnVuY3Rpb24gUnVuT3JDbG9zZVBpcGVJbnB1dCh2YWx1ZSkgewotICAgIHRoaXMuaW5pdERl
ZmF1bHRfKCk7Ci0gICAgdGhpcy5pbml0VmFsdWVfKHZhbHVlKTsKLSAgfQotCi0KLSAgUnVuT3JD
bG9zZVBpcGVJbnB1dC5UYWdzID0gewotICAgIHBlZXJBc3NvY2lhdGVkRW5kcG9pbnRDbG9zZWRF
dmVudDogMCwKLSAgfTsKLQotICBSdW5PckNsb3NlUGlwZUlucHV0LnByb3RvdHlwZS5pbml0RGVm
YXVsdF8gPSBmdW5jdGlvbigpIHsKLSAgICB0aGlzLiRkYXRhID0gbnVsbDsKLSAgICB0aGlzLiR0
YWcgPSB1bmRlZmluZWQ7Ci0gIH0KLQotICBSdW5PckNsb3NlUGlwZUlucHV0LnByb3RvdHlwZS5p
bml0VmFsdWVfID0gZnVuY3Rpb24odmFsdWUpIHsKLSAgICBpZiAodmFsdWUgPT0gdW5kZWZpbmVk
KSB7Ci0gICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyh2
YWx1ZSk7Ci0gICAgaWYgKGtleXMubGVuZ3RoID09IDApIHsKLSAgICAgIHJldHVybjsKLSAgICB9
Ci0KLSAgICBpZiAoa2V5cy5sZW5ndGggPiAxKSB7Ci0gICAgICB0aHJvdyBuZXcgVHlwZUVycm9y
KCJZb3UgbWF5IHNldCBvbmx5IG9uZSBtZW1iZXIgb24gYSB1bmlvbi4iKTsKLSAgICB9Ci0KLSAg
ICB2YXIgZmllbGRzID0gWwotICAgICAgICAicGVlckFzc29jaWF0ZWRFbmRwb2ludENsb3NlZEV2
ZW50IiwKLSAgICBdOwotCi0gICAgaWYgKGZpZWxkcy5pbmRleE9mKGtleXNbMF0pIDwgMCkgewot
ICAgICAgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKGtleXNbMF0gKyAiIGlzIG5vdCBhIFJ1bk9y
Q2xvc2VQaXBlSW5wdXQgbWVtYmVyLiIpOwotCi0gICAgfQotCi0gICAgdGhpc1trZXlzWzBdXSA9
IHZhbHVlW2tleXNbMF1dOwotICB9Ci0gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShSdW5PckNsb3Nl
UGlwZUlucHV0LnByb3RvdHlwZSwgInBlZXJBc3NvY2lhdGVkRW5kcG9pbnRDbG9zZWRFdmVudCIs
IHsKLSAgICBnZXQ6IGZ1bmN0aW9uKCkgewotICAgICAgaWYgKHRoaXMuJHRhZyAhPSBSdW5PckNs
b3NlUGlwZUlucHV0LlRhZ3MucGVlckFzc29jaWF0ZWRFbmRwb2ludENsb3NlZEV2ZW50KSB7Ci0g
ICAgICAgIHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcigKLSAgICAgICAgICAgICJSdW5PckNsb3Nl
UGlwZUlucHV0LnBlZXJBc3NvY2lhdGVkRW5kcG9pbnRDbG9zZWRFdmVudCBpcyBub3QgY3VycmVu
dGx5IHNldC4iKTsKLSAgICAgIH0KLSAgICAgIHJldHVybiB0aGlzLiRkYXRhOwotICAgIH0sCi0K
LSAgICBzZXQ6IGZ1bmN0aW9uKHZhbHVlKSB7Ci0gICAgICB0aGlzLiR0YWcgPSBSdW5PckNsb3Nl
UGlwZUlucHV0LlRhZ3MucGVlckFzc29jaWF0ZWRFbmRwb2ludENsb3NlZEV2ZW50OwotICAgICAg
dGhpcy4kZGF0YSA9IHZhbHVlOwotICAgIH0KLSAgfSk7Ci0KLQotICAgIFJ1bk9yQ2xvc2VQaXBl
SW5wdXQuZW5jb2RlID0gZnVuY3Rpb24oZW5jb2RlciwgdmFsKSB7Ci0gICAgICBpZiAodmFsID09
IG51bGwpIHsKLSAgICAgICAgZW5jb2Rlci53cml0ZVVpbnQ2NCgwKTsKLSAgICAgICAgZW5jb2Rl
ci53cml0ZVVpbnQ2NCgwKTsKLSAgICAgICAgcmV0dXJuOwotICAgICAgfQotICAgICAgaWYgKHZh
bC4kdGFnID09IHVuZGVmaW5lZCkgewotICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5u
b3QgZW5jb2RlIHVuaW9ucyB3aXRoIGFuIHVua25vd24gbWVtYmVyIHNldC4iKTsKLSAgICAgIH0K
LQotICAgICAgZW5jb2Rlci53cml0ZVVpbnQzMigxNik7Ci0gICAgICBlbmNvZGVyLndyaXRlVWlu
dDMyKHZhbC4kdGFnKTsKLSAgICAgIHN3aXRjaCAodmFsLiR0YWcpIHsKLSAgICAgICAgY2FzZSBS
dW5PckNsb3NlUGlwZUlucHV0LlRhZ3MucGVlckFzc29jaWF0ZWRFbmRwb2ludENsb3NlZEV2ZW50
OgotICAgICAgICAgIGVuY29kZXIuZW5jb2RlU3RydWN0UG9pbnRlcihQZWVyQXNzb2NpYXRlZEVu
ZHBvaW50Q2xvc2VkRXZlbnQsIHZhbC5wZWVyQXNzb2NpYXRlZEVuZHBvaW50Q2xvc2VkRXZlbnQp
OwotICAgICAgICAgIGJyZWFrOwotICAgICAgfQotICAgICAgZW5jb2Rlci5hbGlnbigpOwotICAg
IH07Ci0KLQotICAgIFJ1bk9yQ2xvc2VQaXBlSW5wdXQuZGVjb2RlID0gZnVuY3Rpb24oZGVjb2Rl
cikgewotICAgICAgdmFyIHNpemUgPSBkZWNvZGVyLnJlYWRVaW50MzIoKTsKLSAgICAgIGlmIChz
aXplID09IDApIHsKLSAgICAgICAgZGVjb2Rlci5yZWFkVWludDMyKCk7Ci0gICAgICAgIGRlY29k
ZXIucmVhZFVpbnQ2NCgpOwotICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgIH0KLQotICAgICAg
dmFyIHJlc3VsdCA9IG5ldyBSdW5PckNsb3NlUGlwZUlucHV0KCk7Ci0gICAgICB2YXIgdGFnID0g
ZGVjb2Rlci5yZWFkVWludDMyKCk7Ci0gICAgICBzd2l0Y2ggKHRhZykgewotICAgICAgICBjYXNl
IFJ1bk9yQ2xvc2VQaXBlSW5wdXQuVGFncy5wZWVyQXNzb2NpYXRlZEVuZHBvaW50Q2xvc2VkRXZl
bnQ6Ci0gICAgICAgICAgcmVzdWx0LnBlZXJBc3NvY2lhdGVkRW5kcG9pbnRDbG9zZWRFdmVudCA9
IGRlY29kZXIuZGVjb2RlU3RydWN0UG9pbnRlcihQZWVyQXNzb2NpYXRlZEVuZHBvaW50Q2xvc2Vk
RXZlbnQpOwotICAgICAgICAgIGJyZWFrOwotICAgICAgfQotICAgICAgZGVjb2Rlci5hbGlnbigp
OwotCi0gICAgICByZXR1cm4gcmVzdWx0OwotICAgIH07Ci0KLQotICAgIFJ1bk9yQ2xvc2VQaXBl
SW5wdXQudmFsaWRhdGUgPSBmdW5jdGlvbihtZXNzYWdlVmFsaWRhdG9yLCBvZmZzZXQpIHsKLSAg
ICAgIHZhciBzaXplID0gbWVzc2FnZVZhbGlkYXRvci5kZWNvZGVVbmlvblNpemUob2Zmc2V0KTsK
LSAgICAgIGlmIChzaXplICE9IDE2KSB7Ci0gICAgICAgIHJldHVybiB2YWxpZGF0b3IudmFsaWRh
dGlvbkVycm9yLklOVkFMSURfVU5JT05fU0laRTsKLSAgICAgIH0KLQotICAgICAgdmFyIHRhZyA9
IG1lc3NhZ2VWYWxpZGF0b3IuZGVjb2RlVW5pb25UYWcob2Zmc2V0KTsKLSAgICAgIHZhciBkYXRh
X29mZnNldCA9IG9mZnNldCArIDg7Ci0gICAgICB2YXIgZXJyOwotICAgICAgc3dpdGNoICh0YWcp
IHsKLSAgICAgICAgY2FzZSBSdW5PckNsb3NlUGlwZUlucHV0LlRhZ3MucGVlckFzc29jaWF0ZWRF
bmRwb2ludENsb3NlZEV2ZW50OgotICAgICAgICAgIAotCi0gICAgLy8gdmFsaWRhdGUgUnVuT3JD
bG9zZVBpcGVJbnB1dC5wZWVyQXNzb2NpYXRlZEVuZHBvaW50Q2xvc2VkRXZlbnQKLSAgICBlcnIg
PSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0UG9pbnRlcihkYXRhX29mZnNldCwgUGVl
ckFzc29jaWF0ZWRFbmRwb2ludENsb3NlZEV2ZW50LCBmYWxzZSk7Ci0gICAgaWYgKGVyciAhPT0g
dmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQotICAgICAgICByZXR1cm4gZXJyOwotICAg
ICAgICAgIGJyZWFrOwotICAgICAgfQotCi0gICAgICByZXR1cm4gdmFsaWRhdG9yLnZhbGlkYXRp
b25FcnJvci5OT05FOwotICAgIH07Ci0KLSAgUnVuT3JDbG9zZVBpcGVJbnB1dC5lbmNvZGVkU2l6
ZSA9IDE2OwotICBleHBvcnRzLmtSdW5PckNsb3NlUGlwZU1lc3NhZ2VJZCA9IGtSdW5PckNsb3Nl
UGlwZU1lc3NhZ2VJZDsKLSAgZXhwb3J0cy5SdW5PckNsb3NlUGlwZU1lc3NhZ2VQYXJhbXMgPSBS
dW5PckNsb3NlUGlwZU1lc3NhZ2VQYXJhbXM7Ci0gIGV4cG9ydHMuRGlzY29ubmVjdFJlYXNvbiA9
IERpc2Nvbm5lY3RSZWFzb247Ci0gIGV4cG9ydHMuUGVlckFzc29jaWF0ZWRFbmRwb2ludENsb3Nl
ZEV2ZW50ID0gUGVlckFzc29jaWF0ZWRFbmRwb2ludENsb3NlZEV2ZW50OwotICBleHBvcnRzLlJ1
bk9yQ2xvc2VQaXBlSW5wdXQgPSBSdW5PckNsb3NlUGlwZUlucHV0OwotfSkoKTsKZGlmZiAtLWdp
dCBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2Vz
L2Nocm9taXVtL21vam9fYmluZGluZ3MuanMuaGVhZGVycyBiL0xheW91dFRlc3RzL2ltcG9ydGVk
L3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL21vam9fYmluZGluZ3Mu
anMuaGVhZGVycwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjgwNWMzMjNkZjVhOTc1
MjMxNjQ4YjgzMGUzM2NlMTgzYzNjYmJkMy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMAotLS0gYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRl
c3RzL3Jlc291cmNlcy9jaHJvbWl1bS9tb2pvX2JpbmRpbmdzLmpzLmhlYWRlcnMKKysrIC9kZXYv
bnVsbApAQCAtMSArMCwwIEBACi1Db250ZW50LVR5cGU6IHRleHQvamF2YXNjcmlwdDsgY2hhcnNl
dD11dGYtOApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9y
bS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vbW9qb193ZWJfdGVzdF9oZWxwZXJfdGVzdC5tb2pv
bS5qcyBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3Vy
Y2VzL2Nocm9taXVtL21vam9fd2ViX3Rlc3RfaGVscGVyX3Rlc3QubW9qb20uanMKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNmYmFkMDg2ODk4Nzc4YjkyMGMyZDc1MDg5MGM4NzBlMDgy
ZGM2MGEuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvTGF5
b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21p
dW0vbW9qb193ZWJfdGVzdF9oZWxwZXJfdGVzdC5tb2pvbS5qcworKysgL2Rldi9udWxsCkBAIC0x
LDI2NCArMCwwIEBACi0vLyBDb3B5cmlnaHQgMjAxNCBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVk
IGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNF
TlNFIGZpbGUuCi0KLSd1c2Ugc3RyaWN0JzsKLQotKGZ1bmN0aW9uKCkgewotICB2YXIgbW9qb21J
ZCA9ICdjb250ZW50L3Rlc3QvZGF0YS9tb2pvX3dlYl90ZXN0X2hlbHBlcl90ZXN0Lm1vam9tJzsK
LSAgaWYgKG1vam8uaW50ZXJuYWwuaXNNb2pvbUxvYWRlZChtb2pvbUlkKSkgewotICAgIGNvbnNv
bGUud2FybignVGhlIGZvbGxvd2luZyBtb2pvbSBpcyBsb2FkZWQgbXVsdGlwbGUgdGltZXM6ICcg
KyBtb2pvbUlkKTsKLSAgICByZXR1cm47Ci0gIH0KLSAgbW9qby5pbnRlcm5hbC5tYXJrTW9qb21M
b2FkZWQobW9qb21JZCk7Ci0KLSAgLy8gVE9ETyh5enNoZW4pOiBEZWZpbmUgdGhlc2UgYWxpYXNl
cyB0byBtaW5pbWl6ZSB0aGUgZGlmZmVyZW5jZXMgYmV0d2VlbiB0aGUKLSAgLy8gb2xkL25ldyBt
b2Rlcy4gUmVtb3ZlIHRoZW0gd2hlbiB0aGUgb2xkIG1vZGUgZ29lcyBhd2F5LgotICB2YXIgYmlu
ZGluZ3MgPSBtb2pvOwotICB2YXIgYXNzb2NpYXRlZEJpbmRpbmdzID0gbW9qbzsKLSAgdmFyIGNv
ZGVjID0gbW9qby5pbnRlcm5hbDsKLSAgdmFyIHZhbGlkYXRvciA9IG1vam8uaW50ZXJuYWw7Ci0K
LSAgdmFyIGV4cG9ydHMgPSBtb2pvLmludGVybmFsLmV4cG9zZU5hbWVzcGFjZSgnY29udGVudC5t
b2pvbScpOwotCi0KLQotICBmdW5jdGlvbiBNb2pvV2ViVGVzdEhlbHBlcl9SZXZlcnNlX1BhcmFt
cyh2YWx1ZXMpIHsKLSAgICB0aGlzLmluaXREZWZhdWx0c18oKTsKLSAgICB0aGlzLmluaXRGaWVs
ZHNfKHZhbHVlcyk7Ci0gIH0KLQotCi0gIE1vam9XZWJUZXN0SGVscGVyX1JldmVyc2VfUGFyYW1z
LnByb3RvdHlwZS5pbml0RGVmYXVsdHNfID0gZnVuY3Rpb24oKSB7Ci0gICAgdGhpcy5tZXNzYWdl
ID0gbnVsbDsKLSAgfTsKLSAgTW9qb1dlYlRlc3RIZWxwZXJfUmV2ZXJzZV9QYXJhbXMucHJvdG90
eXBlLmluaXRGaWVsZHNfID0gZnVuY3Rpb24oZmllbGRzKSB7Ci0gICAgZm9yKHZhciBmaWVsZCBp
biBmaWVsZHMpIHsKLSAgICAgICAgaWYgKHRoaXMuaGFzT3duUHJvcGVydHkoZmllbGQpKQotICAg
ICAgICAgIHRoaXNbZmllbGRdID0gZmllbGRzW2ZpZWxkXTsKLSAgICB9Ci0gIH07Ci0KLSAgTW9q
b1dlYlRlc3RIZWxwZXJfUmV2ZXJzZV9QYXJhbXMudmFsaWRhdGUgPSBmdW5jdGlvbihtZXNzYWdl
VmFsaWRhdG9yLCBvZmZzZXQpIHsKLSAgICB2YXIgZXJyOwotICAgIGVyciA9IG1lc3NhZ2VWYWxp
ZGF0b3IudmFsaWRhdGVTdHJ1Y3RIZWFkZXIob2Zmc2V0LCBjb2RlYy5rU3RydWN0SGVhZGVyU2l6
ZSk7Ci0gICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQotICAg
ICAgICByZXR1cm4gZXJyOwotCi0gICAgdmFyIGtWZXJzaW9uU2l6ZXMgPSBbCi0gICAgICB7dmVy
c2lvbjogMCwgbnVtQnl0ZXM6IDE2fQotICAgIF07Ci0gICAgZXJyID0gbWVzc2FnZVZhbGlkYXRv
ci52YWxpZGF0ZVN0cnVjdFZlcnNpb24ob2Zmc2V0LCBrVmVyc2lvblNpemVzKTsKLSAgICBpZiAo
ZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCi0gICAgICAgIHJldHVybiBl
cnI7Ci0KLQotICAgIC8vIHZhbGlkYXRlIE1vam9XZWJUZXN0SGVscGVyX1JldmVyc2VfUGFyYW1z
Lm1lc3NhZ2UKLSAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RyaW5nUG9pbnRl
cihvZmZzZXQgKyBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDAsIGZhbHNlKQotICAgIGlmIChl
cnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKLSAgICAgICAgcmV0dXJuIGVy
cjsKLQotICAgIHJldHVybiB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkU7Ci0gIH07Ci0K
LSAgTW9qb1dlYlRlc3RIZWxwZXJfUmV2ZXJzZV9QYXJhbXMuZW5jb2RlZFNpemUgPSBjb2RlYy5r
U3RydWN0SGVhZGVyU2l6ZSArIDg7Ci0KLSAgTW9qb1dlYlRlc3RIZWxwZXJfUmV2ZXJzZV9QYXJh
bXMuZGVjb2RlID0gZnVuY3Rpb24oZGVjb2RlcikgewotICAgIHZhciBwYWNrZWQ7Ci0gICAgdmFy
IHZhbCA9IG5ldyBNb2pvV2ViVGVzdEhlbHBlcl9SZXZlcnNlX1BhcmFtcygpOwotICAgIHZhciBu
dW1iZXJPZkJ5dGVzID0gZGVjb2Rlci5yZWFkVWludDMyKCk7Ci0gICAgdmFyIHZlcnNpb24gPSBk
ZWNvZGVyLnJlYWRVaW50MzIoKTsKLSAgICB2YWwubWVzc2FnZSA9IGRlY29kZXIuZGVjb2RlU3Ry
dWN0KGNvZGVjLlN0cmluZyk7Ci0gICAgcmV0dXJuIHZhbDsKLSAgfTsKLQotICBNb2pvV2ViVGVz
dEhlbHBlcl9SZXZlcnNlX1BhcmFtcy5lbmNvZGUgPSBmdW5jdGlvbihlbmNvZGVyLCB2YWwpIHsK
LSAgICB2YXIgcGFja2VkOwotICAgIGVuY29kZXIud3JpdGVVaW50MzIoTW9qb1dlYlRlc3RIZWxw
ZXJfUmV2ZXJzZV9QYXJhbXMuZW5jb2RlZFNpemUpOwotICAgIGVuY29kZXIud3JpdGVVaW50MzIo
MCk7Ci0gICAgZW5jb2Rlci5lbmNvZGVTdHJ1Y3QoY29kZWMuU3RyaW5nLCB2YWwubWVzc2FnZSk7
Ci0gIH07Ci0gIGZ1bmN0aW9uIE1vam9XZWJUZXN0SGVscGVyX1JldmVyc2VfUmVzcG9uc2VQYXJh
bXModmFsdWVzKSB7Ci0gICAgdGhpcy5pbml0RGVmYXVsdHNfKCk7Ci0gICAgdGhpcy5pbml0Rmll
bGRzXyh2YWx1ZXMpOwotICB9Ci0KLQotICBNb2pvV2ViVGVzdEhlbHBlcl9SZXZlcnNlX1Jlc3Bv
bnNlUGFyYW1zLnByb3RvdHlwZS5pbml0RGVmYXVsdHNfID0gZnVuY3Rpb24oKSB7Ci0gICAgdGhp
cy5yZXZlcnNlZCA9IG51bGw7Ci0gIH07Ci0gIE1vam9XZWJUZXN0SGVscGVyX1JldmVyc2VfUmVz
cG9uc2VQYXJhbXMucHJvdG90eXBlLmluaXRGaWVsZHNfID0gZnVuY3Rpb24oZmllbGRzKSB7Ci0g
ICAgZm9yKHZhciBmaWVsZCBpbiBmaWVsZHMpIHsKLSAgICAgICAgaWYgKHRoaXMuaGFzT3duUHJv
cGVydHkoZmllbGQpKQotICAgICAgICAgIHRoaXNbZmllbGRdID0gZmllbGRzW2ZpZWxkXTsKLSAg
ICB9Ci0gIH07Ci0KLSAgTW9qb1dlYlRlc3RIZWxwZXJfUmV2ZXJzZV9SZXNwb25zZVBhcmFtcy52
YWxpZGF0ZSA9IGZ1bmN0aW9uKG1lc3NhZ2VWYWxpZGF0b3IsIG9mZnNldCkgewotICAgIHZhciBl
cnI7Ci0gICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdEhlYWRlcihvZmZz
ZXQsIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplKTsKLSAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3Iu
dmFsaWRhdGlvbkVycm9yLk5PTkUpCi0gICAgICAgIHJldHVybiBlcnI7Ci0KLSAgICB2YXIga1Zl
cnNpb25TaXplcyA9IFsKLSAgICAgIHt2ZXJzaW9uOiAwLCBudW1CeXRlczogMTZ9Ci0gICAgXTsK
LSAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0VmVyc2lvbihvZmZzZXQs
IGtWZXJzaW9uU2l6ZXMpOwotICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJy
b3IuTk9ORSkKLSAgICAgICAgcmV0dXJuIGVycjsKLQotCi0gICAgLy8gdmFsaWRhdGUgTW9qb1dl
YlRlc3RIZWxwZXJfUmV2ZXJzZV9SZXNwb25zZVBhcmFtcy5yZXZlcnNlZAotICAgIGVyciA9IG1l
c3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJpbmdQb2ludGVyKG9mZnNldCArIGNvZGVjLmtTdHJ1
Y3RIZWFkZXJTaXplICsgMCwgZmFsc2UpCi0gICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlk
YXRpb25FcnJvci5OT05FKQotICAgICAgICByZXR1cm4gZXJyOwotCi0gICAgcmV0dXJuIHZhbGlk
YXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORTsKLSAgfTsKLQotICBNb2pvV2ViVGVzdEhlbHBlcl9S
ZXZlcnNlX1Jlc3BvbnNlUGFyYW1zLmVuY29kZWRTaXplID0gY29kZWMua1N0cnVjdEhlYWRlclNp
emUgKyA4OwotCi0gIE1vam9XZWJUZXN0SGVscGVyX1JldmVyc2VfUmVzcG9uc2VQYXJhbXMuZGVj
b2RlID0gZnVuY3Rpb24oZGVjb2RlcikgewotICAgIHZhciBwYWNrZWQ7Ci0gICAgdmFyIHZhbCA9
IG5ldyBNb2pvV2ViVGVzdEhlbHBlcl9SZXZlcnNlX1Jlc3BvbnNlUGFyYW1zKCk7Ci0gICAgdmFy
IG51bWJlck9mQnl0ZXMgPSBkZWNvZGVyLnJlYWRVaW50MzIoKTsKLSAgICB2YXIgdmVyc2lvbiA9
IGRlY29kZXIucmVhZFVpbnQzMigpOwotICAgIHZhbC5yZXZlcnNlZCA9IGRlY29kZXIuZGVjb2Rl
U3RydWN0KGNvZGVjLlN0cmluZyk7Ci0gICAgcmV0dXJuIHZhbDsKLSAgfTsKLQotICBNb2pvV2Vi
VGVzdEhlbHBlcl9SZXZlcnNlX1Jlc3BvbnNlUGFyYW1zLmVuY29kZSA9IGZ1bmN0aW9uKGVuY29k
ZXIsIHZhbCkgewotICAgIHZhciBwYWNrZWQ7Ci0gICAgZW5jb2Rlci53cml0ZVVpbnQzMihNb2pv
V2ViVGVzdEhlbHBlcl9SZXZlcnNlX1Jlc3BvbnNlUGFyYW1zLmVuY29kZWRTaXplKTsKLSAgICBl
bmNvZGVyLndyaXRlVWludDMyKDApOwotICAgIGVuY29kZXIuZW5jb2RlU3RydWN0KGNvZGVjLlN0
cmluZywgdmFsLnJldmVyc2VkKTsKLSAgfTsKLSAgdmFyIGtNb2pvV2ViVGVzdEhlbHBlcl9SZXZl
cnNlX05hbWUgPSAwOwotCi0gIGZ1bmN0aW9uIE1vam9XZWJUZXN0SGVscGVyUHRyKGhhbmRsZU9y
UHRySW5mbykgewotICAgIHRoaXMucHRyID0gbmV3IGJpbmRpbmdzLkludGVyZmFjZVB0ckNvbnRy
b2xsZXIoTW9qb1dlYlRlc3RIZWxwZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBoYW5kbGVPclB0ckluZm8pOwotICB9Ci0KLSAgZnVuY3Rpb24g
TW9qb1dlYlRlc3RIZWxwZXJBc3NvY2lhdGVkUHRyKGFzc29jaWF0ZWRJbnRlcmZhY2VQdHJJbmZv
KSB7Ci0gICAgdGhpcy5wdHIgPSBuZXcgYXNzb2NpYXRlZEJpbmRpbmdzLkFzc29jaWF0ZWRJbnRl
cmZhY2VQdHJDb250cm9sbGVyKAotICAgICAgICBNb2pvV2ViVGVzdEhlbHBlciwgYXNzb2NpYXRl
ZEludGVyZmFjZVB0ckluZm8pOwotICB9Ci0KLSAgTW9qb1dlYlRlc3RIZWxwZXJBc3NvY2lhdGVk
UHRyLnByb3RvdHlwZSA9Ci0gICAgICBPYmplY3QuY3JlYXRlKE1vam9XZWJUZXN0SGVscGVyUHRy
LnByb3RvdHlwZSk7Ci0gIE1vam9XZWJUZXN0SGVscGVyQXNzb2NpYXRlZFB0ci5wcm90b3R5cGUu
Y29uc3RydWN0b3IgPQotICAgICAgTW9qb1dlYlRlc3RIZWxwZXJBc3NvY2lhdGVkUHRyOwotCi0g
IGZ1bmN0aW9uIE1vam9XZWJUZXN0SGVscGVyUHJveHkocmVjZWl2ZXIpIHsKLSAgICB0aGlzLnJl
Y2VpdmVyXyA9IHJlY2VpdmVyOwotICB9Ci0gIE1vam9XZWJUZXN0SGVscGVyUHRyLnByb3RvdHlw
ZS5yZXZlcnNlID0gZnVuY3Rpb24oKSB7Ci0gICAgcmV0dXJuIE1vam9XZWJUZXN0SGVscGVyUHJv
eHkucHJvdG90eXBlLnJldmVyc2UKLSAgICAgICAgLmFwcGx5KHRoaXMucHRyLmdldFByb3h5KCks
IGFyZ3VtZW50cyk7Ci0gIH07Ci0KLSAgTW9qb1dlYlRlc3RIZWxwZXJQcm94eS5wcm90b3R5cGUu
cmV2ZXJzZSA9IGZ1bmN0aW9uKG1lc3NhZ2UpIHsKLSAgICB2YXIgcGFyYW1zID0gbmV3IE1vam9X
ZWJUZXN0SGVscGVyX1JldmVyc2VfUGFyYW1zKCk7Ci0gICAgcGFyYW1zLm1lc3NhZ2UgPSBtZXNz
YWdlOwotICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3QpIHsK
LSAgICAgIHZhciBidWlsZGVyID0gbmV3IGNvZGVjLk1lc3NhZ2VWMUJ1aWxkZXIoCi0gICAgICAg
ICAga01vam9XZWJUZXN0SGVscGVyX1JldmVyc2VfTmFtZSwKLSAgICAgICAgICBjb2RlYy5hbGln
bihNb2pvV2ViVGVzdEhlbHBlcl9SZXZlcnNlX1BhcmFtcy5lbmNvZGVkU2l6ZSksCi0gICAgICAg
ICAgY29kZWMua01lc3NhZ2VFeHBlY3RzUmVzcG9uc2UsIDApOwotICAgICAgYnVpbGRlci5lbmNv
ZGVTdHJ1Y3QoTW9qb1dlYlRlc3RIZWxwZXJfUmV2ZXJzZV9QYXJhbXMsIHBhcmFtcyk7Ci0gICAg
ICB2YXIgbWVzc2FnZSA9IGJ1aWxkZXIuZmluaXNoKCk7Ci0gICAgICB0aGlzLnJlY2VpdmVyXy5h
Y2NlcHRBbmRFeHBlY3RSZXNwb25zZShtZXNzYWdlKS50aGVuKGZ1bmN0aW9uKG1lc3NhZ2UpIHsK
LSAgICAgICAgdmFyIHJlYWRlciA9IG5ldyBjb2RlYy5NZXNzYWdlUmVhZGVyKG1lc3NhZ2UpOwot
ICAgICAgICB2YXIgcmVzcG9uc2VQYXJhbXMgPQotICAgICAgICAgICAgcmVhZGVyLmRlY29kZVN0
cnVjdChNb2pvV2ViVGVzdEhlbHBlcl9SZXZlcnNlX1Jlc3BvbnNlUGFyYW1zKTsKLSAgICAgICAg
cmVzb2x2ZShyZXNwb25zZVBhcmFtcyk7Ci0gICAgICB9KS5jYXRjaChmdW5jdGlvbihyZXN1bHQp
IHsKLSAgICAgICAgcmVqZWN0KEVycm9yKCJDb25uZWN0aW9uIGVycm9yOiAiICsgcmVzdWx0KSk7
Ci0gICAgICB9KTsKLSAgICB9LmJpbmQodGhpcykpOwotICB9OwotCi0gIGZ1bmN0aW9uIE1vam9X
ZWJUZXN0SGVscGVyU3R1YihkZWxlZ2F0ZSkgewotICAgIHRoaXMuZGVsZWdhdGVfID0gZGVsZWdh
dGU7Ci0gIH0KLSAgTW9qb1dlYlRlc3RIZWxwZXJTdHViLnByb3RvdHlwZS5yZXZlcnNlID0gZnVu
Y3Rpb24obWVzc2FnZSkgewotICAgIHJldHVybiB0aGlzLmRlbGVnYXRlXyAmJiB0aGlzLmRlbGVn
YXRlXy5yZXZlcnNlICYmIHRoaXMuZGVsZWdhdGVfLnJldmVyc2UobWVzc2FnZSk7Ci0gIH0KLQot
ICBNb2pvV2ViVGVzdEhlbHBlclN0dWIucHJvdG90eXBlLmFjY2VwdCA9IGZ1bmN0aW9uKG1lc3Nh
Z2UpIHsKLSAgICB2YXIgcmVhZGVyID0gbmV3IGNvZGVjLk1lc3NhZ2VSZWFkZXIobWVzc2FnZSk7
Ci0gICAgc3dpdGNoIChyZWFkZXIubWVzc2FnZU5hbWUpIHsKLSAgICBkZWZhdWx0OgotICAgICAg
cmV0dXJuIGZhbHNlOwotICAgIH0KLSAgfTsKLQotICBNb2pvV2ViVGVzdEhlbHBlclN0dWIucHJv
dG90eXBlLmFjY2VwdFdpdGhSZXNwb25kZXIgPQotICAgICAgZnVuY3Rpb24obWVzc2FnZSwgcmVz
cG9uZGVyKSB7Ci0gICAgdmFyIHJlYWRlciA9IG5ldyBjb2RlYy5NZXNzYWdlUmVhZGVyKG1lc3Nh
Z2UpOwotICAgIHN3aXRjaCAocmVhZGVyLm1lc3NhZ2VOYW1lKSB7Ci0gICAgY2FzZSBrTW9qb1dl
YlRlc3RIZWxwZXJfUmV2ZXJzZV9OYW1lOgotICAgICAgdmFyIHBhcmFtcyA9IHJlYWRlci5kZWNv
ZGVTdHJ1Y3QoTW9qb1dlYlRlc3RIZWxwZXJfUmV2ZXJzZV9QYXJhbXMpOwotICAgICAgdGhpcy5y
ZXZlcnNlKHBhcmFtcy5tZXNzYWdlKS50aGVuKGZ1bmN0aW9uKHJlc3BvbnNlKSB7Ci0gICAgICAg
IHZhciByZXNwb25zZVBhcmFtcyA9Ci0gICAgICAgICAgICBuZXcgTW9qb1dlYlRlc3RIZWxwZXJf
UmV2ZXJzZV9SZXNwb25zZVBhcmFtcygpOwotICAgICAgICByZXNwb25zZVBhcmFtcy5yZXZlcnNl
ZCA9IHJlc3BvbnNlLnJldmVyc2VkOwotICAgICAgICB2YXIgYnVpbGRlciA9IG5ldyBjb2RlYy5N
ZXNzYWdlVjFCdWlsZGVyKAotICAgICAgICAgICAga01vam9XZWJUZXN0SGVscGVyX1JldmVyc2Vf
TmFtZSwKLSAgICAgICAgICAgIGNvZGVjLmFsaWduKE1vam9XZWJUZXN0SGVscGVyX1JldmVyc2Vf
UmVzcG9uc2VQYXJhbXMuZW5jb2RlZFNpemUpLAotICAgICAgICAgICAgY29kZWMua01lc3NhZ2VJ
c1Jlc3BvbnNlLCByZWFkZXIucmVxdWVzdElEKTsKLSAgICAgICAgYnVpbGRlci5lbmNvZGVTdHJ1
Y3QoTW9qb1dlYlRlc3RIZWxwZXJfUmV2ZXJzZV9SZXNwb25zZVBhcmFtcywKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcmVzcG9uc2VQYXJhbXMpOwotICAgICAgICB2YXIgbWVzc2FnZSA9
IGJ1aWxkZXIuZmluaXNoKCk7Ci0gICAgICAgIHJlc3BvbmRlci5hY2NlcHQobWVzc2FnZSk7Ci0g
ICAgICB9KTsKLSAgICAgIHJldHVybiB0cnVlOwotICAgIGRlZmF1bHQ6Ci0gICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgfQotICB9OwotCi0gIGZ1bmN0aW9uIHZhbGlkYXRlTW9qb1dlYlRlc3RIZWxw
ZXJSZXF1ZXN0KG1lc3NhZ2VWYWxpZGF0b3IpIHsKLSAgICB2YXIgbWVzc2FnZSA9IG1lc3NhZ2VW
YWxpZGF0b3IubWVzc2FnZTsKLSAgICB2YXIgcGFyYW1zQ2xhc3MgPSBudWxsOwotICAgIHN3aXRj
aCAobWVzc2FnZS5nZXROYW1lKCkpIHsKLSAgICAgIGNhc2Uga01vam9XZWJUZXN0SGVscGVyX1Jl
dmVyc2VfTmFtZToKLSAgICAgICAgaWYgKG1lc3NhZ2UuZXhwZWN0c1Jlc3BvbnNlKCkpCi0gICAg
ICAgICAgcGFyYW1zQ2xhc3MgPSBNb2pvV2ViVGVzdEhlbHBlcl9SZXZlcnNlX1BhcmFtczsKLSAg
ICAgIGJyZWFrOwotICAgIH0KLSAgICBpZiAocGFyYW1zQ2xhc3MgPT09IG51bGwpCi0gICAgICBy
ZXR1cm4gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FOwotICAgIHJldHVybiBwYXJhbXND
bGFzcy52YWxpZGF0ZShtZXNzYWdlVmFsaWRhdG9yLCBtZXNzYWdlVmFsaWRhdG9yLm1lc3NhZ2Uu
Z2V0SGVhZGVyTnVtQnl0ZXMoKSk7Ci0gIH0KLQotICBmdW5jdGlvbiB2YWxpZGF0ZU1vam9XZWJU
ZXN0SGVscGVyUmVzcG9uc2UobWVzc2FnZVZhbGlkYXRvcikgewotICAgdmFyIG1lc3NhZ2UgPSBt
ZXNzYWdlVmFsaWRhdG9yLm1lc3NhZ2U7Ci0gICB2YXIgcGFyYW1zQ2xhc3MgPSBudWxsOwotICAg
c3dpdGNoIChtZXNzYWdlLmdldE5hbWUoKSkgewotICAgICAgY2FzZSBrTW9qb1dlYlRlc3RIZWxw
ZXJfUmV2ZXJzZV9OYW1lOgotICAgICAgICBpZiAobWVzc2FnZS5pc1Jlc3BvbnNlKCkpCi0gICAg
ICAgICAgcGFyYW1zQ2xhc3MgPSBNb2pvV2ViVGVzdEhlbHBlcl9SZXZlcnNlX1Jlc3BvbnNlUGFy
YW1zOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgaWYgKHBhcmFtc0NsYXNzID09PSBudWxs
KQotICAgICAgcmV0dXJuIHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORTsKLSAgICByZXR1
cm4gcGFyYW1zQ2xhc3MudmFsaWRhdGUobWVzc2FnZVZhbGlkYXRvciwgbWVzc2FnZVZhbGlkYXRv
ci5tZXNzYWdlLmdldEhlYWRlck51bUJ5dGVzKCkpOwotICB9Ci0KLSAgdmFyIE1vam9XZWJUZXN0
SGVscGVyID0gewotICAgIG5hbWU6ICdjb250ZW50Lm1vam9tLk1vam9XZWJUZXN0SGVscGVyJywK
LSAgICBrVmVyc2lvbjogMCwKLSAgICBwdHJDbGFzczogTW9qb1dlYlRlc3RIZWxwZXJQdHIsCi0g
ICAgcHJveHlDbGFzczogTW9qb1dlYlRlc3RIZWxwZXJQcm94eSwKLSAgICBzdHViQ2xhc3M6IE1v
am9XZWJUZXN0SGVscGVyU3R1YiwKLSAgICB2YWxpZGF0ZVJlcXVlc3Q6IHZhbGlkYXRlTW9qb1dl
YlRlc3RIZWxwZXJSZXF1ZXN0LAotICAgIHZhbGlkYXRlUmVzcG9uc2U6IHZhbGlkYXRlTW9qb1dl
YlRlc3RIZWxwZXJSZXNwb25zZSwKLSAgfTsKLSAgTW9qb1dlYlRlc3RIZWxwZXJTdHViLnByb3Rv
dHlwZS52YWxpZGF0b3IgPSB2YWxpZGF0ZU1vam9XZWJUZXN0SGVscGVyUmVxdWVzdDsKLSAgTW9q
b1dlYlRlc3RIZWxwZXJQcm94eS5wcm90b3R5cGUudmFsaWRhdG9yID0gdmFsaWRhdGVNb2pvV2Vi
VGVzdEhlbHBlclJlc3BvbnNlOwotICBleHBvcnRzLk1vam9XZWJUZXN0SGVscGVyID0gTW9qb1dl
YlRlc3RIZWxwZXI7Ci0gIGV4cG9ydHMuTW9qb1dlYlRlc3RIZWxwZXJQdHIgPSBNb2pvV2ViVGVz
dEhlbHBlclB0cjsKLSAgZXhwb3J0cy5Nb2pvV2ViVGVzdEhlbHBlckFzc29jaWF0ZWRQdHIgPSBN
b2pvV2ViVGVzdEhlbHBlckFzc29jaWF0ZWRQdHI7Ci19KSgpOwpkaWZmIC0tZ2l0IGEvTGF5b3V0
VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0v
bW9qb193ZWJfdGVzdF9oZWxwZXJfdGVzdC5tb2pvbS5qcy5oZWFkZXJzIGIvTGF5b3V0VGVzdHMv
aW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vbW9qb193
ZWJfdGVzdF9oZWxwZXJfdGVzdC5tb2pvbS5qcy5oZWFkZXJzCmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCA2ODA1YzMyM2RmNWE5NzUyMzE2NDhiODMwZTMzY2UxODNjM2NiYmQzLi4wMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL0xheW91dFRlc3RzL2lt
cG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL21vam9fd2Vi
X3Rlc3RfaGVscGVyX3Rlc3QubW9qb20uanMuaGVhZGVycworKysgL2Rldi9udWxsCkBAIC0xICsw
LDAgQEAKLUNvbnRlbnQtVHlwZTogdGV4dC9qYXZhc2NyaXB0OyBjaGFyc2V0PXV0Zi04CmRpZmYg
LS1naXQgYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291
cmNlcy9jaHJvbWl1bS9uZmMtbW9jay5qcyBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWIt
cGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL25mYy1tb2NrLmpzCmluZGV4IDFhN2Ux
NTgxOWU2N2NlMGJjOWQxZGI4NDFjYjRmMDkxMzY0ZTgxMzguLmFhOTQyNTdlMmEzOTRkMDI3OTcy
ZjJmZDY4M2U2NzJlZWFmYzhkNWUgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3cz
Yy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL25mYy1tb2NrLmpzCisrKyBi
L0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2No
cm9taXVtL25mYy1tb2NrLmpzCkBAIC05NCwxMCArOTQsMTAgQEAgZnVuY3Rpb24gY29tcGFyZU5E
RUZSZWNvcmRzKHByb3ZpZGVkUmVjb3JkLCByZWNlaXZlZFJlY29yZCkgewogLy8gQ29tcGFyZXMg
TkRFRldyaXRlT3B0aW9ucyBzdHJ1Y3R1cmVzIHRoYXQgd2VyZSBwcm92aWRlZCB0byBBUEkgYW5k
CiAvLyByZWNlaXZlZCBieSB0aGUgbW9jayBtb2pvIHNlcnZpY2UuCiBmdW5jdGlvbiBhc3NlcnRO
REVGV3JpdGVPcHRpb25zRXF1YWwocHJvdmlkZWQsIHJlY2VpdmVkKSB7Ci0gIGlmIChwcm92aWRl
ZC5pZ25vcmVSZWFkICE9PSB1bmRlZmluZWQpCi0gICAgYXNzZXJ0X2VxdWFscyhwcm92aWRlZC5p
Z25vcmVSZWFkLCAhIXJlY2VpdmVkLmlnbm9yZVJlYWQpOworICBpZiAocHJvdmlkZWQub3Zlcndy
aXRlICE9PSB1bmRlZmluZWQpCisgICAgYXNzZXJ0X2VxdWFscyhwcm92aWRlZC5vdmVyd3JpdGUs
ICEhcmVjZWl2ZWQub3ZlcndyaXRlKTsKICAgZWxzZQotICAgIGFzc2VydF9lcXVhbHMoISFyZWNl
aXZlZC5pZ25vcmVfcmVhZCwgdHJ1ZSk7CisgICAgYXNzZXJ0X2VxdWFscyghIXJlY2VpdmVkLm92
ZXJ3cml0ZSwgdHJ1ZSk7CiB9CiAKIC8vIENvbXBhcmVzIE5ERUZSZWFkZXJPcHRpb25zIHN0cnVj
dHVyZXMgdGhhdCB3ZXJlIHByb3ZpZGVkIHRvIEFQSSBhbmQKQEAgLTExOCwzMyArMTE4LDYgQEAg
ZnVuY3Rpb24gYXNzZXJ0TkRFRlJlYWRlck9wdGlvbnNFcXVhbChwcm92aWRlZCwgcmVjZWl2ZWQp
IHsKICAgfQogfQogCi0vLyBDaGVja3Mgd2hldGhlciBOREVGUmVhZGVyT3B0aW9ucyBhcmUgbWF0
Y2hlZCB3aXRoIGdpdmVuIG1lc3NhZ2UuCi1mdW5jdGlvbiBtYXRjaGVzV2F0Y2hPcHRpb25zKG1l
c3NhZ2UsIG9wdGlvbnMpIHsKLSAgLy8gQSBtZXNzYWdlIHdpdGggbm8gcmVjb3JkcyBpcyB0byBu
b3RpZnkgdGhhdCB0aGUgdGFnIGlzIGFscmVhZHkgZm9ybWF0dGVkIHRvCi0gIC8vIHN1cHBvcnQg
TkRFRiBidXQgZG9lcyBub3QgY29udGFpbiBhIG1lc3NhZ2UgeWV0LiBXZSBhbHdheXMgZGlzcGF0
Y2ggaXQgZm9yCi0gIC8vIGFsbCBvcHRpb25zLgotICBpZiAobWVzc2FnZS5yZWNvcmRzLmxlbmd0
aCA9PSAwKQotICAgIHJldHVybiB0cnVlOwotCi0gIGZvciAobGV0IHJlY29yZCBvZiBtZXNzYWdl
LnJlY29yZHMpIHsKLSAgICBpZiAob3B0aW9ucy5pZCAhPSBudWxsICYmIG9wdGlvbnMuaWQgIT09
IHJlY29yZC5pZCkgewotICAgICAgY29udGludWU7Ci0gICAgfQotICAgIGlmIChvcHRpb25zLnJl
Y29yZFR5cGUgIT0gbnVsbCAmJgotICAgICAgICBvcHRpb25zLnJlY29yZFR5cGUgIT09IHJlY29y
ZC5yZWNvcmRUeXBlKSB7Ci0gICAgICBjb250aW51ZTsKLSAgICB9Ci0gICAgaWYgKG9wdGlvbnMu
bWVkaWFUeXBlICE9IG51bGwgJiYgb3B0aW9ucy5tZWRpYVR5cGUgIT09IHJlY29yZC5tZWRpYVR5
cGUpIHsKLSAgICAgIGNvbnRpbnVlOwotICAgIH0KLQotICAgIC8vIEZvdW5kIG9uZSByZWNvcmQg
bWF0Y2hlcywgbWVhbnMgdGhlIG1lc3NhZ2UgbWF0Y2hlcy4KLSAgICByZXR1cm4gdHJ1ZTsKLSAg
fQotCi0gIHJldHVybiBmYWxzZTsKLX0KLQogZnVuY3Rpb24gY3JlYXRlTkRFRkVycm9yKHR5cGUp
IHsKICAgcmV0dXJuIHsKICAgICBlcnJvcjogdHlwZSAhPSBudWxsID8KQEAgLTIyMCwyMyArMTkz
LDIxIEBAIHZhciBXZWJORkNUZXN0ID0gKCgpID0+IHsKICAgICAgIHRoaXMuY2xpZW50XyA9IGNs
aWVudDsKICAgICB9CiAKLSAgICBhc3luYyB3YXRjaChvcHRpb25zLCBpZCkgeworICAgIGFzeW5j
IHdhdGNoKGlkKSB7CiAgICAgICBhc3NlcnRfdHJ1ZShpZCA+IDApOwogICAgICAgbGV0IGVycm9y
ID0gdGhpcy5nZXRIV0Vycm9yKCk7CiAgICAgICBpZiAoZXJyb3IpIHsKICAgICAgICAgcmV0dXJu
IGVycm9yOwogICAgICAgfQogCi0gICAgICB0aGlzLndhdGNoZXJzXy5wdXNoKHtpZDogaWQsIG9w
dGlvbnM6IG9wdGlvbnN9KTsKKyAgICAgIHRoaXMud2F0Y2hlcnNfLnB1c2goe2lkOiBpZH0pOwog
ICAgICAgLy8gSWdub3JlcyByZWFkaW5nIGlmIE5GQyBvcGVyYXRpb24gaXMgc3VzcGVuZGVkCiAg
ICAgICAvLyBvciB0aGUgTkZDIHRhZyBkb2VzIG5vdCBleHBvc2UgTkRFRiB0ZWNobm9sb2d5Lgog
ICAgICAgaWYgKCF0aGlzLm9wZXJhdGlvbnNfc3VzcGVuZGVkXykgewogICAgICAgICAvLyBUcmln
Z2VycyBvbldhdGNoIGlmIHRoZSBuZXcgd2F0Y2hlciBtYXRjaGVzIGV4aXN0aW5nIG1lc3NhZ2Vz
LgogICAgICAgICBmb3IgKGxldCBtZXNzYWdlIG9mIHRoaXMucmVhZGluZ19tZXNzYWdlc18pIHsK
LSAgICAgICAgICBpZiAobWF0Y2hlc1dhdGNoT3B0aW9ucyhtZXNzYWdlLCBvcHRpb25zKSkgewot
ICAgICAgICAgICAgdGhpcy5jbGllbnRfLm9uV2F0Y2goCi0gICAgICAgICAgICAgICAgW2lkXSwg
ZmFrZV90YWdfc2VyaWFsX251bWJlciwgdG9Nb2pvTkRFRk1lc3NhZ2UobWVzc2FnZSkpOwotICAg
ICAgICAgIH0KKyAgICAgICAgICB0aGlzLmNsaWVudF8ub25XYXRjaCgKKyAgICAgICAgICAgICAg
W2lkXSwgZmFrZV90YWdfc2VyaWFsX251bWJlciwgdG9Nb2pvTkRFRk1lc3NhZ2UobWVzc2FnZSkp
OwogICAgICAgICB9CiAgICAgICB9CiAKQEAgLTMxOSwxNiArMjkwLDE1IEBAIHZhciBXZWJORkNU
ZXN0ID0gKCgpID0+IHsKICAgICAgIHRoaXMucmVhZGluZ19tZXNzYWdlc18ucHVzaChtZXNzYWdl
KTsKICAgICAgIC8vIElnbm9yZXMgcmVhZGluZyBpZiBORkMgb3BlcmF0aW9uIGlzIHN1c3BlbmRl
ZC4KICAgICAgIGlmKHRoaXMub3BlcmF0aW9uc19zdXNwZW5kZWRfKSByZXR1cm47Ci0gICAgICAv
LyBJZ25vcmVzIHJlYWRpbmcgaWYgTkRFRldyaXRlT3B0aW9ucy5pZ25vcmVSZWFkIGlzIHRydWUu
Ci0gICAgICBpZiAodGhpcy5wZW5kaW5nX3dyaXRlX29wdGlvbnNfICYmIHRoaXMucGVuZGluZ193
cml0ZV9vcHRpb25zXy5pZ25vcmVSZWFkKQorICAgICAgLy8gd2hlbiBvdmVyd3JpdGUgaXMgZmFs
c2UsIHRoZSB3cml0ZSBhbGdvcml0aG0gd2lsbCByZWFkIHRoZSBORkMgdGFnCisgICAgICAvLyB0
byBkZXRlcm1pbmUgaWYgaXQgaGFzIE5ERUYgcmVjb3JkcyBvbiBpdC4KKyAgICAgIGlmICh0aGlz
LnBlbmRpbmdfd3JpdGVfb3B0aW9uc18gJiYgdGhpcy5wZW5kaW5nX3dyaXRlX29wdGlvbnNfLm92
ZXJ3cml0ZSkKICAgICAgICAgcmV0dXJuOwogICAgICAgLy8gVHJpZ2dlcnMgb25XYXRjaCBpZiB0
aGUgbmV3IG1lc3NhZ2UgbWF0Y2hlcyBleGlzdGluZyB3YXRjaGVycy4KICAgICAgIGZvciAobGV0
IHdhdGNoZXIgb2YgdGhpcy53YXRjaGVyc18pIHsKLSAgICAgICAgaWYgKG1hdGNoZXNXYXRjaE9w
dGlvbnMobWVzc2FnZSwgd2F0Y2hlci5vcHRpb25zKSkgewotICAgICAgICAgIHRoaXMuY2xpZW50
Xy5vbldhdGNoKAotICAgICAgICAgICAgICBbd2F0Y2hlci5pZF0sIGZha2VfdGFnX3NlcmlhbF9u
dW1iZXIsCi0gICAgICAgICAgICAgIHRvTW9qb05ERUZNZXNzYWdlKG1lc3NhZ2UpKTsKLSAgICAg
ICAgfQorICAgICAgICB0aGlzLmNsaWVudF8ub25XYXRjaCgKKyAgICAgICAgICAgIFt3YXRjaGVy
LmlkXSwgZmFrZV90YWdfc2VyaWFsX251bWJlciwKKyAgICAgICAgICAgIHRvTW9qb05ERUZNZXNz
YWdlKG1lc3NhZ2UpKTsKICAgICAgIH0KICAgICB9CiAKQEAgLTM0NCwxMSArMzE0LDkgQEAgdmFy
IFdlYk5GQ1Rlc3QgPSAoKCkgPT4gewogICAgICAgLy8gUmVzdW1lcyBwZW5kaW5nIE5GQyByZWFk
aW5nLgogICAgICAgZm9yIChsZXQgd2F0Y2hlciBvZiB0aGlzLndhdGNoZXJzXykgewogICAgICAg
ICBmb3IgKGxldCBtZXNzYWdlIG9mIHRoaXMucmVhZGluZ19tZXNzYWdlc18pIHsKLSAgICAgICAg
ICBpZiAobWF0Y2hlc1dhdGNoT3B0aW9ucyhtZXNzYWdlLCB3YXRjaGVyLm9wdGlvbnMpKSB7Ci0g
ICAgICAgICAgICB0aGlzLmNsaWVudF8ub25XYXRjaCgKLSAgICAgICAgICAgICAgICBbd2F0Y2hl
ci5pZF0sIGZha2VfdGFnX3NlcmlhbF9udW1iZXIsCi0gICAgICAgICAgICAgICAgdG9Nb2pvTkRF
Rk1lc3NhZ2UobWVzc2FnZSkpOwotICAgICAgICAgIH0KKyAgICAgICAgICB0aGlzLmNsaWVudF8u
b25XYXRjaCgKKyAgICAgICAgICAgICAgW3dhdGNoZXIuaWRdLCBmYWtlX3RhZ19zZXJpYWxfbnVt
YmVyLAorICAgICAgICAgICAgICB0b01vam9OREVGTWVzc2FnZShtZXNzYWdlKSk7CiAgICAgICAg
IH0KICAgICAgIH0KICAgICAgIC8vIFJlc3VtZXMgcGVuZGluZyBwdXNoIG9wZXJhdGlvbi4KZGlm
ZiAtLWdpdCBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVz
b3VyY2VzL2Nocm9taXVtL3NlbnNvci5tb2pvbS5qcyBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3cz
Yy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL3NlbnNvci5tb2pvbS5qcwpk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzU3OGRkNmQ2NGYwZTkxZDk0YzlkY2MzMjQz
MmZkMmNlYWRkMzhiNi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAot
LS0gYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNl
cy9jaHJvbWl1bS9zZW5zb3IubW9qb20uanMKKysrIC9kZXYvbnVsbApAQCAtMSwxMDc0ICswLDAg
QEAKLS8vIENvcHlyaWdodCAyMDE0IFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qt
c3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4K
LQotJ3VzZSBzdHJpY3QnOwotCi0oZnVuY3Rpb24oKSB7Ci0gIHZhciBtb2pvbUlkID0gJ3NlcnZp
Y2VzL2RldmljZS9wdWJsaWMvbW9qb20vc2Vuc29yLm1vam9tJzsKLSAgaWYgKG1vam8uaW50ZXJu
YWwuaXNNb2pvbUxvYWRlZChtb2pvbUlkKSkgewotICAgIGNvbnNvbGUud2FybignVGhlIGZvbGxv
d2luZyBtb2pvbSBpcyBsb2FkZWQgbXVsdGlwbGUgdGltZXM6ICcgKyBtb2pvbUlkKTsKLSAgICBy
ZXR1cm47Ci0gIH0KLSAgbW9qby5pbnRlcm5hbC5tYXJrTW9qb21Mb2FkZWQobW9qb21JZCk7Ci0g
IHZhciBiaW5kaW5ncyA9IG1vam87Ci0gIHZhciBhc3NvY2lhdGVkQmluZGluZ3MgPSBtb2pvOwot
ICB2YXIgY29kZWMgPSBtb2pvLmludGVybmFsOwotICB2YXIgdmFsaWRhdG9yID0gbW9qby5pbnRl
cm5hbDsKLQotICB2YXIgZXhwb3J0cyA9IG1vam8uaW50ZXJuYWwuZXhwb3NlTmFtZXNwYWNlKCdk
ZXZpY2UubW9qb20nKTsKLQotCi0gIHZhciBTZW5zb3JUeXBlID0ge307Ci0gIFNlbnNvclR5cGUu
QU1CSUVOVF9MSUdIVCA9IDA7Ci0gIFNlbnNvclR5cGUuUFJPWElNSVRZID0gU2Vuc29yVHlwZS5B
TUJJRU5UX0xJR0hUICsgMTsKLSAgU2Vuc29yVHlwZS5BQ0NFTEVST01FVEVSID0gU2Vuc29yVHlw
ZS5QUk9YSU1JVFkgKyAxOwotICBTZW5zb3JUeXBlLkxJTkVBUl9BQ0NFTEVSQVRJT04gPSBTZW5z
b3JUeXBlLkFDQ0VMRVJPTUVURVIgKyAxOwotICBTZW5zb3JUeXBlLkdZUk9TQ09QRSA9IFNlbnNv
clR5cGUuTElORUFSX0FDQ0VMRVJBVElPTiArIDE7Ci0gIFNlbnNvclR5cGUuTUFHTkVUT01FVEVS
ID0gU2Vuc29yVHlwZS5HWVJPU0NPUEUgKyAxOwotICBTZW5zb3JUeXBlLlBSRVNTVVJFID0gU2Vu
c29yVHlwZS5NQUdORVRPTUVURVIgKyAxOwotICBTZW5zb3JUeXBlLkFCU09MVVRFX09SSUVOVEFU
SU9OX0VVTEVSX0FOR0xFUyA9IFNlbnNvclR5cGUuUFJFU1NVUkUgKyAxOwotICBTZW5zb3JUeXBl
LkFCU09MVVRFX09SSUVOVEFUSU9OX1FVQVRFUk5JT04gPSBTZW5zb3JUeXBlLkFCU09MVVRFX09S
SUVOVEFUSU9OX0VVTEVSX0FOR0xFUyArIDE7Ci0gIFNlbnNvclR5cGUuUkVMQVRJVkVfT1JJRU5U
QVRJT05fRVVMRVJfQU5HTEVTID0gU2Vuc29yVHlwZS5BQlNPTFVURV9PUklFTlRBVElPTl9RVUFU
RVJOSU9OICsgMTsKLSAgU2Vuc29yVHlwZS5SRUxBVElWRV9PUklFTlRBVElPTl9RVUFURVJOSU9O
ID0gU2Vuc29yVHlwZS5SRUxBVElWRV9PUklFTlRBVElPTl9FVUxFUl9BTkdMRVMgKyAxOwotICBT
ZW5zb3JUeXBlLk1JTl9WQUxVRSA9IDAsCi0gIFNlbnNvclR5cGUuTUFYX1ZBTFVFID0gMTAsCi0K
LSAgU2Vuc29yVHlwZS5pc0tub3duRW51bVZhbHVlID0gZnVuY3Rpb24odmFsdWUpIHsKLSAgICBz
d2l0Y2ggKHZhbHVlKSB7Ci0gICAgY2FzZSAwOgotICAgIGNhc2UgMToKLSAgICBjYXNlIDI6Ci0g
ICAgY2FzZSAzOgotICAgIGNhc2UgNDoKLSAgICBjYXNlIDU6Ci0gICAgY2FzZSA2OgotICAgIGNh
c2UgNzoKLSAgICBjYXNlIDg6Ci0gICAgY2FzZSA5OgotICAgIGNhc2UgMTA6Ci0gICAgICByZXR1
cm4gdHJ1ZTsKLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9OwotCi0gIFNlbnNvclR5cGUu
dmFsaWRhdGUgPSBmdW5jdGlvbihlbnVtVmFsdWUpIHsKLSAgICB2YXIgaXNFeHRlbnNpYmxlID0g
ZmFsc2U7Ci0gICAgaWYgKGlzRXh0ZW5zaWJsZSB8fCB0aGlzLmlzS25vd25FbnVtVmFsdWUoZW51
bVZhbHVlKSkKLSAgICAgIHJldHVybiB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkU7Ci0K
LSAgICByZXR1cm4gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5VTktOT1dOX0VOVU1fVkFMVUU7
Ci0gIH07Ci0gIHZhciBSZXBvcnRpbmdNb2RlID0ge307Ci0gIFJlcG9ydGluZ01vZGUuT05fQ0hB
TkdFID0gMDsKLSAgUmVwb3J0aW5nTW9kZS5DT05USU5VT1VTID0gUmVwb3J0aW5nTW9kZS5PTl9D
SEFOR0UgKyAxOwotICBSZXBvcnRpbmdNb2RlLk1JTl9WQUxVRSA9IDAsCi0gIFJlcG9ydGluZ01v
ZGUuTUFYX1ZBTFVFID0gMSwKLQotICBSZXBvcnRpbmdNb2RlLmlzS25vd25FbnVtVmFsdWUgPSBm
dW5jdGlvbih2YWx1ZSkgewotICAgIHN3aXRjaCAodmFsdWUpIHsKLSAgICBjYXNlIDA6Ci0gICAg
Y2FzZSAxOgotICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLSAg
fTsKLQotICBSZXBvcnRpbmdNb2RlLnZhbGlkYXRlID0gZnVuY3Rpb24oZW51bVZhbHVlKSB7Ci0g
ICAgdmFyIGlzRXh0ZW5zaWJsZSA9IGZhbHNlOwotICAgIGlmIChpc0V4dGVuc2libGUgfHwgdGhp
cy5pc0tub3duRW51bVZhbHVlKGVudW1WYWx1ZSkpCi0gICAgICByZXR1cm4gdmFsaWRhdG9yLnZh
bGlkYXRpb25FcnJvci5OT05FOwotCi0gICAgcmV0dXJuIHZhbGlkYXRvci52YWxpZGF0aW9uRXJy
b3IuVU5LTk9XTl9FTlVNX1ZBTFVFOwotICB9OwotCi0gIGZ1bmN0aW9uIFNlbnNvckNvbmZpZ3Vy
YXRpb24odmFsdWVzKSB7Ci0gICAgdGhpcy5pbml0RGVmYXVsdHNfKCk7Ci0gICAgdGhpcy5pbml0
RmllbGRzXyh2YWx1ZXMpOwotICB9Ci0KLQotICBTZW5zb3JDb25maWd1cmF0aW9uLnByb3RvdHlw
ZS5pbml0RGVmYXVsdHNfID0gZnVuY3Rpb24oKSB7Ci0gICAgdGhpcy5mcmVxdWVuY3kgPSAwOwot
ICB9OwotICBTZW5zb3JDb25maWd1cmF0aW9uLnByb3RvdHlwZS5pbml0RmllbGRzXyA9IGZ1bmN0
aW9uKGZpZWxkcykgewotICAgIGZvcih2YXIgZmllbGQgaW4gZmllbGRzKSB7Ci0gICAgICAgIGlm
ICh0aGlzLmhhc093blByb3BlcnR5KGZpZWxkKSkKLSAgICAgICAgICB0aGlzW2ZpZWxkXSA9IGZp
ZWxkc1tmaWVsZF07Ci0gICAgfQotICB9OwotCi0gIFNlbnNvckNvbmZpZ3VyYXRpb24udmFsaWRh
dGUgPSBmdW5jdGlvbihtZXNzYWdlVmFsaWRhdG9yLCBvZmZzZXQpIHsKLSAgICB2YXIgZXJyOwot
ICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RIZWFkZXIob2Zmc2V0LCBj
b2RlYy5rU3RydWN0SGVhZGVyU2l6ZSk7Ci0gICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlk
YXRpb25FcnJvci5OT05FKQotICAgICAgICByZXR1cm4gZXJyOwotCi0gICAgdmFyIGtWZXJzaW9u
U2l6ZXMgPSBbCi0gICAgICB7dmVyc2lvbjogMCwgbnVtQnl0ZXM6IDE2fQotICAgIF07Ci0gICAg
ZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdFZlcnNpb24ob2Zmc2V0LCBrVmVy
c2lvblNpemVzKTsKLSAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5P
TkUpCi0gICAgICAgIHJldHVybiBlcnI7Ci0KLQotICAgIHJldHVybiB2YWxpZGF0b3IudmFsaWRh
dGlvbkVycm9yLk5PTkU7Ci0gIH07Ci0KLSAgU2Vuc29yQ29uZmlndXJhdGlvbi5lbmNvZGVkU2l6
ZSA9IGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgODsKLQotICBTZW5zb3JDb25maWd1cmF0aW9u
LmRlY29kZSA9IGZ1bmN0aW9uKGRlY29kZXIpIHsKLSAgICB2YXIgcGFja2VkOwotICAgIHZhciB2
YWwgPSBuZXcgU2Vuc29yQ29uZmlndXJhdGlvbigpOwotICAgIHZhciBudW1iZXJPZkJ5dGVzID0g
ZGVjb2Rlci5yZWFkVWludDMyKCk7Ci0gICAgdmFyIHZlcnNpb24gPSBkZWNvZGVyLnJlYWRVaW50
MzIoKTsKLSAgICB2YWwuZnJlcXVlbmN5ID0gZGVjb2Rlci5kZWNvZGVTdHJ1Y3QoY29kZWMuRG91
YmxlKTsKLSAgICByZXR1cm4gdmFsOwotICB9OwotCi0gIFNlbnNvckNvbmZpZ3VyYXRpb24uZW5j
b2RlID0gZnVuY3Rpb24oZW5jb2RlciwgdmFsKSB7Ci0gICAgdmFyIHBhY2tlZDsKLSAgICBlbmNv
ZGVyLndyaXRlVWludDMyKFNlbnNvckNvbmZpZ3VyYXRpb24uZW5jb2RlZFNpemUpOwotICAgIGVu
Y29kZXIud3JpdGVVaW50MzIoMCk7Ci0gICAgZW5jb2Rlci5lbmNvZGVTdHJ1Y3QoY29kZWMuRG91
YmxlLCB2YWwuZnJlcXVlbmN5KTsKLSAgfTsKLSAgZnVuY3Rpb24gU2Vuc29yX0dldERlZmF1bHRD
b25maWd1cmF0aW9uX1BhcmFtcyh2YWx1ZXMpIHsKLSAgICB0aGlzLmluaXREZWZhdWx0c18oKTsK
LSAgICB0aGlzLmluaXRGaWVsZHNfKHZhbHVlcyk7Ci0gIH0KLQotCi0gIFNlbnNvcl9HZXREZWZh
dWx0Q29uZmlndXJhdGlvbl9QYXJhbXMucHJvdG90eXBlLmluaXREZWZhdWx0c18gPSBmdW5jdGlv
bigpIHsKLSAgfTsKLSAgU2Vuc29yX0dldERlZmF1bHRDb25maWd1cmF0aW9uX1BhcmFtcy5wcm90
b3R5cGUuaW5pdEZpZWxkc18gPSBmdW5jdGlvbihmaWVsZHMpIHsKLSAgICBmb3IodmFyIGZpZWxk
IGluIGZpZWxkcykgewotICAgICAgICBpZiAodGhpcy5oYXNPd25Qcm9wZXJ0eShmaWVsZCkpCi0g
ICAgICAgICAgdGhpc1tmaWVsZF0gPSBmaWVsZHNbZmllbGRdOwotICAgIH0KLSAgfTsKLQotICBT
ZW5zb3JfR2V0RGVmYXVsdENvbmZpZ3VyYXRpb25fUGFyYW1zLnZhbGlkYXRlID0gZnVuY3Rpb24o
bWVzc2FnZVZhbGlkYXRvciwgb2Zmc2V0KSB7Ci0gICAgdmFyIGVycjsKLSAgICBlcnIgPSBtZXNz
YWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0SGVhZGVyKG9mZnNldCwgY29kZWMua1N0cnVjdEhl
YWRlclNpemUpOwotICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9O
RSkKLSAgICAgICAgcmV0dXJuIGVycjsKLQotICAgIHZhciBrVmVyc2lvblNpemVzID0gWwotICAg
ICAge3ZlcnNpb246IDAsIG51bUJ5dGVzOiA4fQotICAgIF07Ci0gICAgZXJyID0gbWVzc2FnZVZh
bGlkYXRvci52YWxpZGF0ZVN0cnVjdFZlcnNpb24ob2Zmc2V0LCBrVmVyc2lvblNpemVzKTsKLSAg
ICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCi0gICAgICAgIHJl
dHVybiBlcnI7Ci0KLSAgICByZXR1cm4gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FOwot
ICB9OwotCi0gIFNlbnNvcl9HZXREZWZhdWx0Q29uZmlndXJhdGlvbl9QYXJhbXMuZW5jb2RlZFNp
emUgPSBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDA7Ci0KLSAgU2Vuc29yX0dldERlZmF1bHRD
b25maWd1cmF0aW9uX1BhcmFtcy5kZWNvZGUgPSBmdW5jdGlvbihkZWNvZGVyKSB7Ci0gICAgdmFy
IHBhY2tlZDsKLSAgICB2YXIgdmFsID0gbmV3IFNlbnNvcl9HZXREZWZhdWx0Q29uZmlndXJhdGlv
bl9QYXJhbXMoKTsKLSAgICB2YXIgbnVtYmVyT2ZCeXRlcyA9IGRlY29kZXIucmVhZFVpbnQzMigp
OwotICAgIHZhciB2ZXJzaW9uID0gZGVjb2Rlci5yZWFkVWludDMyKCk7Ci0gICAgcmV0dXJuIHZh
bDsKLSAgfTsKLQotICBTZW5zb3JfR2V0RGVmYXVsdENvbmZpZ3VyYXRpb25fUGFyYW1zLmVuY29k
ZSA9IGZ1bmN0aW9uKGVuY29kZXIsIHZhbCkgewotICAgIHZhciBwYWNrZWQ7Ci0gICAgZW5jb2Rl
ci53cml0ZVVpbnQzMihTZW5zb3JfR2V0RGVmYXVsdENvbmZpZ3VyYXRpb25fUGFyYW1zLmVuY29k
ZWRTaXplKTsKLSAgICBlbmNvZGVyLndyaXRlVWludDMyKDApOwotICB9OwotICBmdW5jdGlvbiBT
ZW5zb3JfR2V0RGVmYXVsdENvbmZpZ3VyYXRpb25fUmVzcG9uc2VQYXJhbXModmFsdWVzKSB7Ci0g
ICAgdGhpcy5pbml0RGVmYXVsdHNfKCk7Ci0gICAgdGhpcy5pbml0RmllbGRzXyh2YWx1ZXMpOwot
ICB9Ci0KLQotICBTZW5zb3JfR2V0RGVmYXVsdENvbmZpZ3VyYXRpb25fUmVzcG9uc2VQYXJhbXMu
cHJvdG90eXBlLmluaXREZWZhdWx0c18gPSBmdW5jdGlvbigpIHsKLSAgICB0aGlzLmNvbmZpZ3Vy
YXRpb24gPSBudWxsOwotICB9OwotICBTZW5zb3JfR2V0RGVmYXVsdENvbmZpZ3VyYXRpb25fUmVz
cG9uc2VQYXJhbXMucHJvdG90eXBlLmluaXRGaWVsZHNfID0gZnVuY3Rpb24oZmllbGRzKSB7Ci0g
ICAgZm9yKHZhciBmaWVsZCBpbiBmaWVsZHMpIHsKLSAgICAgICAgaWYgKHRoaXMuaGFzT3duUHJv
cGVydHkoZmllbGQpKQotICAgICAgICAgIHRoaXNbZmllbGRdID0gZmllbGRzW2ZpZWxkXTsKLSAg
ICB9Ci0gIH07Ci0KLSAgU2Vuc29yX0dldERlZmF1bHRDb25maWd1cmF0aW9uX1Jlc3BvbnNlUGFy
YW1zLnZhbGlkYXRlID0gZnVuY3Rpb24obWVzc2FnZVZhbGlkYXRvciwgb2Zmc2V0KSB7Ci0gICAg
dmFyIGVycjsKLSAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0SGVhZGVy
KG9mZnNldCwgY29kZWMua1N0cnVjdEhlYWRlclNpemUpOwotICAgIGlmIChlcnIgIT09IHZhbGlk
YXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKLSAgICAgICAgcmV0dXJuIGVycjsKLQotICAgIHZh
ciBrVmVyc2lvblNpemVzID0gWwotICAgICAge3ZlcnNpb246IDAsIG51bUJ5dGVzOiAxNn0KLSAg
ICBdOwotICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RWZXJzaW9uKG9m
ZnNldCwga1ZlcnNpb25TaXplcyk7Ci0gICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRp
b25FcnJvci5OT05FKQotICAgICAgICByZXR1cm4gZXJyOwotCi0KLSAgICAvLyB2YWxpZGF0ZSBT
ZW5zb3JfR2V0RGVmYXVsdENvbmZpZ3VyYXRpb25fUmVzcG9uc2VQYXJhbXMuY29uZmlndXJhdGlv
bgotICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RQb2ludGVyKG9mZnNl
dCArIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgMCwgU2Vuc29yQ29uZmlndXJhdGlvbiwgZmFs
c2UpOwotICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKLSAg
ICAgICAgcmV0dXJuIGVycjsKLQotICAgIHJldHVybiB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9y
Lk5PTkU7Ci0gIH07Ci0KLSAgU2Vuc29yX0dldERlZmF1bHRDb25maWd1cmF0aW9uX1Jlc3BvbnNl
UGFyYW1zLmVuY29kZWRTaXplID0gY29kZWMua1N0cnVjdEhlYWRlclNpemUgKyA4OwotCi0gIFNl
bnNvcl9HZXREZWZhdWx0Q29uZmlndXJhdGlvbl9SZXNwb25zZVBhcmFtcy5kZWNvZGUgPSBmdW5j
dGlvbihkZWNvZGVyKSB7Ci0gICAgdmFyIHBhY2tlZDsKLSAgICB2YXIgdmFsID0gbmV3IFNlbnNv
cl9HZXREZWZhdWx0Q29uZmlndXJhdGlvbl9SZXNwb25zZVBhcmFtcygpOwotICAgIHZhciBudW1i
ZXJPZkJ5dGVzID0gZGVjb2Rlci5yZWFkVWludDMyKCk7Ci0gICAgdmFyIHZlcnNpb24gPSBkZWNv
ZGVyLnJlYWRVaW50MzIoKTsKLSAgICB2YWwuY29uZmlndXJhdGlvbiA9IGRlY29kZXIuZGVjb2Rl
U3RydWN0UG9pbnRlcihTZW5zb3JDb25maWd1cmF0aW9uKTsKLSAgICByZXR1cm4gdmFsOwotICB9
OwotCi0gIFNlbnNvcl9HZXREZWZhdWx0Q29uZmlndXJhdGlvbl9SZXNwb25zZVBhcmFtcy5lbmNv
ZGUgPSBmdW5jdGlvbihlbmNvZGVyLCB2YWwpIHsKLSAgICB2YXIgcGFja2VkOwotICAgIGVuY29k
ZXIud3JpdGVVaW50MzIoU2Vuc29yX0dldERlZmF1bHRDb25maWd1cmF0aW9uX1Jlc3BvbnNlUGFy
YW1zLmVuY29kZWRTaXplKTsKLSAgICBlbmNvZGVyLndyaXRlVWludDMyKDApOwotICAgIGVuY29k
ZXIuZW5jb2RlU3RydWN0UG9pbnRlcihTZW5zb3JDb25maWd1cmF0aW9uLCB2YWwuY29uZmlndXJh
dGlvbik7Ci0gIH07Ci0gIGZ1bmN0aW9uIFNlbnNvcl9BZGRDb25maWd1cmF0aW9uX1BhcmFtcyh2
YWx1ZXMpIHsKLSAgICB0aGlzLmluaXREZWZhdWx0c18oKTsKLSAgICB0aGlzLmluaXRGaWVsZHNf
KHZhbHVlcyk7Ci0gIH0KLQotCi0gIFNlbnNvcl9BZGRDb25maWd1cmF0aW9uX1BhcmFtcy5wcm90
b3R5cGUuaW5pdERlZmF1bHRzXyA9IGZ1bmN0aW9uKCkgewotICAgIHRoaXMuY29uZmlndXJhdGlv
biA9IG51bGw7Ci0gIH07Ci0gIFNlbnNvcl9BZGRDb25maWd1cmF0aW9uX1BhcmFtcy5wcm90b3R5
cGUuaW5pdEZpZWxkc18gPSBmdW5jdGlvbihmaWVsZHMpIHsKLSAgICBmb3IodmFyIGZpZWxkIGlu
IGZpZWxkcykgewotICAgICAgICBpZiAodGhpcy5oYXNPd25Qcm9wZXJ0eShmaWVsZCkpCi0gICAg
ICAgICAgdGhpc1tmaWVsZF0gPSBmaWVsZHNbZmllbGRdOwotICAgIH0KLSAgfTsKLQotICBTZW5z
b3JfQWRkQ29uZmlndXJhdGlvbl9QYXJhbXMudmFsaWRhdGUgPSBmdW5jdGlvbihtZXNzYWdlVmFs
aWRhdG9yLCBvZmZzZXQpIHsKLSAgICB2YXIgZXJyOwotICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0
b3IudmFsaWRhdGVTdHJ1Y3RIZWFkZXIob2Zmc2V0LCBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSk7
Ci0gICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQotICAgICAg
ICByZXR1cm4gZXJyOwotCi0gICAgdmFyIGtWZXJzaW9uU2l6ZXMgPSBbCi0gICAgICB7dmVyc2lv
bjogMCwgbnVtQnl0ZXM6IDE2fQotICAgIF07Ci0gICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52
YWxpZGF0ZVN0cnVjdFZlcnNpb24ob2Zmc2V0LCBrVmVyc2lvblNpemVzKTsKLSAgICBpZiAoZXJy
ICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCi0gICAgICAgIHJldHVybiBlcnI7
Ci0KLQotICAgIC8vIHZhbGlkYXRlIFNlbnNvcl9BZGRDb25maWd1cmF0aW9uX1BhcmFtcy5jb25m
aWd1cmF0aW9uCi0gICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdFBvaW50
ZXIob2Zmc2V0ICsgY29kZWMua1N0cnVjdEhlYWRlclNpemUgKyAwLCBTZW5zb3JDb25maWd1cmF0
aW9uLCBmYWxzZSk7Ci0gICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5O
T05FKQotICAgICAgICByZXR1cm4gZXJyOwotCi0gICAgcmV0dXJuIHZhbGlkYXRvci52YWxpZGF0
aW9uRXJyb3IuTk9ORTsKLSAgfTsKLQotICBTZW5zb3JfQWRkQ29uZmlndXJhdGlvbl9QYXJhbXMu
ZW5jb2RlZFNpemUgPSBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDg7Ci0KLSAgU2Vuc29yX0Fk
ZENvbmZpZ3VyYXRpb25fUGFyYW1zLmRlY29kZSA9IGZ1bmN0aW9uKGRlY29kZXIpIHsKLSAgICB2
YXIgcGFja2VkOwotICAgIHZhciB2YWwgPSBuZXcgU2Vuc29yX0FkZENvbmZpZ3VyYXRpb25fUGFy
YW1zKCk7Ci0gICAgdmFyIG51bWJlck9mQnl0ZXMgPSBkZWNvZGVyLnJlYWRVaW50MzIoKTsKLSAg
ICB2YXIgdmVyc2lvbiA9IGRlY29kZXIucmVhZFVpbnQzMigpOwotICAgIHZhbC5jb25maWd1cmF0
aW9uID0gZGVjb2Rlci5kZWNvZGVTdHJ1Y3RQb2ludGVyKFNlbnNvckNvbmZpZ3VyYXRpb24pOwot
ICAgIHJldHVybiB2YWw7Ci0gIH07Ci0KLSAgU2Vuc29yX0FkZENvbmZpZ3VyYXRpb25fUGFyYW1z
LmVuY29kZSA9IGZ1bmN0aW9uKGVuY29kZXIsIHZhbCkgewotICAgIHZhciBwYWNrZWQ7Ci0gICAg
ZW5jb2Rlci53cml0ZVVpbnQzMihTZW5zb3JfQWRkQ29uZmlndXJhdGlvbl9QYXJhbXMuZW5jb2Rl
ZFNpemUpOwotICAgIGVuY29kZXIud3JpdGVVaW50MzIoMCk7Ci0gICAgZW5jb2Rlci5lbmNvZGVT
dHJ1Y3RQb2ludGVyKFNlbnNvckNvbmZpZ3VyYXRpb24sIHZhbC5jb25maWd1cmF0aW9uKTsKLSAg
fTsKLSAgZnVuY3Rpb24gU2Vuc29yX0FkZENvbmZpZ3VyYXRpb25fUmVzcG9uc2VQYXJhbXModmFs
dWVzKSB7Ci0gICAgdGhpcy5pbml0RGVmYXVsdHNfKCk7Ci0gICAgdGhpcy5pbml0RmllbGRzXyh2
YWx1ZXMpOwotICB9Ci0KLQotICBTZW5zb3JfQWRkQ29uZmlndXJhdGlvbl9SZXNwb25zZVBhcmFt
cy5wcm90b3R5cGUuaW5pdERlZmF1bHRzXyA9IGZ1bmN0aW9uKCkgewotICAgIHRoaXMuc3VjY2Vz
cyA9IGZhbHNlOwotICB9OwotICBTZW5zb3JfQWRkQ29uZmlndXJhdGlvbl9SZXNwb25zZVBhcmFt
cy5wcm90b3R5cGUuaW5pdEZpZWxkc18gPSBmdW5jdGlvbihmaWVsZHMpIHsKLSAgICBmb3IodmFy
IGZpZWxkIGluIGZpZWxkcykgewotICAgICAgICBpZiAodGhpcy5oYXNPd25Qcm9wZXJ0eShmaWVs
ZCkpCi0gICAgICAgICAgdGhpc1tmaWVsZF0gPSBmaWVsZHNbZmllbGRdOwotICAgIH0KLSAgfTsK
LQotICBTZW5zb3JfQWRkQ29uZmlndXJhdGlvbl9SZXNwb25zZVBhcmFtcy52YWxpZGF0ZSA9IGZ1
bmN0aW9uKG1lc3NhZ2VWYWxpZGF0b3IsIG9mZnNldCkgewotICAgIHZhciBlcnI7Ci0gICAgZXJy
ID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdEhlYWRlcihvZmZzZXQsIGNvZGVjLmtT
dHJ1Y3RIZWFkZXJTaXplKTsKLSAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVy
cm9yLk5PTkUpCi0gICAgICAgIHJldHVybiBlcnI7Ci0KLSAgICB2YXIga1ZlcnNpb25TaXplcyA9
IFsKLSAgICAgIHt2ZXJzaW9uOiAwLCBudW1CeXRlczogMTZ9Ci0gICAgXTsKLSAgICBlcnIgPSBt
ZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0VmVyc2lvbihvZmZzZXQsIGtWZXJzaW9uU2l6
ZXMpOwotICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKLSAg
ICAgICAgcmV0dXJuIGVycjsKLQotCi0gICAgcmV0dXJuIHZhbGlkYXRvci52YWxpZGF0aW9uRXJy
b3IuTk9ORTsKLSAgfTsKLQotICBTZW5zb3JfQWRkQ29uZmlndXJhdGlvbl9SZXNwb25zZVBhcmFt
cy5lbmNvZGVkU2l6ZSA9IGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgODsKLQotICBTZW5zb3Jf
QWRkQ29uZmlndXJhdGlvbl9SZXNwb25zZVBhcmFtcy5kZWNvZGUgPSBmdW5jdGlvbihkZWNvZGVy
KSB7Ci0gICAgdmFyIHBhY2tlZDsKLSAgICB2YXIgdmFsID0gbmV3IFNlbnNvcl9BZGRDb25maWd1
cmF0aW9uX1Jlc3BvbnNlUGFyYW1zKCk7Ci0gICAgdmFyIG51bWJlck9mQnl0ZXMgPSBkZWNvZGVy
LnJlYWRVaW50MzIoKTsKLSAgICB2YXIgdmVyc2lvbiA9IGRlY29kZXIucmVhZFVpbnQzMigpOwot
ICAgIHBhY2tlZCA9IGRlY29kZXIucmVhZFVpbnQ4KCk7Ci0gICAgdmFsLnN1Y2Nlc3MgPSAocGFj
a2VkID4+IDApICYgMSA/IHRydWUgOiBmYWxzZTsKLSAgICBkZWNvZGVyLnNraXAoMSk7Ci0gICAg
ZGVjb2Rlci5za2lwKDEpOwotICAgIGRlY29kZXIuc2tpcCgxKTsKLSAgICBkZWNvZGVyLnNraXAo
MSk7Ci0gICAgZGVjb2Rlci5za2lwKDEpOwotICAgIGRlY29kZXIuc2tpcCgxKTsKLSAgICBkZWNv
ZGVyLnNraXAoMSk7Ci0gICAgcmV0dXJuIHZhbDsKLSAgfTsKLQotICBTZW5zb3JfQWRkQ29uZmln
dXJhdGlvbl9SZXNwb25zZVBhcmFtcy5lbmNvZGUgPSBmdW5jdGlvbihlbmNvZGVyLCB2YWwpIHsK
LSAgICB2YXIgcGFja2VkOwotICAgIGVuY29kZXIud3JpdGVVaW50MzIoU2Vuc29yX0FkZENvbmZp
Z3VyYXRpb25fUmVzcG9uc2VQYXJhbXMuZW5jb2RlZFNpemUpOwotICAgIGVuY29kZXIud3JpdGVV
aW50MzIoMCk7Ci0gICAgcGFja2VkID0gMDsKLSAgICBwYWNrZWQgfD0gKHZhbC5zdWNjZXNzICYg
MSkgPDwgMAotICAgIGVuY29kZXIud3JpdGVVaW50OChwYWNrZWQpOwotICAgIGVuY29kZXIuc2tp
cCgxKTsKLSAgICBlbmNvZGVyLnNraXAoMSk7Ci0gICAgZW5jb2Rlci5za2lwKDEpOwotICAgIGVu
Y29kZXIuc2tpcCgxKTsKLSAgICBlbmNvZGVyLnNraXAoMSk7Ci0gICAgZW5jb2Rlci5za2lwKDEp
OwotICAgIGVuY29kZXIuc2tpcCgxKTsKLSAgfTsKLSAgZnVuY3Rpb24gU2Vuc29yX1JlbW92ZUNv
bmZpZ3VyYXRpb25fUGFyYW1zKHZhbHVlcykgewotICAgIHRoaXMuaW5pdERlZmF1bHRzXygpOwot
ICAgIHRoaXMuaW5pdEZpZWxkc18odmFsdWVzKTsKLSAgfQotCi0KLSAgU2Vuc29yX1JlbW92ZUNv
bmZpZ3VyYXRpb25fUGFyYW1zLnByb3RvdHlwZS5pbml0RGVmYXVsdHNfID0gZnVuY3Rpb24oKSB7
Ci0gICAgdGhpcy5jb25maWd1cmF0aW9uID0gbnVsbDsKLSAgfTsKLSAgU2Vuc29yX1JlbW92ZUNv
bmZpZ3VyYXRpb25fUGFyYW1zLnByb3RvdHlwZS5pbml0RmllbGRzXyA9IGZ1bmN0aW9uKGZpZWxk
cykgewotICAgIGZvcih2YXIgZmllbGQgaW4gZmllbGRzKSB7Ci0gICAgICAgIGlmICh0aGlzLmhh
c093blByb3BlcnR5KGZpZWxkKSkKLSAgICAgICAgICB0aGlzW2ZpZWxkXSA9IGZpZWxkc1tmaWVs
ZF07Ci0gICAgfQotICB9OwotCi0gIFNlbnNvcl9SZW1vdmVDb25maWd1cmF0aW9uX1BhcmFtcy52
YWxpZGF0ZSA9IGZ1bmN0aW9uKG1lc3NhZ2VWYWxpZGF0b3IsIG9mZnNldCkgewotICAgIHZhciBl
cnI7Ci0gICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdEhlYWRlcihvZmZz
ZXQsIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplKTsKLSAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3Iu
dmFsaWRhdGlvbkVycm9yLk5PTkUpCi0gICAgICAgIHJldHVybiBlcnI7Ci0KLSAgICB2YXIga1Zl
cnNpb25TaXplcyA9IFsKLSAgICAgIHt2ZXJzaW9uOiAwLCBudW1CeXRlczogMTZ9Ci0gICAgXTsK
LSAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0VmVyc2lvbihvZmZzZXQs
IGtWZXJzaW9uU2l6ZXMpOwotICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJy
b3IuTk9ORSkKLSAgICAgICAgcmV0dXJuIGVycjsKLQotCi0gICAgLy8gdmFsaWRhdGUgU2Vuc29y
X1JlbW92ZUNvbmZpZ3VyYXRpb25fUGFyYW1zLmNvbmZpZ3VyYXRpb24KLSAgICBlcnIgPSBtZXNz
YWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0UG9pbnRlcihvZmZzZXQgKyBjb2RlYy5rU3RydWN0
SGVhZGVyU2l6ZSArIDAsIFNlbnNvckNvbmZpZ3VyYXRpb24sIGZhbHNlKTsKLSAgICBpZiAoZXJy
ICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCi0gICAgICAgIHJldHVybiBlcnI7
Ci0KLSAgICByZXR1cm4gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FOwotICB9OwotCi0g
IFNlbnNvcl9SZW1vdmVDb25maWd1cmF0aW9uX1BhcmFtcy5lbmNvZGVkU2l6ZSA9IGNvZGVjLmtT
dHJ1Y3RIZWFkZXJTaXplICsgODsKLQotICBTZW5zb3JfUmVtb3ZlQ29uZmlndXJhdGlvbl9QYXJh
bXMuZGVjb2RlID0gZnVuY3Rpb24oZGVjb2RlcikgewotICAgIHZhciBwYWNrZWQ7Ci0gICAgdmFy
IHZhbCA9IG5ldyBTZW5zb3JfUmVtb3ZlQ29uZmlndXJhdGlvbl9QYXJhbXMoKTsKLSAgICB2YXIg
bnVtYmVyT2ZCeXRlcyA9IGRlY29kZXIucmVhZFVpbnQzMigpOwotICAgIHZhciB2ZXJzaW9uID0g
ZGVjb2Rlci5yZWFkVWludDMyKCk7Ci0gICAgdmFsLmNvbmZpZ3VyYXRpb24gPSBkZWNvZGVyLmRl
Y29kZVN0cnVjdFBvaW50ZXIoU2Vuc29yQ29uZmlndXJhdGlvbik7Ci0gICAgcmV0dXJuIHZhbDsK
LSAgfTsKLQotICBTZW5zb3JfUmVtb3ZlQ29uZmlndXJhdGlvbl9QYXJhbXMuZW5jb2RlID0gZnVu
Y3Rpb24oZW5jb2RlciwgdmFsKSB7Ci0gICAgdmFyIHBhY2tlZDsKLSAgICBlbmNvZGVyLndyaXRl
VWludDMyKFNlbnNvcl9SZW1vdmVDb25maWd1cmF0aW9uX1BhcmFtcy5lbmNvZGVkU2l6ZSk7Ci0g
ICAgZW5jb2Rlci53cml0ZVVpbnQzMigwKTsKLSAgICBlbmNvZGVyLmVuY29kZVN0cnVjdFBvaW50
ZXIoU2Vuc29yQ29uZmlndXJhdGlvbiwgdmFsLmNvbmZpZ3VyYXRpb24pOwotICB9OwotICBmdW5j
dGlvbiBTZW5zb3JfU3VzcGVuZF9QYXJhbXModmFsdWVzKSB7Ci0gICAgdGhpcy5pbml0RGVmYXVs
dHNfKCk7Ci0gICAgdGhpcy5pbml0RmllbGRzXyh2YWx1ZXMpOwotICB9Ci0KLQotICBTZW5zb3Jf
U3VzcGVuZF9QYXJhbXMucHJvdG90eXBlLmluaXREZWZhdWx0c18gPSBmdW5jdGlvbigpIHsKLSAg
fTsKLSAgU2Vuc29yX1N1c3BlbmRfUGFyYW1zLnByb3RvdHlwZS5pbml0RmllbGRzXyA9IGZ1bmN0
aW9uKGZpZWxkcykgewotICAgIGZvcih2YXIgZmllbGQgaW4gZmllbGRzKSB7Ci0gICAgICAgIGlm
ICh0aGlzLmhhc093blByb3BlcnR5KGZpZWxkKSkKLSAgICAgICAgICB0aGlzW2ZpZWxkXSA9IGZp
ZWxkc1tmaWVsZF07Ci0gICAgfQotICB9OwotCi0gIFNlbnNvcl9TdXNwZW5kX1BhcmFtcy52YWxp
ZGF0ZSA9IGZ1bmN0aW9uKG1lc3NhZ2VWYWxpZGF0b3IsIG9mZnNldCkgewotICAgIHZhciBlcnI7
Ci0gICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdEhlYWRlcihvZmZzZXQs
IGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplKTsKLSAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFs
aWRhdGlvbkVycm9yLk5PTkUpCi0gICAgICAgIHJldHVybiBlcnI7Ci0KLSAgICB2YXIga1ZlcnNp
b25TaXplcyA9IFsKLSAgICAgIHt2ZXJzaW9uOiAwLCBudW1CeXRlczogOH0KLSAgICBdOwotICAg
IGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RWZXJzaW9uKG9mZnNldCwga1Zl
cnNpb25TaXplcyk7Ci0gICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5O
T05FKQotICAgICAgICByZXR1cm4gZXJyOwotCi0gICAgcmV0dXJuIHZhbGlkYXRvci52YWxpZGF0
aW9uRXJyb3IuTk9ORTsKLSAgfTsKLQotICBTZW5zb3JfU3VzcGVuZF9QYXJhbXMuZW5jb2RlZFNp
emUgPSBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDA7Ci0KLSAgU2Vuc29yX1N1c3BlbmRfUGFy
YW1zLmRlY29kZSA9IGZ1bmN0aW9uKGRlY29kZXIpIHsKLSAgICB2YXIgcGFja2VkOwotICAgIHZh
ciB2YWwgPSBuZXcgU2Vuc29yX1N1c3BlbmRfUGFyYW1zKCk7Ci0gICAgdmFyIG51bWJlck9mQnl0
ZXMgPSBkZWNvZGVyLnJlYWRVaW50MzIoKTsKLSAgICB2YXIgdmVyc2lvbiA9IGRlY29kZXIucmVh
ZFVpbnQzMigpOwotICAgIHJldHVybiB2YWw7Ci0gIH07Ci0KLSAgU2Vuc29yX1N1c3BlbmRfUGFy
YW1zLmVuY29kZSA9IGZ1bmN0aW9uKGVuY29kZXIsIHZhbCkgewotICAgIHZhciBwYWNrZWQ7Ci0g
ICAgZW5jb2Rlci53cml0ZVVpbnQzMihTZW5zb3JfU3VzcGVuZF9QYXJhbXMuZW5jb2RlZFNpemUp
OwotICAgIGVuY29kZXIud3JpdGVVaW50MzIoMCk7Ci0gIH07Ci0gIGZ1bmN0aW9uIFNlbnNvcl9S
ZXN1bWVfUGFyYW1zKHZhbHVlcykgewotICAgIHRoaXMuaW5pdERlZmF1bHRzXygpOwotICAgIHRo
aXMuaW5pdEZpZWxkc18odmFsdWVzKTsKLSAgfQotCi0KLSAgU2Vuc29yX1Jlc3VtZV9QYXJhbXMu
cHJvdG90eXBlLmluaXREZWZhdWx0c18gPSBmdW5jdGlvbigpIHsKLSAgfTsKLSAgU2Vuc29yX1Jl
c3VtZV9QYXJhbXMucHJvdG90eXBlLmluaXRGaWVsZHNfID0gZnVuY3Rpb24oZmllbGRzKSB7Ci0g
ICAgZm9yKHZhciBmaWVsZCBpbiBmaWVsZHMpIHsKLSAgICAgICAgaWYgKHRoaXMuaGFzT3duUHJv
cGVydHkoZmllbGQpKQotICAgICAgICAgIHRoaXNbZmllbGRdID0gZmllbGRzW2ZpZWxkXTsKLSAg
ICB9Ci0gIH07Ci0KLSAgU2Vuc29yX1Jlc3VtZV9QYXJhbXMudmFsaWRhdGUgPSBmdW5jdGlvbiht
ZXNzYWdlVmFsaWRhdG9yLCBvZmZzZXQpIHsKLSAgICB2YXIgZXJyOwotICAgIGVyciA9IG1lc3Nh
Z2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RIZWFkZXIob2Zmc2V0LCBjb2RlYy5rU3RydWN0SGVh
ZGVyU2l6ZSk7Ci0gICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05F
KQotICAgICAgICByZXR1cm4gZXJyOwotCi0gICAgdmFyIGtWZXJzaW9uU2l6ZXMgPSBbCi0gICAg
ICB7dmVyc2lvbjogMCwgbnVtQnl0ZXM6IDh9Ci0gICAgXTsKLSAgICBlcnIgPSBtZXNzYWdlVmFs
aWRhdG9yLnZhbGlkYXRlU3RydWN0VmVyc2lvbihvZmZzZXQsIGtWZXJzaW9uU2l6ZXMpOwotICAg
IGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKLSAgICAgICAgcmV0
dXJuIGVycjsKLQotICAgIHJldHVybiB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkU7Ci0g
IH07Ci0KLSAgU2Vuc29yX1Jlc3VtZV9QYXJhbXMuZW5jb2RlZFNpemUgPSBjb2RlYy5rU3RydWN0
SGVhZGVyU2l6ZSArIDA7Ci0KLSAgU2Vuc29yX1Jlc3VtZV9QYXJhbXMuZGVjb2RlID0gZnVuY3Rp
b24oZGVjb2RlcikgewotICAgIHZhciBwYWNrZWQ7Ci0gICAgdmFyIHZhbCA9IG5ldyBTZW5zb3Jf
UmVzdW1lX1BhcmFtcygpOwotICAgIHZhciBudW1iZXJPZkJ5dGVzID0gZGVjb2Rlci5yZWFkVWlu
dDMyKCk7Ci0gICAgdmFyIHZlcnNpb24gPSBkZWNvZGVyLnJlYWRVaW50MzIoKTsKLSAgICByZXR1
cm4gdmFsOwotICB9OwotCi0gIFNlbnNvcl9SZXN1bWVfUGFyYW1zLmVuY29kZSA9IGZ1bmN0aW9u
KGVuY29kZXIsIHZhbCkgewotICAgIHZhciBwYWNrZWQ7Ci0gICAgZW5jb2Rlci53cml0ZVVpbnQz
MihTZW5zb3JfUmVzdW1lX1BhcmFtcy5lbmNvZGVkU2l6ZSk7Ci0gICAgZW5jb2Rlci53cml0ZVVp
bnQzMigwKTsKLSAgfTsKLSAgZnVuY3Rpb24gU2Vuc29yX0NvbmZpZ3VyZVJlYWRpbmdDaGFuZ2VO
b3RpZmljYXRpb25zX1BhcmFtcyh2YWx1ZXMpIHsKLSAgICB0aGlzLmluaXREZWZhdWx0c18oKTsK
LSAgICB0aGlzLmluaXRGaWVsZHNfKHZhbHVlcyk7Ci0gIH0KLQotCi0gIFNlbnNvcl9Db25maWd1
cmVSZWFkaW5nQ2hhbmdlTm90aWZpY2F0aW9uc19QYXJhbXMucHJvdG90eXBlLmluaXREZWZhdWx0
c18gPSBmdW5jdGlvbigpIHsKLSAgICB0aGlzLmVuYWJsZWQgPSBmYWxzZTsKLSAgfTsKLSAgU2Vu
c29yX0NvbmZpZ3VyZVJlYWRpbmdDaGFuZ2VOb3RpZmljYXRpb25zX1BhcmFtcy5wcm90b3R5cGUu
aW5pdEZpZWxkc18gPSBmdW5jdGlvbihmaWVsZHMpIHsKLSAgICBmb3IodmFyIGZpZWxkIGluIGZp
ZWxkcykgewotICAgICAgICBpZiAodGhpcy5oYXNPd25Qcm9wZXJ0eShmaWVsZCkpCi0gICAgICAg
ICAgdGhpc1tmaWVsZF0gPSBmaWVsZHNbZmllbGRdOwotICAgIH0KLSAgfTsKLQotICBTZW5zb3Jf
Q29uZmlndXJlUmVhZGluZ0NoYW5nZU5vdGlmaWNhdGlvbnNfUGFyYW1zLnZhbGlkYXRlID0gZnVu
Y3Rpb24obWVzc2FnZVZhbGlkYXRvciwgb2Zmc2V0KSB7Ci0gICAgdmFyIGVycjsKLSAgICBlcnIg
PSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0SGVhZGVyKG9mZnNldCwgY29kZWMua1N0
cnVjdEhlYWRlclNpemUpOwotICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJy
b3IuTk9ORSkKLSAgICAgICAgcmV0dXJuIGVycjsKLQotICAgIHZhciBrVmVyc2lvblNpemVzID0g
WwotICAgICAge3ZlcnNpb246IDAsIG51bUJ5dGVzOiAxNn0KLSAgICBdOwotICAgIGVyciA9IG1l
c3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RWZXJzaW9uKG9mZnNldCwga1ZlcnNpb25TaXpl
cyk7Ci0gICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQotICAg
ICAgICByZXR1cm4gZXJyOwotCi0KLSAgICByZXR1cm4gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJv
ci5OT05FOwotICB9OwotCi0gIFNlbnNvcl9Db25maWd1cmVSZWFkaW5nQ2hhbmdlTm90aWZpY2F0
aW9uc19QYXJhbXMuZW5jb2RlZFNpemUgPSBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDg7Ci0K
LSAgU2Vuc29yX0NvbmZpZ3VyZVJlYWRpbmdDaGFuZ2VOb3RpZmljYXRpb25zX1BhcmFtcy5kZWNv
ZGUgPSBmdW5jdGlvbihkZWNvZGVyKSB7Ci0gICAgdmFyIHBhY2tlZDsKLSAgICB2YXIgdmFsID0g
bmV3IFNlbnNvcl9Db25maWd1cmVSZWFkaW5nQ2hhbmdlTm90aWZpY2F0aW9uc19QYXJhbXMoKTsK
LSAgICB2YXIgbnVtYmVyT2ZCeXRlcyA9IGRlY29kZXIucmVhZFVpbnQzMigpOwotICAgIHZhciB2
ZXJzaW9uID0gZGVjb2Rlci5yZWFkVWludDMyKCk7Ci0gICAgcGFja2VkID0gZGVjb2Rlci5yZWFk
VWludDgoKTsKLSAgICB2YWwuZW5hYmxlZCA9IChwYWNrZWQgPj4gMCkgJiAxID8gdHJ1ZSA6IGZh
bHNlOwotICAgIGRlY29kZXIuc2tpcCgxKTsKLSAgICBkZWNvZGVyLnNraXAoMSk7Ci0gICAgZGVj
b2Rlci5za2lwKDEpOwotICAgIGRlY29kZXIuc2tpcCgxKTsKLSAgICBkZWNvZGVyLnNraXAoMSk7
Ci0gICAgZGVjb2Rlci5za2lwKDEpOwotICAgIGRlY29kZXIuc2tpcCgxKTsKLSAgICByZXR1cm4g
dmFsOwotICB9OwotCi0gIFNlbnNvcl9Db25maWd1cmVSZWFkaW5nQ2hhbmdlTm90aWZpY2F0aW9u
c19QYXJhbXMuZW5jb2RlID0gZnVuY3Rpb24oZW5jb2RlciwgdmFsKSB7Ci0gICAgdmFyIHBhY2tl
ZDsKLSAgICBlbmNvZGVyLndyaXRlVWludDMyKFNlbnNvcl9Db25maWd1cmVSZWFkaW5nQ2hhbmdl
Tm90aWZpY2F0aW9uc19QYXJhbXMuZW5jb2RlZFNpemUpOwotICAgIGVuY29kZXIud3JpdGVVaW50
MzIoMCk7Ci0gICAgcGFja2VkID0gMDsKLSAgICBwYWNrZWQgfD0gKHZhbC5lbmFibGVkICYgMSkg
PDwgMAotICAgIGVuY29kZXIud3JpdGVVaW50OChwYWNrZWQpOwotICAgIGVuY29kZXIuc2tpcCgx
KTsKLSAgICBlbmNvZGVyLnNraXAoMSk7Ci0gICAgZW5jb2Rlci5za2lwKDEpOwotICAgIGVuY29k
ZXIuc2tpcCgxKTsKLSAgICBlbmNvZGVyLnNraXAoMSk7Ci0gICAgZW5jb2Rlci5za2lwKDEpOwot
ICAgIGVuY29kZXIuc2tpcCgxKTsKLSAgfTsKLSAgZnVuY3Rpb24gU2Vuc29yQ2xpZW50X1JhaXNl
RXJyb3JfUGFyYW1zKHZhbHVlcykgewotICAgIHRoaXMuaW5pdERlZmF1bHRzXygpOwotICAgIHRo
aXMuaW5pdEZpZWxkc18odmFsdWVzKTsKLSAgfQotCi0KLSAgU2Vuc29yQ2xpZW50X1JhaXNlRXJy
b3JfUGFyYW1zLnByb3RvdHlwZS5pbml0RGVmYXVsdHNfID0gZnVuY3Rpb24oKSB7Ci0gIH07Ci0g
IFNlbnNvckNsaWVudF9SYWlzZUVycm9yX1BhcmFtcy5wcm90b3R5cGUuaW5pdEZpZWxkc18gPSBm
dW5jdGlvbihmaWVsZHMpIHsKLSAgICBmb3IodmFyIGZpZWxkIGluIGZpZWxkcykgewotICAgICAg
ICBpZiAodGhpcy5oYXNPd25Qcm9wZXJ0eShmaWVsZCkpCi0gICAgICAgICAgdGhpc1tmaWVsZF0g
PSBmaWVsZHNbZmllbGRdOwotICAgIH0KLSAgfTsKLQotICBTZW5zb3JDbGllbnRfUmFpc2VFcnJv
cl9QYXJhbXMudmFsaWRhdGUgPSBmdW5jdGlvbihtZXNzYWdlVmFsaWRhdG9yLCBvZmZzZXQpIHsK
LSAgICB2YXIgZXJyOwotICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RI
ZWFkZXIob2Zmc2V0LCBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSk7Ci0gICAgaWYgKGVyciAhPT0g
dmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQotICAgICAgICByZXR1cm4gZXJyOwotCi0g
ICAgdmFyIGtWZXJzaW9uU2l6ZXMgPSBbCi0gICAgICB7dmVyc2lvbjogMCwgbnVtQnl0ZXM6IDh9
Ci0gICAgXTsKLSAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0VmVyc2lv
bihvZmZzZXQsIGtWZXJzaW9uU2l6ZXMpOwotICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxp
ZGF0aW9uRXJyb3IuTk9ORSkKLSAgICAgICAgcmV0dXJuIGVycjsKLQotICAgIHJldHVybiB2YWxp
ZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkU7Ci0gIH07Ci0KLSAgU2Vuc29yQ2xpZW50X1JhaXNl
RXJyb3JfUGFyYW1zLmVuY29kZWRTaXplID0gY29kZWMua1N0cnVjdEhlYWRlclNpemUgKyAwOwot
Ci0gIFNlbnNvckNsaWVudF9SYWlzZUVycm9yX1BhcmFtcy5kZWNvZGUgPSBmdW5jdGlvbihkZWNv
ZGVyKSB7Ci0gICAgdmFyIHBhY2tlZDsKLSAgICB2YXIgdmFsID0gbmV3IFNlbnNvckNsaWVudF9S
YWlzZUVycm9yX1BhcmFtcygpOwotICAgIHZhciBudW1iZXJPZkJ5dGVzID0gZGVjb2Rlci5yZWFk
VWludDMyKCk7Ci0gICAgdmFyIHZlcnNpb24gPSBkZWNvZGVyLnJlYWRVaW50MzIoKTsKLSAgICBy
ZXR1cm4gdmFsOwotICB9OwotCi0gIFNlbnNvckNsaWVudF9SYWlzZUVycm9yX1BhcmFtcy5lbmNv
ZGUgPSBmdW5jdGlvbihlbmNvZGVyLCB2YWwpIHsKLSAgICB2YXIgcGFja2VkOwotICAgIGVuY29k
ZXIud3JpdGVVaW50MzIoU2Vuc29yQ2xpZW50X1JhaXNlRXJyb3JfUGFyYW1zLmVuY29kZWRTaXpl
KTsKLSAgICBlbmNvZGVyLndyaXRlVWludDMyKDApOwotICB9OwotICBmdW5jdGlvbiBTZW5zb3JD
bGllbnRfU2Vuc29yUmVhZGluZ0NoYW5nZWRfUGFyYW1zKHZhbHVlcykgewotICAgIHRoaXMuaW5p
dERlZmF1bHRzXygpOwotICAgIHRoaXMuaW5pdEZpZWxkc18odmFsdWVzKTsKLSAgfQotCi0KLSAg
U2Vuc29yQ2xpZW50X1NlbnNvclJlYWRpbmdDaGFuZ2VkX1BhcmFtcy5wcm90b3R5cGUuaW5pdERl
ZmF1bHRzXyA9IGZ1bmN0aW9uKCkgewotICB9OwotICBTZW5zb3JDbGllbnRfU2Vuc29yUmVhZGlu
Z0NoYW5nZWRfUGFyYW1zLnByb3RvdHlwZS5pbml0RmllbGRzXyA9IGZ1bmN0aW9uKGZpZWxkcykg
ewotICAgIGZvcih2YXIgZmllbGQgaW4gZmllbGRzKSB7Ci0gICAgICAgIGlmICh0aGlzLmhhc093
blByb3BlcnR5KGZpZWxkKSkKLSAgICAgICAgICB0aGlzW2ZpZWxkXSA9IGZpZWxkc1tmaWVsZF07
Ci0gICAgfQotICB9OwotCi0gIFNlbnNvckNsaWVudF9TZW5zb3JSZWFkaW5nQ2hhbmdlZF9QYXJh
bXMudmFsaWRhdGUgPSBmdW5jdGlvbihtZXNzYWdlVmFsaWRhdG9yLCBvZmZzZXQpIHsKLSAgICB2
YXIgZXJyOwotICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RIZWFkZXIo
b2Zmc2V0LCBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSk7Ci0gICAgaWYgKGVyciAhPT0gdmFsaWRh
dG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQotICAgICAgICByZXR1cm4gZXJyOwotCi0gICAgdmFy
IGtWZXJzaW9uU2l6ZXMgPSBbCi0gICAgICB7dmVyc2lvbjogMCwgbnVtQnl0ZXM6IDh9Ci0gICAg
XTsKLSAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0VmVyc2lvbihvZmZz
ZXQsIGtWZXJzaW9uU2l6ZXMpOwotICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9u
RXJyb3IuTk9ORSkKLSAgICAgICAgcmV0dXJuIGVycjsKLQotICAgIHJldHVybiB2YWxpZGF0b3Iu
dmFsaWRhdGlvbkVycm9yLk5PTkU7Ci0gIH07Ci0KLSAgU2Vuc29yQ2xpZW50X1NlbnNvclJlYWRp
bmdDaGFuZ2VkX1BhcmFtcy5lbmNvZGVkU2l6ZSA9IGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsg
MDsKLQotICBTZW5zb3JDbGllbnRfU2Vuc29yUmVhZGluZ0NoYW5nZWRfUGFyYW1zLmRlY29kZSA9
IGZ1bmN0aW9uKGRlY29kZXIpIHsKLSAgICB2YXIgcGFja2VkOwotICAgIHZhciB2YWwgPSBuZXcg
U2Vuc29yQ2xpZW50X1NlbnNvclJlYWRpbmdDaGFuZ2VkX1BhcmFtcygpOwotICAgIHZhciBudW1i
ZXJPZkJ5dGVzID0gZGVjb2Rlci5yZWFkVWludDMyKCk7Ci0gICAgdmFyIHZlcnNpb24gPSBkZWNv
ZGVyLnJlYWRVaW50MzIoKTsKLSAgICByZXR1cm4gdmFsOwotICB9OwotCi0gIFNlbnNvckNsaWVu
dF9TZW5zb3JSZWFkaW5nQ2hhbmdlZF9QYXJhbXMuZW5jb2RlID0gZnVuY3Rpb24oZW5jb2Rlciwg
dmFsKSB7Ci0gICAgdmFyIHBhY2tlZDsKLSAgICBlbmNvZGVyLndyaXRlVWludDMyKFNlbnNvckNs
aWVudF9TZW5zb3JSZWFkaW5nQ2hhbmdlZF9QYXJhbXMuZW5jb2RlZFNpemUpOwotICAgIGVuY29k
ZXIud3JpdGVVaW50MzIoMCk7Ci0gIH07Ci0gIHZhciBrU2Vuc29yX0dldERlZmF1bHRDb25maWd1
cmF0aW9uX05hbWUgPSAwOwotICB2YXIga1NlbnNvcl9BZGRDb25maWd1cmF0aW9uX05hbWUgPSAx
OwotICB2YXIga1NlbnNvcl9SZW1vdmVDb25maWd1cmF0aW9uX05hbWUgPSAyOwotICB2YXIga1Nl
bnNvcl9TdXNwZW5kX05hbWUgPSAzOwotICB2YXIga1NlbnNvcl9SZXN1bWVfTmFtZSA9IDQ7Ci0g
IHZhciBrU2Vuc29yX0NvbmZpZ3VyZVJlYWRpbmdDaGFuZ2VOb3RpZmljYXRpb25zX05hbWUgPSA1
OwotCi0gIGZ1bmN0aW9uIFNlbnNvclB0cihoYW5kbGVPclB0ckluZm8pIHsKLSAgICB0aGlzLnB0
ciA9IG5ldyBiaW5kaW5ncy5JbnRlcmZhY2VQdHJDb250cm9sbGVyKFNlbnNvciwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZU9yUHRySW5m
byk7Ci0gIH0KLQotICBmdW5jdGlvbiBTZW5zb3JBc3NvY2lhdGVkUHRyKGFzc29jaWF0ZWRJbnRl
cmZhY2VQdHJJbmZvKSB7Ci0gICAgdGhpcy5wdHIgPSBuZXcgYXNzb2NpYXRlZEJpbmRpbmdzLkFz
c29jaWF0ZWRJbnRlcmZhY2VQdHJDb250cm9sbGVyKAotICAgICAgICBTZW5zb3IsIGFzc29jaWF0
ZWRJbnRlcmZhY2VQdHJJbmZvKTsKLSAgfQotCi0gIFNlbnNvckFzc29jaWF0ZWRQdHIucHJvdG90
eXBlID0KLSAgICAgIE9iamVjdC5jcmVhdGUoU2Vuc29yUHRyLnByb3RvdHlwZSk7Ci0gIFNlbnNv
ckFzc29jaWF0ZWRQdHIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0KLSAgICAgIFNlbnNvckFzc29j
aWF0ZWRQdHI7Ci0KLSAgZnVuY3Rpb24gU2Vuc29yUHJveHkocmVjZWl2ZXIpIHsKLSAgICB0aGlz
LnJlY2VpdmVyXyA9IHJlY2VpdmVyOwotICB9Ci0gIFNlbnNvclB0ci5wcm90b3R5cGUuZ2V0RGVm
YXVsdENvbmZpZ3VyYXRpb24gPSBmdW5jdGlvbigpIHsKLSAgICByZXR1cm4gU2Vuc29yUHJveHku
cHJvdG90eXBlLmdldERlZmF1bHRDb25maWd1cmF0aW9uCi0gICAgICAgIC5hcHBseSh0aGlzLnB0
ci5nZXRQcm94eSgpLCBhcmd1bWVudHMpOwotICB9OwotCi0gIFNlbnNvclByb3h5LnByb3RvdHlw
ZS5nZXREZWZhdWx0Q29uZmlndXJhdGlvbiA9IGZ1bmN0aW9uKCkgewotICAgIHZhciBwYXJhbXNf
ID0gbmV3IFNlbnNvcl9HZXREZWZhdWx0Q29uZmlndXJhdGlvbl9QYXJhbXMoKTsKLSAgICByZXR1
cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7Ci0gICAgICB2YXIgYnVp
bGRlciA9IG5ldyBjb2RlYy5NZXNzYWdlVjFCdWlsZGVyKAotICAgICAgICAgIGtTZW5zb3JfR2V0
RGVmYXVsdENvbmZpZ3VyYXRpb25fTmFtZSwKLSAgICAgICAgICBjb2RlYy5hbGlnbihTZW5zb3Jf
R2V0RGVmYXVsdENvbmZpZ3VyYXRpb25fUGFyYW1zLmVuY29kZWRTaXplKSwKLSAgICAgICAgICBj
b2RlYy5rTWVzc2FnZUV4cGVjdHNSZXNwb25zZSwgMCk7Ci0gICAgICBidWlsZGVyLmVuY29kZVN0
cnVjdChTZW5zb3JfR2V0RGVmYXVsdENvbmZpZ3VyYXRpb25fUGFyYW1zLCBwYXJhbXNfKTsKLSAg
ICAgIHZhciBtZXNzYWdlID0gYnVpbGRlci5maW5pc2goKTsKLSAgICAgIHRoaXMucmVjZWl2ZXJf
LmFjY2VwdEFuZEV4cGVjdFJlc3BvbnNlKG1lc3NhZ2UpLnRoZW4oZnVuY3Rpb24obWVzc2FnZSkg
ewotICAgICAgICB2YXIgcmVhZGVyID0gbmV3IGNvZGVjLk1lc3NhZ2VSZWFkZXIobWVzc2FnZSk7
Ci0gICAgICAgIHZhciByZXNwb25zZVBhcmFtcyA9Ci0gICAgICAgICAgICByZWFkZXIuZGVjb2Rl
U3RydWN0KFNlbnNvcl9HZXREZWZhdWx0Q29uZmlndXJhdGlvbl9SZXNwb25zZVBhcmFtcyk7Ci0g
ICAgICAgIHJlc29sdmUocmVzcG9uc2VQYXJhbXMpOwotICAgICAgfSkuY2F0Y2goZnVuY3Rpb24o
cmVzdWx0KSB7Ci0gICAgICAgIHJlamVjdChFcnJvcigiQ29ubmVjdGlvbiBlcnJvcjogIiArIHJl
c3VsdCkpOwotICAgICAgfSk7Ci0gICAgfS5iaW5kKHRoaXMpKTsKLSAgfTsKLSAgU2Vuc29yUHRy
LnByb3RvdHlwZS5hZGRDb25maWd1cmF0aW9uID0gZnVuY3Rpb24oKSB7Ci0gICAgcmV0dXJuIFNl
bnNvclByb3h5LnByb3RvdHlwZS5hZGRDb25maWd1cmF0aW9uCi0gICAgICAgIC5hcHBseSh0aGlz
LnB0ci5nZXRQcm94eSgpLCBhcmd1bWVudHMpOwotICB9OwotCi0gIFNlbnNvclByb3h5LnByb3Rv
dHlwZS5hZGRDb25maWd1cmF0aW9uID0gZnVuY3Rpb24oY29uZmlndXJhdGlvbikgewotICAgIHZh
ciBwYXJhbXNfID0gbmV3IFNlbnNvcl9BZGRDb25maWd1cmF0aW9uX1BhcmFtcygpOwotICAgIHBh
cmFtc18uY29uZmlndXJhdGlvbiA9IGNvbmZpZ3VyYXRpb247Ci0gICAgcmV0dXJuIG5ldyBQcm9t
aXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkgewotICAgICAgdmFyIGJ1aWxkZXIgPSBuZXcg
Y29kZWMuTWVzc2FnZVYxQnVpbGRlcigKLSAgICAgICAgICBrU2Vuc29yX0FkZENvbmZpZ3VyYXRp
b25fTmFtZSwKLSAgICAgICAgICBjb2RlYy5hbGlnbihTZW5zb3JfQWRkQ29uZmlndXJhdGlvbl9Q
YXJhbXMuZW5jb2RlZFNpemUpLAotICAgICAgICAgIGNvZGVjLmtNZXNzYWdlRXhwZWN0c1Jlc3Bv
bnNlLCAwKTsKLSAgICAgIGJ1aWxkZXIuZW5jb2RlU3RydWN0KFNlbnNvcl9BZGRDb25maWd1cmF0
aW9uX1BhcmFtcywgcGFyYW1zXyk7Ci0gICAgICB2YXIgbWVzc2FnZSA9IGJ1aWxkZXIuZmluaXNo
KCk7Ci0gICAgICB0aGlzLnJlY2VpdmVyXy5hY2NlcHRBbmRFeHBlY3RSZXNwb25zZShtZXNzYWdl
KS50aGVuKGZ1bmN0aW9uKG1lc3NhZ2UpIHsKLSAgICAgICAgdmFyIHJlYWRlciA9IG5ldyBjb2Rl
Yy5NZXNzYWdlUmVhZGVyKG1lc3NhZ2UpOwotICAgICAgICB2YXIgcmVzcG9uc2VQYXJhbXMgPQot
ICAgICAgICAgICAgcmVhZGVyLmRlY29kZVN0cnVjdChTZW5zb3JfQWRkQ29uZmlndXJhdGlvbl9S
ZXNwb25zZVBhcmFtcyk7Ci0gICAgICAgIHJlc29sdmUocmVzcG9uc2VQYXJhbXMpOwotICAgICAg
fSkuY2F0Y2goZnVuY3Rpb24ocmVzdWx0KSB7Ci0gICAgICAgIHJlamVjdChFcnJvcigiQ29ubmVj
dGlvbiBlcnJvcjogIiArIHJlc3VsdCkpOwotICAgICAgfSk7Ci0gICAgfS5iaW5kKHRoaXMpKTsK
LSAgfTsKLSAgU2Vuc29yUHRyLnByb3RvdHlwZS5yZW1vdmVDb25maWd1cmF0aW9uID0gZnVuY3Rp
b24oKSB7Ci0gICAgcmV0dXJuIFNlbnNvclByb3h5LnByb3RvdHlwZS5yZW1vdmVDb25maWd1cmF0
aW9uCi0gICAgICAgIC5hcHBseSh0aGlzLnB0ci5nZXRQcm94eSgpLCBhcmd1bWVudHMpOwotICB9
OwotCi0gIFNlbnNvclByb3h5LnByb3RvdHlwZS5yZW1vdmVDb25maWd1cmF0aW9uID0gZnVuY3Rp
b24oY29uZmlndXJhdGlvbikgewotICAgIHZhciBwYXJhbXNfID0gbmV3IFNlbnNvcl9SZW1vdmVD
b25maWd1cmF0aW9uX1BhcmFtcygpOwotICAgIHBhcmFtc18uY29uZmlndXJhdGlvbiA9IGNvbmZp
Z3VyYXRpb247Ci0gICAgdmFyIGJ1aWxkZXIgPSBuZXcgY29kZWMuTWVzc2FnZVYwQnVpbGRlcigK
LSAgICAgICAga1NlbnNvcl9SZW1vdmVDb25maWd1cmF0aW9uX05hbWUsCi0gICAgICAgIGNvZGVj
LmFsaWduKFNlbnNvcl9SZW1vdmVDb25maWd1cmF0aW9uX1BhcmFtcy5lbmNvZGVkU2l6ZSkpOwot
ICAgIGJ1aWxkZXIuZW5jb2RlU3RydWN0KFNlbnNvcl9SZW1vdmVDb25maWd1cmF0aW9uX1BhcmFt
cywgcGFyYW1zXyk7Ci0gICAgdmFyIG1lc3NhZ2UgPSBidWlsZGVyLmZpbmlzaCgpOwotICAgIHRo
aXMucmVjZWl2ZXJfLmFjY2VwdChtZXNzYWdlKTsKLSAgfTsKLSAgU2Vuc29yUHRyLnByb3RvdHlw
ZS5zdXNwZW5kID0gZnVuY3Rpb24oKSB7Ci0gICAgcmV0dXJuIFNlbnNvclByb3h5LnByb3RvdHlw
ZS5zdXNwZW5kCi0gICAgICAgIC5hcHBseSh0aGlzLnB0ci5nZXRQcm94eSgpLCBhcmd1bWVudHMp
OwotICB9OwotCi0gIFNlbnNvclByb3h5LnByb3RvdHlwZS5zdXNwZW5kID0gZnVuY3Rpb24oKSB7
Ci0gICAgdmFyIHBhcmFtc18gPSBuZXcgU2Vuc29yX1N1c3BlbmRfUGFyYW1zKCk7Ci0gICAgdmFy
IGJ1aWxkZXIgPSBuZXcgY29kZWMuTWVzc2FnZVYwQnVpbGRlcigKLSAgICAgICAga1NlbnNvcl9T
dXNwZW5kX05hbWUsCi0gICAgICAgIGNvZGVjLmFsaWduKFNlbnNvcl9TdXNwZW5kX1BhcmFtcy5l
bmNvZGVkU2l6ZSkpOwotICAgIGJ1aWxkZXIuZW5jb2RlU3RydWN0KFNlbnNvcl9TdXNwZW5kX1Bh
cmFtcywgcGFyYW1zXyk7Ci0gICAgdmFyIG1lc3NhZ2UgPSBidWlsZGVyLmZpbmlzaCgpOwotICAg
IHRoaXMucmVjZWl2ZXJfLmFjY2VwdChtZXNzYWdlKTsKLSAgfTsKLSAgU2Vuc29yUHRyLnByb3Rv
dHlwZS5yZXN1bWUgPSBmdW5jdGlvbigpIHsKLSAgICByZXR1cm4gU2Vuc29yUHJveHkucHJvdG90
eXBlLnJlc3VtZQotICAgICAgICAuYXBwbHkodGhpcy5wdHIuZ2V0UHJveHkoKSwgYXJndW1lbnRz
KTsKLSAgfTsKLQotICBTZW5zb3JQcm94eS5wcm90b3R5cGUucmVzdW1lID0gZnVuY3Rpb24oKSB7
Ci0gICAgdmFyIHBhcmFtc18gPSBuZXcgU2Vuc29yX1Jlc3VtZV9QYXJhbXMoKTsKLSAgICB2YXIg
YnVpbGRlciA9IG5ldyBjb2RlYy5NZXNzYWdlVjBCdWlsZGVyKAotICAgICAgICBrU2Vuc29yX1Jl
c3VtZV9OYW1lLAotICAgICAgICBjb2RlYy5hbGlnbihTZW5zb3JfUmVzdW1lX1BhcmFtcy5lbmNv
ZGVkU2l6ZSkpOwotICAgIGJ1aWxkZXIuZW5jb2RlU3RydWN0KFNlbnNvcl9SZXN1bWVfUGFyYW1z
LCBwYXJhbXNfKTsKLSAgICB2YXIgbWVzc2FnZSA9IGJ1aWxkZXIuZmluaXNoKCk7Ci0gICAgdGhp
cy5yZWNlaXZlcl8uYWNjZXB0KG1lc3NhZ2UpOwotICB9OwotICBTZW5zb3JQdHIucHJvdG90eXBl
LmNvbmZpZ3VyZVJlYWRpbmdDaGFuZ2VOb3RpZmljYXRpb25zID0gZnVuY3Rpb24oKSB7Ci0gICAg
cmV0dXJuIFNlbnNvclByb3h5LnByb3RvdHlwZS5jb25maWd1cmVSZWFkaW5nQ2hhbmdlTm90aWZp
Y2F0aW9ucwotICAgICAgICAuYXBwbHkodGhpcy5wdHIuZ2V0UHJveHkoKSwgYXJndW1lbnRzKTsK
LSAgfTsKLQotICBTZW5zb3JQcm94eS5wcm90b3R5cGUuY29uZmlndXJlUmVhZGluZ0NoYW5nZU5v
dGlmaWNhdGlvbnMgPSBmdW5jdGlvbihlbmFibGVkKSB7Ci0gICAgdmFyIHBhcmFtc18gPSBuZXcg
U2Vuc29yX0NvbmZpZ3VyZVJlYWRpbmdDaGFuZ2VOb3RpZmljYXRpb25zX1BhcmFtcygpOwotICAg
IHBhcmFtc18uZW5hYmxlZCA9IGVuYWJsZWQ7Ci0gICAgdmFyIGJ1aWxkZXIgPSBuZXcgY29kZWMu
TWVzc2FnZVYwQnVpbGRlcigKLSAgICAgICAga1NlbnNvcl9Db25maWd1cmVSZWFkaW5nQ2hhbmdl
Tm90aWZpY2F0aW9uc19OYW1lLAotICAgICAgICBjb2RlYy5hbGlnbihTZW5zb3JfQ29uZmlndXJl
UmVhZGluZ0NoYW5nZU5vdGlmaWNhdGlvbnNfUGFyYW1zLmVuY29kZWRTaXplKSk7Ci0gICAgYnVp
bGRlci5lbmNvZGVTdHJ1Y3QoU2Vuc29yX0NvbmZpZ3VyZVJlYWRpbmdDaGFuZ2VOb3RpZmljYXRp
b25zX1BhcmFtcywgcGFyYW1zXyk7Ci0gICAgdmFyIG1lc3NhZ2UgPSBidWlsZGVyLmZpbmlzaCgp
OwotICAgIHRoaXMucmVjZWl2ZXJfLmFjY2VwdChtZXNzYWdlKTsKLSAgfTsKLQotICBmdW5jdGlv
biBTZW5zb3JTdHViKGRlbGVnYXRlKSB7Ci0gICAgdGhpcy5kZWxlZ2F0ZV8gPSBkZWxlZ2F0ZTsK
LSAgfQotICBTZW5zb3JTdHViLnByb3RvdHlwZS5nZXREZWZhdWx0Q29uZmlndXJhdGlvbiA9IGZ1
bmN0aW9uKCkgewotICAgIHJldHVybiB0aGlzLmRlbGVnYXRlXyAmJiB0aGlzLmRlbGVnYXRlXy5n
ZXREZWZhdWx0Q29uZmlndXJhdGlvbiAmJiB0aGlzLmRlbGVnYXRlXy5nZXREZWZhdWx0Q29uZmln
dXJhdGlvbigpOwotICB9Ci0gIFNlbnNvclN0dWIucHJvdG90eXBlLmFkZENvbmZpZ3VyYXRpb24g
PSBmdW5jdGlvbihjb25maWd1cmF0aW9uKSB7Ci0gICAgcmV0dXJuIHRoaXMuZGVsZWdhdGVfICYm
IHRoaXMuZGVsZWdhdGVfLmFkZENvbmZpZ3VyYXRpb24gJiYgdGhpcy5kZWxlZ2F0ZV8uYWRkQ29u
ZmlndXJhdGlvbihjb25maWd1cmF0aW9uKTsKLSAgfQotICBTZW5zb3JTdHViLnByb3RvdHlwZS5y
ZW1vdmVDb25maWd1cmF0aW9uID0gZnVuY3Rpb24oY29uZmlndXJhdGlvbikgewotICAgIHJldHVy
biB0aGlzLmRlbGVnYXRlXyAmJiB0aGlzLmRlbGVnYXRlXy5yZW1vdmVDb25maWd1cmF0aW9uICYm
IHRoaXMuZGVsZWdhdGVfLnJlbW92ZUNvbmZpZ3VyYXRpb24oY29uZmlndXJhdGlvbik7Ci0gIH0K
LSAgU2Vuc29yU3R1Yi5wcm90b3R5cGUuc3VzcGVuZCA9IGZ1bmN0aW9uKCkgewotICAgIHJldHVy
biB0aGlzLmRlbGVnYXRlXyAmJiB0aGlzLmRlbGVnYXRlXy5zdXNwZW5kICYmIHRoaXMuZGVsZWdh
dGVfLnN1c3BlbmQoKTsKLSAgfQotICBTZW5zb3JTdHViLnByb3RvdHlwZS5yZXN1bWUgPSBmdW5j
dGlvbigpIHsKLSAgICByZXR1cm4gdGhpcy5kZWxlZ2F0ZV8gJiYgdGhpcy5kZWxlZ2F0ZV8ucmVz
dW1lICYmIHRoaXMuZGVsZWdhdGVfLnJlc3VtZSgpOwotICB9Ci0gIFNlbnNvclN0dWIucHJvdG90
eXBlLmNvbmZpZ3VyZVJlYWRpbmdDaGFuZ2VOb3RpZmljYXRpb25zID0gZnVuY3Rpb24oZW5hYmxl
ZCkgewotICAgIHJldHVybiB0aGlzLmRlbGVnYXRlXyAmJiB0aGlzLmRlbGVnYXRlXy5jb25maWd1
cmVSZWFkaW5nQ2hhbmdlTm90aWZpY2F0aW9ucyAmJiB0aGlzLmRlbGVnYXRlXy5jb25maWd1cmVS
ZWFkaW5nQ2hhbmdlTm90aWZpY2F0aW9ucyhlbmFibGVkKTsKLSAgfQotCi0gIFNlbnNvclN0dWIu
cHJvdG90eXBlLmFjY2VwdCA9IGZ1bmN0aW9uKG1lc3NhZ2UpIHsKLSAgICB2YXIgcmVhZGVyID0g
bmV3IGNvZGVjLk1lc3NhZ2VSZWFkZXIobWVzc2FnZSk7Ci0gICAgc3dpdGNoIChyZWFkZXIubWVz
c2FnZU5hbWUpIHsKLSAgICBjYXNlIGtTZW5zb3JfUmVtb3ZlQ29uZmlndXJhdGlvbl9OYW1lOgot
ICAgICAgdmFyIHBhcmFtcyA9IHJlYWRlci5kZWNvZGVTdHJ1Y3QoU2Vuc29yX1JlbW92ZUNvbmZp
Z3VyYXRpb25fUGFyYW1zKTsKLSAgICAgIHRoaXMucmVtb3ZlQ29uZmlndXJhdGlvbihwYXJhbXMu
Y29uZmlndXJhdGlvbik7Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICBjYXNlIGtTZW5zb3JfU3Vz
cGVuZF9OYW1lOgotICAgICAgdmFyIHBhcmFtcyA9IHJlYWRlci5kZWNvZGVTdHJ1Y3QoU2Vuc29y
X1N1c3BlbmRfUGFyYW1zKTsKLSAgICAgIHRoaXMuc3VzcGVuZCgpOwotICAgICAgcmV0dXJuIHRy
dWU7Ci0gICAgY2FzZSBrU2Vuc29yX1Jlc3VtZV9OYW1lOgotICAgICAgdmFyIHBhcmFtcyA9IHJl
YWRlci5kZWNvZGVTdHJ1Y3QoU2Vuc29yX1Jlc3VtZV9QYXJhbXMpOwotICAgICAgdGhpcy5yZXN1
bWUoKTsKLSAgICAgIHJldHVybiB0cnVlOwotICAgIGNhc2Uga1NlbnNvcl9Db25maWd1cmVSZWFk
aW5nQ2hhbmdlTm90aWZpY2F0aW9uc19OYW1lOgotICAgICAgdmFyIHBhcmFtcyA9IHJlYWRlci5k
ZWNvZGVTdHJ1Y3QoU2Vuc29yX0NvbmZpZ3VyZVJlYWRpbmdDaGFuZ2VOb3RpZmljYXRpb25zX1Bh
cmFtcyk7Ci0gICAgICB0aGlzLmNvbmZpZ3VyZVJlYWRpbmdDaGFuZ2VOb3RpZmljYXRpb25zKHBh
cmFtcy5lbmFibGVkKTsKLSAgICAgIHJldHVybiB0cnVlOwotICAgIGRlZmF1bHQ6Ci0gICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgfQotICB9OwotCi0gIFNlbnNvclN0dWIucHJvdG90eXBlLmFjY2Vw
dFdpdGhSZXNwb25kZXIgPQotICAgICAgZnVuY3Rpb24obWVzc2FnZSwgcmVzcG9uZGVyKSB7Ci0g
ICAgdmFyIHJlYWRlciA9IG5ldyBjb2RlYy5NZXNzYWdlUmVhZGVyKG1lc3NhZ2UpOwotICAgIHN3
aXRjaCAocmVhZGVyLm1lc3NhZ2VOYW1lKSB7Ci0gICAgY2FzZSBrU2Vuc29yX0dldERlZmF1bHRD
b25maWd1cmF0aW9uX05hbWU6Ci0gICAgICB2YXIgcGFyYW1zID0gcmVhZGVyLmRlY29kZVN0cnVj
dChTZW5zb3JfR2V0RGVmYXVsdENvbmZpZ3VyYXRpb25fUGFyYW1zKTsKLSAgICAgIHRoaXMuZ2V0
RGVmYXVsdENvbmZpZ3VyYXRpb24oKS50aGVuKGZ1bmN0aW9uKHJlc3BvbnNlKSB7Ci0gICAgICAg
IHZhciByZXNwb25zZVBhcmFtcyA9Ci0gICAgICAgICAgICBuZXcgU2Vuc29yX0dldERlZmF1bHRD
b25maWd1cmF0aW9uX1Jlc3BvbnNlUGFyYW1zKCk7Ci0gICAgICAgIHJlc3BvbnNlUGFyYW1zLmNv
bmZpZ3VyYXRpb24gPSByZXNwb25zZS5jb25maWd1cmF0aW9uOwotICAgICAgICB2YXIgYnVpbGRl
ciA9IG5ldyBjb2RlYy5NZXNzYWdlVjFCdWlsZGVyKAotICAgICAgICAgICAga1NlbnNvcl9HZXRE
ZWZhdWx0Q29uZmlndXJhdGlvbl9OYW1lLAotICAgICAgICAgICAgY29kZWMuYWxpZ24oU2Vuc29y
X0dldERlZmF1bHRDb25maWd1cmF0aW9uX1Jlc3BvbnNlUGFyYW1zLmVuY29kZWRTaXplKSwKLSAg
ICAgICAgICAgIGNvZGVjLmtNZXNzYWdlSXNSZXNwb25zZSwgcmVhZGVyLnJlcXVlc3RJRCk7Ci0g
ICAgICAgIGJ1aWxkZXIuZW5jb2RlU3RydWN0KFNlbnNvcl9HZXREZWZhdWx0Q29uZmlndXJhdGlv
bl9SZXNwb25zZVBhcmFtcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2VQ
YXJhbXMpOwotICAgICAgICB2YXIgbWVzc2FnZSA9IGJ1aWxkZXIuZmluaXNoKCk7Ci0gICAgICAg
IHJlc3BvbmRlci5hY2NlcHQobWVzc2FnZSk7Ci0gICAgICB9KTsKLSAgICAgIHJldHVybiB0cnVl
OwotICAgIGNhc2Uga1NlbnNvcl9BZGRDb25maWd1cmF0aW9uX05hbWU6Ci0gICAgICB2YXIgcGFy
YW1zID0gcmVhZGVyLmRlY29kZVN0cnVjdChTZW5zb3JfQWRkQ29uZmlndXJhdGlvbl9QYXJhbXMp
OwotICAgICAgdGhpcy5hZGRDb25maWd1cmF0aW9uKHBhcmFtcy5jb25maWd1cmF0aW9uKS50aGVu
KGZ1bmN0aW9uKHJlc3BvbnNlKSB7Ci0gICAgICAgIHZhciByZXNwb25zZVBhcmFtcyA9Ci0gICAg
ICAgICAgICBuZXcgU2Vuc29yX0FkZENvbmZpZ3VyYXRpb25fUmVzcG9uc2VQYXJhbXMoKTsKLSAg
ICAgICAgcmVzcG9uc2VQYXJhbXMuc3VjY2VzcyA9IHJlc3BvbnNlLnN1Y2Nlc3M7Ci0gICAgICAg
IHZhciBidWlsZGVyID0gbmV3IGNvZGVjLk1lc3NhZ2VWMUJ1aWxkZXIoCi0gICAgICAgICAgICBr
U2Vuc29yX0FkZENvbmZpZ3VyYXRpb25fTmFtZSwKLSAgICAgICAgICAgIGNvZGVjLmFsaWduKFNl
bnNvcl9BZGRDb25maWd1cmF0aW9uX1Jlc3BvbnNlUGFyYW1zLmVuY29kZWRTaXplKSwKLSAgICAg
ICAgICAgIGNvZGVjLmtNZXNzYWdlSXNSZXNwb25zZSwgcmVhZGVyLnJlcXVlc3RJRCk7Ci0gICAg
ICAgIGJ1aWxkZXIuZW5jb2RlU3RydWN0KFNlbnNvcl9BZGRDb25maWd1cmF0aW9uX1Jlc3BvbnNl
UGFyYW1zLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zZVBhcmFtcyk7Ci0g
ICAgICAgIHZhciBtZXNzYWdlID0gYnVpbGRlci5maW5pc2goKTsKLSAgICAgICAgcmVzcG9uZGVy
LmFjY2VwdChtZXNzYWdlKTsKLSAgICAgIH0pOwotICAgICAgcmV0dXJuIHRydWU7Ci0gICAgZGVm
YXVsdDoKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gIH07Ci0KLSAgZnVuY3Rpb24gdmFs
aWRhdGVTZW5zb3JSZXF1ZXN0KG1lc3NhZ2VWYWxpZGF0b3IpIHsKLSAgICB2YXIgbWVzc2FnZSA9
IG1lc3NhZ2VWYWxpZGF0b3IubWVzc2FnZTsKLSAgICB2YXIgcGFyYW1zQ2xhc3MgPSBudWxsOwot
ICAgIHN3aXRjaCAobWVzc2FnZS5nZXROYW1lKCkpIHsKLSAgICAgIGNhc2Uga1NlbnNvcl9HZXRE
ZWZhdWx0Q29uZmlndXJhdGlvbl9OYW1lOgotICAgICAgICBpZiAobWVzc2FnZS5leHBlY3RzUmVz
cG9uc2UoKSkKLSAgICAgICAgICBwYXJhbXNDbGFzcyA9IFNlbnNvcl9HZXREZWZhdWx0Q29uZmln
dXJhdGlvbl9QYXJhbXM7Ci0gICAgICBicmVhazsKLSAgICAgIGNhc2Uga1NlbnNvcl9BZGRDb25m
aWd1cmF0aW9uX05hbWU6Ci0gICAgICAgIGlmIChtZXNzYWdlLmV4cGVjdHNSZXNwb25zZSgpKQot
ICAgICAgICAgIHBhcmFtc0NsYXNzID0gU2Vuc29yX0FkZENvbmZpZ3VyYXRpb25fUGFyYW1zOwot
ICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIGtTZW5zb3JfUmVtb3ZlQ29uZmlndXJhdGlvbl9OYW1l
OgotICAgICAgICBpZiAoIW1lc3NhZ2UuZXhwZWN0c1Jlc3BvbnNlKCkgJiYgIW1lc3NhZ2UuaXNS
ZXNwb25zZSgpKQotICAgICAgICAgIHBhcmFtc0NsYXNzID0gU2Vuc29yX1JlbW92ZUNvbmZpZ3Vy
YXRpb25fUGFyYW1zOwotICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIGtTZW5zb3JfU3VzcGVuZF9O
YW1lOgotICAgICAgICBpZiAoIW1lc3NhZ2UuZXhwZWN0c1Jlc3BvbnNlKCkgJiYgIW1lc3NhZ2Uu
aXNSZXNwb25zZSgpKQotICAgICAgICAgIHBhcmFtc0NsYXNzID0gU2Vuc29yX1N1c3BlbmRfUGFy
YW1zOwotICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIGtTZW5zb3JfUmVzdW1lX05hbWU6Ci0gICAg
ICAgIGlmICghbWVzc2FnZS5leHBlY3RzUmVzcG9uc2UoKSAmJiAhbWVzc2FnZS5pc1Jlc3BvbnNl
KCkpCi0gICAgICAgICAgcGFyYW1zQ2xhc3MgPSBTZW5zb3JfUmVzdW1lX1BhcmFtczsKLSAgICAg
IGJyZWFrOwotICAgICAgY2FzZSBrU2Vuc29yX0NvbmZpZ3VyZVJlYWRpbmdDaGFuZ2VOb3RpZmlj
YXRpb25zX05hbWU6Ci0gICAgICAgIGlmICghbWVzc2FnZS5leHBlY3RzUmVzcG9uc2UoKSAmJiAh
bWVzc2FnZS5pc1Jlc3BvbnNlKCkpCi0gICAgICAgICAgcGFyYW1zQ2xhc3MgPSBTZW5zb3JfQ29u
ZmlndXJlUmVhZGluZ0NoYW5nZU5vdGlmaWNhdGlvbnNfUGFyYW1zOwotICAgICAgYnJlYWs7Ci0g
ICAgfQotICAgIGlmIChwYXJhbXNDbGFzcyA9PT0gbnVsbCkKLSAgICAgIHJldHVybiB2YWxpZGF0
b3IudmFsaWRhdGlvbkVycm9yLk5PTkU7Ci0gICAgcmV0dXJuIHBhcmFtc0NsYXNzLnZhbGlkYXRl
KG1lc3NhZ2VWYWxpZGF0b3IsIG1lc3NhZ2VWYWxpZGF0b3IubWVzc2FnZS5nZXRIZWFkZXJOdW1C
eXRlcygpKTsKLSAgfQotCi0gIGZ1bmN0aW9uIHZhbGlkYXRlU2Vuc29yUmVzcG9uc2UobWVzc2Fn
ZVZhbGlkYXRvcikgewotICAgdmFyIG1lc3NhZ2UgPSBtZXNzYWdlVmFsaWRhdG9yLm1lc3NhZ2U7
Ci0gICB2YXIgcGFyYW1zQ2xhc3MgPSBudWxsOwotICAgc3dpdGNoIChtZXNzYWdlLmdldE5hbWUo
KSkgewotICAgICAgY2FzZSBrU2Vuc29yX0dldERlZmF1bHRDb25maWd1cmF0aW9uX05hbWU6Ci0g
ICAgICAgIGlmIChtZXNzYWdlLmlzUmVzcG9uc2UoKSkKLSAgICAgICAgICBwYXJhbXNDbGFzcyA9
IFNlbnNvcl9HZXREZWZhdWx0Q29uZmlndXJhdGlvbl9SZXNwb25zZVBhcmFtczsKLSAgICAgICAg
YnJlYWs7Ci0gICAgICBjYXNlIGtTZW5zb3JfQWRkQ29uZmlndXJhdGlvbl9OYW1lOgotICAgICAg
ICBpZiAobWVzc2FnZS5pc1Jlc3BvbnNlKCkpCi0gICAgICAgICAgcGFyYW1zQ2xhc3MgPSBTZW5z
b3JfQWRkQ29uZmlndXJhdGlvbl9SZXNwb25zZVBhcmFtczsKLSAgICAgICAgYnJlYWs7Ci0gICAg
fQotICAgIGlmIChwYXJhbXNDbGFzcyA9PT0gbnVsbCkKLSAgICAgIHJldHVybiB2YWxpZGF0b3Iu
dmFsaWRhdGlvbkVycm9yLk5PTkU7Ci0gICAgcmV0dXJuIHBhcmFtc0NsYXNzLnZhbGlkYXRlKG1l
c3NhZ2VWYWxpZGF0b3IsIG1lc3NhZ2VWYWxpZGF0b3IubWVzc2FnZS5nZXRIZWFkZXJOdW1CeXRl
cygpKTsKLSAgfQotCi0gIHZhciBTZW5zb3IgPSB7Ci0gICAgbmFtZTogJ2RldmljZS5tb2pvbS5T
ZW5zb3InLAotICAgIGtWZXJzaW9uOiAwLAotICAgIHB0ckNsYXNzOiBTZW5zb3JQdHIsCi0gICAg
cHJveHlDbGFzczogU2Vuc29yUHJveHksCi0gICAgc3R1YkNsYXNzOiBTZW5zb3JTdHViLAotICAg
IHZhbGlkYXRlUmVxdWVzdDogdmFsaWRhdGVTZW5zb3JSZXF1ZXN0LAotICAgIHZhbGlkYXRlUmVz
cG9uc2U6IHZhbGlkYXRlU2Vuc29yUmVzcG9uc2UsCi0gIH07Ci0gIFNlbnNvclN0dWIucHJvdG90
eXBlLnZhbGlkYXRvciA9IHZhbGlkYXRlU2Vuc29yUmVxdWVzdDsKLSAgU2Vuc29yUHJveHkucHJv
dG90eXBlLnZhbGlkYXRvciA9IHZhbGlkYXRlU2Vuc29yUmVzcG9uc2U7Ci0gIHZhciBrU2Vuc29y
Q2xpZW50X1JhaXNlRXJyb3JfTmFtZSA9IDA7Ci0gIHZhciBrU2Vuc29yQ2xpZW50X1NlbnNvclJl
YWRpbmdDaGFuZ2VkX05hbWUgPSAxOwotCi0gIGZ1bmN0aW9uIFNlbnNvckNsaWVudFB0cihoYW5k
bGVPclB0ckluZm8pIHsKLSAgICB0aGlzLnB0ciA9IG5ldyBiaW5kaW5ncy5JbnRlcmZhY2VQdHJD
b250cm9sbGVyKFNlbnNvckNsaWVudCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGhhbmRsZU9yUHRySW5mbyk7Ci0gIH0KLQotICBmdW5jdGlvbiBT
ZW5zb3JDbGllbnRBc3NvY2lhdGVkUHRyKGFzc29jaWF0ZWRJbnRlcmZhY2VQdHJJbmZvKSB7Ci0g
ICAgdGhpcy5wdHIgPSBuZXcgYXNzb2NpYXRlZEJpbmRpbmdzLkFzc29jaWF0ZWRJbnRlcmZhY2VQ
dHJDb250cm9sbGVyKAotICAgICAgICBTZW5zb3JDbGllbnQsIGFzc29jaWF0ZWRJbnRlcmZhY2VQ
dHJJbmZvKTsKLSAgfQotCi0gIFNlbnNvckNsaWVudEFzc29jaWF0ZWRQdHIucHJvdG90eXBlID0K
LSAgICAgIE9iamVjdC5jcmVhdGUoU2Vuc29yQ2xpZW50UHRyLnByb3RvdHlwZSk7Ci0gIFNlbnNv
ckNsaWVudEFzc29jaWF0ZWRQdHIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0KLSAgICAgIFNlbnNv
ckNsaWVudEFzc29jaWF0ZWRQdHI7Ci0KLSAgZnVuY3Rpb24gU2Vuc29yQ2xpZW50UHJveHkocmVj
ZWl2ZXIpIHsKLSAgICB0aGlzLnJlY2VpdmVyXyA9IHJlY2VpdmVyOwotICB9Ci0gIFNlbnNvckNs
aWVudFB0ci5wcm90b3R5cGUucmFpc2VFcnJvciA9IGZ1bmN0aW9uKCkgewotICAgIHJldHVybiBT
ZW5zb3JDbGllbnRQcm94eS5wcm90b3R5cGUucmFpc2VFcnJvcgotICAgICAgICAuYXBwbHkodGhp
cy5wdHIuZ2V0UHJveHkoKSwgYXJndW1lbnRzKTsKLSAgfTsKLQotICBTZW5zb3JDbGllbnRQcm94
eS5wcm90b3R5cGUucmFpc2VFcnJvciA9IGZ1bmN0aW9uKCkgewotICAgIHZhciBwYXJhbXNfID0g
bmV3IFNlbnNvckNsaWVudF9SYWlzZUVycm9yX1BhcmFtcygpOwotICAgIHZhciBidWlsZGVyID0g
bmV3IGNvZGVjLk1lc3NhZ2VWMEJ1aWxkZXIoCi0gICAgICAgIGtTZW5zb3JDbGllbnRfUmFpc2VF
cnJvcl9OYW1lLAotICAgICAgICBjb2RlYy5hbGlnbihTZW5zb3JDbGllbnRfUmFpc2VFcnJvcl9Q
YXJhbXMuZW5jb2RlZFNpemUpKTsKLSAgICBidWlsZGVyLmVuY29kZVN0cnVjdChTZW5zb3JDbGll
bnRfUmFpc2VFcnJvcl9QYXJhbXMsIHBhcmFtc18pOwotICAgIHZhciBtZXNzYWdlID0gYnVpbGRl
ci5maW5pc2goKTsKLSAgICB0aGlzLnJlY2VpdmVyXy5hY2NlcHQobWVzc2FnZSk7Ci0gIH07Ci0g
IFNlbnNvckNsaWVudFB0ci5wcm90b3R5cGUuc2Vuc29yUmVhZGluZ0NoYW5nZWQgPSBmdW5jdGlv
bigpIHsKLSAgICByZXR1cm4gU2Vuc29yQ2xpZW50UHJveHkucHJvdG90eXBlLnNlbnNvclJlYWRp
bmdDaGFuZ2VkCi0gICAgICAgIC5hcHBseSh0aGlzLnB0ci5nZXRQcm94eSgpLCBhcmd1bWVudHMp
OwotICB9OwotCi0gIFNlbnNvckNsaWVudFByb3h5LnByb3RvdHlwZS5zZW5zb3JSZWFkaW5nQ2hh
bmdlZCA9IGZ1bmN0aW9uKCkgewotICAgIHZhciBwYXJhbXNfID0gbmV3IFNlbnNvckNsaWVudF9T
ZW5zb3JSZWFkaW5nQ2hhbmdlZF9QYXJhbXMoKTsKLSAgICB2YXIgYnVpbGRlciA9IG5ldyBjb2Rl
Yy5NZXNzYWdlVjBCdWlsZGVyKAotICAgICAgICBrU2Vuc29yQ2xpZW50X1NlbnNvclJlYWRpbmdD
aGFuZ2VkX05hbWUsCi0gICAgICAgIGNvZGVjLmFsaWduKFNlbnNvckNsaWVudF9TZW5zb3JSZWFk
aW5nQ2hhbmdlZF9QYXJhbXMuZW5jb2RlZFNpemUpKTsKLSAgICBidWlsZGVyLmVuY29kZVN0cnVj
dChTZW5zb3JDbGllbnRfU2Vuc29yUmVhZGluZ0NoYW5nZWRfUGFyYW1zLCBwYXJhbXNfKTsKLSAg
ICB2YXIgbWVzc2FnZSA9IGJ1aWxkZXIuZmluaXNoKCk7Ci0gICAgdGhpcy5yZWNlaXZlcl8uYWNj
ZXB0KG1lc3NhZ2UpOwotICB9OwotCi0gIGZ1bmN0aW9uIFNlbnNvckNsaWVudFN0dWIoZGVsZWdh
dGUpIHsKLSAgICB0aGlzLmRlbGVnYXRlXyA9IGRlbGVnYXRlOwotICB9Ci0gIFNlbnNvckNsaWVu
dFN0dWIucHJvdG90eXBlLnJhaXNlRXJyb3IgPSBmdW5jdGlvbigpIHsKLSAgICByZXR1cm4gdGhp
cy5kZWxlZ2F0ZV8gJiYgdGhpcy5kZWxlZ2F0ZV8ucmFpc2VFcnJvciAmJiB0aGlzLmRlbGVnYXRl
Xy5yYWlzZUVycm9yKCk7Ci0gIH0KLSAgU2Vuc29yQ2xpZW50U3R1Yi5wcm90b3R5cGUuc2Vuc29y
UmVhZGluZ0NoYW5nZWQgPSBmdW5jdGlvbigpIHsKLSAgICByZXR1cm4gdGhpcy5kZWxlZ2F0ZV8g
JiYgdGhpcy5kZWxlZ2F0ZV8uc2Vuc29yUmVhZGluZ0NoYW5nZWQgJiYgdGhpcy5kZWxlZ2F0ZV8u
c2Vuc29yUmVhZGluZ0NoYW5nZWQoKTsKLSAgfQotCi0gIFNlbnNvckNsaWVudFN0dWIucHJvdG90
eXBlLmFjY2VwdCA9IGZ1bmN0aW9uKG1lc3NhZ2UpIHsKLSAgICB2YXIgcmVhZGVyID0gbmV3IGNv
ZGVjLk1lc3NhZ2VSZWFkZXIobWVzc2FnZSk7Ci0gICAgc3dpdGNoIChyZWFkZXIubWVzc2FnZU5h
bWUpIHsKLSAgICBjYXNlIGtTZW5zb3JDbGllbnRfUmFpc2VFcnJvcl9OYW1lOgotICAgICAgdmFy
IHBhcmFtcyA9IHJlYWRlci5kZWNvZGVTdHJ1Y3QoU2Vuc29yQ2xpZW50X1JhaXNlRXJyb3JfUGFy
YW1zKTsKLSAgICAgIHRoaXMucmFpc2VFcnJvcigpOwotICAgICAgcmV0dXJuIHRydWU7Ci0gICAg
Y2FzZSBrU2Vuc29yQ2xpZW50X1NlbnNvclJlYWRpbmdDaGFuZ2VkX05hbWU6Ci0gICAgICB2YXIg
cGFyYW1zID0gcmVhZGVyLmRlY29kZVN0cnVjdChTZW5zb3JDbGllbnRfU2Vuc29yUmVhZGluZ0No
YW5nZWRfUGFyYW1zKTsKLSAgICAgIHRoaXMuc2Vuc29yUmVhZGluZ0NoYW5nZWQoKTsKLSAgICAg
IHJldHVybiB0cnVlOwotICAgIGRlZmF1bHQ6Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQot
ICB9OwotCi0gIFNlbnNvckNsaWVudFN0dWIucHJvdG90eXBlLmFjY2VwdFdpdGhSZXNwb25kZXIg
PQotICAgICAgZnVuY3Rpb24obWVzc2FnZSwgcmVzcG9uZGVyKSB7Ci0gICAgdmFyIHJlYWRlciA9
IG5ldyBjb2RlYy5NZXNzYWdlUmVhZGVyKG1lc3NhZ2UpOwotICAgIHN3aXRjaCAocmVhZGVyLm1l
c3NhZ2VOYW1lKSB7Ci0gICAgZGVmYXVsdDoKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0g
IH07Ci0KLSAgZnVuY3Rpb24gdmFsaWRhdGVTZW5zb3JDbGllbnRSZXF1ZXN0KG1lc3NhZ2VWYWxp
ZGF0b3IpIHsKLSAgICB2YXIgbWVzc2FnZSA9IG1lc3NhZ2VWYWxpZGF0b3IubWVzc2FnZTsKLSAg
ICB2YXIgcGFyYW1zQ2xhc3MgPSBudWxsOwotICAgIHN3aXRjaCAobWVzc2FnZS5nZXROYW1lKCkp
IHsKLSAgICAgIGNhc2Uga1NlbnNvckNsaWVudF9SYWlzZUVycm9yX05hbWU6Ci0gICAgICAgIGlm
ICghbWVzc2FnZS5leHBlY3RzUmVzcG9uc2UoKSAmJiAhbWVzc2FnZS5pc1Jlc3BvbnNlKCkpCi0g
ICAgICAgICAgcGFyYW1zQ2xhc3MgPSBTZW5zb3JDbGllbnRfUmFpc2VFcnJvcl9QYXJhbXM7Ci0g
ICAgICBicmVhazsKLSAgICAgIGNhc2Uga1NlbnNvckNsaWVudF9TZW5zb3JSZWFkaW5nQ2hhbmdl
ZF9OYW1lOgotICAgICAgICBpZiAoIW1lc3NhZ2UuZXhwZWN0c1Jlc3BvbnNlKCkgJiYgIW1lc3Nh
Z2UuaXNSZXNwb25zZSgpKQotICAgICAgICAgIHBhcmFtc0NsYXNzID0gU2Vuc29yQ2xpZW50X1Nl
bnNvclJlYWRpbmdDaGFuZ2VkX1BhcmFtczsKLSAgICAgIGJyZWFrOwotICAgIH0KLSAgICBpZiAo
cGFyYW1zQ2xhc3MgPT09IG51bGwpCi0gICAgICByZXR1cm4gdmFsaWRhdG9yLnZhbGlkYXRpb25F
cnJvci5OT05FOwotICAgIHJldHVybiBwYXJhbXNDbGFzcy52YWxpZGF0ZShtZXNzYWdlVmFsaWRh
dG9yLCBtZXNzYWdlVmFsaWRhdG9yLm1lc3NhZ2UuZ2V0SGVhZGVyTnVtQnl0ZXMoKSk7Ci0gIH0K
LQotICBmdW5jdGlvbiB2YWxpZGF0ZVNlbnNvckNsaWVudFJlc3BvbnNlKG1lc3NhZ2VWYWxpZGF0
b3IpIHsKLSAgICByZXR1cm4gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FOwotICB9Ci0K
LSAgdmFyIFNlbnNvckNsaWVudCA9IHsKLSAgICBuYW1lOiAnZGV2aWNlLm1vam9tLlNlbnNvckNs
aWVudCcsCi0gICAga1ZlcnNpb246IDAsCi0gICAgcHRyQ2xhc3M6IFNlbnNvckNsaWVudFB0ciwK
LSAgICBwcm94eUNsYXNzOiBTZW5zb3JDbGllbnRQcm94eSwKLSAgICBzdHViQ2xhc3M6IFNlbnNv
ckNsaWVudFN0dWIsCi0gICAgdmFsaWRhdGVSZXF1ZXN0OiB2YWxpZGF0ZVNlbnNvckNsaWVudFJl
cXVlc3QsCi0gICAgdmFsaWRhdGVSZXNwb25zZTogbnVsbCwKLSAgfTsKLSAgU2Vuc29yQ2xpZW50
U3R1Yi5wcm90b3R5cGUudmFsaWRhdG9yID0gdmFsaWRhdGVTZW5zb3JDbGllbnRSZXF1ZXN0Owot
ICBTZW5zb3JDbGllbnRQcm94eS5wcm90b3R5cGUudmFsaWRhdG9yID0gbnVsbDsKLSAgZXhwb3J0
cy5TZW5zb3JUeXBlID0gU2Vuc29yVHlwZTsKLSAgZXhwb3J0cy5SZXBvcnRpbmdNb2RlID0gUmVw
b3J0aW5nTW9kZTsKLSAgZXhwb3J0cy5TZW5zb3JDb25maWd1cmF0aW9uID0gU2Vuc29yQ29uZmln
dXJhdGlvbjsKLSAgZXhwb3J0cy5TZW5zb3IgPSBTZW5zb3I7Ci0gIGV4cG9ydHMuU2Vuc29yUHRy
ID0gU2Vuc29yUHRyOwotICBleHBvcnRzLlNlbnNvckFzc29jaWF0ZWRQdHIgPSBTZW5zb3JBc3Nv
Y2lhdGVkUHRyOwotICBleHBvcnRzLlNlbnNvckNsaWVudCA9IFNlbnNvckNsaWVudDsKLSAgZXhw
b3J0cy5TZW5zb3JDbGllbnRQdHIgPSBTZW5zb3JDbGllbnRQdHI7Ci0gIGV4cG9ydHMuU2Vuc29y
Q2xpZW50QXNzb2NpYXRlZFB0ciA9IFNlbnNvckNsaWVudEFzc29jaWF0ZWRQdHI7Ci19KSgpOwpc
IE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2ltcG9y
dGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL3NlbnNvcl9wcm92
aWRlci5tb2pvbS5qcyBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVz
dHMvcmVzb3VyY2VzL2Nocm9taXVtL3NlbnNvcl9wcm92aWRlci5tb2pvbS5qcwpkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggZDgyYjE1YTMwNGEyNDM5ZjUyMDZlNWJjODZiOTFjNTFmY2Y5
NGJkOC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9MYXlv
dXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1
bS9zZW5zb3JfcHJvdmlkZXIubW9qb20uanMKKysrIC9kZXYvbnVsbApAQCAtMSw0MjkgKzAsMCBA
QAotLy8gQ29weXJpZ2h0IDIwMTQgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1z
dHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgot
Ci0ndXNlIHN0cmljdCc7Ci0KLShmdW5jdGlvbigpIHsKLSAgdmFyIG1vam9tSWQgPSAnc2Vydmlj
ZXMvZGV2aWNlL3B1YmxpYy9tb2pvbS9zZW5zb3JfcHJvdmlkZXIubW9qb20nOwotICBpZiAobW9q
by5pbnRlcm5hbC5pc01vam9tTG9hZGVkKG1vam9tSWQpKSB7Ci0gICAgY29uc29sZS53YXJuKCdU
aGUgZm9sbG93aW5nIG1vam9tIGlzIGxvYWRlZCBtdWx0aXBsZSB0aW1lczogJyArIG1vam9tSWQp
OwotICAgIHJldHVybjsKLSAgfQotICBtb2pvLmludGVybmFsLm1hcmtNb2pvbUxvYWRlZChtb2pv
bUlkKTsKLSAgdmFyIGJpbmRpbmdzID0gbW9qbzsKLSAgdmFyIGFzc29jaWF0ZWRCaW5kaW5ncyA9
IG1vam87Ci0gIHZhciBjb2RlYyA9IG1vam8uaW50ZXJuYWw7Ci0gIHZhciB2YWxpZGF0b3IgPSBt
b2pvLmludGVybmFsOwotCi0gIHZhciBleHBvcnRzID0gbW9qby5pbnRlcm5hbC5leHBvc2VOYW1l
c3BhY2UoJ2RldmljZS5tb2pvbScpOwotICB2YXIgc2Vuc29yJCA9Ci0gICAgICBtb2pvLmludGVy
bmFsLmV4cG9zZU5hbWVzcGFjZSgnZGV2aWNlLm1vam9tJyk7Ci0gIGlmIChtb2pvLmNvbmZpZy5h
dXRvTG9hZE1vam9tRGVwcykgewotICAgIG1vam8uaW50ZXJuYWwubG9hZE1vam9tSWZOZWNlc3Nh
cnkoCi0gICAgICAgICdzZXJ2aWNlcy9kZXZpY2UvcHVibGljL21vam9tL3NlbnNvci5tb2pvbScs
ICdzZW5zb3IubW9qb20uanMnKTsKLSAgfQotCi0KLSAgdmFyIFNlbnNvckNyZWF0aW9uUmVzdWx0
ID0ge307Ci0gIFNlbnNvckNyZWF0aW9uUmVzdWx0LlNVQ0NFU1MgPSAwOwotICBTZW5zb3JDcmVh
dGlvblJlc3VsdC5FUlJPUl9OT1RfQVZBSUxBQkxFID0gU2Vuc29yQ3JlYXRpb25SZXN1bHQuU1VD
Q0VTUyArIDE7Ci0gIFNlbnNvckNyZWF0aW9uUmVzdWx0LkVSUk9SX05PVF9BTExPV0VEID0gU2Vu
c29yQ3JlYXRpb25SZXN1bHQuRVJST1JfTk9UX0FWQUlMQUJMRSArIDE7Ci0KLSAgU2Vuc29yQ3Jl
YXRpb25SZXN1bHQuaXNLbm93bkVudW1WYWx1ZSA9IGZ1bmN0aW9uKHZhbHVlKSB7Ci0gICAgc3dp
dGNoICh2YWx1ZSkgewotICAgIGNhc2UgMDoKLSAgICBjYXNlIDE6Ci0gICAgY2FzZSAyOgotICAg
ICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLSAgfTsKLQotICBTZW5z
b3JDcmVhdGlvblJlc3VsdC52YWxpZGF0ZSA9IGZ1bmN0aW9uKGVudW1WYWx1ZSkgewotICAgIHZh
ciBpc0V4dGVuc2libGUgPSBmYWxzZTsKLSAgICBpZiAoaXNFeHRlbnNpYmxlIHx8IHRoaXMuaXNL
bm93bkVudW1WYWx1ZShlbnVtVmFsdWUpKQotICAgICAgcmV0dXJuIHZhbGlkYXRvci52YWxpZGF0
aW9uRXJyb3IuTk9ORTsKLQotICAgIHJldHVybiB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLlVO
S05PV05fRU5VTV9WQUxVRTsKLSAgfTsKLQotICBmdW5jdGlvbiBTZW5zb3JJbml0UGFyYW1zKHZh
bHVlcykgewotICAgIHRoaXMuaW5pdERlZmF1bHRzXygpOwotICAgIHRoaXMuaW5pdEZpZWxkc18o
dmFsdWVzKTsKLSAgfQotCi0KLSAgU2Vuc29ySW5pdFBhcmFtcy5rUmVhZEJ1ZmZlclNpemVGb3JU
ZXN0cyA9IDQ4OwotICBTZW5zb3JJbml0UGFyYW1zLnByb3RvdHlwZS5pbml0RGVmYXVsdHNfID0g
ZnVuY3Rpb24oKSB7Ci0gICAgdGhpcy5zZW5zb3IgPSBuZXcgc2Vuc29yJC5TZW5zb3JQdHIoKTsK
LSAgICB0aGlzLmNsaWVudFJlY2VpdmVyID0gbmV3IGJpbmRpbmdzLkludGVyZmFjZVJlcXVlc3Qo
KTsKLSAgICB0aGlzLm1lbW9yeSA9IG51bGw7Ci0gICAgdGhpcy5idWZmZXJPZmZzZXQgPSAwOwot
ICAgIHRoaXMubW9kZSA9IDA7Ci0gICAgdGhpcy5kZWZhdWx0Q29uZmlndXJhdGlvbiA9IG51bGw7
Ci0gICAgdGhpcy5tYXhpbXVtRnJlcXVlbmN5ID0gMDsKLSAgICB0aGlzLm1pbmltdW1GcmVxdWVu
Y3kgPSAwOwotICB9OwotICBTZW5zb3JJbml0UGFyYW1zLnByb3RvdHlwZS5pbml0RmllbGRzXyA9
IGZ1bmN0aW9uKGZpZWxkcykgewotICAgIGZvcih2YXIgZmllbGQgaW4gZmllbGRzKSB7Ci0gICAg
ICAgIGlmICh0aGlzLmhhc093blByb3BlcnR5KGZpZWxkKSkKLSAgICAgICAgICB0aGlzW2ZpZWxk
XSA9IGZpZWxkc1tmaWVsZF07Ci0gICAgfQotICB9OwotCi0gIFNlbnNvckluaXRQYXJhbXMudmFs
aWRhdGUgPSBmdW5jdGlvbihtZXNzYWdlVmFsaWRhdG9yLCBvZmZzZXQpIHsKLSAgICB2YXIgZXJy
OwotICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RIZWFkZXIob2Zmc2V0
LCBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSk7Ci0gICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZh
bGlkYXRpb25FcnJvci5OT05FKQotICAgICAgICByZXR1cm4gZXJyOwotCi0gICAgdmFyIGtWZXJz
aW9uU2l6ZXMgPSBbCi0gICAgICB7dmVyc2lvbjogMCwgbnVtQnl0ZXM6IDY0fQotICAgIF07Ci0g
ICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdFZlcnNpb24ob2Zmc2V0LCBr
VmVyc2lvblNpemVzKTsKLSAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9y
Lk5PTkUpCi0gICAgICAgIHJldHVybiBlcnI7Ci0KLQotICAgIC8vIHZhbGlkYXRlIFNlbnNvcklu
aXRQYXJhbXMuc2Vuc29yCi0gICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZUludGVy
ZmFjZShvZmZzZXQgKyBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDAsIGZhbHNlKTsKLSAgICBp
ZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCi0gICAgICAgIHJldHVy
biBlcnI7Ci0KLQotICAgIC8vIHZhbGlkYXRlIFNlbnNvckluaXRQYXJhbXMuY2xpZW50UmVjZWl2
ZXIKLSAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlSW50ZXJmYWNlUmVxdWVzdChv
ZmZzZXQgKyBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDgsIGZhbHNlKQotICAgIGlmIChlcnIg
IT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKLSAgICAgICAgcmV0dXJuIGVycjsK
LQotCi0gICAgLy8gdmFsaWRhdGUgU2Vuc29ySW5pdFBhcmFtcy5tZW1vcnkKLSAgICBlcnIgPSBt
ZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlSGFuZGxlKG9mZnNldCArIGNvZGVjLmtTdHJ1Y3RIZWFk
ZXJTaXplICsgMTIsIGZhbHNlKQotICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9u
RXJyb3IuTk9ORSkKLSAgICAgICAgcmV0dXJuIGVycjsKLQotCi0KLSAgICAvLyB2YWxpZGF0ZSBT
ZW5zb3JJbml0UGFyYW1zLm1vZGUKLSAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRl
RW51bShvZmZzZXQgKyBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDI0LCBzZW5zb3IkLlJlcG9y
dGluZ01vZGUpOwotICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9O
RSkKLSAgICAgICAgcmV0dXJuIGVycjsKLQotCi0gICAgLy8gdmFsaWRhdGUgU2Vuc29ySW5pdFBh
cmFtcy5kZWZhdWx0Q29uZmlndXJhdGlvbgotICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFs
aWRhdGVTdHJ1Y3RQb2ludGVyKG9mZnNldCArIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgMzIs
IHNlbnNvciQuU2Vuc29yQ29uZmlndXJhdGlvbiwgZmFsc2UpOwotICAgIGlmIChlcnIgIT09IHZh
bGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKLSAgICAgICAgcmV0dXJuIGVycjsKLQotCi0K
LSAgICByZXR1cm4gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FOwotICB9OwotCi0gIFNl
bnNvckluaXRQYXJhbXMuZW5jb2RlZFNpemUgPSBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDU2
OwotCi0gIFNlbnNvckluaXRQYXJhbXMuZGVjb2RlID0gZnVuY3Rpb24oZGVjb2RlcikgewotICAg
IHZhciBwYWNrZWQ7Ci0gICAgdmFyIHZhbCA9IG5ldyBTZW5zb3JJbml0UGFyYW1zKCk7Ci0gICAg
dmFyIG51bWJlck9mQnl0ZXMgPSBkZWNvZGVyLnJlYWRVaW50MzIoKTsKLSAgICB2YXIgdmVyc2lv
biA9IGRlY29kZXIucmVhZFVpbnQzMigpOwotICAgIHZhbC5zZW5zb3IgPSBkZWNvZGVyLmRlY29k
ZVN0cnVjdChuZXcgY29kZWMuSW50ZXJmYWNlKHNlbnNvciQuU2Vuc29yUHRyKSk7Ci0gICAgdmFs
LmNsaWVudFJlY2VpdmVyID0gZGVjb2Rlci5kZWNvZGVTdHJ1Y3QoY29kZWMuSW50ZXJmYWNlUmVx
dWVzdCk7Ci0gICAgdmFsLm1lbW9yeSA9IGRlY29kZXIuZGVjb2RlU3RydWN0KGNvZGVjLkhhbmRs
ZSk7Ci0gICAgdmFsLmJ1ZmZlck9mZnNldCA9IGRlY29kZXIuZGVjb2RlU3RydWN0KGNvZGVjLlVp
bnQ2NCk7Ci0gICAgdmFsLm1vZGUgPSBkZWNvZGVyLmRlY29kZVN0cnVjdChjb2RlYy5JbnQzMik7
Ci0gICAgZGVjb2Rlci5za2lwKDEpOwotICAgIGRlY29kZXIuc2tpcCgxKTsKLSAgICBkZWNvZGVy
LnNraXAoMSk7Ci0gICAgZGVjb2Rlci5za2lwKDEpOwotICAgIHZhbC5kZWZhdWx0Q29uZmlndXJh
dGlvbiA9IGRlY29kZXIuZGVjb2RlU3RydWN0UG9pbnRlcihzZW5zb3IkLlNlbnNvckNvbmZpZ3Vy
YXRpb24pOwotICAgIHZhbC5tYXhpbXVtRnJlcXVlbmN5ID0gZGVjb2Rlci5kZWNvZGVTdHJ1Y3Qo
Y29kZWMuRG91YmxlKTsKLSAgICB2YWwubWluaW11bUZyZXF1ZW5jeSA9IGRlY29kZXIuZGVjb2Rl
U3RydWN0KGNvZGVjLkRvdWJsZSk7Ci0gICAgcmV0dXJuIHZhbDsKLSAgfTsKLQotICBTZW5zb3JJ
bml0UGFyYW1zLmVuY29kZSA9IGZ1bmN0aW9uKGVuY29kZXIsIHZhbCkgewotICAgIHZhciBwYWNr
ZWQ7Ci0gICAgZW5jb2Rlci53cml0ZVVpbnQzMihTZW5zb3JJbml0UGFyYW1zLmVuY29kZWRTaXpl
KTsKLSAgICBlbmNvZGVyLndyaXRlVWludDMyKDApOwotICAgIGVuY29kZXIuZW5jb2RlU3RydWN0
KG5ldyBjb2RlYy5JbnRlcmZhY2Uoc2Vuc29yJC5TZW5zb3JQdHIpLCB2YWwuc2Vuc29yKTsKLSAg
ICBlbmNvZGVyLmVuY29kZVN0cnVjdChjb2RlYy5JbnRlcmZhY2VSZXF1ZXN0LCB2YWwuY2xpZW50
UmVjZWl2ZXIpOwotICAgIGVuY29kZXIuZW5jb2RlU3RydWN0KGNvZGVjLkhhbmRsZSwgdmFsLm1l
bW9yeSk7Ci0gICAgZW5jb2Rlci5lbmNvZGVTdHJ1Y3QoY29kZWMuVWludDY0LCB2YWwuYnVmZmVy
T2Zmc2V0KTsKLSAgICBlbmNvZGVyLmVuY29kZVN0cnVjdChjb2RlYy5JbnQzMiwgdmFsLm1vZGUp
OwotICAgIGVuY29kZXIuc2tpcCgxKTsKLSAgICBlbmNvZGVyLnNraXAoMSk7Ci0gICAgZW5jb2Rl
ci5za2lwKDEpOwotICAgIGVuY29kZXIuc2tpcCgxKTsKLSAgICBlbmNvZGVyLmVuY29kZVN0cnVj
dFBvaW50ZXIoc2Vuc29yJC5TZW5zb3JDb25maWd1cmF0aW9uLCB2YWwuZGVmYXVsdENvbmZpZ3Vy
YXRpb24pOwotICAgIGVuY29kZXIuZW5jb2RlU3RydWN0KGNvZGVjLkRvdWJsZSwgdmFsLm1heGlt
dW1GcmVxdWVuY3kpOwotICAgIGVuY29kZXIuZW5jb2RlU3RydWN0KGNvZGVjLkRvdWJsZSwgdmFs
Lm1pbmltdW1GcmVxdWVuY3kpOwotICB9OwotICBmdW5jdGlvbiBTZW5zb3JQcm92aWRlcl9HZXRT
ZW5zb3JfUGFyYW1zKHZhbHVlcykgewotICAgIHRoaXMuaW5pdERlZmF1bHRzXygpOwotICAgIHRo
aXMuaW5pdEZpZWxkc18odmFsdWVzKTsKLSAgfQotCi0KLSAgU2Vuc29yUHJvdmlkZXJfR2V0U2Vu
c29yX1BhcmFtcy5wcm90b3R5cGUuaW5pdERlZmF1bHRzXyA9IGZ1bmN0aW9uKCkgewotICAgIHRo
aXMudHlwZSA9IDA7Ci0gIH07Ci0gIFNlbnNvclByb3ZpZGVyX0dldFNlbnNvcl9QYXJhbXMucHJv
dG90eXBlLmluaXRGaWVsZHNfID0gZnVuY3Rpb24oZmllbGRzKSB7Ci0gICAgZm9yKHZhciBmaWVs
ZCBpbiBmaWVsZHMpIHsKLSAgICAgICAgaWYgKHRoaXMuaGFzT3duUHJvcGVydHkoZmllbGQpKQot
ICAgICAgICAgIHRoaXNbZmllbGRdID0gZmllbGRzW2ZpZWxkXTsKLSAgICB9Ci0gIH07Ci0KLSAg
U2Vuc29yUHJvdmlkZXJfR2V0U2Vuc29yX1BhcmFtcy52YWxpZGF0ZSA9IGZ1bmN0aW9uKG1lc3Nh
Z2VWYWxpZGF0b3IsIG9mZnNldCkgewotICAgIHZhciBlcnI7Ci0gICAgZXJyID0gbWVzc2FnZVZh
bGlkYXRvci52YWxpZGF0ZVN0cnVjdEhlYWRlcihvZmZzZXQsIGNvZGVjLmtTdHJ1Y3RIZWFkZXJT
aXplKTsKLSAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCi0g
ICAgICAgIHJldHVybiBlcnI7Ci0KLSAgICB2YXIga1ZlcnNpb25TaXplcyA9IFsKLSAgICAgIHt2
ZXJzaW9uOiAwLCBudW1CeXRlczogMTZ9Ci0gICAgXTsKLSAgICBlcnIgPSBtZXNzYWdlVmFsaWRh
dG9yLnZhbGlkYXRlU3RydWN0VmVyc2lvbihvZmZzZXQsIGtWZXJzaW9uU2l6ZXMpOwotICAgIGlm
IChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKLSAgICAgICAgcmV0dXJu
IGVycjsKLQotCi0gICAgLy8gdmFsaWRhdGUgU2Vuc29yUHJvdmlkZXJfR2V0U2Vuc29yX1BhcmFt
cy50eXBlCi0gICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZUVudW0ob2Zmc2V0ICsg
Y29kZWMua1N0cnVjdEhlYWRlclNpemUgKyAwLCBzZW5zb3IkLlNlbnNvclR5cGUpOwotICAgIGlm
IChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKLSAgICAgICAgcmV0dXJu
IGVycjsKLQotICAgIHJldHVybiB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkU7Ci0gIH07
Ci0KLSAgU2Vuc29yUHJvdmlkZXJfR2V0U2Vuc29yX1BhcmFtcy5lbmNvZGVkU2l6ZSA9IGNvZGVj
LmtTdHJ1Y3RIZWFkZXJTaXplICsgODsKLQotICBTZW5zb3JQcm92aWRlcl9HZXRTZW5zb3JfUGFy
YW1zLmRlY29kZSA9IGZ1bmN0aW9uKGRlY29kZXIpIHsKLSAgICB2YXIgcGFja2VkOwotICAgIHZh
ciB2YWwgPSBuZXcgU2Vuc29yUHJvdmlkZXJfR2V0U2Vuc29yX1BhcmFtcygpOwotICAgIHZhciBu
dW1iZXJPZkJ5dGVzID0gZGVjb2Rlci5yZWFkVWludDMyKCk7Ci0gICAgdmFyIHZlcnNpb24gPSBk
ZWNvZGVyLnJlYWRVaW50MzIoKTsKLSAgICB2YWwudHlwZSA9IGRlY29kZXIuZGVjb2RlU3RydWN0
KGNvZGVjLkludDMyKTsKLSAgICBkZWNvZGVyLnNraXAoMSk7Ci0gICAgZGVjb2Rlci5za2lwKDEp
OwotICAgIGRlY29kZXIuc2tpcCgxKTsKLSAgICBkZWNvZGVyLnNraXAoMSk7Ci0gICAgcmV0dXJu
IHZhbDsKLSAgfTsKLQotICBTZW5zb3JQcm92aWRlcl9HZXRTZW5zb3JfUGFyYW1zLmVuY29kZSA9
IGZ1bmN0aW9uKGVuY29kZXIsIHZhbCkgewotICAgIHZhciBwYWNrZWQ7Ci0gICAgZW5jb2Rlci53
cml0ZVVpbnQzMihTZW5zb3JQcm92aWRlcl9HZXRTZW5zb3JfUGFyYW1zLmVuY29kZWRTaXplKTsK
LSAgICBlbmNvZGVyLndyaXRlVWludDMyKDApOwotICAgIGVuY29kZXIuZW5jb2RlU3RydWN0KGNv
ZGVjLkludDMyLCB2YWwudHlwZSk7Ci0gICAgZW5jb2Rlci5za2lwKDEpOwotICAgIGVuY29kZXIu
c2tpcCgxKTsKLSAgICBlbmNvZGVyLnNraXAoMSk7Ci0gICAgZW5jb2Rlci5za2lwKDEpOwotICB9
OwotICBmdW5jdGlvbiBTZW5zb3JQcm92aWRlcl9HZXRTZW5zb3JfUmVzcG9uc2VQYXJhbXModmFs
dWVzKSB7Ci0gICAgdGhpcy5pbml0RGVmYXVsdHNfKCk7Ci0gICAgdGhpcy5pbml0RmllbGRzXyh2
YWx1ZXMpOwotICB9Ci0KLQotICBTZW5zb3JQcm92aWRlcl9HZXRTZW5zb3JfUmVzcG9uc2VQYXJh
bXMucHJvdG90eXBlLmluaXREZWZhdWx0c18gPSBmdW5jdGlvbigpIHsKLSAgICB0aGlzLnJlc3Vs
dCA9IDA7Ci0gICAgdGhpcy5pbml0UGFyYW1zID0gbnVsbDsKLSAgfTsKLSAgU2Vuc29yUHJvdmlk
ZXJfR2V0U2Vuc29yX1Jlc3BvbnNlUGFyYW1zLnByb3RvdHlwZS5pbml0RmllbGRzXyA9IGZ1bmN0
aW9uKGZpZWxkcykgewotICAgIGZvcih2YXIgZmllbGQgaW4gZmllbGRzKSB7Ci0gICAgICAgIGlm
ICh0aGlzLmhhc093blByb3BlcnR5KGZpZWxkKSkKLSAgICAgICAgICB0aGlzW2ZpZWxkXSA9IGZp
ZWxkc1tmaWVsZF07Ci0gICAgfQotICB9OwotCi0gIFNlbnNvclByb3ZpZGVyX0dldFNlbnNvcl9S
ZXNwb25zZVBhcmFtcy52YWxpZGF0ZSA9IGZ1bmN0aW9uKG1lc3NhZ2VWYWxpZGF0b3IsIG9mZnNl
dCkgewotICAgIHZhciBlcnI7Ci0gICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0
cnVjdEhlYWRlcihvZmZzZXQsIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplKTsKLSAgICBpZiAoZXJy
ICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCi0gICAgICAgIHJldHVybiBlcnI7
Ci0KLSAgICB2YXIga1ZlcnNpb25TaXplcyA9IFsKLSAgICAgIHt2ZXJzaW9uOiAwLCBudW1CeXRl
czogMjR9Ci0gICAgXTsKLSAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0
VmVyc2lvbihvZmZzZXQsIGtWZXJzaW9uU2l6ZXMpOwotICAgIGlmIChlcnIgIT09IHZhbGlkYXRv
ci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKLSAgICAgICAgcmV0dXJuIGVycjsKLQotCi0gICAgLy8g
dmFsaWRhdGUgU2Vuc29yUHJvdmlkZXJfR2V0U2Vuc29yX1Jlc3BvbnNlUGFyYW1zLnJlc3VsdAot
ICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVFbnVtKG9mZnNldCArIGNvZGVjLmtT
dHJ1Y3RIZWFkZXJTaXplICsgMCwgU2Vuc29yQ3JlYXRpb25SZXN1bHQpOwotICAgIGlmIChlcnIg
IT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKLSAgICAgICAgcmV0dXJuIGVycjsK
LQotCi0gICAgLy8gdmFsaWRhdGUgU2Vuc29yUHJvdmlkZXJfR2V0U2Vuc29yX1Jlc3BvbnNlUGFy
YW1zLmluaXRQYXJhbXMKLSAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0
UG9pbnRlcihvZmZzZXQgKyBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDgsIFNlbnNvckluaXRQ
YXJhbXMsIHRydWUpOwotICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3Iu
Tk9ORSkKLSAgICAgICAgcmV0dXJuIGVycjsKLQotICAgIHJldHVybiB2YWxpZGF0b3IudmFsaWRh
dGlvbkVycm9yLk5PTkU7Ci0gIH07Ci0KLSAgU2Vuc29yUHJvdmlkZXJfR2V0U2Vuc29yX1Jlc3Bv
bnNlUGFyYW1zLmVuY29kZWRTaXplID0gY29kZWMua1N0cnVjdEhlYWRlclNpemUgKyAxNjsKLQot
ICBTZW5zb3JQcm92aWRlcl9HZXRTZW5zb3JfUmVzcG9uc2VQYXJhbXMuZGVjb2RlID0gZnVuY3Rp
b24oZGVjb2RlcikgewotICAgIHZhciBwYWNrZWQ7Ci0gICAgdmFyIHZhbCA9IG5ldyBTZW5zb3JQ
cm92aWRlcl9HZXRTZW5zb3JfUmVzcG9uc2VQYXJhbXMoKTsKLSAgICB2YXIgbnVtYmVyT2ZCeXRl
cyA9IGRlY29kZXIucmVhZFVpbnQzMigpOwotICAgIHZhciB2ZXJzaW9uID0gZGVjb2Rlci5yZWFk
VWludDMyKCk7Ci0gICAgdmFsLnJlc3VsdCA9IGRlY29kZXIuZGVjb2RlU3RydWN0KGNvZGVjLklu
dDMyKTsKLSAgICBkZWNvZGVyLnNraXAoMSk7Ci0gICAgZGVjb2Rlci5za2lwKDEpOwotICAgIGRl
Y29kZXIuc2tpcCgxKTsKLSAgICBkZWNvZGVyLnNraXAoMSk7Ci0gICAgdmFsLmluaXRQYXJhbXMg
PSBkZWNvZGVyLmRlY29kZVN0cnVjdFBvaW50ZXIoU2Vuc29ySW5pdFBhcmFtcyk7Ci0gICAgcmV0
dXJuIHZhbDsKLSAgfTsKLQotICBTZW5zb3JQcm92aWRlcl9HZXRTZW5zb3JfUmVzcG9uc2VQYXJh
bXMuZW5jb2RlID0gZnVuY3Rpb24oZW5jb2RlciwgdmFsKSB7Ci0gICAgdmFyIHBhY2tlZDsKLSAg
ICBlbmNvZGVyLndyaXRlVWludDMyKFNlbnNvclByb3ZpZGVyX0dldFNlbnNvcl9SZXNwb25zZVBh
cmFtcy5lbmNvZGVkU2l6ZSk7Ci0gICAgZW5jb2Rlci53cml0ZVVpbnQzMigwKTsKLSAgICBlbmNv
ZGVyLmVuY29kZVN0cnVjdChjb2RlYy5JbnQzMiwgdmFsLnJlc3VsdCk7Ci0gICAgZW5jb2Rlci5z
a2lwKDEpOwotICAgIGVuY29kZXIuc2tpcCgxKTsKLSAgICBlbmNvZGVyLnNraXAoMSk7Ci0gICAg
ZW5jb2Rlci5za2lwKDEpOwotICAgIGVuY29kZXIuZW5jb2RlU3RydWN0UG9pbnRlcihTZW5zb3JJ
bml0UGFyYW1zLCB2YWwuaW5pdFBhcmFtcyk7Ci0gIH07Ci0gIHZhciBrU2Vuc29yUHJvdmlkZXJf
R2V0U2Vuc29yX05hbWUgPSAwOwotCi0gIGZ1bmN0aW9uIFNlbnNvclByb3ZpZGVyUHRyKGhhbmRs
ZU9yUHRySW5mbykgewotICAgIHRoaXMucHRyID0gbmV3IGJpbmRpbmdzLkludGVyZmFjZVB0ckNv
bnRyb2xsZXIoU2Vuc29yUHJvdmlkZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBoYW5kbGVPclB0ckluZm8pOwotICB9Ci0KLSAgZnVuY3Rpb24g
U2Vuc29yUHJvdmlkZXJBc3NvY2lhdGVkUHRyKGFzc29jaWF0ZWRJbnRlcmZhY2VQdHJJbmZvKSB7
Ci0gICAgdGhpcy5wdHIgPSBuZXcgYXNzb2NpYXRlZEJpbmRpbmdzLkFzc29jaWF0ZWRJbnRlcmZh
Y2VQdHJDb250cm9sbGVyKAotICAgICAgICBTZW5zb3JQcm92aWRlciwgYXNzb2NpYXRlZEludGVy
ZmFjZVB0ckluZm8pOwotICB9Ci0KLSAgU2Vuc29yUHJvdmlkZXJBc3NvY2lhdGVkUHRyLnByb3Rv
dHlwZSA9Ci0gICAgICBPYmplY3QuY3JlYXRlKFNlbnNvclByb3ZpZGVyUHRyLnByb3RvdHlwZSk7
Ci0gIFNlbnNvclByb3ZpZGVyQXNzb2NpYXRlZFB0ci5wcm90b3R5cGUuY29uc3RydWN0b3IgPQot
ICAgICAgU2Vuc29yUHJvdmlkZXJBc3NvY2lhdGVkUHRyOwotCi0gIGZ1bmN0aW9uIFNlbnNvclBy
b3ZpZGVyUHJveHkocmVjZWl2ZXIpIHsKLSAgICB0aGlzLnJlY2VpdmVyXyA9IHJlY2VpdmVyOwot
ICB9Ci0gIFNlbnNvclByb3ZpZGVyUHRyLnByb3RvdHlwZS5nZXRTZW5zb3IgPSBmdW5jdGlvbigp
IHsKLSAgICByZXR1cm4gU2Vuc29yUHJvdmlkZXJQcm94eS5wcm90b3R5cGUuZ2V0U2Vuc29yCi0g
ICAgICAgIC5hcHBseSh0aGlzLnB0ci5nZXRQcm94eSgpLCBhcmd1bWVudHMpOwotICB9OwotCi0g
IFNlbnNvclByb3ZpZGVyUHJveHkucHJvdG90eXBlLmdldFNlbnNvciA9IGZ1bmN0aW9uKHR5cGUp
IHsKLSAgICB2YXIgcGFyYW1zID0gbmV3IFNlbnNvclByb3ZpZGVyX0dldFNlbnNvcl9QYXJhbXMo
KTsKLSAgICBwYXJhbXMudHlwZSA9IHR5cGU7Ci0gICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0
aW9uKHJlc29sdmUsIHJlamVjdCkgewotICAgICAgdmFyIGJ1aWxkZXIgPSBuZXcgY29kZWMuTWVz
c2FnZVYxQnVpbGRlcigKLSAgICAgICAgICBrU2Vuc29yUHJvdmlkZXJfR2V0U2Vuc29yX05hbWUs
Ci0gICAgICAgICAgY29kZWMuYWxpZ24oU2Vuc29yUHJvdmlkZXJfR2V0U2Vuc29yX1BhcmFtcy5l
bmNvZGVkU2l6ZSksCi0gICAgICAgICAgY29kZWMua01lc3NhZ2VFeHBlY3RzUmVzcG9uc2UsIDAp
OwotICAgICAgYnVpbGRlci5lbmNvZGVTdHJ1Y3QoU2Vuc29yUHJvdmlkZXJfR2V0U2Vuc29yX1Bh
cmFtcywgcGFyYW1zKTsKLSAgICAgIHZhciBtZXNzYWdlID0gYnVpbGRlci5maW5pc2goKTsKLSAg
ICAgIHRoaXMucmVjZWl2ZXJfLmFjY2VwdEFuZEV4cGVjdFJlc3BvbnNlKG1lc3NhZ2UpLnRoZW4o
ZnVuY3Rpb24obWVzc2FnZSkgewotICAgICAgICB2YXIgcmVhZGVyID0gbmV3IGNvZGVjLk1lc3Nh
Z2VSZWFkZXIobWVzc2FnZSk7Ci0gICAgICAgIHZhciByZXNwb25zZVBhcmFtcyA9Ci0gICAgICAg
ICAgICByZWFkZXIuZGVjb2RlU3RydWN0KFNlbnNvclByb3ZpZGVyX0dldFNlbnNvcl9SZXNwb25z
ZVBhcmFtcyk7Ci0gICAgICAgIHJlc29sdmUocmVzcG9uc2VQYXJhbXMpOwotICAgICAgfSkuY2F0
Y2goZnVuY3Rpb24ocmVzdWx0KSB7Ci0gICAgICAgIHJlamVjdChFcnJvcigiQ29ubmVjdGlvbiBl
cnJvcjogIiArIHJlc3VsdCkpOwotICAgICAgfSk7Ci0gICAgfS5iaW5kKHRoaXMpKTsKLSAgfTsK
LQotICBmdW5jdGlvbiBTZW5zb3JQcm92aWRlclN0dWIoZGVsZWdhdGUpIHsKLSAgICB0aGlzLmRl
bGVnYXRlXyA9IGRlbGVnYXRlOwotICB9Ci0gIFNlbnNvclByb3ZpZGVyU3R1Yi5wcm90b3R5cGUu
Z2V0U2Vuc29yID0gZnVuY3Rpb24odHlwZSkgewotICAgIHJldHVybiB0aGlzLmRlbGVnYXRlXyAm
JiB0aGlzLmRlbGVnYXRlXy5nZXRTZW5zb3IgJiYgdGhpcy5kZWxlZ2F0ZV8uZ2V0U2Vuc29yKHR5
cGUpOwotICB9Ci0KLSAgU2Vuc29yUHJvdmlkZXJTdHViLnByb3RvdHlwZS5hY2NlcHQgPSBmdW5j
dGlvbihtZXNzYWdlKSB7Ci0gICAgdmFyIHJlYWRlciA9IG5ldyBjb2RlYy5NZXNzYWdlUmVhZGVy
KG1lc3NhZ2UpOwotICAgIHN3aXRjaCAocmVhZGVyLm1lc3NhZ2VOYW1lKSB7Ci0gICAgZGVmYXVs
dDoKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gIH07Ci0KLSAgU2Vuc29yUHJvdmlkZXJT
dHViLnByb3RvdHlwZS5hY2NlcHRXaXRoUmVzcG9uZGVyID0KLSAgICAgIGZ1bmN0aW9uKG1lc3Nh
Z2UsIHJlc3BvbmRlcikgewotICAgIHZhciByZWFkZXIgPSBuZXcgY29kZWMuTWVzc2FnZVJlYWRl
cihtZXNzYWdlKTsKLSAgICBzd2l0Y2ggKHJlYWRlci5tZXNzYWdlTmFtZSkgewotICAgIGNhc2Ug
a1NlbnNvclByb3ZpZGVyX0dldFNlbnNvcl9OYW1lOgotICAgICAgdmFyIHBhcmFtcyA9IHJlYWRl
ci5kZWNvZGVTdHJ1Y3QoU2Vuc29yUHJvdmlkZXJfR2V0U2Vuc29yX1BhcmFtcyk7Ci0gICAgICB0
aGlzLmdldFNlbnNvcihwYXJhbXMudHlwZSkudGhlbihmdW5jdGlvbihyZXNwb25zZSkgewotICAg
ICAgICB2YXIgcmVzcG9uc2VQYXJhbXMgPQotICAgICAgICAgICAgbmV3IFNlbnNvclByb3ZpZGVy
X0dldFNlbnNvcl9SZXNwb25zZVBhcmFtcygpOwotICAgICAgICByZXNwb25zZVBhcmFtcy5yZXN1
bHQgPSByZXNwb25zZS5yZXN1bHQ7Ci0gICAgICAgIHJlc3BvbnNlUGFyYW1zLmluaXRQYXJhbXMg
PSByZXNwb25zZS5pbml0UGFyYW1zOwotICAgICAgICB2YXIgYnVpbGRlciA9IG5ldyBjb2RlYy5N
ZXNzYWdlVjFCdWlsZGVyKAotICAgICAgICAgICAga1NlbnNvclByb3ZpZGVyX0dldFNlbnNvcl9O
YW1lLAotICAgICAgICAgICAgY29kZWMuYWxpZ24oU2Vuc29yUHJvdmlkZXJfR2V0U2Vuc29yX1Jl
c3BvbnNlUGFyYW1zLmVuY29kZWRTaXplKSwKLSAgICAgICAgICAgIGNvZGVjLmtNZXNzYWdlSXNS
ZXNwb25zZSwgcmVhZGVyLnJlcXVlc3RJRCk7Ci0gICAgICAgIGJ1aWxkZXIuZW5jb2RlU3RydWN0
KFNlbnNvclByb3ZpZGVyX0dldFNlbnNvcl9SZXNwb25zZVBhcmFtcywKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcmVzcG9uc2VQYXJhbXMpOwotICAgICAgICB2YXIgbWVzc2FnZSA9IGJ1
aWxkZXIuZmluaXNoKCk7Ci0gICAgICAgIHJlc3BvbmRlci5hY2NlcHQobWVzc2FnZSk7Ci0gICAg
ICB9KTsKLSAgICAgIHJldHVybiB0cnVlOwotICAgIGRlZmF1bHQ6Ci0gICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgfQotICB9OwotCi0gIGZ1bmN0aW9uIHZhbGlkYXRlU2Vuc29yUHJvdmlkZXJSZXF1
ZXN0KG1lc3NhZ2VWYWxpZGF0b3IpIHsKLSAgICB2YXIgbWVzc2FnZSA9IG1lc3NhZ2VWYWxpZGF0
b3IubWVzc2FnZTsKLSAgICB2YXIgcGFyYW1zQ2xhc3MgPSBudWxsOwotICAgIHN3aXRjaCAobWVz
c2FnZS5nZXROYW1lKCkpIHsKLSAgICAgIGNhc2Uga1NlbnNvclByb3ZpZGVyX0dldFNlbnNvcl9O
YW1lOgotICAgICAgICBpZiAobWVzc2FnZS5leHBlY3RzUmVzcG9uc2UoKSkKLSAgICAgICAgICBw
YXJhbXNDbGFzcyA9IFNlbnNvclByb3ZpZGVyX0dldFNlbnNvcl9QYXJhbXM7Ci0gICAgICBicmVh
azsKLSAgICB9Ci0gICAgaWYgKHBhcmFtc0NsYXNzID09PSBudWxsKQotICAgICAgcmV0dXJuIHZh
bGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORTsKLSAgICByZXR1cm4gcGFyYW1zQ2xhc3MudmFs
aWRhdGUobWVzc2FnZVZhbGlkYXRvciwgbWVzc2FnZVZhbGlkYXRvci5tZXNzYWdlLmdldEhlYWRl
ck51bUJ5dGVzKCkpOwotICB9Ci0KLSAgZnVuY3Rpb24gdmFsaWRhdGVTZW5zb3JQcm92aWRlclJl
c3BvbnNlKG1lc3NhZ2VWYWxpZGF0b3IpIHsKLSAgIHZhciBtZXNzYWdlID0gbWVzc2FnZVZhbGlk
YXRvci5tZXNzYWdlOwotICAgdmFyIHBhcmFtc0NsYXNzID0gbnVsbDsKLSAgIHN3aXRjaCAobWVz
c2FnZS5nZXROYW1lKCkpIHsKLSAgICAgIGNhc2Uga1NlbnNvclByb3ZpZGVyX0dldFNlbnNvcl9O
YW1lOgotICAgICAgICBpZiAobWVzc2FnZS5pc1Jlc3BvbnNlKCkpCi0gICAgICAgICAgcGFyYW1z
Q2xhc3MgPSBTZW5zb3JQcm92aWRlcl9HZXRTZW5zb3JfUmVzcG9uc2VQYXJhbXM7Ci0gICAgICAg
IGJyZWFrOwotICAgIH0KLSAgICBpZiAocGFyYW1zQ2xhc3MgPT09IG51bGwpCi0gICAgICByZXR1
cm4gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FOwotICAgIHJldHVybiBwYXJhbXNDbGFz
cy52YWxpZGF0ZShtZXNzYWdlVmFsaWRhdG9yLCBtZXNzYWdlVmFsaWRhdG9yLm1lc3NhZ2UuZ2V0
SGVhZGVyTnVtQnl0ZXMoKSk7Ci0gIH0KLQotICB2YXIgU2Vuc29yUHJvdmlkZXIgPSB7Ci0gICAg
bmFtZTogJ2RldmljZS5tb2pvbS5TZW5zb3JQcm92aWRlcicsCi0gICAga1ZlcnNpb246IDAsCi0g
ICAgcHRyQ2xhc3M6IFNlbnNvclByb3ZpZGVyUHRyLAotICAgIHByb3h5Q2xhc3M6IFNlbnNvclBy
b3ZpZGVyUHJveHksCi0gICAgc3R1YkNsYXNzOiBTZW5zb3JQcm92aWRlclN0dWIsCi0gICAgdmFs
aWRhdGVSZXF1ZXN0OiB2YWxpZGF0ZVNlbnNvclByb3ZpZGVyUmVxdWVzdCwKLSAgICB2YWxpZGF0
ZVJlc3BvbnNlOiB2YWxpZGF0ZVNlbnNvclByb3ZpZGVyUmVzcG9uc2UsCi0gIH07Ci0gIFNlbnNv
clByb3ZpZGVyU3R1Yi5wcm90b3R5cGUudmFsaWRhdG9yID0gdmFsaWRhdGVTZW5zb3JQcm92aWRl
clJlcXVlc3Q7Ci0gIFNlbnNvclByb3ZpZGVyUHJveHkucHJvdG90eXBlLnZhbGlkYXRvciA9IHZh
bGlkYXRlU2Vuc29yUHJvdmlkZXJSZXNwb25zZTsKLSAgZXhwb3J0cy5TZW5zb3JDcmVhdGlvblJl
c3VsdCA9IFNlbnNvckNyZWF0aW9uUmVzdWx0OwotICBleHBvcnRzLlNlbnNvckluaXRQYXJhbXMg
PSBTZW5zb3JJbml0UGFyYW1zOwotICBleHBvcnRzLlNlbnNvclByb3ZpZGVyID0gU2Vuc29yUHJv
dmlkZXI7Ci0gIGV4cG9ydHMuU2Vuc29yUHJvdmlkZXJQdHIgPSBTZW5zb3JQcm92aWRlclB0cjsK
LSAgZXhwb3J0cy5TZW5zb3JQcm92aWRlckFzc29jaWF0ZWRQdHIgPSBTZW5zb3JQcm92aWRlckFz
c29jaWF0ZWRQdHI7Ci19KSgpOwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNj
L3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vc3RyaW5nMTYubW9qb20uanMg
Yi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9j
aHJvbWl1bS9zdHJpbmcxNi5tb2pvbS5qcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MjUzNzdlNjY1NzFiMTQ1OTA3YTQ5MGQxN2M2NzNhNWFiZDAyMzE3MS4uMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mv
d2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS9zdHJpbmcxNi5tb2pvbS5qcwor
KysgL2Rldi9udWxsCkBAIC0xLDE0MSArMCwwIEBACi0vLyBDb3B5cmlnaHQgMjAxNCBUaGUgQ2hy
b21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJj
ZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8v
IGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLSd1c2Ugc3RyaWN0JzsKLQotKGZ1bmN0aW9u
KCkgewotICB2YXIgbW9qb21JZCA9ICdtb2pvL3B1YmxpYy9tb2pvbS9iYXNlL3N0cmluZzE2Lm1v
am9tJzsKLSAgaWYgKG1vam8uaW50ZXJuYWwuaXNNb2pvbUxvYWRlZChtb2pvbUlkKSkgewotICAg
IGNvbnNvbGUud2FybignVGhlIGZvbGxvd2luZyBtb2pvbSBpcyBsb2FkZWQgbXVsdGlwbGUgdGlt
ZXM6ICcgKyBtb2pvbUlkKTsKLSAgICByZXR1cm47Ci0gIH0KLSAgbW9qby5pbnRlcm5hbC5tYXJr
TW9qb21Mb2FkZWQobW9qb21JZCk7Ci0gIHZhciBiaW5kaW5ncyA9IG1vam87Ci0gIHZhciBhc3Nv
Y2lhdGVkQmluZGluZ3MgPSBtb2pvOwotICB2YXIgY29kZWMgPSBtb2pvLmludGVybmFsOwotICB2
YXIgdmFsaWRhdG9yID0gbW9qby5pbnRlcm5hbDsKLQotICB2YXIgZXhwb3J0cyA9IG1vam8uaW50
ZXJuYWwuZXhwb3NlTmFtZXNwYWNlKCdtb2pvQmFzZS5tb2pvbScpOwotICB2YXIgYmlnX2J1ZmZl
ciQgPQotICAgICAgbW9qby5pbnRlcm5hbC5leHBvc2VOYW1lc3BhY2UoJ21vam9CYXNlLm1vam9t
Jyk7Ci0gIGlmIChtb2pvLmNvbmZpZy5hdXRvTG9hZE1vam9tRGVwcykgewotICAgIG1vam8uaW50
ZXJuYWwubG9hZE1vam9tSWZOZWNlc3NhcnkoCi0gICAgICAgICdtb2pvL3B1YmxpYy9tb2pvbS9i
YXNlL2JpZ19idWZmZXIubW9qb20nLCAnYmlnX2J1ZmZlci5tb2pvbS5qcycpOwotICB9Ci0KLQot
Ci0gIGZ1bmN0aW9uIFN0cmluZzE2KHZhbHVlcykgewotICAgIHRoaXMuaW5pdERlZmF1bHRzXygp
OwotICAgIHRoaXMuaW5pdEZpZWxkc18odmFsdWVzKTsKLSAgfQotCi0KLSAgU3RyaW5nMTYucHJv
dG90eXBlLmluaXREZWZhdWx0c18gPSBmdW5jdGlvbigpIHsKLSAgICB0aGlzLmRhdGEgPSBudWxs
OwotICB9OwotICBTdHJpbmcxNi5wcm90b3R5cGUuaW5pdEZpZWxkc18gPSBmdW5jdGlvbihmaWVs
ZHMpIHsKLSAgICBmb3IodmFyIGZpZWxkIGluIGZpZWxkcykgewotICAgICAgICBpZiAodGhpcy5o
YXNPd25Qcm9wZXJ0eShmaWVsZCkpCi0gICAgICAgICAgdGhpc1tmaWVsZF0gPSBmaWVsZHNbZmll
bGRdOwotICAgIH0KLSAgfTsKLQotICBTdHJpbmcxNi52YWxpZGF0ZSA9IGZ1bmN0aW9uKG1lc3Nh
Z2VWYWxpZGF0b3IsIG9mZnNldCkgewotICAgIHZhciBlcnI7Ci0gICAgZXJyID0gbWVzc2FnZVZh
bGlkYXRvci52YWxpZGF0ZVN0cnVjdEhlYWRlcihvZmZzZXQsIGNvZGVjLmtTdHJ1Y3RIZWFkZXJT
aXplKTsKLSAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCi0g
ICAgICAgIHJldHVybiBlcnI7Ci0KLSAgICB2YXIga1ZlcnNpb25TaXplcyA9IFsKLSAgICAgIHt2
ZXJzaW9uOiAwLCBudW1CeXRlczogMTZ9Ci0gICAgXTsKLSAgICBlcnIgPSBtZXNzYWdlVmFsaWRh
dG9yLnZhbGlkYXRlU3RydWN0VmVyc2lvbihvZmZzZXQsIGtWZXJzaW9uU2l6ZXMpOwotICAgIGlm
IChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKLSAgICAgICAgcmV0dXJu
IGVycjsKLQotCi0gICAgLy8gdmFsaWRhdGUgU3RyaW5nMTYuZGF0YQotICAgIGVyciA9IG1lc3Nh
Z2VWYWxpZGF0b3IudmFsaWRhdGVBcnJheVBvaW50ZXIob2Zmc2V0ICsgY29kZWMua1N0cnVjdEhl
YWRlclNpemUgKyAwLCAyLCBjb2RlYy5VaW50MTYsIGZhbHNlLCBbMF0sIDApOwotICAgIGlmIChl
cnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKLSAgICAgICAgcmV0dXJuIGVy
cjsKLQotICAgIHJldHVybiB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkU7Ci0gIH07Ci0K
LSAgU3RyaW5nMTYuZW5jb2RlZFNpemUgPSBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDg7Ci0K
LSAgU3RyaW5nMTYuZGVjb2RlID0gZnVuY3Rpb24oZGVjb2RlcikgewotICAgIHZhciBwYWNrZWQ7
Ci0gICAgdmFyIHZhbCA9IG5ldyBTdHJpbmcxNigpOwotICAgIHZhciBudW1iZXJPZkJ5dGVzID0g
ZGVjb2Rlci5yZWFkVWludDMyKCk7Ci0gICAgdmFyIHZlcnNpb24gPSBkZWNvZGVyLnJlYWRVaW50
MzIoKTsKLSAgICB2YWwuZGF0YSA9IGRlY29kZXIuZGVjb2RlQXJyYXlQb2ludGVyKGNvZGVjLlVp
bnQxNik7Ci0gICAgcmV0dXJuIHZhbDsKLSAgfTsKLQotICBTdHJpbmcxNi5lbmNvZGUgPSBmdW5j
dGlvbihlbmNvZGVyLCB2YWwpIHsKLSAgICB2YXIgcGFja2VkOwotICAgIGVuY29kZXIud3JpdGVV
aW50MzIoU3RyaW5nMTYuZW5jb2RlZFNpemUpOwotICAgIGVuY29kZXIud3JpdGVVaW50MzIoMCk7
Ci0gICAgZW5jb2Rlci5lbmNvZGVBcnJheVBvaW50ZXIoY29kZWMuVWludDE2LCB2YWwuZGF0YSk7
Ci0gIH07Ci0gIGZ1bmN0aW9uIEJpZ1N0cmluZzE2KHZhbHVlcykgewotICAgIHRoaXMuaW5pdERl
ZmF1bHRzXygpOwotICAgIHRoaXMuaW5pdEZpZWxkc18odmFsdWVzKTsKLSAgfQotCi0KLSAgQmln
U3RyaW5nMTYucHJvdG90eXBlLmluaXREZWZhdWx0c18gPSBmdW5jdGlvbigpIHsKLSAgICB0aGlz
LmRhdGEgPSBudWxsOwotICB9OwotICBCaWdTdHJpbmcxNi5wcm90b3R5cGUuaW5pdEZpZWxkc18g
PSBmdW5jdGlvbihmaWVsZHMpIHsKLSAgICBmb3IodmFyIGZpZWxkIGluIGZpZWxkcykgewotICAg
ICAgICBpZiAodGhpcy5oYXNPd25Qcm9wZXJ0eShmaWVsZCkpCi0gICAgICAgICAgdGhpc1tmaWVs
ZF0gPSBmaWVsZHNbZmllbGRdOwotICAgIH0KLSAgfTsKLQotICBCaWdTdHJpbmcxNi52YWxpZGF0
ZSA9IGZ1bmN0aW9uKG1lc3NhZ2VWYWxpZGF0b3IsIG9mZnNldCkgewotICAgIHZhciBlcnI7Ci0g
ICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdEhlYWRlcihvZmZzZXQsIGNv
ZGVjLmtTdHJ1Y3RIZWFkZXJTaXplKTsKLSAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRh
dGlvbkVycm9yLk5PTkUpCi0gICAgICAgIHJldHVybiBlcnI7Ci0KLSAgICB2YXIga1ZlcnNpb25T
aXplcyA9IFsKLSAgICAgIHt2ZXJzaW9uOiAwLCBudW1CeXRlczogMjR9Ci0gICAgXTsKLSAgICBl
cnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0VmVyc2lvbihvZmZzZXQsIGtWZXJz
aW9uU2l6ZXMpOwotICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9O
RSkKLSAgICAgICAgcmV0dXJuIGVycjsKLQotCi0gICAgLy8gdmFsaWRhdGUgQmlnU3RyaW5nMTYu
ZGF0YQotICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVVbmlvbihvZmZzZXQgKyBj
b2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDAsIGJpZ19idWZmZXIkLkJpZ0J1ZmZlciwgZmFsc2Up
OwotICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKLSAgICAg
ICAgcmV0dXJuIGVycjsKLQotICAgIHJldHVybiB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5P
TkU7Ci0gIH07Ci0KLSAgQmlnU3RyaW5nMTYuZW5jb2RlZFNpemUgPSBjb2RlYy5rU3RydWN0SGVh
ZGVyU2l6ZSArIDE2OwotCi0gIEJpZ1N0cmluZzE2LmRlY29kZSA9IGZ1bmN0aW9uKGRlY29kZXIp
IHsKLSAgICB2YXIgcGFja2VkOwotICAgIHZhciB2YWwgPSBuZXcgQmlnU3RyaW5nMTYoKTsKLSAg
ICB2YXIgbnVtYmVyT2ZCeXRlcyA9IGRlY29kZXIucmVhZFVpbnQzMigpOwotICAgIHZhciB2ZXJz
aW9uID0gZGVjb2Rlci5yZWFkVWludDMyKCk7Ci0gICAgdmFsLmRhdGEgPSBkZWNvZGVyLmRlY29k
ZVN0cnVjdChiaWdfYnVmZmVyJC5CaWdCdWZmZXIpOwotICAgIHJldHVybiB2YWw7Ci0gIH07Ci0K
LSAgQmlnU3RyaW5nMTYuZW5jb2RlID0gZnVuY3Rpb24oZW5jb2RlciwgdmFsKSB7Ci0gICAgdmFy
IHBhY2tlZDsKLSAgICBlbmNvZGVyLndyaXRlVWludDMyKEJpZ1N0cmluZzE2LmVuY29kZWRTaXpl
KTsKLSAgICBlbmNvZGVyLndyaXRlVWludDMyKDApOwotICAgIGVuY29kZXIuZW5jb2RlU3RydWN0
KGJpZ19idWZmZXIkLkJpZ0J1ZmZlciwgdmFsLmRhdGEpOwotICB9OwotICBleHBvcnRzLlN0cmlu
ZzE2ID0gU3RyaW5nMTY7Ci0gIGV4cG9ydHMuQmlnU3RyaW5nMTYgPSBCaWdTdHJpbmcxNjsKLX0p
KCk7ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMv
aW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vc3RyaW5n
MTYubW9qb20uanMuaGVhZGVycyBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZv
cm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL3N0cmluZzE2Lm1vam9tLmpzLmhlYWRlcnMKZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY4MDVjMzIzZGY1YTk3NTIzMTY0OGI4MzBlMzNj
ZTE4M2MzY2JiZDMuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0t
IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMv
Y2hyb21pdW0vc3RyaW5nMTYubW9qb20uanMuaGVhZGVycworKysgL2Rldi9udWxsCkBAIC0xICsw
LDAgQEAKLUNvbnRlbnQtVHlwZTogdGV4dC9qYXZhc2NyaXB0OyBjaGFyc2V0PXV0Zi04CmRpZmYg
LS1naXQgYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291
cmNlcy9jaHJvbWl1bS91cmwubW9qb20uanMgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2Vi
LXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS91cmwubW9qb20uanMKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM1ZWVlMWYyYWViNDA2OWM1OTU5MTRlZTAyMmE5ZTUwOWI5
ZGE1NDUuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvTGF5
b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21p
dW0vdXJsLm1vam9tLmpzCisrKyAvZGV2L251bGwKQEAgLTEsNzkgKzAsMCBAQAotLy8gQ29weXJp
Z2h0IDIwMTQgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBV
c2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNl
IHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotCi0ndXNlIHN0cmlj
dCc7Ci0KLShmdW5jdGlvbigpIHsKLSAgdmFyIG1vam9tSWQgPSAndXJsL21vam9tL3VybC5tb2pv
bSc7Ci0gIGlmIChtb2pvLmludGVybmFsLmlzTW9qb21Mb2FkZWQobW9qb21JZCkpIHsKLSAgICBj
b25zb2xlLndhcm4oJ1RoZSBmb2xsb3dpbmcgbW9qb20gaXMgbG9hZGVkIG11bHRpcGxlIHRpbWVz
OiAnICsgbW9qb21JZCk7Ci0gICAgcmV0dXJuOwotICB9Ci0gIG1vam8uaW50ZXJuYWwubWFya01v
am9tTG9hZGVkKG1vam9tSWQpOwotICB2YXIgYmluZGluZ3MgPSBtb2pvOwotICB2YXIgYXNzb2Np
YXRlZEJpbmRpbmdzID0gbW9qbzsKLSAgdmFyIGNvZGVjID0gbW9qby5pbnRlcm5hbDsKLSAgdmFy
IHZhbGlkYXRvciA9IG1vam8uaW50ZXJuYWw7Ci0KLSAgdmFyIGV4cG9ydHMgPSBtb2pvLmludGVy
bmFsLmV4cG9zZU5hbWVzcGFjZSgndXJsLm1vam9tJyk7Ci0KLQotCi0gIGZ1bmN0aW9uIFVybCh2
YWx1ZXMpIHsKLSAgICB0aGlzLmluaXREZWZhdWx0c18oKTsKLSAgICB0aGlzLmluaXRGaWVsZHNf
KHZhbHVlcyk7Ci0gIH0KLQotCi0gIFVybC5wcm90b3R5cGUuaW5pdERlZmF1bHRzXyA9IGZ1bmN0
aW9uKCkgewotICAgIHRoaXMudXJsID0gbnVsbDsKLSAgfTsKLSAgVXJsLnByb3RvdHlwZS5pbml0
RmllbGRzXyA9IGZ1bmN0aW9uKGZpZWxkcykgewotICAgIGZvcih2YXIgZmllbGQgaW4gZmllbGRz
KSB7Ci0gICAgICAgIGlmICh0aGlzLmhhc093blByb3BlcnR5KGZpZWxkKSkKLSAgICAgICAgICB0
aGlzW2ZpZWxkXSA9IGZpZWxkc1tmaWVsZF07Ci0gICAgfQotICB9OwotCi0gIFVybC52YWxpZGF0
ZSA9IGZ1bmN0aW9uKG1lc3NhZ2VWYWxpZGF0b3IsIG9mZnNldCkgewotICAgIHZhciBlcnI7Ci0g
ICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdEhlYWRlcihvZmZzZXQsIGNv
ZGVjLmtTdHJ1Y3RIZWFkZXJTaXplKTsKLSAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRh
dGlvbkVycm9yLk5PTkUpCi0gICAgICAgIHJldHVybiBlcnI7Ci0KLSAgICB2YXIga1ZlcnNpb25T
aXplcyA9IFsKLSAgICAgIHt2ZXJzaW9uOiAwLCBudW1CeXRlczogMTZ9Ci0gICAgXTsKLSAgICBl
cnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0VmVyc2lvbihvZmZzZXQsIGtWZXJz
aW9uU2l6ZXMpOwotICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9O
RSkKLSAgICAgICAgcmV0dXJuIGVycjsKLQotCi0gICAgLy8gdmFsaWRhdGUgVXJsLnVybAotICAg
IGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJpbmdQb2ludGVyKG9mZnNldCArIGNv
ZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgMCwgZmFsc2UpCi0gICAgaWYgKGVyciAhPT0gdmFsaWRh
dG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQotICAgICAgICByZXR1cm4gZXJyOwotCi0gICAgcmV0
dXJuIHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORTsKLSAgfTsKLQotICBVcmwuZW5jb2Rl
ZFNpemUgPSBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDg7Ci0KLSAgVXJsLmRlY29kZSA9IGZ1
bmN0aW9uKGRlY29kZXIpIHsKLSAgICB2YXIgcGFja2VkOwotICAgIHZhciB2YWwgPSBuZXcgVXJs
KCk7Ci0gICAgdmFyIG51bWJlck9mQnl0ZXMgPSBkZWNvZGVyLnJlYWRVaW50MzIoKTsKLSAgICB2
YXIgdmVyc2lvbiA9IGRlY29kZXIucmVhZFVpbnQzMigpOwotICAgIHZhbC51cmwgPSBkZWNvZGVy
LmRlY29kZVN0cnVjdChjb2RlYy5TdHJpbmcpOwotICAgIHJldHVybiB2YWw7Ci0gIH07Ci0KLSAg
VXJsLmVuY29kZSA9IGZ1bmN0aW9uKGVuY29kZXIsIHZhbCkgewotICAgIHZhciBwYWNrZWQ7Ci0g
ICAgZW5jb2Rlci53cml0ZVVpbnQzMihVcmwuZW5jb2RlZFNpemUpOwotICAgIGVuY29kZXIud3Jp
dGVVaW50MzIoMCk7Ci0gICAgZW5jb2Rlci5lbmNvZGVTdHJ1Y3QoY29kZWMuU3RyaW5nLCB2YWwu
dXJsKTsKLSAgfTsKLSAgZXhwb3J0cy5VcmwgPSBVcmw7Ci19KSgpOwpcIE5vIG5ld2xpbmUgYXQg
ZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxh
dGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL3czYy1pbXBvcnQubG9nIGIvTGF5b3V0VGVz
dHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vdzNj
LWltcG9ydC5sb2cKaW5kZXggZTJkMGEwOWRlMWU5YTIwN2NiY2FhMWI1NzYyM2RlNjlmODQ1ZDcy
Ny4uOTBhMjY1YmQwNjhjYWUyZDA5OWYyZDA1MzQ5NDJkZGYwNjhmMjVkOSAxMDA2NDQKLS0tIGEv
TGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hy
b21pdW0vdzNjLWltcG9ydC5sb2cKKysrIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1w
bGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vdzNjLWltcG9ydC5sb2cKQEAgLTE1LDQ0
ICsxNSwyMyBAQCBOb25lCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIExpc3Qgb2YgZmlsZXM6CiAvTGF5b3V0
VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0v
UkVBRE1FLm1kCi0vTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9y
ZXNvdXJjZXMvY2hyb21pdW0vYmlnX2J1ZmZlci5tb2pvbS5qcwotL0xheW91dFRlc3RzL2ltcG9y
dGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL2JpZ19idWZmZXIu
bW9qb20uanMuaGVhZGVycwogL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0t
dGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL2NvbnRhY3RzX21hbmFnZXJfbW9jay5qcwotL0xheW91
dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVt
L2RldmljZS5tb2pvbS5qcwotL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0t
dGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL2RldmljZS5tb2pvbS5qcy5oZWFkZXJzCi0vTGF5b3V0
VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0v
ZGV2aWNlX2VudW1lcmF0aW9uX29wdGlvbnMubW9qb20uanMKLS9MYXlvdXRUZXN0cy9pbXBvcnRl
ZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS9kZXZpY2VfZW51bWVy
YXRpb25fb3B0aW9ucy5tb2pvbS5qcy5oZWFkZXJzCi0vTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNj
L3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vZGV2aWNlX21hbmFnZXJfY2xp
ZW50Lm1vam9tLmpzCi0vTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0
cy9yZXNvdXJjZXMvY2hyb21pdW0vZGV2aWNlX21hbmFnZXJfY2xpZW50Lm1vam9tLmpzLmhlYWRl
cnMKIC9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNl
cy9jaHJvbWl1bS9lbmFibGUtaHlwZXJsaW5rLWF1ZGl0aW5nLmpzCiAvTGF5b3V0VGVzdHMvaW1w
b3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vZ2VuZXJpY19z
ZW5zb3JfbW9ja3MuanMKIC9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRl
c3RzL3Jlc291cmNlcy9jaHJvbWl1bS9nZW5lcmljX3NlbnNvcl9tb2Nrcy5qcy5oZWFkZXJzCi0v
TGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hy
b21pdW0vaW1hZ2VfY2FwdHVyZS1tb2pvbS5qcy5oZWFkZXJzCi0vTGF5b3V0VGVzdHMvaW1wb3J0
ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vaW1hZ2VfY2FwdHVy
ZS5tb2pvbS5qcwogL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMv
cmVzb3VyY2VzL2Nocm9taXVtL21vY2stYmFyY29kZWRldGVjdGlvbi5qcwogL0xheW91dFRlc3Rz
L2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL21vY2st
YmFyY29kZWRldGVjdGlvbi5qcy5oZWFkZXJzCiAvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dl
Yi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vbW9jay1mYWNlZGV0ZWN0aW9uLmpz
CiAvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMv
Y2hyb21pdW0vbW9jay1mYWNlZGV0ZWN0aW9uLmpzLmhlYWRlcnMKKy9MYXlvdXRUZXN0cy9pbXBv
cnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS9tb2NrLWlkbGUt
ZGV0ZWN0aW9uLmpzCiAvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0
cy9yZXNvdXJjZXMvY2hyb21pdW0vbW9jay1pbWFnZWNhcHR1cmUuanMKIC9MYXlvdXRUZXN0cy9p
bXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS9tb2NrLXNj
cmVlbmVudW1lcmF0aW9uLmpzCiAvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9y
bS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vbW9jay1zY3JlZW5lbnVtZXJhdGlvbi5qcy5oZWFk
ZXIKLS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNl
cy9jaHJvbWl1bS9tb2NrLXNtcy1yZWNlaXZlci5qcwogL0xheW91dFRlc3RzL2ltcG9ydGVkL3cz
Yy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL21vY2stdGV4dGRldGVjdGlv
bi5qcwogL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3Vy
Y2VzL2Nocm9taXVtL21vY2stdGV4dGRldGVjdGlvbi5qcy5oZWFkZXJzCi0vTGF5b3V0VGVzdHMv
aW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vbW9qb19i
aW5kaW5ncy5qcwotL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMv
cmVzb3VyY2VzL2Nocm9taXVtL21vam9fYmluZGluZ3MuanMuaGVhZGVycwotL0xheW91dFRlc3Rz
L2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL21vam9f
d2ViX3Rlc3RfaGVscGVyX3Rlc3QubW9qb20uanMKLS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mv
d2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS9tb2pvX3dlYl90ZXN0X2hlbHBl
cl90ZXN0Lm1vam9tLmpzLmhlYWRlcnMKIC9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBs
YXRmb3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS9uZmMtbW9jay5qcwotL0xheW91dFRlc3Rz
L2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL3NlbnNv
ci5tb2pvbS5qcwotL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMv
cmVzb3VyY2VzL2Nocm9taXVtL3NlbnNvcl9wcm92aWRlci5tb2pvbS5qcwotL0xheW91dFRlc3Rz
L2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL3N0cmlu
ZzE2Lm1vam9tLmpzCi0vTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0
cy9yZXNvdXJjZXMvY2hyb21pdW0vc3RyaW5nMTYubW9qb20uanMuaGVhZGVycwotL0xheW91dFRl
c3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL3Vy
bC5tb2pvbS5qcwogL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMv
cmVzb3VyY2VzL2Nocm9taXVtL3dlYi1ibHVldG9vdGgtdGVzdC5qcwogL0xheW91dFRlc3RzL2lt
cG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL3dlYi1ibHVl
dG9vdGgtdGVzdC5qcy5oZWFkZXJzCi0vTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0
Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vd2ViX3VzYl9zZXJ2aWNlLm1vam9tLmpzCi0v
TGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hy
b21pdW0vd2ViX3VzYl9zZXJ2aWNlLm1vam9tLmpzLmhlYWRlcnMKIC9MYXlvdXRUZXN0cy9pbXBv
cnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS93ZWJ1c2ItY2hp
bGQtdGVzdC5qcwogL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMv
cmVzb3VyY2VzL2Nocm9taXVtL3dlYnVzYi1jaGlsZC10ZXN0LmpzLmhlYWRlcnMKIC9MYXlvdXRU
ZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS93
ZWJ1c2ItdGVzdC5qcwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1w
bGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vd2ViLWJsdWV0b290aC10ZXN0LmpzIGIv
TGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hy
b21pdW0vd2ViLWJsdWV0b290aC10ZXN0LmpzCmluZGV4IGI2MzY1OGUyZTc1MzIxOGQ1MDUwOGI0
MTE5OWZjNmZmMTg3MTFkYmYuLmFhNGI4MGQyODMxYzNjNjllZjE2ZDcwMTZiNDFkODE4YmQ1OGJk
N2IgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVz
dHMvcmVzb3VyY2VzL2Nocm9taXVtL3dlYi1ibHVldG9vdGgtdGVzdC5qcworKysgYi9MYXlvdXRU
ZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS93
ZWItYmx1ZXRvb3RoLXRlc3QuanMKQEAgLTM4LDEwICszOCwxNyBAQCBmdW5jdGlvbiBjYW5vbmlj
YWxpemVBbmRDb252ZXJ0VG9Nb2pvVVVJRCh1dWlkcykgewogCiAvLyBDb252ZXJ0cyBXZWJJREwg
YSByZWNvcmQ8RE9NU3RyaW5nLCBCdWZmZXJTb3VyY2U+IHRvIGEgbWFwPEssIGFycmF5PHVpbnQ4
Pj4gdG8KIC8vIHVzZSBmb3IgTW9qbywgd2hlcmUgdGhlIHZhbHVlIGZvciBLIGlzIGNhbGN1bGF0
ZWQgdXNpbmcga2V5Rm4uCi1mdW5jdGlvbiBjb252ZXJ0VG9Nb2pvTWFwKHJlY29yZCwga2V5Rm4p
IHsKK2Z1bmN0aW9uIGNvbnZlcnRUb01vam9NYXAocmVjb3JkLCBrZXlGbiwgaXNOdW1iZXJLZXkg
PSBmYWxzZSkgewogICBsZXQgbWFwID0gbmV3IE1hcCgpOwogICBmb3IgKGNvbnN0IFtrZXksIHZh
bHVlXSBvZiBPYmplY3QuZW50cmllcyhyZWNvcmQpKSB7CiAgICAgbGV0IGJ1ZmZlciA9IEFycmF5
QnVmZmVyLmlzVmlldyh2YWx1ZSkgPyB2YWx1ZS5idWZmZXIgOiB2YWx1ZTsKKyAgICBpZiAoaXNO
dW1iZXJLZXkpIHsKKyAgICAgIGxldCBudW1iZXJLZXkgPSBwYXJzZUludChrZXkpOworICAgICAg
aWYgKE51bWJlci5pc05hTihudW1iZXJLZXkpKQorICAgICAgICB0aHJvdyBgTWFwIGtleSAke2tl
eX0gaXMgbm90IGEgbnVtYmVyYDsKKyAgICAgIG1hcC5zZXQoa2V5Rm4obnVtYmVyS2V5KSwgQXJy
YXkuZnJvbShuZXcgVWludDhBcnJheShidWZmZXIpKSk7CisgICAgICBjb250aW51ZTsKKyAgICB9
CiAgICAgbWFwLnNldChrZXlGbihrZXkpLCBBcnJheS5mcm9tKG5ldyBVaW50OEFycmF5KGJ1ZmZl
cikpKTsKICAgfQogICByZXR1cm4gbWFwOwpAQCAtMjExLDE1ICsyMTgsMTcgQEAgY2xhc3MgRmFr
ZUNlbnRyYWwgewogICAgIC8vIENvbnZlcnQgbWFudWZhY3R1cmVyRGF0YSBmcm9tIGEgcmVjb3Jk
PERPTVN0cmluZywgQnVmZmVyU291cmNlPiBpbnRvIGEKICAgICAvLyBtYXA8dWludDgsIGFycmF5
PHVpbnQ4Pj4gZm9yIE1vam8uCiAgICAgaWYgKCdtYW51ZmFjdHVyZXJEYXRhJyBpbiBzY2FuUmVz
dWx0LnNjYW5SZWNvcmQpIHsKLSAgICAgIGNsb25lZFNjYW5SZXN1bHQuc2NhblJlY29yZC5tYW51
ZmFjdHVyZXJEYXRhID0KLSAgICAgICAgICBjb252ZXJ0VG9Nb2pvTWFwKHNjYW5SZXN1bHQuc2Nh
blJlY29yZC5tYW51ZmFjdHVyZXJEYXRhLCBOdW1iZXIpOworICAgICAgY2xvbmVkU2NhblJlc3Vs
dC5zY2FuUmVjb3JkLm1hbnVmYWN0dXJlckRhdGEgPSBjb252ZXJ0VG9Nb2pvTWFwKAorICAgICAg
ICAgIHNjYW5SZXN1bHQuc2NhblJlY29yZC5tYW51ZmFjdHVyZXJEYXRhLCBOdW1iZXIsCisgICAg
ICAgICAgdHJ1ZSAvKiBpc051bWJlcktleSAqLyk7CiAgICAgfQogCiAgICAgLy8gQ29udmVydCBz
ZXJ2aWNlRGF0YSBmcm9tIGEgcmVjb3JkPERPTVN0cmluZywgQnVmZmVyU291cmNlPiBpbnRvIGEK
ICAgICAvLyBtYXA8c3RyaW5nLCBhcnJheTx1aW50OD4+IGZvciBNb2pvLgogICAgIGlmICgnc2Vy
dmljZURhdGEnIGluIHNjYW5SZXN1bHQuc2NhblJlY29yZCkgewogICAgICAgY2xvbmVkU2NhblJl
c3VsdC5zY2FuUmVjb3JkLnNlcnZpY2VEYXRhLnNlcnZpY2VEYXRhID0gY29udmVydFRvTW9qb01h
cCgKLSAgICAgICAgICBzY2FuUmVzdWx0LnNjYW5SZWNvcmQuc2VydmljZURhdGEsIEJsdWV0b290
aFVVSUQuZ2V0U2VydmljZSk7CisgICAgICAgICAgc2NhblJlc3VsdC5zY2FuUmVjb3JkLnNlcnZp
Y2VEYXRhLCBCbHVldG9vdGhVVUlELmdldFNlcnZpY2UsCisgICAgICAgICAgZmFsc2UgLyogaXNO
dW1iZXJLZXkgKi8pOwogICAgIH0KIAogICAgIGF3YWl0IHRoaXMuZmFrZV9jZW50cmFsX3B0cl8u
c2ltdWxhdGVBZHZlcnRpc2VtZW50UmVjZWl2ZWQoCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9p
bXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS93ZWJfdXNi
X3NlcnZpY2UubW9qb20uanMgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3Jt
LXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS93ZWJfdXNiX3NlcnZpY2UubW9qb20uanMKZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE0YTAxN2IxZGUxNzhjMGM1MWFkZGI4NzhkMjU3Yjhi
MWE3NDAzMzQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEv
TGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hy
b21pdW0vd2ViX3VzYl9zZXJ2aWNlLm1vam9tLmpzCisrKyAvZGV2L251bGwKQEAgLTEsNjE0ICsw
LDAgQEAKLS8vIENvcHlyaWdodCAyMDE0IFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBC
U0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmls
ZS4KLQotJ3VzZSBzdHJpY3QnOwotCi0oZnVuY3Rpb24oKSB7Ci0gIHZhciBtb2pvbUlkID0gJ3Ro
aXJkX3BhcnR5L2JsaW5rL3B1YmxpYy9tb2pvbS91c2Ivd2ViX3VzYl9zZXJ2aWNlLm1vam9tJzsK
LSAgaWYgKG1vam8uaW50ZXJuYWwuaXNNb2pvbUxvYWRlZChtb2pvbUlkKSkgewotICAgIGNvbnNv
bGUud2FybignVGhlIGZvbGxvd2luZyBtb2pvbSBpcyBsb2FkZWQgbXVsdGlwbGUgdGltZXM6ICcg
KyBtb2pvbUlkKTsKLSAgICByZXR1cm47Ci0gIH0KLSAgbW9qby5pbnRlcm5hbC5tYXJrTW9qb21M
b2FkZWQobW9qb21JZCk7Ci0gIHZhciBiaW5kaW5ncyA9IG1vam87Ci0gIHZhciBhc3NvY2lhdGVk
QmluZGluZ3MgPSBtb2pvOwotICB2YXIgY29kZWMgPSBtb2pvLmludGVybmFsOwotICB2YXIgdmFs
aWRhdG9yID0gbW9qby5pbnRlcm5hbDsKLQotICB2YXIgZXhwb3J0cyA9IG1vam8uaW50ZXJuYWwu
ZXhwb3NlTmFtZXNwYWNlKCdibGluay5tb2pvbScpOwotICB2YXIgZGV2aWNlJCA9Ci0gICAgICBt
b2pvLmludGVybmFsLmV4cG9zZU5hbWVzcGFjZSgnZGV2aWNlLm1vam9tJyk7Ci0gIGlmIChtb2pv
LmNvbmZpZy5hdXRvTG9hZE1vam9tRGVwcykgewotICAgIG1vam8uaW50ZXJuYWwubG9hZE1vam9t
SWZOZWNlc3NhcnkoCi0gICAgICAgICdkZXZpY2UvdXNiL3B1YmxpYy9tb2pvbS9kZXZpY2UubW9q
b20nLCAnLi4vLi4vLi4vLi4vLi4vZGV2aWNlL3VzYi9wdWJsaWMvbW9qb20vZGV2aWNlLm1vam9t
LmpzJyk7Ci0gIH0KLSAgdmFyIGRldmljZV9lbnVtZXJhdGlvbl9vcHRpb25zJCA9Ci0gICAgICBt
b2pvLmludGVybmFsLmV4cG9zZU5hbWVzcGFjZSgnZGV2aWNlLm1vam9tJyk7Ci0gIGlmIChtb2pv
LmNvbmZpZy5hdXRvTG9hZE1vam9tRGVwcykgewotICAgIG1vam8uaW50ZXJuYWwubG9hZE1vam9t
SWZOZWNlc3NhcnkoCi0gICAgICAgICdkZXZpY2UvdXNiL3B1YmxpYy9tb2pvbS9kZXZpY2VfZW51
bWVyYXRpb25fb3B0aW9ucy5tb2pvbScsICcuLi8uLi8uLi8uLi8uLi9kZXZpY2UvdXNiL3B1Ymxp
Yy9tb2pvbS9kZXZpY2VfZW51bWVyYXRpb25fb3B0aW9ucy5tb2pvbS5qcycpOwotICB9Ci0gIHZh
ciBkZXZpY2VfbWFuYWdlcl9jbGllbnQkID0KLSAgICAgIG1vam8uaW50ZXJuYWwuZXhwb3NlTmFt
ZXNwYWNlKCdkZXZpY2UubW9qb20nKTsKLSAgaWYgKG1vam8uY29uZmlnLmF1dG9Mb2FkTW9qb21E
ZXBzKSB7Ci0gICAgbW9qby5pbnRlcm5hbC5sb2FkTW9qb21JZk5lY2Vzc2FyeSgKLSAgICAgICAg
J2RldmljZS91c2IvcHVibGljL21vam9tL2RldmljZV9tYW5hZ2VyX2NsaWVudC5tb2pvbScsICcu
Li8uLi8uLi8uLi8uLi9kZXZpY2UvdXNiL3B1YmxpYy9tb2pvbS9kZXZpY2VfbWFuYWdlcl9jbGll
bnQubW9qb20uanMnKTsKLSAgfQotCi0KLQotICBmdW5jdGlvbiBXZWJVc2JTZXJ2aWNlX0dldERl
dmljZXNfUGFyYW1zKHZhbHVlcykgewotICAgIHRoaXMuaW5pdERlZmF1bHRzXygpOwotICAgIHRo
aXMuaW5pdEZpZWxkc18odmFsdWVzKTsKLSAgfQotCi0KLSAgV2ViVXNiU2VydmljZV9HZXREZXZp
Y2VzX1BhcmFtcy5wcm90b3R5cGUuaW5pdERlZmF1bHRzXyA9IGZ1bmN0aW9uKCkgewotICB9Owot
ICBXZWJVc2JTZXJ2aWNlX0dldERldmljZXNfUGFyYW1zLnByb3RvdHlwZS5pbml0RmllbGRzXyA9
IGZ1bmN0aW9uKGZpZWxkcykgewotICAgIGZvcih2YXIgZmllbGQgaW4gZmllbGRzKSB7Ci0gICAg
ICAgIGlmICh0aGlzLmhhc093blByb3BlcnR5KGZpZWxkKSkKLSAgICAgICAgICB0aGlzW2ZpZWxk
XSA9IGZpZWxkc1tmaWVsZF07Ci0gICAgfQotICB9OwotCi0gIFdlYlVzYlNlcnZpY2VfR2V0RGV2
aWNlc19QYXJhbXMudmFsaWRhdGUgPSBmdW5jdGlvbihtZXNzYWdlVmFsaWRhdG9yLCBvZmZzZXQp
IHsKLSAgICB2YXIgZXJyOwotICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1
Y3RIZWFkZXIob2Zmc2V0LCBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSk7Ci0gICAgaWYgKGVyciAh
PT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQotICAgICAgICByZXR1cm4gZXJyOwot
Ci0gICAgdmFyIGtWZXJzaW9uU2l6ZXMgPSBbCi0gICAgICB7dmVyc2lvbjogMCwgbnVtQnl0ZXM6
IDh9Ci0gICAgXTsKLSAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0VmVy
c2lvbihvZmZzZXQsIGtWZXJzaW9uU2l6ZXMpOwotICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52
YWxpZGF0aW9uRXJyb3IuTk9ORSkKLSAgICAgICAgcmV0dXJuIGVycjsKLQotICAgIHJldHVybiB2
YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkU7Ci0gIH07Ci0KLSAgV2ViVXNiU2VydmljZV9H
ZXREZXZpY2VzX1BhcmFtcy5lbmNvZGVkU2l6ZSA9IGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsg
MDsKLQotICBXZWJVc2JTZXJ2aWNlX0dldERldmljZXNfUGFyYW1zLmRlY29kZSA9IGZ1bmN0aW9u
KGRlY29kZXIpIHsKLSAgICB2YXIgcGFja2VkOwotICAgIHZhciB2YWwgPSBuZXcgV2ViVXNiU2Vy
dmljZV9HZXREZXZpY2VzX1BhcmFtcygpOwotICAgIHZhciBudW1iZXJPZkJ5dGVzID0gZGVjb2Rl
ci5yZWFkVWludDMyKCk7Ci0gICAgdmFyIHZlcnNpb24gPSBkZWNvZGVyLnJlYWRVaW50MzIoKTsK
LSAgICByZXR1cm4gdmFsOwotICB9OwotCi0gIFdlYlVzYlNlcnZpY2VfR2V0RGV2aWNlc19QYXJh
bXMuZW5jb2RlID0gZnVuY3Rpb24oZW5jb2RlciwgdmFsKSB7Ci0gICAgdmFyIHBhY2tlZDsKLSAg
ICBlbmNvZGVyLndyaXRlVWludDMyKFdlYlVzYlNlcnZpY2VfR2V0RGV2aWNlc19QYXJhbXMuZW5j
b2RlZFNpemUpOwotICAgIGVuY29kZXIud3JpdGVVaW50MzIoMCk7Ci0gIH07Ci0gIGZ1bmN0aW9u
IFdlYlVzYlNlcnZpY2VfR2V0RGV2aWNlc19SZXNwb25zZVBhcmFtcyh2YWx1ZXMpIHsKLSAgICB0
aGlzLmluaXREZWZhdWx0c18oKTsKLSAgICB0aGlzLmluaXRGaWVsZHNfKHZhbHVlcyk7Ci0gIH0K
LQotCi0gIFdlYlVzYlNlcnZpY2VfR2V0RGV2aWNlc19SZXNwb25zZVBhcmFtcy5wcm90b3R5cGUu
aW5pdERlZmF1bHRzXyA9IGZ1bmN0aW9uKCkgewotICAgIHRoaXMucmVzdWx0cyA9IG51bGw7Ci0g
IH07Ci0gIFdlYlVzYlNlcnZpY2VfR2V0RGV2aWNlc19SZXNwb25zZVBhcmFtcy5wcm90b3R5cGUu
aW5pdEZpZWxkc18gPSBmdW5jdGlvbihmaWVsZHMpIHsKLSAgICBmb3IodmFyIGZpZWxkIGluIGZp
ZWxkcykgewotICAgICAgICBpZiAodGhpcy5oYXNPd25Qcm9wZXJ0eShmaWVsZCkpCi0gICAgICAg
ICAgdGhpc1tmaWVsZF0gPSBmaWVsZHNbZmllbGRdOwotICAgIH0KLSAgfTsKLQotICBXZWJVc2JT
ZXJ2aWNlX0dldERldmljZXNfUmVzcG9uc2VQYXJhbXMudmFsaWRhdGUgPSBmdW5jdGlvbihtZXNz
YWdlVmFsaWRhdG9yLCBvZmZzZXQpIHsKLSAgICB2YXIgZXJyOwotICAgIGVyciA9IG1lc3NhZ2VW
YWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RIZWFkZXIob2Zmc2V0LCBjb2RlYy5rU3RydWN0SGVhZGVy
U2l6ZSk7Ci0gICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQot
ICAgICAgICByZXR1cm4gZXJyOwotCi0gICAgdmFyIGtWZXJzaW9uU2l6ZXMgPSBbCi0gICAgICB7
dmVyc2lvbjogMCwgbnVtQnl0ZXM6IDE2fQotICAgIF07Ci0gICAgZXJyID0gbWVzc2FnZVZhbGlk
YXRvci52YWxpZGF0ZVN0cnVjdFZlcnNpb24ob2Zmc2V0LCBrVmVyc2lvblNpemVzKTsKLSAgICBp
ZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCi0gICAgICAgIHJldHVy
biBlcnI7Ci0KLQotICAgIC8vIHZhbGlkYXRlIFdlYlVzYlNlcnZpY2VfR2V0RGV2aWNlc19SZXNw
b25zZVBhcmFtcy5yZXN1bHRzCi0gICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZUFy
cmF5UG9pbnRlcihvZmZzZXQgKyBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDAsIDgsIG5ldyBj
b2RlYy5Qb2ludGVyVG8oZGV2aWNlJC5Vc2JEZXZpY2VJbmZvKSwgZmFsc2UsIFswXSwgMCk7Ci0g
ICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQotICAgICAgICBy
ZXR1cm4gZXJyOwotCi0gICAgcmV0dXJuIHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORTsK
LSAgfTsKLQotICBXZWJVc2JTZXJ2aWNlX0dldERldmljZXNfUmVzcG9uc2VQYXJhbXMuZW5jb2Rl
ZFNpemUgPSBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDg7Ci0KLSAgV2ViVXNiU2VydmljZV9H
ZXREZXZpY2VzX1Jlc3BvbnNlUGFyYW1zLmRlY29kZSA9IGZ1bmN0aW9uKGRlY29kZXIpIHsKLSAg
ICB2YXIgcGFja2VkOwotICAgIHZhciB2YWwgPSBuZXcgV2ViVXNiU2VydmljZV9HZXREZXZpY2Vz
X1Jlc3BvbnNlUGFyYW1zKCk7Ci0gICAgdmFyIG51bWJlck9mQnl0ZXMgPSBkZWNvZGVyLnJlYWRV
aW50MzIoKTsKLSAgICB2YXIgdmVyc2lvbiA9IGRlY29kZXIucmVhZFVpbnQzMigpOwotICAgIHZh
bC5yZXN1bHRzID0gZGVjb2Rlci5kZWNvZGVBcnJheVBvaW50ZXIobmV3IGNvZGVjLlBvaW50ZXJU
byhkZXZpY2UkLlVzYkRldmljZUluZm8pKTsKLSAgICByZXR1cm4gdmFsOwotICB9OwotCi0gIFdl
YlVzYlNlcnZpY2VfR2V0RGV2aWNlc19SZXNwb25zZVBhcmFtcy5lbmNvZGUgPSBmdW5jdGlvbihl
bmNvZGVyLCB2YWwpIHsKLSAgICB2YXIgcGFja2VkOwotICAgIGVuY29kZXIud3JpdGVVaW50MzIo
V2ViVXNiU2VydmljZV9HZXREZXZpY2VzX1Jlc3BvbnNlUGFyYW1zLmVuY29kZWRTaXplKTsKLSAg
ICBlbmNvZGVyLndyaXRlVWludDMyKDApOwotICAgIGVuY29kZXIuZW5jb2RlQXJyYXlQb2ludGVy
KG5ldyBjb2RlYy5Qb2ludGVyVG8oZGV2aWNlJC5Vc2JEZXZpY2VJbmZvKSwgdmFsLnJlc3VsdHMp
OwotICB9OwotICBmdW5jdGlvbiBXZWJVc2JTZXJ2aWNlX0dldERldmljZV9QYXJhbXModmFsdWVz
KSB7Ci0gICAgdGhpcy5pbml0RGVmYXVsdHNfKCk7Ci0gICAgdGhpcy5pbml0RmllbGRzXyh2YWx1
ZXMpOwotICB9Ci0KLQotICBXZWJVc2JTZXJ2aWNlX0dldERldmljZV9QYXJhbXMucHJvdG90eXBl
LmluaXREZWZhdWx0c18gPSBmdW5jdGlvbigpIHsKLSAgICB0aGlzLmd1aWQgPSBudWxsOwotICAg
IHRoaXMuZGV2aWNlUmVxdWVzdGQgPSBuZXcgYmluZGluZ3MuSW50ZXJmYWNlUmVxdWVzdCgpOwot
ICB9OwotICBXZWJVc2JTZXJ2aWNlX0dldERldmljZV9QYXJhbXMucHJvdG90eXBlLmluaXRGaWVs
ZHNfID0gZnVuY3Rpb24oZmllbGRzKSB7Ci0gICAgZm9yKHZhciBmaWVsZCBpbiBmaWVsZHMpIHsK
LSAgICAgICAgaWYgKHRoaXMuaGFzT3duUHJvcGVydHkoZmllbGQpKQotICAgICAgICAgIHRoaXNb
ZmllbGRdID0gZmllbGRzW2ZpZWxkXTsKLSAgICB9Ci0gIH07Ci0KLSAgV2ViVXNiU2VydmljZV9H
ZXREZXZpY2VfUGFyYW1zLnZhbGlkYXRlID0gZnVuY3Rpb24obWVzc2FnZVZhbGlkYXRvciwgb2Zm
c2V0KSB7Ci0gICAgdmFyIGVycjsKLSAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRl
U3RydWN0SGVhZGVyKG9mZnNldCwgY29kZWMua1N0cnVjdEhlYWRlclNpemUpOwotICAgIGlmIChl
cnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKLSAgICAgICAgcmV0dXJuIGVy
cjsKLQotICAgIHZhciBrVmVyc2lvblNpemVzID0gWwotICAgICAge3ZlcnNpb246IDAsIG51bUJ5
dGVzOiAyNH0KLSAgICBdOwotICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1
Y3RWZXJzaW9uKG9mZnNldCwga1ZlcnNpb25TaXplcyk7Ci0gICAgaWYgKGVyciAhPT0gdmFsaWRh
dG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQotICAgICAgICByZXR1cm4gZXJyOwotCi0KLSAgICAv
LyB2YWxpZGF0ZSBXZWJVc2JTZXJ2aWNlX0dldERldmljZV9QYXJhbXMuZ3VpZAotICAgIGVyciA9
IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJpbmdQb2ludGVyKG9mZnNldCArIGNvZGVjLmtT
dHJ1Y3RIZWFkZXJTaXplICsgMCwgZmFsc2UpCi0gICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZh
bGlkYXRpb25FcnJvci5OT05FKQotICAgICAgICByZXR1cm4gZXJyOwotCi0KLSAgICAvLyB2YWxp
ZGF0ZSBXZWJVc2JTZXJ2aWNlX0dldERldmljZV9QYXJhbXMuZGV2aWNlUmVxdWVzdGQKLSAgICBl
cnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlSW50ZXJmYWNlUmVxdWVzdChvZmZzZXQgKyBj
b2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDgsIGZhbHNlKQotICAgIGlmIChlcnIgIT09IHZhbGlk
YXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKLSAgICAgICAgcmV0dXJuIGVycjsKLQotICAgIHJl
dHVybiB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkU7Ci0gIH07Ci0KLSAgV2ViVXNiU2Vy
dmljZV9HZXREZXZpY2VfUGFyYW1zLmVuY29kZWRTaXplID0gY29kZWMua1N0cnVjdEhlYWRlclNp
emUgKyAxNjsKLQotICBXZWJVc2JTZXJ2aWNlX0dldERldmljZV9QYXJhbXMuZGVjb2RlID0gZnVu
Y3Rpb24oZGVjb2RlcikgewotICAgIHZhciBwYWNrZWQ7Ci0gICAgdmFyIHZhbCA9IG5ldyBXZWJV
c2JTZXJ2aWNlX0dldERldmljZV9QYXJhbXMoKTsKLSAgICB2YXIgbnVtYmVyT2ZCeXRlcyA9IGRl
Y29kZXIucmVhZFVpbnQzMigpOwotICAgIHZhciB2ZXJzaW9uID0gZGVjb2Rlci5yZWFkVWludDMy
KCk7Ci0gICAgdmFsLmd1aWQgPSBkZWNvZGVyLmRlY29kZVN0cnVjdChjb2RlYy5TdHJpbmcpOwot
ICAgIHZhbC5kZXZpY2VSZXF1ZXN0ZCA9IGRlY29kZXIuZGVjb2RlU3RydWN0KGNvZGVjLkludGVy
ZmFjZVJlcXVlc3QpOwotICAgIGRlY29kZXIuc2tpcCgxKTsKLSAgICBkZWNvZGVyLnNraXAoMSk7
Ci0gICAgZGVjb2Rlci5za2lwKDEpOwotICAgIGRlY29kZXIuc2tpcCgxKTsKLSAgICByZXR1cm4g
dmFsOwotICB9OwotCi0gIFdlYlVzYlNlcnZpY2VfR2V0RGV2aWNlX1BhcmFtcy5lbmNvZGUgPSBm
dW5jdGlvbihlbmNvZGVyLCB2YWwpIHsKLSAgICB2YXIgcGFja2VkOwotICAgIGVuY29kZXIud3Jp
dGVVaW50MzIoV2ViVXNiU2VydmljZV9HZXREZXZpY2VfUGFyYW1zLmVuY29kZWRTaXplKTsKLSAg
ICBlbmNvZGVyLndyaXRlVWludDMyKDApOwotICAgIGVuY29kZXIuZW5jb2RlU3RydWN0KGNvZGVj
LlN0cmluZywgdmFsLmd1aWQpOwotICAgIGVuY29kZXIuZW5jb2RlU3RydWN0KGNvZGVjLkludGVy
ZmFjZVJlcXVlc3QsIHZhbC5kZXZpY2VSZXF1ZXN0ZCk7Ci0gICAgZW5jb2Rlci5za2lwKDEpOwot
ICAgIGVuY29kZXIuc2tpcCgxKTsKLSAgICBlbmNvZGVyLnNraXAoMSk7Ci0gICAgZW5jb2Rlci5z
a2lwKDEpOwotICB9OwotICBmdW5jdGlvbiBXZWJVc2JTZXJ2aWNlX0dldFBlcm1pc3Npb25fUGFy
YW1zKHZhbHVlcykgewotICAgIHRoaXMuaW5pdERlZmF1bHRzXygpOwotICAgIHRoaXMuaW5pdEZp
ZWxkc18odmFsdWVzKTsKLSAgfQotCi0KLSAgV2ViVXNiU2VydmljZV9HZXRQZXJtaXNzaW9uX1Bh
cmFtcy5wcm90b3R5cGUuaW5pdERlZmF1bHRzXyA9IGZ1bmN0aW9uKCkgewotICAgIHRoaXMuZGV2
aWNlRmlsdGVycyA9IG51bGw7Ci0gIH07Ci0gIFdlYlVzYlNlcnZpY2VfR2V0UGVybWlzc2lvbl9Q
YXJhbXMucHJvdG90eXBlLmluaXRGaWVsZHNfID0gZnVuY3Rpb24oZmllbGRzKSB7Ci0gICAgZm9y
KHZhciBmaWVsZCBpbiBmaWVsZHMpIHsKLSAgICAgICAgaWYgKHRoaXMuaGFzT3duUHJvcGVydHko
ZmllbGQpKQotICAgICAgICAgIHRoaXNbZmllbGRdID0gZmllbGRzW2ZpZWxkXTsKLSAgICB9Ci0g
IH07Ci0KLSAgV2ViVXNiU2VydmljZV9HZXRQZXJtaXNzaW9uX1BhcmFtcy52YWxpZGF0ZSA9IGZ1
bmN0aW9uKG1lc3NhZ2VWYWxpZGF0b3IsIG9mZnNldCkgewotICAgIHZhciBlcnI7Ci0gICAgZXJy
ID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdEhlYWRlcihvZmZzZXQsIGNvZGVjLmtT
dHJ1Y3RIZWFkZXJTaXplKTsKLSAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVy
cm9yLk5PTkUpCi0gICAgICAgIHJldHVybiBlcnI7Ci0KLSAgICB2YXIga1ZlcnNpb25TaXplcyA9
IFsKLSAgICAgIHt2ZXJzaW9uOiAwLCBudW1CeXRlczogMTZ9Ci0gICAgXTsKLSAgICBlcnIgPSBt
ZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0VmVyc2lvbihvZmZzZXQsIGtWZXJzaW9uU2l6
ZXMpOwotICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKLSAg
ICAgICAgcmV0dXJuIGVycjsKLQotCi0gICAgLy8gdmFsaWRhdGUgV2ViVXNiU2VydmljZV9HZXRQ
ZXJtaXNzaW9uX1BhcmFtcy5kZXZpY2VGaWx0ZXJzCi0gICAgZXJyID0gbWVzc2FnZVZhbGlkYXRv
ci52YWxpZGF0ZUFycmF5UG9pbnRlcihvZmZzZXQgKyBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSAr
IDAsIDgsIG5ldyBjb2RlYy5Qb2ludGVyVG8oZGV2aWNlX2VudW1lcmF0aW9uX29wdGlvbnMkLlVz
YkRldmljZUZpbHRlciksIGZhbHNlLCBbMF0sIDApOwotICAgIGlmIChlcnIgIT09IHZhbGlkYXRv
ci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKLSAgICAgICAgcmV0dXJuIGVycjsKLQotICAgIHJldHVy
biB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkU7Ci0gIH07Ci0KLSAgV2ViVXNiU2Vydmlj
ZV9HZXRQZXJtaXNzaW9uX1BhcmFtcy5lbmNvZGVkU2l6ZSA9IGNvZGVjLmtTdHJ1Y3RIZWFkZXJT
aXplICsgODsKLQotICBXZWJVc2JTZXJ2aWNlX0dldFBlcm1pc3Npb25fUGFyYW1zLmRlY29kZSA9
IGZ1bmN0aW9uKGRlY29kZXIpIHsKLSAgICB2YXIgcGFja2VkOwotICAgIHZhciB2YWwgPSBuZXcg
V2ViVXNiU2VydmljZV9HZXRQZXJtaXNzaW9uX1BhcmFtcygpOwotICAgIHZhciBudW1iZXJPZkJ5
dGVzID0gZGVjb2Rlci5yZWFkVWludDMyKCk7Ci0gICAgdmFyIHZlcnNpb24gPSBkZWNvZGVyLnJl
YWRVaW50MzIoKTsKLSAgICB2YWwuZGV2aWNlRmlsdGVycyA9IGRlY29kZXIuZGVjb2RlQXJyYXlQ
b2ludGVyKG5ldyBjb2RlYy5Qb2ludGVyVG8oZGV2aWNlX2VudW1lcmF0aW9uX29wdGlvbnMkLlVz
YkRldmljZUZpbHRlcikpOwotICAgIHJldHVybiB2YWw7Ci0gIH07Ci0KLSAgV2ViVXNiU2Vydmlj
ZV9HZXRQZXJtaXNzaW9uX1BhcmFtcy5lbmNvZGUgPSBmdW5jdGlvbihlbmNvZGVyLCB2YWwpIHsK
LSAgICB2YXIgcGFja2VkOwotICAgIGVuY29kZXIud3JpdGVVaW50MzIoV2ViVXNiU2VydmljZV9H
ZXRQZXJtaXNzaW9uX1BhcmFtcy5lbmNvZGVkU2l6ZSk7Ci0gICAgZW5jb2Rlci53cml0ZVVpbnQz
MigwKTsKLSAgICBlbmNvZGVyLmVuY29kZUFycmF5UG9pbnRlcihuZXcgY29kZWMuUG9pbnRlclRv
KGRldmljZV9lbnVtZXJhdGlvbl9vcHRpb25zJC5Vc2JEZXZpY2VGaWx0ZXIpLCB2YWwuZGV2aWNl
RmlsdGVycyk7Ci0gIH07Ci0gIGZ1bmN0aW9uIFdlYlVzYlNlcnZpY2VfR2V0UGVybWlzc2lvbl9S
ZXNwb25zZVBhcmFtcyh2YWx1ZXMpIHsKLSAgICB0aGlzLmluaXREZWZhdWx0c18oKTsKLSAgICB0
aGlzLmluaXRGaWVsZHNfKHZhbHVlcyk7Ci0gIH0KLQotCi0gIFdlYlVzYlNlcnZpY2VfR2V0UGVy
bWlzc2lvbl9SZXNwb25zZVBhcmFtcy5wcm90b3R5cGUuaW5pdERlZmF1bHRzXyA9IGZ1bmN0aW9u
KCkgewotICAgIHRoaXMucmVzdWx0ID0gbnVsbDsKLSAgfTsKLSAgV2ViVXNiU2VydmljZV9HZXRQ
ZXJtaXNzaW9uX1Jlc3BvbnNlUGFyYW1zLnByb3RvdHlwZS5pbml0RmllbGRzXyA9IGZ1bmN0aW9u
KGZpZWxkcykgewotICAgIGZvcih2YXIgZmllbGQgaW4gZmllbGRzKSB7Ci0gICAgICAgIGlmICh0
aGlzLmhhc093blByb3BlcnR5KGZpZWxkKSkKLSAgICAgICAgICB0aGlzW2ZpZWxkXSA9IGZpZWxk
c1tmaWVsZF07Ci0gICAgfQotICB9OwotCi0gIFdlYlVzYlNlcnZpY2VfR2V0UGVybWlzc2lvbl9S
ZXNwb25zZVBhcmFtcy52YWxpZGF0ZSA9IGZ1bmN0aW9uKG1lc3NhZ2VWYWxpZGF0b3IsIG9mZnNl
dCkgewotICAgIHZhciBlcnI7Ci0gICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0
cnVjdEhlYWRlcihvZmZzZXQsIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplKTsKLSAgICBpZiAoZXJy
ICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCi0gICAgICAgIHJldHVybiBlcnI7
Ci0KLSAgICB2YXIga1ZlcnNpb25TaXplcyA9IFsKLSAgICAgIHt2ZXJzaW9uOiAwLCBudW1CeXRl
czogMTZ9Ci0gICAgXTsKLSAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0
VmVyc2lvbihvZmZzZXQsIGtWZXJzaW9uU2l6ZXMpOwotICAgIGlmIChlcnIgIT09IHZhbGlkYXRv
ci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKLSAgICAgICAgcmV0dXJuIGVycjsKLQotCi0gICAgLy8g
dmFsaWRhdGUgV2ViVXNiU2VydmljZV9HZXRQZXJtaXNzaW9uX1Jlc3BvbnNlUGFyYW1zLnJlc3Vs
dAotICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RQb2ludGVyKG9mZnNl
dCArIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgMCwgZGV2aWNlJC5Vc2JEZXZpY2VJbmZvLCB0
cnVlKTsKLSAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCi0g
ICAgICAgIHJldHVybiBlcnI7Ci0KLSAgICByZXR1cm4gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJv
ci5OT05FOwotICB9OwotCi0gIFdlYlVzYlNlcnZpY2VfR2V0UGVybWlzc2lvbl9SZXNwb25zZVBh
cmFtcy5lbmNvZGVkU2l6ZSA9IGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgODsKLQotICBXZWJV
c2JTZXJ2aWNlX0dldFBlcm1pc3Npb25fUmVzcG9uc2VQYXJhbXMuZGVjb2RlID0gZnVuY3Rpb24o
ZGVjb2RlcikgewotICAgIHZhciBwYWNrZWQ7Ci0gICAgdmFyIHZhbCA9IG5ldyBXZWJVc2JTZXJ2
aWNlX0dldFBlcm1pc3Npb25fUmVzcG9uc2VQYXJhbXMoKTsKLSAgICB2YXIgbnVtYmVyT2ZCeXRl
cyA9IGRlY29kZXIucmVhZFVpbnQzMigpOwotICAgIHZhciB2ZXJzaW9uID0gZGVjb2Rlci5yZWFk
VWludDMyKCk7Ci0gICAgdmFsLnJlc3VsdCA9IGRlY29kZXIuZGVjb2RlU3RydWN0UG9pbnRlcihk
ZXZpY2UkLlVzYkRldmljZUluZm8pOwotICAgIHJldHVybiB2YWw7Ci0gIH07Ci0KLSAgV2ViVXNi
U2VydmljZV9HZXRQZXJtaXNzaW9uX1Jlc3BvbnNlUGFyYW1zLmVuY29kZSA9IGZ1bmN0aW9uKGVu
Y29kZXIsIHZhbCkgewotICAgIHZhciBwYWNrZWQ7Ci0gICAgZW5jb2Rlci53cml0ZVVpbnQzMihX
ZWJVc2JTZXJ2aWNlX0dldFBlcm1pc3Npb25fUmVzcG9uc2VQYXJhbXMuZW5jb2RlZFNpemUpOwot
ICAgIGVuY29kZXIud3JpdGVVaW50MzIoMCk7Ci0gICAgZW5jb2Rlci5lbmNvZGVTdHJ1Y3RQb2lu
dGVyKGRldmljZSQuVXNiRGV2aWNlSW5mbywgdmFsLnJlc3VsdCk7Ci0gIH07Ci0gIGZ1bmN0aW9u
IFdlYlVzYlNlcnZpY2VfU2V0Q2xpZW50X1BhcmFtcyh2YWx1ZXMpIHsKLSAgICB0aGlzLmluaXRE
ZWZhdWx0c18oKTsKLSAgICB0aGlzLmluaXRGaWVsZHNfKHZhbHVlcyk7Ci0gIH0KLQotCi0gIFdl
YlVzYlNlcnZpY2VfU2V0Q2xpZW50X1BhcmFtcy5wcm90b3R5cGUuaW5pdERlZmF1bHRzXyA9IGZ1
bmN0aW9uKCkgewotICAgIHRoaXMuY2xpZW50ID0gbmV3IGFzc29jaWF0ZWRCaW5kaW5ncy5Bc3Nv
Y2lhdGVkSW50ZXJmYWNlUHRySW5mbygpOwotICB9OwotICBXZWJVc2JTZXJ2aWNlX1NldENsaWVu
dF9QYXJhbXMucHJvdG90eXBlLmluaXRGaWVsZHNfID0gZnVuY3Rpb24oZmllbGRzKSB7Ci0gICAg
Zm9yKHZhciBmaWVsZCBpbiBmaWVsZHMpIHsKLSAgICAgICAgaWYgKHRoaXMuaGFzT3duUHJvcGVy
dHkoZmllbGQpKQotICAgICAgICAgIHRoaXNbZmllbGRdID0gZmllbGRzW2ZpZWxkXTsKLSAgICB9
Ci0gIH07Ci0KLSAgV2ViVXNiU2VydmljZV9TZXRDbGllbnRfUGFyYW1zLnZhbGlkYXRlID0gZnVu
Y3Rpb24obWVzc2FnZVZhbGlkYXRvciwgb2Zmc2V0KSB7Ci0gICAgdmFyIGVycjsKLSAgICBlcnIg
PSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0SGVhZGVyKG9mZnNldCwgY29kZWMua1N0
cnVjdEhlYWRlclNpemUpOwotICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJy
b3IuTk9ORSkKLSAgICAgICAgcmV0dXJuIGVycjsKLQotICAgIHZhciBrVmVyc2lvblNpemVzID0g
WwotICAgICAge3ZlcnNpb246IDAsIG51bUJ5dGVzOiAxNn0KLSAgICBdOwotICAgIGVyciA9IG1l
c3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RWZXJzaW9uKG9mZnNldCwga1ZlcnNpb25TaXpl
cyk7Ci0gICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQotICAg
ICAgICByZXR1cm4gZXJyOwotCi0KLSAgICAvLyB2YWxpZGF0ZSBXZWJVc2JTZXJ2aWNlX1NldENs
aWVudF9QYXJhbXMuY2xpZW50Ci0gICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZUFz
c29jaWF0ZWRJbnRlcmZhY2Uob2Zmc2V0ICsgY29kZWMua1N0cnVjdEhlYWRlclNpemUgKyAwLCBm
YWxzZSk7Ci0gICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQot
ICAgICAgICByZXR1cm4gZXJyOwotCi0gICAgcmV0dXJuIHZhbGlkYXRvci52YWxpZGF0aW9uRXJy
b3IuTk9ORTsKLSAgfTsKLQotICBXZWJVc2JTZXJ2aWNlX1NldENsaWVudF9QYXJhbXMuZW5jb2Rl
ZFNpemUgPSBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDg7Ci0KLSAgV2ViVXNiU2VydmljZV9T
ZXRDbGllbnRfUGFyYW1zLmRlY29kZSA9IGZ1bmN0aW9uKGRlY29kZXIpIHsKLSAgICB2YXIgcGFj
a2VkOwotICAgIHZhciB2YWwgPSBuZXcgV2ViVXNiU2VydmljZV9TZXRDbGllbnRfUGFyYW1zKCk7
Ci0gICAgdmFyIG51bWJlck9mQnl0ZXMgPSBkZWNvZGVyLnJlYWRVaW50MzIoKTsKLSAgICB2YXIg
dmVyc2lvbiA9IGRlY29kZXIucmVhZFVpbnQzMigpOwotICAgIHZhbC5jbGllbnQgPSBkZWNvZGVy
LmRlY29kZVN0cnVjdChjb2RlYy5Bc3NvY2lhdGVkSW50ZXJmYWNlUHRySW5mbyk7Ci0gICAgcmV0
dXJuIHZhbDsKLSAgfTsKLQotICBXZWJVc2JTZXJ2aWNlX1NldENsaWVudF9QYXJhbXMuZW5jb2Rl
ID0gZnVuY3Rpb24oZW5jb2RlciwgdmFsKSB7Ci0gICAgdmFyIHBhY2tlZDsKLSAgICBlbmNvZGVy
LndyaXRlVWludDMyKFdlYlVzYlNlcnZpY2VfU2V0Q2xpZW50X1BhcmFtcy5lbmNvZGVkU2l6ZSk7
Ci0gICAgZW5jb2Rlci53cml0ZVVpbnQzMigwKTsKLSAgICBlbmNvZGVyLmVuY29kZVN0cnVjdChj
b2RlYy5Bc3NvY2lhdGVkSW50ZXJmYWNlUHRySW5mbywgdmFsLmNsaWVudCk7Ci0gIH07Ci0gIHZh
ciBrV2ViVXNiU2VydmljZV9HZXREZXZpY2VzX05hbWUgPSAwOwotICB2YXIga1dlYlVzYlNlcnZp
Y2VfR2V0RGV2aWNlX05hbWUgPSAxOwotICB2YXIga1dlYlVzYlNlcnZpY2VfR2V0UGVybWlzc2lv
bl9OYW1lID0gMjsKLSAgdmFyIGtXZWJVc2JTZXJ2aWNlX1NldENsaWVudF9OYW1lID0gMzsKLQot
ICBmdW5jdGlvbiBXZWJVc2JTZXJ2aWNlUHRyKGhhbmRsZU9yUHRySW5mbykgewotICAgIHRoaXMu
cHRyID0gbmV3IGJpbmRpbmdzLkludGVyZmFjZVB0ckNvbnRyb2xsZXIoV2ViVXNiU2VydmljZSwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRs
ZU9yUHRySW5mbyk7Ci0gIH0KLQotICBmdW5jdGlvbiBXZWJVc2JTZXJ2aWNlQXNzb2NpYXRlZFB0
cihhc3NvY2lhdGVkSW50ZXJmYWNlUHRySW5mbykgewotICAgIHRoaXMucHRyID0gbmV3IGFzc29j
aWF0ZWRCaW5kaW5ncy5Bc3NvY2lhdGVkSW50ZXJmYWNlUHRyQ29udHJvbGxlcigKLSAgICAgICAg
V2ViVXNiU2VydmljZSwgYXNzb2NpYXRlZEludGVyZmFjZVB0ckluZm8pOwotICB9Ci0KLSAgV2Vi
VXNiU2VydmljZUFzc29jaWF0ZWRQdHIucHJvdG90eXBlID0KLSAgICAgIE9iamVjdC5jcmVhdGUo
V2ViVXNiU2VydmljZVB0ci5wcm90b3R5cGUpOwotICBXZWJVc2JTZXJ2aWNlQXNzb2NpYXRlZFB0
ci5wcm90b3R5cGUuY29uc3RydWN0b3IgPQotICAgICAgV2ViVXNiU2VydmljZUFzc29jaWF0ZWRQ
dHI7Ci0KLSAgZnVuY3Rpb24gV2ViVXNiU2VydmljZVByb3h5KHJlY2VpdmVyKSB7Ci0gICAgdGhp
cy5yZWNlaXZlcl8gPSByZWNlaXZlcjsKLSAgfQotICBXZWJVc2JTZXJ2aWNlUHRyLnByb3RvdHlw
ZS5nZXREZXZpY2VzID0gZnVuY3Rpb24oKSB7Ci0gICAgcmV0dXJuIFdlYlVzYlNlcnZpY2VQcm94
eS5wcm90b3R5cGUuZ2V0RGV2aWNlcwotICAgICAgICAuYXBwbHkodGhpcy5wdHIuZ2V0UHJveHko
KSwgYXJndW1lbnRzKTsKLSAgfTsKLQotICBXZWJVc2JTZXJ2aWNlUHJveHkucHJvdG90eXBlLmdl
dERldmljZXMgPSBmdW5jdGlvbigpIHsKLSAgICB2YXIgcGFyYW1zXyA9IG5ldyBXZWJVc2JTZXJ2
aWNlX0dldERldmljZXNfUGFyYW1zKCk7Ci0gICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9u
KHJlc29sdmUsIHJlamVjdCkgewotICAgICAgdmFyIGJ1aWxkZXIgPSBuZXcgY29kZWMuTWVzc2Fn
ZVYxQnVpbGRlcigKLSAgICAgICAgICBrV2ViVXNiU2VydmljZV9HZXREZXZpY2VzX05hbWUsCi0g
ICAgICAgICAgY29kZWMuYWxpZ24oV2ViVXNiU2VydmljZV9HZXREZXZpY2VzX1BhcmFtcy5lbmNv
ZGVkU2l6ZSksCi0gICAgICAgICAgY29kZWMua01lc3NhZ2VFeHBlY3RzUmVzcG9uc2UsIDApOwot
ICAgICAgYnVpbGRlci5lbmNvZGVTdHJ1Y3QoV2ViVXNiU2VydmljZV9HZXREZXZpY2VzX1BhcmFt
cywgcGFyYW1zXyk7Ci0gICAgICB2YXIgbWVzc2FnZSA9IGJ1aWxkZXIuZmluaXNoKCk7Ci0gICAg
ICB0aGlzLnJlY2VpdmVyXy5hY2NlcHRBbmRFeHBlY3RSZXNwb25zZShtZXNzYWdlKS50aGVuKGZ1
bmN0aW9uKG1lc3NhZ2UpIHsKLSAgICAgICAgdmFyIHJlYWRlciA9IG5ldyBjb2RlYy5NZXNzYWdl
UmVhZGVyKG1lc3NhZ2UpOwotICAgICAgICB2YXIgcmVzcG9uc2VQYXJhbXMgPQotICAgICAgICAg
ICAgcmVhZGVyLmRlY29kZVN0cnVjdChXZWJVc2JTZXJ2aWNlX0dldERldmljZXNfUmVzcG9uc2VQ
YXJhbXMpOwotICAgICAgICByZXNvbHZlKHJlc3BvbnNlUGFyYW1zKTsKLSAgICAgIH0pLmNhdGNo
KGZ1bmN0aW9uKHJlc3VsdCkgewotICAgICAgICByZWplY3QoRXJyb3IoIkNvbm5lY3Rpb24gZXJy
b3I6ICIgKyByZXN1bHQpKTsKLSAgICAgIH0pOwotICAgIH0uYmluZCh0aGlzKSk7Ci0gIH07Ci0g
IFdlYlVzYlNlcnZpY2VQdHIucHJvdG90eXBlLmdldERldmljZSA9IGZ1bmN0aW9uKCkgewotICAg
IHJldHVybiBXZWJVc2JTZXJ2aWNlUHJveHkucHJvdG90eXBlLmdldERldmljZQotICAgICAgICAu
YXBwbHkodGhpcy5wdHIuZ2V0UHJveHkoKSwgYXJndW1lbnRzKTsKLSAgfTsKLQotICBXZWJVc2JT
ZXJ2aWNlUHJveHkucHJvdG90eXBlLmdldERldmljZSA9IGZ1bmN0aW9uKGd1aWQsIGRldmljZVJl
cXVlc3RkKSB7Ci0gICAgdmFyIHBhcmFtc18gPSBuZXcgV2ViVXNiU2VydmljZV9HZXREZXZpY2Vf
UGFyYW1zKCk7Ci0gICAgcGFyYW1zXy5ndWlkID0gZ3VpZDsKLSAgICBwYXJhbXNfLmRldmljZVJl
cXVlc3RkID0gZGV2aWNlUmVxdWVzdGQ7Ci0gICAgdmFyIGJ1aWxkZXIgPSBuZXcgY29kZWMuTWVz
c2FnZVYwQnVpbGRlcigKLSAgICAgICAga1dlYlVzYlNlcnZpY2VfR2V0RGV2aWNlX05hbWUsCi0g
ICAgICAgIGNvZGVjLmFsaWduKFdlYlVzYlNlcnZpY2VfR2V0RGV2aWNlX1BhcmFtcy5lbmNvZGVk
U2l6ZSkpOwotICAgIGJ1aWxkZXIuZW5jb2RlU3RydWN0KFdlYlVzYlNlcnZpY2VfR2V0RGV2aWNl
X1BhcmFtcywgcGFyYW1zXyk7Ci0gICAgdmFyIG1lc3NhZ2UgPSBidWlsZGVyLmZpbmlzaCgpOwot
ICAgIHRoaXMucmVjZWl2ZXJfLmFjY2VwdChtZXNzYWdlKTsKLSAgfTsKLSAgV2ViVXNiU2Vydmlj
ZVB0ci5wcm90b3R5cGUuZ2V0UGVybWlzc2lvbiA9IGZ1bmN0aW9uKCkgewotICAgIHJldHVybiBX
ZWJVc2JTZXJ2aWNlUHJveHkucHJvdG90eXBlLmdldFBlcm1pc3Npb24KLSAgICAgICAgLmFwcGx5
KHRoaXMucHRyLmdldFByb3h5KCksIGFyZ3VtZW50cyk7Ci0gIH07Ci0KLSAgV2ViVXNiU2Vydmlj
ZVByb3h5LnByb3RvdHlwZS5nZXRQZXJtaXNzaW9uID0gZnVuY3Rpb24oZGV2aWNlRmlsdGVycykg
ewotICAgIHZhciBwYXJhbXNfID0gbmV3IFdlYlVzYlNlcnZpY2VfR2V0UGVybWlzc2lvbl9QYXJh
bXMoKTsKLSAgICBwYXJhbXNfLmRldmljZUZpbHRlcnMgPSBkZXZpY2VGaWx0ZXJzOwotICAgIHJl
dHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3QpIHsKLSAgICAgIHZhciBi
dWlsZGVyID0gbmV3IGNvZGVjLk1lc3NhZ2VWMUJ1aWxkZXIoCi0gICAgICAgICAga1dlYlVzYlNl
cnZpY2VfR2V0UGVybWlzc2lvbl9OYW1lLAotICAgICAgICAgIGNvZGVjLmFsaWduKFdlYlVzYlNl
cnZpY2VfR2V0UGVybWlzc2lvbl9QYXJhbXMuZW5jb2RlZFNpemUpLAotICAgICAgICAgIGNvZGVj
LmtNZXNzYWdlRXhwZWN0c1Jlc3BvbnNlLCAwKTsKLSAgICAgIGJ1aWxkZXIuZW5jb2RlU3RydWN0
KFdlYlVzYlNlcnZpY2VfR2V0UGVybWlzc2lvbl9QYXJhbXMsIHBhcmFtc18pOwotICAgICAgdmFy
IG1lc3NhZ2UgPSBidWlsZGVyLmZpbmlzaCgpOwotICAgICAgdGhpcy5yZWNlaXZlcl8uYWNjZXB0
QW5kRXhwZWN0UmVzcG9uc2UobWVzc2FnZSkudGhlbihmdW5jdGlvbihtZXNzYWdlKSB7Ci0gICAg
ICAgIHZhciByZWFkZXIgPSBuZXcgY29kZWMuTWVzc2FnZVJlYWRlcihtZXNzYWdlKTsKLSAgICAg
ICAgdmFyIHJlc3BvbnNlUGFyYW1zID0KLSAgICAgICAgICAgIHJlYWRlci5kZWNvZGVTdHJ1Y3Qo
V2ViVXNiU2VydmljZV9HZXRQZXJtaXNzaW9uX1Jlc3BvbnNlUGFyYW1zKTsKLSAgICAgICAgcmVz
b2x2ZShyZXNwb25zZVBhcmFtcyk7Ci0gICAgICB9KS5jYXRjaChmdW5jdGlvbihyZXN1bHQpIHsK
LSAgICAgICAgcmVqZWN0KEVycm9yKCJDb25uZWN0aW9uIGVycm9yOiAiICsgcmVzdWx0KSk7Ci0g
ICAgICB9KTsKLSAgICB9LmJpbmQodGhpcykpOwotICB9OwotICBXZWJVc2JTZXJ2aWNlUHRyLnBy
b3RvdHlwZS5zZXRDbGllbnQgPSBmdW5jdGlvbigpIHsKLSAgICByZXR1cm4gV2ViVXNiU2Vydmlj
ZVByb3h5LnByb3RvdHlwZS5zZXRDbGllbnQKLSAgICAgICAgLmFwcGx5KHRoaXMucHRyLmdldFBy
b3h5KCksIGFyZ3VtZW50cyk7Ci0gIH07Ci0KLSAgV2ViVXNiU2VydmljZVByb3h5LnByb3RvdHlw
ZS5zZXRDbGllbnQgPSBmdW5jdGlvbihjbGllbnQpIHsKLSAgICB2YXIgcGFyYW1zXyA9IG5ldyBX
ZWJVc2JTZXJ2aWNlX1NldENsaWVudF9QYXJhbXMoKTsKLSAgICBwYXJhbXNfLmNsaWVudCA9IGNs
aWVudDsKLSAgICB2YXIgYnVpbGRlciA9IG5ldyBjb2RlYy5NZXNzYWdlVjJCdWlsZGVyKAotICAg
ICAgICBrV2ViVXNiU2VydmljZV9TZXRDbGllbnRfTmFtZSwKLSAgICAgICAgY29kZWMuYWxpZ24o
V2ViVXNiU2VydmljZV9TZXRDbGllbnRfUGFyYW1zLmVuY29kZWRTaXplKSk7Ci0gICAgYnVpbGRl
ci5zZXRQYXlsb2FkKFdlYlVzYlNlcnZpY2VfU2V0Q2xpZW50X1BhcmFtcywgcGFyYW1zXyk7Ci0g
ICAgdmFyIG1lc3NhZ2UgPSBidWlsZGVyLmZpbmlzaCgpOwotICAgIHRoaXMucmVjZWl2ZXJfLmFj
Y2VwdChtZXNzYWdlKTsKLSAgfTsKLQotICBmdW5jdGlvbiBXZWJVc2JTZXJ2aWNlU3R1YihkZWxl
Z2F0ZSkgewotICAgIHRoaXMuZGVsZWdhdGVfID0gZGVsZWdhdGU7Ci0gIH0KLSAgV2ViVXNiU2Vy
dmljZVN0dWIucHJvdG90eXBlLmdldERldmljZXMgPSBmdW5jdGlvbigpIHsKLSAgICByZXR1cm4g
dGhpcy5kZWxlZ2F0ZV8gJiYgdGhpcy5kZWxlZ2F0ZV8uZ2V0RGV2aWNlcyAmJiB0aGlzLmRlbGVn
YXRlXy5nZXREZXZpY2VzKCk7Ci0gIH0KLSAgV2ViVXNiU2VydmljZVN0dWIucHJvdG90eXBlLmdl
dERldmljZSA9IGZ1bmN0aW9uKGd1aWQsIGRldmljZVJlcXVlc3RkKSB7Ci0gICAgcmV0dXJuIHRo
aXMuZGVsZWdhdGVfICYmIHRoaXMuZGVsZWdhdGVfLmdldERldmljZSAmJiB0aGlzLmRlbGVnYXRl
Xy5nZXREZXZpY2UoZ3VpZCwgZGV2aWNlUmVxdWVzdGQpOwotICB9Ci0gIFdlYlVzYlNlcnZpY2VT
dHViLnByb3RvdHlwZS5nZXRQZXJtaXNzaW9uID0gZnVuY3Rpb24oZGV2aWNlRmlsdGVycykgewot
ICAgIHJldHVybiB0aGlzLmRlbGVnYXRlXyAmJiB0aGlzLmRlbGVnYXRlXy5nZXRQZXJtaXNzaW9u
ICYmIHRoaXMuZGVsZWdhdGVfLmdldFBlcm1pc3Npb24oZGV2aWNlRmlsdGVycyk7Ci0gIH0KLSAg
V2ViVXNiU2VydmljZVN0dWIucHJvdG90eXBlLnNldENsaWVudCA9IGZ1bmN0aW9uKGNsaWVudCkg
ewotICAgIHJldHVybiB0aGlzLmRlbGVnYXRlXyAmJiB0aGlzLmRlbGVnYXRlXy5zZXRDbGllbnQg
JiYgdGhpcy5kZWxlZ2F0ZV8uc2V0Q2xpZW50KGNsaWVudCk7Ci0gIH0KLQotICBXZWJVc2JTZXJ2
aWNlU3R1Yi5wcm90b3R5cGUuYWNjZXB0ID0gZnVuY3Rpb24obWVzc2FnZSkgewotICAgIHZhciBy
ZWFkZXIgPSBuZXcgY29kZWMuTWVzc2FnZVJlYWRlcihtZXNzYWdlKTsKLSAgICBzd2l0Y2ggKHJl
YWRlci5tZXNzYWdlTmFtZSkgewotICAgIGNhc2Uga1dlYlVzYlNlcnZpY2VfR2V0RGV2aWNlX05h
bWU6Ci0gICAgICB2YXIgcGFyYW1zID0gcmVhZGVyLmRlY29kZVN0cnVjdChXZWJVc2JTZXJ2aWNl
X0dldERldmljZV9QYXJhbXMpOwotICAgICAgdGhpcy5nZXREZXZpY2UocGFyYW1zLmd1aWQsIHBh
cmFtcy5kZXZpY2VSZXF1ZXN0ZCk7Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICBjYXNlIGtXZWJV
c2JTZXJ2aWNlX1NldENsaWVudF9OYW1lOgotICAgICAgdmFyIHBhcmFtcyA9IHJlYWRlci5kZWNv
ZGVTdHJ1Y3QoV2ViVXNiU2VydmljZV9TZXRDbGllbnRfUGFyYW1zKTsKLSAgICAgIHRoaXMuc2V0
Q2xpZW50KHBhcmFtcy5jbGllbnQpOwotICAgICAgcmV0dXJuIHRydWU7Ci0gICAgZGVmYXVsdDoK
LSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gIH07Ci0KLSAgV2ViVXNiU2VydmljZVN0dWIu
cHJvdG90eXBlLmFjY2VwdFdpdGhSZXNwb25kZXIgPQotICAgICAgZnVuY3Rpb24obWVzc2FnZSwg
cmVzcG9uZGVyKSB7Ci0gICAgdmFyIHJlYWRlciA9IG5ldyBjb2RlYy5NZXNzYWdlUmVhZGVyKG1l
c3NhZ2UpOwotICAgIHN3aXRjaCAocmVhZGVyLm1lc3NhZ2VOYW1lKSB7Ci0gICAgY2FzZSBrV2Vi
VXNiU2VydmljZV9HZXREZXZpY2VzX05hbWU6Ci0gICAgICB2YXIgcGFyYW1zID0gcmVhZGVyLmRl
Y29kZVN0cnVjdChXZWJVc2JTZXJ2aWNlX0dldERldmljZXNfUGFyYW1zKTsKLSAgICAgIHRoaXMu
Z2V0RGV2aWNlcygpLnRoZW4oZnVuY3Rpb24ocmVzcG9uc2UpIHsKLSAgICAgICAgdmFyIHJlc3Bv
bnNlUGFyYW1zID0KLSAgICAgICAgICAgIG5ldyBXZWJVc2JTZXJ2aWNlX0dldERldmljZXNfUmVz
cG9uc2VQYXJhbXMoKTsKLSAgICAgICAgcmVzcG9uc2VQYXJhbXMucmVzdWx0cyA9IHJlc3BvbnNl
LnJlc3VsdHM7Ci0gICAgICAgIHZhciBidWlsZGVyID0gbmV3IGNvZGVjLk1lc3NhZ2VWMUJ1aWxk
ZXIoCi0gICAgICAgICAgICBrV2ViVXNiU2VydmljZV9HZXREZXZpY2VzX05hbWUsCi0gICAgICAg
ICAgICBjb2RlYy5hbGlnbihXZWJVc2JTZXJ2aWNlX0dldERldmljZXNfUmVzcG9uc2VQYXJhbXMu
ZW5jb2RlZFNpemUpLAotICAgICAgICAgICAgY29kZWMua01lc3NhZ2VJc1Jlc3BvbnNlLCByZWFk
ZXIucmVxdWVzdElEKTsKLSAgICAgICAgYnVpbGRlci5lbmNvZGVTdHJ1Y3QoV2ViVXNiU2Vydmlj
ZV9HZXREZXZpY2VzX1Jlc3BvbnNlUGFyYW1zLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICByZXNwb25zZVBhcmFtcyk7Ci0gICAgICAgIHZhciBtZXNzYWdlID0gYnVpbGRlci5maW5pc2go
KTsKLSAgICAgICAgcmVzcG9uZGVyLmFjY2VwdChtZXNzYWdlKTsKLSAgICAgIH0pOwotICAgICAg
cmV0dXJuIHRydWU7Ci0gICAgY2FzZSBrV2ViVXNiU2VydmljZV9HZXRQZXJtaXNzaW9uX05hbWU6
Ci0gICAgICB2YXIgcGFyYW1zID0gcmVhZGVyLmRlY29kZVN0cnVjdChXZWJVc2JTZXJ2aWNlX0dl
dFBlcm1pc3Npb25fUGFyYW1zKTsKLSAgICAgIHRoaXMuZ2V0UGVybWlzc2lvbihwYXJhbXMuZGV2
aWNlRmlsdGVycykudGhlbihmdW5jdGlvbihyZXNwb25zZSkgewotICAgICAgICB2YXIgcmVzcG9u
c2VQYXJhbXMgPQotICAgICAgICAgICAgbmV3IFdlYlVzYlNlcnZpY2VfR2V0UGVybWlzc2lvbl9S
ZXNwb25zZVBhcmFtcygpOwotICAgICAgICByZXNwb25zZVBhcmFtcy5yZXN1bHQgPSByZXNwb25z
ZS5yZXN1bHQ7Ci0gICAgICAgIHZhciBidWlsZGVyID0gbmV3IGNvZGVjLk1lc3NhZ2VWMUJ1aWxk
ZXIoCi0gICAgICAgICAgICBrV2ViVXNiU2VydmljZV9HZXRQZXJtaXNzaW9uX05hbWUsCi0gICAg
ICAgICAgICBjb2RlYy5hbGlnbihXZWJVc2JTZXJ2aWNlX0dldFBlcm1pc3Npb25fUmVzcG9uc2VQ
YXJhbXMuZW5jb2RlZFNpemUpLAotICAgICAgICAgICAgY29kZWMua01lc3NhZ2VJc1Jlc3BvbnNl
LCByZWFkZXIucmVxdWVzdElEKTsKLSAgICAgICAgYnVpbGRlci5lbmNvZGVTdHJ1Y3QoV2ViVXNi
U2VydmljZV9HZXRQZXJtaXNzaW9uX1Jlc3BvbnNlUGFyYW1zLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICByZXNwb25zZVBhcmFtcyk7Ci0gICAgICAgIHZhciBtZXNzYWdlID0gYnVpbGRl
ci5maW5pc2goKTsKLSAgICAgICAgcmVzcG9uZGVyLmFjY2VwdChtZXNzYWdlKTsKLSAgICAgIH0p
OwotICAgICAgcmV0dXJuIHRydWU7Ci0gICAgZGVmYXVsdDoKLSAgICAgIHJldHVybiBmYWxzZTsK
LSAgICB9Ci0gIH07Ci0KLSAgZnVuY3Rpb24gdmFsaWRhdGVXZWJVc2JTZXJ2aWNlUmVxdWVzdCht
ZXNzYWdlVmFsaWRhdG9yKSB7Ci0gICAgdmFyIG1lc3NhZ2UgPSBtZXNzYWdlVmFsaWRhdG9yLm1l
c3NhZ2U7Ci0gICAgdmFyIHBhcmFtc0NsYXNzID0gbnVsbDsKLSAgICBzd2l0Y2ggKG1lc3NhZ2Uu
Z2V0TmFtZSgpKSB7Ci0gICAgICBjYXNlIGtXZWJVc2JTZXJ2aWNlX0dldERldmljZXNfTmFtZToK
LSAgICAgICAgaWYgKG1lc3NhZ2UuZXhwZWN0c1Jlc3BvbnNlKCkpCi0gICAgICAgICAgcGFyYW1z
Q2xhc3MgPSBXZWJVc2JTZXJ2aWNlX0dldERldmljZXNfUGFyYW1zOwotICAgICAgYnJlYWs7Ci0g
ICAgICBjYXNlIGtXZWJVc2JTZXJ2aWNlX0dldERldmljZV9OYW1lOgotICAgICAgICBpZiAoIW1l
c3NhZ2UuZXhwZWN0c1Jlc3BvbnNlKCkgJiYgIW1lc3NhZ2UuaXNSZXNwb25zZSgpKQotICAgICAg
ICAgIHBhcmFtc0NsYXNzID0gV2ViVXNiU2VydmljZV9HZXREZXZpY2VfUGFyYW1zOwotICAgICAg
YnJlYWs7Ci0gICAgICBjYXNlIGtXZWJVc2JTZXJ2aWNlX0dldFBlcm1pc3Npb25fTmFtZToKLSAg
ICAgICAgaWYgKG1lc3NhZ2UuZXhwZWN0c1Jlc3BvbnNlKCkpCi0gICAgICAgICAgcGFyYW1zQ2xh
c3MgPSBXZWJVc2JTZXJ2aWNlX0dldFBlcm1pc3Npb25fUGFyYW1zOwotICAgICAgYnJlYWs7Ci0g
ICAgICBjYXNlIGtXZWJVc2JTZXJ2aWNlX1NldENsaWVudF9OYW1lOgotICAgICAgICBpZiAoIW1l
c3NhZ2UuZXhwZWN0c1Jlc3BvbnNlKCkgJiYgIW1lc3NhZ2UuaXNSZXNwb25zZSgpKQotICAgICAg
ICAgIHBhcmFtc0NsYXNzID0gV2ViVXNiU2VydmljZV9TZXRDbGllbnRfUGFyYW1zOwotICAgICAg
YnJlYWs7Ci0gICAgfQotICAgIGlmIChwYXJhbXNDbGFzcyA9PT0gbnVsbCkKLSAgICAgIHJldHVy
biB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkU7Ci0gICAgcmV0dXJuIHBhcmFtc0NsYXNz
LnZhbGlkYXRlKG1lc3NhZ2VWYWxpZGF0b3IsIG1lc3NhZ2VWYWxpZGF0b3IubWVzc2FnZS5nZXRI
ZWFkZXJOdW1CeXRlcygpKTsKLSAgfQotCi0gIGZ1bmN0aW9uIHZhbGlkYXRlV2ViVXNiU2Vydmlj
ZVJlc3BvbnNlKG1lc3NhZ2VWYWxpZGF0b3IpIHsKLSAgIHZhciBtZXNzYWdlID0gbWVzc2FnZVZh
bGlkYXRvci5tZXNzYWdlOwotICAgdmFyIHBhcmFtc0NsYXNzID0gbnVsbDsKLSAgIHN3aXRjaCAo
bWVzc2FnZS5nZXROYW1lKCkpIHsKLSAgICAgIGNhc2Uga1dlYlVzYlNlcnZpY2VfR2V0RGV2aWNl
c19OYW1lOgotICAgICAgICBpZiAobWVzc2FnZS5pc1Jlc3BvbnNlKCkpCi0gICAgICAgICAgcGFy
YW1zQ2xhc3MgPSBXZWJVc2JTZXJ2aWNlX0dldERldmljZXNfUmVzcG9uc2VQYXJhbXM7Ci0gICAg
ICAgIGJyZWFrOwotICAgICAgY2FzZSBrV2ViVXNiU2VydmljZV9HZXRQZXJtaXNzaW9uX05hbWU6
Ci0gICAgICAgIGlmIChtZXNzYWdlLmlzUmVzcG9uc2UoKSkKLSAgICAgICAgICBwYXJhbXNDbGFz
cyA9IFdlYlVzYlNlcnZpY2VfR2V0UGVybWlzc2lvbl9SZXNwb25zZVBhcmFtczsKLSAgICAgICAg
YnJlYWs7Ci0gICAgfQotICAgIGlmIChwYXJhbXNDbGFzcyA9PT0gbnVsbCkKLSAgICAgIHJldHVy
biB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkU7Ci0gICAgcmV0dXJuIHBhcmFtc0NsYXNz
LnZhbGlkYXRlKG1lc3NhZ2VWYWxpZGF0b3IsIG1lc3NhZ2VWYWxpZGF0b3IubWVzc2FnZS5nZXRI
ZWFkZXJOdW1CeXRlcygpKTsKLSAgfQotCi0gIHZhciBXZWJVc2JTZXJ2aWNlID0gewotICAgIG5h
bWU6ICdibGluay5tb2pvbS5XZWJVc2JTZXJ2aWNlJywKLSAgICBrVmVyc2lvbjogMCwKLSAgICBw
dHJDbGFzczogV2ViVXNiU2VydmljZVB0ciwKLSAgICBwcm94eUNsYXNzOiBXZWJVc2JTZXJ2aWNl
UHJveHksCi0gICAgc3R1YkNsYXNzOiBXZWJVc2JTZXJ2aWNlU3R1YiwKLSAgICB2YWxpZGF0ZVJl
cXVlc3Q6IHZhbGlkYXRlV2ViVXNiU2VydmljZVJlcXVlc3QsCi0gICAgdmFsaWRhdGVSZXNwb25z
ZTogdmFsaWRhdGVXZWJVc2JTZXJ2aWNlUmVzcG9uc2UsCi0gIH07Ci0gIFdlYlVzYlNlcnZpY2VT
dHViLnByb3RvdHlwZS52YWxpZGF0b3IgPSB2YWxpZGF0ZVdlYlVzYlNlcnZpY2VSZXF1ZXN0Owot
ICBXZWJVc2JTZXJ2aWNlUHJveHkucHJvdG90eXBlLnZhbGlkYXRvciA9IHZhbGlkYXRlV2ViVXNi
U2VydmljZVJlc3BvbnNlOwotICBleHBvcnRzLldlYlVzYlNlcnZpY2UgPSBXZWJVc2JTZXJ2aWNl
OwotICBleHBvcnRzLldlYlVzYlNlcnZpY2VQdHIgPSBXZWJVc2JTZXJ2aWNlUHRyOwotICBleHBv
cnRzLldlYlVzYlNlcnZpY2VBc3NvY2lhdGVkUHRyID0gV2ViVXNiU2VydmljZUFzc29jaWF0ZWRQ
dHI7Ci19KSgpOwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL0xheW91
dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVt
L3dlYl91c2Jfc2VydmljZS5tb2pvbS5qcy5oZWFkZXJzIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQv
dzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vd2ViX3VzYl9zZXJ2aWNl
Lm1vam9tLmpzLmhlYWRlcnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY4MDVjMzIz
ZGY1YTk3NTIzMTY0OGI4MzBlMzNjZTE4M2MzY2JiZDMuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0
Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vd2ViX3VzYl9zZXJ2aWNlLm1vam9tLmpzLmhl
YWRlcnMKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi1Db250ZW50LVR5cGU6IHRleHQvamF2
YXNjcmlwdDsgY2hhcnNldD11dGYtOApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQv
dzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vd2VieHItdGVzdC5qcyBi
L0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2No
cm9taXVtL3dlYnhyLXRlc3QuanMKaW5kZXggM2VjYjE4ZTU1NTY3MTBjZDdmOWQ0YmM2YTkyYTQx
OTQ5ZGU3MjVjMS4uMDFkMmVjMjMzOTZhOWZiZTIxZDI1ZmJhOTBkYzhkY2QwZjliZDBkMyAxMDA2
NDQKLS0tIGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNv
dXJjZXMvY2hyb21pdW0vd2VieHItdGVzdC5qcworKysgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93
M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS93ZWJ4ci10ZXN0LmpzCkBA
IC0xMyw2ICsxMyw4IEBAIGNvbnN0IGRlZmF1bHRfc3RhZ2VfcGFyYW1ldGVycyA9IHsKICAgYm91
bmRzOiBudWxsCiB9OwogCitjb25zdCBkZWZhdWx0X2ZyYW1lYnVmZmVyX3NjYWxlID0gMC43Owor
CiBmdW5jdGlvbiBnZXRNYXRyaXhGcm9tVHJhbnNmb3JtKHRyYW5zZm9ybSkgewogICBjb25zdCB4
ID0gdHJhbnNmb3JtLm9yaWVudGF0aW9uWzBdOwogICBjb25zdCB5ID0gdHJhbnNmb3JtLm9yaWVu
dGF0aW9uWzFdOwpAQCAtNjMsNiArNjUsMjEgQEAgY2xhc3MgQ2hyb21lWFJUZXN0IHsKICAgfQog
CiAgIHNpbXVsYXRlVXNlckFjdGl2YXRpb24oY2FsbGJhY2spIHsKKyAgICBpZiAod2luZG93LnRv
cCAhPT0gd2luZG93KSB7CisgICAgICAvLyB0ZXN0X2RyaXZlci5jbGljayBvbmx5IHdvcmtzIGZv
ciB0aGUgdG9wbGV2ZWwgZnJhbWUuIFRoaXMgYWx0ZXJuYXRlCisgICAgICAvLyBDaHJvbWUtc3Bl
Y2lmaWMgbWV0aG9kIGlzIHN1ZmZpY2llbnQgZm9yIHN0YXJ0aW5nIGFuIFhSIHNlc3Npb24gaW4g
YW4KKyAgICAgIC8vIGlmcmFtZSwgYW5kIGlzIHVzZWQgaW4gcGxhdGZvcm0tc3BlY2lmaWMgdGVz
dHMuCisgICAgICAvLworICAgICAgLy8gVE9ETyhodHRwczovL2dpdGh1Yi5jb20vd2ViLXBsYXRm
b3JtLXRlc3RzL3dwdC9pc3N1ZXMvMjAyODIpOiB1c2UKKyAgICAgIC8vIGEgY3Jvc3MtcGxhdGZv
cm0gbWV0aG9kIGlmIGF2YWlsYWJsZS4KKyAgICAgIHhyX2RlYnVnKCdzaW11bGF0ZVVzZXJBY3Rp
dmF0aW9uJywgJ3VzZSBldmVudFNlbmRlcicpOworICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0
ZW5lcignY2xpY2snLCBjYWxsYmFjayk7CisgICAgICBldmVudFNlbmRlci5tb3VzZU1vdmVUbygw
LCAwKTsKKyAgICAgIGV2ZW50U2VuZGVyLm1vdXNlRG93bigpOworICAgICAgZXZlbnRTZW5kZXIu
bW91c2VVcCgpOworICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignY2xpY2snLCBj
YWxsYmFjayk7CisgICAgICByZXR1cm47CisgICAgfQogICAgIGNvbnN0IGJ1dHRvbiA9IGRvY3Vt
ZW50LmNyZWF0ZUVsZW1lbnQoJ2J1dHRvbicpOwogICAgIGJ1dHRvbi50ZXh0Q29udGVudCA9ICdj
bGljayB0byBjb250aW51ZSB0ZXN0JzsKICAgICBidXR0b24uc3R5bGUuZGlzcGxheSA9ICdibG9j
ayc7CkBAIC0yMDIsOCArMjE5LDEzIEBAIGNsYXNzIE1vY2tWUlNlcnZpY2UgewogICAvLyBPbmx5
IGhhbmRsZXMgYXN5bmNocm9ub3VzIGNhbGxzIHRvIG1ha2VYckNvbXBhdGlibGUuIFN5bmNocm9u
b3VzIGNhbGxzIGFyZQogICAvLyBub3Qgc3VwcG9ydGVkIGluIEphdmFzY3JpcHQuCiAgIG1ha2VY
ckNvbXBhdGlibGUoKSB7CisgICAgaWYgKHRoaXMucnVudGltZXNfLmxlbmd0aCA9PSAwKSB7Cisg
ICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHsKKyAgICAgICAgeHJDb21wYXRpYmxlUmVzdWx0
OiBkZXZpY2UubW9qb20uWHJDb21wYXRpYmxlUmVzdWx0LmtOb0RldmljZUF2YWlsYWJsZQorICAg
ICAgfSk7CisgICAgfQogICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoewotICAgICAgeHJfY29t
cGF0aWJsZV9yZXN1bHQ6IGRldmljZS5tb2pvbS5YckNvbXBhdGlibGVSZXN1bHQua0FscmVhZHlD
b21wYXRpYmxlCisgICAgICB4ckNvbXBhdGlibGVSZXN1bHQ6IGRldmljZS5tb2pvbS5YckNvbXBh
dGlibGVSZXN1bHQua0FscmVhZHlDb21wYXRpYmxlCiAgICAgfSk7CiAgIH0KIH0KQEAgLTI3OSw2
ICszMDEsMjMgQEAgY2xhc3MgRmFrZVhSQW5jaG9yQ29udHJvbGxlciB7CiAgIH0KIH0KIAorLy8g
SW50ZXJuYWwgb25seSBmb3Igbm93LCBuZWVkcyB0byBiZSBtb3ZlZCBpbnRvIFdlYlhSIFRlc3Qg
QVBJLgorY2xhc3MgRmFrZVhSSGl0VGVzdFNvdXJjZUNvbnRyb2xsZXIgeworICBjb25zdHJ1Y3Rv
cihpZCkgeworICAgIHRoaXMuaWRfID0gaWQ7CisgICAgdGhpcy5kZWxldGVkXyA9IGZhbHNlOwor
ICB9CisKKyAgZ2V0IGRlbGV0ZWQoKSB7CisgICAgcmV0dXJuIHRoaXMuZGVsZXRlZF87CisgIH0K
KworICAvLyBJbnRlcm5hbCBzZXR0ZXI6CisgIHNldCBkZWxldGVkKHZhbHVlKSB7CisgICAgdGhp
cy5kZWxldGVkXyA9IHZhbHVlOworICB9Cit9CisKIC8vIEltcGxlbWVudHMgWFJGcmFtZURhdGFQ
cm92aWRlciBhbmQgWFJQcmVzZW50YXRpb25Qcm92aWRlci4gTWFpbnRhaW5zIGEgbW9jawogLy8g
Zm9yIFhSUHJlc2VudGF0aW9uUHJvdmlkZXIuIEltcGxlbWVudHMgRmFrZVhSRGV2aWNlIHRlc3Qg
QVBJLgogY2xhc3MgTW9ja1J1bnRpbWUgewpAQCAtMzAyLDYgKzM0MSwxNyBAQCBjbGFzcyBNb2Nr
UnVudGltZSB7CiAgICAgImltbWVyc2l2ZS1hciI6IGRldmljZS5tb2pvbS5YUlNlc3Npb25Nb2Rl
LmtJbW1lcnNpdmVBciwKICAgfTsKIAorICBzdGF0aWMgZW52aXJvbm1lbnRCbGVuZE1vZGVUb01v
am9NYXAgPSB7CisgICAgIm9wYXF1ZSI6IGRldmljZS5tb2pvbS5YUkVudmlyb25tZW50QmxlbmRN
b2RlLmtPcGFxdWUsCisgICAgImFscGhhLWJsZW5kIjogZGV2aWNlLm1vam9tLlhSRW52aXJvbm1l
bnRCbGVuZE1vZGUua0FscGhhQmxlbmQsCisgICAgImFkZGl0aXZlIjogZGV2aWNlLm1vam9tLlhS
RW52aXJvbm1lbnRCbGVuZE1vZGUua0FkZGl0aXZlLAorICB9OworCisgIHN0YXRpYyBpbnRlcmFj
dGlvbk1vZGVUb01vam9NYXAgPSB7CisgICAgInNjcmVlbi1zcGFjZSI6IGRldmljZS5tb2pvbS5Y
UkludGVyYWN0aW9uTW9kZS5rU2NyZWVuU3BhY2UsCisgICAgIndvcmxkLXNwYWNlIjogZGV2aWNl
Lm1vam9tLlhSSW50ZXJhY3Rpb25Nb2RlLmtXb3JsZFNwYWNlLAorICB9OworCiAgIGNvbnN0cnVj
dG9yKGZha2VEZXZpY2VJbml0LCBzZXJ2aWNlKSB7CiAgICAgdGhpcy5zZXNzaW9uQ2xpZW50XyA9
IG5ldyBkZXZpY2UubW9qb20uWFJTZXNzaW9uQ2xpZW50UHRyKCk7CiAgICAgdGhpcy5wcmVzZW50
YXRpb25fcHJvdmlkZXJfID0gbmV3IE1vY2tYUlByZXNlbnRhdGlvblByb3ZpZGVyKCk7CkBAIC0z
MTEsNyArMzYxLDcgQEAgY2xhc3MgTW9ja1J1bnRpbWUgewogICAgIHRoaXMuYm91bmRzXyA9IG51
bGw7CiAgICAgdGhpcy5zZW5kX21vam9fc3BhY2VfcmVzZXRfID0gZmFsc2U7CiAgICAgdGhpcy5z
dGFnZVBhcmFtZXRlcnNfID0gbnVsbDsKLSAgICB0aGlzLnN0YWdlUGFyYW1ldGVyc1VwZGF0ZWRf
ID0gZmFsc2U7CisgICAgdGhpcy5zdGFnZVBhcmFtZXRlcnNJZF8gPSAxOwogCiAgICAgdGhpcy5z
ZXJ2aWNlXyA9IHNlcnZpY2U7CiAKQEAgLTM3OSw2ICs0MjksMTAgQEAgY2xhc3MgTW9ja1J1bnRp
bWUgewogICAgICAgdGhpcy53b3JsZF8gPSBmYWtlRGV2aWNlSW5pdC53b3JsZDsKICAgICB9CiAK
KyAgICB0aGlzLmRlZmF1bHRGcmFtZWJ1ZmZlclNjYWxlXyA9IGRlZmF1bHRfZnJhbWVidWZmZXJf
c2NhbGU7CisgICAgdGhpcy5lbnZpcm9tZW50QmxlbmRNb2RlXyA9IHRoaXMuX2NvbnZlcnRCbGVu
ZE1vZGVUb0VudW0oZmFrZURldmljZUluaXQuZW52aXJvbm1lbnRCbGVuZE1vZGUpOworICAgIHRo
aXMuaW50ZXJhY3Rpb25Nb2RlXyA9IHRoaXMuX2NvbnZlcnRJbnRlcmFjdGlvbk1vZGVUb0VudW0o
ZmFrZURldmljZUluaXQuaW50ZXJhY3Rpb25Nb2RlKTsKKwogICAgIC8vIFRoaXMgYXBwcm9wcmlh
dGVseSBoYW5kbGVzIGlmIHRoZSBjb29yZGluYXRlcyBhcmUgbnVsbAogICAgIHRoaXMuc2V0Qm91
bmRzR2VvbWV0cnkoZmFrZURldmljZUluaXQuYm91bmRzQ29vcmRpbmF0ZXMpOwogCkBAIC00MDAs
NiArNDU0LDI2IEBAIGNsYXNzIE1vY2tSdW50aW1lIHsKICAgICByZXR1cm4gc2Vzc2lvbk1vZGVz
Lm1hcChtb2RlID0+IHRoaXMuX2NvbnZlcnRNb2RlVG9FbnVtKG1vZGUpKTsKICAgfQogCisgIF9j
b252ZXJ0QmxlbmRNb2RlVG9FbnVtKGJsZW5kTW9kZSkgeworICAgIGlmIChibGVuZE1vZGUgaW4g
TW9ja1J1bnRpbWUuZW52aXJvbm1lbnRCbGVuZE1vZGVUb01vam9NYXApIHsKKyAgICAgIHJldHVy
biBNb2NrUnVudGltZS5lbnZpcm9ubWVudEJsZW5kTW9kZVRvTW9qb01hcFtibGVuZE1vZGVdOwor
ICAgIH0gZWxzZSB7CisgICAgICBpZiAodGhpcy5zdXBwb3J0ZWRNb2Rlc18uaW5jbHVkZXMoZGV2
aWNlLm1vam9tLlhSU2Vzc2lvbk1vZGUua0ltbWVyc2l2ZUFyKSkgeworICAgICAgICByZXR1cm4g
ZGV2aWNlLm1vam9tLlhSRW52aXJvbm1lbnRCbGVuZE1vZGUua0FkZGl0aXZlOworICAgICAgfSBl
bHNlIGlmICh0aGlzLnN1cHBvcnRlZE1vZGVzXy5pbmNsdWRlcyhkZXZpY2UubW9qb20uWFJTZXNz
aW9uTW9kZS5rSW1tZXJzaXZlVnIpKSB7CisgICAgICAgIHJldHVybiBkZXZpY2UubW9qb20uWFJF
bnZpcm9ubWVudEJsZW5kTW9kZS5rT3BhcXVlOworICAgICAgfQorICAgIH0KKyAgfQorCisgIF9j
b252ZXJ0SW50ZXJhY3Rpb25Nb2RlVG9FbnVtKGludGVyYWN0aW9uTW9kZSkgeworICAgIGlmIChp
bnRlcmFjdGlvbk1vZGUgaW4gTW9ja1J1bnRpbWUuaW50ZXJhY3Rpb25Nb2RlVG9Nb2pvTWFwKSB7
CisgICAgICByZXR1cm4gTW9ja1J1bnRpbWUuaW50ZXJhY3Rpb25Nb2RlVG9Nb2pvTWFwW2ludGVy
YWN0aW9uTW9kZV07CisgICAgfSBlbHNlIHsKKyAgICAgIHJldHVybiBkZXZpY2UubW9qb20uWFJJ
bnRlcmFjdGlvbk1vZGUua1dvcmxkU3BhY2U7CisgICAgfQorICB9CisKICAgLy8gVGVzdCBBUEkg
bWV0aG9kcy4KICAgZGlzY29ubmVjdCgpIHsKICAgICB0aGlzLnNlcnZpY2VfLnJlbW92ZVJ1bnRp
bWUodGhpcyk7CkBAIC01MTEsMTEgKzU4NSw3IEBAIGNsYXNzIE1vY2tSdW50aW1lIHsKIAogICBv
blN0YWdlUGFyYW1ldGVyc1VwZGF0ZWQoKSB7CiAgICAgLy8gSW5kaWNhdGUgZm9yIHRoZSBmcmFt
ZSBsb29wIHRoYXQgdGhlIHN0YWdlIHBhcmFtZXRlcnMgaGF2ZSBiZWVuIHVwZGF0ZWQuCi0gICAg
dGhpcy5zdGFnZVBhcmFtZXRlcnNVcGRhdGVkXyA9IHRydWU7Ci0gICAgdGhpcy5kaXNwbGF5SW5m
b18uc3RhZ2VQYXJhbWV0ZXJzID0gdGhpcy5zdGFnZVBhcmFtZXRlcnNfOwotICAgIGlmICh0aGlz
LnNlc3Npb25DbGllbnRfLnB0ci5pc0JvdW5kKCkpIHsKLSAgICAgIHRoaXMuc2Vzc2lvbkNsaWVu
dF8ub25DaGFuZ2VkKHRoaXMuZGlzcGxheUluZm9fKTsKLSAgICB9CisgICAgdGhpcy5zdGFnZVBh
cmFtZXRlcnNJZF8rKzsKICAgfQogCiAgIHNpbXVsYXRlUmVzZXRQb3NlKCkgewpAQCAtNTM1LDYg
KzYwNSwxMCBAQCBjbGFzcyBNb2NrUnVudGltZSB7CiAgICAgdGhpcy5hbmNob3JfY3JlYXRpb25f
Y2FsbGJhY2tfID0gY2FsbGJhY2s7CiAgIH0KIAorICBzZXRIaXRUZXN0U291cmNlQ3JlYXRpb25D
YWxsYmFjayhjYWxsYmFjaykgeworICAgIHRoaXMuaGl0X3Rlc3Rfc291cmNlX2NyZWF0aW9uX2Nh
bGxiYWNrXyA9IGNhbGxiYWNrOworICB9CisKICAgLy8gSGVscGVyIG1ldGhvZHMKICAgZ2V0Tm9u
SW1tZXJzaXZlRGlzcGxheUluZm8oKSB7CiAgICAgY29uc3QgZGlzcGxheUluZm8gPSB0aGlzLmdl
dEltbWVyc2l2ZURpc3BsYXlJbmZvKCk7CkBAIC01ODQsOCArNjU4LDcgQEAgY2xhc3MgTW9ja1J1
bnRpbWUgewogICAgICAgICB9KSwKICAgICAgICAgcmVuZGVyV2lkdGg6IDIwLAogICAgICAgICBy
ZW5kZXJIZWlnaHQ6IDIwCi0gICAgICB9LAotICAgICAgd2VieHJEZWZhdWx0RnJhbWVidWZmZXJT
Y2FsZTogMC43LAorICAgICAgfQogICAgIH07CiAgIH0KIApAQCAtNjc5LDggKzc1Miw2IEBAIGNs
YXNzIE1vY2tSdW50aW1lIHsKICAgICAgICAgY29uc3QgbW9qb19zcGFjZV9yZXNldCA9IHRoaXMu
c2VuZF9tb2pvX3NwYWNlX3Jlc2V0XzsKICAgICAgICAgdGhpcy5zZW5kX21vam9fc3BhY2VfcmVz
ZXRfID0gZmFsc2U7CiAKLSAgICAgICAgY29uc3Qgc3RhZ2VfcGFyYW1ldGVyc191cGRhdGVkID0g
dGhpcy5zdGFnZVBhcmFtZXRlcnNVcGRhdGVkXzsKLSAgICAgICAgdGhpcy5zdGFnZVBhcmFtZXRl
cnNVcGRhdGVkXyA9IGZhbHNlOwogICAgICAgICBpZiAodGhpcy5wb3NlXykgewogICAgICAgICAg
IHRoaXMucG9zZV8ucG9zZUluZGV4Kys7CiAgICAgICAgIH0KQEAgLTcwOSw3ICs3ODAsNyBAQCBj
bGFzcyBNb2NrUnVudGltZSB7CiAgICAgICAgICAgYnVmZmVySG9sZGVyOiBudWxsLAogICAgICAg
ICAgIGJ1ZmZlclNpemU6IHt9LAogICAgICAgICAgIHN0YWdlUGFyYW1ldGVyczogdGhpcy5zdGFn
ZVBhcmFtZXRlcnNfLAotICAgICAgICAgIHN0YWdlUGFyYW1ldGVyc1VwZGF0ZWQ6IHN0YWdlX3Bh
cmFtZXRlcnNfdXBkYXRlZCwKKyAgICAgICAgICBzdGFnZVBhcmFtZXRlcnNJZDogdGhpcy5zdGFn
ZVBhcmFtZXRlcnNJZF8sCiAgICAgICAgIH07CiAKICAgICAgICAgdGhpcy5uZXh0X2ZyYW1lX2lk
XysrOwpAQCAtNzcyLDE0ICs4NDMsMjkgQEAgY2xhc3MgTW9ja1J1bnRpbWUgewogICAgICAgfSk7
CiAgICAgfQogCi0gICAgLy8gU3RvcmUgdGhlIHN1YnNjcmlwdGlvbiBpbmZvcm1hdGlvbiBhcy1p
czoKKyAgICAvLyBSZXNlcnZlIHRoZSBpZCBmb3IgaGl0IHRlc3Qgc291cmNlOgogICAgIGNvbnN0
IGlkID0gdGhpcy5uZXh0X2hpdF90ZXN0X2lkXysrOwotICAgIHRoaXMuaGl0VGVzdFN1YnNjcmlw
dGlvbnNfLnNldChpZCwgeyBuYXRpdmVPcmlnaW5JbmZvcm1hdGlvbiwgZW50aXR5VHlwZXMsIHJh
eSB9KTsKKyAgICBjb25zdCBoaXRUZXN0UGFyYW1ldGVycyA9IHsgaXNUcmFuc2llbnQ6IGZhbHNl
LCBwcm9maWxlTmFtZTogbnVsbCB9OworICAgIGNvbnN0IGNvbnRyb2xsZXIgPSBuZXcgRmFrZVhS
SGl0VGVzdFNvdXJjZUNvbnRyb2xsZXIoaWQpOwogCi0gICAgcmV0dXJuIFByb21pc2UucmVzb2x2
ZSh7Ci0gICAgICByZXN1bHQgOiBkZXZpY2UubW9qb20uU3Vic2NyaWJlVG9IaXRUZXN0UmVzdWx0
LlNVQ0NFU1MsCi0gICAgICBzdWJzY3JpcHRpb25JZCA6IGlkCi0gICAgfSk7CisKKyAgICByZXR1
cm4gdGhpcy5fc2hvdWxkSGl0VGVzdFNvdXJjZUNyZWF0aW9uU3VjY2VlZChoaXRUZXN0UGFyYW1l
dGVycywgY29udHJvbGxlcikKKyAgICAgIC50aGVuKChzdWNjZWVkZWQpID0+IHsKKyAgICAgICAg
aWYoc3VjY2VlZGVkKSB7CisgICAgICAgICAgLy8gU3RvcmUgdGhlIHN1YnNjcmlwdGlvbiBpbmZv
cm1hdGlvbiBhcy1pcyAoaW5jbHVkaW5nIGNvbnRyb2xsZXIpOgorICAgICAgICAgIHRoaXMuaGl0
VGVzdFN1YnNjcmlwdGlvbnNfLnNldChpZCwgeyBuYXRpdmVPcmlnaW5JbmZvcm1hdGlvbiwgZW50
aXR5VHlwZXMsIHJheSwgY29udHJvbGxlciB9KTsKKworICAgICAgICAgIHJldHVybiBQcm9taXNl
LnJlc29sdmUoeworICAgICAgICAgICAgcmVzdWx0IDogZGV2aWNlLm1vam9tLlN1YnNjcmliZVRv
SGl0VGVzdFJlc3VsdC5TVUNDRVNTLAorICAgICAgICAgICAgc3Vic2NyaXB0aW9uSWQgOiBpZAor
ICAgICAgICAgIH0pOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgIHJldHVybiBQcm9taXNl
LnJlc29sdmUoeworICAgICAgICAgICAgcmVzdWx0IDogZGV2aWNlLm1vam9tLlN1YnNjcmliZVRv
SGl0VGVzdFJlc3VsdC5GQUlMVVJFX0dFTkVSSUMsCisgICAgICAgICAgICBzdWJzY3JpcHRpb25J
ZCA6IDAKKyAgICAgICAgICB9KTsKKyAgICAgICAgfQorICAgICAgfSk7CiAgIH0KIAogICBzdWJz
Y3JpYmVUb0hpdFRlc3RGb3JUcmFuc2llbnRJbnB1dChwcm9maWxlTmFtZSwgZW50aXR5VHlwZXMs
IHJheSl7CkBAIC03OTEsMTQgKzg3Nyw0NSBAQCBjbGFzcyBNb2NrUnVudGltZSB7CiAgICAgICB9
KTsKICAgICB9CiAKLSAgICAvLyBTdG9yZSB0aGUgc3Vic2NyaXB0aW9uIGluZm9ybWF0aW9uIGFz
LWlzOgogICAgIGNvbnN0IGlkID0gdGhpcy5uZXh0X2hpdF90ZXN0X2lkXysrOwotICAgIHRoaXMu
dHJhbnNpZW50SGl0VGVzdFN1YnNjcmlwdGlvbnNfLnNldChpZCwgeyBwcm9maWxlTmFtZSwgZW50
aXR5VHlwZXMsIHJheSB9KTsKKyAgICBjb25zdCBoaXRUZXN0UGFyYW1ldGVycyA9IHsgaXNUcmFu
c2llbnQ6IHRydWUsIHByb2ZpbGVOYW1lOiBwcm9maWxlTmFtZSB9OworICAgIGNvbnN0IGNvbnRy
b2xsZXIgPSBuZXcgRmFrZVhSSGl0VGVzdFNvdXJjZUNvbnRyb2xsZXIoaWQpOworCisgICAgLy8g
Q2hlY2sgaWYgd2UgaGF2ZSBoaXQgdGVzdCBzb3VyY2UgY3JlYXRpb24gY2FsbGJhY2suCisgICAg
Ly8gSWYgeWVzLCBhc2sgaXQgaWYgdGhlIGhpdCB0ZXN0IHNvdXJjZSBjcmVhdGlvbiBzaG91bGQg
c3VjY2VlZC4KKyAgICAvLyBJZiBubywgZm9yIGJhY2stY29tcGF0LCBhc3N1bWUgdGhlIGhpdCB0
ZXN0IHNvdXJjZSBjcmVhdGlvbiBzdWNjZWVkZWQuCisgICAgcmV0dXJuIHRoaXMuX3Nob3VsZEhp
dFRlc3RTb3VyY2VDcmVhdGlvblN1Y2NlZWQoaGl0VGVzdFBhcmFtZXRlcnMsIGNvbnRyb2xsZXIp
CisgICAgICAudGhlbigoc3VjY2VlZGVkKSA9PiB7CisgICAgICAgIGlmKHN1Y2NlZWRlZCkgewor
ICAgICAgICAgIC8vIFN0b3JlIHRoZSBzdWJzY3JpcHRpb24gaW5mb3JtYXRpb24gYXMtaXMgKGlu
Y2x1ZGluZyBjb250cm9sbGVyKToKKyAgICAgICAgICB0aGlzLnRyYW5zaWVudEhpdFRlc3RTdWJz
Y3JpcHRpb25zXy5zZXQoaWQsIHsgcHJvZmlsZU5hbWUsIGVudGl0eVR5cGVzLCByYXksIGNvbnRy
b2xsZXIgfSk7CisKKyAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHsKKyAgICAgICAg
ICAgIHJlc3VsdCA6IGRldmljZS5tb2pvbS5TdWJzY3JpYmVUb0hpdFRlc3RSZXN1bHQuU1VDQ0VT
UywKKyAgICAgICAgICAgIHN1YnNjcmlwdGlvbklkIDogaWQKKyAgICAgICAgICB9KTsKKyAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHsKKyAgICAgICAg
ICAgIHJlc3VsdCA6IGRldmljZS5tb2pvbS5TdWJzY3JpYmVUb0hpdFRlc3RSZXN1bHQuRkFJTFVS
RV9HRU5FUklDLAorICAgICAgICAgICAgc3Vic2NyaXB0aW9uSWQgOiAwCisgICAgICAgICAgfSk7
CisgICAgICAgIH0KKyAgICAgIH0pOworICB9CiAKLSAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZl
KHsKLSAgICAgIHJlc3VsdCA6IGRldmljZS5tb2pvbS5TdWJzY3JpYmVUb0hpdFRlc3RSZXN1bHQu
U1VDQ0VTUywKLSAgICAgIHN1YnNjcmlwdGlvbklkIDogaWQKLSAgICB9KTsKKyAgdW5zdWJzY3Jp
YmVGcm9tSGl0VGVzdChzdWJzY3JpcHRpb25JZCkgeworICAgIGxldCBjb250cm9sbGVyID0gbnVs
bDsKKyAgICBpZih0aGlzLnRyYW5zaWVudEhpdFRlc3RTdWJzY3JpcHRpb25zXy5oYXMoc3Vic2Ny
aXB0aW9uSWQpKXsKKyAgICAgIGNvbnRyb2xsZXIgPSB0aGlzLnRyYW5zaWVudEhpdFRlc3RTdWJz
Y3JpcHRpb25zXy5nZXQoc3Vic2NyaXB0aW9uSWQpLmNvbnRyb2xsZXI7CisgICAgICB0aGlzLnRy
YW5zaWVudEhpdFRlc3RTdWJzY3JpcHRpb25zXy5kZWxldGUoc3Vic2NyaXB0aW9uSWQpOworICAg
IH0gZWxzZSBpZih0aGlzLmhpdFRlc3RTdWJzY3JpcHRpb25zXy5oYXMoc3Vic2NyaXB0aW9uSWQp
KXsKKyAgICAgIGNvbnRyb2xsZXIgPSB0aGlzLmhpdFRlc3RTdWJzY3JpcHRpb25zXy5nZXQoc3Vi
c2NyaXB0aW9uSWQpLmNvbnRyb2xsZXI7CisgICAgICB0aGlzLmhpdFRlc3RTdWJzY3JpcHRpb25z
Xy5kZWxldGUoc3Vic2NyaXB0aW9uSWQpOworICAgIH0KKworICAgIGlmKGNvbnRyb2xsZXIpIHsK
KyAgICAgIGNvbnRyb2xsZXIuZGVsZXRlZCA9IHRydWU7CisgICAgfQogICB9CiAKICAgY3JlYXRl
QW5jaG9yKG5hdGl2ZU9yaWdpbkluZm9ybWF0aW9uLCBuYXRpdmVPcmlnaW5Gcm9tQW5jaG9yKSB7
CkBAIC05MjYsNiArMTA0MywxMiBAQCBjbGFzcyBNb2NrUnVudGltZSB7CiAgICAgICAgICAgICBj
bGllbnRSZWNlaXZlcjogY2xpZW50UmVjZWl2ZXIsCiAgICAgICAgICAgICBkaXNwbGF5SW5mbzog
dGhpcy5kaXNwbGF5SW5mb18sCiAgICAgICAgICAgICBlbmFibGVkRmVhdHVyZXM6IGVuYWJsZWRf
ZmVhdHVyZXMsCisgICAgICAgICAgICBkZXZpY2VDb25maWc6IHsKKyAgICAgICAgICAgICAgZGVm
YXVsdEZyYW1lYnVmZmVyU2NhbGU6IHRoaXMuZGVmYXVsdEZyYW1lYnVmZmVyU2NhbGVfLAorICAg
ICAgICAgICAgICBzdXBwb3J0c1ZpZXdwb3J0U2NhbGluZzogdHJ1ZQorICAgICAgICAgICAgfSwK
KyAgICAgICAgICAgIGVudmlyb21lbnRCbGVuZE1vZGU6IHRoaXMuZW52aXJvbWVudEJsZW5kTW9k
ZV8sCisgICAgICAgICAgICBpbnRlcmFjdGlvbk1vZGU6IHRoaXMuaW50ZXJhY3Rpb25Nb2RlXwog
ICAgICAgICAgIH0KICAgICAgICAgfSk7CiAgICAgICB9IGVsc2UgewpAQCAtOTk3LDYgKzExMjAs
MTcgQEAgY2xhc3MgTW9ja1J1bnRpbWUgewogCiAgIC8vIFByaXZhdGUgZnVuY3Rpb25zIC0gaGl0
IHRlc3QgaW1wbGVtZW50YXRpb246CiAKKyAgLy8gUmV0dXJucyBhIFByb21pc2U8Ym9vbD4gdGhh
dCBzaWduaWZpZXMgd2hldGhlciBoaXQgdGVzdCBzb3VyY2UgY3JlYXRpb24gc2hvdWxkIHN1Y2Nl
ZWQuCisgIC8vIElmIHdlIGhhdmUgYSBoaXQgdGVzdCBzb3VyY2UgY3JlYXRpb24gY2FsbGJhY2sg
aW5zdGFsbGVkLCBpbnZva2UgaXQgYW5kIHJldHVybiBpdHMgcmVzdWx0LgorICAvLyBJZiBpdCdz
IG5vdCBpbnN0YWxsZWQsIGZvciBiYWNrLWNvbXBhdCBqdXN0IHJldHVybiBhIHByb21pc2UgdGhh
dCByZXNvbHZlcyB0byB0cnVlLgorICBfc2hvdWxkSGl0VGVzdFNvdXJjZUNyZWF0aW9uU3VjY2Vl
ZChoaXRUZXN0UGFyYW1ldGVycywgY29udHJvbGxlcikgeworICAgIGlmKHRoaXMuaGl0X3Rlc3Rf
c291cmNlX2NyZWF0aW9uX2NhbGxiYWNrXykgeworICAgICAgcmV0dXJuIHRoaXMuaGl0X3Rlc3Rf
c291cmNlX2NyZWF0aW9uX2NhbGxiYWNrXyhoaXRUZXN0UGFyYW1ldGVycywgY29udHJvbGxlcik7
CisgICAgfSBlbHNlIHsKKyAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodHJ1ZSk7CisgICAg
fQorICB9CisKICAgLy8gTW9kaWZpZXMgcGFzc2VkIGluIGZyYW1lRGF0YSB0byBhZGQgaGl0IHRl
c3QgcmVzdWx0cy4KICAgX2NhbGN1bGF0ZUhpdFRlc3RSZXN1bHRzKGZyYW1lRGF0YSkgewogICAg
IGlmICghdGhpcy5zdXBwb3J0ZWRNb2Rlc18uaW5jbHVkZXMoZGV2aWNlLm1vam9tLlhSU2Vzc2lv
bk1vZGUua0ltbWVyc2l2ZUFyKSkgewpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQv
dzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvaWRsaGFybmVzcy5qcyBiL0xheW91dFRl
c3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2lkbGhhcm5lc3Mu
anMKaW5kZXggMjVjMTkzYjU1ZTViNzZmZmY2ZGMxODAyNjgzNTdhMTFhMjdhYmMwOC4uOTk0YTBk
ODJlZjQ0NGJmNDU2NmRjMjdhODE0ODdlNzBkOWUyODRlYSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVz
dHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvaWRsaGFybmVzcy5q
cworKysgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291
cmNlcy9pZGxoYXJuZXNzLmpzCkBAIC0yNTM0LDYgKzI1MzQsMTAgQEAgSWRsSW50ZXJmYWNlLnBy
b3RvdHlwZS5kb19tZW1iZXJfb3BlcmF0aW9uX2Fzc2VydHMgPSBmdW5jdGlvbihtZW1iZXJIb2xk
ZXJPYmplY3QKICAgICAgICAgbWVtYmVySG9sZGVyT2JqZWN0W21lbWJlci5uYW1lXS5sZW5ndGgs
CiAgICAgICAgIG1pbk92ZXJsb2FkTGVuZ3RoKGN0b3JzKSwKICAgICAgICAgInByb3BlcnR5IGhh
cyB3cm9uZyAubGVuZ3RoIik7CisgICAgYXNzZXJ0X2VxdWFscygKKyAgICAgICAgbWVtYmVySG9s
ZGVyT2JqZWN0W21lbWJlci5uYW1lXS5uYW1lLAorICAgICAgICBtZW1iZXIubmFtZSwKKyAgICAg
ICAgInByb3BlcnR5IGhhcyB3cm9uZyAubmFtZSIpOwogCiAgICAgLy8gTWFrZSBzb21lIHN1aXRh
YmxlIGFyZ3VtZW50cwogICAgIHZhciBhcmdzID0gbWVtYmVyLmFyZ3VtZW50cy5tYXAoZnVuY3Rp
b24oYXJnKSB7CkBAIC0zNDMzLDE2ICszNDM3LDYwIEBAIElkbE5hbWVzcGFjZS5wcm90b3R5cGUu
dGVzdF9tZW1iZXJfYXR0cmlidXRlID0gZnVuY3Rpb24gKG1lbWJlcikKICAgICB9LmJpbmQodGhp
cykpOwogfTsKIAotSWRsTmFtZXNwYWNlLnByb3RvdHlwZS50ZXN0ID0gZnVuY3Rpb24gKCkKK0lk
bE5hbWVzcGFjZS5wcm90b3R5cGUudGVzdF9zZWxmID0gZnVuY3Rpb24gKCkKIHsKICAgICAvKioK
ICAgICAgKiBUT0RPKGx1a2ViamVycmluZyk6IEFzc2VydDoKICAgICAgKiAtICJOb3RlIHRoYXQg
dW5saWtlIGludGVyZmFjZXMgb3IgZGljdGlvbmFyaWVzLCBuYW1lc3BhY2VzIGRvIG5vdCBjcmVh
dGUgdHlwZXMuIgotICAgICAqIC0gIk9mIHRoZSBleHRlbmRlZCBhdHRyaWJ1dGVzIGRlZmluZWQg
aW4gdGhpcyBzcGVjaWZpY2F0aW9uLCBvbmx5IHRoZQotICAgICAqICAgICBbRXhwb3NlZF0gYW5k
IFtTZWN1cmVDb250ZXh0XSBleHRlbmRlZCBhdHRyaWJ1dGVzIGFyZSBhcHBsaWNhYmxlIHRvIG5h
bWVzcGFjZXMuIgotICAgICAqIC0gIk5hbWVzcGFjZXMgbXVzdCBiZSBhbm5vdGF0ZWQgd2l0aCB0
aGUgW0V4cG9zZWRdIGV4dGVuZGVkIGF0dHJpYnV0ZS4iCiAgICAgICovCiAKKyAgICBzdWJzZXRU
ZXN0QnlLZXkodGhpcy5uYW1lLCB0ZXN0LCAoKSA9PiB7CisgICAgICAgIGFzc2VydF90cnVlKHRo
aXMuZXh0QXR0cnMuZXZlcnkobyA9PiBvLm5hbWUgPT09ICJFeHBvc2VkIiB8fCBvLm5hbWUgPT09
ICJTZWN1cmVDb250ZXh0IiksCisgICAgICAgICAgICAiT25seSB0aGUgW0V4cG9zZWRdIGFuZCBb
U2VjdXJlQ29udGV4dF0gZXh0ZW5kZWQgYXR0cmlidXRlcyBhcmUgYXBwbGljYWJsZSB0byBuYW1l
c3BhY2VzIik7CisgICAgICAgIGFzc2VydF90cnVlKHRoaXMuaGFzX2V4dGVuZGVkX2F0dHJpYnV0
ZSgiRXhwb3NlZCIpLAorICAgICAgICAgICAgIk5hbWVzcGFjZXMgbXVzdCBiZSBhbm5vdGF0ZWQg
d2l0aCB0aGUgW0V4cG9zZWRdIGV4dGVuZGVkIGF0dHJpYnV0ZSIpOworICAgIH0sIGAke3RoaXMu
bmFtZX0gbmFtZXNwYWNlOiBleHRlbmRlZCBhdHRyaWJ1dGVzYCk7CisKKyAgICBjb25zdCBuYW1l
c3BhY2VPYmplY3QgPSBzZWxmW3RoaXMubmFtZV07CisKKyAgICBzdWJzZXRUZXN0QnlLZXkodGhp
cy5uYW1lLCB0ZXN0LCAoKSA9PiB7CisgICAgICAgIGNvbnN0IGRlc2MgPSBPYmplY3QuZ2V0T3du
UHJvcGVydHlEZXNjcmlwdG9yKHNlbGYsIHRoaXMubmFtZSk7CisgICAgICAgIGFzc2VydF9lcXVh
bHMoZGVzYy52YWx1ZSwgbmFtZXNwYWNlT2JqZWN0LCBgd3JvbmcgdmFsdWUgZm9yICR7dGhpcy5u
YW1lfSBuYW1lc3BhY2Ugb2JqZWN0YCk7CisgICAgICAgIGFzc2VydF90cnVlKGRlc2Mud3JpdGFi
bGUsICJuYW1lc3BhY2Ugb2JqZWN0IHNob3VsZCBiZSB3cml0YWJsZSIpOworICAgICAgICBhc3Nl
cnRfZmFsc2UoZGVzYy5lbnVtZXJhYmxlLCAibmFtZXNwYWNlIG9iamVjdCBzaG91bGQgbm90IGJl
IGVudW1lcmFibGUiKTsKKyAgICAgICAgYXNzZXJ0X3RydWUoZGVzYy5jb25maWd1cmFibGUsICJu
YW1lc3BhY2Ugb2JqZWN0IHNob3VsZCBiZSBjb25maWd1cmFibGUiKTsKKyAgICAgICAgYXNzZXJ0
X2ZhbHNlKCJnZXQiIGluIGRlc2MsICJuYW1lc3BhY2Ugb2JqZWN0IHNob3VsZCBub3QgaGF2ZSBh
IGdldHRlciIpOworICAgICAgICBhc3NlcnRfZmFsc2UoInNldCIgaW4gZGVzYywgIm5hbWVzcGFj
ZSBvYmplY3Qgc2hvdWxkIG5vdCBoYXZlIGEgc2V0dGVyIik7CisgICAgfSwgYCR7dGhpcy5uYW1l
fSBuYW1lc3BhY2U6IHByb3BlcnR5IGRlc2NyaXB0b3JgKTsKKworICAgIHN1YnNldFRlc3RCeUtl
eSh0aGlzLm5hbWUsIHRlc3QsICgpID0+IHsKKyAgICAgICAgYXNzZXJ0X3RydWUoT2JqZWN0Lmlz
RXh0ZW5zaWJsZShuYW1lc3BhY2VPYmplY3QpKTsKKyAgICB9LCBgJHt0aGlzLm5hbWV9IG5hbWVz
cGFjZTogW1tFeHRlbnNpYmxlXV0gaXMgdHJ1ZWApOworCisgICAgc3Vic2V0VGVzdEJ5S2V5KHRo
aXMubmFtZSwgdGVzdCwgKCkgPT4geworICAgICAgICBhc3NlcnRfdHJ1ZShuYW1lc3BhY2VPYmpl
Y3QgaW5zdGFuY2VvZiBPYmplY3QpOworCisgICAgICAgIGlmICh0aGlzLm5hbWUgPT09ICJjb25z
b2xlIikgeworICAgICAgICAgICAgLy8gaHR0cHM6Ly9jb25zb2xlLnNwZWMud2hhdHdnLm9yZy8j
Y29uc29sZS1uYW1lc3BhY2UKKyAgICAgICAgICAgIGNvbnN0IG5hbWVzcGFjZVByb3RvdHlwZSA9
IE9iamVjdC5nZXRQcm90b3R5cGVPZihuYW1lc3BhY2VPYmplY3QpOworICAgICAgICAgICAgYXNz
ZXJ0X2VxdWFscyhSZWZsZWN0Lm93bktleXMobmFtZXNwYWNlUHJvdG90eXBlKS5sZW5ndGgsIDAp
OworICAgICAgICAgICAgYXNzZXJ0X2VxdWFscyhPYmplY3QuZ2V0UHJvdG90eXBlT2YobmFtZXNw
YWNlUHJvdG90eXBlKSwgT2JqZWN0LnByb3RvdHlwZSk7CisgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICBhc3NlcnRfZXF1YWxzKE9iamVjdC5nZXRQcm90b3R5cGVPZihuYW1lc3BhY2VPYmpl
Y3QpLCBPYmplY3QucHJvdG90eXBlKTsKKyAgICAgICAgfQorICAgIH0sIGAke3RoaXMubmFtZX0g
bmFtZXNwYWNlOiBbW1Byb3RvdHlwZV1dIGlzIE9iamVjdC5wcm90b3R5cGVgKTsKKworICAgIHN1
YnNldFRlc3RCeUtleSh0aGlzLm5hbWUsIHRlc3QsICgpID0+IHsKKyAgICAgICAgYXNzZXJ0X2Vx
dWFscyh0eXBlb2YgbmFtZXNwYWNlT2JqZWN0LCAib2JqZWN0Iik7CisgICAgfSwgYCR7dGhpcy5u
YW1lfSBuYW1lc3BhY2U6IHR5cGVvZiBpcyAib2JqZWN0ImApOworfTsKKworSWRsTmFtZXNwYWNl
LnByb3RvdHlwZS50ZXN0ID0gZnVuY3Rpb24gKCkKK3sKKyAgICBpZiAoIXRoaXMudW50ZXN0ZWQp
IHsKKyAgICAgICAgdGhpcy50ZXN0X3NlbGYoKTsKKyAgICB9CisKICAgICBmb3IgKGNvbnN0IHYg
b2YgT2JqZWN0LnZhbHVlcyh0aGlzLm1lbWJlcnMpKSB7CiAgICAgICAgIHN3aXRjaCAodi50eXBl
KSB7CiAKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0t
dGVzdHMvcmVzb3VyY2VzL3Rlc3Qtb25seS1hcGkuanMgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93
M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0LW9ubHktYXBpLmpzCmluZGV4IDUz
ODkxZDIxYmQ0ZWE1N2Y3ODhkMzUyNWE3YmI5MTQ1ZTE2OGYyYzcuLmVmNjZlMGU3MzNmOWM2ODAw
NDEyOWQyNGIzYzlhZDEyYjlhYTA3MDggMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2ltcG9ydGVk
L3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3Qtb25seS1hcGkuanMKKysrIGIv
TGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVz
dC1vbmx5LWFwaS5qcwpAQCAtMjMsNyArMjMsNyBAQCBmdW5jdGlvbiBsb2FkU2NyaXB0KHBhdGgp
IHsKICAgICBzY3JpcHQuYXN5bmMgPSBmYWxzZTsKICAgICBjb25zdCBwID0gbmV3IFByb21pc2Uo
KHJlc29sdmUsIHJlamVjdCkgPT4gewogICAgICAgc2NyaXB0Lm9ubG9hZCA9ICgpID0+IHsgcmVz
b2x2ZSgpOyB9OwotICAgICAgc2NyaXB0Lm9uZXJyb3IgPSBlID0+IHsgcmVqZWN0KGUpOyB9Owor
ICAgICAgc2NyaXB0Lm9uZXJyb3IgPSBlID0+IHsgcmVqZWN0KGBFcnJvciBsb2FkaW5nICR7cGF0
aH1gKTsgfTsKICAgICB9KQogICAgIGRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoc2NyaXB0KTsK
ICAgICByZXR1cm4gcDsKQEAgLTMxLDcgKzMxLDcgQEAgZnVuY3Rpb24gbG9hZFNjcmlwdChwYXRo
KSB7CiB9CiAKIC8qKgotICogQSBoZWxwZXIgZm9yIENocm9taXVtLWJhc2VkIGJyb3dzZXJzIHRv
IGxvYWQgTW9qbyBKUyBiaW5kaW5nZHMKKyAqIEEgaGVscGVyIGZvciBDaHJvbWl1bS1iYXNlZCBi
cm93c2VycyB0byBsb2FkIE1vam8gSlMgYmluZGluZ3MKICAqCiAgKiBUaGlzIGlzIGFuIGFzeW5j
IGZ1bmN0aW9uIHRoYXQgd29ya3MgaW4gYm90aCB3b3JrZXJzIGFuZCB3aW5kb3dzLiBJdCBmaXJz
dAogICogbG9hZHMgbW9qb19iaW5kaW5ncy5qcywgZGlzYWJsZXMgYXV0b21hdGljIGRlcGVuZGVu
Y3kgbG9hZGluZywgYW5kIGxvYWRzIGFsbApAQCAtMzksMTUgKzM5LDIyIEBAIGZ1bmN0aW9uIGxv
YWRTY3JpcHQocGF0aCkgewogICogc3VjY2Vzc2Z1bGx5LCBvciByZWplY3RzIGlmIGFueSBleGNl
cHRpb24gaXMgcmFpc2VkLiBJZiB0ZXN0aGFybmVzcy5qcyBpcwogICogdXNlZCwgYW4gdW5jYXVn
aHQgZXhjZXB0aW9uIHdpbGwgdGVybWluYXRlIHRoZSB0ZXN0IHdpdGggYSBoYXJuZXNzIGVycm9y
CiAgKiAodW5sZXNzIGBhbGxvd191bmNhdWdodF9leGNlcHRpb25gIGlzIHRydWUpLCB3aGljaCBp
cyB1c3VhbGx5IHRoZSBkZXNpcmVkCi0gKiBiZWhhdmlvdXIuIE9ubHkgY2FsbCB0aGlzIGZ1bmN0
aW9uIGlmIGlzQ2hyb21pdW1CYXNlZCA9PT0gdHJ1ZS4KKyAqIGJlaGF2aW91ci4KKyAqCisgKiBU
aGlzIGZ1bmN0aW9uIGFsc28gd29ya3Mgd2l0aCBCbGluayB3ZWIgdGVzdHMgbG9hZGVkIGZyb20g
ZmlsZTovLywgaW4gd2hpY2gKKyAqIGNhc2UgZmlsZTovLyB3aWxsIGJlIHByZXBlbmRlZCB0byBh
bGwgJy9nZW4vLi4uJyBVUkxzLgorICoKKyAqIE9ubHkgY2FsbCB0aGlzIGZ1bmN0aW9uIGlmIGlz
Q2hyb21pdW1CYXNlZCA9PT0gdHJ1ZS4KICAqCiAgKiBAcGFyYW0ge0FycmF5LjxzdHJpbmc+fSBy
ZXNvdXJjZXMgLSBBIGxpc3Qgb2Ygc2NyaXB0cyB0byBsb2FkOiBNb2pvIEpTCi0gKiAgIGJpbmRp
bmdzIHNob3VsZCBiZSBvZiB0aGUgZm9ybSAnL2dlbi8uLi8qLm1vam9tLmpzJywgdGhlIG9yZGVy
aW5nIG9mIHdoaWNoCi0gKiAgIGRvZXMgbm90IG1hdHRlci4gRG8gbm90IGluY2x1ZGUgbW9qb19i
aW5kaW5ncy5qcyBpbiB0aGlzIGxpc3QuIFlvdSBtYXkKLSAqICAgaW5jbHVkZSBvdGhlciBub24t
bW9qb20uanMgc2NyaXB0cyBmb3IgY29udmVuaWVuY2UuCisgKiAgIGJpbmRpbmdzIHNob3VsZCBi
ZSBvZiB0aGUgZm9ybSAnL2dlbi8uLi8qLm1vam9tLmpzJyBvcgorICogICAnL2dlbi8uLi8qLm1v
am9tLWxpdGUuanMnIChyZXF1aXJlcyBgbGl0ZWAgdG8gYmUgdHJ1ZSk7IHRoZSBvcmRlciBkb2Vz
IG5vdAorICogICBtYXR0ZXIuIERvIG5vdCBpbmNsdWRlICdtb2pvX2JpbmRpbmdzLmpzJyBvciAn
bW9qb19iaW5kaW5nc19saXRlLmpzJy4KKyAqIEBwYXJhbSB7Ym9vbGVhbj19IGxpdGUgLSBXaGV0
aGVyIHRoZSBsaXRlIGJpbmRpbmdzICgqLm1vam9tLWxpdGUuanMpIGFyZSB1c2VkCisgKiAgIChk
ZWZhdWx0IGlzIGZhbHNlKS4KICAqIEByZXR1cm5zIHtQcm9taXNlfQogICovCi1hc3luYyBmdW5j
dGlvbiBsb2FkTW9qb1Jlc291cmNlcyhyZXNvdXJjZXMpIHsKK2FzeW5jIGZ1bmN0aW9uIGxvYWRN
b2pvUmVzb3VyY2VzKHJlc291cmNlcywgbGl0ZSA9IGZhbHNlKSB7CiAgIGlmICghaXNDaHJvbWl1
bUJhc2VkKSB7CiAgICAgdGhyb3cgbmV3IEVycm9yKCdNb2pvSlMgbm90IGVuYWJsZWQ7IHN0YXJ0
IENocm9tZSB3aXRoIC0tZW5hYmxlLWJsaW5rLWZlYXR1cmVzPU1vam9KUyxNb2pvSlNUZXN0Jyk7
CiAgIH0KQEAgLTU1LDE0ICs2MiwzOSBAQCBhc3luYyBmdW5jdGlvbiBsb2FkTW9qb1Jlc291cmNl
cyhyZXNvdXJjZXMpIHsKICAgICByZXR1cm47CiAgIH0KIAotICAvLyBXZSB3YW50IHRvIGxvYWQg
bW9qb19iaW5kaW5ncy5qcyBzZXBhcmF0ZWx5IHRvIHNldCBtb2pvLmNvbmZpZy4KLSAgaWYgKHJl
c291cmNlcy5zb21lKHAgPT4gcC5lbmRzV2l0aCgnL21vam9fYmluZGluZ3MuanMnKSkpIHsKLSAg
ICB0aHJvdyBuZXcgRXJyb3IoJ0RvIG5vdCBsb2FkIG1vam9fYmluZGluZ3MuanMgZXhwbGljaXRs
eS4nKTsKKyAgbGV0IGdlblByZWZpeCA9ICcnOworICBpZiAoc2VsZi5sb2NhdGlvbi5wYXRobmFt
ZS5pbmNsdWRlcygnL3dlYl90ZXN0cy8nKSkgeworICAgIC8vIEJsaW5rIGludGVybmFsIHdlYiB0
ZXN0cworICAgIGdlblByZWZpeCA9ICdmaWxlOi8vJzsKKyAgfQorCisgIGZvciAoY29uc3QgcGF0
aCBvZiByZXNvdXJjZXMpIHsKKyAgICAvLyBXZSB3YW50IHRvIGxvYWQgbW9qb19iaW5kaW5ncy5q
cyBzZXBhcmF0ZWx5IHRvIHNldCBtb2pvLmNvbmZpZy4KKyAgICBpZiAocGF0aC5lbmRzV2l0aCgn
L21vam9fYmluZGluZ3MuanMnKSkgeworICAgICAgdGhyb3cgbmV3IEVycm9yKCdEbyBub3QgbG9h
ZCBtb2pvX2JpbmRpbmdzLmpzIGV4cGxpY2l0bHkuJyk7CisgICAgfQorICAgIGlmIChwYXRoLmVu
ZHNXaXRoKCcvbW9qb19iaW5kaW5nc19saXRlLmpzJykpIHsKKyAgICAgIHRocm93IG5ldyBFcnJv
cignRG8gbm90IGxvYWQgbW9qb19iaW5kaW5nc19saXRlLmpzIGV4cGxpY2l0bHkuJyk7CisgICAg
fQorICAgIGlmIChsaXRlKSB7CisgICAgICBpZiAoISAvXlwvZ2VuXC8uKlwubW9qb20tbGl0ZVwu
anMkLy50ZXN0KHBhdGgpKSB7CisgICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5yZWNvZ25pemVk
IHJlc291cmNlIHBhdGg6ICR7cGF0aH1gKTsKKyAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAg
aWYgKCEgL15cL2dlblwvLipcLm1vam9tXC5qcyQvLnRlc3QocGF0aCkpIHsKKyAgICAgICAgdGhy
b3cgbmV3IEVycm9yKGBVbnJlY29nbml6ZWQgcmVzb3VyY2UgcGF0aDogJHtwYXRofWApOworICAg
ICAgfQorICAgIH0KKyAgfQorCisgIGlmIChsaXRlKSB7CisgICAgYXdhaXQgbG9hZFNjcmlwdChn
ZW5QcmVmaXggKyAnL2dlbi9sYXlvdXRfdGVzdF9kYXRhL21vam8vcHVibGljL2pzL21vam9fYmlu
ZGluZ3NfbGl0ZS5qcycpOworICB9IGVsc2UgeworICAgIGF3YWl0IGxvYWRTY3JpcHQoZ2VuUHJl
Zml4ICsgJy9nZW4vbGF5b3V0X3Rlc3RfZGF0YS9tb2pvL3B1YmxpYy9qcy9tb2pvX2JpbmRpbmdz
LmpzJyk7CisgICAgbW9qby5jb25maWcuYXV0b0xvYWRNb2pvbURlcHMgPSBmYWxzZTsKICAgfQot
ICBhd2FpdCBsb2FkU2NyaXB0KCcvZ2VuL2xheW91dF90ZXN0X2RhdGEvbW9qby9wdWJsaWMvanMv
bW9qb19iaW5kaW5ncy5qcycpOwotICBtb2pvLmNvbmZpZy5hdXRvTG9hZE1vam9tRGVwcyA9IGZh
bHNlOwogCiAgIGZvciAoY29uc3QgcGF0aCBvZiByZXNvdXJjZXMpIHsKLSAgICBhd2FpdCBsb2Fk
U2NyaXB0KHBhdGgpOworICAgIGF3YWl0IGxvYWRTY3JpcHQoZ2VuUHJlZml4ICsgcGF0aCk7CiAg
IH0KIH0KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0t
dGVzdHMvcmVzb3VyY2VzL3Rlc3Qtb25seS1hcGkubS5qcyBiL0xheW91dFRlc3RzL2ltcG9ydGVk
L3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3Qtb25seS1hcGkubS5qcwpuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi45ODRmNjM1YWJhYzAwMjcyMzA0Yzc4ZjJmNWJiOTliMzk3YjI3NTIzCi0tLSAvZGV2
L251bGwKKysrIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9y
ZXNvdXJjZXMvdGVzdC1vbmx5LWFwaS5tLmpzCkBAIC0wLDAgKzEsNSBAQAorLyogV2hldGhlciB0
aGUgYnJvd3NlciBpcyBDaHJvbWl1bS1iYXNlZCB3aXRoIE1vam9KUyBlbmFibGVkICovCitleHBv
cnQgY29uc3QgaXNDaHJvbWl1bUJhc2VkID0gJ01vam9JbnRlcmZhY2VJbnRlcmNlcHRvcicgaW4g
c2VsZjsKKworLyogV2hldGhlciB0aGUgYnJvd3NlciBpcyBXZWJLaXQtYmFzZWQgd2l0aCBpbnRl
cm5hbCB0ZXN0LW9ubHkgQVBJIGVuYWJsZWQgKi8KK2V4cG9ydCBjb25zdCBpc1dlYktpdEJhc2Vk
ID0gIWlzQ2hyb21pdW1CYXNlZCAmJiAnaW50ZXJuYWxzJyBpbiBzZWxmOwpkaWZmIC0tZ2l0IGEv
TGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVz
dC1vbmx5LWFwaS5tLmpzLmhlYWRlcnMgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBs
YXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0LW9ubHktYXBpLm0uanMuaGVhZGVycwpuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi41ZThmNjQwYzY2NTlkMTc2ZWFjYTRjNzFjYzE3OThiNzI4NTU0MGI3Ci0tLSAvZGV2L251
bGwKKysrIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNv
dXJjZXMvdGVzdC1vbmx5LWFwaS5tLmpzLmhlYWRlcnMKQEAgLTAsMCArMSwyIEBACitDb250ZW50
LVR5cGU6IHRleHQvamF2YXNjcmlwdDsgY2hhcnNldD11dGYtOAorQ2FjaGUtQ29udHJvbDogbWF4
LWFnZT0zNjAwCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRm
b3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L2NvbmZ0ZXN0LnB5IGIvTGF5b3V0VGVzdHMvaW1wb3J0
ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC9jb25mdGVzdC5weQppbmRl
eCBhOWY0MjAzZjI3OWNiYWRiNzAyNDU2YjFkNzFkNmFhNjBlZDVkMGVmLi4xYmFmNjYyMmIwNTk5
YzQ0ZmI4NWQyNjcyODgwMzFhMDVlNDI0M2RjIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9pbXBv
cnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L2NvbmZ0ZXN0LnB5Cisr
KyBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2Vz
L3Rlc3QvY29uZnRlc3QucHkKQEAgLTI1LDYgKzI1LDcgQEAgaW1wb3J0IHdlYmRyaXZlcgogCiBk
ZWYgcHl0ZXN0X2FkZG9wdGlvbihwYXJzZXIpOgogICAgIHBhcnNlci5hZGRvcHRpb24oIi0tYmlu
YXJ5IiwgYWN0aW9uPSJzdG9yZSIsIGRlZmF1bHQ9Tm9uZSwgaGVscD0icGF0aCB0byBicm93c2Vy
IGJpbmFyeSIpCisgICAgcGFyc2VyLmFkZG9wdGlvbigiLS1oZWFkbGVzcyIsIGFjdGlvbj0ic3Rv
cmVfdHJ1ZSIsIGRlZmF1bHQ9RmFsc2UsIGhlbHA9InJ1biBicm93c2VyIGluIGhlYWRsZXNzIG1v
ZGUiKQogCiAKIGRlZiBweXRlc3RfY29sbGVjdF9maWxlKHBhdGgsIHBhcmVudCk6CkBAIC00NSw5
ICs0NiwxMSBAQCBkZWYgcHl0ZXN0X2NvbmZpZ3VyZShjb25maWcpOgogICAgIGNvbmZpZy5wcm9j
ID0gc3VicHJvY2Vzcy5Qb3BlbihbImdlY2tvZHJpdmVyIl0pCiAgICAgY29uZmlnLmFkZF9jbGVh
bnVwKGNvbmZpZy5wcm9jLmtpbGwpCiAKLSAgICBjYXBhYmlsaXRpZXMgPSB7ImFsd2F5c01hdGNo
IjogeyJhY2NlcHRJbnNlY3VyZUNlcnRzIjogVHJ1ZX19CisgICAgY2FwYWJpbGl0aWVzID0geyJh
bHdheXNNYXRjaCI6IHsiYWNjZXB0SW5zZWN1cmVDZXJ0cyI6IFRydWUsICJtb3o6ZmlyZWZveE9w
dGlvbnMiOiB7fX19CiAgICAgaWYgY29uZmlnLmdldG9wdGlvbigiLS1iaW5hcnkiKToKLSAgICAg
ICAgY2FwYWJpbGl0aWVzWyJhbHdheXNNYXRjaCJdWyJtb3o6ZmlyZWZveE9wdGlvbnMiXSA9IHsi
YmluYXJ5IjogY29uZmlnLmdldG9wdGlvbigiLS1iaW5hcnkiKX0KKyAgICAgICAgY2FwYWJpbGl0
aWVzWyJhbHdheXNNYXRjaCJdWyJtb3o6ZmlyZWZveE9wdGlvbnMiXVsiYmluYXJ5Il0gPSBjb25m
aWcuZ2V0b3B0aW9uKCItLWJpbmFyeSIpCisgICAgaWYgY29uZmlnLmdldG9wdGlvbigiLS1oZWFk
bGVzcyIpOgorICAgICAgICBjYXBhYmlsaXRpZXNbImFsd2F5c01hdGNoIl1bIm1vejpmaXJlZm94
T3B0aW9ucyJdWyJhcmdzIl0gPSBbIi0taGVhZGxlc3MiXQogCiAgICAgY29uZmlnLmRyaXZlciA9
IHdlYmRyaXZlci5TZXNzaW9uKCJsb2NhbGhvc3QiLCA0NDQ0LAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjYXBhYmlsaXRpZXM9Y2FwYWJpbGl0aWVzKQpkaWZmIC0tZ2l0
IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMv
dGVzdC90ZXN0cy9mdW5jdGlvbmFsL2lkbGhhcm5lc3MvSWRsTmFtZXNwYWNlL3Rlc3RfYXR0cmli
dXRlLmh0bWwgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jl
c291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvaWRsaGFybmVzcy9JZGxOYW1lc3BhY2UvdGVz
dF9hdHRyaWJ1dGUuaHRtbAppbmRleCA4YzFmNTE3MjE2NTQ0ZTc4MjI5MzkyY2M2ZjMzZWIwNmM3
Nzk2MGIzLi5jYTVlZGY0NzIzZDViNWMyMDU1YzJmMDI0ZDk1MWU5ODEyNGM4Y2Q5IDEwMDY0NAot
LS0gYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNl
cy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvaWRsaGFybmVzcy9JZGxOYW1lc3BhY2UvdGVzdF9hdHRy
aWJ1dGUuaHRtbAorKysgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRl
c3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvaWRsaGFybmVzcy9JZGxOYW1lc3Bh
Y2UvdGVzdF9hdHRyaWJ1dGUuaHRtbApAQCAtMTYsMTMgKzE2LDE5IEBACiA8c2NyaXB0PgogInVz
ZSBzdHJpY3QiOwogCi1zZWxmLmZvbyA9IHsKLSAgdHJ1dGg6IHRydWUKLX07CitPYmplY3QuZGVm
aW5lUHJvcGVydHkoc2VsZiwgImZvbyIsIHsKKyAgdmFsdWU6IHsKKyAgICB0cnV0aDogdHJ1ZSwK
KyAgfSwKKyAgd3JpdGFibGU6IHRydWUsCisgIGVudW1lcmFibGU6IGZhbHNlLAorICBjb25maWd1
cmFibGU6IHRydWUsCit9KTsKIAogdmFyIGlkbEFycmF5ID0gbmV3IElkbEFycmF5KCk7Ci1pZGxB
cnJheS5hZGRfaWRscygKLWBuYW1lc3BhY2UgZm9vIHsKK2lkbEFycmF5LmFkZF9pZGxzKGAKK1tF
eHBvc2VkPVdpbmRvd10KK25hbWVzcGFjZSBmb28gewogICByZWFkb25seSBhdHRyaWJ1dGUgYm9v
bCB0cnV0aDsKICAgcmVhZG9ubHkgYXR0cmlidXRlIGJvb2wgbGllczsKIH07YCk7CkBAIC0zNSw2
ICs0MSwzNiBAQCBpZGxBcnJheS50ZXN0KCk7CiAgICAgIm1lc3NhZ2UiOiBudWxsCiAgIH0sCiAg
ICJzdW1tYXJpemVkX3Rlc3RzIjogWworICAgIHsKKyAgICAgICJuYW1lIjogImZvbyBuYW1lc3Bh
Y2U6IGV4dGVuZGVkIGF0dHJpYnV0ZXMiLAorICAgICAgInN0YXR1c19zdHJpbmciOiAiUEFTUyIs
CisgICAgICAicHJvcGVydGllcyI6IHt9LAorICAgICAgIm1lc3NhZ2UiOiBudWxsCisgICAgfSwK
KyAgICB7CisgICAgICAibmFtZSI6ICJmb28gbmFtZXNwYWNlOiBwcm9wZXJ0eSBkZXNjcmlwdG9y
IiwKKyAgICAgICJzdGF0dXNfc3RyaW5nIjogIlBBU1MiLAorICAgICAgInByb3BlcnRpZXMiOiB7
fSwKKyAgICAgICJtZXNzYWdlIjogbnVsbAorICAgIH0sCisgICAgeworICAgICAgIm5hbWUiOiAi
Zm9vIG5hbWVzcGFjZTogW1tFeHRlbnNpYmxlXV0gaXMgdHJ1ZSIsCisgICAgICAic3RhdHVzX3N0
cmluZyI6ICJQQVNTIiwKKyAgICAgICJwcm9wZXJ0aWVzIjoge30sCisgICAgICAibWVzc2FnZSI6
IG51bGwKKyAgICB9LAorICAgIHsKKyAgICAgICJuYW1lIjogImZvbyBuYW1lc3BhY2U6IFtbUHJv
dG90eXBlXV0gaXMgT2JqZWN0LnByb3RvdHlwZSIsCisgICAgICAic3RhdHVzX3N0cmluZyI6ICJQ
QVNTIiwKKyAgICAgICJwcm9wZXJ0aWVzIjoge30sCisgICAgICAibWVzc2FnZSI6IG51bGwKKyAg
ICB9LAorICAgIHsKKyAgICAgICJuYW1lIjogImZvbyBuYW1lc3BhY2U6IHR5cGVvZiBpcyBcIm9i
amVjdFwiIiwKKyAgICAgICJzdGF0dXNfc3RyaW5nIjogIlBBU1MiLAorICAgICAgInByb3BlcnRp
ZXMiOiB7fSwKKyAgICAgICJtZXNzYWdlIjogbnVsbAorICAgIH0sCiAgICAgewogICAgICAgIm5h
bWUiOiAiZm9vIG5hbWVzcGFjZTogYXR0cmlidXRlIHRydXRoIiwKICAgICAgICJzdGF0dXNfc3Ry
aW5nIjogIlBBU1MiLApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1w
bGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9mdW5jdGlvbmFsL2lkbGhhcm5lc3Mv
SWRsTmFtZXNwYWNlL3Rlc3Rfb3BlcmF0aW9uLmh0bWwgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93
M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvaWRs
aGFybmVzcy9JZGxOYW1lc3BhY2UvdGVzdF9vcGVyYXRpb24uaHRtbAppbmRleCAxYjk5NTUyOWQy
MzljYTA5ZTI4OTZkNjUzMjI2MjQzYjU4MWFjYjJlLi42MGQ3ZDQ3YzllZWE2NGE4MWQ1MzlhZmE2
ZmQzYWNkNzI1ODFjMDBiIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2Vi
LXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvaWRsaGFybmVz
cy9JZGxOYW1lc3BhY2UvdGVzdF9vcGVyYXRpb24uaHRtbAorKysgYi9MYXlvdXRUZXN0cy9pbXBv
cnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9u
YWwvaWRsaGFybmVzcy9JZGxOYW1lc3BhY2UvdGVzdF9vcGVyYXRpb24uaHRtbApAQCAtMTYsMzgg
KzE2LDU3IEBACiA8c2NyaXB0PgogInVzZSBzdHJpY3QiOwogCi1zZWxmLmZvbyA9IHsKLSAgVHJ1
dGg6IGZ1bmN0aW9uKCkge30sCi19OwotT2JqZWN0LmRlZmluZVByb3BlcnR5KHNlbGYuZm9vLCAi
VHJ1dGgiLCB7IHdyaXRhYmxlOiB0cnVlIH0pOworT2JqZWN0LmRlZmluZVByb3BlcnR5KHNlbGYs
ICJmb28iLCB7CisgIHZhbHVlOiBPYmplY3QuZGVmaW5lUHJvcGVydHkoe30sICJUcnV0aCIsIHsK
KyAgICB2YWx1ZTogZnVuY3Rpb24oKSB7fSwKKyAgICB3cml0YWJsZTogdHJ1ZSwKKyAgICBlbnVt
ZXJhYmxlOiB0cnVlLAorICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSwKKyAgfSksCisgIHdyaXRhYmxl
OiB0cnVlLAorICBlbnVtZXJhYmxlOiBmYWxzZSwKKyAgY29uZmlndXJhYmxlOiB0cnVlLAorfSk7
CiAKLXNlbGYuYmFyID0gewotICBUcnV0aDogZnVuY3Rpb24oKSB7fSwKLX0KLU9iamVjdC5kZWZp
bmVQcm9wZXJ0eShzZWxmLmJhciwgIlRydXRoIiwgewotICB3cml0YWJsZTogZmFsc2UsCi0gIGNv
bmZpZ3VyYWJsZTogZmFsc2UsCitPYmplY3QuZGVmaW5lUHJvcGVydHkoc2VsZiwgImJhciIsIHsK
KyAgdmFsdWU6IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7fSwgIlRydXRoIiwgeworICAgIHZhbHVl
OiBmdW5jdGlvbigpIHt9LAorICAgIHdyaXRhYmxlOiBmYWxzZSwKKyAgICBlbnVtZXJhYmxlOiB0
cnVlLAorICAgIGNvbmZpZ3VyYWJsZTogZmFsc2UsCisgIH0pLAorICB3cml0YWJsZTogdHJ1ZSwK
KyAgZW51bWVyYWJsZTogZmFsc2UsCisgIGNvbmZpZ3VyYWJsZTogdHJ1ZSwKIH0pOwogCi1zZWxm
LmJheiA9IHsKLSAgTG9uZ1N0b3J5OiBmdW5jdGlvbihoZXJvLCAuLi5kZXRhaWxzKSB7Ci0gICAg
cmV0dXJuIGAke2hlcm99IHdlbnQgYW5kICR7ZGV0YWlscy5qb2luKCcsIHRoZW4nKX1gCi0gIH0s
Ci0gIFNob3J0U3Rvcnk6IGZ1bmN0aW9uKC4uLmRldGFpbHMpIHsKLSAgICByZXR1cm4gYCR7ZGV0
YWlscy5qb2luKCcuICcpfWA7CitPYmplY3QuZGVmaW5lUHJvcGVydHkoc2VsZiwgImJheiIsIHsK
KyAgdmFsdWU6IHsKKyAgICBMb25nU3Rvcnk6IGZ1bmN0aW9uKGhlcm8sIC4uLmRldGFpbHMpIHsK
KyAgICAgIHJldHVybiBgJHtoZXJvfSB3ZW50IGFuZCAke2RldGFpbHMuam9pbignLCB0aGVuJyl9
YAorICAgIH0sCisgICAgU2hvcnRTdG9yeTogZnVuY3Rpb24oLi4uZGV0YWlscykgeworICAgICAg
cmV0dXJuIGAke2RldGFpbHMuam9pbignLiAnKX1gOworICAgIH0sCiAgIH0sCi19OworICB3cml0
YWJsZTogdHJ1ZSwKKyAgZW51bWVyYWJsZTogZmFsc2UsCisgIGNvbmZpZ3VyYWJsZTogdHJ1ZSwK
K30pOwogCiB2YXIgaWRsQXJyYXkgPSBuZXcgSWRsQXJyYXkoKTsKLWlkbEFycmF5LmFkZF9pZGxz
KAotYG5hbWVzcGFjZSBmb28geworaWRsQXJyYXkuYWRkX2lkbHMoYAorW0V4cG9zZWQ9V2luZG93
XQorbmFtZXNwYWNlIGZvbyB7CiAgIHZvaWQgVHJ1dGgoKTsKICAgdm9pZCBMaWVzKCk7CiB9Owor
W0V4cG9zZWQ9V2luZG93XQogbmFtZXNwYWNlIGJhciB7CiAgIFtMZWdhY3lVbmZvcmdlYWJsZV0K
ICAgdm9pZCBUcnV0aCgpOwogfTsKK1tFeHBvc2VkPVdpbmRvd10KIG5hbWVzcGFjZSBiYXogewog
ICBET01TdHJpbmcgTG9uZ1N0b3J5KGFueSBoZXJvLCBET01TdHJpbmcuLi4gZGV0YWlscyk7CiAg
IERPTVN0cmluZyBTaG9ydFN0b3J5KERPTVN0cmluZy4uLiBkZXRhaWxzKTsKQEAgLTYyLDE5ICs4
MSwzMSBAQCBpZGxBcnJheS50ZXN0KCk7CiAgIH0sCiAgICJzdW1tYXJpemVkX3Rlc3RzIjogWwog
ICAgIHsKLSAgICAgICJuYW1lIjogImJhciBuYW1lc3BhY2U6IG9wZXJhdGlvbiBUcnV0aCgpIiwK
KyAgICAgICJuYW1lIjogImZvbyBuYW1lc3BhY2U6IGV4dGVuZGVkIGF0dHJpYnV0ZXMiLAogICAg
ICAgInN0YXR1c19zdHJpbmciOiAiUEFTUyIsCiAgICAgICAicHJvcGVydGllcyI6IHt9LAogICAg
ICAgIm1lc3NhZ2UiOiBudWxsCiAgICAgfSwKICAgICB7Ci0gICAgICAibmFtZSI6ICJiYXogbmFt
ZXNwYWNlOiBvcGVyYXRpb24gTG9uZ1N0b3J5KGFueSwgRE9NU3RyaW5nLi4uKSIsCisgICAgICAi
bmFtZSI6ICJmb28gbmFtZXNwYWNlOiBwcm9wZXJ0eSBkZXNjcmlwdG9yIiwKICAgICAgICJzdGF0
dXNfc3RyaW5nIjogIlBBU1MiLAogICAgICAgInByb3BlcnRpZXMiOiB7fSwKICAgICAgICJtZXNz
YWdlIjogbnVsbAogICAgIH0sCiAgICAgewotICAgICAgIm5hbWUiOiAiYmF6IG5hbWVzcGFjZTog
b3BlcmF0aW9uIFNob3J0U3RvcnkoRE9NU3RyaW5nLi4uKSIsCisgICAgICAibmFtZSI6ICJmb28g
bmFtZXNwYWNlOiBbW0V4dGVuc2libGVdXSBpcyB0cnVlIiwKKyAgICAgICJzdGF0dXNfc3RyaW5n
IjogIlBBU1MiLAorICAgICAgInByb3BlcnRpZXMiOiB7fSwKKyAgICAgICJtZXNzYWdlIjogbnVs
bAorICAgIH0sCisgICAgeworICAgICAgIm5hbWUiOiAiZm9vIG5hbWVzcGFjZTogW1tQcm90b3R5
cGVdXSBpcyBPYmplY3QucHJvdG90eXBlIiwKKyAgICAgICJzdGF0dXNfc3RyaW5nIjogIlBBU1Mi
LAorICAgICAgInByb3BlcnRpZXMiOiB7fSwKKyAgICAgICJtZXNzYWdlIjogbnVsbAorICAgIH0s
CisgICAgeworICAgICAgIm5hbWUiOiAiZm9vIG5hbWVzcGFjZTogdHlwZW9mIGlzIFwib2JqZWN0
XCIiLAogICAgICAgInN0YXR1c19zdHJpbmciOiAiUEFTUyIsCiAgICAgICAicHJvcGVydGllcyI6
IHt9LAogICAgICAgIm1lc3NhZ2UiOiBudWxsCkBAIC05MCw2ICsxMjEsODYgQEAgaWRsQXJyYXku
dGVzdCgpOwogICAgICAgInN0YXR1c19zdHJpbmciOiAiRkFJTCIsCiAgICAgICAicHJvcGVydGll
cyI6IHt9LAogICAgICAgIm1lc3NhZ2UiOiAiYXNzZXJ0X293bl9wcm9wZXJ0eTogbmFtZXNwYWNl
IG9iamVjdCBtaXNzaW5nIG9wZXJhdGlvbiBcIkxpZXNcIiBleHBlY3RlZCBwcm9wZXJ0eSBcIkxp
ZXNcIiBtaXNzaW5nIgorICAgIH0sCisKKyAgICB7CisgICAgICAibmFtZSI6ICJiYXIgbmFtZXNw
YWNlOiBleHRlbmRlZCBhdHRyaWJ1dGVzIiwKKyAgICAgICJzdGF0dXNfc3RyaW5nIjogIlBBU1Mi
LAorICAgICAgInByb3BlcnRpZXMiOiB7fSwKKyAgICAgICJtZXNzYWdlIjogbnVsbAorICAgIH0s
CisgICAgeworICAgICAgIm5hbWUiOiAiYmFyIG5hbWVzcGFjZTogcHJvcGVydHkgZGVzY3JpcHRv
ciIsCisgICAgICAic3RhdHVzX3N0cmluZyI6ICJQQVNTIiwKKyAgICAgICJwcm9wZXJ0aWVzIjog
e30sCisgICAgICAibWVzc2FnZSI6IG51bGwKKyAgICB9LAorICAgIHsKKyAgICAgICJuYW1lIjog
ImJhciBuYW1lc3BhY2U6IFtbRXh0ZW5zaWJsZV1dIGlzIHRydWUiLAorICAgICAgInN0YXR1c19z
dHJpbmciOiAiUEFTUyIsCisgICAgICAicHJvcGVydGllcyI6IHt9LAorICAgICAgIm1lc3NhZ2Ui
OiBudWxsCisgICAgfSwKKyAgICB7CisgICAgICAibmFtZSI6ICJiYXIgbmFtZXNwYWNlOiBbW1By
b3RvdHlwZV1dIGlzIE9iamVjdC5wcm90b3R5cGUiLAorICAgICAgInN0YXR1c19zdHJpbmciOiAi
UEFTUyIsCisgICAgICAicHJvcGVydGllcyI6IHt9LAorICAgICAgIm1lc3NhZ2UiOiBudWxsCisg
ICAgfSwKKyAgICB7CisgICAgICAibmFtZSI6ICJiYXIgbmFtZXNwYWNlOiB0eXBlb2YgaXMgXCJv
YmplY3RcIiIsCisgICAgICAic3RhdHVzX3N0cmluZyI6ICJQQVNTIiwKKyAgICAgICJwcm9wZXJ0
aWVzIjoge30sCisgICAgICAibWVzc2FnZSI6IG51bGwKKyAgICB9LAorICAgIHsKKyAgICAgICJu
YW1lIjogImJhciBuYW1lc3BhY2U6IG9wZXJhdGlvbiBUcnV0aCgpIiwKKyAgICAgICJzdGF0dXNf
c3RyaW5nIjogIlBBU1MiLAorICAgICAgInByb3BlcnRpZXMiOiB7fSwKKyAgICAgICJtZXNzYWdl
IjogbnVsbAorICAgIH0sCisKKyAgICB7CisgICAgICAibmFtZSI6ICJiYXogbmFtZXNwYWNlOiBl
eHRlbmRlZCBhdHRyaWJ1dGVzIiwKKyAgICAgICJzdGF0dXNfc3RyaW5nIjogIlBBU1MiLAorICAg
ICAgInByb3BlcnRpZXMiOiB7fSwKKyAgICAgICJtZXNzYWdlIjogbnVsbAorICAgIH0sCisgICAg
eworICAgICAgIm5hbWUiOiAiYmF6IG5hbWVzcGFjZTogcHJvcGVydHkgZGVzY3JpcHRvciIsCisg
ICAgICAic3RhdHVzX3N0cmluZyI6ICJQQVNTIiwKKyAgICAgICJwcm9wZXJ0aWVzIjoge30sCisg
ICAgICAibWVzc2FnZSI6IG51bGwKKyAgICB9LAorICAgIHsKKyAgICAgICJuYW1lIjogImJheiBu
YW1lc3BhY2U6IFtbRXh0ZW5zaWJsZV1dIGlzIHRydWUiLAorICAgICAgInN0YXR1c19zdHJpbmci
OiAiUEFTUyIsCisgICAgICAicHJvcGVydGllcyI6IHt9LAorICAgICAgIm1lc3NhZ2UiOiBudWxs
CisgICAgfSwKKyAgICB7CisgICAgICAibmFtZSI6ICJiYXogbmFtZXNwYWNlOiBbW1Byb3RvdHlw
ZV1dIGlzIE9iamVjdC5wcm90b3R5cGUiLAorICAgICAgInN0YXR1c19zdHJpbmciOiAiUEFTUyIs
CisgICAgICAicHJvcGVydGllcyI6IHt9LAorICAgICAgIm1lc3NhZ2UiOiBudWxsCisgICAgfSwK
KyAgICB7CisgICAgICAibmFtZSI6ICJiYXogbmFtZXNwYWNlOiB0eXBlb2YgaXMgXCJvYmplY3Rc
IiIsCisgICAgICAic3RhdHVzX3N0cmluZyI6ICJQQVNTIiwKKyAgICAgICJwcm9wZXJ0aWVzIjog
e30sCisgICAgICAibWVzc2FnZSI6IG51bGwKKyAgICB9LAorICAgIHsKKyAgICAgICJuYW1lIjog
ImJheiBuYW1lc3BhY2U6IG9wZXJhdGlvbiBMb25nU3RvcnkoYW55LCBET01TdHJpbmcuLi4pIiwK
KyAgICAgICJzdGF0dXNfc3RyaW5nIjogIlBBU1MiLAorICAgICAgInByb3BlcnRpZXMiOiB7fSwK
KyAgICAgICJtZXNzYWdlIjogbnVsbAorICAgIH0sCisgICAgeworICAgICAgIm5hbWUiOiAiYmF6
IG5hbWVzcGFjZTogb3BlcmF0aW9uIFNob3J0U3RvcnkoRE9NU3RyaW5nLi4uKSIsCisgICAgICAi
c3RhdHVzX3N0cmluZyI6ICJQQVNTIiwKKyAgICAgICJwcm9wZXJ0aWVzIjoge30sCisgICAgICAi
bWVzc2FnZSI6IG51bGwKICAgICB9CiAgIF0sCiAgICJ0eXBlIjogImNvbXBsZXRlIgpkaWZmIC0t
Z2l0IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJj
ZXMvdGVzdC90ZXN0cy9mdW5jdGlvbmFsL25vLXRpdGxlLmh0bWwgYi9MYXlvdXRUZXN0cy9pbXBv
cnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9u
YWwvbm8tdGl0bGUuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iYWVmYjgxYmY4ZmFjNTFlMjc2N2UyZTYyMzg4
N2NkMGI5NmQ4ZjFkCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNj
L3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9mdW5jdGlvbmFsL25vLXRp
dGxlLmh0bWwKQEAgLTAsMCArMSwxNDkgQEAKKzwhRE9DVFlQRSBIVE1MPgorPGh0bWw+Cis8aGVh
ZD4KKzxtZXRhIG5hbWU9InZhcmlhbnQiIGNvbnRlbnQ9IiI+Cis8bWV0YSBuYW1lPSJ2YXJpYW50
IiBjb250ZW50PSI/a2VlcC1wcm9taXNlIj4KKzx0aXRsZT5UZXN0cyB3aXRoIG5vIHRpdGxlPC90
aXRsZT4KKzxzY3JpcHQgc3JjPSIuLi8uLi92YXJpYW50cy5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+
Cis8c2NyaXB0IHNyYz0iL3Jlc291cmNlcy90ZXN0aGFybmVzcy5qcyI+PC9zY3JpcHQ+CisKKzxi
b2R5PgorPGgxPlRlc3RzIHdpdGggbm8gdGl0bGU8L2gxPgorPGRpdiBpZD0ibG9nIj48L2Rpdj4K
KzxzY3JpcHQ+CisgIHRlc3QoZnVuY3Rpb24oKXthc3NlcnRfdHJ1ZSh0cnVlLCAnMScpfSk7Cisg
IHRlc3QoKCk9PmFzc2VydF90cnVlKHRydWUsICcyJykpOworICB0ZXN0KCgpID0+IGFzc2VydF90
cnVlKHRydWUsICczJykpOworICB0ZXN0KCgpID0+IGFzc2VydF90cnVlKHRydWUsICczJykpOyAg
Ly8gdGVzdCBkdXBsaWNhdGUgYmVoYXZpb3VyCisgIHRlc3QoKCkgPT4gYXNzZXJ0X3RydWUodHJ1
ZSwgJzMnKSk7ICAvLyB0ZXN0IGR1cGxpY2F0ZSBiZWhhdmlvdXIKKyAgdGVzdCgoKSA9PiB7Cisg
ICAgICBhc3NlcnRfdHJ1ZSh0cnVlLCAnNCcpOworICB9KTsKKyAgdGVzdCgoKSA9PiB7IGFzc2Vy
dF90cnVlKHRydWUsICc1JykgfSk7CisgIHRlc3QoKCkgPT4geyBhc3NlcnRfdHJ1ZSh0cnVlLCAn
NicpIH0gICApOworICB0ZXN0KCgpID0+IHsgYXNzZXJ0X3RydWUodHJ1ZSwgJzcnKTsgfSk7Cisg
IHRlc3QoKCkgPT4ge30pOworICB0ZXN0KCgpID0+IHsgfSk7CisgIHRlc3QoKCkgPT4gezs7Ozt9
KTsKKyAgdGVzdCgoKSA9PiB7IDsgOyA7IDsgfSk7CisgIHRlc3QoKCk9Pnt9KTsKKyAgdGVzdCgo
KT0+eyB9KTsKKyAgdGVzdCgoKT0+ezs7Ozt9KTsKKyAgdGVzdCgoKT0+eyA7IDsgOyA7IH0pOwor
PC9zY3JpcHQ+Cis8c2NyaXB0IHR5cGU9InRleHQvanNvbiIgaWQ9ImV4cGVjdGVkIj4KK3sKKyAg
InN1bW1hcml6ZWRfc3RhdHVzIjogeworICAgICJzdGF0dXNfc3RyaW5nIjogIk9LIiwKKyAgICAi
bWVzc2FnZSI6IG51bGwKKyAgfSwKKyAgInN1bW1hcml6ZWRfdGVzdHMiOiBbCisgICAgeworICAg
ICAgInN0YXR1c19zdHJpbmciOiAiUEFTUyIsCisgICAgICAibmFtZSI6ICJUZXN0cyB3aXRoIG5v
IHRpdGxlIiwKKyAgICAgICJwcm9wZXJ0aWVzIjoge30sCisgICAgICAibWVzc2FnZSI6IG51bGwK
KyAgICB9LAorICAgIHsKKyAgICAgICJzdGF0dXNfc3RyaW5nIjogIlBBU1MiLAorICAgICAgIm5h
bWUiOiAiYXNzZXJ0X3RydWUodHJ1ZSwgJzInKSIsCisgICAgICAicHJvcGVydGllcyI6IHt9LAor
ICAgICAgIm1lc3NhZ2UiOiBudWxsCisgICAgfSwKKyAgICB7CisgICAgICAic3RhdHVzX3N0cmlu
ZyI6ICJQQVNTIiwKKyAgICAgICJuYW1lIjogImFzc2VydF90cnVlKHRydWUsICczJykiLAorICAg
ICAgInByb3BlcnRpZXMiOiB7fSwKKyAgICAgICJtZXNzYWdlIjogbnVsbAorICAgIH0sCisgICAg
eworICAgICAgInN0YXR1c19zdHJpbmciOiAiUEFTUyIsCisgICAgICAibmFtZSI6ICJhc3NlcnRf
dHJ1ZSh0cnVlLCAnMycpIDEiLAorICAgICAgInByb3BlcnRpZXMiOiB7fSwKKyAgICAgICJtZXNz
YWdlIjogbnVsbAorICAgIH0sCisgICAgeworICAgICAgInN0YXR1c19zdHJpbmciOiAiUEFTUyIs
CisgICAgICAibmFtZSI6ICJhc3NlcnRfdHJ1ZSh0cnVlLCAnMycpIDIiLAorICAgICAgInByb3Bl
cnRpZXMiOiB7fSwKKyAgICAgICJtZXNzYWdlIjogbnVsbAorICAgIH0sCisgICAgeworICAgICAg
InN0YXR1c19zdHJpbmciOiAiUEFTUyIsCisgICAgICAibmFtZSI6ICJUZXN0cyB3aXRoIG5vIHRp
dGxlIDEiLAorICAgICAgInByb3BlcnRpZXMiOiB7fSwKKyAgICAgICJtZXNzYWdlIjogbnVsbAor
ICAgIH0sCisgICAgeworICAgICAgInN0YXR1c19zdHJpbmciOiAiUEFTUyIsCisgICAgICAibmFt
ZSI6ICJhc3NlcnRfdHJ1ZSh0cnVlLCAnNScpIiwKKyAgICAgICJwcm9wZXJ0aWVzIjoge30sCisg
ICAgICAibWVzc2FnZSI6IG51bGwKKyAgICB9LAorICAgIHsKKyAgICAgICJzdGF0dXNfc3RyaW5n
IjogIlBBU1MiLAorICAgICAgIm5hbWUiOiAiYXNzZXJ0X3RydWUodHJ1ZSwgJzYnKSIsCisgICAg
ICAicHJvcGVydGllcyI6IHt9LAorICAgICAgIm1lc3NhZ2UiOiBudWxsCisgICAgfSwKKyAgICB7
CisgICAgICAic3RhdHVzX3N0cmluZyI6ICJQQVNTIiwKKyAgICAgICJuYW1lIjogImFzc2VydF90
cnVlKHRydWUsICc3JykiLAorICAgICAgInByb3BlcnRpZXMiOiB7fSwKKyAgICAgICJtZXNzYWdl
IjogbnVsbAorICAgIH0sCisgICAgeworICAgICAgInN0YXR1c19zdHJpbmciOiAiUEFTUyIsCisg
ICAgICAibmFtZSI6ICJUZXN0cyB3aXRoIG5vIHRpdGxlIDIiLAorICAgICAgInByb3BlcnRpZXMi
OiB7fSwKKyAgICAgICJtZXNzYWdlIjogbnVsbAorICAgIH0sCisgICAgeworICAgICAgInN0YXR1
c19zdHJpbmciOiAiUEFTUyIsCisgICAgICAibmFtZSI6ICJUZXN0cyB3aXRoIG5vIHRpdGxlIDMi
LAorICAgICAgInByb3BlcnRpZXMiOiB7fSwKKyAgICAgICJtZXNzYWdlIjogbnVsbAorICAgIH0s
CisgICAgeworICAgICAgInN0YXR1c19zdHJpbmciOiAiUEFTUyIsCisgICAgICAibmFtZSI6ICJU
ZXN0cyB3aXRoIG5vIHRpdGxlIDQiLAorICAgICAgInByb3BlcnRpZXMiOiB7fSwKKyAgICAgICJt
ZXNzYWdlIjogbnVsbAorICAgIH0sCisgICAgeworICAgICAgInN0YXR1c19zdHJpbmciOiAiUEFT
UyIsCisgICAgICAibmFtZSI6ICJUZXN0cyB3aXRoIG5vIHRpdGxlIDUiLAorICAgICAgInByb3Bl
cnRpZXMiOiB7fSwKKyAgICAgICJtZXNzYWdlIjogbnVsbAorICAgIH0sCisgICAgeworICAgICAg
InN0YXR1c19zdHJpbmciOiAiUEFTUyIsCisgICAgICAibmFtZSI6ICJUZXN0cyB3aXRoIG5vIHRp
dGxlIDYiLAorICAgICAgInByb3BlcnRpZXMiOiB7fSwKKyAgICAgICJtZXNzYWdlIjogbnVsbAor
ICAgIH0sCisgICAgeworICAgICAgInN0YXR1c19zdHJpbmciOiAiUEFTUyIsCisgICAgICAibmFt
ZSI6ICJUZXN0cyB3aXRoIG5vIHRpdGxlIDciLAorICAgICAgInByb3BlcnRpZXMiOiB7fSwKKyAg
ICAgICJtZXNzYWdlIjogbnVsbAorICAgIH0sCisgICAgeworICAgICAgInN0YXR1c19zdHJpbmci
OiAiUEFTUyIsCisgICAgICAibmFtZSI6ICJUZXN0cyB3aXRoIG5vIHRpdGxlIDgiLAorICAgICAg
InByb3BlcnRpZXMiOiB7fSwKKyAgICAgICJtZXNzYWdlIjogbnVsbAorICAgIH0sCisgICAgewor
ICAgICAgInN0YXR1c19zdHJpbmciOiAiUEFTUyIsCisgICAgICAibmFtZSI6ICJUZXN0cyB3aXRo
IG5vIHRpdGxlIDkiLAorICAgICAgInByb3BlcnRpZXMiOiB7fSwKKyAgICAgICJtZXNzYWdlIjog
bnVsbAorICAgIH0KKyAgXSwKKyAgInR5cGUiOiAiY29tcGxldGUiCit9Cis8L3NjcmlwdD4KKzwv
Ym9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWIt
cGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC93M2MtaW1wb3J0
LmxvZyBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3Vy
Y2VzL3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC93M2MtaW1wb3J0LmxvZwppbmRleCBmNzhiMTQxMjhk
ODRiYjNmZjRjMDAwOGU0ZTkwMWMzYjgxNThlNDliLi4xMmI4MGMxMzA0ODZhMzM4YmRjNjY4Nzdl
NTVlOGZlOWJkMWM1NDg1IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2Vi
LXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvdzNjLWltcG9y
dC5sb2cKKysrIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9y
ZXNvdXJjZXMvdGVzdC90ZXN0cy9mdW5jdGlvbmFsL3czYy1pbXBvcnQubG9nCkBAIC0zNiw2ICsz
Niw3IEBAIExpc3Qgb2YgZmlsZXM6CiAvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0
Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9mdW5jdGlvbmFsL2lmcmFtZS1jb25zb2xp
ZGF0ZS10ZXN0cy5odG1sCiAvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10
ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9mdW5jdGlvbmFsL2lmcmFtZS1tc2cuaHRtbAogL0xh
eW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3Qv
dGVzdHMvZnVuY3Rpb25hbC9sb2ctaW5zZXJ0aW9uLmh0bWwKKy9MYXlvdXRUZXN0cy9pbXBvcnRl
ZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwv
bm8tdGl0bGUuaHRtbAogL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVz
dHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC9vcmRlci5odG1sCiAvTGF5b3V0VGVz
dHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9m
dW5jdGlvbmFsL3Byb21pc2UtYXN5bmMuaHRtbAogL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93
ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC9wcm9taXNl
LXdpdGgtc3luYy5odG1sCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2Vi
LXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL3VuaXQvYXNzZXJ0X29iamVjdF9l
cXVhbHMuaHRtbCBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMv
cmVzb3VyY2VzL3Rlc3QvdGVzdHMvdW5pdC9hc3NlcnRfb2JqZWN0X2VxdWFscy5odG1sCmluZGV4
IDE5Mjk2YjgyOTNmMjUwNTVhMjEwMGViZDg4NGRjOWRiYmQ3OTk5ZmYuLjMxM2Q3N2I5NzcxNTZk
ZmM4YTZlMzFjY2NlNTQ3MDY0ZjJjNDE2NDggMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2ltcG9y
dGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvdW5pdC9hc3Nl
cnRfb2JqZWN0X2VxdWFscy5odG1sCisrKyBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWIt
cGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvdW5pdC9hc3NlcnRfb2JqZWN0X2Vx
dWFscy5odG1sCkBAIC00Myw3ICs0Myw3IEBAIHRlc3QoZnVuY3Rpb24oKSB7CiAgIHZhciBleHBl
Y3RlZCA9IHt9OwogICBPYmplY3QuZGVmaW5lUHJvcGVydHkoYWN0dWFsLCAnYScsIHsgdmFsdWU6
IDEsIGVudW1lcmFibGU6IGZhbHNlIH0pOwogCi0gIGFzc2VydF90cnVlKGFjdHVhbC5hICE9PSBl
eHBlY3RlZC5hKTsKKyAgYXNzZXJ0X25vdF9lcXVhbHMoYWN0dWFsLmEsIGV4cGVjdGVkLmEpOwog
ICBhc3NlcnRfb2JqZWN0X2VxdWFscyhhY3R1YWwsIGV4cGVjdGVkKTsKIH0sICdub24tZW51bWVy
YWJsZSBwcm9wZXJ0aWVzIGluIGFjdHVhbCB2YWx1ZSBpZ25vcmVkJyk7CiAKQEAgLTUyLDcgKzUy
LDcgQEAgdGVzdChmdW5jdGlvbigpIHsKICAgdmFyIGV4cGVjdGVkID0ge307CiAgIE9iamVjdC5k
ZWZpbmVQcm9wZXJ0eShleHBlY3RlZCwgJ2EnLCB7IHZhbHVlOiAxLCBlbnVtZXJhYmxlOiBmYWxz
ZSB9KTsKIAotICBhc3NlcnRfdHJ1ZShhY3R1YWwuYSAhPT0gZXhwZWN0ZWQuYSk7CisgIGFzc2Vy
dF9ub3RfZXF1YWxzKGFjdHVhbC5hLCBleHBlY3RlZC5hKTsKICAgYXNzZXJ0X29iamVjdF9lcXVh
bHMoYWN0dWFsLCBleHBlY3RlZCk7CiB9LCAnbm9uLWVudW1lcmFibGUgcHJvcGVydGllcyBpbiBl
eHBlY3RlZCB2YWx1ZSBpZ25vcmVkJyk7CiAKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2ltcG9y
dGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvdW5pdC9hc3lu
Yy10ZXN0LXJldHVybi1yZXN0cmljdGlvbnMuaHRtbCBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3cz
Yy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvdW5pdC9hc3luYy10ZXN0
LXJldHVybi1yZXN0cmljdGlvbnMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wZmRlMmUyNDIyM2YwMTc1MzI5
NDY1NmVhMWJhYTQyN2MzZmY5ZjRhCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvaW1w
b3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy91bml0L2Fz
eW5jLXRlc3QtcmV0dXJuLXJlc3RyaWN0aW9ucy5odG1sCkBAIC0wLDAgKzEsMTM1IEBACis8IURP
Q1RZUEUgSFRNTD4KKzxodG1sPgorPGhlYWQ+CisgIDxtZXRhIGNoYXJzZXQ9InV0Zi04Ij4KKyAg
PHNjcmlwdCBzcmM9Ii9yZXNvdXJjZXMvdGVzdGhhcm5lc3MuanMiPjwvc2NyaXB0PgorICA8dGl0
bGU+UmVzdHJpY3Rpb25zIG9uIHJldHVybiB2YWx1ZSBmcm9tIGBhc3luY190ZXN0YDwvdGl0bGU+
Cis8L2hlYWQ+Cis8Ym9keT4KKzxzY3JpcHQ+CitmdW5jdGlvbiBtYWtlVGVzdCguLi5ib2RpZXMp
IHsKKyAgY29uc3QgY2xvc2VTY3JpcHQgPSAnPCcgKyAnL3NjcmlwdD4nOworICBsZXQgc3JjID0g
YAorPCFET0NUWVBFIEhUTUw+Cis8aHRtbD4KKzxoZWFkPgorPHRpdGxlPkRvY3VtZW50IHRpdGxl
PC90aXRsZT4KKzxzY3JpcHQgc3JjPSIvcmVzb3VyY2VzL3Rlc3RoYXJuZXNzLmpzPyR7TWF0aC5y
YW5kb20oKX0iPiR7Y2xvc2VTY3JpcHR9Cis8L2hlYWQ+CisKKzxib2R5PgorPGRpdiBpZD0ibG9n
Ij48L2Rpdj5gOworICBib2RpZXMuZm9yRWFjaCgoYm9keSkgPT4geworICAgIHNyYyArPSAnPHNj
cmlwdD4oJyArIGJvZHkgKyAnKSgpOycgKyBjbG9zZVNjcmlwdDsKKyAgfSk7CisKKyAgY29uc3Qg
aWZyYW1lID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaWZyYW1lJyk7CisKKyAgZG9jdW1lbnQu
Ym9keS5hcHBlbmRDaGlsZChpZnJhbWUpOworICBpZnJhbWUuY29udGVudERvY3VtZW50LndyaXRl
KHNyYyk7CisKKyAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7CisgICAgd2luZG93
LmFkZEV2ZW50TGlzdGVuZXIoJ21lc3NhZ2UnLCBmdW5jdGlvbiBvbk1lc3NhZ2UoZSkgeworICAg
ICAgaWYgKGUuc291cmNlICE9PSBpZnJhbWUuY29udGVudFdpbmRvdykgeworICAgICAgICByZXR1
cm47CisgICAgICB9CisgICAgICBpZiAoIWUuZGF0YSB8fCBlLmRhdGEudHlwZSAhPT0nY29tcGxl
dGUnKSB7CisgICAgICAgIHJldHVybjsKKyAgICAgIH0KKyAgICAgIHdpbmRvdy5yZW1vdmVFdmVu
dExpc3RlbmVyKCdtZXNzYWdlJywgb25NZXNzYWdlKTsKKyAgICAgIHJlc29sdmUoZS5kYXRhKTsK
KyAgICB9KTsKKworICAgIGlmcmFtZS5jb250ZW50RG9jdW1lbnQuY2xvc2UoKTsKKyAgfSkudGhl
bigoeyB0ZXN0cywgc3RhdHVzIH0pID0+IHsKKyAgICBjb25zdCBzdW1tYXJ5ID0geworICAgICAg
aGFybmVzczogeworICAgICAgICBzdGF0dXM6IGdldEVudW1Qcm9wKHN0YXR1cywgc3RhdHVzLnN0
YXR1cyksCisgICAgICAgIG1lc3NhZ2U6IHN0YXR1cy5tZXNzYWdlCisgICAgICB9LAorICAgICAg
dGVzdHM6IHt9CisgICAgfTsKKworICAgIHRlc3RzLmZvckVhY2goKHRlc3QpID0+IHsKKyAgICAg
IHN1bW1hcnkudGVzdHNbdGVzdC5uYW1lXSA9IGdldEVudW1Qcm9wKHRlc3QsIHRlc3Quc3RhdHVz
KTsKKyAgICB9KTsKKworICAgIHJldHVybiBzdW1tYXJ5OworICB9KTsKK30KKworZnVuY3Rpb24g
Z2V0RW51bVByb3Aob2JqZWN0LCB2YWx1ZSkgeworICBmb3IgKGxldCBwcm9wZXJ0eSBpbiBvYmpl
Y3QpIHsKKyAgICBpZiAoIS9eW0EtWl0rJC8udGVzdChwcm9wZXJ0eSkpIHsKKyAgICAgIGNvbnRp
bnVlOworICAgIH0KKworICAgIGlmIChvYmplY3RbcHJvcGVydHldID09PSB2YWx1ZSkgeworICAg
ICAgcmV0dXJuIHByb3BlcnR5OworICAgIH0KKyAgfQorfQorCitwcm9taXNlX3Rlc3QoKCkgPT4g
eworICByZXR1cm4gbWFrZVRlc3QoCisgICAgICAoKSA9PiB7CisgICAgICAgIGFzeW5jX3Rlc3Qo
KHQpID0+IHt0LmRvbmUoKTsgcmV0dXJuIHVuZGVmaW5lZDt9LCAnYmVmb3JlJyk7CisgICAgICAg
IGFzeW5jX3Rlc3QoKHQpID0+IHt0LmRvbmUoKTsgcmV0dXJuIG51bGw7fSwgJ251bGwnKTsKKyAg
ICAgICAgYXN5bmNfdGVzdCgodCkgPT4ge3QuZG9uZSgpOyByZXR1cm4gdW5kZWZpbmVkO30sICdh
ZnRlcicpOworICAgICAgfQorICAgICkudGhlbigoe2hhcm5lc3MsIHRlc3RzfSkgPT4geworICAg
ICAgYXNzZXJ0X2VxdWFscyhoYXJuZXNzLnN0YXR1cywgJ0VSUk9SJyk7CisgICAgICBhc3NlcnRf
ZXF1YWxzKAorICAgICAgICBoYXJuZXNzLm1lc3NhZ2UsCisgICAgICAgICdUZXN0IG5hbWVkICJu
dWxsIiBwYXNzZWQgYSBmdW5jdGlvbiB0byBgYXN5bmNfdGVzdGAgdGhhdCByZXR1cm5lZCBhIHZh
bHVlLicKKyAgICAgICk7CisgICAgICBhc3NlcnRfZXF1YWxzKHRlc3RzLmJlZm9yZSwgJ1BBU1Mn
KTsKKyAgICAgIGFzc2VydF9lcXVhbHModGVzdHMubnVsbCwgJ1BBU1MnKTsKKyAgICAgIC8vIFRo
aXMgdGVzdCBkaWQgbm90IGdldCB0aGUgY2hhbmNlIHRvIHN0YXJ0LgorICAgICAgYXNzZXJ0X2Vx
dWFscyh0ZXN0cy5hZnRlciwgdW5kZWZpbmVkKTsKKyAgICB9KTsKK30sICd0ZXN0IHJldHVybmlu
ZyBgbnVsbGAnKTsKKworcHJvbWlzZV90ZXN0KCgpID0+IHsKKyAgcmV0dXJuIG1ha2VUZXN0KAor
ICAgICAgKCkgPT4geworICAgICAgICBhc3luY190ZXN0KCh0KSA9PiB7dC5kb25lKCk7IHJldHVy
biB1bmRlZmluZWQ7fSwgJ2JlZm9yZScpOworICAgICAgICBhc3luY190ZXN0KCh0KSA9PiB7dC5k
b25lKCk7IHJldHVybiB7fTt9LCAnb2JqZWN0Jyk7CisgICAgICAgIGFzeW5jX3Rlc3QoKHQpID0+
IHt0LmRvbmUoKTsgcmV0dXJuIHVuZGVmaW5lZDt9LCAnYWZ0ZXInKTsKKyAgICAgIH0KKyAgICAp
LnRoZW4oKHtoYXJuZXNzLCB0ZXN0c30pID0+IHsKKyAgICAgIGFzc2VydF9lcXVhbHMoaGFybmVz
cy5zdGF0dXMsICdFUlJPUicpOworICAgICAgYXNzZXJ0X2VxdWFscygKKyAgICAgICAgaGFybmVz
cy5tZXNzYWdlLAorICAgICAgICAnVGVzdCBuYW1lZCAib2JqZWN0IiBwYXNzZWQgYSBmdW5jdGlv
biB0byBgYXN5bmNfdGVzdGAgdGhhdCByZXR1cm5lZCBhIHZhbHVlLicKKyAgICAgICk7CisgICAg
ICBhc3NlcnRfZXF1YWxzKHRlc3RzLmJlZm9yZSwgJ1BBU1MnKTsKKyAgICAgIGFzc2VydF9lcXVh
bHModGVzdHMub2JqZWN0LCAnUEFTUycpOworICAgICAgLy8gVGhpcyB0ZXN0IGRpZCBub3QgZ2V0
IHRoZSBjaGFuY2UgdG8gc3RhcnQuCisgICAgICBhc3NlcnRfZXF1YWxzKHRlc3RzLmFmdGVyLCB1
bmRlZmluZWQpOworICAgIH0pOworfSwgJ3Rlc3QgcmV0dXJuaW5nIGFuIG9yZGluYXJ5IG9iamVj
dCcpOworCitwcm9taXNlX3Rlc3QoKCkgPT4geworICByZXR1cm4gbWFrZVRlc3QoCisgICAgICAo
KSA9PiB7CisgICAgICAgIGFzeW5jX3Rlc3QoKHQpID0+IHt0LmRvbmUoKTsgcmV0dXJuIHVuZGVm
aW5lZDt9LCAnYmVmb3JlJyk7CisgICAgICAgIGFzeW5jX3Rlc3QoKHQpID0+IHt0LmRvbmUoKTsg
cmV0dXJuIFByb21pc2UucmVzb2x2ZSg1KTt9LCAndGhlbmFibGUnKTsKKyAgICAgICAgYXN5bmNf
dGVzdCgodCkgPT4ge3QuZG9uZSgpOyByZXR1cm4gdW5kZWZpbmVkO30sICdhZnRlcicpOworICAg
ICAgfQorICAgICkudGhlbigoe2hhcm5lc3MsIHRlc3RzfSkgPT4geworICAgICAgYXNzZXJ0X2Vx
dWFscyhoYXJuZXNzLnN0YXR1cywgJ0VSUk9SJyk7CisgICAgICBhc3NlcnRfZXF1YWxzKAorICAg
ICAgICBoYXJuZXNzLm1lc3NhZ2UsCisgICAgICAgICdUZXN0IG5hbWVkICJ0aGVuYWJsZSIgcGFz
c2VkIGEgZnVuY3Rpb24gdG8gYGFzeW5jX3Rlc3RgIHRoYXQgcmV0dXJuZWQgYSB2YWx1ZS4gJyAr
CisgICAgICAgICdDb25zaWRlciB1c2luZyBgcHJvbWlzZV90ZXN0YCBpbnN0ZWFkIHdoZW4gdXNp
bmcgUHJvbWlzZXMgb3IgYXN5bmMvYXdhaXQuJworICAgICAgKTsKKyAgICAgIGFzc2VydF9lcXVh
bHModGVzdHMuYmVmb3JlLCAnUEFTUycpOworICAgICAgYXNzZXJ0X2VxdWFscyh0ZXN0cy50aGVu
YWJsZSwgJ1BBU1MnKTsKKyAgICAgIC8vIFRoaXMgdGVzdCBkaWQgbm90IGdldCBhIGNoYW5jZSB0
byBzdGFydC4KKyAgICAgIGFzc2VydF9lcXVhbHModGVzdHMuYWZ0ZXIsIHVuZGVmaW5lZCk7Cisg
ICAgfSk7Cit9LCAndGVzdCByZXR1cm5pbmcgYSB0aGVuYWJsZSBvYmplY3QnKTsKKzwvc2NyaXB0
PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNj
L3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy91bml0L2Jhc2ljLmh0bWwg
Yi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90
ZXN0L3Rlc3RzL3VuaXQvYmFzaWMuaHRtbAppbmRleCBkOTA3YzdiYjlmYmY0ZmE0ZGM2NzRiZDU3
ZTZhODU2YjY4ZWQxM2VhLi5kNTIwODJmMmUwNzZkZTA0NThiNjg5NzUwNTIzYjNkMTA2NDZmNGUw
IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3Rz
L3Jlc291cmNlcy90ZXN0L3Rlc3RzL3VuaXQvYmFzaWMuaHRtbAorKysgYi9MYXlvdXRUZXN0cy9p
bXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL3VuaXQv
YmFzaWMuaHRtbApAQCAtMjgsNyArMjgsNyBAQAogICAgICAgICAgICAgV2ViSURMMi5wYXJzZSgi
SSdtIGEgc3ludGF4IGVycm9yIik7CiAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIldlYiBJ
REwgZGlkbid0IHRocm93Iik7CiAgICAgICAgIH0gY2F0Y2ggKGUpIHsKLSAgICAgICAgICAgIGFz
c2VydF90cnVlKGUubmFtZSA9PT0gIldlYklETFBhcnNlRXJyb3IiKTsKKyAgICAgICAgICAgIGFz
c2VydF9lcXVhbHMoZS5uYW1lLCAiV2ViSURMUGFyc2VFcnJvciIpOwogICAgICAgICB9CiAgICAg
fSwgJ1dlYklETDIgcGFyc2UgbWV0aG9kIHNob3VsZCBiYWlsIG9uIGluY29ycmVjdCBXZWJJREwn
KTsKICAgICB0ZXN0KGZ1bmN0aW9uKCkgewpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW1wb3J0
ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy91bml0L2V4Y2Vw
dGlvbmFsLWNhc2VzLmh0bWwgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3Jt
LXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL3VuaXQvZXhjZXB0aW9uYWwtY2FzZXMuaHRtbApp
bmRleCAyYmU0ZGFjYWFlYzhhZTUzZTYzZDcwNGU4NDJkMzI5NjhhNDI0YjRiLi40MDU0ZDAzMTFk
MmRlNWE4M2M0M2JjMDc2ZDBmNzllOGM2MDFlNDc0IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9p
bXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL3VuaXQv
ZXhjZXB0aW9uYWwtY2FzZXMuaHRtbAorKysgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2Vi
LXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL3VuaXQvZXhjZXB0aW9uYWwtY2Fz
ZXMuaHRtbApAQCAtMTI3LDcgKzEyNyw3IEBAIHByb21pc2VfdGVzdCgoKSA9PiB7CiAgICAgICAg
IGFzeW5jX3Rlc3QoKHQpID0+IHsKICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHsKICAgICAg
ICAgICAgIHNldFRpbWVvdXQoKCkgPT4gdC5kb25lKCksIDApOwotICAgICAgICAgICAgYXN5bmNf
dGVzdCgodCkgPT4gc2V0VGltZW91dCh0LmRvbmUuYmluZCh0KSwgMCksICdhZnRlcicpOworICAg
ICAgICAgICAgYXN5bmNfdGVzdCgodCkgPT4geyBzZXRUaW1lb3V0KHQuZG9uZS5iaW5kKHQpLCAw
KTsgfSwgJ2FmdGVyJyk7CiAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3RoaXMgZXJyb3Ig
aXMgZXhwZWN0ZWQnKTsKICAgICAgICAgICB9LCAwKTsKICAgICAgICAgfSwgJ2R1cmluZycpOwpA
QCAtMjA1LDcgKzIwNSw3IEBAIGlmICgnb251bmhhbmRsZWRyZWplY3Rpb24nIGluIHdpbmRvdykg
ewogCiAgICAgICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigndW5oYW5kbGVkcmVqZWN0
aW9uJywgKCkgPT4gewogICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB0LmRvbmUoKSwgMCk7
Ci0gICAgICAgICAgICAgIGFzeW5jX3Rlc3QoKHQpID0+IHNldFRpbWVvdXQodC5kb25lLmJpbmQo
dCksIDApLCAnYWZ0ZXInKTsKKyAgICAgICAgICAgICAgYXN5bmNfdGVzdCgodCkgPT4geyBzZXRU
aW1lb3V0KHQuZG9uZS5iaW5kKHQpLCAwKTsgfSwgJ2FmdGVyJyk7CiAgICAgICAgICAgICAgIHQu
ZG9uZSgpOwogICAgICAgICAgICAgfSk7CiAgICAgICAgICAgfSwgJ2R1cmluZycpOwpAQCAtMjYx
LDEwICsyNjEsMTAgQEAgaWYgKCdvbnVuaGFuZGxlZHJlamVjdGlvbicgaW4gd2luZG93KSB7CiAg
ICAgcmV0dXJuIG1ha2VUZXN0KAogICAgICAgICAoKSA9PiB7CiAgICAgICAgICAgc2V0dXAoeyBl
eHBsaWNpdF9kb25lOiB0cnVlIH0pOwotICAgICAgICAgIGFzeW5jX3Rlc3QoKHQpID0+IHNldFRp
bWVvdXQodC5kb25lLmJpbmQodCksIDApLCAnYmVmb3JlJyk7CisgICAgICAgICAgYXN5bmNfdGVz
dCgodCkgPT4geyBzZXRUaW1lb3V0KHQuZG9uZS5iaW5kKHQpLCAwKTsgfSwgJ2JlZm9yZScpOwog
ICAgICAgICAgIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcigndGhpcyBlcnJvciBpcyBleHBlY3Rl
ZCcpKTsKICAgICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigndW5oYW5kbGVkcmVqZWN0
aW9uJywgKCkgPT4gewotICAgICAgICAgICAgYXN5bmNfdGVzdCgodCkgPT4gc2V0VGltZW91dCh0
LmRvbmUuYmluZCh0KSwgMCksICdhZnRlcicpOworICAgICAgICAgICAgYXN5bmNfdGVzdCgodCkg
PT4geyBzZXRUaW1lb3V0KHQuZG9uZS5iaW5kKHQpLCAwKTsgfSwgJ2FmdGVyJyk7CiAgICAgICAg
ICAgICBkb25lKCk7CiAgICAgICAgICAgfSk7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL0xheW91
dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVz
dHMvdW5pdC90ZXN0LXJldHVybi1yZXN0cmljdGlvbnMuaHRtbCBiL0xheW91dFRlc3RzL2ltcG9y
dGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvdW5pdC90ZXN0
LXJldHVybi1yZXN0cmljdGlvbnMuaHRtbAppbmRleCBiODQ2ZDRkYzQzMDBhOTkwZWRmN2E5MDVm
MzAxZGNhZjc1YmVlMThjLi4wMjk1YzUyMTRkYzIyYmViYTk3OTFjYWY4Y2RmZmM4NjllMDdmMWQ4
IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3Rz
L3Jlc291cmNlcy90ZXN0L3Rlc3RzL3VuaXQvdGVzdC1yZXR1cm4tcmVzdHJpY3Rpb25zLmh0bWwK
KysrIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJj
ZXMvdGVzdC90ZXN0cy91bml0L3Rlc3QtcmV0dXJuLXJlc3RyaWN0aW9ucy5odG1sCkBAIC04MSw3
ICs4MSw3IEBAIHByb21pc2VfdGVzdCgoKSA9PiB7CiAgICAgICBhc3NlcnRfZXF1YWxzKGhhcm5l
c3Muc3RhdHVzLCAnRVJST1InKTsKICAgICAgIGFzc2VydF9lcXVhbHMoCiAgICAgICAgIGhhcm5l
c3MubWVzc2FnZSwKLSAgICAgICAgJ1Rlc3QgbmFtZWQgIm51bGwiIGluYXBwcm9wcmlhdGVseSBy
ZXR1cm5lZCBhIHZhbHVlJworICAgICAgICAnVGVzdCBuYW1lZCAibnVsbCIgcGFzc2VkIGEgZnVu
Y3Rpb24gdG8gYHRlc3RgIHRoYXQgcmV0dXJuZWQgYSB2YWx1ZS4nCiAgICAgICApOwogICAgICAg
YXNzZXJ0X2VxdWFscyh0ZXN0cy5iZWZvcmUsICdQQVNTJyk7CiAgICAgICBhc3NlcnRfZXF1YWxz
KHRlc3RzLm51bGwsICdQQVNTJyk7CkBAIC0xMDAsNyArMTAwLDcgQEAgcHJvbWlzZV90ZXN0KCgp
ID0+IHsKICAgICAgIGFzc2VydF9lcXVhbHMoaGFybmVzcy5zdGF0dXMsICdFUlJPUicpOwogICAg
ICAgYXNzZXJ0X2VxdWFscygKICAgICAgICAgaGFybmVzcy5tZXNzYWdlLAotICAgICAgICAnVGVz
dCBuYW1lZCAib2JqZWN0IiBpbmFwcHJvcHJpYXRlbHkgcmV0dXJuZWQgYSB2YWx1ZScKKyAgICAg
ICAgJ1Rlc3QgbmFtZWQgIm9iamVjdCIgcGFzc2VkIGEgZnVuY3Rpb24gdG8gYHRlc3RgIHRoYXQg
cmV0dXJuZWQgYSB2YWx1ZS4nCiAgICAgICApOwogICAgICAgYXNzZXJ0X2VxdWFscyh0ZXN0cy5i
ZWZvcmUsICdQQVNTJyk7CiAgICAgICBhc3NlcnRfZXF1YWxzKHRlc3RzLm9iamVjdCwgJ1BBU1Mn
KTsKQEAgLTExMiwxNCArMTEyLDE1IEBAIHByb21pc2VfdGVzdCgoKSA9PiB7CiAgIHJldHVybiBt
YWtlVGVzdCgKICAgICAgICgpID0+IHsKICAgICAgICAgdGVzdCgoKSA9PiB1bmRlZmluZWQsICdi
ZWZvcmUnKTsKLSAgICAgICAgdGVzdCgoKSA9PiAoeyB0aGVuKCkge30gfSksICd0aGVuYWJsZScp
OworICAgICAgICB0ZXN0KCgpID0+IFByb21pc2UucmVzb2x2ZSg1KSwgJ3RoZW5hYmxlJyk7CiAg
ICAgICAgIHRlc3QoKCkgPT4gdW5kZWZpbmVkLCAnYWZ0ZXInKTsKICAgICAgIH0KICAgICApLnRo
ZW4oKHtoYXJuZXNzLCB0ZXN0c30pID0+IHsKICAgICAgIGFzc2VydF9lcXVhbHMoaGFybmVzcy5z
dGF0dXMsICdFUlJPUicpOwogICAgICAgYXNzZXJ0X2VxdWFscygKICAgICAgICAgaGFybmVzcy5t
ZXNzYWdlLAotICAgICAgICAnVGVzdCBuYW1lZCAidGhlbmFibGUiIGluYXBwcm9wcmlhdGVseSBy
ZXR1cm5lZCBhIHZhbHVlLCBjb25zaWRlciB1c2luZyBgcHJvbWlzZV90ZXN0YCBpbnN0ZWFkJwor
ICAgICAgICAnVGVzdCBuYW1lZCAidGhlbmFibGUiIHBhc3NlZCBhIGZ1bmN0aW9uIHRvIGB0ZXN0
YCB0aGF0IHJldHVybmVkIGEgdmFsdWUuICcgKworICAgICAgICAnQ29uc2lkZXIgdXNpbmcgYHBy
b21pc2VfdGVzdGAgaW5zdGVhZCB3aGVuIHVzaW5nIFByb21pc2VzIG9yIGFzeW5jL2F3YWl0LicK
ICAgICAgICk7CiAgICAgICBhc3NlcnRfZXF1YWxzKHRlc3RzLmJlZm9yZSwgJ1BBU1MnKTsKICAg
ICAgIGFzc2VydF9lcXVhbHModGVzdHMudGhlbmFibGUsICdQQVNTJyk7CkBAIC0xNDMsNyArMTQ0
LDcgQEAgcHJvbWlzZV90ZXN0KCgpID0+IHsKICAgICAgIGFzc2VydF9lcXVhbHMoaGFybmVzcy5z
dGF0dXMsICdFUlJPUicpOwogICAgICAgYXNzZXJ0X2VxdWFscygKICAgICAgICAgaGFybmVzcy5t
ZXNzYWdlLAotICAgICAgICAnVGVzdCBuYW1lZCAicmVzdHJpY3RlZCIgaW5hcHByb3ByaWF0ZWx5
IHJldHVybmVkIGEgdmFsdWUnCisgICAgICAgICdUZXN0IG5hbWVkICJyZXN0cmljdGVkIiBwYXNz
ZWQgYSBmdW5jdGlvbiB0byBgdGVzdGAgdGhhdCByZXR1cm5lZCBhIHZhbHVlLicKICAgICAgICk7
CiAgICAgICBhc3NlcnRfZXF1YWxzKHRlc3RzLmJlZm9yZSwgJ1BBU1MnKTsKICAgICAgIGFzc2Vy
dF9lcXVhbHModGVzdHMucmVzdHJpY3RlZCwgJ1BBU1MnKTsKZGlmZiAtLWdpdCBhL0xheW91dFRl
c3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMv
dW5pdC93M2MtaW1wb3J0LmxvZyBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZv
cm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvdW5pdC93M2MtaW1wb3J0LmxvZwppbmRleCA2
YjIyNDcxMTI0MTEwNDAzOGI1OTgyZWY3YjA0ZWIxZDEzYzg0M2U0Li5iN2I0NDI5OTdkNDZiNDEy
OWY4ZjBiOTYyY2IwYzZkYzhjZDRiY2EwIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9pbXBvcnRl
ZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL3VuaXQvdzNjLWlt
cG9ydC5sb2cKKysrIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0
cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy91bml0L3czYy1pbXBvcnQubG9nCkBAIC0xNyw2ICsxNyw3
IEBAIExpc3Qgb2YgZmlsZXM6CiAvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9y
bS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy91bml0L2Fzc2VydF9pbXBsZW1lbnRzLmh0bWwK
IC9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90
ZXN0L3Rlc3RzL3VuaXQvYXNzZXJ0X2ltcGxlbWVudHNfb3B0aW9uYWwuaHRtbAogL0xheW91dFRl
c3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMv
dW5pdC9hc3NlcnRfb2JqZWN0X2VxdWFscy5odG1sCisvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNj
L3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy91bml0L2FzeW5jLXRlc3Qt
cmV0dXJuLXJlc3RyaWN0aW9ucy5odG1sCiAvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1w
bGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy91bml0L2Jhc2ljLmh0bWwKIC9MYXlv
dXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rl
c3RzL3VuaXQvZXhjZXB0aW9uYWwtY2FzZXMtdGltZW91dHMuaHRtbAogL0xheW91dFRlc3RzL2lt
cG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvdW5pdC9l
eGNlcHRpb25hbC1jYXNlcy5odG1sCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93
M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3RveC5pbmkgYi9MYXlvdXRUZXN0
cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3RveC5pbmkK
aW5kZXggYTdhMDJlNGI5M2JkYzAwOWVmMGIwNWNiYzAzOWMzOTc3ZmNkZDQ2ZS4uMjY2YTZlODk1
MmUwNGQ5MDEyMDY0ODM2MTRiZGE5MDk3OTMzYmI4ZSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMv
aW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90b3guaW5pCisr
KyBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2Vz
L3Rlc3QvdG94LmluaQpAQCAtMSw2ICsxLDUgQEAKIFt0b3hdCi0jIE5vdGUgdGhhdCBvbmx5IHB5
MjcgaXMgcnVuIGluIENJLgotZW52bGlzdCA9IHB5MjcscHkzNgorZW52bGlzdCA9IHB5MjcscHkz
NixweTM4CiBza2lwc2Rpc3Q9VHJ1ZQogCiBbdGVzdGVudl0KQEAgLTgsNyArNyw3IEBAIHBhc3Nl
bnY9RElTUExBWSAjIE5lY2Vzc2FyeSBmb3IgdGhlIHNwYXduZWQgR2Vja29Ecml2ZXIgcHJvY2Vz
cyB0byBjb25uZWN0IHRvCiAgICAgICAgICAgICAgICAgIyB0aGUgYXBwcm9wcmlhdGUgZGlzcGxh
eS4KIGRlcHMgPQogICBodG1sNWxpYgotICBweXRlc3Q+PTIuOQorICBweXRlc3Q+PTIuOSw8NiAj
IHBpbm5lZCB0byA8NiBkdWUgdG8gaHR0cHM6Ly9naXRodWIuY29tL3dlYi1wbGF0Zm9ybS10ZXN0
cy93cHQvaXNzdWVzLzI2MTMyCiAgIHB5dmlydHVhbGRpc3BsYXkKICAgc2l4CiAgIHJlcXVlc3Rz
CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3Rz
L3Jlc291cmNlcy90ZXN0L3dwdHNlcnZlci5weSBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93
ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3Qvd3B0c2VydmVyLnB5CmluZGV4IGQ0N2Uz
MjVmYmVmNjRhNDI1YmE5MWYyMWE0OWE2ZDI3ZTAzYTdlM2IuLmE1MDRhNzZhNDZlMDBkYjhmOWJi
NGExOWRjOWRjYTU4ZWMxYzgzMTQgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3cz
Yy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3Qvd3B0c2VydmVyLnB5CisrKyBiL0xh
eW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3Qv
d3B0c2VydmVyLnB5CkBAIC0yNCw2ICsyNCw4IEBAIGNsYXNzIFdQVFNlcnZlcihvYmplY3QpOgog
ICAgIGRlZiBzdGFydChzZWxmKToKICAgICAgICAgc2VsZi5kZXZudWxsID0gb3Blbihvcy5kZXZu
dWxsLCAndycpCiAgICAgICAgIHdwdHNlcnZlX2NtZCA9IFtvcy5wYXRoLmpvaW4oc2VsZi53cHRf
cm9vdCwgJ3dwdCcpLCAnc2VydmUnXQorICAgICAgICBpZiBzeXMuZXhlY3V0YWJsZToKKyAgICAg
ICAgICAgIHdwdHNlcnZlX2NtZFswOjBdID0gW3N5cy5leGVjdXRhYmxlXQogICAgICAgICBsb2dn
aW5nLmluZm8oJ0V4ZWN1dGluZyAlcycgJSAnICcuam9pbih3cHRzZXJ2ZV9jbWQpKQogICAgICAg
ICBzZWxmLnByb2MgPSBzdWJwcm9jZXNzLlBvcGVuKAogICAgICAgICAgICAgd3B0c2VydmVfY21k
LApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0
cy9yZXNvdXJjZXMvdGVzdGRyaXZlci1hY3Rpb25zLmpzIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQv
dzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdGRyaXZlci1hY3Rpb25zLmpzCmlu
ZGV4IDg3MGEyZThlMjY2NzgwODVmODBjMDMwZDQzNmRkMTM2ODZmYjliMGIuLmYzZTYzODhlOGFj
ZDE5OThkODk3NTAxNTBlMDc3OWRmMzI3YTU0MTcgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2lt
cG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3Rkcml2ZXItYWN0aW9u
cy5qcworKysgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jl
c291cmNlcy90ZXN0ZHJpdmVyLWFjdGlvbnMuanMKQEAgLTksNiArOSw3IEBACiAgIGZ1bmN0aW9u
IEFjdGlvbnMoZGVmYXVsdFRpY2tEdXJhdGlvbj0xNikgewogICAgIHRoaXMuc291cmNlVHlwZXMg
PSBuZXcgTWFwKFtbImtleSIsIEtleVNvdXJjZV0sCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFsicG9pbnRlciIsIFBvaW50ZXJTb3VyY2VdLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBbIndoZWVsIiwgV2hlZWxTb3VyY2VdLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBbIm5vbmUiLCBHZW5lcmFsU291cmNlXV0pOwogICAgIHRoaXMuc291cmNlcyA9
IG5ldyBNYXAoKTsKICAgICB0aGlzLnNvdXJjZU9yZGVyID0gW107CkBAIC0yMiw2ICsyMyw3IEBA
CiAgICAgdGhpcy5jcmVhdGVTb3VyY2UoIm5vbmUiKTsKICAgICB0aGlzLnRpY2tJZHggPSAwOwog
ICAgIHRoaXMuZGVmYXVsdFRpY2tEdXJhdGlvbiA9IGRlZmF1bHRUaWNrRHVyYXRpb247CisgICAg
dGhpcy5jb250ZXh0ID0gbnVsbDsKICAgfQogCiAgIEFjdGlvbnMucHJvdG90eXBlID0gewpAQCAt
NjUsNyArNjcsMTcgQEAKICAgICAgIH0gY2F0Y2goZSkgewogICAgICAgICByZXR1cm4gUHJvbWlz
ZS5yZWplY3QoZSk7CiAgICAgICB9Ci0gICAgICByZXR1cm4gdGVzdF9kcml2ZXIuYWN0aW9uX3Nl
cXVlbmNlKGFjdGlvbnMpOworICAgICAgcmV0dXJuIHRlc3RfZHJpdmVyLmFjdGlvbl9zZXF1ZW5j
ZShhY3Rpb25zLCB0aGlzLmNvbnRleHQpOworICAgIH0sCisKKyAgICAvKioKKyAgICAgKiBTZXQg
dGhlIGNvbnRleHQgZm9yIHRoZSBhY3Rpb25zCisgICAgICoKKyAgICAgKiBAcGFyYW0ge1dpbmRv
d1Byb3h5fSBjb250ZXh0IC0gQ29udGV4dCBpbiB3aGljaCB0byBydW4gdGhlIGFjdGlvbiBzZXF1
ZW5jZQorICAgICAqLworICAgIHNldENvbnRleHQ6IGZ1bmN0aW9uKGNvbnRleHQpIHsKKyAgICAg
IHRoaXMuY29udGV4dCA9IGNvbnRleHQ7CisgICAgICByZXR1cm4gdGhpczsKICAgICB9LAogCiAg
ICAgLyoqCkBAIC03Myw3ICs4NSw3IEBACiAgICAgICogSWYgbm8gbmFtZSBpcyBwYXNzZWQsIGEg
bmV3IHNvdXJjZSB3aXRoIHRoZSBnaXZlbiB0eXBlIGlzCiAgICAgICogY3JlYXRlZC4KICAgICAg
KgotICAgICAqIEBwYXJhbSB7U3RyaW5nfSB0eXBlIC0gU291cmNlIHR5cGUgKCdub25lJywgJ2tl
eScsIG9yICdwb2ludGVyJykKKyAgICAgKiBAcGFyYW0ge1N0cmluZ30gdHlwZSAtIFNvdXJjZSB0
eXBlICgnbm9uZScsICdrZXknLCAncG9pbnRlcicsIG9yICd3aGVlbCcpCiAgICAgICogQHBhcmFt
IHtTdHJpbmc/fSBuYW1lIC0gTmFtZSBvZiB0aGUgc291cmNlCiAgICAgICogQHJldHVybnMge1Nv
dXJjZX0gU291cmNlIG9iamVjdCBmb3IgdGhhdCBzb3VyY2UuCiAgICAgICovCkBAIC0xNTQsNiAr
MTY2LDMyIEBACiAgICAgICByZXR1cm4gdGhpczsKICAgICB9LAogCisgICAgLyoqCisgICAgICog
QWRkIGEgbmV3IHdoZWVsIGlucHV0IHNvdXJjZSB3aXRoIHRoZSBnaXZlbiBuYW1lCisgICAgICoK
KyAgICAgKiBAcGFyYW0ge1N0cmluZ30gdHlwZSAtIE5hbWUgb2YgdGhlIHdoZWVsIHNvdXJjZQor
ICAgICAqIEBwYXJhbSB7Qm9vbH0gc2V0IC0gU2V0IHNvdXJjZSBhcyB0aGUgZGVmYXVsdCB3aGVl
bCBzb3VyY2UKKyAgICAgKiBAcmV0dXJucyB7QWN0aW9uc30KKyAgICAgKi8KKyAgICBhZGRXaGVl
bDogZnVuY3Rpb24obmFtZSwgc2V0PXRydWUpIHsKKyAgICAgIHRoaXMuY3JlYXRlU291cmNlKCJ3
aGVlbCIsIG5hbWUpOworICAgICAgaWYgKHNldCkgeworICAgICAgICB0aGlzLnNldFdoZWVsKG5h
bWUpOworICAgICAgfQorICAgICAgcmV0dXJuIHRoaXM7CisgICAgfSwKKworICAgIC8qKgorICAg
ICAqIFNldCB0aGUgY3VycmVudCBkZWZhdWx0IHdoZWVsIHNvdXJjZQorICAgICAqCisgICAgICog
QHBhcmFtIHtTdHJpbmd9IG5hbWUgLSBOYW1lIG9mIHRoZSB3aGVlbCBzb3VyY2UKKyAgICAgKiBA
cmV0dXJucyB7QWN0aW9uc30KKyAgICAgKi8KKyAgICBzZXRXaGVlbDogZnVuY3Rpb24obmFtZSkg
eworICAgICAgdGhpcy5zZXRTb3VyY2UoIndoZWVsIiwgbmFtZSk7CisgICAgICByZXR1cm4gdGhp
czsKKyAgICB9LAorCiAgICAgY3JlYXRlU291cmNlOiBmdW5jdGlvbih0eXBlLCBuYW1lLCBwYXJh
bWV0ZXJzPXt9KSB7CiAgICAgICBpZiAoIXRoaXMuc291cmNlcy5oYXModHlwZSkpIHsKICAgICAg
ICAgdGhyb3cgbmV3IEVycm9yKGAke3R5cGV9IGlzIG5vdCBhIHZhbGlkIGFjdGlvbiB0eXBlYCk7
CkBAIC0xOTYsOCArMjM0LDkgQEAKICAgICAgKgogICAgICAqIEBwYXJhbSB7TnVtYmVyP30gZHVy
YXRpb24gLSBNaW5pbXVtIGxlbmd0aCBvZiB0aGUgdGljayBpbiBtcy4KICAgICAgKiBAcGFyYW0g
e1N0cmluZ30gc291cmNlVHlwZSAtIHNvdXJjZSB0eXBlCi0gICAgICogQHBhcmFtIHtTdHJpbmc/
fSBzb3VyY2VOYW1lIC0gTmFtZWQga2V5IG9yIHBvaW50ZXIgc291cmNlIHRvIHVzZSBvciBudWxs
IGZvciB0aGUgZGVmYXVsdAotICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtl
eSBvciBwb2ludGVyIHNvdXJjZQorICAgICAqIEBwYXJhbSB7U3RyaW5nP30gc291cmNlTmFtZSAt
IE5hbWVkIGtleSwgcG9pbnRlciBvciB3aGVlbCBzb3VyY2UgdG8gdXNlCisgICAgICogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgb3IgbnVsbCBmb3IgdGhlIGRlZmF1bHQga2V5LCBwb2lu
dGVyIG9yCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hlZWwgc291cmNl
CiAgICAgICogQHJldHVybnMge0FjdGlvbnN9CiAgICAgICovCiAgICAgcGF1c2U6IGZ1bmN0aW9u
KGR1cmF0aW9uPTAsIHNvdXJjZVR5cGU9Im5vbmUiLCB7c291cmNlTmFtZT1udWxsfT17fSkgewpA
QCAtMjgwLDYgKzMxOSwyNyBAQAogICAgICAgc291cmNlLnBvaW50ZXJNb3ZlKHRoaXMsIHgsIHks
IGR1cmF0aW9uLCBvcmlnaW4pOwogICAgICAgcmV0dXJuIHRoaXM7CiAgICAgfSwKKworICAgIC8q
KgorICAgICAqIENyZWF0ZSBhIHNjcm9sbCBldmVudCBmb3IgdGhlIGN1cnJlbnQgZGVmYXVsdCB3
aGVlbCBzb3VyY2UKKyAgICAgKgorICAgICAqIEBwYXJhbSB7TnVtYmVyfSB4IC0gbW91c2UgY3Vy
c29yIHggY29vcmRpbmF0ZQorICAgICAqIEBwYXJhbSB7TnVtYmVyfSB5IC0gbW91c2UgY3Vyc29y
IHkgY29vcmRpbmF0ZQorICAgICAqIEBwYXJhbSB7TnVtYmVyfSBkZWx0YVggLSBzY3JvbGwgZGVs
dGEgdmFsdWUgYWxvbmcgdGhlIHgtYXhpcyBpbiBwaXhlbHMKKyAgICAgKiBAcGFyYW0ge051bWJl
cn0gZGVsdGFZIC0gc2Nyb2xsIGRlbHRhIHZhbHVlIGFsb25nIHRoZSB5LWF4aXMgaW4gcGl4ZWxz
CisgICAgICogQHBhcmFtIHtTdHJpbmd8RWxlbWVudH0gb3JpZ2luIC0gT3JpZ2luIG9mIHRoZSBj
b29yZGluYXRlIHN5c3RlbS4KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBFaXRoZXIgInZpZXdwb3J0IiBvciBhbiBFbGVtZW50CisgICAgICogQHBhcmFtIHtOdW1iZXI/
fSBkdXJhdGlvbiAtIFRpbWUgaW4gbXMgZm9yIHRoZSBzY3JvbGwKKyAgICAgKiBAcGFyYW0ge1N0
cmluZz99IHNvdXJjZU5hbWUgLSBOYW1lZCB3aGVlbCBzb3VyY2UgdG8gdXNlIG9yIG51bGwgZm9y
IHRoZQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQgd2hlZWwg
c291cmNlCisgICAgICogQHJldHVybnMge0FjdGlvbnN9CisgICAgICovCisgICAgc2Nyb2xsOiBm
dW5jdGlvbih4LCB5LCBkZWx0YVgsIGRlbHRhWSwKKyAgICAgICAgICAgICAgICAgICAgIHtvcmln
aW49InZpZXdwb3J0IiwgZHVyYXRpb24sIHNvdXJjZU5hbWU9bnVsbH09e30pIHsKKyAgICAgIGxl
dCBzb3VyY2UgPSB0aGlzLmdldFNvdXJjZSgid2hlZWwiLCBzb3VyY2VOYW1lKTsKKyAgICAgIHNv
dXJjZS5zY3JvbGwodGhpcywgeCwgeSwgZGVsdGFYLCBkZWx0YVksIGR1cmF0aW9uLCBvcmlnaW4p
OworICAgICAgcmV0dXJuIHRoaXM7CisgICAgfSwKICAgfTsKIAogICBmdW5jdGlvbiBHZW5lcmFs
U291cmNlKCkgewpAQCAtNDE3LDUgKzQ3Nyw0NiBAQAogICAgIH0sCiAgIH07CiAKKyAgZnVuY3Rp
b24gV2hlZWxTb3VyY2UoKSB7CisgICAgdGhpcy5hY3Rpb25zID0gbmV3IE1hcCgpOworICB9CisK
KyAgV2hlZWxTb3VyY2UucHJvdG90eXBlID0geworICAgIHNlcmlhbGl6ZTogZnVuY3Rpb24odGlj
a0NvdW50KSB7CisgICAgICBpZiAoIXRoaXMuYWN0aW9ucy5zaXplKSB7CisgICAgICAgIHJldHVy
biB1bmRlZmluZWQ7CisgICAgICB9CisgICAgICBsZXQgYWN0aW9ucyA9IFtdOworICAgICAgbGV0
IGRhdGEgPSB7InR5cGUiOiAid2hlZWwiLCAiYWN0aW9ucyI6IGFjdGlvbnN9OworICAgICAgZm9y
IChsZXQgaT0wOyBpPHRpY2tDb3VudDsgaSsrKSB7CisgICAgICAgIGlmICh0aGlzLmFjdGlvbnMu
aGFzKGkpKSB7CisgICAgICAgICAgYWN0aW9ucy5wdXNoKHRoaXMuYWN0aW9ucy5nZXQoaSkpOwor
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgIGFjdGlvbnMucHVzaCh7InR5cGUiOiAicGF1c2Ui
fSk7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICAgIHJldHVybiBkYXRhOworICAgIH0sCisKKyAg
ICBzY3JvbGw6IGZ1bmN0aW9uKGFjdGlvbnMsIHgsIHksIGRlbHRhWCwgZGVsdGFZLCBkdXJhdGlv
biwgb3JpZ2luKSB7CisgICAgICBsZXQgdGljayA9IGFjdGlvbnMudGlja0lkeDsKKyAgICAgIGlm
ICh0aGlzLmFjdGlvbnMuaGFzKHRpY2spKSB7CisgICAgICAgIHRpY2sgPSBhY3Rpb25zLmFkZFRp
Y2soKS50aWNrSWR4OworICAgICAgfQorICAgICAgdGhpcy5hY3Rpb25zLnNldCh0aWNrLCB7dHlw
ZTogInNjcm9sbCIsIHgsIHksIGRlbHRhWCwgZGVsdGFZLCBvcmlnaW59KTsKKyAgICAgIGlmIChk
dXJhdGlvbikgeworICAgICAgICB0aGlzLmFjdGlvbnMuZ2V0KHRpY2spLmR1cmF0aW9uID0gZHVy
YXRpb247CisgICAgICB9CisgICAgfSwKKworICAgIGFkZFBhdXNlOiBmdW5jdGlvbihhY3Rpb25z
LCBkdXJhdGlvbikgeworICAgICAgbGV0IHRpY2sgPSBhY3Rpb25zLnRpY2tJZHg7CisgICAgICBp
ZiAodGhpcy5hY3Rpb25zLmhhcyh0aWNrKSkgeworICAgICAgICB0aWNrID0gYWN0aW9ucy5hZGRU
aWNrKCkudGlja0lkeDsKKyAgICAgIH0KKyAgICAgIHRoaXMuYWN0aW9ucy5zZXQodGljaywge3R5
cGU6ICJwYXVzZSIsIGR1cmF0aW9uOiBkdXJhdGlvbn0pOworICAgIH0sCisgIH07CisKICAgdGVz
dF9kcml2ZXIuQWN0aW9ucyA9IEFjdGlvbnM7CiB9KSgpOwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVz
dHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdGRyaXZlci5q
cyBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2Vz
L3Rlc3Rkcml2ZXIuanMKaW5kZXggYTg1ODhiNDRmOTRjNzhmMGEzYzI1NDIzODViY2UyMGNmZDFh
NjRjOS4uYzUzYjI0MTM2YzA5MWYwNWU0ZmZiZTI4NmQwNjBhYmEwZmE2NmNkZiAxMDA2NDQKLS0t
IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMv
dGVzdGRyaXZlci5qcworKysgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3Jt
LXRlc3RzL3Jlc291cmNlcy90ZXN0ZHJpdmVyLmpzCkBAIC0xLDYgKzEsNyBAQAogKGZ1bmN0aW9u
KCkgewogICAgICJ1c2Ugc3RyaWN0IjsKICAgICB2YXIgaWRDb3VudGVyID0gMDsKKyAgICBsZXQg
dGVzdGhhcm5lc3NfY29udGV4dCA9IG51bGw7CiAKICAgICBmdW5jdGlvbiBnZXRJblZpZXdDZW50
ZXJQb2ludChyZWN0KSB7CiAgICAgICAgIHZhciBsZWZ0ID0gTWF0aC5tYXgoMCwgcmVjdC5sZWZ0
KTsKQEAgLTE1LDcgKzE2LDggQEAKICAgICB9CiAKICAgICBmdW5jdGlvbiBnZXRQb2ludGVySW50
ZXJhY3RhYmxlUGFpbnRUcmVlKGVsZW1lbnQpIHsKLSAgICAgICAgaWYgKCF3aW5kb3cuZG9jdW1l
bnQuY29udGFpbnMoZWxlbWVudCkpIHsKKyAgICAgICAgbGV0IGVsZW1lbnREb2N1bWVudCA9IGVs
ZW1lbnQub3duZXJEb2N1bWVudDsKKyAgICAgICAgaWYgKCFlbGVtZW50RG9jdW1lbnQuY29udGFp
bnMoZWxlbWVudCkpIHsKICAgICAgICAgICAgIHJldHVybiBbXTsKICAgICAgICAgfQogCkBAIC0y
NywxMCArMjksMTAgQEAKIAogICAgICAgICB2YXIgY2VudGVyUG9pbnQgPSBnZXRJblZpZXdDZW50
ZXJQb2ludChyZWN0YW5nbGVzWzBdKTsKIAotICAgICAgICBpZiAoImVsZW1lbnRzRnJvbVBvaW50
IiBpbiBkb2N1bWVudCkgewotICAgICAgICAgICAgcmV0dXJuIGRvY3VtZW50LmVsZW1lbnRzRnJv
bVBvaW50KGNlbnRlclBvaW50WzBdLCBjZW50ZXJQb2ludFsxXSk7Ci0gICAgICAgIH0gZWxzZSBp
ZiAoIm1zRWxlbWVudHNGcm9tUG9pbnQiIGluIGRvY3VtZW50KSB7Ci0gICAgICAgICAgICB2YXIg
cnYgPSBkb2N1bWVudC5tc0VsZW1lbnRzRnJvbVBvaW50KGNlbnRlclBvaW50WzBdLCBjZW50ZXJQ
b2ludFsxXSk7CisgICAgICAgIGlmICgiZWxlbWVudHNGcm9tUG9pbnQiIGluIGVsZW1lbnREb2N1
bWVudCkgeworICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnREb2N1bWVudC5lbGVtZW50c0Zyb21Q
b2ludChjZW50ZXJQb2ludFswXSwgY2VudGVyUG9pbnRbMV0pOworICAgICAgICB9IGVsc2UgaWYg
KCJtc0VsZW1lbnRzRnJvbVBvaW50IiBpbiBlbGVtZW50RG9jdW1lbnQpIHsKKyAgICAgICAgICAg
IHZhciBydiA9IGVsZW1lbnREb2N1bWVudC5tc0VsZW1lbnRzRnJvbVBvaW50KGNlbnRlclBvaW50
WzBdLCBjZW50ZXJQb2ludFsxXSk7CiAgICAgICAgICAgICByZXR1cm4gQXJyYXkucHJvdG90eXBl
LnNsaWNlLmNhbGwocnYgPyBydiA6IFtdKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAg
IHRocm93IG5ldyBFcnJvcigiZG9jdW1lbnQuZWxlbWVudHNGcm9tUG9pbnQgdW5zdXBwb3J0ZWQi
KTsKQEAgLTQ3LDYgKzQ5LDMxIEBACiAgICAgICogQG5hbWVzcGFjZQogICAgICAqLwogICAgIHdp
bmRvdy50ZXN0X2RyaXZlciA9IHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIFNldCB0aGUgY29u
dGV4dCBpbiB3aGljaCB0ZXN0aGFybmVzcy5qcyBpcyBsb2FkZWQKKyAgICAgICAgICoKKyAgICAg
ICAgICogQHBhcmFtIHtXaW5kb3dQcm94eX0gY29udGV4dCAtIHRoZSB3aW5kb3cgY29udGFpbmlu
ZyB0ZXN0aGFybmVzcy5qcworICAgICAgICAgKiovCisgICAgICAgIHNldF90ZXN0X2NvbnRleHQ6
IGZ1bmN0aW9uKGNvbnRleHQpIHsKKyAgICAgICAgICBpZiAod2luZG93LnRlc3RfZHJpdmVyX2lu
dGVybmFsLnNldF90ZXN0X2NvbnRleHQpIHsKKyAgICAgICAgICAgIHdpbmRvdy50ZXN0X2RyaXZl
cl9pbnRlcm5hbC5zZXRfdGVzdF9jb250ZXh0KGNvbnRleHQpOworICAgICAgICAgIH0KKyAgICAg
ICAgICB0ZXN0aGFybmVzc19jb250ZXh0ID0gY29udGV4dDsKKyAgICAgICAgfSwKKworICAgICAg
ICAvKioKKyAgICAgICAgICogcG9zdE1lc3NhZ2UgdG8gdGhlIGNvbnRleHQgY29udGFpbmluZyB0
ZXN0aGFybmVzcy5qcworICAgICAgICAgKgorICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gbXNn
IC0gdGhlIGRhdGEgdG8gUE9TVAorICAgICAgICAgKiovCisgICAgICAgIG1lc3NhZ2VfdGVzdDog
ZnVuY3Rpb24obXNnKSB7CisgICAgICAgICAgICBsZXQgdGFyZ2V0ID0gdGVzdGhhcm5lc3NfY29u
dGV4dDsKKyAgICAgICAgICAgIGlmICh0ZXN0aGFybmVzc19jb250ZXh0ID09PSBudWxsKSB7Cisg
ICAgICAgICAgICAgICAgdGFyZ2V0ID0gd2luZG93OworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgdGFyZ2V0LnBvc3RNZXNzYWdlKG1zZywgIioiKTsKKyAgICAgICAgfSwKKwogICAgICAgICAv
KioKICAgICAgICAgICogVHJpZ2dlciB1c2VyIGludGVyYWN0aW9uIGluIG9yZGVyIHRvIGdyYW50
IGFkZGl0aW9uYWwgcHJpdmlsZWdlcyB0bwogICAgICAgICAgKiBhIHByb3ZpZGVkIGZ1bmN0aW9u
LgpAQCAtNTYsMzAgKzgzLDM1IEBACiAgICAgICAgICAqIEBwYXJhbSB7U3RyaW5nfSBpbnRlbnQg
LSBhIGRlc2NyaXB0aW9uIG9mIHRoZSBhY3Rpb24gd2hpY2ggbXVjaCBiZQogICAgICAgICAgKiAg
ICAgICAgICAgICAgICAgICAgICAgICAgdHJpZ2dlcmVkIGJ5IHVzZXIgaW50ZXJhY3Rpb24KICAg
ICAgICAgICogQHBhcmFtIHtGdW5jdGlvbn0gYWN0aW9uIC0gY29kZSByZXF1aXJpbmcgZXNjYWxh
dGVkIHByaXZpbGVnZXMKKyAgICAgICAgICogQHBhcmFtIHtXaW5kb3dQcm94eX0gY29udGV4dCAt
IEJyb3dzaW5nIGNvbnRleHQgaW4gd2hpY2gKKyAgICAgICAgICogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHRvIHJ1biB0aGUgY2FsbCwgb3IgbnVsbCBmb3IgdGhlIGN1cnJlbnQKKyAg
ICAgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyb3dzaW5nIGNvbnRleHQu
CiAgICAgICAgICAqCiAgICAgICAgICAqIEByZXR1cm5zIHtQcm9taXNlfSBmdWxmaWxsZWQgZm9s
bG93aW5nIHVzZXIgaW50ZXJhY3Rpb24gYW5kCiAgICAgICAgICAqICAgICAgICAgICAgICAgICAg
ICBleGVjdXRpb24gb2YgdGhlIHByb3ZpZGVkIGBhY3Rpb25gIGZ1bmN0aW9uOwogICAgICAgICAg
KiAgICAgICAgICAgICAgICAgICAgcmVqZWN0ZWQgaWYgaW50ZXJhY3Rpb24gZmFpbHMgb3IgdGhl
IHByb3ZpZGVkCiAgICAgICAgICAqICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiB0aHJvd3Mg
YW4gZXJyb3IKICAgICAgICAgICovCi0gICAgICAgIGJsZXNzOiBmdW5jdGlvbihpbnRlbnQsIGFj
dGlvbikgewotICAgICAgICAgICAgdmFyIGJ1dHRvbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQo
ImJ1dHRvbiIpOworICAgICAgICBibGVzczogZnVuY3Rpb24oaW50ZW50LCBhY3Rpb24sIGNvbnRl
eHQ9bnVsbCkgeworICAgICAgICAgICAgbGV0IGNvbnRleHREb2N1bWVudCA9IGNvbnRleHQgPyBj
b250ZXh0LmRvY3VtZW50IDogZG9jdW1lbnQ7CisgICAgICAgICAgICB2YXIgYnV0dG9uID0gY29u
dGV4dERvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImJ1dHRvbiIpOwogICAgICAgICAgICAgYnV0dG9u
LmlubmVySFRNTCA9ICJUaGlzIHRlc3QgcmVxdWlyZXMgdXNlciBpbnRlcmFjdGlvbi48YnIgLz4i
ICsKICAgICAgICAgICAgICAgICAiUGxlYXNlIGNsaWNrIGhlcmUgdG8gYWxsb3cgIiArIGludGVu
dCArICIuIjsKICAgICAgICAgICAgIGJ1dHRvbi5pZCA9ICJ3cHQtdGVzdC1kcml2ZXItYmxlc3Mt
IiArIChpZENvdW50ZXIgKz0gMSk7Ci0gICAgICAgICAgICBjb25zdCBlbGVtID0gZG9jdW1lbnQu
Ym9keSB8fCBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7CisgICAgICAgICAgICBjb25zdCBlbGVt
ID0gY29udGV4dERvY3VtZW50LmJvZHkgfHwgY29udGV4dERvY3VtZW50LmRvY3VtZW50RWxlbWVu
dDsKICAgICAgICAgICAgIGVsZW0uYXBwZW5kQ2hpbGQoYnV0dG9uKTsKIAotICAgICAgICAgICAg
cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkgewotICAgICAgICAg
ICAgICAgICAgICBidXR0b24uYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCByZXNvbHZlKTsKKyAg
ICAgICAgICAgIGxldCB3YWl0X2NsaWNrID0gbmV3IFByb21pc2UocmVzb2x2ZSA9PiBidXR0b24u
YWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCByZXNvbHZlKSk7CiAKLSAgICAgICAgICAgICAgICAg
ICAgdGVzdF9kcml2ZXIuY2xpY2soYnV0dG9uKS5jYXRjaChyZWplY3QpOwotICAgICAgICAgICAg
ICAgIH0pLnRoZW4oZnVuY3Rpb24oKSB7CisgICAgICAgICAgICByZXR1cm4gdGVzdF9kcml2ZXIu
Y2xpY2soYnV0dG9uKQorICAgICAgICAgICAgICAgIC50aGVuKHdhaXRfY2xpY2spCisgICAgICAg
ICAgICAgICAgLnRoZW4oZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgIGJ1dHRvbi5y
ZW1vdmUoKTsKIAogICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGFjdGlvbiA9PT0gImZ1
bmN0aW9uIikgewogICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGFjdGlvbigpOwogICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsOwogICAg
ICAgICAgICAgICAgIH0pOwogICAgICAgICB9LAogCkBAIC05NSwxNCArMTI3LDYgQEAKICAgICAg
ICAgICogICAgICAgICAgICAgICAgICAgIHRoZSBjYXNlcyB0aGUgV2ViRHJpdmVyIGNvbW1hbmQg
ZXJyb3JzCiAgICAgICAgICAqLwogICAgICAgICBjbGljazogZnVuY3Rpb24oZWxlbWVudCkgewot
ICAgICAgICAgICAgaWYgKHdpbmRvdy50b3AgIT09IHdpbmRvdykgewotICAgICAgICAgICAgICAg
IHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoImNhbiBvbmx5IGNsaWNrIGluIHRvcC1s
ZXZlbCB3aW5kb3ciKSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmICghd2luZG93
LmRvY3VtZW50LmNvbnRhaW5zKGVsZW1lbnQpKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIFBy
b21pc2UucmVqZWN0KG5ldyBFcnJvcigiZWxlbWVudCBpbiBkaWZmZXJlbnQgZG9jdW1lbnQgb3Ig
c2hhZG93IHRyZWUiKSk7Ci0gICAgICAgICAgICB9Ci0KICAgICAgICAgICAgIGlmICghaW5WaWV3
KGVsZW1lbnQpKSB7CiAgICAgICAgICAgICAgICAgZWxlbWVudC5zY3JvbGxJbnRvVmlldyh7YmVo
YXZpb3I6ICJpbnN0YW50IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBibG9jazogImVuZCIsCkBAIC0xMzUsMTQgKzE1OSw2IEBACiAgICAgICAgICAqICAgICAgICAg
ICAgICAgICAgICB0aGUgY2FzZXMgdGhlIFdlYkRyaXZlciBjb21tYW5kIGVycm9ycwogICAgICAg
ICAgKi8KICAgICAgICAgc2VuZF9rZXlzOiBmdW5jdGlvbihlbGVtZW50LCBrZXlzKSB7Ci0gICAg
ICAgICAgICBpZiAod2luZG93LnRvcCAhPT0gd2luZG93KSB7Ci0gICAgICAgICAgICAgICAgcmV0
dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcigiY2FuIG9ubHkgc2VuZCBrZXlzIGluIHRvcC1s
ZXZlbCB3aW5kb3ciKSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmICghd2luZG93
LmRvY3VtZW50LmNvbnRhaW5zKGVsZW1lbnQpKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIFBy
b21pc2UucmVqZWN0KG5ldyBFcnJvcigiZWxlbWVudCBpbiBkaWZmZXJlbnQgZG9jdW1lbnQgb3Ig
c2hhZG93IHRyZWUiKSk7Ci0gICAgICAgICAgICB9Ci0KICAgICAgICAgICAgIGlmICghaW5WaWV3
KGVsZW1lbnQpKSB7CiAgICAgICAgICAgICAgICAgZWxlbWVudC5zY3JvbGxJbnRvVmlldyh7YmVo
YXZpb3I6ICJpbnN0YW50IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBibG9jazogImVuZCIsCkBAIC0xNjYsMzQgKzE4Miw0MiBAQAogICAgICAgICAgKiBodHRwczov
L2dpdGh1Yi5jb20vV0lDRy9wYWdlLWxpZmVjeWNsZS9ibG9iL21hc3Rlci9SRUFETUUubWR8TGlm
ZWN5Y2xlIEFQSQogICAgICAgICAgKiBmb3IgV2ViIFBhZ2VzfQogICAgICAgICAgKgorICAgICAg
ICAgKiBAcGFyYW0ge1dpbmRvd1Byb3h5fSBjb250ZXh0IC0gQnJvd3NpbmcgY29udGV4dCBpbiB3
aGljaAorICAgICAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gcnVuIHRo
ZSBjYWxsLCBvciBudWxsIGZvciB0aGUgY3VycmVudAorICAgICAgICAgKiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgYnJvd3NpbmcgY29udGV4dC4KKyAgICAgICAgICoKICAgICAgICAg
ICogQHJldHVybnMge1Byb21pc2V9IGZ1bGZpbGxlZCBhZnRlciB0aGUgZnJlZXplIHJlcXVlc3Qg
aXMgc2VudCwgb3IgcmVqZWN0ZWQKICAgICAgICAgICogICAgICAgICAgICAgICAgICAgIGluIGNh
c2UgdGhlIFdlYkRyaXZlciBjb21tYW5kIGVycm9ycwogICAgICAgICAgKi8KLSAgICAgICAgZnJl
ZXplOiBmdW5jdGlvbigpIHsKKyAgICAgICAgZnJlZXplOiBmdW5jdGlvbihjb250ZXh0PW51bGwp
IHsKICAgICAgICAgICAgIHJldHVybiB3aW5kb3cudGVzdF9kcml2ZXJfaW50ZXJuYWwuZnJlZXpl
KCk7CiAgICAgICAgIH0sCiAKICAgICAgICAgLyoqCiAgICAgICAgICAqIFNlbmQgYSBzZXF1ZW5j
ZSBvZiBhY3Rpb25zCiAgICAgICAgICAqCi0gICAgICAgICAqIFRoaXMgZnVuY3Rpb24gc2VuZHMg
YSBzZXF1ZW5jZSBvZiBhY3Rpb25zIHRvIHRoZSB0b3AgbGV2ZWwgd2luZG93CisgICAgICAgICAq
IFRoaXMgZnVuY3Rpb24gc2VuZHMgYSBzZXF1ZW5jZSBvZiBhY3Rpb25zCiAgICAgICAgICAqIHRv
IHBlcmZvcm0uIEl0IGlzIG1vZGVsZWQgYWZ0ZXIgdGhlIGJlaGF2aW91ciBvZiB7QGxpbmsKICAg
ICAgICAgICogaHR0cHM6Ly93M2MuZ2l0aHViLmlvL3dlYmRyaXZlci8jYWN0aW9uc3xXZWJEcml2
ZXIgQWN0aW9ucyBDb21tYW5kfQogICAgICAgICAgKgogICAgICAgICAgKiBAcGFyYW0ge0FycmF5
fSBhY3Rpb25zIC0gYW4gYXJyYXkgb2YgYWN0aW9ucy4gVGhlIGZvcm1hdCBpcyB0aGUgc2FtZSBh
cyB0aGUgYWN0aW9ucwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvcGVy
dHkgb2YgdGhlIFdlYkRyaXZlciBjb21tYW5kIHtAbGluawotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaHR0cHM6Ly93M2MuZ2l0aHViLmlvL3dlYmRyaXZlci8jcGVyZm9ybS1h
Y3Rpb25zfFBlcmZvcm0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFjdGlv
bnN9IGNvbW1hbmQuIEVhY2ggZWxlbWVudCBpcyBhbiBvYmplY3QgcmVwcmVzZW50aW5nIGFuCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dCBzb3VyY2UgYW5kIGVhY2gg
aW5wdXQgc291cmNlIGl0c2VsZiBoYXMgYW4gYWN0aW9ucwotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcHJvcGVydHkgZGV0YWlsaW5nIHRoZSBiZWhhdmlvdXIgb2YgdGhhdCBz
b3VyY2UgYXQgZWFjaCB0aW1lc3RlcAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgKG9yIHRpY2spLiBBdXRob3JzIGFyZSBub3QgZXhwZWN0ZWQgdG8gY29uc3RydWN0IHRoZSBh
Y3Rpb25zCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXF1ZW5jZSBieSBo
YW5kLCBidXQgdG8gdXNlIHRoZSBidWlsZGVyIGFwaSBwcm92aWRlZCBpbgotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdGVzdGRyaXZlci1hY3Rpb25zLmpzCisgICAgICAgICAq
ICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eSBvZiB0aGUgV2ViRHJpdmVyIGNvbW1h
bmQge0BsaW5rCisgICAgICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICBodHRwczovL3cz
Yy5naXRodWIuaW8vd2ViZHJpdmVyLyNwZXJmb3JtLWFjdGlvbnN8UGVyZm9ybQorICAgICAgICAg
KiAgICAgICAgICAgICAgICAgICAgICAgICAgQWN0aW9uc30gY29tbWFuZC4gRWFjaCBlbGVtZW50
IGlzIGFuIG9iamVjdCByZXByZXNlbnRpbmcgYW4KKyAgICAgICAgICogICAgICAgICAgICAgICAg
ICAgICAgICAgIGlucHV0IHNvdXJjZSBhbmQgZWFjaCBpbnB1dCBzb3VyY2UgaXRzZWxmIGhhcyBh
biBhY3Rpb25zCisgICAgICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eSBk
ZXRhaWxpbmcgdGhlIGJlaGF2aW91ciBvZiB0aGF0IHNvdXJjZSBhdCBlYWNoIHRpbWVzdGVwCisg
ICAgICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAob3IgdGljaykuIEF1dGhvcnMgYXJl
IG5vdCBleHBlY3RlZCB0byBjb25zdHJ1Y3QgdGhlIGFjdGlvbnMKKyAgICAgICAgICogICAgICAg
ICAgICAgICAgICAgICAgICAgIHNlcXVlbmNlIGJ5IGhhbmQsIGJ1dCB0byB1c2UgdGhlIGJ1aWxk
ZXIgYXBpIHByb3ZpZGVkIGluCisgICAgICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICB0
ZXN0ZHJpdmVyLWFjdGlvbnMuanMKKyAgICAgICAgICogQHBhcmFtIHtXaW5kb3dQcm94eX0gY29u
dGV4dCAtIEJyb3dzaW5nIGNvbnRleHQgaW4gd2hpY2gKKyAgICAgICAgICogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHRvIHJ1biB0aGUgY2FsbCwgb3IgbnVsbCBmb3IgdGhlIGN1cnJl
bnQKKyAgICAgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyb3dzaW5nIGNv
bnRleHQuCisgICAgICAgICAqCiAgICAgICAgICAqIEByZXR1cm5zIHtQcm9taXNlfSBmdWZpbGVk
IGFmdGVyIHRoZSBhY3Rpb25zIGFyZSBwZXJmb3JtZWQsIG9yIHJlamVjdGVkIGluCiAgICAgICAg
ICAqICAgICAgICAgICAgICAgICAgICB0aGUgY2FzZXMgdGhlIFdlYkRyaXZlciBjb21tYW5kIGVy
cm9ycwogICAgICAgICAgKi8KLSAgICAgICAgYWN0aW9uX3NlcXVlbmNlOiBmdW5jdGlvbihhY3Rp
b25zKSB7Ci0gICAgICAgICAgICByZXR1cm4gd2luZG93LnRlc3RfZHJpdmVyX2ludGVybmFsLmFj
dGlvbl9zZXF1ZW5jZShhY3Rpb25zKTsKKyAgICAgICAgYWN0aW9uX3NlcXVlbmNlOiBmdW5jdGlv
bihhY3Rpb25zLCBjb250ZXh0PW51bGwpIHsKKyAgICAgICAgICAgIHJldHVybiB3aW5kb3cudGVz
dF9kcml2ZXJfaW50ZXJuYWwuYWN0aW9uX3NlcXVlbmNlKGFjdGlvbnMsIGNvbnRleHQpOwogICAg
ICAgICB9LAogCiAgICAgICAgIC8qKgpAQCAtMjAzLDExICsyMjcsMTUgQEAKICAgICAgICAgICog
YnkgUmVwb3J0aW5nT2JzZXJ2ZXIpIGZvciB0ZXN0aW5nIHB1cnBvc2VzLCBhcyBkZXNjcmliZWQg
aW4KICAgICAgICAgICoge0BsaW5rIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby9yZXBvcnRpbmcvI2dl
bmVyYXRlLXRlc3QtcmVwb3J0LWNvbW1hbmR9CiAgICAgICAgICAqCisgICAgICAgICAqIEBwYXJh
bSB7V2luZG93UHJveHl9IGNvbnRleHQgLSBCcm93c2luZyBjb250ZXh0IGluIHdoaWNoCisgICAg
ICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0byBydW4gdGhlIGNhbGwsIG9y
IG51bGwgZm9yIHRoZSBjdXJyZW50CisgICAgICAgICAqICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBicm93c2luZyBjb250ZXh0LgorICAgICAgICAgKgogICAgICAgICAgKiBAcmV0dXJu
cyB7UHJvbWlzZX0gZnVsZmlsbGVkIGFmdGVyIHRoZSByZXBvcnQgaXMgZ2VuZXJhdGVkLCBvcgog
ICAgICAgICAgKiAgICAgICAgICAgICAgICAgICAgcmVqZWN0ZWQgaWYgdGhlIHJlcG9ydCBnZW5l
cmF0aW9uIGZhaWxzCiAgICAgICAgICAqLwotICAgICAgICBnZW5lcmF0ZV90ZXN0X3JlcG9ydDog
ZnVuY3Rpb24obWVzc2FnZSkgewotICAgICAgICAgICAgcmV0dXJuIHdpbmRvdy50ZXN0X2RyaXZl
cl9pbnRlcm5hbC5nZW5lcmF0ZV90ZXN0X3JlcG9ydChtZXNzYWdlKTsKKyAgICAgICAgZ2VuZXJh
dGVfdGVzdF9yZXBvcnQ6IGZ1bmN0aW9uKG1lc3NhZ2UsIGNvbnRleHQ9bnVsbCkgeworICAgICAg
ICAgICAgcmV0dXJuIHdpbmRvdy50ZXN0X2RyaXZlcl9pbnRlcm5hbC5nZW5lcmF0ZV90ZXN0X3Jl
cG9ydChtZXNzYWdlLCBjb250ZXh0KTsKICAgICAgICAgfSwKIAogICAgICAgICAvKioKQEAgLTIy
MSw2ICsyNDksOSBAQAogICAgICAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9i
amVjdAogICAgICAgICAgKiBAcGFyYW0ge1N0cmluZ30gc3RhdGUgLSB0aGUgc3RhdGUgb2YgdGhl
IHBlcm1pc3Npb24KICAgICAgICAgICogQHBhcmFtIHtib29sZWFufSBvbmVfcmVhbG0gLSBPcHRp
b25hbC4gV2hldGhlciB0aGUgcGVybWlzc2lvbiBhcHBsaWVzIHRvIG9ubHkgb25lIHJlYWxtCisg
ICAgICAgICAqIEBwYXJhbSB7V2luZG93UHJveHl9IGNvbnRleHQgLSBCcm93c2luZyBjb250ZXh0
IGluIHdoaWNoCisgICAgICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0byBy
dW4gdGhlIGNhbGwsIG9yIG51bGwgZm9yIHRoZSBjdXJyZW50CisgICAgICAgICAqICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBicm93c2luZyBjb250ZXh0LgogICAgICAgICAgKgogICAg
ICAgICAgKiBUaGUgYWJvdmUgcGFyYW1zIGFyZSB1c2VkIHRvIGNyZWF0ZSBhIFtQZXJtaXNzaW9u
U2V0UGFyYW1ldGVyc117QGxpbmsKICAgICAgICAgICogaHR0cHM6Ly93M2MuZ2l0aHViLmlvL3Bl
cm1pc3Npb25zLyNkaWN0ZGVmLXBlcm1pc3Npb25zZXRwYXJhbWV0ZXJzfSBvYmplY3QKQEAgLTIy
OCwxMyArMjU5LDEzIEBACiAgICAgICAgICAqIEByZXR1cm5zIHtQcm9taXNlfSBmdWxmaWxsZWQg
YWZ0ZXIgdGhlIHBlcm1pc3Npb24gaXMgc2V0LCBvciByZWplY3RlZCBpZiBzZXR0aW5nIHRoZQog
ICAgICAgICAgKiAgICAgICAgICAgICAgICAgICAgcGVybWlzc2lvbiBmYWlscwogICAgICAgICAg
Ki8KLSAgICAgICAgc2V0X3Blcm1pc3Npb246IGZ1bmN0aW9uKGRlc2NyaXB0b3IsIHN0YXRlLCBv
bmVfcmVhbG0pIHsKKyAgICAgICAgc2V0X3Blcm1pc3Npb246IGZ1bmN0aW9uKGRlc2NyaXB0b3Is
IHN0YXRlLCBvbmVfcmVhbG0sIGNvbnRleHQ9bnVsbCkgewogICAgICAgICAgICAgbGV0IHBlcm1p
c3Npb25fcGFyYW1zID0gewogICAgICAgICAgICAgICBkZXNjcmlwdG9yLAogICAgICAgICAgICAg
ICBzdGF0ZSwKICAgICAgICAgICAgICAgb25lUmVhbG06IG9uZV9yZWFsbSwKICAgICAgICAgICAg
IH07Ci0gICAgICAgICAgICByZXR1cm4gd2luZG93LnRlc3RfZHJpdmVyX2ludGVybmFsLnNldF9w
ZXJtaXNzaW9uKHBlcm1pc3Npb25fcGFyYW1zKTsKKyAgICAgICAgICAgIHJldHVybiB3aW5kb3cu
dGVzdF9kcml2ZXJfaW50ZXJuYWwuc2V0X3Blcm1pc3Npb24ocGVybWlzc2lvbl9wYXJhbXMsIGNv
bnRleHQpOwogICAgICAgICB9LAogCiAgICAgICAgIC8qKgpAQCAtMjQ3LDEyICsyNzgsMTYgQEAK
ICAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IGNvbmZpZyAtIGFuIFtBdXRoZW50aWNhdG9yIENv
bmZpZ3VyYXRpb25de0BsaW5rCiAgICAgICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICBo
dHRwczovL3czYy5naXRodWIuaW8vd2ViYXV0aG4vI2F1dGhlbnRpY2F0b3ItY29uZmlndXJhdGlv
bn0KICAgICAgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdAorICAgICAgICAg
KiBAcGFyYW0ge1dpbmRvd1Byb3h5fSBjb250ZXh0IC0gQnJvd3NpbmcgY29udGV4dCBpbiB3aGlj
aAorICAgICAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gcnVuIHRoZSBj
YWxsLCBvciBudWxsIGZvciB0aGUgY3VycmVudAorICAgICAgICAgKiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgYnJvd3NpbmcgY29udGV4dC4KKyAgICAgICAgICoKICAgICAgICAgICog
QHJldHVybnMge1Byb21pc2V9IGZ1bGZpbGxlZCBhZnRlciB0aGUgYXV0aGVudGljYXRvciBpcyBh
ZGRlZCwgb3IKICAgICAgICAgICogICAgICAgICAgICAgICAgICAgIHJlamVjdGVkIGluIHRoZSBj
YXNlcyB0aGUgV2ViRHJpdmVyIGNvbW1hbmQKICAgICAgICAgICogICAgICAgICAgICAgICAgICAg
IGVycm9ycy4gUmV0dXJucyB0aGUgSUQgb2YgdGhlIGF1dGhlbnRpY2F0b3IKICAgICAgICAgICov
Ci0gICAgICAgIGFkZF92aXJ0dWFsX2F1dGhlbnRpY2F0b3I6IGZ1bmN0aW9uKGNvbmZpZykgewot
ICAgICAgICAgICAgcmV0dXJuIHdpbmRvdy50ZXN0X2RyaXZlcl9pbnRlcm5hbC5hZGRfdmlydHVh
bF9hdXRoZW50aWNhdG9yKGNvbmZpZyk7CisgICAgICAgIGFkZF92aXJ0dWFsX2F1dGhlbnRpY2F0
b3I6IGZ1bmN0aW9uKGNvbmZpZywgY29udGV4dD1udWxsKSB7CisgICAgICAgICAgICByZXR1cm4g
d2luZG93LnRlc3RfZHJpdmVyX2ludGVybmFsLmFkZF92aXJ0dWFsX2F1dGhlbnRpY2F0b3IoY29u
ZmlnLCBjb250ZXh0KTsKICAgICAgICAgfSwKIAogICAgICAgICAvKioKQEAgLTI2NCwxMyArMjk5
LDE2IEBACiAgICAgICAgICAqCiAgICAgICAgICAqIEBwYXJhbSB7U3RyaW5nfSBhdXRoZW50aWNh
dG9yX2lkIC0gdGhlIElEIG9mIHRoZSBhdXRoZW50aWNhdG9yIHRvIGJlCiAgICAgICAgICAqICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3ZlZC4KKyAgICAgICAgICogQHBh
cmFtIHtXaW5kb3dQcm94eX0gY29udGV4dCAtIEJyb3dzaW5nIGNvbnRleHQgaW4gd2hpY2gKKyAg
ICAgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvIHJ1biB0aGUgY2FsbCwg
b3IgbnVsbCBmb3IgdGhlIGN1cnJlbnQKKyAgICAgICAgICogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGJyb3dzaW5nIGNvbnRleHQuCiAgICAgICAgICAqCiAgICAgICAgICAqIEByZXR1
cm5zIHtQcm9taXNlfSBmdWxmaWxsZWQgYWZ0ZXIgdGhlIGF1dGhlbnRpY2F0b3IgaXMgcmVtb3Zl
ZCwgb3IKICAgICAgICAgICogICAgICAgICAgICAgICAgICAgIHJlamVjdGVkIGluIHRoZSBjYXNl
cyB0aGUgV2ViRHJpdmVyIGNvbW1hbmQKICAgICAgICAgICogICAgICAgICAgICAgICAgICAgIGVy
cm9ycwogICAgICAgICAgKi8KLSAgICAgICAgcmVtb3ZlX3ZpcnR1YWxfYXV0aGVudGljYXRvcjog
ZnVuY3Rpb24oYXV0aGVudGljYXRvcl9pZCkgewotICAgICAgICAgICAgcmV0dXJuIHdpbmRvdy50
ZXN0X2RyaXZlcl9pbnRlcm5hbC5yZW1vdmVfdmlydHVhbF9hdXRoZW50aWNhdG9yKGF1dGhlbnRp
Y2F0b3JfaWQpOworICAgICAgICByZW1vdmVfdmlydHVhbF9hdXRoZW50aWNhdG9yOiBmdW5jdGlv
bihhdXRoZW50aWNhdG9yX2lkLCBjb250ZXh0PW51bGwpIHsKKyAgICAgICAgICAgIHJldHVybiB3
aW5kb3cudGVzdF9kcml2ZXJfaW50ZXJuYWwucmVtb3ZlX3ZpcnR1YWxfYXV0aGVudGljYXRvcihh
dXRoZW50aWNhdG9yX2lkLCBjb250ZXh0KTsKICAgICAgICAgfSwKIAogICAgICAgICAvKioKQEAg
LTI4MiwxMyArMzIwLDE2IEBACiAgICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBjcmVkZW50aWFs
IC0gQSBbQ3JlZGVudGlhbCBQYXJhbWV0ZXJzXXtAbGluawogICAgICAgICAgKiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby93ZWJhdXRobi8jY3JlZGVu
dGlhbC1wYXJhbWV0ZXJzfQogICAgICAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG9iamVjdAorICAgICAgICAgKiBAcGFyYW0ge1dpbmRvd1Byb3h5fSBjb250ZXh0IC0gQnJvd3Np
bmcgY29udGV4dCBpbiB3aGljaAorICAgICAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdG8gcnVuIHRoZSBjYWxsLCBvciBudWxsIGZvciB0aGUgY3VycmVudAorICAgICAgICAg
KiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJvd3NpbmcgY29udGV4dC4KICAgICAg
ICAgICoKICAgICAgICAgICogQHJldHVybnMge1Byb21pc2V9IGZ1bGZpbGxlZCBhZnRlciB0aGUg
Y3JlZGVudGlhbCBpcyBhZGRlZCwgb3IKICAgICAgICAgICogICAgICAgICAgICAgICAgICAgIHJl
amVjdGVkIGluIHRoZSBjYXNlcyB0aGUgV2ViRHJpdmVyIGNvbW1hbmQKICAgICAgICAgICogICAg
ICAgICAgICAgICAgICAgIGVycm9ycwogICAgICAgICAgKi8KLSAgICAgICAgYWRkX2NyZWRlbnRp
YWw6IGZ1bmN0aW9uKGF1dGhlbnRpY2F0b3JfaWQsIGNyZWRlbnRpYWwpIHsKLSAgICAgICAgICAg
IHJldHVybiB3aW5kb3cudGVzdF9kcml2ZXJfaW50ZXJuYWwuYWRkX2NyZWRlbnRpYWwoYXV0aGVu
dGljYXRvcl9pZCwgY3JlZGVudGlhbCk7CisgICAgICAgIGFkZF9jcmVkZW50aWFsOiBmdW5jdGlv
bihhdXRoZW50aWNhdG9yX2lkLCBjcmVkZW50aWFsLCBjb250ZXh0PW51bGwpIHsKKyAgICAgICAg
ICAgIHJldHVybiB3aW5kb3cudGVzdF9kcml2ZXJfaW50ZXJuYWwuYWRkX2NyZWRlbnRpYWwoYXV0
aGVudGljYXRvcl9pZCwgY3JlZGVudGlhbCwgY29udGV4dCk7CiAgICAgICAgIH0sCiAKICAgICAg
ICAgLyoqCkBAIC0zMDAsNiArMzQxLDkgQEAKICAgICAgICAgICogaHR0cHM6Ly93M2MuZ2l0aHVi
LmlvL3dlYmF1dGhuLyNzY3RuLWF1dG9tYXRpb24tZ2V0LWNyZWRlbnRpYWxzCiAgICAgICAgICAq
CiAgICAgICAgICAqIEBwYXJhbSB7U3RyaW5nfSBhdXRoZW50aWNhdG9yX2lkIC0gdGhlIElEIG9m
IHRoZSBhdXRoZW50aWNhdG9yCisgICAgICAgICAqIEBwYXJhbSB7V2luZG93UHJveHl9IGNvbnRl
eHQgLSBCcm93c2luZyBjb250ZXh0IGluIHdoaWNoCisgICAgICAgICAqICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB0byBydW4gdGhlIGNhbGwsIG9yIG51bGwgZm9yIHRoZSBjdXJyZW50
CisgICAgICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicm93c2luZyBjb250
ZXh0LgogICAgICAgICAgKgogICAgICAgICAgKiBAcmV0dXJucyB7UHJvbWlzZX0gZnVsZmlsbGVk
IGFmdGVyIHRoZSBjcmVkZW50aWFscyBhcmUgcmV0dXJuZWQsIG9yCiAgICAgICAgICAqICAgICAg
ICAgICAgICAgICAgICByZWplY3RlZCBpbiB0aGUgY2FzZXMgdGhlIFdlYkRyaXZlciBjb21tYW5k
CkBAIC0zMDcsOCArMzUxLDggQEAKICAgICAgICAgICogICAgICAgICAgICAgICAgICAgIFBhcmFt
ZXRlcnNde0BsaW5rCiAgICAgICAgICAqICAgICAgICAgICAgICAgICAgICBodHRwczovL3czYy5n
aXRodWIuaW8vd2ViYXV0aG4vI2NyZWRlbnRpYWwtcGFyYW1ldGVyc30KICAgICAgICAgICovCi0g
ICAgICAgIGdldF9jcmVkZW50aWFsczogZnVuY3Rpb24oYXV0aGVudGljYXRvcl9pZCkgewotICAg
ICAgICAgICAgcmV0dXJuIHdpbmRvdy50ZXN0X2RyaXZlcl9pbnRlcm5hbC5nZXRfY3JlZGVudGlh
bHMoYXV0aGVudGljYXRvcl9pZCk7CisgICAgICAgIGdldF9jcmVkZW50aWFsczogZnVuY3Rpb24o
YXV0aGVudGljYXRvcl9pZCwgY29udGV4dD1udWxsKSB7CisgICAgICAgICAgICByZXR1cm4gd2lu
ZG93LnRlc3RfZHJpdmVyX2ludGVybmFsLmdldF9jcmVkZW50aWFscyhhdXRoZW50aWNhdG9yX2lk
LCBjb250ZXh0PW51bGwpOwogICAgICAgICB9LAogCiAgICAgICAgIC8qKgpAQCAtMzE4LDEzICsz
NjIsMTYgQEAKICAgICAgICAgICoKICAgICAgICAgICogQHBhcmFtIHtTdHJpbmd9IGF1dGhlbnRp
Y2F0b3JfaWQgLSB0aGUgSUQgb2YgdGhlIGF1dGhlbnRpY2F0b3IKICAgICAgICAgICogQHBhcmFt
IHtTdHJpbmd9IGNyZWRlbnRpYWxfaWQgLSB0aGUgSUQgb2YgdGhlIGNyZWRlbnRpYWwKKyAgICAg
ICAgICogQHBhcmFtIHtXaW5kb3dQcm94eX0gY29udGV4dCAtIEJyb3dzaW5nIGNvbnRleHQgaW4g
d2hpY2gKKyAgICAgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvIHJ1biB0
aGUgY2FsbCwgb3IgbnVsbCBmb3IgdGhlIGN1cnJlbnQKKyAgICAgICAgICogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGJyb3dzaW5nIGNvbnRleHQuCiAgICAgICAgICAqCiAgICAgICAg
ICAqIEByZXR1cm5zIHtQcm9taXNlfSBmdWxmaWxsZWQgYWZ0ZXIgdGhlIGNyZWRlbnRpYWwgaXMg
cmVtb3ZlZCwgb3IKICAgICAgICAgICogICAgICAgICAgICAgICAgICAgIHJlamVjdGVkIGluIHRo
ZSBjYXNlcyB0aGUgV2ViRHJpdmVyIGNvbW1hbmQKICAgICAgICAgICogICAgICAgICAgICAgICAg
ICAgIGVycm9ycy4KICAgICAgICAgICovCi0gICAgICAgIHJlbW92ZV9jcmVkZW50aWFsOiBmdW5j
dGlvbihhdXRoZW50aWNhdG9yX2lkLCBjcmVkZW50aWFsX2lkKSB7Ci0gICAgICAgICAgICByZXR1
cm4gd2luZG93LnRlc3RfZHJpdmVyX2ludGVybmFsLnJlbW92ZV9jcmVkZW50aWFsKGF1dGhlbnRp
Y2F0b3JfaWQsIGNyZWRlbnRpYWxfaWQpOworICAgICAgICByZW1vdmVfY3JlZGVudGlhbDogZnVu
Y3Rpb24oYXV0aGVudGljYXRvcl9pZCwgY3JlZGVudGlhbF9pZCwgY29udGV4dD1udWxsKSB7Cisg
ICAgICAgICAgICByZXR1cm4gd2luZG93LnRlc3RfZHJpdmVyX2ludGVybmFsLnJlbW92ZV9jcmVk
ZW50aWFsKGF1dGhlbnRpY2F0b3JfaWQsIGNyZWRlbnRpYWxfaWQsIGNvbnRleHQpOwogICAgICAg
ICB9LAogCiAgICAgICAgIC8qKgpAQCAtMzMzLDEzICszODAsMTYgQEAKICAgICAgICAgICogaHR0
cHM6Ly93M2MuZ2l0aHViLmlvL3dlYmF1dGhuLyNzY3RuLWF1dG9tYXRpb24tcmVtb3ZlLWFsbC1j
cmVkZW50aWFscwogICAgICAgICAgKgogICAgICAgICAgKiBAcGFyYW0ge1N0cmluZ30gYXV0aGVu
dGljYXRvcl9pZCAtIHRoZSBJRCBvZiB0aGUgYXV0aGVudGljYXRvcgorICAgICAgICAgKiBAcGFy
YW0ge1dpbmRvd1Byb3h5fSBjb250ZXh0IC0gQnJvd3NpbmcgY29udGV4dCBpbiB3aGljaAorICAg
ICAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gcnVuIHRoZSBjYWxsLCBv
ciBudWxsIGZvciB0aGUgY3VycmVudAorICAgICAgICAgKiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgYnJvd3NpbmcgY29udGV4dC4KICAgICAgICAgICoKICAgICAgICAgICogQHJldHVy
bnMge1Byb21pc2V9IGZ1bGZpbGxlZCBhZnRlciB0aGUgY3JlZGVudGlhbHMgYXJlIHJlbW92ZWQs
IG9yCiAgICAgICAgICAqICAgICAgICAgICAgICAgICAgICByZWplY3RlZCBpbiB0aGUgY2FzZXMg
dGhlIFdlYkRyaXZlciBjb21tYW5kCiAgICAgICAgICAqICAgICAgICAgICAgICAgICAgICBlcnJv
cnMuCiAgICAgICAgICAqLwotICAgICAgICByZW1vdmVfYWxsX2NyZWRlbnRpYWxzOiBmdW5jdGlv
bihhdXRoZW50aWNhdG9yX2lkKSB7Ci0gICAgICAgICAgICByZXR1cm4gd2luZG93LnRlc3RfZHJp
dmVyX2ludGVybmFsLnJlbW92ZV9hbGxfY3JlZGVudGlhbHMoYXV0aGVudGljYXRvcl9pZCk7Cisg
ICAgICAgIHJlbW92ZV9hbGxfY3JlZGVudGlhbHM6IGZ1bmN0aW9uKGF1dGhlbnRpY2F0b3JfaWQs
IGNvbnRleHQ9bnVsbCkgeworICAgICAgICAgICAgcmV0dXJuIHdpbmRvdy50ZXN0X2RyaXZlcl9p
bnRlcm5hbC5yZW1vdmVfYWxsX2NyZWRlbnRpYWxzKGF1dGhlbnRpY2F0b3JfaWQsIGNvbnRleHQp
OwogICAgICAgICB9LAogCiAgICAgICAgIC8qKgpAQCAtMzUxLDkgKzQwMSw0MSBAQAogICAgICAg
ICAgKgogICAgICAgICAgKiBAcGFyYW0ge1N0cmluZ30gYXV0aGVudGljYXRvcl9pZCAtIHRoZSBJ
RCBvZiB0aGUgYXV0aGVudGljYXRvcgogICAgICAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IHV2IC0g
dGhlIFVzZXIgVmVyaWZpZWQgZmxhZworICAgICAgICAgKiBAcGFyYW0ge1dpbmRvd1Byb3h5fSBj
b250ZXh0IC0gQnJvd3NpbmcgY29udGV4dCBpbiB3aGljaAorICAgICAgICAgKiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdG8gcnVuIHRoZSBjYWxsLCBvciBudWxsIGZvciB0aGUgY3Vy
cmVudAorICAgICAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJvd3Npbmcg
Y29udGV4dC4KKyAgICAgICAgICovCisgICAgICAgIHNldF91c2VyX3ZlcmlmaWVkOiBmdW5jdGlv
bihhdXRoZW50aWNhdG9yX2lkLCB1diwgY29udGV4dD1udWxsKSB7CisgICAgICAgICAgICByZXR1
cm4gd2luZG93LnRlc3RfZHJpdmVyX2ludGVybmFsLnNldF91c2VyX3ZlcmlmaWVkKGF1dGhlbnRp
Y2F0b3JfaWQsIHV2LCBjb250ZXh0KTsKKyAgICAgICAgfSwKKworICAgICAgICAvKioKKyAgICAg
ICAgICogU2V0cyB0aGUgc3RvcmFnZSBhY2Nlc3MgcnVsZSBmb3IgYW4gb3JpZ2luIHdoZW4gZW1i
ZWRkZWQKKyAgICAgICAgICogaW4gYSB0aGlyZC1wYXJ0eSBjb250ZXh0LgorICAgICAgICAgKgor
ICAgICAgICAgKiB7QGxpbmsgaHR0cHM6Ly9wcml2YWN5Y2cuZ2l0aHViLmlvL3N0b3JhZ2UtYWNj
ZXNzLyNzZXQtc3RvcmFnZS1hY2Nlc3MtY29tbWFuZH0KKyAgICAgICAgICoKKyAgICAgICAgICog
QHBhcmFtIHtTdHJpbmd9IG9yaWdpbiAtIEEgdGhpcmQtcGFydHkgb3JpZ2luIHRvIGJsb2NrIG9y
IGFsbG93LgorICAgICAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgTWF5IGJlICIqIiB0
byBpbmRpY2F0ZSBhbGwgb3JpZ2lucy4KKyAgICAgICAgICogQHBhcmFtIHtTdHJpbmd9IGVtYmVk
ZGluZ19vcmlnaW4gLSBhbiBlbWJlZGRpbmcgKGZpcnN0LXBhcnR5KSBvcmlnaW4KKyAgICAgICAg
ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbiB3aGljaCB7b3JpZ2lufSdz
IGFjY2VzcyBzaG91bGQKKyAgICAgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBiZSBibG9ja2VkIG9yIGFsbG93ZWQuCisgICAgICAgICAqICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgTWF5IGJlICIqIiB0byBpbmRpY2F0ZSBhbGwgb3JpZ2lucy4KKyAg
ICAgICAgICogQHBhcmFtIHtTdHJpbmd9IHN0YXRlIC0gVGhlIHN0b3JhZ2UgYWNjZXNzIHNldHRp
bmcuCisgICAgICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgIE11c3QgYmUgZWl0aGVyICJh
bGxvd2VkIiBvciAiYmxvY2tlZCIuCisgICAgICAgICAqIEBwYXJhbSB7V2luZG93UHJveHl9IGNv
bnRleHQgLSBCcm93c2luZyBjb250ZXh0IGluIHdoaWNoCisgICAgICAgICAqICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB0byBydW4gdGhlIGNhbGwsIG9yIG51bGwgZm9yIHRoZSBjdXJy
ZW50CisgICAgICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicm93c2luZyBj
b250ZXh0LgorICAgICAgICAgKgorICAgICAgICAgKiBAcmV0dXJucyB7UHJvbWlzZX0gRnVsZmls
bGVkIGFmdGVyIHRoZSBzdG9yYWdlIGFjY2VzcyBydWxlIGhhcyBiZWVuCisgICAgICAgICAqICAg
ICAgICAgICAgICAgICAgICBzZXQsIG9yIHJlamVjdGVkIGlmIHNldHRpbmcgdGhlIHJ1bGUgZmFp
bHMuCiAgICAgICAgICAqLwotICAgICAgICBzZXRfdXNlcl92ZXJpZmllZDogZnVuY3Rpb24oYXV0
aGVudGljYXRvcl9pZCwgdXYpIHsKLSAgICAgICAgICAgIHJldHVybiB3aW5kb3cudGVzdF9kcml2
ZXJfaW50ZXJuYWwuc2V0X3VzZXJfdmVyaWZpZWQoYXV0aGVudGljYXRvcl9pZCwgdXYpOworICAg
ICAgICBzZXRfc3RvcmFnZV9hY2Nlc3M6IGZ1bmN0aW9uKG9yaWdpbiwgZW1iZWRkaW5nX29yaWdp
biwgc3RhdGUsIGNvbnRleHQ9bnVsbCkgeworICAgICAgICAgICAgaWYgKHN0YXRlICE9PSAiYWxs
b3dlZCIgJiYgc3RhdGUgIT09ICJibG9ja2VkIikgeworICAgICAgICAgICAgICAgIHRocm93IG5l
dyBFcnJvcigic3RvcmFnZSBhY2Nlc3Mgc3RhdHVzIG11c3QgYmUgJ2FsbG93ZWQnIG9yICdibG9j
a2VkJyIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgY29uc3QgYmxvY2tlZCA9IHN0YXRl
ID09PSAiYmxvY2tlZCI7CisgICAgICAgICAgICByZXR1cm4gd2luZG93LnRlc3RfZHJpdmVyX2lu
dGVybmFsLnNldF9zdG9yYWdlX2FjY2VzcyhvcmlnaW4sIGVtYmVkZGluZ19vcmlnaW4sIGJsb2Nr
ZWQsIGNvbnRleHQpOwogICAgICAgICB9LAogICAgIH07CiAKQEAgLTM2NiwxMyArNDQ4LDYgQEAK
ICAgICAgICAgICovCiAgICAgICAgIGluX2F1dG9tYXRpb246IGZhbHNlLAogCi0gICAgICAgIC8q
KgotICAgICAgICAgKiBXYWl0cyBmb3IgYSB1c2VyLWluaXRpYXRlZCBjbGljawotICAgICAgICAg
KgotICAgICAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IGVsZW1lbnQgLSBlbGVtZW50IHRvIGJlIGNs
aWNrZWQKLSAgICAgICAgICogQHBhcmFtIHt7eDogbnVtYmVyLCB5OiBudW1iZXJ9IGNvb3JkcyAt
IHZpZXdwb3J0IGNvb3JkaW5hdGVzIHRvIGNsaWNrIGF0Ci0gICAgICAgICAqIEByZXR1cm5zIHtQ
cm9taXNlfSBmdWxmaWxsZWQgYWZ0ZXIgY2xpY2sgb2NjdXJzCi0gICAgICAgICAqLwogICAgICAg
ICBjbGljazogZnVuY3Rpb24oZWxlbWVudCwgY29vcmRzKSB7CiAgICAgICAgICAgICBpZiAodGhp
cy5pbl9hdXRvbWF0aW9uKSB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0
KG5ldyBFcnJvcignTm90IGltcGxlbWVudGVkJykpOwpAQCAtMzgzLDE0ICs0NTgsNiBAQAogICAg
ICAgICAgICAgfSk7CiAgICAgICAgIH0sCiAKLSAgICAgICAgLyoqCi0gICAgICAgICAqIFdhaXRz
IGZvciBhbiBlbGVtZW50IHRvIHJlY2VpdmUgYSBzZXJpZXMgb2Yga2V5IHByZXNzZXMKLSAgICAg
ICAgICoKLSAgICAgICAgICogQHBhcmFtIHtFbGVtZW50fSBlbGVtZW50IC0gZWxlbWVudCB3aGlj
aCBzaG91bGQgcmVjZXZlIGtleSBwcmVzc2VzCi0gICAgICAgICAqIEBwYXJhbSB7U3RyaW5nfSBr
ZXlzIC0ga2V5cyB0byBleHBlY3QKLSAgICAgICAgICogQHJldHVybnMge1Byb21pc2V9IGZ1bGZp
bGxlZCBhZnRlciBrZXlzIGFyZSByZWNlaXZlZCBvciByZWplY3RlZCBpZgotICAgICAgICAgKiAg
ICAgICAgICAgICAgICAgICAgYW4gaW5jb3JyZWN0IGtleSBzZXF1ZW5jZSBpcyByZWNlaXZlZAot
ICAgICAgICAgKi8KICAgICAgICAgc2VuZF9rZXlzOiBmdW5jdGlvbihlbGVtZW50LCBrZXlzKSB7
CiAgICAgICAgICAgICBpZiAodGhpcy5pbl9hdXRvbWF0aW9uKSB7CiAgICAgICAgICAgICAgICAg
cmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcignTm90IGltcGxlbWVudGVkJykpOwpAQCAt
NDIzLDE1MCArNDkwLDUyIEBACiAgICAgICAgICAgICB9KTsKICAgICAgICAgfSwKIAotICAgICAg
ICAvKioKLSAgICAgICAgICogRnJlZXplIHRoZSBjdXJyZW50IHBhZ2UKLSAgICAgICAgICoKLSAg
ICAgICAgICogQHJldHVybnMge1Byb21pc2V9IGZ1bGZpbGxlZCBhZnRlciBmcmVlemUgcmVxdWVz
dCBpcyBzZW50LCBvdGhlcndpc2UKLSAgICAgICAgICogaXQgZ2V0cyByZWplY3RlZAotICAgICAg
ICAgKi8KLSAgICAgICAgZnJlZXplOiBmdW5jdGlvbigpIHsKKyAgICAgICAgZnJlZXplOiBmdW5j
dGlvbihjb250ZXh0PW51bGwpIHsKICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChu
ZXcgRXJyb3IoInVuaW1wbGVtZW50ZWQiKSk7CiAgICAgICAgIH0sCiAKLSAgICAgICAgLyoqCi0g
ICAgICAgICAqIFNlbmQgYSBzZXF1ZW5jZSBvZiBwb2ludGVyIGFjdGlvbnMKLSAgICAgICAgICoK
LSAgICAgICAgICogQHJldHVybnMge1Byb21pc2V9IGZ1ZmlsbGVkIGFmdGVyIGFjdGlvbnMgYXJl
IHNlbnQsIHJlamVjdGVkIGlmIGFueSBhY3Rpb25zCi0gICAgICAgICAqICAgICAgICAgICAgICAg
ICAgICBmYWlsCi0gICAgICAgICAqLwotICAgICAgICBhY3Rpb25fc2VxdWVuY2U6IGZ1bmN0aW9u
KGFjdGlvbnMpIHsKKyAgICAgICAgYWN0aW9uX3NlcXVlbmNlOiBmdW5jdGlvbihhY3Rpb25zLCBj
b250ZXh0PW51bGwpIHsKICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJy
b3IoInVuaW1wbGVtZW50ZWQiKSk7CiAgICAgICAgIH0sCiAKLSAgICAgICAgLyoqCi0gICAgICAg
ICAqIEdlbmVyYXRlcyBhIHRlc3QgcmVwb3J0IG9uIHRoZSBjdXJyZW50IHBhZ2UKLSAgICAgICAg
ICoKLSAgICAgICAgICogQHBhcmFtIHtTdHJpbmd9IG1lc3NhZ2UgLSB0aGUgbWVzc2FnZSB0byBi
ZSBjb250YWluZWQgaW4gdGhlIHJlcG9ydAotICAgICAgICAgKiBAcmV0dXJucyB7UHJvbWlzZX0g
ZnVsZmlsbGVkIGFmdGVyIHRoZSByZXBvcnQgaXMgZ2VuZXJhdGVkLCBvcgotICAgICAgICAgKiAg
ICAgICAgICAgICAgICAgICAgcmVqZWN0ZWQgaWYgdGhlIHJlcG9ydCBnZW5lcmF0aW9uIGZhaWxz
Ci0gICAgICAgICAqLwotICAgICAgICBnZW5lcmF0ZV90ZXN0X3JlcG9ydDogZnVuY3Rpb24obWVz
c2FnZSkgeworICAgICAgICBnZW5lcmF0ZV90ZXN0X3JlcG9ydDogZnVuY3Rpb24obWVzc2FnZSwg
Y29udGV4dD1udWxsKSB7CiAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVy
cm9yKCJ1bmltcGxlbWVudGVkIikpOwogICAgICAgICB9LAogCiAKLSAgICAgICAgLyoqCi0gICAg
ICAgICAqIFNldHMgdGhlIHN0YXRlIG9mIGEgcGVybWlzc2lvbgotICAgICAgICAgKgotICAgICAg
ICAgKiBUaGlzIGZ1bmN0aW9uIHNpbXVsYXRlcyBhIHVzZXIgc2V0dGluZyBhIHBlcm1pc3Npb24g
aW50byBhIHBhcnRpY3VsYXIgc3RhdGUgYXMgZGVzY3JpYmVkCi0gICAgICAgICAqIGluIHtAbGlu
ayBodHRwczovL3czYy5naXRodWIuaW8vcGVybWlzc2lvbnMvI3NldC1wZXJtaXNzaW9uLWNvbW1h
bmR9Ci0gICAgICAgICAqCi0gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBwZXJtaXNzaW9uX3Bh
cmFtcyAtIGEgW1Blcm1pc3Npb25TZXRQYXJhbWV0ZXJzXXtAbGludAotICAgICAgICAgKiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBodHRwczovL3czYy5naXRodWIuaW8vcGVy
bWlzc2lvbnMvI2RpY3RkZWYtcGVybWlzc2lvbnNldHBhcmFtZXRlcnN9Ci0gICAgICAgICAqICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdAotICAgICAgICAgKiBAcmV0
dXJucyB7UHJvbWlzZX0gZnVsZmlsbGVkIGFmdGVyIHRoZSBwZXJtaXNzaW9uIGlzIHNldCwgb3Ig
cmVqZWN0ZWQgaWYgc2V0dGluZyB0aGUKLSAgICAgICAgICogICAgICAgICAgICAgICAgICAgIHBl
cm1pc3Npb24gZmFpbHMKLSAgICAgICAgICovCi0gICAgICAgIHNldF9wZXJtaXNzaW9uOiBmdW5j
dGlvbihwZXJtaXNzaW9uX3BhcmFtcykgeworICAgICAgICBzZXRfcGVybWlzc2lvbjogZnVuY3Rp
b24ocGVybWlzc2lvbl9wYXJhbXMsIGNvbnRleHQ9bnVsbCkgewogICAgICAgICAgICAgcmV0dXJu
IFByb21pc2UucmVqZWN0KG5ldyBFcnJvcigidW5pbXBsZW1lbnRlZCIpKTsKICAgICAgICAgfSwK
IAotICAgICAgICAvKioKLSAgICAgICAgICogQ3JlYXRlcyBhIHZpcnR1YWwgYXV0aGVudGljYXRv
cgotICAgICAgICAgKgotICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gY29uZmlnIC0gdGhlIGF1
dGhlbnRpY2F0b3IgY29uZmlndXJhdGlvbgotICAgICAgICAgKiBAcmV0dXJucyB7UHJvbWlzZX0g
ZnVsZmlsbGVkIGFmdGVyIHRoZSBhdXRoZW50aWNhdG9yIGlzIGFkZGVkLCBvcgotICAgICAgICAg
KiAgICAgICAgICAgICAgICAgICAgcmVqZWN0ZWQgaW4gdGhlIGNhc2VzIHRoZSBXZWJEcml2ZXIg
Y29tbWFuZAotICAgICAgICAgKiAgICAgICAgICAgICAgICAgICAgZXJyb3JzLgotICAgICAgICAg
Ki8KLSAgICAgICAgYWRkX3ZpcnR1YWxfYXV0aGVudGljYXRvcjogZnVuY3Rpb24oY29uZmlnKSB7
CisgICAgICAgIGFkZF92aXJ0dWFsX2F1dGhlbnRpY2F0b3I6IGZ1bmN0aW9uKGNvbmZpZywgY29u
dGV4dD1udWxsKSB7CiAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9y
KCJ1bmltcGxlbWVudGVkIikpOwogICAgICAgICB9LAogCi0gICAgICAgIC8qKgotICAgICAgICAg
KiBSZW1vdmVzIGEgdmlydHVhbCBhdXRoZW50aWNhdG9yCi0gICAgICAgICAqCi0gICAgICAgICAq
IEBwYXJhbSB7U3RyaW5nfSBhdXRoZW50aWNhdG9yX2lkIC0gdGhlIElEIG9mIHRoZSBhdXRoZW50
aWNhdG9yIHRvIGJlCi0gICAgICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcmVtb3ZlZC4KLSAgICAgICAgICoKLSAgICAgICAgICogQHJldHVybnMge1Byb21pc2V9IGZ1
bGZpbGxlZCBhZnRlciB0aGUgYXV0aGVudGljYXRvciBpcyByZW1vdmVkLCBvcgotICAgICAgICAg
KiAgICAgICAgICAgICAgICAgICAgcmVqZWN0ZWQgaW4gdGhlIGNhc2VzIHRoZSBXZWJEcml2ZXIg
Y29tbWFuZAotICAgICAgICAgKiAgICAgICAgICAgICAgICAgICAgZXJyb3JzCi0gICAgICAgICAq
LwotICAgICAgICByZW1vdmVfdmlydHVhbF9hdXRoZW50aWNhdG9yOiBmdW5jdGlvbihhdXRoZW50
aWNhdG9yX2lkKSB7CisgICAgICAgIHJlbW92ZV92aXJ0dWFsX2F1dGhlbnRpY2F0b3I6IGZ1bmN0
aW9uKGF1dGhlbnRpY2F0b3JfaWQsIGNvbnRleHQ9bnVsbCkgewogICAgICAgICAgICAgcmV0dXJu
IFByb21pc2UucmVqZWN0KG5ldyBFcnJvcigidW5pbXBsZW1lbnRlZCIpKTsKICAgICAgICAgfSwK
IAotICAgICAgICAvKioKLSAgICAgICAgICogQWRkcyBhIGNyZWRlbnRpYWwgdG8gYSB2aXJ0dWFs
IGF1dGhlbnRpY2F0b3IKLSAgICAgICAgICoKLSAgICAgICAgICogQHBhcmFtIHtTdHJpbmd9IGF1
dGhlbnRpY2F0b3JfaWQgLSB0aGUgSUQgb2YgdGhlIGF1dGhlbnRpY2F0b3IKLSAgICAgICAgICog
QHBhcmFtIHtPYmplY3R9IGNyZWRlbnRpYWwgLSBBIFtDcmVkZW50aWFsIFBhcmFtZXRlcnNde0Bs
aW5rCi0gICAgICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaHR0cHM6Ly93M2Mu
Z2l0aHViLmlvL3dlYmF1dGhuLyNjcmVkZW50aWFsLXBhcmFtZXRlcnN9Ci0gICAgICAgICAqICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0Ci0gICAgICAgICAqCi0gICAgICAgICAq
IEByZXR1cm5zIHtQcm9taXNlfSBmdWxmaWxsZWQgYWZ0ZXIgdGhlIGNyZWRlbnRpYWwgaXMgYWRk
ZWQsIG9yCi0gICAgICAgICAqICAgICAgICAgICAgICAgICAgICByZWplY3RlZCBpbiB0aGUgY2Fz
ZXMgdGhlIFdlYkRyaXZlciBjb21tYW5kCi0gICAgICAgICAqICAgICAgICAgICAgICAgICAgICBl
cnJvcnMKLSAgICAgICAgICoKLSAgICAgICAgICovCi0gICAgICAgIGFkZF9jcmVkZW50aWFsOiBm
dW5jdGlvbihhdXRoZW50aWNhdG9yX2lkLCBjcmVkZW50aWFsKSB7CisgICAgICAgIGFkZF9jcmVk
ZW50aWFsOiBmdW5jdGlvbihhdXRoZW50aWNhdG9yX2lkLCBjcmVkZW50aWFsLCBjb250ZXh0PW51
bGwpIHsKICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoInVuaW1w
bGVtZW50ZWQiKSk7CiAgICAgICAgIH0sCiAKLSAgICAgICAgLyoqCi0gICAgICAgICAqIEdldHMg
YWxsIHRoZSBjcmVkZW50aWFscyBzdG9yZWQgaW4gYW4gYXV0aGVudGljYXRvcgotICAgICAgICAg
KgotICAgICAgICAgKiBAcGFyYW0ge1N0cmluZ30gYXV0aGVudGljYXRvcl9pZCAtIHRoZSBJRCBv
ZiB0aGUgYXV0aGVudGljYXRvcgotICAgICAgICAgKgotICAgICAgICAgKiBAcmV0dXJucyB7UHJv
bWlzZX0gZnVsZmlsbGVkIGFmdGVyIHRoZSBjcmVkZW50aWFscyBhcmUgcmV0dXJuZWQsIG9yCi0g
ICAgICAgICAqICAgICAgICAgICAgICAgICAgICByZWplY3RlZCBpbiB0aGUgY2FzZXMgdGhlIFdl
YkRyaXZlciBjb21tYW5kCi0gICAgICAgICAqICAgICAgICAgICAgICAgICAgICBlcnJvcnMuIFJl
dHVybnMgYW4gYXJyYXkgb2YgW0NyZWRlbnRpYWwKLSAgICAgICAgICogICAgICAgICAgICAgICAg
ICAgIFBhcmFtZXRlcnNde0BsaW5rCi0gICAgICAgICAqICAgICAgICAgICAgICAgICAgICBodHRw
czovL3czYy5naXRodWIuaW8vd2ViYXV0aG4vI2NyZWRlbnRpYWwtcGFyYW1ldGVyc30KLSAgICAg
ICAgICoKLSAgICAgICAgICovCi0gICAgICAgIGdldF9jcmVkZW50aWFsczogZnVuY3Rpb24oYXV0
aGVudGljYXRvcl9pZCkgeworICAgICAgICBnZXRfY3JlZGVudGlhbHM6IGZ1bmN0aW9uKGF1dGhl
bnRpY2F0b3JfaWQsIGNvbnRleHQ9bnVsbCkgewogICAgICAgICAgICAgcmV0dXJuIFByb21pc2Uu
cmVqZWN0KG5ldyBFcnJvcigidW5pbXBsZW1lbnRlZCIpKTsKICAgICAgICAgfSwKIAotICAgICAg
ICAvKioKLSAgICAgICAgICogUmVtb3ZlIGEgY3JlZGVudGlhbCBzdG9yZWQgaW4gYW4gYXV0aGVu
dGljYXRvcgotICAgICAgICAgKgotICAgICAgICAgKiBAcGFyYW0ge1N0cmluZ30gYXV0aGVudGlj
YXRvcl9pZCAtIHRoZSBJRCBvZiB0aGUgYXV0aGVudGljYXRvcgotICAgICAgICAgKiBAcGFyYW0g
e1N0cmluZ30gY3JlZGVudGlhbF9pZCAtIHRoZSBJRCBvZiB0aGUgY3JlZGVudGlhbAotICAgICAg
ICAgKgotICAgICAgICAgKiBAcmV0dXJucyB7UHJvbWlzZX0gZnVsZmlsbGVkIGFmdGVyIHRoZSBj
cmVkZW50aWFsIGlzIHJlbW92ZWQsIG9yCi0gICAgICAgICAqICAgICAgICAgICAgICAgICAgICBy
ZWplY3RlZCBpbiB0aGUgY2FzZXMgdGhlIFdlYkRyaXZlciBjb21tYW5kCi0gICAgICAgICAqICAg
ICAgICAgICAgICAgICAgICBlcnJvcnMuCi0gICAgICAgICAqCi0gICAgICAgICAqLwotICAgICAg
ICByZW1vdmVfY3JlZGVudGlhbDogZnVuY3Rpb24oYXV0aGVudGljYXRvcl9pZCwgY3JlZGVudGlh
bF9pZCkgeworICAgICAgICByZW1vdmVfY3JlZGVudGlhbDogZnVuY3Rpb24oYXV0aGVudGljYXRv
cl9pZCwgY3JlZGVudGlhbF9pZCwgY29udGV4dD1udWxsKSB7CiAgICAgICAgICAgICByZXR1cm4g
UHJvbWlzZS5yZWplY3QobmV3IEVycm9yKCJ1bmltcGxlbWVudGVkIikpOwogICAgICAgICB9LAog
Ci0gICAgICAgIC8qKgotICAgICAgICAgKiBSZW1vdmVzIGFsbCB0aGUgY3JlZGVudGlhbHMgc3Rv
cmVkIGluIGEgdmlydHVhbCBhdXRoZW50aWNhdG9yCi0gICAgICAgICAqCi0gICAgICAgICAqIEBw
YXJhbSB7U3RyaW5nfSBhdXRoZW50aWNhdG9yX2lkIC0gdGhlIElEIG9mIHRoZSBhdXRoZW50aWNh
dG9yCi0gICAgICAgICAqCi0gICAgICAgICAqIEByZXR1cm5zIHtQcm9taXNlfSBmdWxmaWxsZWQg
YWZ0ZXIgdGhlIGNyZWRlbnRpYWxzIGFyZSByZW1vdmVkLCBvcgotICAgICAgICAgKiAgICAgICAg
ICAgICAgICAgICAgcmVqZWN0ZWQgaW4gdGhlIGNhc2VzIHRoZSBXZWJEcml2ZXIgY29tbWFuZAot
ICAgICAgICAgKiAgICAgICAgICAgICAgICAgICAgZXJyb3JzLgotICAgICAgICAgKgotICAgICAg
ICAgKi8KLSAgICAgICAgcmVtb3ZlX2FsbF9jcmVkZW50aWFsczogZnVuY3Rpb24oYXV0aGVudGlj
YXRvcl9pZCkgeworICAgICAgICByZW1vdmVfYWxsX2NyZWRlbnRpYWxzOiBmdW5jdGlvbihhdXRo
ZW50aWNhdG9yX2lkLCBjb250ZXh0PW51bGwpIHsKICAgICAgICAgICAgIHJldHVybiBQcm9taXNl
LnJlamVjdChuZXcgRXJyb3IoInVuaW1wbGVtZW50ZWQiKSk7CiAgICAgICAgIH0sCiAKLSAgICAg
ICAgLyoqCi0gICAgICAgICAqIFNldHMgdGhlIFVzZXIgVmVyaWZpZWQgZmxhZyBvbiBhbiBhdXRo
ZW50aWNhdG9yCi0gICAgICAgICAqCi0gICAgICAgICAqIEBwYXJhbSB7U3RyaW5nfSBhdXRoZW50
aWNhdG9yX2lkIC0gdGhlIElEIG9mIHRoZSBhdXRoZW50aWNhdG9yCi0gICAgICAgICAqIEBwYXJh
bSB7Ym9vbGVhbn0gdXYgLSB0aGUgVXNlciBWZXJpZmllZCBmbGFnCi0gICAgICAgICAqCi0gICAg
ICAgICAqLwotICAgICAgICBzZXRfdXNlcl92ZXJpZmllZDogZnVuY3Rpb24oYXV0aGVudGljYXRv
cl9pZCwgdXYpIHsKKyAgICAgICAgc2V0X3VzZXJfdmVyaWZpZWQ6IGZ1bmN0aW9uKGF1dGhlbnRp
Y2F0b3JfaWQsIHV2LCBjb250ZXh0PW51bGwpIHsKKyAgICAgICAgICAgIHJldHVybiBQcm9taXNl
LnJlamVjdChuZXcgRXJyb3IoInVuaW1wbGVtZW50ZWQiKSk7CisgICAgICAgIH0sCisKKyAgICAg
ICAgc2V0X3N0b3JhZ2VfYWNjZXNzOiBmdW5jdGlvbihvcmlnaW4sIGVtYmVkZGluZ19vcmlnaW4s
IGJsb2NrZWQsIGNvbnRleHQ9bnVsbCkgewogICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVq
ZWN0KG5ldyBFcnJvcigidW5pbXBsZW1lbnRlZCIpKTsKICAgICAgICAgfSwKICAgICB9OwpkaWZm
IC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNv
dXJjZXMvdGVzdGhhcm5lc3MuanMgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRm
b3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0aGFybmVzcy5qcwppbmRleCAyNzRkYzlkN2Q4OTBkYmE3
ZDk4OTg1ZmVhYzk1MzNkZDYyNDUwNDMzLi5kNTBlMDk0MTE3ZGY1NmRiNDlkNzVmMTYyMGM0YWJh
NTEzMTlmYzNjIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRm
b3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0aGFybmVzcy5qcworKysgYi9MYXlvdXRUZXN0cy9pbXBv
cnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0aGFybmVzcy5qcwpAQCAt
NTIwLDYgKzUyMCw0MyBAQCBwb2xpY2llcyBhbmQgY29udHJpYnV0aW9uIGZvcm1zIFszXS4KICAg
ICAgICAgICAgIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh3b3JrZXIpID09ICdbb2Jq
ZWN0IFNlcnZpY2VXb3JrZXJdJzsKICAgICB9CiAKKyAgICB2YXIgc2Vlbl9mdW5jX25hbWUgPSBP
YmplY3QuY3JlYXRlKG51bGwpOworCisgICAgZnVuY3Rpb24gZ2V0X3Rlc3RfbmFtZShmdW5jLCBu
YW1lKQorICAgIHsKKyAgICAgICAgaWYgKG5hbWUpIHsKKyAgICAgICAgICAgIHJldHVybiBuYW1l
OworICAgICAgICB9CisKKyAgICAgICAgaWYgKGZ1bmMpIHsKKyAgICAgICAgICAgIHZhciBmdW5j
X2NvZGUgPSBmdW5jLnRvU3RyaW5nKCk7CisKKyAgICAgICAgICAgIC8vIFRyeSBhbmQgbWF0Y2gg
d2l0aCBicmFja2V0cywgYnV0IGZhbGxiYWNrIHRvIG1hdGNoaW5nIHdpdGhvdXQKKyAgICAgICAg
ICAgIHZhciBhcnJvdyA9IGZ1bmNfY29kZS5tYXRjaCgvXlwoXClccyo9PlxzKig/OnsoLiopfVxz
KnwoLiopKSQvKTsKKworICAgICAgICAgICAgLy8gQ2hlY2sgZm9yIEpTIGxpbmUgc2VwYXJhdG9y
cworICAgICAgICAgICAgaWYgKGFycm93ICE9PSBudWxsICYmICEvW1x1MDAwQVx1MDAwRFx1MjAy
OFx1MjAyOV0vLnRlc3QoZnVuY19jb2RlKSkgeworICAgICAgICAgICAgICAgIHZhciB0cmltbWVk
ID0gKGFycm93WzFdICE9PSB1bmRlZmluZWQgPyBhcnJvd1sxXSA6IGFycm93WzJdKS50cmltKCk7
CisgICAgICAgICAgICAgICAgLy8gZHJvcCB0cmFpbGluZyA7IGlmIHRoZXJlJ3Mgbm8gZWFybGll
ciBvbmVzCisgICAgICAgICAgICAgICAgdHJpbW1lZCA9IHRyaW1tZWQucmVwbGFjZSgvXihbXjtd
KikoO1xzKikrJC8sICIkMSIpOworCisgICAgICAgICAgICAgICAgaWYgKHRyaW1tZWQpIHsKKyAg
ICAgICAgICAgICAgICAgICAgbGV0IG5hbWUgPSB0cmltbWVkOworICAgICAgICAgICAgICAgICAg
ICBpZiAoc2Vlbl9mdW5jX25hbWVbdHJpbW1lZF0pIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
IC8vIFRoaXMgc3VidGVzdCBuYW1lIGFscmVhZHkgZXhpc3RzLCBzbyBhZGQgYSBzdWZmaXguCisg
ICAgICAgICAgICAgICAgICAgICAgICBuYW1lICs9ICIgIiArIHNlZW5fZnVuY19uYW1lW3RyaW1t
ZWRdOworICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAg
ICAgc2Vlbl9mdW5jX25hbWVbdHJpbW1lZF0gPSAwOworICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgICAgIHNlZW5fZnVuY19uYW1lW3RyaW1tZWRdICs9IDE7CisgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBuYW1lOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiB0ZXN0X2Vudmlyb25tZW50Lm5leHRfZGVm
YXVsdF90ZXN0X25hbWUoKTsKKyAgICB9CisKICAgICAvKgogICAgICAqIEFQSSBmdW5jdGlvbnMK
ICAgICAgKi8KQEAgLTUzMCwxNyArNTY3LDE4IEBAIHBvbGljaWVzIGFuZCBjb250cmlidXRpb24g
Zm9ybXMgWzNdLgogICAgICAgICAgICAgdGVzdHMuc3RhdHVzLm1lc3NhZ2UgPSAnYHRlc3RgIGlu
dm9rZWQgYWZ0ZXIgYHByb21pc2Vfc2V0dXBgJzsKICAgICAgICAgICAgIHRlc3RzLmNvbXBsZXRl
KCk7CiAgICAgICAgIH0KLSAgICAgICAgdmFyIHRlc3RfbmFtZSA9IG5hbWUgPyBuYW1lIDogdGVz
dF9lbnZpcm9ubWVudC5uZXh0X2RlZmF1bHRfdGVzdF9uYW1lKCk7CisgICAgICAgIHZhciB0ZXN0
X25hbWUgPSBnZXRfdGVzdF9uYW1lKGZ1bmMsIG5hbWUpOwogICAgICAgICB2YXIgdGVzdF9vYmog
PSBuZXcgVGVzdCh0ZXN0X25hbWUsIHByb3BlcnRpZXMpOwogICAgICAgICB2YXIgdmFsdWUgPSB0
ZXN0X29iai5zdGVwKGZ1bmMsIHRlc3Rfb2JqLCB0ZXN0X29iaik7CiAKICAgICAgICAgaWYgKHZh
bHVlICE9PSB1bmRlZmluZWQpIHsKLSAgICAgICAgICAgIHZhciBtc2cgPSAiVGVzdCBuYW1lZCBc
IiIgKyB0ZXN0X25hbWUgKwotICAgICAgICAgICAgICAgICJcIiBpbmFwcHJvcHJpYXRlbHkgcmV0
dXJuZWQgYSB2YWx1ZSI7CisgICAgICAgICAgICB2YXIgbXNnID0gJ1Rlc3QgbmFtZWQgIicgKyB0
ZXN0X25hbWUgKworICAgICAgICAgICAgICAgICciIHBhc3NlZCBhIGZ1bmN0aW9uIHRvIGB0ZXN0
YCB0aGF0IHJldHVybmVkIGEgdmFsdWUuJzsKIAogICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAg
ICAgICAgICBpZiAodmFsdWUgJiYgdmFsdWUuaGFzT3duUHJvcGVydHkoInRoZW4iKSkgewotICAg
ICAgICAgICAgICAgICAgICBtc2cgKz0gIiwgY29uc2lkZXIgdXNpbmcgYHByb21pc2VfdGVzdGAg
aW5zdGVhZCI7CisgICAgICAgICAgICAgICAgaWYgKHZhbHVlICYmIHR5cGVvZiB2YWx1ZS50aGVu
ID09PSAnZnVuY3Rpb24nKSB7CisgICAgICAgICAgICAgICAgICAgIG1zZyArPSAnIENvbnNpZGVy
IHVzaW5nIGBwcm9taXNlX3Rlc3RgIGluc3RlYWQgd2hlbiAnICsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICd1c2luZyBQcm9taXNlcyBvciBhc3luYy9hd2FpdC4nOwogICAgICAgICAgICAgICAg
IH0KICAgICAgICAgICAgIH0gY2F0Y2ggKGVycikge30KIApAQCAtNTY1LDEwICs2MDMsMzMgQEAg
cG9saWNpZXMgYW5kIGNvbnRyaWJ1dGlvbiBmb3JtcyBbM10uCiAgICAgICAgICAgICBuYW1lID0g
ZnVuYzsKICAgICAgICAgICAgIGZ1bmMgPSBudWxsOwogICAgICAgICB9Ci0gICAgICAgIHZhciB0
ZXN0X25hbWUgPSBuYW1lID8gbmFtZSA6IHRlc3RfZW52aXJvbm1lbnQubmV4dF9kZWZhdWx0X3Rl
c3RfbmFtZSgpOworICAgICAgICB2YXIgdGVzdF9uYW1lID0gZ2V0X3Rlc3RfbmFtZShmdW5jLCBu
YW1lKTsKICAgICAgICAgdmFyIHRlc3Rfb2JqID0gbmV3IFRlc3QodGVzdF9uYW1lLCBwcm9wZXJ0
aWVzKTsKICAgICAgICAgaWYgKGZ1bmMpIHsKLSAgICAgICAgICAgIHRlc3Rfb2JqLnN0ZXAoZnVu
YywgdGVzdF9vYmosIHRlc3Rfb2JqKTsKKyAgICAgICAgICAgIHZhciB2YWx1ZSA9IHRlc3Rfb2Jq
LnN0ZXAoZnVuYywgdGVzdF9vYmosIHRlc3Rfb2JqKTsKKworICAgICAgICAgICAgLy8gVGVzdCBh
dXRob3JzIHNvbWV0aW1lcyByZXR1cm4gdmFsdWVzIHRvIGFzeW5jX3Rlc3QsIGV4cGVjdGluZyB1
cworICAgICAgICAgICAgLy8gdG8gaGFuZGxlIHRoZSB2YWx1ZSBzb21laG93LiBNYWtlIGRvaW5n
IHNvIGEgaGFybmVzcyBlcnJvciB0byBiZQorICAgICAgICAgICAgLy8gY2xlYXIgdGhpcyBpcyBp
bnZhbGlkLCBhbmQgcG9pbnQgYXV0aG9ycyB0byBwcm9taXNlX3Rlc3QgaWYgaXQKKyAgICAgICAg
ICAgIC8vIG1heSBiZSBhcHByb3ByaWF0ZS4KKyAgICAgICAgICAgIC8vCisgICAgICAgICAgICAv
LyBOb3RlIHRoYXQgd2Ugb25seSBwZXJmb3JtIHRoaXMgY2hlY2sgb24gdGhlIGluaXRpYWwgZnVu
Y3Rpb24KKyAgICAgICAgICAgIC8vIHBhc3NlZCB0byBhc3luY190ZXN0LCBub3Qgb24gYW55IGxh
dGVyIHN0ZXBzIC0gd2UgaGF2ZW4ndCBzZWVuIGEKKyAgICAgICAgICAgIC8vIGNvbnNpc3RlbnQg
cHJvYmxlbSB3aXRoIHRob3NlIChhbmQgaXQncyBoYXJkZXIgdG8gY2hlY2spLgorICAgICAgICAg
ICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQpIHsKKyAgICAgICAgICAgICAgICB2YXIgbXNnID0g
J1Rlc3QgbmFtZWQgIicgKyB0ZXN0X25hbWUgKworICAgICAgICAgICAgICAgICAgICAnIiBwYXNz
ZWQgYSBmdW5jdGlvbiB0byBgYXN5bmNfdGVzdGAgdGhhdCByZXR1cm5lZCBhIHZhbHVlLic7CisK
KyAgICAgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWUgJiYg
dHlwZW9mIHZhbHVlLnRoZW4gPT09ICdmdW5jdGlvbicpIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIG1zZyArPSAnIENvbnNpZGVyIHVzaW5nIGBwcm9taXNlX3Rlc3RgIGluc3RlYWQgd2hlbiAn
ICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAndXNpbmcgUHJvbWlzZXMgb3IgYXN5bmMv
YXdhaXQuJzsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0gY2F0Y2gg
KGVycikge30KKworICAgICAgICAgICAgICAgIHRlc3RzLnNldF9zdGF0dXModGVzdHMuc3RhdHVz
LkVSUk9SLCBtc2cpOworICAgICAgICAgICAgICAgIHRlc3RzLmNvbXBsZXRlKCk7CisgICAgICAg
ICAgICB9CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIHRlc3Rfb2JqOwogICAgIH0KQEAgLTU3
OSw3ICs2NDAsNyBAQCBwb2xpY2llcyBhbmQgY29udHJpYnV0aW9uIGZvcm1zIFszXS4KICAgICAg
ICAgICAgIG5hbWUgPSBmdW5jOwogICAgICAgICAgICAgZnVuYyA9IG51bGw7CiAgICAgICAgIH0K
LSAgICAgICAgdmFyIHRlc3RfbmFtZSA9IG5hbWUgPyBuYW1lIDogdGVzdF9lbnZpcm9ubWVudC5u
ZXh0X2RlZmF1bHRfdGVzdF9uYW1lKCk7CisgICAgICAgIHZhciB0ZXN0X25hbWUgPSBnZXRfdGVz
dF9uYW1lKGZ1bmMsIG5hbWUpOwogICAgICAgICB2YXIgdGVzdCA9IG5ldyBUZXN0KHRlc3RfbmFt
ZSwgcHJvcGVydGllcyk7CiAgICAgICAgIHRlc3QuX2lzX3Byb21pc2VfdGVzdCA9IHRydWU7CiAK
QEAgLTEzMjMsMTAgKzEzODQsMTYgQEAgcG9saWNpZXMgYW5kIGNvbnRyaWJ1dGlvbiBmb3JtcyBb
M10uCiAgICAgICAgICAgICAgICAiZXhwZWN0ZWQgYSBudW1iZXIgYnV0IGdvdCBhICR7dHlwZV9h
Y3R1YWx9IiwKICAgICAgICAgICAgICAgIHt0eXBlX2FjdHVhbDp0eXBlb2YgYWN0dWFsfSk7CiAK
LSAgICAgICAgYXNzZXJ0KE1hdGguYWJzKGFjdHVhbCAtIGV4cGVjdGVkKSA8PSBlcHNpbG9uLAot
ICAgICAgICAgICAgICAgImFzc2VydF9hcHByb3hfZXF1YWxzIiwgZGVzY3JpcHRpb24sCi0gICAg
ICAgICAgICAgICAiZXhwZWN0ZWQgJHtleHBlY3RlZH0gKy8tICR7ZXBzaWxvbn0gYnV0IGdvdCAk
e2FjdHVhbH0iLAotICAgICAgICAgICAgICAge2V4cGVjdGVkOmV4cGVjdGVkLCBhY3R1YWw6YWN0
dWFsLCBlcHNpbG9uOmVwc2lsb259KTsKKyAgICAgICAgLy8gVGhlIGVwc2lsb24gbWF0aCBiZWxv
dyBkb2VzIG5vdCBwbGFjZSBuaWNlIHdpdGggTmFOIGFuZCBJbmZpbml0eQorICAgICAgICAvLyBC
dXQgaW4gdGhpcyBjYXNlIEluZmluaXR5ID0gSW5maW5pdHkgYW5kIE5hTiA9IE5hTgorICAgICAg
ICBpZiAoaXNGaW5pdGUoYWN0dWFsKSB8fCBpc0Zpbml0ZShleHBlY3RlZCkpIHsKKyAgICAgICAg
ICAgIGFzc2VydChNYXRoLmFicyhhY3R1YWwgLSBleHBlY3RlZCkgPD0gZXBzaWxvbiwKKyAgICAg
ICAgICAgICAgICAgICAiYXNzZXJ0X2FwcHJveF9lcXVhbHMiLCBkZXNjcmlwdGlvbiwKKyAgICAg
ICAgICAgICAgICAgICAiZXhwZWN0ZWQgJHtleHBlY3RlZH0gKy8tICR7ZXBzaWxvbn0gYnV0IGdv
dCAke2FjdHVhbH0iLAorICAgICAgICAgICAgICAgICAgIHtleHBlY3RlZDpleHBlY3RlZCwgYWN0
dWFsOmFjdHVhbCwgZXBzaWxvbjplcHNpbG9ufSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICBhc3NlcnRfZXF1YWxzKGFjdHVhbCwgZXhwZWN0ZWQpOworICAgICAgICB9CiAgICAgfQog
ICAgIGV4cG9zZShhc3NlcnRfYXBwcm94X2VxdWFscywgImFzc2VydF9hcHByb3hfZXF1YWxzIik7
CiAKQEAgLTIwNjksNyArMjEzNiw3IEBAIHBvbGljaWVzIGFuZCBjb250cmlidXRpb24gZm9ybXMg
WzNdLgogICAgICAgICAgICAgICAgIGZ1bmMoKTsKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAg
ICAgICAgICAgICAgaWYocmVtYWluaW5nID09PSAwKSB7Ci0gICAgICAgICAgICAgICAgICAgIGFz
c2VydChmYWxzZSwgIndhaXRfZm9yIiwgZGVzY3JpcHRpb24sCisgICAgICAgICAgICAgICAgICAg
IGFzc2VydChmYWxzZSwgInN0ZXBfd2FpdF9mdW5jIiwgZGVzY3JpcHRpb24sCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAiVGltZWQgb3V0IHdhaXRpbmcgb24gY29uZGl0aW9uIik7CiAgICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIHJlbWFpbmluZy0tOwpAQCAtMjA4NCw3ICsy
MTUxLDcgQEAgcG9saWNpZXMgYW5kIGNvbnRyaWJ1dGlvbiBmb3JtcyBbM10uCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVvdXQ9MzAwMCwgaW50
ZXJ2YWw9MTAwKSB7CiAgICAgICAgIC8qKgogICAgICAgICAgKiBQb2xsIGZvciBhIGZ1bmN0aW9u
IHRvIHJldHVybiB0cnVlLCBhbmQgaW52b2tlIGEgY2FsbGJhY2sKLSAgICAgICAgICogZm9sbG93
ZWQgdGhpcy5kb25lKCkgb25jZSBpdCBkb2VzLCBvciBhc3NlcnQgaWYgYSB0aW1lb3V0CisgICAg
ICAgICAqIGZvbGxvd2VkIGJ5IHRoaXMuZG9uZSgpIG9uY2UgaXQgZG9lcywgb3IgYXNzZXJ0IGlm
IGEgdGltZW91dAogICAgICAgICAgKiBpcyByZWFjaGVkLiBUaGlzIGlzIHByZWZlcnJlZCBvdmVy
IGEgc2ltcGxlIHN0ZXBfdGltZW91dAogICAgICAgICAgKiB3aGVuZXZlciBwb3NzaWJsZSBzaW5j
ZSBpdCBhbGxvd3MgdGhlIHRpbWVvdXQgdG8gYmUgbG9uZ2VyCiAgICAgICAgICAqIHRvIHJlZHVj
ZSBpbnRlcm1pdHRlbnRzIHdpdGhvdXQgY29tcHJvbWlzaW5nIHRlc3QgZXhlY3V0aW9uIHNwZWVk
CkBAIC0zNzczLDcgKzM4NDAsNyBAQCBwb2xpY2llcyBhbmQgY29udHJpYnV0aW9uIGZvcm1zIFsz
XS4KICAgICBmdW5jdGlvbiBnZXRfdGl0bGUoKQogICAgIHsKICAgICAgICAgaWYgKCdkb2N1bWVu
dCcgaW4gZ2xvYmFsX3Njb3BlKSB7Ci0gICAgICAgICAgICAvL0Rvbid0IHVzZSBkb2N1bWVudC50
aXRsZSB0byB3b3JrIGFyb3VuZCBhbiBPcGVyYSBidWcgaW4gWEhUTUwgZG9jdW1lbnRzCisgICAg
ICAgICAgICAvL0Rvbid0IHVzZSBkb2N1bWVudC50aXRsZSB0byB3b3JrIGFyb3VuZCBhbiBPcGVy
YS9QcmVzdG8gYnVnIGluIFhIVE1MIGRvY3VtZW50cwogICAgICAgICAgICAgdmFyIHRpdGxlID0g
ZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInRpdGxlIilbMF07CiAgICAgICAgICAgICBp
ZiAodGl0bGUgJiYgdGl0bGUuZmlyc3RDaGlsZCAmJiB0aXRsZS5maXJzdENoaWxkLmRhdGEpIHsK
ICAgICAgICAgICAgICAgICByZXR1cm4gdGl0bGUuZmlyc3RDaGlsZC5kYXRhOwpAQCAtMzk5OCw1
ICs0MDY1LDUgQEAgc3Bhbi5vaywgc3Bhbi50aW1lb3V0LCBzcGFuLmVycm9yIHtcCiB9XAogIjsK
IAotfSkodGhpcyk7Cit9KShzZWxmKTsKIC8vIHZpbTogc2V0IGV4cGFuZHRhYiBzaGlmdHdpZHRo
PTQgdGFic3RvcD00OgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1w
bGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdzNjLWltcG9ydC5sb2cgYi9MYXlvdXRUZXN0cy9pbXBv
cnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy93M2MtaW1wb3J0LmxvZwppbmRl
eCA3Yjg2YzNjZTNmMzdhYjhhMTc0ZWExNjA0NDZmNTY3NWVmMDYxZTA1Li4wNmFlZDQzZTIwNDhj
NzM2ZTg0ZDFjOTYwYTJjNmMyZmUzOWJkZGZkIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9pbXBv
cnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy93M2MtaW1wb3J0LmxvZworKysg
Yi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy93
M2MtaW1wb3J0LmxvZwpAQCAtMjQsNiArMjQsOCBAQCBMaXN0IG9mIGZpbGVzOgogL0xheW91dFRl
c3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3NyaWhhcm5lc3Mu
anMKIC9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNl
cy90ZXN0LW9ubHktYXBpLmpzCiAvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9y
bS10ZXN0cy9yZXNvdXJjZXMvdGVzdC1vbmx5LWFwaS5qcy5oZWFkZXJzCisvTGF5b3V0VGVzdHMv
aW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC1vbmx5LWFwaS5t
LmpzCisvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJj
ZXMvdGVzdC1vbmx5LWFwaS5tLmpzLmhlYWRlcnMKIC9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mv
d2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0ZHJpdmVyLWFjdGlvbnMuanMKIC9MYXlv
dXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0ZHJp
dmVyLXZlbmRvci5qcwogL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVz
dHMvcmVzb3VyY2VzL3Rlc3Rkcml2ZXItdmVuZG9yLmpzLmhlYWRlcnMKZGlmZiAtLWdpdCBhL0xh
eW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvd2FzbS9qc2FwaS9pZGxo
YXJuZXNzLmFueS1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBs
YXRmb3JtLXRlc3RzL3dhc20vanNhcGkvaWRsaGFybmVzcy5hbnktZXhwZWN0ZWQudHh0CmluZGV4
IDFlMDFkYmQ1YmY5MzU2MjIwNzAyOWRjMDI3NmY0ZDhiMzgxNjllYjMuLmNmMzIzYjEyMDg0YjYx
NWQwMmFlNTc1OGNlMGRjNTlmMTZjMDA3ZjUgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2ltcG9y
dGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvd2FzbS9qc2FwaS9pZGxoYXJuZXNzLmFueS1leHBl
Y3RlZC50eHQKKysrIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0
cy93YXNtL2pzYXBpL2lkbGhhcm5lc3MuYW55LWV4cGVjdGVkLnR4dApAQCAtMSw1ICsxLDEwIEBA
CiAKIFBBU1Mgd2FzbS1qcy1hcGkgaW50ZXJmYWNlcy4KK1BBU1MgV2ViQXNzZW1ibHkgbmFtZXNw
YWNlOiBleHRlbmRlZCBhdHRyaWJ1dGVzCitQQVNTIFdlYkFzc2VtYmx5IG5hbWVzcGFjZTogcHJv
cGVydHkgZGVzY3JpcHRvcgorUEFTUyBXZWJBc3NlbWJseSBuYW1lc3BhY2U6IFtbRXh0ZW5zaWJs
ZV1dIGlzIHRydWUKK1BBU1MgV2ViQXNzZW1ibHkgbmFtZXNwYWNlOiBbW1Byb3RvdHlwZV1dIGlz
IE9iamVjdC5wcm90b3R5cGUKK1BBU1MgV2ViQXNzZW1ibHkgbmFtZXNwYWNlOiB0eXBlb2YgaXMg
Im9iamVjdCIKIFBBU1MgV2ViQXNzZW1ibHkgbmFtZXNwYWNlOiBvcGVyYXRpb24gdmFsaWRhdGUo
QnVmZmVyU291cmNlKQogUEFTUyBXZWJBc3NlbWJseSBuYW1lc3BhY2U6IG9wZXJhdGlvbiBjb21w
aWxlKEJ1ZmZlclNvdXJjZSkKIFBBU1MgV2ViQXNzZW1ibHkgbmFtZXNwYWNlOiBvcGVyYXRpb24g
aW5zdGFudGlhdGUoQnVmZmVyU291cmNlLCBvcHRpb25hbCBvYmplY3QpCmRpZmYgLS1naXQgYS9M
YXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3dlYi1zaGFyZS9zaGFy
ZS11cmwtaW52YWxpZC5odHRwcy5odG1sIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1w
bGF0Zm9ybS10ZXN0cy93ZWItc2hhcmUvc2hhcmUtdXJsLWludmFsaWQuaHR0cHMuaHRtbAppbmRl
eCA1ZWFlOGU4OTQyNmI0ODg5ZDZmOTg3YTI1ZGIyNGE4NDBkNTgzZjcxLi5jYjc2NDU4YzI0YzU2
MzJmNGE5N2QzZjhmNWE3NDRmYzQ2ZDdiNmEwIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9pbXBv
cnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3dlYi1zaGFyZS9zaGFyZS11cmwtaW52YWxpZC5o
dHRwcy5odG1sCisrKyBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVz
dHMvd2ViLXNoYXJlL3NoYXJlLXVybC1pbnZhbGlkLmh0dHBzLmh0bWwKQEAgLTExLDE1ICsxMSw2
NiBAQAogICA8Ym9keT4KICAgICA8c2NyaXB0PgogICAgICAgcHJvbWlzZV90ZXN0KGFzeW5jIHQg
PT4gewotICAgICAgICBjb25zdCB1cmwgPSAiaHR0cDovL2V4YW1wbGUuY29tOjY1NTM2IjsKLSAg
ICAgICAgYXdhaXQgdGVzdF9kcml2ZXIuYmxlc3MoCi0gICAgICAgICAgIndlYiBzaGFyZSIsCi0g
ICAgICAgICAgKCkgPT4gewotICAgICAgICAgICAgcmV0dXJuIHByb21pc2VfcmVqZWN0c19qcyh0
LCBUeXBlRXJyb3IsIG5hdmlnYXRvci5zaGFyZSh7IHVybCB9KSk7Ci0gICAgICAgICAgfSwKLSAg
ICAgICAgICAic2hhcmUgd2l0aCBhbiBpbnZhbGlkIFVSTCIKLSAgICAgICAgKTsKKyAgICAgICAg
YXdhaXQgdGVzdF9kcml2ZXIuYmxlc3MoKTsKKyAgICAgICAgY29uc3QgcHJvbWlzZSA9IG5hdmln
YXRvci5zaGFyZSh7IHVybDogImh0dHA6Ly9hLmNvbTo2NTUzNiIgfSk7CisgICAgICAgIHJldHVy
biBwcm9taXNlX3JlamVjdHNfanModCwgVHlwZUVycm9yLCBwcm9taXNlKTsKICAgICAgIH0sICJz
aGFyZSgpIHJlamVjdHMgd2hlbiBVUkwgaXMgaW52YWxpZCIpOworCisgICAgICBwcm9taXNlX3Rl
c3QoYXN5bmMgdCA9PiB7CisgICAgICAgIGF3YWl0IHRlc3RfZHJpdmVyLmJsZXNzKCk7CisgICAg
ICAgIGNvbnN0IHByb21pc2UgPSBuYXZpZ2F0b3Iuc2hhcmUoeyB1cmw6ICJmaWxlOi8vL2V0Yy9w
YXNzd2QiIH0pOworICAgICAgICByZXR1cm4gcHJvbWlzZV9yZWplY3RzX2pzKHQsIFR5cGVFcnJv
ciwgcHJvbWlzZSk7CisgICAgICB9LCAic2hhcmUoKSByZWplY3RzIGZpbGU6Ly8gVVJMcyIpOwor
CisgICAgICBwcm9taXNlX3Rlc3QoYXN5bmMgdCA9PiB7CisgICAgICAgIGF3YWl0IHRlc3RfZHJp
dmVyLmJsZXNzKCk7CisgICAgICAgIGNvbnN0IHByb21pc2UgPSBuYXZpZ2F0b3Iuc2hhcmUoeyB1
cmw6ICJ3c3M6Ly9hLmNvbS8iIH0pOworICAgICAgICByZXR1cm4gcHJvbWlzZV9yZWplY3RzX2pz
KHQsIFR5cGVFcnJvciwgcHJvbWlzZSk7CisgICAgICB9LCAic2hhcmUoKSByZWplY3RzIHdzczog
VVJMcyIpOworCisgICAgICBwcm9taXNlX3Rlc3QoYXN5bmMgdCA9PiB7CisgICAgICAgIGF3YWl0
IHRlc3RfZHJpdmVyLmJsZXNzKCk7CisgICAgICAgIGNvbnN0IHByb21pc2UgPSBuYXZpZ2F0b3Iu
c2hhcmUoeyB1cmw6ICJhYm91dDpjb25maWciIH0pOworICAgICAgICByZXR1cm4gcHJvbWlzZV9y
ZWplY3RzX2pzKHQsIFR5cGVFcnJvciwgcHJvbWlzZSk7CisgICAgICB9LCAic2hhcmUoKSByZWpl
Y3RzIGFib3V0OiBVUkxzIik7CisKKyAgICAgIHByb21pc2VfdGVzdChhc3luYyB0ID0+IHsKKyAg
ICAgICAgYXdhaXQgdGVzdF9kcml2ZXIuYmxlc3MoKTsKKyAgICAgICAgY29uc3QgcHJvbWlzZSA9
IG5hdmlnYXRvci5zaGFyZSh7IHVybDogImNocm9tZTovL2Fib3V0IiB9KTsKKyAgICAgICAgcmV0
dXJuIHByb21pc2VfcmVqZWN0c19qcyh0LCBUeXBlRXJyb3IsIHByb21pc2UpOworICAgICAgfSwg
InNoYXJlKCkgcmVqZWN0cyBjaHJvbWU6IFVSTHMiKTsKKworICAgICAgcHJvbWlzZV90ZXN0KGFz
eW5jIHQgPT4geworICAgICAgICBhd2FpdCB0ZXN0X2RyaXZlci5ibGVzcygpOworICAgICAgICBj
b25zdCBwcm9taXNlID0gbmF2aWdhdG9yLnNoYXJlKHsgdXJsOiAiamF2YXNjcmlwdDp3aW5kb3cu
YWxlcnQoJ2Vycm9yJykiIH0pOworICAgICAgICByZXR1cm4gcHJvbWlzZV9yZWplY3RzX2pzKHQs
IFR5cGVFcnJvciwgcHJvbWlzZSk7CisgICAgICB9LCAic2hhcmUoKSByZWplY3RzIGphdmFzY3Jp
cHQ6IFVSTHMiKTsKKworICAgICAgcHJvbWlzZV90ZXN0KGFzeW5jIHQgPT4geworICAgICAgICBh
d2FpdCB0ZXN0X2RyaXZlci5ibGVzcygpOworICAgICAgICBjb25zdCBmaWxlID0gbmV3IEZpbGUo
W10sICJ0ZXh0L3BsYWluIik7CisgICAgICAgIGNvbnN0IHByb21pc2UgPSBuYXZpZ2F0b3Iuc2hh
cmUoeyB1cmw6IFVSTC5jcmVhdGVPYmplY3RVUkwoZmlsZSkgfSk7CisgICAgICAgIHJldHVybiBw
cm9taXNlX3JlamVjdHNfanModCwgVHlwZUVycm9yLCBwcm9taXNlKTsKKyAgICAgIH0sICJzaGFy
ZSgpIHJlamVjdHMgYmxvYjogVVJMcyIpOworCisgICAgICBwcm9taXNlX3Rlc3QoYXN5bmMgdCA9
PiB7CisgICAgICAgIGNvbnN0IGVuY29kZXIgPSBuZXcgVGV4dEVuY29kZXIoKTsKKyAgICAgICAg
Y29uc3QgZW5jb2RlZCA9IGVuY29kZXIuZW5jb2RlKAorICAgICAgICAgIGA8bWV0YSBodHRwLWVx
dWl2PSJyZWZyZXNoIiBjb250ZW50PSIxO3VybD1odHRwOi8vZXhhbXBsZS5jb20vIj5gCisgICAg
ICAgICk7CisgICAgICAgIGNvbnN0IGZpbGUgPSBuZXcgRmlsZShlbmNvZGVkLCAidGV4dC9odG1s
Iik7CisgICAgICAgIGNvbnN0IHVybCA9IFVSTC5jcmVhdGVPYmplY3RVUkwoZmlsZSk7CisgICAg
ICAgIGNvbnN0IHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7CisgICAgICAgIHJlYWRlci5yZWFk
QXNEYXRhVVJMKGZpbGUpOworICAgICAgICBjb25zdCBkYXRhVVJMID0gYXdhaXQgbmV3IFByb21p
c2UocmVzb2x2ZSA9PiB7CisgICAgICAgICAgcmVhZGVyLmFkZEV2ZW50TGlzdGVuZXIoImxvYWQi
LCAoKSA9PiB7CisgICAgICAgICAgICByZXNvbHZlKHJlYWRlci5yZXN1bHQpOworICAgICAgICAg
IH0pOworICAgICAgICB9KTsKKyAgICAgICAgYXdhaXQgdGVzdF9kcml2ZXIuYmxlc3MoKTsKKyAg
ICAgICAgY29uc3QgcHJvbWlzZSA9IG5hdmlnYXRvci5zaGFyZSh7IHVybDogZGF0YVVSTCB9KTsK
KyAgICAgICAgcmV0dXJuIHByb21pc2VfcmVqZWN0c19qcyh0LCBUeXBlRXJyb3IsIHByb21pc2Up
OworICAgICAgfSwgInNoYXJlKCkgcmVqZWN0cyBkYXRhOiBVUkxzIik7CiAgICAgPC9zY3JpcHQ+
CiAgIDwvYm9keT4KIDwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3cz
Yy93ZWItcGxhdGZvcm0tdGVzdHMvd2VicnRjL1JUQ1BlZXJDb25uZWN0aW9uLWdldFN0YXRzLmh0
dHBzLmh0bWwgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3dl
YnJ0Yy9SVENQZWVyQ29ubmVjdGlvbi1nZXRTdGF0cy5odHRwcy5odG1sCmluZGV4IGJkZjc3NzAz
NTBlOTlmZTZiNzMwZDNlOTEyNTVmNDlmMzA5NjFlZDAuLmVkZTBhYjFlZmMxMDc5OWQxMjQ3MzQz
N2U1M2YyZWM1NTVhYTYyNWYgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93
ZWItcGxhdGZvcm0tdGVzdHMvd2VicnRjL1JUQ1BlZXJDb25uZWN0aW9uLWdldFN0YXRzLmh0dHBz
Lmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy93
ZWJydGMvUlRDUGVlckNvbm5lY3Rpb24tZ2V0U3RhdHMuaHR0cHMuaHRtbApAQCAtODIsNyArODIs
NyBAQAogICAgIGNvbnN0IHBjID0gbmV3IFJUQ1BlZXJDb25uZWN0aW9uKCk7CiAgICAgdC5hZGRf
Y2xlYW51cCgoKSA9PiBwYy5jbG9zZSgpKTsKIAotICAgIGNvbnN0IHN0cmVhbSA9IGF3YWl0IG5h
dmlnYXRvci5tZWRpYURldmljZXMuZ2V0VXNlck1lZGlhKHthdWRpbzogdHJ1ZX0pOworICAgIGNv
bnN0IHN0cmVhbSA9IGF3YWl0IGdldE5vaXNlU3RyZWFtKHthdWRpbzogdHJ1ZX0pOwogICAgIHQu
YWRkX2NsZWFudXAoKCkgPT4gc3RyZWFtLmdldFRyYWNrcygpLmZvckVhY2godHJhY2sgPT4gdHJh
Y2suc3RvcCgpKSk7CiAgICAgY29uc3QgW3RyYWNrXSA9IHN0cmVhbS5nZXRUcmFja3MoKTsKICAg
ICBwYy5hZGRUcmFuc2NlaXZlcih0cmFjayk7CkBAIC0yNDcsNyArMjQ3LDcgQEAKIAogICAgIGNv
bnN0IGRhdGFDaGFubmVsID0gcGMxLmNyZWF0ZURhdGFDaGFubmVsKCd0ZXN0LWNoYW5uZWwnKTsK
IAotICAgIHJldHVybiBnZXROb2lzZVN0cmVhbSh7CisgICAgZ2V0Tm9pc2VTdHJlYW0oewogICAg
ICAgYXVkaW86IHRydWUsCiAgICAgICB2aWRlbzogdHJ1ZQogICAgIH0pCkBAIC0yOTIsOSArMjky
LDYgQEAKICAgICAgICAgICAnRXhwZWN0IHZpZGVvIHRyYWNrIHN0YXRzIHRvIGJlIGZvdW5kJyk7
CiAKICAgICAgICAgYXNzZXJ0X2VxdWFscyh2aWRlb1RyYWNrU3RhdHMua2luZCwgJ3ZpZGVvJyk7
Ci0KLSAgICAgICAgYXNzZXJ0X3RydWUobWVkaWFTdHJlYW1TdGF0cy50cmFja0lkcy5pbmNsdWRl
KGF1ZGlvVHJhY2tTdGF0cy5pZCkpOwotICAgICAgICBhc3NlcnRfdHJ1ZShtZWRpYVN0cmVhbVN0
YXRzLnRyYWNrSWRzLmluY2x1ZGUodmlkZW9UcmFja1N0YXRzLmlkKSk7CiAgICAgICB9CiAKICAg
ICAgIGNvbnN0IG9uQ29ubmVjdGVkID0gdC5zdGVwX2Z1bmMoKCkgPT4gewpkaWZmIC0tZ2l0IGEv
TGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy93ZWJydGMvUlRDUGVl
ckNvbm5lY3Rpb24tc2V0UmVtb3RlRGVzY3JpcHRpb24tcmVwbGFjZVRyYWNrLmh0dHBzLmh0bWwg
Yi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3dlYnJ0Yy9SVENQ
ZWVyQ29ubmVjdGlvbi1zZXRSZW1vdGVEZXNjcmlwdGlvbi1yZXBsYWNlVHJhY2suaHR0cHMuaHRt
bAppbmRleCA0YmRjZGRlYzUxMTVjM2Q5Yzk1Mzg1OTk1MDg1NGIzZWM5N2ZiYmVmLi4yMTczMjZi
ZmFlMjJmMTNjYTZkY2UyODc0ZDhkMDFkMTA2YWQ3Mzc4IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0
cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3dlYnJ0Yy9SVENQZWVyQ29ubmVjdGlv
bi1zZXRSZW1vdGVEZXNjcmlwdGlvbi1yZXBsYWNlVHJhY2suaHR0cHMuaHRtbAorKysgYi9MYXlv
dXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3dlYnJ0Yy9SVENQZWVyQ29u
bmVjdGlvbi1zZXRSZW1vdGVEZXNjcmlwdGlvbi1yZXBsYWNlVHJhY2suaHR0cHMuaHRtbApAQCAt
MTMsNyArMTMsNyBAQAogICBhc3luY190ZXN0KHQgPT4gewogICAgIGNvbnN0IGNhbGxlciA9IG5l
dyBSVENQZWVyQ29ubmVjdGlvbigpOwogICAgIHQuYWRkX2NsZWFudXAoKCkgPT4gY2FsbGVyLmNs
b3NlKCkpOwotICAgIHJldHVybiBnZXRVc2VyTWVkaWFUcmFja3NBbmRTdHJlYW1zKDIpCisgICAg
Z2V0VXNlck1lZGlhVHJhY2tzQW5kU3RyZWFtcygyKQogICAgIC50aGVuKHQuc3RlcF9mdW5jKChb
dHJhY2tzLCBzdHJlYW1zXSkgPT4gewogICAgICAgY29uc3Qgc2VuZGVyID0gY2FsbGVyLmFkZFRy
YWNrKHRyYWNrc1swXSwgc3RyZWFtc1swXSk7CiAgICAgICByZXR1cm4gc2VuZGVyLnJlcGxhY2VU
cmFjayh0cmFja3NbMV0pCkBAIC0zMCw3ICszMCw3IEBACiAgIGFzeW5jX3Rlc3QodCA9PiB7CiAg
ICAgY29uc3QgY2FsbGVyID0gbmV3IFJUQ1BlZXJDb25uZWN0aW9uKCk7CiAgICAgdC5hZGRfY2xl
YW51cCgoKSA9PiBjYWxsZXIuY2xvc2UoKSk7Ci0gICAgcmV0dXJuIGdldFVzZXJNZWRpYVRyYWNr
c0FuZFN0cmVhbXMoMSkKKyAgICBnZXRVc2VyTWVkaWFUcmFja3NBbmRTdHJlYW1zKDEpCiAgICAg
LnRoZW4odC5zdGVwX2Z1bmMoKFt0cmFja3MsIHN0cmVhbXNdKSA9PiB7CiAgICAgICBjb25zdCBz
ZW5kZXIgPSBjYWxsZXIuYWRkVHJhY2sodHJhY2tzWzBdLCBzdHJlYW1zWzBdKTsKICAgICAgIHJl
dHVybiBzZW5kZXIucmVwbGFjZVRyYWNrKG51bGwpCkBAIC00Nyw3ICs0Nyw3IEBACiAgIGFzeW5j
X3Rlc3QodCA9PiB7CiAgICAgY29uc3QgY2FsbGVyID0gbmV3IFJUQ1BlZXJDb25uZWN0aW9uKCk7
CiAgICAgdC5hZGRfY2xlYW51cCgoKSA9PiBjYWxsZXIuY2xvc2UoKSk7Ci0gICAgcmV0dXJuIGdl
dFVzZXJNZWRpYVRyYWNrc0FuZFN0cmVhbXMoMikKKyAgICBnZXRVc2VyTWVkaWFUcmFja3NBbmRT
dHJlYW1zKDIpCiAgICAgLnRoZW4odC5zdGVwX2Z1bmMoKFt0cmFja3MsIHN0cmVhbXNdKSA9PiB7
CiAgICAgICBjb25zdCBzZW5kZXIgPSBjYWxsZXIuYWRkVHJhY2sodHJhY2tzWzBdLCBzdHJlYW1z
WzBdKTsKICAgICAgIGFzc2VydF9lcXVhbHMoc2VuZGVyLnRyYWNrLCB0cmFja3NbMF0pOwpAQCAt
NjYsNyArNjYsNyBAQAogICAgIGNvbnN0IGV4cGVjdGVkRXhjZXB0aW9uID0gJ0ludmFsaWRTdGF0
ZUVycm9yJzsKICAgICBjb25zdCBjYWxsZXIgPSBuZXcgUlRDUGVlckNvbm5lY3Rpb24oKTsKICAg
ICB0LmFkZF9jbGVhbnVwKCgpID0+IGNhbGxlci5jbG9zZSgpKTsKLSAgICByZXR1cm4gZ2V0VXNl
ck1lZGlhVHJhY2tzQW5kU3RyZWFtcygyKQorICAgIGdldFVzZXJNZWRpYVRyYWNrc0FuZFN0cmVh
bXMoMikKICAgICAudGhlbih0LnN0ZXBfZnVuYygoW3RyYWNrcywgc3RyZWFtc10pID0+IHsKICAg
ICAgIGNvbnN0IHNlbmRlciA9IGNhbGxlci5hZGRUcmFjayh0cmFja3NbMF0sIHN0cmVhbXNbMF0p
OwogICAgICAgY2FsbGVyLmNsb3NlKCk7CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbXBvcnRl
ZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3dlYnJ0Yy9SVENQZWVyQ29ubmVjdGlvbi10cmFjay1z
dGF0cy5odHRwcy1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBs
YXRmb3JtLXRlc3RzL3dlYnJ0Yy9SVENQZWVyQ29ubmVjdGlvbi10cmFjay1zdGF0cy5odHRwcy1l
eHBlY3RlZC50eHQKaW5kZXggYzRjMWM4MDIyOTEyY2YxMTY3YTJhNWU1MTRjMGE0ZmJiYzA4OTQ2
MC4uZmM1YzQ0YjFlYzI3OWVkMWQ5YzVlYWRkZGM1ZGIyYmRiZjJmMWFiZCAxMDA2NDQKLS0tIGEv
TGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy93ZWJydGMvUlRDUGVl
ckNvbm5lY3Rpb24tdHJhY2stc3RhdHMuaHR0cHMtZXhwZWN0ZWQudHh0CisrKyBiL0xheW91dFRl
c3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvd2VicnRjL1JUQ1BlZXJDb25uZWN0
aW9uLXRyYWNrLXN0YXRzLmh0dHBzLWV4cGVjdGVkLnR4dApAQCAtMSwxMCArMSw2IEBACiAKIFBB
U1MgYWRkVHJhY2soKSB3aXRob3V0IHNldExvY2FsRGVzY3JpcHRpb24oKSB5aWVsZHMgdHJhY2sg
c3RhdHMKLUZBSUwgYWRkVHJhY2soKSB3aXRob3V0IHNldExvY2FsRGVzY3JpcHRpb24oKSB5aWVs
ZHMgbWVkaWEgc3RyZWFtIHN0YXRzIGFzc2VydF90cnVlOiBIYXMgc3RhdHMgZm9yIHN0cmVhbSBl
eHBlY3RlZCB0cnVlIGdvdCBmYWxzZQogUEFTUyBhZGRUcmFjaygpIHdpdGggc2V0TG9jYWxEZXNj
cmlwdGlvbigpIHlpZWxkcyB0cmFjayBzdGF0cwotRkFJTCBhZGRUcmFjaygpIHdpdGggc2V0TG9j
YWxEZXNjcmlwdGlvbigpIHlpZWxkcyBtZWRpYSBzdHJlYW0gc3RhdHMgYXNzZXJ0X3RydWU6IEhh
cyBzdGF0cyBmb3Igc3RyZWFtIGV4cGVjdGVkIHRydWUgZ290IGZhbHNlCi1GQUlMIGFkZFRyYWNr
KCk6IE1lZGlhIHN0cmVhbSBzdGF0cyByZWZlcmVuY2VzIHRyYWNrIHN0YXRzIGFzc2VydF90cnVl
OiBIYXMgc3RhdHMgZm9yIHRyYWNrIGFuZCBzdHJlYW0gZXhwZWN0ZWQgdHJ1ZSBnb3QgZmFsc2UK
LUZBSUwgTWVkaWEgc3RyZWFtIHN0YXRzIHJlZmVyZW5jZXMgdHJhY2sgc3RhdHMgYXNzZXJ0X3Ry
dWU6IEhhcyBzdGF0cyBmb3IgdHJhY2sgYW5kIHN0cmVhbSBleHBlY3RlZCB0cnVlIGdvdCBmYWxz
ZQogUEFTUyBPL0EgZXhjaGFuZ2UgeWllbGRzIG91dGJvdW5kIFJUUCBzdHJlYW0gc3RhdHMgZm9y
IHNlbmRpbmcgdHJhY2sKIFBBU1MgTy9BIGV4Y2hhbmdlIHlpZWxkcyBpbmJvdW5kIFJUUCBzdHJl
YW0gc3RhdHMgZm9yIHJlY2VpdmluZyB0cmFjawogUEFTUyByZXBsYWNlVHJhY2soKSBiZWZvcmUg
b2ZmZXI6IG5ldyB0cmFjayBhdHRhY2htZW50IHN0YXRzIHByZXNlbnQKZGlmZiAtLWdpdCBhL0xh
eW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvd2VicnRjL1JUQ1BlZXJD
b25uZWN0aW9uLXRyYWNrLXN0YXRzLmh0dHBzLmh0bWwgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93
M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3dlYnJ0Yy9SVENQZWVyQ29ubmVjdGlvbi10cmFjay1zdGF0
cy5odHRwcy5odG1sCmluZGV4IDgzYzlmMTkxNmNkMDJhNWU5MTAzMWU0ZTYxODMxOTYyOGRhNTJj
Y2MuLjdjMzQ0MjIzMDI5OTc4ZjJiMGRlMTBjZTZkOGVkZmFmNDg5MDkwMjkgMTAwNjQ0Ci0tLSBh
L0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvd2VicnRjL1JUQ1Bl
ZXJDb25uZWN0aW9uLXRyYWNrLXN0YXRzLmh0dHBzLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvaW1w
b3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy93ZWJydGMvUlRDUGVlckNvbm5lY3Rpb24tdHJh
Y2stc3RhdHMuaHR0cHMuaHRtbApAQCAtMjMsNyArMjMsNyBAQAogICAgIGNvbnN0IHBjID0gbmV3
IFJUQ1BlZXJDb25uZWN0aW9uKCk7CiAgICAgdC5hZGRfY2xlYW51cCgoKSA9PiBwYy5jbG9zZSgp
KTsKICAgICBsZXQgdHJhY2s7Ci0gICAgcmV0dXJuIGdldFVzZXJNZWRpYVRyYWNrc0FuZFN0cmVh
bXMoMSkKKyAgICBnZXRVc2VyTWVkaWFUcmFja3NBbmRTdHJlYW1zKDEpCiAgICAgLnRoZW4odC5z
dGVwX2Z1bmMoKFt0cmFja3MsIHN0cmVhbXNdKSA9PiB7CiAgICAgICB0LmFkZF9jbGVhbnVwKCgp
ID0+IHRyYWNrcy5mb3JFYWNoKHRyYWNrID0+IHRyYWNrLnN0b3AoKSkpOwogICAgICAgdHJhY2sg
PSB0cmFja3NbMF07CkBAIC00OCwzMSArNDgsOSBAQAogICBhc3luY190ZXN0KHQgPT4gewogICAg
IGNvbnN0IHBjID0gbmV3IFJUQ1BlZXJDb25uZWN0aW9uKCk7CiAgICAgdC5hZGRfY2xlYW51cCgo
KSA9PiBwYy5jbG9zZSgpKTsKLSAgICBsZXQgc3RyZWFtOwotICAgIHJldHVybiBnZXRVc2VyTWVk
aWFUcmFja3NBbmRTdHJlYW1zKDEpCi0gICAgLnRoZW4odC5zdGVwX2Z1bmMoKFt0cmFja3MsIHN0
cmVhbXNdKSA9PiB7Ci0gICAgICB0LmFkZF9jbGVhbnVwKCgpID0+IHRyYWNrcy5mb3JFYWNoKHRy
YWNrID0+IHRyYWNrLnN0b3AoKSkpOwotICAgICAgbGV0IHRyYWNrID0gdHJhY2tzWzBdOwotICAg
ICAgc3RyZWFtID0gc3RyZWFtc1swXTsKLSAgICAgIHBjLmFkZFRyYWNrKHRyYWNrLCBzdHJlYW0p
OwotICAgICAgcmV0dXJuIHBjLmdldFN0YXRzKCk7Ci0gICAgfSkpCi0gICAgLnRoZW4odC5zdGVw
X2Z1bmMocmVwb3J0ID0+IHsKLSAgICAgIGxldCBzdHJlYW1TdGF0cyA9IGZpbmRTdGF0c0J5VHlw
ZUFuZElkKHJlcG9ydCwgJ3N0cmVhbScsIHN0cmVhbS5pZCk7Ci0gICAgICBhc3NlcnRfdHJ1ZShz
dHJlYW1TdGF0cyAhPSBudWxsLCAnSGFzIHN0YXRzIGZvciBzdHJlYW0nKTsKLSAgICAgIHZhbGlk
YXRlUnRjU3RhdHMocmVwb3J0LCBzdHJlYW1TdGF0cyk7Ci0gICAgICB0LmRvbmUoKTsKLSAgICB9
KSkKLSAgICAuY2F0Y2godC5zdGVwX2Z1bmMocmVhc29uID0+IHsKLSAgICAgIGFzc2VydF91bnJl
YWNoZWQocmVhc29uKTsKLSAgICB9KSk7Ci0gIH0sICdhZGRUcmFjaygpIHdpdGhvdXQgc2V0TG9j
YWxEZXNjcmlwdGlvbigpIHlpZWxkcyBtZWRpYSBzdHJlYW0gc3RhdHMnKTsKIAotICBhc3luY190
ZXN0KHQgPT4gewotICAgIGNvbnN0IHBjID0gbmV3IFJUQ1BlZXJDb25uZWN0aW9uKCk7Ci0gICAg
dC5hZGRfY2xlYW51cCgoKSA9PiBwYy5jbG9zZSgpKTsKICAgICBsZXQgdHJhY2s7Ci0gICAgcmV0
dXJuIGdldFVzZXJNZWRpYVRyYWNrc0FuZFN0cmVhbXMoMSkKKyAgICBnZXRVc2VyTWVkaWFUcmFj
a3NBbmRTdHJlYW1zKDEpCiAgICAgLnRoZW4odC5zdGVwX2Z1bmMoKFt0cmFja3MsIHN0cmVhbXNd
KSA9PiB7CiAgICAgICB0LmFkZF9jbGVhbnVwKCgpID0+IHRyYWNrcy5mb3JFYWNoKHRyYWNrID0+
IHRyYWNrLnN0b3AoKSkpOwogICAgICAgdHJhY2sgPSB0cmFja3NbMF07CkBAIC05NiwxMTQgKzc0
LDEzIEBACiAgICAgfSkpOwogICB9LCAnYWRkVHJhY2soKSB3aXRoIHNldExvY2FsRGVzY3JpcHRp
b24oKSB5aWVsZHMgdHJhY2sgc3RhdHMnKTsKIAotICBhc3luY190ZXN0KHQgPT4gewotICAgIGNv
bnN0IHBjID0gbmV3IFJUQ1BlZXJDb25uZWN0aW9uKCk7Ci0gICAgdC5hZGRfY2xlYW51cCgoKSA9
PiBwYy5jbG9zZSgpKTsKLSAgICBsZXQgc3RyZWFtOwotICAgIHJldHVybiBnZXRVc2VyTWVkaWFU
cmFja3NBbmRTdHJlYW1zKDEpCi0gICAgLnRoZW4odC5zdGVwX2Z1bmMoKFt0cmFja3MsIHN0cmVh
bXNdKSA9PiB7Ci0gICAgICB0LmFkZF9jbGVhbnVwKCgpID0+IHRyYWNrcy5mb3JFYWNoKHRyYWNr
ID0+IHRyYWNrLnN0b3AoKSkpOwotICAgICAgbGV0IHRyYWNrID0gdHJhY2tzWzBdOwotICAgICAg
c3RyZWFtID0gc3RyZWFtc1swXTsKLSAgICAgIHBjLmFkZFRyYWNrKHRyYWNrLCBzdHJlYW0pOwot
ICAgICAgcmV0dXJuIHBjLmNyZWF0ZU9mZmVyKCk7Ci0gICAgfSkpCi0gICAgLnRoZW4odC5zdGVw
X2Z1bmMob2ZmZXIgPT4gewotICAgICAgcmV0dXJuIHBjLnNldExvY2FsRGVzY3JpcHRpb24ob2Zm
ZXIpOwotICAgIH0pKQotICAgIC50aGVuKHQuc3RlcF9mdW5jKCgpID0+IHsKLSAgICAgIHJldHVy
biBwYy5nZXRTdGF0cygpOwotICAgIH0pKQotICAgIC50aGVuKHQuc3RlcF9mdW5jKHJlcG9ydCA9
PiB7Ci0gICAgICBsZXQgc3RyZWFtU3RhdHMgPSBmaW5kU3RhdHNCeVR5cGVBbmRJZChyZXBvcnQs
ICdzdHJlYW0nLCBzdHJlYW0uaWQpOwotICAgICAgYXNzZXJ0X3RydWUoc3RyZWFtU3RhdHMgIT0g
bnVsbCwgJ0hhcyBzdGF0cyBmb3Igc3RyZWFtJyk7Ci0gICAgICB2YWxpZGF0ZVJ0Y1N0YXRzKHJl
cG9ydCwgc3RyZWFtU3RhdHMpOwotICAgICAgdC5kb25lKCk7Ci0gICAgfSkpCi0gICAgLmNhdGNo
KHQuc3RlcF9mdW5jKHJlYXNvbiA9PiB7Ci0gICAgICBhc3NlcnRfdW5yZWFjaGVkKHJlYXNvbik7
Ci0gICAgfSkpOwotICB9LCAnYWRkVHJhY2soKSB3aXRoIHNldExvY2FsRGVzY3JpcHRpb24oKSB5
aWVsZHMgbWVkaWEgc3RyZWFtIHN0YXRzJyk7Ci0KLSAgYXN5bmNfdGVzdCh0ID0+IHsKLSAgICBj
b25zdCBwYyA9IG5ldyBSVENQZWVyQ29ubmVjdGlvbigpOwotICAgIHQuYWRkX2NsZWFudXAoKCkg
PT4gcGMuY2xvc2UoKSk7Ci0gICAgbGV0IHRyYWNrOwotICAgIGxldCBzdHJlYW07Ci0gICAgcmV0
dXJuIGdldFVzZXJNZWRpYVRyYWNrc0FuZFN0cmVhbXMoMSkKLSAgICAudGhlbih0LnN0ZXBfZnVu
YygoW3RyYWNrcywgc3RyZWFtc10pID0+IHsKLSAgICAgIHQuYWRkX2NsZWFudXAoKCkgPT4gdHJh
Y2tzLmZvckVhY2godHJhY2sgPT4gdHJhY2suc3RvcCgpKSk7Ci0gICAgICB0cmFjayA9IHRyYWNr
c1swXTsKLSAgICAgIHN0cmVhbSA9IHN0cmVhbXNbMF07Ci0gICAgICBwYy5hZGRUcmFjayh0cmFj
aywgc3RyZWFtKTsKLSAgICAgIHJldHVybiBwYy5jcmVhdGVPZmZlcigpOwotICAgIH0pKQotICAg
IC50aGVuKHQuc3RlcF9mdW5jKG9mZmVyID0+IHsKLSAgICAgIHJldHVybiBwYy5zZXRMb2NhbERl
c2NyaXB0aW9uKG9mZmVyKTsKLSAgICB9KSkKLSAgICAudGhlbih0LnN0ZXBfZnVuYygoKSA9PiB7
Ci0gICAgICByZXR1cm4gcGMuZ2V0U3RhdHMoKTsKLSAgICB9KSkKLSAgICAudGhlbih0LnN0ZXBf
ZnVuYyhyZXBvcnQgPT4gewotICAgICAgbGV0IHRyYWNrU3RhdHMgPSBmaW5kU3RhdHNCeVR5cGVB
bmRJZChyZXBvcnQsICd0cmFjaycsIHRyYWNrLmlkKTsKLSAgICAgIGxldCBzdHJlYW1TdGF0cyA9
IGZpbmRTdGF0c0J5VHlwZUFuZElkKHJlcG9ydCwgJ3N0cmVhbScsIHN0cmVhbS5pZCk7Ci0gICAg
ICBhc3NlcnRfdHJ1ZSh0cmFja1N0YXRzICE9IG51bGwgJiYgc3RyZWFtU3RhdHMgIT0gbnVsbCwK
LSAgICAgICAgICAgICAgICAgICdIYXMgc3RhdHMgZm9yIHRyYWNrIGFuZCBzdHJlYW0nKTsKLSAg
ICAgIGFzc2VydF9hcnJheV9lcXVhbHMoc3RyZWFtU3RhdHMudHJhY2tJZHMsIFsgdHJhY2tTdGF0
cy5pZCBdLAotICAgICAgICAgICAgICAgICAgICAgICAgICAnc3RyZWFtU3RhdHMudHJhY2tJZHMg
PT0gWyB0cmFja1N0YXRzLmlkIF0nKTsKLSAgICAgIHZhbGlkYXRlUnRjU3RhdHMocmVwb3J0LCB0
cmFja1N0YXRzKTsKLSAgICAgIHZhbGlkYXRlUnRjU3RhdHMocmVwb3J0LCBzdHJlYW1TdGF0cyk7
Ci0gICAgICB0LmRvbmUoKTsKLSAgICB9KSkKLSAgICAuY2F0Y2godC5zdGVwX2Z1bmMocmVhc29u
ID0+IHsKLSAgICAgIGFzc2VydF91bnJlYWNoZWQocmVhc29uKTsKLSAgICB9KSk7Ci0gIH0sICdh
ZGRUcmFjaygpOiBNZWRpYSBzdHJlYW0gc3RhdHMgcmVmZXJlbmNlcyB0cmFjayBzdGF0cycpOwot
Ci0gIGFzeW5jX3Rlc3QodCA9PiB7Ci0gICAgY29uc3QgcGMgPSBuZXcgUlRDUGVlckNvbm5lY3Rp
b24oKTsKLSAgICB0LmFkZF9jbGVhbnVwKCgpID0+IHBjLmNsb3NlKCkpOwotICAgIGxldCB0cmFj
azsKLSAgICBsZXQgc3RyZWFtOwotICAgIHJldHVybiBnZXRVc2VyTWVkaWFUcmFja3NBbmRTdHJl
YW1zKDEpCi0gICAgLnRoZW4odC5zdGVwX2Z1bmMoKFt0cmFja3MsIHN0cmVhbXNdKSA9PiB7Ci0g
ICAgICB0LmFkZF9jbGVhbnVwKCgpID0+IHRyYWNrcy5mb3JFYWNoKHRyYWNrID0+IHRyYWNrLnN0
b3AoKSkpOwotICAgICAgdHJhY2sgPSB0cmFja3NbMF07Ci0gICAgICBzdHJlYW0gPSBzdHJlYW1z
WzBdOwotICAgICAgc3RyZWFtLmFkZFRyYWNrKHRyYWNrKTsKLSAgICAgIGZvciAoY29uc3QgdHJh
Y2sgb2Ygc3RyZWFtLmdldFRyYWNrcygpKQotICAgICAgICBwYy5hZGRUcmFjayh0cmFjaywgc3Ry
ZWFtKTsKLSAgICAgIHJldHVybiBwYy5jcmVhdGVPZmZlcigpOwotICAgIH0pKQotICAgIC50aGVu
KHQuc3RlcF9mdW5jKG9mZmVyID0+IHsKLSAgICAgIHJldHVybiBwYy5zZXRMb2NhbERlc2NyaXB0
aW9uKG9mZmVyKTsKLSAgICB9KSkKLSAgICAudGhlbih0LnN0ZXBfZnVuYygoKSA9PiB7Ci0gICAg
ICByZXR1cm4gcGMuZ2V0U3RhdHMoKTsKLSAgICB9KSkKLSAgICAudGhlbih0LnN0ZXBfZnVuYyhy
ZXBvcnQgPT4gewotICAgICAgbGV0IHRyYWNrU3RhdHMgPSBmaW5kU3RhdHNCeVR5cGVBbmRJZChy
ZXBvcnQsICd0cmFjaycsIHRyYWNrLmlkKTsKLSAgICAgIGxldCBzdHJlYW1TdGF0cyA9IGZpbmRT
dGF0c0J5VHlwZUFuZElkKHJlcG9ydCwgJ3N0cmVhbScsIHN0cmVhbS5pZCk7Ci0gICAgICBhc3Nl
cnRfdHJ1ZSh0cmFja1N0YXRzICE9IG51bGwgJiYgc3RyZWFtU3RhdHMgIT0gbnVsbCwKLSAgICAg
ICAgICAgICAgICAgICdIYXMgc3RhdHMgZm9yIHRyYWNrIGFuZCBzdHJlYW0nKTsKLSAgICAgIGFz
c2VydF9hcnJheV9lcXVhbHMoc3RyZWFtU3RhdHMudHJhY2tJZHMsIFsgdHJhY2tTdGF0cy5pZCBd
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAnc3RyZWFtU3RhdHMudHJhY2tJZHMgPT0gWyB0
cmFja1N0YXRzLmlkIF0nKTsKLSAgICAgIHZhbGlkYXRlUnRjU3RhdHMocmVwb3J0LCB0cmFja1N0
YXRzKTsKLSAgICAgIHZhbGlkYXRlUnRjU3RhdHMocmVwb3J0LCBzdHJlYW1TdGF0cyk7Ci0gICAg
ICB0LmRvbmUoKTsKLSAgICB9KSkKLSAgICAuY2F0Y2godC5zdGVwX2Z1bmMocmVhc29uID0+IHsK
LSAgICAgIGFzc2VydF91bnJlYWNoZWQocmVhc29uKTsKLSAgICB9KSk7Ci0gIH0sICdNZWRpYSBz
dHJlYW0gc3RhdHMgcmVmZXJlbmNlcyB0cmFjayBzdGF0cycpOwotCiAgIGFzeW5jX3Rlc3QodCA9
PiB7CiAgICAgY29uc3QgY2FsbGVyID0gbmV3IFJUQ1BlZXJDb25uZWN0aW9uKCk7CiAgICAgdC5h
ZGRfY2xlYW51cCgoKSA9PiBjYWxsZXIuY2xvc2UoKSk7CiAgICAgY29uc3QgY2FsbGVlID0gbmV3
IFJUQ1BlZXJDb25uZWN0aW9uKCk7CiAgICAgdC5hZGRfY2xlYW51cCgoKSA9PiBjYWxsZWUuY2xv
c2UoKSk7CiAgICAgbGV0IHNlbmRpbmdUcmFjazsKLSAgICByZXR1cm4gZ2V0VXNlck1lZGlhVHJh
Y2tzQW5kU3RyZWFtcygxKQorICAgIGdldFVzZXJNZWRpYVRyYWNrc0FuZFN0cmVhbXMoMSkKICAg
ICAudGhlbih0LnN0ZXBfZnVuYygoW3RyYWNrcywgc3RyZWFtc10pID0+IHsKICAgICAgIHQuYWRk
X2NsZWFudXAoKCkgPT4gdHJhY2tzLmZvckVhY2godHJhY2sgPT4gdHJhY2suc3RvcCgpKSk7CiAg
ICAgICBzZW5kaW5nVHJhY2sgPSB0cmFja3NbMF07CkBAIC0yMzUsMTAgKzExMiwxMCBAQAogICAg
IHQuYWRkX2NsZWFudXAoKCkgPT4gY2FsbGVlLmNsb3NlKCkpOwogICAgIGxldCByZWNlaXZpbmdU
cmFjazsKICAgICBjYWxsZWUub250cmFjayA9IHRyYWNrRXZlbnQgPT4gewotICAgICAgYXNzZXJ0
X3RydWUocmVjZWl2aW5nVHJhY2sgPT0gdW5kZWZpbmVkLCAnb250cmFjayBoYXMgbm90IGZpcmVk
IGJlZm9yZScpOworICAgICAgYXNzZXJ0X2VxdWFscyhyZWNlaXZpbmdUcmFjaywgdW5kZWZpbmVk
LCAnb250cmFjayBoYXMgbm90IGZpcmVkIGJlZm9yZScpOwogICAgICAgcmVjZWl2aW5nVHJhY2sg
PSB0cmFja0V2ZW50LnRyYWNrOwogICAgIH07Ci0gICAgcmV0dXJuIGdldFVzZXJNZWRpYVRyYWNr
c0FuZFN0cmVhbXMoMSkKKyAgICBnZXRVc2VyTWVkaWFUcmFja3NBbmRTdHJlYW1zKDEpCiAgICAg
LnRoZW4odC5zdGVwX2Z1bmMoKFt0cmFja3MsIHN0cmVhbXNdKSA9PiB7CiAgICAgICB0LmFkZF9j
bGVhbnVwKCgpID0+IHRyYWNrcy5mb3JFYWNoKHRyYWNrID0+IHRyYWNrLnN0b3AoKSkpOwogICAg
ICAgY2FsbGVyLmFkZFRyYWNrKHRyYWNrc1swXSwgc3RyZWFtc1swXSk7CkBAIC0yNzEsNyArMTQ4
LDcgQEAKICAgICBsZXQgc2VuZGluZ1RyYWNrMTsKICAgICBsZXQgc2VuZGluZ1RyYWNrMjsKICAg
ICBsZXQgc2VuZGVyOwotICAgIHJldHVybiBnZXRVc2VyTWVkaWFUcmFja3NBbmRTdHJlYW1zKDIp
CisgICAgZ2V0VXNlck1lZGlhVHJhY2tzQW5kU3RyZWFtcygyKQogICAgIC50aGVuKHQuc3RlcF9m
dW5jKChbdHJhY2tzLCBzdHJlYW1zXSkgPT4gewogICAgICAgdC5hZGRfY2xlYW51cCgoKSA9PiB0
cmFja3MuZm9yRWFjaCh0cmFjayA9PiB0cmFjay5zdG9wKCkpKTsKICAgICAgIHNlbmRpbmdUcmFj
azEgPSB0cmFja3NbMF07CkBAIC0zMDEsNyArMTc4LDcgQEAKICAgICBsZXQgc2VuZGluZ1RyYWNr
MTsKICAgICBsZXQgc2VuZGluZ1RyYWNrMjsKICAgICBsZXQgc2VuZGVyOwotICAgIHJldHVybiBn
ZXRVc2VyTWVkaWFUcmFja3NBbmRTdHJlYW1zKDIpCisgICAgZ2V0VXNlck1lZGlhVHJhY2tzQW5k
U3RyZWFtcygyKQogICAgIC50aGVuKHQuc3RlcF9mdW5jKChbdHJhY2tzLCBzdHJlYW1zXSkgPT4g
ewogICAgICAgdC5hZGRfY2xlYW51cCgoKSA9PiB0cmFja3MuZm9yRWFjaCh0cmFjayA9PiB0cmFj
ay5zdG9wKCkpKTsKICAgICAgIHNlbmRpbmdUcmFjazEgPSB0cmFja3NbMF07CkBAIC0zMzksNyAr
MjE2LDcgQEAKICAgICBsZXQgc2VuZGluZ1RyYWNrMTsKICAgICBsZXQgc2VuZGluZ1RyYWNrMjsK
ICAgICBsZXQgc2VuZGVyOwotICAgIHJldHVybiBnZXRVc2VyTWVkaWFUcmFja3NBbmRTdHJlYW1z
KDIpCisgICAgZ2V0VXNlck1lZGlhVHJhY2tzQW5kU3RyZWFtcygyKQogICAgIC50aGVuKHQuc3Rl
cF9mdW5jKChbdHJhY2tzLCBzdHJlYW1zXSkgPT4gewogICAgICAgdC5hZGRfY2xlYW51cCgoKSA9
PiB0cmFja3MuZm9yRWFjaCh0cmFjayA9PiB0cmFjay5zdG9wKCkpKTsKICAgICAgIHNlbmRpbmdU
cmFjazEgPSB0cmFja3NbMF07CkBAIC0zNzYsNyArMjUzLDcgQEAKICAgICBsZXQgc2VuZGluZ1Ry
YWNrMTsKICAgICBsZXQgc2VuZGluZ1RyYWNrMjsKICAgICBsZXQgc2VuZGVyOwotICAgIHJldHVy
biBnZXRVc2VyTWVkaWFUcmFja3NBbmRTdHJlYW1zKDIpCisgICAgZ2V0VXNlck1lZGlhVHJhY2tz
QW5kU3RyZWFtcygyKQogICAgIC50aGVuKHQuc3RlcF9mdW5jKChbdHJhY2tzLCBzdHJlYW1zXSkg
PT4gewogICAgICAgdC5hZGRfY2xlYW51cCgoKSA9PiB0cmFja3MuZm9yRWFjaCh0cmFjayA9PiB0
cmFjay5zdG9wKCkpKTsKICAgICAgIHNlbmRpbmdUcmFjazEgPSB0cmFja3NbMF07CkBAIC0zOTYs
NyArMjczLDcgQEAKICAgICAgIGFzc2VydF90cnVlKHRyYWNrU3RhdHMub2JqZWN0RGVsZXRlZCk7
CiAgICAgICBsZXQgb3V0Ym91bmRTdGF0cyA9IGZpbmRTdGF0c0J5VHlwZUFuZE1lbWJlcihyZXBv
cnQsICdvdXRib3VuZC1ydHAnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgJ3RyYWNrSWQnLCB0cmFja1N0YXRzLmlkKTsKLSAgICAgIGFzc2VydF90
cnVlKG91dGJvdW5kU3RhdHMgPT0gbnVsbCwKKyAgICAgIGFzc2VydF9lcXVhbHMob3V0Ym91bmRT
dGF0cywgbnVsbCwKICAgICAgICAgICAgICAgICAgICdUaGUgb3V0Ym91bmQgUlRQIHN0cmVhbSBz
aG91bGQgbm8gbG9uZ2VyIHJlZmVyZW5jZSB0aGUgJyArCiAgICAgICAgICAgICAgICAgICAnb3Jp
Z2luYWwgYXR0YWNobWVudCcpOwogICAgICAgdC5kb25lKCk7CmRpZmYgLS1naXQgYS9MYXlvdXRU
ZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3dlYnJ0Yy9sZWdhY3kvUlRDUGVl
ckNvbm5lY3Rpb24tYWRkU3RyZWFtLmh0dHBzLmh0bWwgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93
M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3dlYnJ0Yy9sZWdhY3kvUlRDUGVlckNvbm5lY3Rpb24tYWRk
U3RyZWFtLmh0dHBzLmh0bWwKaW5kZXggNWEzNWViYzUzYjhkN2NlMzg1N2Q0ODY5YTQ3NmUwZTk5
YTkwNzhjOC4uN2ViY2FjZGE1MzcxZjc0YTIzN2QxZTE5NDEyYzIwMDM3MWJlOWQ1OCAxMDA2NDQK
LS0tIGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy93ZWJydGMv
bGVnYWN5L1JUQ1BlZXJDb25uZWN0aW9uLWFkZFN0cmVhbS5odHRwcy5odG1sCisrKyBiL0xheW91
dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvd2VicnRjL2xlZ2FjeS9SVENQ
ZWVyQ29ubmVjdGlvbi1hZGRTdHJlYW0uaHR0cHMuaHRtbApAQCAtMjcsNyArMjcsNyBAQAogICAg
IHQuYWRkX2NsZWFudXAoKCkgPT4gcGMuY2xvc2UoKSk7CiAgICAgbGV0IHRyYWNrOwogICAgIGxl
dCBzdHJlYW07Ci0gICAgcmV0dXJuIGdldFVzZXJNZWRpYVRyYWNrc0FuZFN0cmVhbXMoMSkKKyAg
ICBnZXRVc2VyTWVkaWFUcmFja3NBbmRTdHJlYW1zKDEpCiAgICAgLnRoZW4odC5zdGVwX2Z1bmMo
KFt0cmFja3MsIHN0cmVhbXNdKSA9PiB7CiAgICAgICB0cmFjayA9IHRyYWNrc1swXTsKICAgICAg
IHN0cmVhbSA9IHN0cmVhbXNbMF07CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9t
YWMtd2syL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvd2ViLXNoYXJlL3NoYXJlLXVy
bC1pbnZhbGlkLmh0dHBzLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL3BsYXRmb3JtL21hYy13
azIvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy93ZWItc2hhcmUvc2hhcmUtdXJsLWlu
dmFsaWQuaHR0cHMtZXhwZWN0ZWQudHh0CmluZGV4IDEwZDc4M2IxODVhMzEzZjg4NGFlZWU4NWVh
Y2FhMmU1ZmJhZWNlODUuLmVkZGVlMDFiNjdjMzYwN2M5N2QwMDZiMWZjZmE5ZTAzYzg5ZjI0NmQg
MTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3BsYXRmb3JtL21hYy13azIvaW1wb3J0ZWQvdzNjL3dl
Yi1wbGF0Zm9ybS10ZXN0cy93ZWItc2hhcmUvc2hhcmUtdXJsLWludmFsaWQuaHR0cHMtZXhwZWN0
ZWQudHh0CisrKyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL21hYy13azIvaW1wb3J0ZWQvdzNjL3dl
Yi1wbGF0Zm9ybS10ZXN0cy93ZWItc2hhcmUvc2hhcmUtdXJsLWludmFsaWQuaHR0cHMtZXhwZWN0
ZWQudHh0CkBAIC0xLDMgKzEsMTAgQEAKIAogUEFTUyBzaGFyZSgpIHJlamVjdHMgd2hlbiBVUkwg
aXMgaW52YWxpZAorUEFTUyBzaGFyZSgpIHJlamVjdHMgZmlsZTovLyBVUkxzCitQQVNTIHNoYXJl
KCkgcmVqZWN0cyB3c3M6IFVSTHMKK1BBU1Mgc2hhcmUoKSByZWplY3RzIGFib3V0OiBVUkxzCitQ
QVNTIHNoYXJlKCkgcmVqZWN0cyBjaHJvbWU6IFVSTHMKK1BBU1Mgc2hhcmUoKSByZWplY3RzIGph
dmFzY3JpcHQ6IFVSTHMKK1BBU1Mgc2hhcmUoKSByZWplY3RzIGJsb2I6IFVSTHMKK0ZBSUwgc2hh
cmUoKSByZWplY3RzIGRhdGE6IFVSTHMgYXNzZXJ0X3VucmVhY2hlZDogU2hvdWxkIGhhdmUgcmVq
ZWN0ZWQ6IHVuZGVmaW5lZCBSZWFjaGVkIHVucmVhY2hhYmxlIGNvZGUKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>412690</attachid>
            <date>2020-10-29 14:50:33 -0700</date>
            <delta_ts>2020-10-30 07:36:38 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-218351-20201029145032.patch</filename>
            <type>text/plain</type>
            <size>774158</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY5MTY0CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFu
Z2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggMThlZTlkMTJiYmQ3Nzc4ZmMxNTAw
ZjZmMjVjZmVjODA1MjQ1ZTlhYS4uZmJmNmZjNjA4Y2JiMzJlNGQ0NmZhZWFjYWNhNmNhYWUxNGUw
ZjE5ZCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3Rz
L0NoYW5nZUxvZwpAQCAtMSwzICsxLDE0IEBACisyMDIwLTEwLTI5ICBDaHJpcyBEdW1leiAgPGNk
dW1lekBhcHBsZS5jb20+CisKKyAgICAgICAgUmVzeW5jIHdlYi1wbGF0Zm9ybS10ZXN0cy9yZXNv
dXJjZXMgdGVzdHMgZnJvbSB1cHN0cmVhbQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MjE4MzUxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgUmViYXNlbGluZSB0ZXN0IHRoYXQgaGFzIGRpZmZlcmVudCBvdXRw
dXQuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMtd2syL2ltcG9ydGVkL3czYy93ZWItcGxhdGZv
cm0tdGVzdHMvd2ViLXNoYXJlL3NoYXJlLXVybC1pbnZhbGlkLmh0dHBzLWV4cGVjdGVkLnR4dDoK
KwogMjAyMC0xMC0yOSAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgogCiAgICAgICAg
IFJlc3luYyB3ZWItcGxhdGZvcm0tdGVzdHMvcGF5bWVudC1yZXF1ZXN0IHRlc3RzIGZyb20gdXBz
dHJlYW0KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy9DaGFuZ2VMb2cgYi9M
YXlvdXRUZXN0cy9pbXBvcnRlZC93M2MvQ2hhbmdlTG9nCmluZGV4IGU4ZTMyYmQ2ZDg4ZjJiNDlj
NDViZDU0OGM2M2IwZTFlMTAwOWQzMGQuLjkwNDk3ZmRkNGNiODVkZjA5YTBiOGIzZDRhODI4Y2Nm
ZTVjODNhYmYgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy9DaGFuZ2VMb2cK
KysrIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM2IEBA
CisyMDIwLTEwLTI5ICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CisKKyAgICAgICAg
UmVzeW5jIHdlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMgdGVzdHMgZnJvbSB1cHN0cmVhbQor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE4MzUxCisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUmVzeW5jIHdl
Yi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMgdGVzdHMgZnJvbSB1cHN0cmVhbSA1ZGJiMGEzZmE2
MzFlZjczZGEwLgorCisgICAgICAgICogd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy8qOiBV
cGRhdGVkLgorCisgICAgICAgICogd2ViLXBsYXRmb3JtLXRlc3RzL2NvbnNvbGUvaWRsaGFybmVz
cy5hbnktZXhwZWN0ZWQudHh0OgorICAgICAgICAqIHdlYi1wbGF0Zm9ybS10ZXN0cy9jb25zb2xl
L2lkbGhhcm5lc3MuYW55Lndvcmtlci1leHBlY3RlZC50eHQ6CisgICAgICAgICogd2ViLXBsYXRm
b3JtLXRlc3RzL2NvbnRlbnQtc2VjdXJpdHktcG9saWN5L2ZyYW1lLXNyYy9mcmFtZS1zcmMtc2Ft
ZS1kb2N1bWVudC1tZXRhLnN1Yi5odG1sOgorICAgICAgICAqIHdlYi1wbGF0Zm9ybS10ZXN0cy9j
c3MvY3NzLXRleHQvb3ZlcmZsb3ctd3JhcC9vdmVyZmxvdy13cmFwLWJyZWFrLXdvcmQtbG9uZy1j
cmFzaC1leHBlY3RlZC50eHQ6CisgICAgICAgICogd2ViLXBsYXRmb3JtLXRlc3RzL2Nzcy9jc3Mt
dGV4dC90ZXh0LWluZGVudC90ZXh0LWluZGVudC1sb25nLWxpbmUtY3Jhc2gtZXhwZWN0ZWQudHh0
OgorICAgICAgICAqIHdlYi1wbGF0Zm9ybS10ZXN0cy9jc3MvY3Nzb20vaWRsaGFybmVzcy1leHBl
Y3RlZC50eHQ6CisgICAgICAgICogd2ViLXBsYXRmb3JtLXRlc3RzL2h0bWwvYnJvd3NlcnMvYnJv
d3NpbmctdGhlLXdlYi9uYXZpZ2F0aW5nLWFjcm9zcy1kb2N1bWVudHMvYW5jaG9yLWZyYWdtZW50
LWZvcm0tc3VibWl0LXdpdGhwYXRoLmh0bWw6CisgICAgICAgICogd2ViLXBsYXRmb3JtLXRlc3Rz
L2h0bWwvY3Jvc3Mtb3JpZ2luLWVtYmVkZGVyLXBvbGljeS9yZXBvcnRpbmctbmF2aWdhdGlvbi5o
dHRwcy5odG1sOgorICAgICAgICAqIHdlYi1wbGF0Zm9ybS10ZXN0cy9odG1sL2Nyb3NzLW9yaWdp
bi1lbWJlZGRlci1wb2xpY3kvcmVxdWlyZS1jb3JwLWFib3V0LWJsYW5rLmh0dHBzLWV4cGVjdGVk
LnR4dDoKKyAgICAgICAgKiB3ZWItcGxhdGZvcm0tdGVzdHMvaHRtbC9jcm9zcy1vcmlnaW4tZW1i
ZWRkZXItcG9saWN5L3JlcXVpcmUtY29ycC1hYm91dC1zcmNkb2MuaHR0cHMtZXhwZWN0ZWQudHh0
OgorICAgICAgICAqIHdlYi1wbGF0Zm9ybS10ZXN0cy9odG1sL2Nyb3NzLW9yaWdpbi1lbWJlZGRl
ci1wb2xpY3kvcmVxdWlyZS1jb3JwLmh0dHBzLWV4cGVjdGVkLnR4dDoKKyAgICAgICAgKiB3ZWIt
cGxhdGZvcm0tdGVzdHMvd2FzbS9qc2FwaS9pZGxoYXJuZXNzLmFueS1leHBlY3RlZC50eHQ6Cisg
ICAgICAgICogd2ViLXBsYXRmb3JtLXRlc3RzL3dlYi1zaGFyZS9zaGFyZS11cmwtaW52YWxpZC5o
dHRwcy5odG1sOgorICAgICAgICAqIHdlYi1wbGF0Zm9ybS10ZXN0cy93ZWJydGMvUlRDUGVlckNv
bm5lY3Rpb24tZ2V0U3RhdHMuaHR0cHMuaHRtbDoKKyAgICAgICAgKiB3ZWItcGxhdGZvcm0tdGVz
dHMvd2VicnRjL1JUQ1BlZXJDb25uZWN0aW9uLXNldFJlbW90ZURlc2NyaXB0aW9uLXJlcGxhY2VU
cmFjay5odHRwcy5odG1sOgorICAgICAgICAqIHdlYi1wbGF0Zm9ybS10ZXN0cy93ZWJydGMvUlRD
UGVlckNvbm5lY3Rpb24tdHJhY2stc3RhdHMuaHR0cHMtZXhwZWN0ZWQudHh0OgorICAgICAgICAq
IHdlYi1wbGF0Zm9ybS10ZXN0cy93ZWJydGMvUlRDUGVlckNvbm5lY3Rpb24tdHJhY2stc3RhdHMu
aHR0cHMuaHRtbDoKKyAgICAgICAgKiB3ZWItcGxhdGZvcm0tdGVzdHMvd2VicnRjL2xlZ2FjeS9S
VENQZWVyQ29ubmVjdGlvbi1hZGRTdHJlYW0uaHR0cHMuaHRtbDoKKyAgICAgICAgLSBSZWJhc2Vs
aW5lIGEgZmV3IHRlc3RzIHRoYXQgaGF2ZSBkaWZmZXJlbnQgb3V0cHV0LgorICAgICAgICAtIEkg
cmVzeW5jJ2QgZnJvbSB1cHN0cmVhbSBhIGZldyB0ZXN0cyB0aGF0IHdvdWxkIGhhdmUgc3RvcHBl
ZCBydW5uaW5nIHByb3Blcmx5IGFmdGVyIHRoZQorICAgICAgICAgIHJlc291cmNlcy8gZm9sZGVy
IHJlc3luYy4KKwogMjAyMC0xMC0yOSAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgog
CiAgICAgICAgIFJlc3luYyB3ZWItcGxhdGZvcm0tdGVzdHMvcGF5bWVudC1yZXF1ZXN0IHRlc3Rz
IGZyb20gdXBzdHJlYW0KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWIt
cGxhdGZvcm0tdGVzdHMvY29uc29sZS9pZGxoYXJuZXNzLmFueS1leHBlY3RlZC50eHQgYi9MYXlv
dXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL2NvbnNvbGUvaWRsaGFybmVz
cy5hbnktZXhwZWN0ZWQudHh0CmluZGV4IDg4ZDhkYzY5YzMzZTI1OTIyOTA3MzI3YzdkOGM1NzA0
NjJhNjg0NmYuLmI1MTQ3ZmJmMGY5MWE0NTRlNjhhOWI3YzUxMzYyMTJlOGM1NGE1NjMgMTAwNjQ0
Ci0tLSBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvY29uc29s
ZS9pZGxoYXJuZXNzLmFueS1leHBlY3RlZC50eHQKKysrIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQv
dzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9jb25zb2xlL2lkbGhhcm5lc3MuYW55LWV4cGVjdGVkLnR4
dApAQCAtMSw2ICsxLDExIEBACiAKIFBBU1MgaWRsX3Rlc3Qgc2V0dXAKIFBBU1MgaWRsX3Rlc3Qg
dmFsaWRhdGlvbgorUEFTUyBjb25zb2xlIG5hbWVzcGFjZTogZXh0ZW5kZWQgYXR0cmlidXRlcwor
UEFTUyBjb25zb2xlIG5hbWVzcGFjZTogcHJvcGVydHkgZGVzY3JpcHRvcgorUEFTUyBjb25zb2xl
IG5hbWVzcGFjZTogW1tFeHRlbnNpYmxlXV0gaXMgdHJ1ZQorUEFTUyBjb25zb2xlIG5hbWVzcGFj
ZTogW1tQcm90b3R5cGVdXSBpcyBPYmplY3QucHJvdG90eXBlCitQQVNTIGNvbnNvbGUgbmFtZXNw
YWNlOiB0eXBlb2YgaXMgIm9iamVjdCIKIFBBU1MgY29uc29sZSBuYW1lc3BhY2U6IG9wZXJhdGlv
biBhc3NlcnQob3B0aW9uYWwgYm9vbGVhbiwgYW55Li4uKQogUEFTUyBjb25zb2xlIG5hbWVzcGFj
ZTogb3BlcmF0aW9uIGNsZWFyKCkKIFBBU1MgY29uc29sZSBuYW1lc3BhY2U6IG9wZXJhdGlvbiBk
ZWJ1ZyhhbnkuLi4pCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBs
YXRmb3JtLXRlc3RzL2NvbnNvbGUvaWRsaGFybmVzcy5hbnkud29ya2VyLWV4cGVjdGVkLnR4dCBi
L0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvY29uc29sZS9pZGxo
YXJuZXNzLmFueS53b3JrZXItZXhwZWN0ZWQudHh0CmluZGV4IDg4ZDhkYzY5YzMzZTI1OTIyOTA3
MzI3YzdkOGM1NzA0NjJhNjg0NmYuLmI1MTQ3ZmJmMGY5MWE0NTRlNjhhOWI3YzUxMzYyMTJlOGM1
NGE1NjMgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0t
dGVzdHMvY29uc29sZS9pZGxoYXJuZXNzLmFueS53b3JrZXItZXhwZWN0ZWQudHh0CisrKyBiL0xh
eW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvY29uc29sZS9pZGxoYXJu
ZXNzLmFueS53b3JrZXItZXhwZWN0ZWQudHh0CkBAIC0xLDYgKzEsMTEgQEAKIAogUEFTUyBpZGxf
dGVzdCBzZXR1cAogUEFTUyBpZGxfdGVzdCB2YWxpZGF0aW9uCitQQVNTIGNvbnNvbGUgbmFtZXNw
YWNlOiBleHRlbmRlZCBhdHRyaWJ1dGVzCitQQVNTIGNvbnNvbGUgbmFtZXNwYWNlOiBwcm9wZXJ0
eSBkZXNjcmlwdG9yCitQQVNTIGNvbnNvbGUgbmFtZXNwYWNlOiBbW0V4dGVuc2libGVdXSBpcyB0
cnVlCitQQVNTIGNvbnNvbGUgbmFtZXNwYWNlOiBbW1Byb3RvdHlwZV1dIGlzIE9iamVjdC5wcm90
b3R5cGUKK1BBU1MgY29uc29sZSBuYW1lc3BhY2U6IHR5cGVvZiBpcyAib2JqZWN0IgogUEFTUyBj
b25zb2xlIG5hbWVzcGFjZTogb3BlcmF0aW9uIGFzc2VydChvcHRpb25hbCBib29sZWFuLCBhbnku
Li4pCiBQQVNTIGNvbnNvbGUgbmFtZXNwYWNlOiBvcGVyYXRpb24gY2xlYXIoKQogUEFTUyBjb25z
b2xlIG5hbWVzcGFjZTogb3BlcmF0aW9uIGRlYnVnKGFueS4uLikKZGlmZiAtLWdpdCBhL0xheW91
dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvY29udGVudC1zZWN1cml0eS1w
b2xpY3kvZnJhbWUtc3JjL2ZyYW1lLXNyYy1zYW1lLWRvY3VtZW50LW1ldGEuc3ViLmh0bWwgYi9M
YXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL2NvbnRlbnQtc2VjdXJp
dHktcG9saWN5L2ZyYW1lLXNyYy9mcmFtZS1zcmMtc2FtZS1kb2N1bWVudC1tZXRhLnN1Yi5odG1s
CmluZGV4IDI4MTI5MTg0YmRhODdiYjc5YmI3MGI0ZTEwYTY1MTJhM2NiNWFlZDguLmY0MTIyZjNk
MzU2YjM3ODYwYTI5NjM0ZTQ3YmRlOTE0NzQzMmJhMDkgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3Rz
L2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvY29udGVudC1zZWN1cml0eS1wb2xpY3kv
ZnJhbWUtc3JjL2ZyYW1lLXNyYy1zYW1lLWRvY3VtZW50LW1ldGEuc3ViLmh0bWwKKysrIGIvTGF5
b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9jb250ZW50LXNlY3VyaXR5
LXBvbGljeS9mcmFtZS1zcmMvZnJhbWUtc3JjLXNhbWUtZG9jdW1lbnQtbWV0YS5zdWIuaHRtbApA
QCAtMyw3ICszLDcgQEAKIDxodG1sPgogPGJvZHk+PC9ib2R5PgogPHNjcmlwdD4KLSAgICBhc3lu
Y190ZXN0KGFzeW5jIHRlc3QgPT4geworICAgIHByb21pc2VfdGVzdChhc3luYyB0ZXN0ID0+IHsK
ICAgICAgIC8vIDEuIExvYWQgYW4gaWZyYW1lIChub3QgYmxvY2tlZCkuCiAgICAgICBsZXQgaWZy
YW1lID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaWZyYW1lIik7CiAgICAgICB7CkBAIC00Nyw4
ICs0Nyw2IEBACiAgICAgICAvLyA1LiBSZWdyZXNzaW9uIHRlc3QgZm9yIGh0dHBzOi8vY3JidWcu
Y29tLzEwMTgzODUuIFRoZSBicm93c2VyIHNob3VsZAogICAgICAgLy8gbm90IGNyYXNoIHdoaWxl
IGRpc3BsYXlpbmcgdGhlIGVycm9yIHBhZ2UuCiAgICAgICBhd2FpdCBuZXcgUHJvbWlzZShyZXNv
bHZlID0+IHdpbmRvdy5zZXRUaW1lb3V0KHJlc29sdmUsIDEwMDApKTsKLQotICAgICAgdGVzdC5k
b25lKCk7CiAgICAgfSwgIlNhbWUtZG9jdW1lbnQgbmF2aWdhdGlvbnMgaW4gYW4gaWZyYW1lIGJs
b2NrZWQgYnkgQ1NQIGZyYW1lLXNyYyBkeW5hbWljYWxseSB1c2luZyB0aGUgPG1ldGE+IHRhZyIp
OwogPC9zY3JpcHQ+CiA8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93
M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL2Nzcy9jc3MtdGV4dC9vdmVyZmxvdy13cmFwL292ZXJmbG93
LXdyYXAtYnJlYWstd29yZC1sb25nLWNyYXNoLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2lt
cG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvY3NzL2Nzcy10ZXh0L292ZXJmbG93LXdyYXAv
b3ZlcmZsb3ctd3JhcC1icmVhay13b3JkLWxvbmctY3Jhc2gtZXhwZWN0ZWQudHh0CmluZGV4IGQz
ZDA5MzFmZDNlOTI3NTU5YmM1Y2Q3ODhlYjc3ZTZkYmMxNmU3NjEuLjJkYTkwODExNDI0MDRiNzNj
NmNkMjgyOGNlOTE1ZDdjNTQ3ZTM5YzQgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2ltcG9ydGVk
L3czYy93ZWItcGxhdGZvcm0tdGVzdHMvY3NzL2Nzcy10ZXh0L292ZXJmbG93LXdyYXAvb3ZlcmZs
b3ctd3JhcC1icmVhay13b3JkLWxvbmctY3Jhc2gtZXhwZWN0ZWQudHh0CisrKyBiL0xheW91dFRl
c3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvY3NzL2Nzcy10ZXh0L292ZXJmbG93
LXdyYXAvb3ZlcmZsb3ctd3JhcC1icmVhay13b3JkLWxvbmctY3Jhc2gtZXhwZWN0ZWQudHh0CkBA
IC0xLDQgKzEsNCBAQAogeAogCi1QQVNTIENTUyBUZXh0IFRlc3Q6IHZlcnkgbG9uZyBsaW5lIHdp
dGggYG92ZXJmbG93LXdyYXA6IGJyZWFrLXdvcmRgIHNob3VsZCBub3QgY3Jhc2gKK1BBU1MgZG9j
dW1lbnQuYm9keS5vZmZzZXRUb3AKIApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQv
dzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9jc3MvY3NzLXRleHQvdGV4dC1pbmRlbnQvdGV4dC1pbmRl
bnQtbG9uZy1saW5lLWNyYXNoLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3cz
Yy93ZWItcGxhdGZvcm0tdGVzdHMvY3NzL2Nzcy10ZXh0L3RleHQtaW5kZW50L3RleHQtaW5kZW50
LWxvbmctbGluZS1jcmFzaC1leHBlY3RlZC50eHQKaW5kZXggY2UxMzg2MzI0OGI0ZjcyNTU4YzI3
MGRlOWE2ZDY5YTljMmU1MmQ3MS4uOGI5MGFhNmY5MGU2ZTQ2ZmQ4MWVlY2RiZDAyOWZkOGQ5NTNk
M2I4YyAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10
ZXN0cy9jc3MvY3NzLXRleHQvdGV4dC1pbmRlbnQvdGV4dC1pbmRlbnQtbG9uZy1saW5lLWNyYXNo
LWV4cGVjdGVkLnR4dAorKysgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3Jt
LXRlc3RzL2Nzcy9jc3MtdGV4dC90ZXh0LWluZGVudC90ZXh0LWluZGVudC1sb25nLWxpbmUtY3Jh
c2gtZXhwZWN0ZWQudHh0CkBAIC0xLDQgKzEsNCBAQAogWFhYCiAKLVBBU1MgVmVyeSBsb25nIGxp
bmUgd2l0aCBgdGV4dC1pbmRlbnRgIHNob3VsZCBub3QgY3Jhc2gKK1BBU1MgZG9jdW1lbnQuYm9k
eS5vZmZzZXRUb3AKIApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1w
bGF0Zm9ybS10ZXN0cy9jc3MvY3Nzb20vaWRsaGFybmVzcy1leHBlY3RlZC50eHQgYi9MYXlvdXRU
ZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL2Nzcy9jc3NvbS9pZGxoYXJuZXNz
LWV4cGVjdGVkLnR4dAppbmRleCA3ZDdjNzIwNTQ2NWM0OGFiYzE2ZjU4NjYwMjA0YjM1ZTE2MDJh
NTI1Li40Njc4NmVlOWY0NzFlMGYxODExMmEyMGI4ZGU5MGQ3YTQ0YTA0ZmQzIDEwMDY0NAotLS0g
YS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL2Nzcy9jc3NvbS9p
ZGxoYXJuZXNzLWV4cGVjdGVkLnR4dAorKysgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2Vi
LXBsYXRmb3JtLXRlc3RzL2Nzcy9jc3NvbS9pZGxoYXJuZXNzLWV4cGVjdGVkLnR4dApAQCAtNDE3
LDYgKzQxNywxMyBAQCBQQVNTIENTU1N0eWxlRGVjbGFyYXRpb24gaW50ZXJmYWNlOiBnZXRDb21w
dXRlZFN0eWxlKHN2Z19lbGVtZW50KSBtdXN0IGluaGVyaXQgcAogUEFTUyBDU1NTdHlsZURlY2xh
cmF0aW9uIGludGVyZmFjZTogY2FsbGluZyByZW1vdmVQcm9wZXJ0eShDU1NPTVN0cmluZykgb24g
Z2V0Q29tcHV0ZWRTdHlsZShzdmdfZWxlbWVudCkgd2l0aCB0b28gZmV3IGFyZ3VtZW50cyBtdXN0
IHRocm93IFR5cGVFcnJvcgogUEFTUyBDU1NTdHlsZURlY2xhcmF0aW9uIGludGVyZmFjZTogZ2V0
Q29tcHV0ZWRTdHlsZShzdmdfZWxlbWVudCkgbXVzdCBpbmhlcml0IHByb3BlcnR5ICJwYXJlbnRS
dWxlIiB3aXRoIHRoZSBwcm9wZXIgdHlwZQogUEFTUyBDU1NTdHlsZURlY2xhcmF0aW9uIGludGVy
ZmFjZTogZ2V0Q29tcHV0ZWRTdHlsZShzdmdfZWxlbWVudCkgbXVzdCBpbmhlcml0IHByb3BlcnR5
ICJjc3NGbG9hdCIgd2l0aCB0aGUgcHJvcGVyIHR5cGUKK1BBU1MgQ1NTIG5hbWVzcGFjZTogZXh0
ZW5kZWQgYXR0cmlidXRlcworUEFTUyBDU1MgbmFtZXNwYWNlOiBwcm9wZXJ0eSBkZXNjcmlwdG9y
CitQQVNTIENTUyBuYW1lc3BhY2U6IFtbRXh0ZW5zaWJsZV1dIGlzIHRydWUKK0ZBSUwgQ1NTIG5h
bWVzcGFjZTogW1tQcm90b3R5cGVdXSBpcyBPYmplY3QucHJvdG90eXBlIGFzc2VydF9lcXVhbHM6
IGV4cGVjdGVkIChvYmplY3QpIG9iamVjdCAiW29iamVjdCBPYmplY3RdIiBidXQgZ290IChmdW5j
dGlvbikgZnVuY3Rpb24gImZ1bmN0aW9uICgpIHsKKyAgICBbbmF0aXZlIGNvZGVdCit9IgorRkFJ
TCBDU1MgbmFtZXNwYWNlOiB0eXBlb2YgaXMgIm9iamVjdCIgYXNzZXJ0X2VxdWFsczogZXhwZWN0
ZWQgIm9iamVjdCIgYnV0IGdvdCAiZnVuY3Rpb24iCiBQQVNTIENTUyBuYW1lc3BhY2U6IG9wZXJh
dGlvbiBlc2NhcGUoQ1NTT01TdHJpbmcpCiBQQVNTIFNWR0VsZW1lbnQgaW50ZXJmYWNlOiBhdHRy
aWJ1dGUgc3R5bGUKIFBBU1MgU1ZHRWxlbWVudCBpbnRlcmZhY2U6IHN2Z19lbGVtZW50IG11c3Qg
aW5oZXJpdCBwcm9wZXJ0eSAic3R5bGUiIHdpdGggdGhlIHByb3BlciB0eXBlCmRpZmYgLS1naXQg
YS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL2h0bWwvYnJvd3Nl
cnMvYnJvd3NpbmctdGhlLXdlYi9uYXZpZ2F0aW5nLWFjcm9zcy1kb2N1bWVudHMvYW5jaG9yLWZy
YWdtZW50LWZvcm0tc3VibWl0LXdpdGhwYXRoLmh0bWwgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93
M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL2h0bWwvYnJvd3NlcnMvYnJvd3NpbmctdGhlLXdlYi9uYXZp
Z2F0aW5nLWFjcm9zcy1kb2N1bWVudHMvYW5jaG9yLWZyYWdtZW50LWZvcm0tc3VibWl0LXdpdGhw
YXRoLmh0bWwKaW5kZXggYjg5MTYyM2EyZjU2MGZlNWNmZWM4NDRiMmEzNzdiMDUxMzkyNThmOS4u
NmJmZjUxYzljNmYyODAxMWUyMmIzOWYyYmFjOThlZjkwOThhMWMxNCAxMDA2NDQKLS0tIGEvTGF5
b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9odG1sL2Jyb3dzZXJzL2Jy
b3dzaW5nLXRoZS13ZWIvbmF2aWdhdGluZy1hY3Jvc3MtZG9jdW1lbnRzL2FuY2hvci1mcmFnbWVu
dC1mb3JtLXN1Ym1pdC13aXRocGF0aC5odG1sCisrKyBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3cz
Yy93ZWItcGxhdGZvcm0tdGVzdHMvaHRtbC9icm93c2Vycy9icm93c2luZy10aGUtd2ViL25hdmln
YXRpbmctYWNyb3NzLWRvY3VtZW50cy9hbmNob3ItZnJhZ21lbnQtZm9ybS1zdWJtaXQtd2l0aHBh
dGguaHRtbApAQCAtMTYsMjAgKzE2LDIwIEBACiA8YSBpZD0iYW5jaG9yIiB0YXJnZXQ9InRlc3Qi
IG9uY2xpY2s9ImRvY3VtZW50LmZvcm1zWzBdLnN1Ym1pdCgpIj5UZXN0PC9hPgogCiA8c2NyaXB0
PgotYXN5bmNfdGVzdChhc3luYyB0ID0+IHsKK2FzeW5jX3Rlc3QodCA9PiB7CiAgIGNvbnN0IGlm
cmFtZSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ2lmcmFtZScpOwotICBjb25zdCBpZnJhbWVM
b2FkUHJvbWlzZSA9IG5ldyBQcm9taXNlKHJlc29sdmUgPT4gaWZyYW1lLm9ubG9hZCA9IHJlc29s
dmUpOwotICBpZnJhbWUuc3JjID0gJy8nOwotICBhd2FpdCBpZnJhbWVMb2FkUHJvbWlzZTsKLQot
ICBjb25zdCBhbmNob3IgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYW5jaG9yJyk7Ci0gIGFu
Y2hvci5ocmVmID0gJy8jJzsKLSAgdC5zdGVwKCgpID0+IGFuY2hvci5jbGljaygpKTsKLSAgd2lu
ZG93Lm9ubWVzc2FnZSA9IHQuc3RlcF9mdW5jKGV2ZW50ID0+IHsKLSAgICBpZiAodHlwZW9mIGV2
ZW50LmRhdGEgPT09ICdzdHJpbmcnICYmIGV2ZW50LmRhdGEuaW5jbHVkZXMoJ25hdmlnYXRpb24n
KSkgewotICAgICAgYXNzZXJ0X2VxdWFscyhldmVudC5kYXRhLCAnZm9ybSBuYXZpZ2F0aW9uJyk7
Ci0gICAgICB0LmRvbmUoKTsKLSAgICB9CisgIGlmcmFtZS5vbmxvYWQgPSB0LnN0ZXBfZnVuYygo
KSA9PiB7CisgICAgY29uc3QgYW5jaG9yID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2FuY2hv
cicpOworICAgIGFuY2hvci5ocmVmID0gJy8jJzsKKyAgICBhbmNob3IuY2xpY2soKTsKKyAgICB3
aW5kb3cub25tZXNzYWdlID0gdC5zdGVwX2Z1bmMoZXZlbnQgPT4geworICAgICAgaWYgKHR5cGVv
ZiBldmVudC5kYXRhID09PSAnc3RyaW5nJyAmJiBldmVudC5kYXRhLmluY2x1ZGVzKCduYXZpZ2F0
aW9uJykpIHsKKyAgICAgICAgYXNzZXJ0X2VxdWFscyhldmVudC5kYXRhLCAnZm9ybSBuYXZpZ2F0
aW9uJyk7CisgICAgICAgIHQuZG9uZSgpOworICAgICAgfQorICAgIH0pOwogICB9KTsKKworICBp
ZnJhbWUuc3JjID0gJy8nOwogfSk7CiA8L3NjcmlwdD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3Rz
L2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvaHRtbC9jcm9zcy1vcmlnaW4tZW1iZWRk
ZXItcG9saWN5L3JlcG9ydGluZy1uYXZpZ2F0aW9uLmh0dHBzLmh0bWwgYi9MYXlvdXRUZXN0cy9p
bXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL2h0bWwvY3Jvc3Mtb3JpZ2luLWVtYmVkZGVy
LXBvbGljeS9yZXBvcnRpbmctbmF2aWdhdGlvbi5odHRwcy5odG1sCmluZGV4IDcwODc5ODU5OTBl
NjgyM2IwZjdiMWJjYjIyZTU3YjI1YTc1M2Q2MDUuLmZlNDIwMTU5MTNiNTZkMWNhMGZkZDIzNGQ0
YWQ2YWQ5ZDA5MjZhZjIgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWIt
cGxhdGZvcm0tdGVzdHMvaHRtbC9jcm9zcy1vcmlnaW4tZW1iZWRkZXItcG9saWN5L3JlcG9ydGlu
Zy1uYXZpZ2F0aW9uLmh0dHBzLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dl
Yi1wbGF0Zm9ybS10ZXN0cy9odG1sL2Nyb3NzLW9yaWdpbi1lbWJlZGRlci1wb2xpY3kvcmVwb3J0
aW5nLW5hdmlnYXRpb24uaHR0cHMuaHRtbApAQCAtMTUsMTggKzE1LDIxIEBAIGNvbnN0IENPUlBf
Q1JPU1NfT1JJR0lOID0KIGNvbnN0IEZSQU1FX1VSTCA9IGAke09SSUdJTn0vY29tbW9uL2JsYW5r
Lmh0bWw/cGlwZT1gOwogY29uc3QgUkVNT1RFX0ZSQU1FX1VSTCA9IGAke1JFTU9URV9PUklHSU59
L2NvbW1vbi9ibGFuay5odG1sP3BpcGU9YDsKIAotZnVuY3Rpb24gY2hlY2tDb3JwUmVwb3J0KHJl
cG9ydCwgY29udGV4dFVybCwgYmxvY2tlZFVybCkgeworZnVuY3Rpb24gY2hlY2tDb3JwUmVwb3J0
KHJlcG9ydCwgY29udGV4dFVybCwgYmxvY2tlZFVybCwgZGlzcG9zaXRpb24pIHsKICAgYXNzZXJ0
X2VxdWFscyhyZXBvcnQudHlwZSwgJ2NvZXAnKTsKICAgYXNzZXJ0X2VxdWFscyhyZXBvcnQudXJs
LCBjb250ZXh0VXJsKTsKICAgYXNzZXJ0X2VxdWFscyhyZXBvcnQuYm9keS50eXBlLCAnY29ycCcp
OwotICBhc3NlcnRfZXF1YWxzKHJlcG9ydC5ib2R5WydibG9ja2VkLXVybCddLCBibG9ja2VkVXJs
KTsKKyAgYXNzZXJ0X2VxdWFscyhyZXBvcnQuYm9keS5ibG9ja2VkVVJMLCBibG9ja2VkVXJsKTsK
KyAgYXNzZXJ0X2VxdWFscyhyZXBvcnQuYm9keS5kaXNwb3NpdGlvbiwgZGlzcG9zaXRpb24pOwor
ICBhc3NlcnRfZXF1YWxzKHJlcG9ydC5ib2R5LmRlc3RpbmF0aW9uLCAnaWZyYW1lJyk7CiB9CiAK
LWZ1bmN0aW9uIGNoZWNrQ29lcE1pc21hdGNoUmVwb3J0KHJlcG9ydCwgY29udGV4dFVybCwgYmxv
Y2tlZFVybCkgeworZnVuY3Rpb24gY2hlY2tDb2VwTWlzbWF0Y2hSZXBvcnQocmVwb3J0LCBjb250
ZXh0VXJsLCBibG9ja2VkVXJsLCBkaXNwb3NpdGlvbikgewogICBhc3NlcnRfZXF1YWxzKHJlcG9y
dC50eXBlLCAnY29lcCcpOwogICBhc3NlcnRfZXF1YWxzKHJlcG9ydC51cmwsIGNvbnRleHRVcmwp
OwogICBhc3NlcnRfZXF1YWxzKHJlcG9ydC5ib2R5LnR5cGUsICduYXZpZ2F0aW9uJyk7Ci0gIGFz
c2VydF9lcXVhbHMocmVwb3J0LmJvZHlbJ2Jsb2NrZWQtdXJsJ10sIGJsb2NrZWRVcmwpOworICBh
c3NlcnRfZXF1YWxzKHJlcG9ydC5ib2R5LmJsb2NrZWRVUkwsIGJsb2NrZWRVcmwpOworICBhc3Nl
cnRfZXF1YWxzKHJlcG9ydC5ib2R5LmRpc3Bvc2l0aW9uLCBkaXNwb3NpdGlvbik7CiB9CiAKIGZ1
bmN0aW9uIGxvYWRGcmFtZShkb2N1bWVudCwgdXJsKSB7CkBAIC04Miw5ICs4NSw2IEBAIGFzeW5j
IGZ1bmN0aW9uIG9ic2VydmVSZXBvcnRzKGdsb2JhbCkgewogLy8gICAgICdDT1JQLVJPJyBDT1JQ
IHZpb2xhdGlvbiAocmVwb3J0IG9ubHkpCiAvLyAgICAgJ05BVic6IENPRVAgbWlzbWF0Y2ggYmV0
d2VlbiB0aGUgZnJhbWVzLgogLy8gICAgICdOQVYtUk8nOiBDT0VQIG1pc21hdGNoIGJldHdlZW4g
dGhlIGZyYW1lcyAocmVwb3J0IG9ubHkpLgotLy8gICBDdXJyZW50bHkgJy1STycgaXMgbm8tb3As
IGUuZy4sICdDT1JQJyBhbmQgJ0NPUlAtUk8nIGhhdmUgdGhlIHNhbWUKLS8vICAgZXhwZWN0YXRp
b24uIFdlIGFyZSBwbGFubmluZyB0byBpbnRyb2R1Y2UgImRpc3Bvc2l0aW9uIiBtZW1iZXIgaW4K
LS8vICAgcmVwb3J0cywgd2hpY2ggd2lsbCBkaWZmZXJlbnRpYXRlIHRoZW0gZWFjaCBvdGhlci4K
IGNvbnN0IENBU0VTID0gWwogICB7IHBhcmVudDogJycsIHRhcmdldDogJycsIHJlcG9ydHM6IFtd
IH0sCiAgIHsgcGFyZW50OiAnJywgdGFyZ2V0OiBDT0VQLCByZXBvcnRzOiBbXSB9LApAQCAtMTEw
LDQwICsxMTAsNDIgQEAgZm9yIChjb25zdCB0ZXN0Y2FzZSBvZiBDQVNFUykgewogICAgIGZ1bmN0
aW9uIGRlc2MocykgewogICAgICAgcmV0dXJuIHMgPT09ICcnID8gJyhub25lKScgOiBzOwogICAg
IH0KLSAgICBhc3luY190ZXN0KGFzeW5jICh0KSA9PiB7Ci0gICAgICB0cnkgewotICAgICAgICBj
b25zdCB0YXJnZXRVcmwgPSBSRU1PVEVfRlJBTUVfVVJMICsgdGVzdGNhc2UudGFyZ2V0OwotICAg
ICAgICBjb25zdCBwYXJlbnQgPQotICAgICAgICAgIGF3YWl0IGxvYWRGcmFtZXModCwgdGVzdGNh
c2UucGFyZW50LCB3aXRoRW1wdHlGcmFtZSwgdGFyZ2V0VXJsKTsKLQorICAgIC8vIFRoZXNlIHRl
c3RzIGFyZSB2ZXJ5IHNsb3csIHNvIHRoZXkgbXVzdCBiZSBydW4gaW4gcGFyYWxsZWwgdXNpbmcK
KyAgICAvLyBhc3luY190ZXN0LgorICAgIGFzeW5jX3Rlc3QodCA9PiB7CisgICAgICBjb25zdCB0
YXJnZXRVcmwgPSBSRU1PVEVfRlJBTUVfVVJMICsgdGVzdGNhc2UudGFyZ2V0OworICAgICAgbG9h
ZEZyYW1lcyh0LCB0ZXN0Y2FzZS5wYXJlbnQsIHdpdGhFbXB0eUZyYW1lLCB0YXJnZXRVcmwpCisg
ICAgICAgICAgLnRoZW4odC5zdGVwX2Z1bmMocGFyZW50ID0+IHsKICAgICAgICAgY29uc3QgY29u
dGV4dFVybCA9IHBhcmVudC5zcmMgPyBwYXJlbnQuc3JjIDogJ2Fib3V0OmJsYW5rJzsKLSAgICAg
ICAgY29uc3QgcmVwb3J0cyA9IGF3YWl0IG9ic2VydmVSZXBvcnRzKHBhcmVudC5jb250ZW50V2lu
ZG93KTsKLSAgICAgICAgYXNzZXJ0X2VxdWFscyhyZXBvcnRzLmxlbmd0aCwgdGVzdGNhc2UucmVw
b3J0cy5sZW5ndGgpOwotCi0gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcmVwb3J0cy5sZW5n
dGg7IGkgKz0gMSkgewotICAgICAgICAgIGNvbnN0IHJlcG9ydCA9IHJlcG9ydHNbaV07Ci0gICAg
ICAgICAgc3dpdGNoICh0ZXN0Y2FzZS5yZXBvcnRzW2ldKSB7Ci0gICAgICAgICAgICBjYXNlICdD
T1JQJzoKLSAgICAgICAgICAgIGNhc2UgJ0NPUlAtUk8nOgotICAgICAgICAgICAgICBjaGVja0Nv
cnBSZXBvcnQocmVwb3J0LCBjb250ZXh0VXJsLCB0YXJnZXRVcmwpOwotICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgIGNhc2UgJ05BVic6Ci0gICAgICAgICAgICBjYXNlICdOQVYtUk8n
OgotICAgICAgICAgICAgICBjaGVja0NvZXBNaXNtYXRjaFJlcG9ydChyZXBvcnQsIGNvbnRleHRV
cmwsIHRhcmdldFVybCk7Ci0gICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgZGVmYXVs
dDoKLSAgICAgICAgICAgICAgYXNzZXJ0X3VucmVhY2hlZCgKLSAgICAgICAgICAgICAgICAnVW5l
eHBlY3RlZCByZXBvcnQgZXhwZWFjdGlvbjogJyArIHRlc3RjYXNlLnJlcG9ydHNbaV0pOworICAg
ICAgICBvYnNlcnZlUmVwb3J0cyhwYXJlbnQuY29udGVudFdpbmRvdykudGhlbih0LnN0ZXBfZnVu
YyhyZXBvcnRzID0+IHsKKyAgICAgICAgICBhc3NlcnRfZXF1YWxzKHJlcG9ydHMubGVuZ3RoLCB0
ZXN0Y2FzZS5yZXBvcnRzLmxlbmd0aCk7CisgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBy
ZXBvcnRzLmxlbmd0aDsgaSArPSAxKSB7CisgICAgICAgICAgICBjb25zdCByZXBvcnQgPSByZXBv
cnRzW2ldOworICAgICAgICAgICAgc3dpdGNoICh0ZXN0Y2FzZS5yZXBvcnRzW2ldKSB7CisgICAg
ICAgICAgICAgIGNhc2UgJ0NPUlAnOgorICAgICAgICAgICAgICAgIGNoZWNrQ29ycFJlcG9ydChy
ZXBvcnQsIGNvbnRleHRVcmwsIHRhcmdldFVybCwgJ2VuZm9yY2UnKTsKKyAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSAnQ09SUC1STyc6CisgICAgICAgICAgICAgICAg
Y2hlY2tDb3JwUmVwb3J0KHJlcG9ydCwgY29udGV4dFVybCwgdGFyZ2V0VXJsLCAncmVwb3J0aW5n
Jyk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgJ05BVic6Cisg
ICAgICAgICAgICAgICAgY2hlY2tDb2VwTWlzbWF0Y2hSZXBvcnQocmVwb3J0LCBjb250ZXh0VXJs
LCB0YXJnZXRVcmwsICdlbmZvcmNlJyk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAgIGNhc2UgJ05BVi1STyc6CisgICAgICAgICAgICAgICAgY2hlY2tDb2VwTWlzbWF0Y2hS
ZXBvcnQocmVwb3J0LCBjb250ZXh0VXJsLCB0YXJnZXRVcmwsICdyZXBvcnRpbmcnKTsKKyAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAg
ICBhc3NlcnRfdW5yZWFjaGVkKAorICAgICAgICAgICAgICAgICAgJ1VuZXhwZWN0ZWQgcmVwb3J0
IGV4cGVhY3Rpb246ICcgKyB0ZXN0Y2FzZS5yZXBvcnRzW2ldKTsKKyAgICAgICAgICAgIH0KICAg
ICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgdC5kb25lKCk7Ci0gICAgICB9IGNhdGNoIChl
KSB7Ci0gICAgICAgIHQuc3RlcCgoKSA9PiB7IHRocm93IGU7IH0pOwotICAgICAgfQorICAgICAg
ICAgIHQuZG9uZSgpOworICAgICAgICB9KSkuY2F0Y2godC5zdGVwX2Z1bmMoZSA9PiB7IHRocm93
IGU7IH0pKTsKKyAgICAgIH0pKS5jYXRjaCh0LnN0ZXBfZnVuYyhlID0+IHsgdGhyb3cgZTsgfSkp
OwogICAgIH0sIGBwYXJlbnQ6ICR7ZGVzYyh0ZXN0Y2FzZS5wYXJlbnQpfSwgdGFyZ2V0OiAke2Rl
c2ModGVzdGNhc2UudGFyZ2V0KX0sIGAgKwogICAgICAgIGB3aXRoIGVtcHR5IGZyYW1lOiAke3dp
dGhFbXB0eUZyYW1lfWApOwogICB9CiB9CiAKIDwvc2NyaXB0PgotPC9ib2R5PjwvaHRtbD4KXCBO
byBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCis8L2JvZHk+PC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5
b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9odG1sL2Nyb3NzLW9yaWdp
bi1lbWJlZGRlci1wb2xpY3kvcmVxdWlyZS1jb3JwLWFib3V0LWJsYW5rLmh0dHBzLWV4cGVjdGVk
LnR4dCBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvaHRtbC9j
cm9zcy1vcmlnaW4tZW1iZWRkZXItcG9saWN5L3JlcXVpcmUtY29ycC1hYm91dC1ibGFuay5odHRw
cy1leHBlY3RlZC50eHQKaW5kZXggOTliN2VhNmM5MWU0ZWFhMjA5MGE5OTRkYTBhYmZkMmFmNDQy
MWQ4NS4uNWZkYjljNGU5Y2JkYzg4Zjc1MDBhYmY0MGJkMzRmMGI2ZmE5YjQ5ZCAxMDA2NDQKLS0t
IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9odG1sL2Nyb3Nz
LW9yaWdpbi1lbWJlZGRlci1wb2xpY3kvcmVxdWlyZS1jb3JwLWFib3V0LWJsYW5rLmh0dHBzLWV4
cGVjdGVkLnR4dAorKysgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRl
c3RzL2h0bWwvY3Jvc3Mtb3JpZ2luLWVtYmVkZGVyLXBvbGljeS9yZXF1aXJlLWNvcnAtYWJvdXQt
YmxhbmsuaHR0cHMtZXhwZWN0ZWQudHh0CkBAIC0yLDUgKzIsNSBAQAogCiBQQVNTIFdhaXQgZm9y
IHRoZSBET00gdG8gYmUgYnVpbHQuCiBQQVNTIGFib3V0OmJsYW5rIGNhbiBhbHdheXMgYmUgZW1i
ZWRkZWQgYnkgYSAncmVxdWlyZS1jb3JwJyBkb2N1bWVudAotRkFJTCBBKEIoQykpIEE9cmVxdWly
ZS1jb3JwLCBCPWFib3V0OmJsYW5rLCBDPW5vLXJlcXVpcmUtY29ycCA9PiBDIGNhbid0IGxvYWQg
d2FpdF9mb3I6IFRpbWVkIG91dCB3YWl0aW5nIG9uIGNvbmRpdGlvbgorRkFJTCBBKEIoQykpIEE9
cmVxdWlyZS1jb3JwLCBCPWFib3V0OmJsYW5rLCBDPW5vLXJlcXVpcmUtY29ycCA9PiBDIGNhbid0
IGxvYWQgc3RlcF93YWl0X2Z1bmM6IFRpbWVkIG91dCB3YWl0aW5nIG9uIGNvbmRpdGlvbgogCmRp
ZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL2h0
bWwvY3Jvc3Mtb3JpZ2luLWVtYmVkZGVyLXBvbGljeS9yZXF1aXJlLWNvcnAtYWJvdXQtc3JjZG9j
Lmh0dHBzLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZv
cm0tdGVzdHMvaHRtbC9jcm9zcy1vcmlnaW4tZW1iZWRkZXItcG9saWN5L3JlcXVpcmUtY29ycC1h
Ym91dC1zcmNkb2MuaHR0cHMtZXhwZWN0ZWQudHh0CmluZGV4IDY2M2RkMDMzMjRhMzY3ODI3Y2Iy
MDliODRiMTkxMGY0ZjQyZTAyMmIuLmQ5YmU3ZTM2NGEyOTQxN2JjZTBjMjNlMjY4NzcyZTYzNmQy
MmFlM2QgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0t
dGVzdHMvaHRtbC9jcm9zcy1vcmlnaW4tZW1iZWRkZXItcG9saWN5L3JlcXVpcmUtY29ycC1hYm91
dC1zcmNkb2MuaHR0cHMtZXhwZWN0ZWQudHh0CisrKyBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3cz
Yy93ZWItcGxhdGZvcm0tdGVzdHMvaHRtbC9jcm9zcy1vcmlnaW4tZW1iZWRkZXItcG9saWN5L3Jl
cXVpcmUtY29ycC1hYm91dC1zcmNkb2MuaHR0cHMtZXhwZWN0ZWQudHh0CkBAIC0yLDUgKzIsNSBA
QAogCiBQQVNTIFdhaXQgZm9yIHRoZSBET00gdG8gYmUgYnVpbHQuCiBQQVNTIGFib3V0OnNyY2Rv
YyBjYW4gYWx3YXlzIGJlIGVtYmVkZGVkIGJ5IGEgJ3JlcXVpcmUtY29ycCcgZG9jdW1lbnQKLUZB
SUwgQShCKEMpKSBBPXJlcXVpcmUtY29ycCwgQj1hYm91dDpzcmNkb2MsIEM9bm8tcmVxdWlyZS1j
b3JwID0+IEMgY2FuJ3QgbG9hZCB3YWl0X2ZvcjogVGltZWQgb3V0IHdhaXRpbmcgb24gY29uZGl0
aW9uCitGQUlMIEEoQihDKSkgQT1yZXF1aXJlLWNvcnAsIEI9YWJvdXQ6c3JjZG9jLCBDPW5vLXJl
cXVpcmUtY29ycCA9PiBDIGNhbid0IGxvYWQgc3RlcF93YWl0X2Z1bmM6IFRpbWVkIG91dCB3YWl0
aW5nIG9uIGNvbmRpdGlvbgogCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mv
d2ViLXBsYXRmb3JtLXRlc3RzL2h0bWwvY3Jvc3Mtb3JpZ2luLWVtYmVkZGVyLXBvbGljeS9yZXF1
aXJlLWNvcnAuaHR0cHMtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dl
Yi1wbGF0Zm9ybS10ZXN0cy9odG1sL2Nyb3NzLW9yaWdpbi1lbWJlZGRlci1wb2xpY3kvcmVxdWly
ZS1jb3JwLmh0dHBzLWV4cGVjdGVkLnR4dAppbmRleCA3MjM4NDQ0OTUyMGQwZjIzZjY5N2YxZmI4
NmZiZGQ4ZmM0MjQwMTYwLi5iYmQ5OTFiNmRkM2M4MzkwNjNlM2M0ZTAxMjc5YmMzMGVhNDFkOGVk
IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3Rz
L2h0bWwvY3Jvc3Mtb3JpZ2luLWVtYmVkZGVyLXBvbGljeS9yZXF1aXJlLWNvcnAuaHR0cHMtZXhw
ZWN0ZWQudHh0CisrKyBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVz
dHMvaHRtbC9jcm9zcy1vcmlnaW4tZW1iZWRkZXItcG9saWN5L3JlcXVpcmUtY29ycC5odHRwcy1l
eHBlY3RlZC50eHQKQEAgLTEsNSArMSw1IEBACiAKLUZBSUwgInJlcXVpcmUtY29ycCIgdG9wLWxl
dmVsOiBuYXZpZ2F0aW5nIGEgZnJhbWUgdG8gIm5vbmUiIHNob3VsZCBmYWlsIHdhaXRfZm9yOiBU
aW1lZCBvdXQgd2FpdGluZyBvbiBjb25kaXRpb24KK0ZBSUwgInJlcXVpcmUtY29ycCIgdG9wLWxl
dmVsOiBuYXZpZ2F0aW5nIGEgZnJhbWUgdG8gIm5vbmUiIHNob3VsZCBmYWlsIHN0ZXBfd2FpdF9m
dW5jOiBUaW1lZCBvdXQgd2FpdGluZyBvbiBjb25kaXRpb24KIEZBSUwgInJlcXVpcmUtY29ycCIg
dG9wLWxldmVsOiBuYXZpZ2F0aW5nIGEgZnJhbWUgZnJvbSAicmVxdWlyZS1jb3JwIiB0byAibm9u
ZSIgc2hvdWxkIGZhaWwgQ2FuJ3QgZmluZCB2YXJpYWJsZTogQnJvYWRjYXN0Q2hhbm5lbAogRkFJ
TCAicmVxdWlyZS1jb3JwIiB0b3AtbGV2ZWw6IGNyZWF0aW5nIGEgbm9vcGVuZXIgIm5vbmUiIHBv
cHVwIHNob3VsZCBzdWNjZWVkIENhbid0IGZpbmQgdmFyaWFibGU6IEJyb2FkY2FzdENoYW5uZWwK
IEZBSUwgInJlcXVpcmUtY29ycCIgdG9wLWxldmVsOiBjcmVhdGluZyBhICJub25lIiBwb3B1cCBz
aG91bGQgc3VjY2VlZC4gQ2FuJ3QgZmluZCB2YXJpYWJsZTogQnJvYWRjYXN0Q2hhbm5lbApAQCAt
OSw3ICs5LDcgQEAgRkFJTCAicmVxdWlyZS1jb3JwIiB0b3AtbGV2ZWwgKGFzIHBvcHVwIHdpdGgg
b3BlbmVyIHNldCB0byBudWxsKTogbmF2aWdhdGluZyB0bwogUEFTUyAicmVxdWlyZS1jb3JwIiB0
b3AtbGV2ZWw6IGZldGNoKCkgdG8gQ09SUDogY3Jvc3Mtb3JpZ2luIHJlc3BvbnNlIHNob3VsZCBz
dWNjZWVkCiBGQUlMICJyZXF1aXJlLWNvcnAiIHRvcC1sZXZlbDogZmV0Y2goKSB0byByZXNwb25z
ZSB3aXRob3V0IENPUlAgc2hvdWxkIGZhaWwgYXNzZXJ0X3VucmVhY2hlZDogU2hvdWxkIGhhdmUg
cmVqZWN0ZWQ6IHVuZGVmaW5lZCBSZWFjaGVkIHVucmVhY2hhYmxlIGNvZGUKIEZBSUwgInJlcXVp
cmUtY29ycCIgdG9wLWxldmVsOiBmZXRjaCgpIHRvIHJlc3BvbnNlIHdpdGhvdXQgQ09SUCB0aHJv
dWdoIGEgV2luZG93UHJveHkgc2hvdWxkIGZhaWwgYXNzZXJ0X3VucmVhY2hlZDogU2hvdWxkIGhh
dmUgcmVqZWN0ZWQ6IHVuZGVmaW5lZCBSZWFjaGVkIHVucmVhY2hhYmxlIGNvZGUKLUZBSUwgInJl
cXVpcmUtY29ycCIgdG9wLWxldmVsOiBuYXZpZ2F0aW5nIGFuIGlmcmFtZSB0byBhIHBhZ2Ugd2l0
aG91dCBDT1JQLCB0aHJvdWdoIGEgV2luZG93UHJveHksIHNob3VsZCBmYWlsIHdhaXRfZm9yOiBU
aW1lZCBvdXQgd2FpdGluZyBvbiBjb25kaXRpb24KK0ZBSUwgInJlcXVpcmUtY29ycCIgdG9wLWxl
dmVsOiBuYXZpZ2F0aW5nIGFuIGlmcmFtZSB0byBhIHBhZ2Ugd2l0aG91dCBDT1JQLCB0aHJvdWdo
IGEgV2luZG93UHJveHksIHNob3VsZCBmYWlsIHN0ZXBfd2FpdF9mdW5jOiBUaW1lZCBvdXQgd2Fp
dGluZyBvbiBjb25kaXRpb24KIFBBU1MgQ09SUDogc2FtZS1zaXRlIGlzIGNoZWNrZWQgYW5kIGFs
bG93ZWQuCiBGQUlMIENPUlA6IHNhbWUtc2l0ZSBpcyBjaGVja2VkIGFuZCBibG9ja2VkLiBhc3Nl
cnRfZmFsc2U6IGV4cGVjdGVkIGZhbHNlIGdvdCB0cnVlCiBGQUlMIG5hdmlnYXRpb24gQ09SUCBp
cyBjaGVja2VkIHdpdGggdGhlIHBhcmVudCBmcmFtZSwgbm90IHRoZSBuYXZpZ2F0aW9uIHNvdXJj
ZSAtIHRvIGJlIGFsbG93ZWQgQ2FuJ3QgZmluZCB2YXJpYWJsZTogQnJvYWRjYXN0Q2hhbm5lbApk
aWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9y
ZXNvdXJjZXMvY2hyb21pdW0vUkVBRE1FLm1kIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dl
Yi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vUkVBRE1FLm1kCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCBiNTNjNmE4YzQyMzJkYmU5Yzc4N2IwZWExN2YwZWQxYTQ5ZjFl
Mzg2Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL0xheW91
dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVt
L1JFQURNRS5tZAorKysgL2Rldi9udWxsCkBAIC0xLDQgKzAsMCBAQAotVGhpcyBkaXJlY3Rvcnkg
Y29udGFpbnMgQ2hyb21pdW0tc3BlY2lmaWMgdGVzdCByZXNvdXJjZXMuCi0KLVRoZSBmaWxlcyBg
bW9qb19iaW5kaW5ncy5qc2AgYW5kIGAqLm1vam9tLmpzYCBhcmUgbWFudWFsbHkgY29waWVkIGZy
b20gdGhlCi1DaHJvbWl1bSBidWlsZCBwcm9jZXNzJ3MgZ2VuZXJhdGVkIGZpbGVzIGFuZCBzaG91
bGQgbm90IGJlIGVkaXRlZCBtYW51YWxseS4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2ltcG9y
dGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL2JpZ19idWZmZXIu
bW9qb20uanMgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jl
c291cmNlcy9jaHJvbWl1bS9iaWdfYnVmZmVyLm1vam9tLmpzCmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCBmMDk3MDZlZWJiODIyODUxODRjZGMyN2FkOWEzNjlmMGJlZjU0MTkzLi4wMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL0xheW91dFRlc3RzL2lt
cG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL2JpZ19idWZm
ZXIubW9qb20uanMKKysrIC9kZXYvbnVsbApAQCAtMSwyNjMgKzAsMCBAQAotLy8gQ29weXJpZ2h0
IDIwMTQgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ug
b2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRo
YXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotCi0ndXNlIHN0cmljdCc7
Ci0KLShmdW5jdGlvbigpIHsKLSAgdmFyIG1vam9tSWQgPSAnbW9qby9wdWJsaWMvbW9qb20vYmFz
ZS9iaWdfYnVmZmVyLm1vam9tJzsKLSAgaWYgKG1vam8uaW50ZXJuYWwuaXNNb2pvbUxvYWRlZCht
b2pvbUlkKSkgewotICAgIGNvbnNvbGUud2FybignVGhlIGZvbGxvd2luZyBtb2pvbSBpcyBsb2Fk
ZWQgbXVsdGlwbGUgdGltZXM6ICcgKyBtb2pvbUlkKTsKLSAgICByZXR1cm47Ci0gIH0KLSAgbW9q
by5pbnRlcm5hbC5tYXJrTW9qb21Mb2FkZWQobW9qb21JZCk7Ci0gIHZhciBiaW5kaW5ncyA9IG1v
am87Ci0gIHZhciBhc3NvY2lhdGVkQmluZGluZ3MgPSBtb2pvOwotICB2YXIgY29kZWMgPSBtb2pv
LmludGVybmFsOwotICB2YXIgdmFsaWRhdG9yID0gbW9qby5pbnRlcm5hbDsKLQotICB2YXIgZXhw
b3J0cyA9IG1vam8uaW50ZXJuYWwuZXhwb3NlTmFtZXNwYWNlKCdtb2pvQmFzZS5tb2pvbScpOwot
Ci0KLQotICBmdW5jdGlvbiBCaWdCdWZmZXJTaGFyZWRNZW1vcnlSZWdpb24odmFsdWVzKSB7Ci0g
ICAgdGhpcy5pbml0RGVmYXVsdHNfKCk7Ci0gICAgdGhpcy5pbml0RmllbGRzXyh2YWx1ZXMpOwot
ICB9Ci0KLQotICBCaWdCdWZmZXJTaGFyZWRNZW1vcnlSZWdpb24ucHJvdG90eXBlLmluaXREZWZh
dWx0c18gPSBmdW5jdGlvbigpIHsKLSAgICB0aGlzLmJ1ZmZlckhhbmRsZSA9IG51bGw7Ci0gICAg
dGhpcy5zaXplID0gMDsKLSAgfTsKLSAgQmlnQnVmZmVyU2hhcmVkTWVtb3J5UmVnaW9uLnByb3Rv
dHlwZS5pbml0RmllbGRzXyA9IGZ1bmN0aW9uKGZpZWxkcykgewotICAgIGZvcih2YXIgZmllbGQg
aW4gZmllbGRzKSB7Ci0gICAgICAgIGlmICh0aGlzLmhhc093blByb3BlcnR5KGZpZWxkKSkKLSAg
ICAgICAgICB0aGlzW2ZpZWxkXSA9IGZpZWxkc1tmaWVsZF07Ci0gICAgfQotICB9OwotCi0gIEJp
Z0J1ZmZlclNoYXJlZE1lbW9yeVJlZ2lvbi52YWxpZGF0ZSA9IGZ1bmN0aW9uKG1lc3NhZ2VWYWxp
ZGF0b3IsIG9mZnNldCkgewotICAgIHZhciBlcnI7Ci0gICAgZXJyID0gbWVzc2FnZVZhbGlkYXRv
ci52YWxpZGF0ZVN0cnVjdEhlYWRlcihvZmZzZXQsIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplKTsK
LSAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCi0gICAgICAg
IHJldHVybiBlcnI7Ci0KLSAgICB2YXIga1ZlcnNpb25TaXplcyA9IFsKLSAgICAgIHt2ZXJzaW9u
OiAwLCBudW1CeXRlczogMTZ9Ci0gICAgXTsKLSAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZh
bGlkYXRlU3RydWN0VmVyc2lvbihvZmZzZXQsIGtWZXJzaW9uU2l6ZXMpOwotICAgIGlmIChlcnIg
IT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKLSAgICAgICAgcmV0dXJuIGVycjsK
LQotCi0gICAgLy8gdmFsaWRhdGUgQmlnQnVmZmVyU2hhcmVkTWVtb3J5UmVnaW9uLmJ1ZmZlckhh
bmRsZQotICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVIYW5kbGUob2Zmc2V0ICsg
Y29kZWMua1N0cnVjdEhlYWRlclNpemUgKyAwLCBmYWxzZSkKLSAgICBpZiAoZXJyICE9PSB2YWxp
ZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCi0gICAgICAgIHJldHVybiBlcnI7Ci0KLQotICAg
IHJldHVybiB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkU7Ci0gIH07Ci0KLSAgQmlnQnVm
ZmVyU2hhcmVkTWVtb3J5UmVnaW9uLmVuY29kZWRTaXplID0gY29kZWMua1N0cnVjdEhlYWRlclNp
emUgKyA4OwotCi0gIEJpZ0J1ZmZlclNoYXJlZE1lbW9yeVJlZ2lvbi5kZWNvZGUgPSBmdW5jdGlv
bihkZWNvZGVyKSB7Ci0gICAgdmFyIHBhY2tlZDsKLSAgICB2YXIgdmFsID0gbmV3IEJpZ0J1ZmZl
clNoYXJlZE1lbW9yeVJlZ2lvbigpOwotICAgIHZhciBudW1iZXJPZkJ5dGVzID0gZGVjb2Rlci5y
ZWFkVWludDMyKCk7Ci0gICAgdmFyIHZlcnNpb24gPSBkZWNvZGVyLnJlYWRVaW50MzIoKTsKLSAg
ICB2YWwuYnVmZmVySGFuZGxlID0gZGVjb2Rlci5kZWNvZGVTdHJ1Y3QoY29kZWMuSGFuZGxlKTsK
LSAgICB2YWwuc2l6ZSA9IGRlY29kZXIuZGVjb2RlU3RydWN0KGNvZGVjLlVpbnQzMik7Ci0gICAg
cmV0dXJuIHZhbDsKLSAgfTsKLQotICBCaWdCdWZmZXJTaGFyZWRNZW1vcnlSZWdpb24uZW5jb2Rl
ID0gZnVuY3Rpb24oZW5jb2RlciwgdmFsKSB7Ci0gICAgdmFyIHBhY2tlZDsKLSAgICBlbmNvZGVy
LndyaXRlVWludDMyKEJpZ0J1ZmZlclNoYXJlZE1lbW9yeVJlZ2lvbi5lbmNvZGVkU2l6ZSk7Ci0g
ICAgZW5jb2Rlci53cml0ZVVpbnQzMigwKTsKLSAgICBlbmNvZGVyLmVuY29kZVN0cnVjdChjb2Rl
Yy5IYW5kbGUsIHZhbC5idWZmZXJIYW5kbGUpOwotICAgIGVuY29kZXIuZW5jb2RlU3RydWN0KGNv
ZGVjLlVpbnQzMiwgdmFsLnNpemUpOwotICB9OwotCi0gIGZ1bmN0aW9uIEJpZ0J1ZmZlcih2YWx1
ZSkgewotICAgIHRoaXMuaW5pdERlZmF1bHRfKCk7Ci0gICAgdGhpcy5pbml0VmFsdWVfKHZhbHVl
KTsKLSAgfQotCi0KLSAgQmlnQnVmZmVyLlRhZ3MgPSB7Ci0gICAgYnl0ZXM6IDAsCi0gICAgc2hh
cmVkTWVtb3J5OiAxLAotICAgIGludmFsaWRCdWZmZXI6IDIsCi0gIH07Ci0KLSAgQmlnQnVmZmVy
LnByb3RvdHlwZS5pbml0RGVmYXVsdF8gPSBmdW5jdGlvbigpIHsKLSAgICB0aGlzLiRkYXRhID0g
bnVsbDsKLSAgICB0aGlzLiR0YWcgPSB1bmRlZmluZWQ7Ci0gIH0KLQotICBCaWdCdWZmZXIucHJv
dG90eXBlLmluaXRWYWx1ZV8gPSBmdW5jdGlvbih2YWx1ZSkgewotICAgIGlmICh2YWx1ZSA9PSB1
bmRlZmluZWQpIHsKLSAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICB2YXIga2V5cyA9IE9iamVj
dC5rZXlzKHZhbHVlKTsKLSAgICBpZiAoa2V5cy5sZW5ndGggPT0gMCkgewotICAgICAgcmV0dXJu
OwotICAgIH0KLQotICAgIGlmIChrZXlzLmxlbmd0aCA+IDEpIHsKLSAgICAgIHRocm93IG5ldyBU
eXBlRXJyb3IoIllvdSBtYXkgc2V0IG9ubHkgb25lIG1lbWJlciBvbiBhIHVuaW9uLiIpOwotICAg
IH0KLQotICAgIHZhciBmaWVsZHMgPSBbCi0gICAgICAgICJieXRlcyIsCi0gICAgICAgICJzaGFy
ZWRNZW1vcnkiLAotICAgICAgICAiaW52YWxpZEJ1ZmZlciIsCi0gICAgXTsKLQotICAgIGlmIChm
aWVsZHMuaW5kZXhPZihrZXlzWzBdKSA8IDApIHsKLSAgICAgIHRocm93IG5ldyBSZWZlcmVuY2VF
cnJvcihrZXlzWzBdICsgIiBpcyBub3QgYSBCaWdCdWZmZXIgbWVtYmVyLiIpOwotCi0gICAgfQot
Ci0gICAgdGhpc1trZXlzWzBdXSA9IHZhbHVlW2tleXNbMF1dOwotICB9Ci0gIE9iamVjdC5kZWZp
bmVQcm9wZXJ0eShCaWdCdWZmZXIucHJvdG90eXBlLCAiYnl0ZXMiLCB7Ci0gICAgZ2V0OiBmdW5j
dGlvbigpIHsKLSAgICAgIGlmICh0aGlzLiR0YWcgIT0gQmlnQnVmZmVyLlRhZ3MuYnl0ZXMpIHsK
LSAgICAgICAgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKAotICAgICAgICAgICAgIkJpZ0J1ZmZl
ci5ieXRlcyBpcyBub3QgY3VycmVudGx5IHNldC4iKTsKLSAgICAgIH0KLSAgICAgIHJldHVybiB0
aGlzLiRkYXRhOwotICAgIH0sCi0KLSAgICBzZXQ6IGZ1bmN0aW9uKHZhbHVlKSB7Ci0gICAgICB0
aGlzLiR0YWcgPSBCaWdCdWZmZXIuVGFncy5ieXRlczsKLSAgICAgIHRoaXMuJGRhdGEgPSB2YWx1
ZTsKLSAgICB9Ci0gIH0pOwotICBPYmplY3QuZGVmaW5lUHJvcGVydHkoQmlnQnVmZmVyLnByb3Rv
dHlwZSwgInNoYXJlZE1lbW9yeSIsIHsKLSAgICBnZXQ6IGZ1bmN0aW9uKCkgewotICAgICAgaWYg
KHRoaXMuJHRhZyAhPSBCaWdCdWZmZXIuVGFncy5zaGFyZWRNZW1vcnkpIHsKLSAgICAgICAgdGhy
b3cgbmV3IFJlZmVyZW5jZUVycm9yKAotICAgICAgICAgICAgIkJpZ0J1ZmZlci5zaGFyZWRNZW1v
cnkgaXMgbm90IGN1cnJlbnRseSBzZXQuIik7Ci0gICAgICB9Ci0gICAgICByZXR1cm4gdGhpcy4k
ZGF0YTsKLSAgICB9LAotCi0gICAgc2V0OiBmdW5jdGlvbih2YWx1ZSkgewotICAgICAgdGhpcy4k
dGFnID0gQmlnQnVmZmVyLlRhZ3Muc2hhcmVkTWVtb3J5OwotICAgICAgdGhpcy4kZGF0YSA9IHZh
bHVlOwotICAgIH0KLSAgfSk7Ci0gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShCaWdCdWZmZXIucHJv
dG90eXBlLCAiaW52YWxpZEJ1ZmZlciIsIHsKLSAgICBnZXQ6IGZ1bmN0aW9uKCkgewotICAgICAg
aWYgKHRoaXMuJHRhZyAhPSBCaWdCdWZmZXIuVGFncy5pbnZhbGlkQnVmZmVyKSB7Ci0gICAgICAg
IHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcigKLSAgICAgICAgICAgICJCaWdCdWZmZXIuaW52YWxp
ZEJ1ZmZlciBpcyBub3QgY3VycmVudGx5IHNldC4iKTsKLSAgICAgIH0KLSAgICAgIHJldHVybiB0
aGlzLiRkYXRhOwotICAgIH0sCi0KLSAgICBzZXQ6IGZ1bmN0aW9uKHZhbHVlKSB7Ci0gICAgICB0
aGlzLiR0YWcgPSBCaWdCdWZmZXIuVGFncy5pbnZhbGlkQnVmZmVyOwotICAgICAgdGhpcy4kZGF0
YSA9IHZhbHVlOwotICAgIH0KLSAgfSk7Ci0KLQotICAgIEJpZ0J1ZmZlci5lbmNvZGUgPSBmdW5j
dGlvbihlbmNvZGVyLCB2YWwpIHsKLSAgICAgIGlmICh2YWwgPT0gbnVsbCkgewotICAgICAgICBl
bmNvZGVyLndyaXRlVWludDY0KDApOwotICAgICAgICBlbmNvZGVyLndyaXRlVWludDY0KDApOwot
ICAgICAgICByZXR1cm47Ci0gICAgICB9Ci0gICAgICBpZiAodmFsLiR0YWcgPT0gdW5kZWZpbmVk
KSB7Ci0gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBlbmNvZGUgdW5pb25zIHdp
dGggYW4gdW5rbm93biBtZW1iZXIgc2V0LiIpOwotICAgICAgfQotCi0gICAgICBlbmNvZGVyLndy
aXRlVWludDMyKDE2KTsKLSAgICAgIGVuY29kZXIud3JpdGVVaW50MzIodmFsLiR0YWcpOwotICAg
ICAgc3dpdGNoICh2YWwuJHRhZykgewotICAgICAgICBjYXNlIEJpZ0J1ZmZlci5UYWdzLmJ5dGVz
OgotICAgICAgICAgIGVuY29kZXIuZW5jb2RlQXJyYXlQb2ludGVyKGNvZGVjLlVpbnQ4LCB2YWwu
Ynl0ZXMpOwotICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEJpZ0J1ZmZlci5UYWdzLnNo
YXJlZE1lbW9yeToKLSAgICAgICAgICBlbmNvZGVyLmVuY29kZVN0cnVjdFBvaW50ZXIoQmlnQnVm
ZmVyU2hhcmVkTWVtb3J5UmVnaW9uLCB2YWwuc2hhcmVkTWVtb3J5KTsKLSAgICAgICAgICBicmVh
azsKLSAgICAgICAgY2FzZSBCaWdCdWZmZXIuVGFncy5pbnZhbGlkQnVmZmVyOgotICAgICAgICAg
IGVuY29kZXIud3JpdGVVaW50OCh2YWwuaW52YWxpZEJ1ZmZlciA/IDEgOiAwKTsKLSAgICAgICAg
ICBicmVhazsKLSAgICAgIH0KLSAgICAgIGVuY29kZXIuYWxpZ24oKTsKLSAgICB9OwotCi0KLSAg
ICBCaWdCdWZmZXIuZGVjb2RlID0gZnVuY3Rpb24oZGVjb2RlcikgewotICAgICAgdmFyIHNpemUg
PSBkZWNvZGVyLnJlYWRVaW50MzIoKTsKLSAgICAgIGlmIChzaXplID09IDApIHsKLSAgICAgICAg
ZGVjb2Rlci5yZWFkVWludDMyKCk7Ci0gICAgICAgIGRlY29kZXIucmVhZFVpbnQ2NCgpOwotICAg
ICAgICByZXR1cm4gbnVsbDsKLSAgICAgIH0KLQotICAgICAgdmFyIHJlc3VsdCA9IG5ldyBCaWdC
dWZmZXIoKTsKLSAgICAgIHZhciB0YWcgPSBkZWNvZGVyLnJlYWRVaW50MzIoKTsKLSAgICAgIHN3
aXRjaCAodGFnKSB7Ci0gICAgICAgIGNhc2UgQmlnQnVmZmVyLlRhZ3MuYnl0ZXM6Ci0gICAgICAg
ICAgcmVzdWx0LmJ5dGVzID0gZGVjb2Rlci5kZWNvZGVBcnJheVBvaW50ZXIoY29kZWMuVWludDgp
OwotICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEJpZ0J1ZmZlci5UYWdzLnNoYXJlZE1l
bW9yeToKLSAgICAgICAgICByZXN1bHQuc2hhcmVkTWVtb3J5ID0gZGVjb2Rlci5kZWNvZGVTdHJ1
Y3RQb2ludGVyKEJpZ0J1ZmZlclNoYXJlZE1lbW9yeVJlZ2lvbik7Ci0gICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIGNhc2UgQmlnQnVmZmVyLlRhZ3MuaW52YWxpZEJ1ZmZlcjoKLSAgICAgICAgICBy
ZXN1bHQuaW52YWxpZEJ1ZmZlciA9IGRlY29kZXIucmVhZFVpbnQ4KCkgPyB0cnVlIDogZmFsc2U7
Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgICBkZWNvZGVyLmFsaWduKCk7Ci0KLSAg
ICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfTsKLQotCi0gICAgQmlnQnVmZmVyLnZhbGlkYXRlID0g
ZnVuY3Rpb24obWVzc2FnZVZhbGlkYXRvciwgb2Zmc2V0KSB7Ci0gICAgICB2YXIgc2l6ZSA9IG1l
c3NhZ2VWYWxpZGF0b3IuZGVjb2RlVW5pb25TaXplKG9mZnNldCk7Ci0gICAgICBpZiAoc2l6ZSAh
PSAxNikgewotICAgICAgICByZXR1cm4gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5JTlZBTElE
X1VOSU9OX1NJWkU7Ci0gICAgICB9Ci0KLSAgICAgIHZhciB0YWcgPSBtZXNzYWdlVmFsaWRhdG9y
LmRlY29kZVVuaW9uVGFnKG9mZnNldCk7Ci0gICAgICB2YXIgZGF0YV9vZmZzZXQgPSBvZmZzZXQg
KyA4OwotICAgICAgdmFyIGVycjsKLSAgICAgIHN3aXRjaCAodGFnKSB7Ci0gICAgICAgIGNhc2Ug
QmlnQnVmZmVyLlRhZ3MuYnl0ZXM6Ci0KLQotICAgIC8vIHZhbGlkYXRlIEJpZ0J1ZmZlci5ieXRl
cwotICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVBcnJheVBvaW50ZXIoZGF0YV9v
ZmZzZXQsIDEsIGNvZGVjLlVpbnQ4LCBmYWxzZSwgWzBdLCAwKTsKLSAgICBpZiAoZXJyICE9PSB2
YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCi0gICAgICAgIHJldHVybiBlcnI7Ci0gICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQmlnQnVmZmVyLlRhZ3Muc2hhcmVkTWVtb3J5Ogot
Ci0KLSAgICAvLyB2YWxpZGF0ZSBCaWdCdWZmZXIuc2hhcmVkTWVtb3J5Ci0gICAgZXJyID0gbWVz
c2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdFBvaW50ZXIoZGF0YV9vZmZzZXQsIEJpZ0J1ZmZl
clNoYXJlZE1lbW9yeVJlZ2lvbiwgZmFsc2UpOwotICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52
YWxpZGF0aW9uRXJyb3IuTk9ORSkKLSAgICAgICAgcmV0dXJuIGVycjsKLSAgICAgICAgICBicmVh
azsKLSAgICAgICAgY2FzZSBCaWdCdWZmZXIuVGFncy5pbnZhbGlkQnVmZmVyOgotCi0KLSAgICAg
ICAgICBicmVhazsKLSAgICAgIH0KLQotICAgICAgcmV0dXJuIHZhbGlkYXRvci52YWxpZGF0aW9u
RXJyb3IuTk9ORTsKLSAgICB9OwotCi0gIEJpZ0J1ZmZlci5lbmNvZGVkU2l6ZSA9IDE2OwotICBl
eHBvcnRzLkJpZ0J1ZmZlclNoYXJlZE1lbW9yeVJlZ2lvbiA9IEJpZ0J1ZmZlclNoYXJlZE1lbW9y
eVJlZ2lvbjsKLSAgZXhwb3J0cy5CaWdCdWZmZXIgPSBCaWdCdWZmZXI7Ci19KSgpOwpkaWZmIC0t
Z2l0IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJj
ZXMvY2hyb21pdW0vYmlnX2J1ZmZlci5tb2pvbS5qcy5oZWFkZXJzIGIvTGF5b3V0VGVzdHMvaW1w
b3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vYmlnX2J1ZmZl
ci5tb2pvbS5qcy5oZWFkZXJzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2YzYxYTM0
YTRlYzJlNzUwOTZkYjBlYjlmNzc0OGIxNDJmMGRiN2JiLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxh
dGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL2JpZ19idWZmZXIubW9qb20uanMuaGVhZGVy
cworKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLUNvbnRlbnQtVHlwZTogdGV4dC9qYXZhc2Ny
aXB0OyBjaGFyc2V0PXV0Zi04ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0
IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMv
Y2hyb21pdW0vY29udGFjdHNfbWFuYWdlcl9tb2NrLmpzIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQv
dzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vY29udGFjdHNfbWFuYWdl
cl9tb2NrLmpzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0NDNkNTBiYmM2MmJlZjcx
ZTQwOGZmYmE1N2ViNjY3ODc3MmRhMjI0Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwCi0tLSBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVz
dHMvcmVzb3VyY2VzL2Nocm9taXVtL2NvbnRhY3RzX21hbmFnZXJfbW9jay5qcworKysgL2Rldi9u
dWxsCkBAIC0xLDkwICswLDAgQEAKLS8vIENvcHlyaWdodCAyMDE4IFRoZSBDaHJvbWl1bSBBdXRo
b3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMg
Z292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4g
dGhlIExJQ0VOU0UgZmlsZS4KLQotJ3VzZSBzdHJpY3QnOwotCi1jb25zdCBXZWJDb250YWN0c1Rl
c3QgPSAoKCkgPT4gewotICBjbGFzcyBNb2NrQ29udGFjdHMgewotICAgIGNvbnN0cnVjdG9yKCkg
ewotICAgICAgdGhpcy5iaW5kaW5nU2V0XyA9IG5ldyBtb2pvLkJpbmRpbmdTZXQoYmxpbmsubW9q
b20uQ29udGFjdHNNYW5hZ2VyKTsKLQotICAgICAgdGhpcy5pbnRlcmNlcHRvcl8gPQotICAgICAg
ICAgIG5ldyBNb2pvSW50ZXJmYWNlSW50ZXJjZXB0b3IoYmxpbmsubW9qb20uQ29udGFjdHNNYW5h
Z2VyLm5hbWUpOwotICAgICAgdGhpcy5pbnRlcmNlcHRvcl8ub25pbnRlcmZhY2VyZXF1ZXN0ID0K
LSAgICAgICAgICBlID0+IHRoaXMuYmluZGluZ1NldF8uYWRkQmluZGluZyh0aGlzLCBlLmhhbmRs
ZSk7Ci0gICAgICB0aGlzLmludGVyY2VwdG9yXy5zdGFydCgpOwotCi0gICAgICB0aGlzLnNlbGVj
dGVkQ29udGFjdHNfID0gW107Ci0gICAgfQotCi0gICAgZm9ybWF0QWRkcmVzc18oYWRkcmVzcykg
ewotICAgICAgLy8gVGhlc2UgYXJlIGFsbCByZXF1aXJlZCBmaWVsZHMgaW4gdGhlIG1vam8gZGVm
aW5pdGlvbi4KLSAgICAgIHJldHVybiB7Ci0gICAgICAgIGNvdW50cnk6IGFkZHJlc3MuY291bnRy
eSB8fCAnJywKLSAgICAgICAgYWRkcmVzc0xpbmU6IGFkZHJlc3MuYWRkcmVzc0xpbmUgfHwgW10s
Ci0gICAgICAgIHJlZ2lvbjogYWRkcmVzcy5yZWdpb24gfHwgJycsCi0gICAgICAgIGNpdHk6IGFk
ZHJlc3MuY2l0eSB8fCAnJywKLSAgICAgICAgZGVwZW5kZW50TG9jYWxpdHk6IGFkZHJlc3MuZGVw
ZW5kZW50TG9jYWxpdHkgfHwgJycsCi0gICAgICAgIHBvc3RhbENvZGU6IGFkZHJlc3MucG9zdENv
ZGUgfHwgJycsCi0gICAgICAgIHNvcnRpbmdDb2RlOiBhZGRyZXNzLnNvcnRpbmdDb2RlIHx8ICcn
LAotICAgICAgICBvcmdhbml6YXRpb246IGFkZHJlc3Mub3JnYW5pemF0aW9uIHx8ICcnLAotICAg
ICAgICByZWNpcGllbnQ6IGFkZHJlc3MucmVjaXBpZW50IHx8ICcnLAotICAgICAgICBwaG9uZTog
YWRkcmVzcy5waG9uZSB8fCAnJywKLSAgICAgIH07Ci0gICAgfQotCi0gICAgYXN5bmMgc2VsZWN0
KG11bHRpcGxlLCBpbmNsdWRlTmFtZXMsIGluY2x1ZGVFbWFpbHMsIGluY2x1ZGVUZWwsIGluY2x1
ZGVBZGRyZXNzZXMsIGluY2x1ZGVJY29ucykgewotICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRDb250
YWN0c18gPT09IG51bGwpCi0gICAgICAgIHJldHVybiB7Y29udGFjdHM6IG51bGx9OwotCi0gICAg
ICBjb25zdCBjb250YWN0SW5mb3MgPSBhd2FpdCBQcm9taXNlLmFsbCh0aGlzLnNlbGVjdGVkQ29u
dGFjdHNfLm1hcChhc3luYyBjb250YWN0ID0+IHsKLSAgICAgICAgY29uc3QgY29udGFjdEluZm8g
PSBuZXcgYmxpbmsubW9qb20uQ29udGFjdEluZm8oKTsKLSAgICAgICAgaWYgKGluY2x1ZGVOYW1l
cykKLSAgICAgICAgICBjb250YWN0SW5mby5uYW1lID0gY29udGFjdC5uYW1lIHx8IFtdOwotICAg
ICAgICBpZiAoaW5jbHVkZUVtYWlscykKLSAgICAgICAgICBjb250YWN0SW5mby5lbWFpbCA9IGNv
bnRhY3QuZW1haWwgfHwgW107Ci0gICAgICAgIGlmIChpbmNsdWRlVGVsKQotICAgICAgICAgIGNv
bnRhY3RJbmZvLnRlbCA9IGNvbnRhY3QudGVsIHx8IFtdOwotICAgICAgICBpZiAoaW5jbHVkZUFk
ZHJlc3NlcykgewotICAgICAgICAgIGNvbnRhY3RJbmZvLmFkZHJlc3MgPSAoY29udGFjdC5hZGRy
ZXNzIHx8IFtdKS5tYXAoYWRkcmVzcyA9PiB0aGlzLmZvcm1hdEFkZHJlc3NfKGFkZHJlc3MpKTsK
LSAgICAgICAgfQotICAgICAgICBpZiAoaW5jbHVkZUljb25zKSB7Ci0gICAgICAgICAgY29udGFj
dEluZm8uaWNvbiA9IGF3YWl0IFByb21pc2UuYWxsKAotICAgICAgICAgICAgKGNvbnRhY3QuaWNv
biB8fCBbXSkubWFwKGFzeW5jIGJsb2IgPT4gKHsKLSAgICAgICAgICAgICAgbWltZVR5cGU6IGJs
b2IudHlwZSwKLSAgICAgICAgICAgICAgZGF0YTogKGF3YWl0IGJsb2IudGV4dCgpKS5zcGxpdCgn
JykubWFwKHMgPT4gcy5jaGFyQ29kZUF0KDApKSwKLSAgICAgICAgICAgIH0pKSk7Ci0gICAgICAg
IH0KLSAgICAgICAgcmV0dXJuIGNvbnRhY3RJbmZvOwotICAgICAgfSkpOwotCi0gICAgICBpZiAo
IWNvbnRhY3RJbmZvcy5sZW5ndGgpIHJldHVybiB7Y29udGFjdHM6IFtdfTsKLSAgICAgIGlmICgh
bXVsdGlwbGUpIHJldHVybiB7Y29udGFjdHM6IFtjb250YWN0SW5mb3NbMF1dfTsKLSAgICAgIHJl
dHVybiB7Y29udGFjdHM6IGNvbnRhY3RJbmZvc307Ci0gICAgfQotCi0gICAgc2V0U2VsZWN0ZWRD
b250YWN0cyhjb250YWN0cykgewotICAgICAgdGhpcy5zZWxlY3RlZENvbnRhY3RzXyA9IGNvbnRh
Y3RzOwotICAgIH0KLQotICAgIHJlc2V0KCkgewotICAgICAgdGhpcy5iaW5kaW5nU2V0Xy5jbG9z
ZUFsbEJpbmRpbmdzKCk7Ci0gICAgICB0aGlzLmludGVyY2VwdG9yXy5zdG9wKCk7Ci0gICAgfQot
ICB9Ci0KLSAgY29uc3QgbW9ja0NvbnRhY3RzID0gbmV3IE1vY2tDb250YWN0cygpOwotCi0gIGNs
YXNzIENvbnRhY3RzVGVzdENocm9taXVtIHsKLSAgICBjb25zdHJ1Y3RvcigpIHsKLSAgICAgIE9i
amVjdC5mcmVlemUodGhpcyk7IC8vIE1ha2UgaXQgaW1tdXRhYmxlLgotICAgIH0KLQotICAgIHNl
dFNlbGVjdGVkQ29udGFjdHMoY29udGFjdHMpIHsKLSAgICAgIG1vY2tDb250YWN0cy5zZXRTZWxl
Y3RlZENvbnRhY3RzKGNvbnRhY3RzKTsKLSAgICB9Ci0gIH0KLQotICByZXR1cm4gQ29udGFjdHNU
ZXN0Q2hyb21pdW07Ci19KSgpOwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNj
L3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vZGV2aWNlLm1vam9tLmpzIGIv
TGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hy
b21pdW0vZGV2aWNlLm1vam9tLmpzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NDg4
Y2JjNjljMjkxNzBkOTQ0MWQyMjEwZGEyN2E0NjRmNjdkNDQ1Li4wMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWIt
cGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL2RldmljZS5tb2pvbS5qcworKysgL2Rl
di9udWxsCkBAIC0xLDM3ODggKzAsMCBAQAotLy8gQ29weXJpZ2h0IDIwMTQgVGhlIENocm9taXVt
IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29k
ZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3Vu
ZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotCi0ndXNlIHN0cmljdCc7Ci0KLShmdW5jdGlvbigpIHsK
LSAgdmFyIG1vam9tSWQgPSAnZGV2aWNlL3VzYi9wdWJsaWMvbW9qb20vZGV2aWNlLm1vam9tJzsK
LSAgaWYgKG1vam8uaW50ZXJuYWwuaXNNb2pvbUxvYWRlZChtb2pvbUlkKSkgewotICAgIGNvbnNv
bGUud2FybignVGhlIGZvbGxvd2luZyBtb2pvbSBpcyBsb2FkZWQgbXVsdGlwbGUgdGltZXM6ICcg
KyBtb2pvbUlkKTsKLSAgICByZXR1cm47Ci0gIH0KLSAgbW9qby5pbnRlcm5hbC5tYXJrTW9qb21M
b2FkZWQobW9qb21JZCk7Ci0gIHZhciBiaW5kaW5ncyA9IG1vam87Ci0gIHZhciBhc3NvY2lhdGVk
QmluZGluZ3MgPSBtb2pvOwotICB2YXIgY29kZWMgPSBtb2pvLmludGVybmFsOwotICB2YXIgdmFs
aWRhdG9yID0gbW9qby5pbnRlcm5hbDsKLQotICB2YXIgZXhwb3J0cyA9IG1vam8uaW50ZXJuYWwu
ZXhwb3NlTmFtZXNwYWNlKCdkZXZpY2UubW9qb20nKTsKLSAgdmFyIHN0cmluZzE2JCA9Ci0gICAg
ICBtb2pvLmludGVybmFsLmV4cG9zZU5hbWVzcGFjZSgnbW9qb0Jhc2UubW9qb20nKTsKLSAgaWYg
KG1vam8uY29uZmlnLmF1dG9Mb2FkTW9qb21EZXBzKSB7Ci0gICAgbW9qby5pbnRlcm5hbC5sb2Fk
TW9qb21JZk5lY2Vzc2FyeSgKLSAgICAgICAgJ21vam8vcHVibGljL21vam9tL2Jhc2Uvc3RyaW5n
MTYubW9qb20nLCAnLi4vLi4vLi4vLi4vbW9qby9wdWJsaWMvbW9qb20vYmFzZS9zdHJpbmcxNi5t
b2pvbS5qcycpOwotICB9Ci0gIHZhciB1cmwkID0KLSAgICAgIG1vam8uaW50ZXJuYWwuZXhwb3Nl
TmFtZXNwYWNlKCd1cmwubW9qb20nKTsKLSAgaWYgKG1vam8uY29uZmlnLmF1dG9Mb2FkTW9qb21E
ZXBzKSB7Ci0gICAgbW9qby5pbnRlcm5hbC5sb2FkTW9qb21JZk5lY2Vzc2FyeSgKLSAgICAgICAg
J3VybC9tb2pvbS91cmwubW9qb20nLCAnLi4vLi4vLi4vLi4vdXJsL21vam9tL3VybC5tb2pvbS5q
cycpOwotICB9Ci0KLQotICB2YXIgVXNiT3BlbkRldmljZUVycm9yID0ge307Ci0gIFVzYk9wZW5E
ZXZpY2VFcnJvci5PSyA9IDA7Ci0gIFVzYk9wZW5EZXZpY2VFcnJvci5BQ0NFU1NfREVOSUVEID0g
VXNiT3BlbkRldmljZUVycm9yLk9LICsgMTsKLSAgVXNiT3BlbkRldmljZUVycm9yLkFMUkVBRFlf
T1BFTiA9IFVzYk9wZW5EZXZpY2VFcnJvci5BQ0NFU1NfREVOSUVEICsgMTsKLSAgVXNiT3BlbkRl
dmljZUVycm9yLk1JTl9WQUxVRSA9IDAsCi0gIFVzYk9wZW5EZXZpY2VFcnJvci5NQVhfVkFMVUUg
PSAyLAotCi0gIFVzYk9wZW5EZXZpY2VFcnJvci5pc0tub3duRW51bVZhbHVlID0gZnVuY3Rpb24o
dmFsdWUpIHsKLSAgICBzd2l0Y2ggKHZhbHVlKSB7Ci0gICAgY2FzZSAwOgotICAgIGNhc2UgMToK
LSAgICBjYXNlIDI6Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNl
OwotICB9OwotCi0gIFVzYk9wZW5EZXZpY2VFcnJvci52YWxpZGF0ZSA9IGZ1bmN0aW9uKGVudW1W
YWx1ZSkgewotICAgIHZhciBpc0V4dGVuc2libGUgPSBmYWxzZTsKLSAgICBpZiAoaXNFeHRlbnNp
YmxlIHx8IHRoaXMuaXNLbm93bkVudW1WYWx1ZShlbnVtVmFsdWUpKQotICAgICAgcmV0dXJuIHZh
bGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORTsKLQotICAgIHJldHVybiB2YWxpZGF0b3IudmFs
aWRhdGlvbkVycm9yLlVOS05PV05fRU5VTV9WQUxVRTsKLSAgfTsKLSAgdmFyIFVzYlRyYW5zZmVy
RGlyZWN0aW9uID0ge307Ci0gIFVzYlRyYW5zZmVyRGlyZWN0aW9uLklOQk9VTkQgPSAwOwotICBV
c2JUcmFuc2ZlckRpcmVjdGlvbi5PVVRCT1VORCA9IFVzYlRyYW5zZmVyRGlyZWN0aW9uLklOQk9V
TkQgKyAxOwotICBVc2JUcmFuc2ZlckRpcmVjdGlvbi5NSU5fVkFMVUUgPSAwLAotICBVc2JUcmFu
c2ZlckRpcmVjdGlvbi5NQVhfVkFMVUUgPSAxLAotCi0gIFVzYlRyYW5zZmVyRGlyZWN0aW9uLmlz
S25vd25FbnVtVmFsdWUgPSBmdW5jdGlvbih2YWx1ZSkgewotICAgIHN3aXRjaCAodmFsdWUpIHsK
LSAgICBjYXNlIDA6Ci0gICAgY2FzZSAxOgotICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAg
IHJldHVybiBmYWxzZTsKLSAgfTsKLQotICBVc2JUcmFuc2ZlckRpcmVjdGlvbi52YWxpZGF0ZSA9
IGZ1bmN0aW9uKGVudW1WYWx1ZSkgewotICAgIHZhciBpc0V4dGVuc2libGUgPSBmYWxzZTsKLSAg
ICBpZiAoaXNFeHRlbnNpYmxlIHx8IHRoaXMuaXNLbm93bkVudW1WYWx1ZShlbnVtVmFsdWUpKQot
ICAgICAgcmV0dXJuIHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORTsKLQotICAgIHJldHVy
biB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLlVOS05PV05fRU5VTV9WQUxVRTsKLSAgfTsKLSAg
dmFyIFVzYkNvbnRyb2xUcmFuc2ZlclR5cGUgPSB7fTsKLSAgVXNiQ29udHJvbFRyYW5zZmVyVHlw
ZS5TVEFOREFSRCA9IDA7Ci0gIFVzYkNvbnRyb2xUcmFuc2ZlclR5cGUuQ0xBU1MgPSBVc2JDb250
cm9sVHJhbnNmZXJUeXBlLlNUQU5EQVJEICsgMTsKLSAgVXNiQ29udHJvbFRyYW5zZmVyVHlwZS5W
RU5ET1IgPSBVc2JDb250cm9sVHJhbnNmZXJUeXBlLkNMQVNTICsgMTsKLSAgVXNiQ29udHJvbFRy
YW5zZmVyVHlwZS5SRVNFUlZFRCA9IFVzYkNvbnRyb2xUcmFuc2ZlclR5cGUuVkVORE9SICsgMTsK
LSAgVXNiQ29udHJvbFRyYW5zZmVyVHlwZS5NSU5fVkFMVUUgPSAwLAotICBVc2JDb250cm9sVHJh
bnNmZXJUeXBlLk1BWF9WQUxVRSA9IDMsCi0KLSAgVXNiQ29udHJvbFRyYW5zZmVyVHlwZS5pc0tu
b3duRW51bVZhbHVlID0gZnVuY3Rpb24odmFsdWUpIHsKLSAgICBzd2l0Y2ggKHZhbHVlKSB7Ci0g
ICAgY2FzZSAwOgotICAgIGNhc2UgMToKLSAgICBjYXNlIDI6Ci0gICAgY2FzZSAzOgotICAgICAg
cmV0dXJuIHRydWU7Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLSAgfTsKLQotICBVc2JDb250
cm9sVHJhbnNmZXJUeXBlLnZhbGlkYXRlID0gZnVuY3Rpb24oZW51bVZhbHVlKSB7Ci0gICAgdmFy
IGlzRXh0ZW5zaWJsZSA9IGZhbHNlOwotICAgIGlmIChpc0V4dGVuc2libGUgfHwgdGhpcy5pc0tu
b3duRW51bVZhbHVlKGVudW1WYWx1ZSkpCi0gICAgICByZXR1cm4gdmFsaWRhdG9yLnZhbGlkYXRp
b25FcnJvci5OT05FOwotCi0gICAgcmV0dXJuIHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuVU5L
Tk9XTl9FTlVNX1ZBTFVFOwotICB9OwotICB2YXIgVXNiQ29udHJvbFRyYW5zZmVyUmVjaXBpZW50
ID0ge307Ci0gIFVzYkNvbnRyb2xUcmFuc2ZlclJlY2lwaWVudC5ERVZJQ0UgPSAwOwotICBVc2JD
b250cm9sVHJhbnNmZXJSZWNpcGllbnQuSU5URVJGQUNFID0gVXNiQ29udHJvbFRyYW5zZmVyUmVj
aXBpZW50LkRFVklDRSArIDE7Ci0gIFVzYkNvbnRyb2xUcmFuc2ZlclJlY2lwaWVudC5FTkRQT0lO
VCA9IFVzYkNvbnRyb2xUcmFuc2ZlclJlY2lwaWVudC5JTlRFUkZBQ0UgKyAxOwotICBVc2JDb250
cm9sVHJhbnNmZXJSZWNpcGllbnQuT1RIRVIgPSBVc2JDb250cm9sVHJhbnNmZXJSZWNpcGllbnQu
RU5EUE9JTlQgKyAxOwotICBVc2JDb250cm9sVHJhbnNmZXJSZWNpcGllbnQuTUlOX1ZBTFVFID0g
MCwKLSAgVXNiQ29udHJvbFRyYW5zZmVyUmVjaXBpZW50Lk1BWF9WQUxVRSA9IDMsCi0KLSAgVXNi
Q29udHJvbFRyYW5zZmVyUmVjaXBpZW50LmlzS25vd25FbnVtVmFsdWUgPSBmdW5jdGlvbih2YWx1
ZSkgewotICAgIHN3aXRjaCAodmFsdWUpIHsKLSAgICBjYXNlIDA6Ci0gICAgY2FzZSAxOgotICAg
IGNhc2UgMjoKLSAgICBjYXNlIDM6Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgcmV0
dXJuIGZhbHNlOwotICB9OwotCi0gIFVzYkNvbnRyb2xUcmFuc2ZlclJlY2lwaWVudC52YWxpZGF0
ZSA9IGZ1bmN0aW9uKGVudW1WYWx1ZSkgewotICAgIHZhciBpc0V4dGVuc2libGUgPSBmYWxzZTsK
LSAgICBpZiAoaXNFeHRlbnNpYmxlIHx8IHRoaXMuaXNLbm93bkVudW1WYWx1ZShlbnVtVmFsdWUp
KQotICAgICAgcmV0dXJuIHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORTsKLQotICAgIHJl
dHVybiB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLlVOS05PV05fRU5VTV9WQUxVRTsKLSAgfTsK
LSAgdmFyIFVzYlRyYW5zZmVyVHlwZSA9IHt9OwotICBVc2JUcmFuc2ZlclR5cGUuQ09OVFJPTCA9
IDA7Ci0gIFVzYlRyYW5zZmVyVHlwZS5JU09DSFJPTk9VUyA9IFVzYlRyYW5zZmVyVHlwZS5DT05U
Uk9MICsgMTsKLSAgVXNiVHJhbnNmZXJUeXBlLkJVTEsgPSBVc2JUcmFuc2ZlclR5cGUuSVNPQ0hS
T05PVVMgKyAxOwotICBVc2JUcmFuc2ZlclR5cGUuSU5URVJSVVBUID0gVXNiVHJhbnNmZXJUeXBl
LkJVTEsgKyAxOwotICBVc2JUcmFuc2ZlclR5cGUuTUlOX1ZBTFVFID0gMCwKLSAgVXNiVHJhbnNm
ZXJUeXBlLk1BWF9WQUxVRSA9IDMsCi0KLSAgVXNiVHJhbnNmZXJUeXBlLmlzS25vd25FbnVtVmFs
dWUgPSBmdW5jdGlvbih2YWx1ZSkgewotICAgIHN3aXRjaCAodmFsdWUpIHsKLSAgICBjYXNlIDA6
Ci0gICAgY2FzZSAxOgotICAgIGNhc2UgMjoKLSAgICBjYXNlIDM6Ci0gICAgICByZXR1cm4gdHJ1
ZTsKLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9OwotCi0gIFVzYlRyYW5zZmVyVHlwZS52
YWxpZGF0ZSA9IGZ1bmN0aW9uKGVudW1WYWx1ZSkgewotICAgIHZhciBpc0V4dGVuc2libGUgPSBm
YWxzZTsKLSAgICBpZiAoaXNFeHRlbnNpYmxlIHx8IHRoaXMuaXNLbm93bkVudW1WYWx1ZShlbnVt
VmFsdWUpKQotICAgICAgcmV0dXJuIHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORTsKLQot
ICAgIHJldHVybiB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLlVOS05PV05fRU5VTV9WQUxVRTsK
LSAgfTsKLSAgdmFyIFVzYlN5bmNocm9uaXphdGlvblR5cGUgPSB7fTsKLSAgVXNiU3luY2hyb25p
emF0aW9uVHlwZS5OT05FID0gMDsKLSAgVXNiU3luY2hyb25pemF0aW9uVHlwZS5BU1lOQ0hST05P
VVMgPSBVc2JTeW5jaHJvbml6YXRpb25UeXBlLk5PTkUgKyAxOwotICBVc2JTeW5jaHJvbml6YXRp
b25UeXBlLkFEQVBUSVZFID0gVXNiU3luY2hyb25pemF0aW9uVHlwZS5BU1lOQ0hST05PVVMgKyAx
OwotICBVc2JTeW5jaHJvbml6YXRpb25UeXBlLlNZTkNIUk9OT1VTID0gVXNiU3luY2hyb25pemF0
aW9uVHlwZS5BREFQVElWRSArIDE7Ci0gIFVzYlN5bmNocm9uaXphdGlvblR5cGUuTUlOX1ZBTFVF
ID0gMCwKLSAgVXNiU3luY2hyb25pemF0aW9uVHlwZS5NQVhfVkFMVUUgPSAzLAotCi0gIFVzYlN5
bmNocm9uaXphdGlvblR5cGUuaXNLbm93bkVudW1WYWx1ZSA9IGZ1bmN0aW9uKHZhbHVlKSB7Ci0g
ICAgc3dpdGNoICh2YWx1ZSkgewotICAgIGNhc2UgMDoKLSAgICBjYXNlIDE6Ci0gICAgY2FzZSAy
OgotICAgIGNhc2UgMzoKLSAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICByZXR1cm4gZmFs
c2U7Ci0gIH07Ci0KLSAgVXNiU3luY2hyb25pemF0aW9uVHlwZS52YWxpZGF0ZSA9IGZ1bmN0aW9u
KGVudW1WYWx1ZSkgewotICAgIHZhciBpc0V4dGVuc2libGUgPSBmYWxzZTsKLSAgICBpZiAoaXNF
eHRlbnNpYmxlIHx8IHRoaXMuaXNLbm93bkVudW1WYWx1ZShlbnVtVmFsdWUpKQotICAgICAgcmV0
dXJuIHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORTsKLQotICAgIHJldHVybiB2YWxpZGF0
b3IudmFsaWRhdGlvbkVycm9yLlVOS05PV05fRU5VTV9WQUxVRTsKLSAgfTsKLSAgdmFyIFVzYlVz
YWdlVHlwZSA9IHt9OwotICBVc2JVc2FnZVR5cGUuREFUQSA9IDA7Ci0gIFVzYlVzYWdlVHlwZS5G
RUVEQkFDSyA9IFVzYlVzYWdlVHlwZS5EQVRBICsgMTsKLSAgVXNiVXNhZ2VUeXBlLkVYUExJQ0lU
X0ZFRURCQUNLID0gVXNiVXNhZ2VUeXBlLkZFRURCQUNLICsgMTsKLSAgVXNiVXNhZ2VUeXBlLlBF
UklPRElDID0gVXNiVXNhZ2VUeXBlLkVYUExJQ0lUX0ZFRURCQUNLICsgMTsKLSAgVXNiVXNhZ2VU
eXBlLk5PVElGSUNBVElPTiA9IFVzYlVzYWdlVHlwZS5QRVJJT0RJQyArIDE7Ci0gIFVzYlVzYWdl
VHlwZS5SRVNFUlZFRCA9IFVzYlVzYWdlVHlwZS5OT1RJRklDQVRJT04gKyAxOwotICBVc2JVc2Fn
ZVR5cGUuTUlOX1ZBTFVFID0gMCwKLSAgVXNiVXNhZ2VUeXBlLk1BWF9WQUxVRSA9IDUsCi0KLSAg
VXNiVXNhZ2VUeXBlLmlzS25vd25FbnVtVmFsdWUgPSBmdW5jdGlvbih2YWx1ZSkgewotICAgIHN3
aXRjaCAodmFsdWUpIHsKLSAgICBjYXNlIDA6Ci0gICAgY2FzZSAxOgotICAgIGNhc2UgMjoKLSAg
ICBjYXNlIDM6Ci0gICAgY2FzZSA0OgotICAgIGNhc2UgNToKLSAgICAgIHJldHVybiB0cnVlOwot
ICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci0gIH07Ci0KLSAgVXNiVXNhZ2VUeXBlLnZhbGlkYXRl
ID0gZnVuY3Rpb24oZW51bVZhbHVlKSB7Ci0gICAgdmFyIGlzRXh0ZW5zaWJsZSA9IGZhbHNlOwot
ICAgIGlmIChpc0V4dGVuc2libGUgfHwgdGhpcy5pc0tub3duRW51bVZhbHVlKGVudW1WYWx1ZSkp
Ci0gICAgICByZXR1cm4gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FOwotCi0gICAgcmV0
dXJuIHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuVU5LTk9XTl9FTlVNX1ZBTFVFOwotICB9Owot
ICB2YXIgVXNiVHJhbnNmZXJTdGF0dXMgPSB7fTsKLSAgVXNiVHJhbnNmZXJTdGF0dXMuQ09NUExF
VEVEID0gMDsKLSAgVXNiVHJhbnNmZXJTdGF0dXMuVFJBTlNGRVJfRVJST1IgPSBVc2JUcmFuc2Zl
clN0YXR1cy5DT01QTEVURUQgKyAxOwotICBVc2JUcmFuc2ZlclN0YXR1cy5USU1FT1VUID0gVXNi
VHJhbnNmZXJTdGF0dXMuVFJBTlNGRVJfRVJST1IgKyAxOwotICBVc2JUcmFuc2ZlclN0YXR1cy5D
QU5DRUxMRUQgPSBVc2JUcmFuc2ZlclN0YXR1cy5USU1FT1VUICsgMTsKLSAgVXNiVHJhbnNmZXJT
dGF0dXMuU1RBTExFRCA9IFVzYlRyYW5zZmVyU3RhdHVzLkNBTkNFTExFRCArIDE7Ci0gIFVzYlRy
YW5zZmVyU3RhdHVzLkRJU0NPTk5FQ1QgPSBVc2JUcmFuc2ZlclN0YXR1cy5TVEFMTEVEICsgMTsK
LSAgVXNiVHJhbnNmZXJTdGF0dXMuQkFCQkxFID0gVXNiVHJhbnNmZXJTdGF0dXMuRElTQ09OTkVD
VCArIDE7Ci0gIFVzYlRyYW5zZmVyU3RhdHVzLlNIT1JUX1BBQ0tFVCA9IFVzYlRyYW5zZmVyU3Rh
dHVzLkJBQkJMRSArIDE7Ci0gIFVzYlRyYW5zZmVyU3RhdHVzLlBFUk1JU1NJT05fREVOSUVEID0g
VXNiVHJhbnNmZXJTdGF0dXMuU0hPUlRfUEFDS0VUICsgMTsKLSAgVXNiVHJhbnNmZXJTdGF0dXMu
TUlOX1ZBTFVFID0gMCwKLSAgVXNiVHJhbnNmZXJTdGF0dXMuTUFYX1ZBTFVFID0gOCwKLQotICBV
c2JUcmFuc2ZlclN0YXR1cy5pc0tub3duRW51bVZhbHVlID0gZnVuY3Rpb24odmFsdWUpIHsKLSAg
ICBzd2l0Y2ggKHZhbHVlKSB7Ci0gICAgY2FzZSAwOgotICAgIGNhc2UgMToKLSAgICBjYXNlIDI6
Ci0gICAgY2FzZSAzOgotICAgIGNhc2UgNDoKLSAgICBjYXNlIDU6Ci0gICAgY2FzZSA2OgotICAg
IGNhc2UgNzoKLSAgICBjYXNlIDg6Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgcmV0
dXJuIGZhbHNlOwotICB9OwotCi0gIFVzYlRyYW5zZmVyU3RhdHVzLnZhbGlkYXRlID0gZnVuY3Rp
b24oZW51bVZhbHVlKSB7Ci0gICAgdmFyIGlzRXh0ZW5zaWJsZSA9IGZhbHNlOwotICAgIGlmIChp
c0V4dGVuc2libGUgfHwgdGhpcy5pc0tub3duRW51bVZhbHVlKGVudW1WYWx1ZSkpCi0gICAgICBy
ZXR1cm4gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FOwotCi0gICAgcmV0dXJuIHZhbGlk
YXRvci52YWxpZGF0aW9uRXJyb3IuVU5LTk9XTl9FTlVNX1ZBTFVFOwotICB9OwotCi0gIGZ1bmN0
aW9uIFVzYkVuZHBvaW50SW5mbyh2YWx1ZXMpIHsKLSAgICB0aGlzLmluaXREZWZhdWx0c18oKTsK
LSAgICB0aGlzLmluaXRGaWVsZHNfKHZhbHVlcyk7Ci0gIH0KLQotCi0gIFVzYkVuZHBvaW50SW5m
by5wcm90b3R5cGUuaW5pdERlZmF1bHRzXyA9IGZ1bmN0aW9uKCkgewotICAgIHRoaXMuZW5kcG9p
bnROdW1iZXIgPSAwOwotICAgIHRoaXMucG9sbGluZ0ludGVydmFsID0gMDsKLSAgICB0aGlzLmRp
cmVjdGlvbiA9IDA7Ci0gICAgdGhpcy50eXBlID0gMDsKLSAgICB0aGlzLnBhY2tldFNpemUgPSAw
OwotICAgIHRoaXMuc3luY2hyb25pemF0aW9uVHlwZSA9IDA7Ci0gICAgdGhpcy51c2FnZVR5cGUg
PSAwOwotICAgIHRoaXMuZXh0cmFEYXRhID0gbnVsbDsKLSAgfTsKLSAgVXNiRW5kcG9pbnRJbmZv
LnByb3RvdHlwZS5pbml0RmllbGRzXyA9IGZ1bmN0aW9uKGZpZWxkcykgewotICAgIGZvcih2YXIg
ZmllbGQgaW4gZmllbGRzKSB7Ci0gICAgICAgIGlmICh0aGlzLmhhc093blByb3BlcnR5KGZpZWxk
KSkKLSAgICAgICAgICB0aGlzW2ZpZWxkXSA9IGZpZWxkc1tmaWVsZF07Ci0gICAgfQotICB9Owot
Ci0gIFVzYkVuZHBvaW50SW5mby52YWxpZGF0ZSA9IGZ1bmN0aW9uKG1lc3NhZ2VWYWxpZGF0b3Is
IG9mZnNldCkgewotICAgIHZhciBlcnI7Ci0gICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxp
ZGF0ZVN0cnVjdEhlYWRlcihvZmZzZXQsIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplKTsKLSAgICBp
ZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCi0gICAgICAgIHJldHVy
biBlcnI7Ci0KLSAgICB2YXIga1ZlcnNpb25TaXplcyA9IFsKLSAgICAgIHt2ZXJzaW9uOiAwLCBu
dW1CeXRlczogNDB9Ci0gICAgXTsKLSAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRl
U3RydWN0VmVyc2lvbihvZmZzZXQsIGtWZXJzaW9uU2l6ZXMpOwotICAgIGlmIChlcnIgIT09IHZh
bGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKLSAgICAgICAgcmV0dXJuIGVycjsKLQotCi0K
LSAgICAvLyB2YWxpZGF0ZSBVc2JFbmRwb2ludEluZm8uZGlyZWN0aW9uCi0gICAgZXJyID0gbWVz
c2FnZVZhbGlkYXRvci52YWxpZGF0ZUVudW0ob2Zmc2V0ICsgY29kZWMua1N0cnVjdEhlYWRlclNp
emUgKyA0LCBVc2JUcmFuc2ZlckRpcmVjdGlvbik7Ci0gICAgaWYgKGVyciAhPT0gdmFsaWRhdG9y
LnZhbGlkYXRpb25FcnJvci5OT05FKQotICAgICAgICByZXR1cm4gZXJyOwotCi0KLSAgICAvLyB2
YWxpZGF0ZSBVc2JFbmRwb2ludEluZm8udHlwZQotICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3Iu
dmFsaWRhdGVFbnVtKG9mZnNldCArIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgOCwgVXNiVHJh
bnNmZXJUeXBlKTsKLSAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5P
TkUpCi0gICAgICAgIHJldHVybiBlcnI7Ci0KLQotCi0gICAgLy8gdmFsaWRhdGUgVXNiRW5kcG9p
bnRJbmZvLnN5bmNocm9uaXphdGlvblR5cGUKLSAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZh
bGlkYXRlRW51bShvZmZzZXQgKyBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDE2LCBVc2JTeW5j
aHJvbml6YXRpb25UeXBlKTsKLSAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVy
cm9yLk5PTkUpCi0gICAgICAgIHJldHVybiBlcnI7Ci0KLQotICAgIC8vIHZhbGlkYXRlIFVzYkVu
ZHBvaW50SW5mby51c2FnZVR5cGUKLSAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRl
RW51bShvZmZzZXQgKyBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDIwLCBVc2JVc2FnZVR5cGUp
OwotICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKLSAgICAg
ICAgcmV0dXJuIGVycjsKLQotCi0KLSAgICAvLyB2YWxpZGF0ZSBVc2JFbmRwb2ludEluZm8uZXh0
cmFEYXRhCi0gICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZUFycmF5UG9pbnRlcihv
ZmZzZXQgKyBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDI0LCAxLCBjb2RlYy5VaW50OCwgZmFs
c2UsIFswXSwgMCk7Ci0gICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5O
T05FKQotICAgICAgICByZXR1cm4gZXJyOwotCi0gICAgcmV0dXJuIHZhbGlkYXRvci52YWxpZGF0
aW9uRXJyb3IuTk9ORTsKLSAgfTsKLQotICBVc2JFbmRwb2ludEluZm8uZW5jb2RlZFNpemUgPSBj
b2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDMyOwotCi0gIFVzYkVuZHBvaW50SW5mby5kZWNvZGUg
PSBmdW5jdGlvbihkZWNvZGVyKSB7Ci0gICAgdmFyIHBhY2tlZDsKLSAgICB2YXIgdmFsID0gbmV3
IFVzYkVuZHBvaW50SW5mbygpOwotICAgIHZhciBudW1iZXJPZkJ5dGVzID0gZGVjb2Rlci5yZWFk
VWludDMyKCk7Ci0gICAgdmFyIHZlcnNpb24gPSBkZWNvZGVyLnJlYWRVaW50MzIoKTsKLSAgICB2
YWwuZW5kcG9pbnROdW1iZXIgPSBkZWNvZGVyLmRlY29kZVN0cnVjdChjb2RlYy5VaW50OCk7Ci0g
ICAgdmFsLnBvbGxpbmdJbnRlcnZhbCA9IGRlY29kZXIuZGVjb2RlU3RydWN0KGNvZGVjLlVpbnQ4
KTsKLSAgICBkZWNvZGVyLnNraXAoMSk7Ci0gICAgZGVjb2Rlci5za2lwKDEpOwotICAgIHZhbC5k
aXJlY3Rpb24gPSBkZWNvZGVyLmRlY29kZVN0cnVjdChjb2RlYy5JbnQzMik7Ci0gICAgdmFsLnR5
cGUgPSBkZWNvZGVyLmRlY29kZVN0cnVjdChjb2RlYy5JbnQzMik7Ci0gICAgdmFsLnBhY2tldFNp
emUgPSBkZWNvZGVyLmRlY29kZVN0cnVjdChjb2RlYy5VaW50MzIpOwotICAgIHZhbC5zeW5jaHJv
bml6YXRpb25UeXBlID0gZGVjb2Rlci5kZWNvZGVTdHJ1Y3QoY29kZWMuSW50MzIpOwotICAgIHZh
bC51c2FnZVR5cGUgPSBkZWNvZGVyLmRlY29kZVN0cnVjdChjb2RlYy5JbnQzMik7Ci0gICAgdmFs
LmV4dHJhRGF0YSA9IGRlY29kZXIuZGVjb2RlQXJyYXlQb2ludGVyKGNvZGVjLlVpbnQ4KTsKLSAg
ICByZXR1cm4gdmFsOwotICB9OwotCi0gIFVzYkVuZHBvaW50SW5mby5lbmNvZGUgPSBmdW5jdGlv
bihlbmNvZGVyLCB2YWwpIHsKLSAgICB2YXIgcGFja2VkOwotICAgIGVuY29kZXIud3JpdGVVaW50
MzIoVXNiRW5kcG9pbnRJbmZvLmVuY29kZWRTaXplKTsKLSAgICBlbmNvZGVyLndyaXRlVWludDMy
KDApOwotICAgIGVuY29kZXIuZW5jb2RlU3RydWN0KGNvZGVjLlVpbnQ4LCB2YWwuZW5kcG9pbnRO
dW1iZXIpOwotICAgIGVuY29kZXIuZW5jb2RlU3RydWN0KGNvZGVjLlVpbnQ4LCB2YWwucG9sbGlu
Z0ludGVydmFsKTsKLSAgICBlbmNvZGVyLnNraXAoMSk7Ci0gICAgZW5jb2Rlci5za2lwKDEpOwot
ICAgIGVuY29kZXIuZW5jb2RlU3RydWN0KGNvZGVjLkludDMyLCB2YWwuZGlyZWN0aW9uKTsKLSAg
ICBlbmNvZGVyLmVuY29kZVN0cnVjdChjb2RlYy5JbnQzMiwgdmFsLnR5cGUpOwotICAgIGVuY29k
ZXIuZW5jb2RlU3RydWN0KGNvZGVjLlVpbnQzMiwgdmFsLnBhY2tldFNpemUpOwotICAgIGVuY29k
ZXIuZW5jb2RlU3RydWN0KGNvZGVjLkludDMyLCB2YWwuc3luY2hyb25pemF0aW9uVHlwZSk7Ci0g
ICAgZW5jb2Rlci5lbmNvZGVTdHJ1Y3QoY29kZWMuSW50MzIsIHZhbC51c2FnZVR5cGUpOwotICAg
IGVuY29kZXIuZW5jb2RlQXJyYXlQb2ludGVyKGNvZGVjLlVpbnQ4LCB2YWwuZXh0cmFEYXRhKTsK
LSAgfTsKLSAgZnVuY3Rpb24gVXNiQWx0ZXJuYXRlSW50ZXJmYWNlSW5mbyh2YWx1ZXMpIHsKLSAg
ICB0aGlzLmluaXREZWZhdWx0c18oKTsKLSAgICB0aGlzLmluaXRGaWVsZHNfKHZhbHVlcyk7Ci0g
IH0KLQotCi0gIFVzYkFsdGVybmF0ZUludGVyZmFjZUluZm8ucHJvdG90eXBlLmluaXREZWZhdWx0
c18gPSBmdW5jdGlvbigpIHsKLSAgICB0aGlzLmFsdGVybmF0ZVNldHRpbmcgPSAwOwotICAgIHRo
aXMuY2xhc3NDb2RlID0gMDsKLSAgICB0aGlzLnN1YmNsYXNzQ29kZSA9IDA7Ci0gICAgdGhpcy5w
cm90b2NvbENvZGUgPSAwOwotICAgIHRoaXMuaW50ZXJmYWNlTmFtZSA9IG51bGw7Ci0gICAgdGhp
cy5lbmRwb2ludHMgPSBudWxsOwotICAgIHRoaXMuZXh0cmFEYXRhID0gbnVsbDsKLSAgfTsKLSAg
VXNiQWx0ZXJuYXRlSW50ZXJmYWNlSW5mby5wcm90b3R5cGUuaW5pdEZpZWxkc18gPSBmdW5jdGlv
bihmaWVsZHMpIHsKLSAgICBmb3IodmFyIGZpZWxkIGluIGZpZWxkcykgewotICAgICAgICBpZiAo
dGhpcy5oYXNPd25Qcm9wZXJ0eShmaWVsZCkpCi0gICAgICAgICAgdGhpc1tmaWVsZF0gPSBmaWVs
ZHNbZmllbGRdOwotICAgIH0KLSAgfTsKLQotICBVc2JBbHRlcm5hdGVJbnRlcmZhY2VJbmZvLnZh
bGlkYXRlID0gZnVuY3Rpb24obWVzc2FnZVZhbGlkYXRvciwgb2Zmc2V0KSB7Ci0gICAgdmFyIGVy
cjsKLSAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0SGVhZGVyKG9mZnNl
dCwgY29kZWMua1N0cnVjdEhlYWRlclNpemUpOwotICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52
YWxpZGF0aW9uRXJyb3IuTk9ORSkKLSAgICAgICAgcmV0dXJuIGVycjsKLQotICAgIHZhciBrVmVy
c2lvblNpemVzID0gWwotICAgICAge3ZlcnNpb246IDAsIG51bUJ5dGVzOiA0MH0KLSAgICBdOwot
ICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RWZXJzaW9uKG9mZnNldCwg
a1ZlcnNpb25TaXplcyk7Ci0gICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJv
ci5OT05FKQotICAgICAgICByZXR1cm4gZXJyOwotCi0KLQotCi0KLQotICAgIC8vIHZhbGlkYXRl
IFVzYkFsdGVybmF0ZUludGVyZmFjZUluZm8uaW50ZXJmYWNlTmFtZQotICAgIGVyciA9IG1lc3Nh
Z2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RQb2ludGVyKG9mZnNldCArIGNvZGVjLmtTdHJ1Y3RI
ZWFkZXJTaXplICsgOCwgc3RyaW5nMTYkLlN0cmluZzE2LCB0cnVlKTsKLSAgICBpZiAoZXJyICE9
PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCi0gICAgICAgIHJldHVybiBlcnI7Ci0K
LQotICAgIC8vIHZhbGlkYXRlIFVzYkFsdGVybmF0ZUludGVyZmFjZUluZm8uZW5kcG9pbnRzCi0g
ICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZUFycmF5UG9pbnRlcihvZmZzZXQgKyBj
b2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDE2LCA4LCBuZXcgY29kZWMuUG9pbnRlclRvKFVzYkVu
ZHBvaW50SW5mbyksIGZhbHNlLCBbMF0sIDApOwotICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52
YWxpZGF0aW9uRXJyb3IuTk9ORSkKLSAgICAgICAgcmV0dXJuIGVycjsKLQotCi0gICAgLy8gdmFs
aWRhdGUgVXNiQWx0ZXJuYXRlSW50ZXJmYWNlSW5mby5leHRyYURhdGEKLSAgICBlcnIgPSBtZXNz
YWdlVmFsaWRhdG9yLnZhbGlkYXRlQXJyYXlQb2ludGVyKG9mZnNldCArIGNvZGVjLmtTdHJ1Y3RI
ZWFkZXJTaXplICsgMjQsIDEsIGNvZGVjLlVpbnQ4LCBmYWxzZSwgWzBdLCAwKTsKLSAgICBpZiAo
ZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCi0gICAgICAgIHJldHVybiBl
cnI7Ci0KLSAgICByZXR1cm4gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FOwotICB9Owot
Ci0gIFVzYkFsdGVybmF0ZUludGVyZmFjZUluZm8uZW5jb2RlZFNpemUgPSBjb2RlYy5rU3RydWN0
SGVhZGVyU2l6ZSArIDMyOwotCi0gIFVzYkFsdGVybmF0ZUludGVyZmFjZUluZm8uZGVjb2RlID0g
ZnVuY3Rpb24oZGVjb2RlcikgewotICAgIHZhciBwYWNrZWQ7Ci0gICAgdmFyIHZhbCA9IG5ldyBV
c2JBbHRlcm5hdGVJbnRlcmZhY2VJbmZvKCk7Ci0gICAgdmFyIG51bWJlck9mQnl0ZXMgPSBkZWNv
ZGVyLnJlYWRVaW50MzIoKTsKLSAgICB2YXIgdmVyc2lvbiA9IGRlY29kZXIucmVhZFVpbnQzMigp
OwotICAgIHZhbC5hbHRlcm5hdGVTZXR0aW5nID0gZGVjb2Rlci5kZWNvZGVTdHJ1Y3QoY29kZWMu
VWludDgpOwotICAgIHZhbC5jbGFzc0NvZGUgPSBkZWNvZGVyLmRlY29kZVN0cnVjdChjb2RlYy5V
aW50OCk7Ci0gICAgdmFsLnN1YmNsYXNzQ29kZSA9IGRlY29kZXIuZGVjb2RlU3RydWN0KGNvZGVj
LlVpbnQ4KTsKLSAgICB2YWwucHJvdG9jb2xDb2RlID0gZGVjb2Rlci5kZWNvZGVTdHJ1Y3QoY29k
ZWMuVWludDgpOwotICAgIGRlY29kZXIuc2tpcCgxKTsKLSAgICBkZWNvZGVyLnNraXAoMSk7Ci0g
ICAgZGVjb2Rlci5za2lwKDEpOwotICAgIGRlY29kZXIuc2tpcCgxKTsKLSAgICB2YWwuaW50ZXJm
YWNlTmFtZSA9IGRlY29kZXIuZGVjb2RlU3RydWN0UG9pbnRlcihzdHJpbmcxNiQuU3RyaW5nMTYp
OwotICAgIHZhbC5lbmRwb2ludHMgPSBkZWNvZGVyLmRlY29kZUFycmF5UG9pbnRlcihuZXcgY29k
ZWMuUG9pbnRlclRvKFVzYkVuZHBvaW50SW5mbykpOwotICAgIHZhbC5leHRyYURhdGEgPSBkZWNv
ZGVyLmRlY29kZUFycmF5UG9pbnRlcihjb2RlYy5VaW50OCk7Ci0gICAgcmV0dXJuIHZhbDsKLSAg
fTsKLQotICBVc2JBbHRlcm5hdGVJbnRlcmZhY2VJbmZvLmVuY29kZSA9IGZ1bmN0aW9uKGVuY29k
ZXIsIHZhbCkgewotICAgIHZhciBwYWNrZWQ7Ci0gICAgZW5jb2Rlci53cml0ZVVpbnQzMihVc2JB
bHRlcm5hdGVJbnRlcmZhY2VJbmZvLmVuY29kZWRTaXplKTsKLSAgICBlbmNvZGVyLndyaXRlVWlu
dDMyKDApOwotICAgIGVuY29kZXIuZW5jb2RlU3RydWN0KGNvZGVjLlVpbnQ4LCB2YWwuYWx0ZXJu
YXRlU2V0dGluZyk7Ci0gICAgZW5jb2Rlci5lbmNvZGVTdHJ1Y3QoY29kZWMuVWludDgsIHZhbC5j
bGFzc0NvZGUpOwotICAgIGVuY29kZXIuZW5jb2RlU3RydWN0KGNvZGVjLlVpbnQ4LCB2YWwuc3Vi
Y2xhc3NDb2RlKTsKLSAgICBlbmNvZGVyLmVuY29kZVN0cnVjdChjb2RlYy5VaW50OCwgdmFsLnBy
b3RvY29sQ29kZSk7Ci0gICAgZW5jb2Rlci5za2lwKDEpOwotICAgIGVuY29kZXIuc2tpcCgxKTsK
LSAgICBlbmNvZGVyLnNraXAoMSk7Ci0gICAgZW5jb2Rlci5za2lwKDEpOwotICAgIGVuY29kZXIu
ZW5jb2RlU3RydWN0UG9pbnRlcihzdHJpbmcxNiQuU3RyaW5nMTYsIHZhbC5pbnRlcmZhY2VOYW1l
KTsKLSAgICBlbmNvZGVyLmVuY29kZUFycmF5UG9pbnRlcihuZXcgY29kZWMuUG9pbnRlclRvKFVz
YkVuZHBvaW50SW5mbyksIHZhbC5lbmRwb2ludHMpOwotICAgIGVuY29kZXIuZW5jb2RlQXJyYXlQ
b2ludGVyKGNvZGVjLlVpbnQ4LCB2YWwuZXh0cmFEYXRhKTsKLSAgfTsKLSAgZnVuY3Rpb24gVXNi
SW50ZXJmYWNlSW5mbyh2YWx1ZXMpIHsKLSAgICB0aGlzLmluaXREZWZhdWx0c18oKTsKLSAgICB0
aGlzLmluaXRGaWVsZHNfKHZhbHVlcyk7Ci0gIH0KLQotCi0gIFVzYkludGVyZmFjZUluZm8ucHJv
dG90eXBlLmluaXREZWZhdWx0c18gPSBmdW5jdGlvbigpIHsKLSAgICB0aGlzLmludGVyZmFjZU51
bWJlciA9IDA7Ci0gICAgdGhpcy5hbHRlcm5hdGVzID0gbnVsbDsKLSAgfTsKLSAgVXNiSW50ZXJm
YWNlSW5mby5wcm90b3R5cGUuaW5pdEZpZWxkc18gPSBmdW5jdGlvbihmaWVsZHMpIHsKLSAgICBm
b3IodmFyIGZpZWxkIGluIGZpZWxkcykgewotICAgICAgICBpZiAodGhpcy5oYXNPd25Qcm9wZXJ0
eShmaWVsZCkpCi0gICAgICAgICAgdGhpc1tmaWVsZF0gPSBmaWVsZHNbZmllbGRdOwotICAgIH0K
LSAgfTsKLQotICBVc2JJbnRlcmZhY2VJbmZvLnZhbGlkYXRlID0gZnVuY3Rpb24obWVzc2FnZVZh
bGlkYXRvciwgb2Zmc2V0KSB7Ci0gICAgdmFyIGVycjsKLSAgICBlcnIgPSBtZXNzYWdlVmFsaWRh
dG9yLnZhbGlkYXRlU3RydWN0SGVhZGVyKG9mZnNldCwgY29kZWMua1N0cnVjdEhlYWRlclNpemUp
OwotICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKLSAgICAg
ICAgcmV0dXJuIGVycjsKLQotICAgIHZhciBrVmVyc2lvblNpemVzID0gWwotICAgICAge3ZlcnNp
b246IDAsIG51bUJ5dGVzOiAyNH0KLSAgICBdOwotICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3Iu
dmFsaWRhdGVTdHJ1Y3RWZXJzaW9uKG9mZnNldCwga1ZlcnNpb25TaXplcyk7Ci0gICAgaWYgKGVy
ciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQotICAgICAgICByZXR1cm4gZXJy
OwotCi0KLQotICAgIC8vIHZhbGlkYXRlIFVzYkludGVyZmFjZUluZm8uYWx0ZXJuYXRlcwotICAg
IGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVBcnJheVBvaW50ZXIob2Zmc2V0ICsgY29k
ZWMua1N0cnVjdEhlYWRlclNpemUgKyA4LCA4LCBuZXcgY29kZWMuUG9pbnRlclRvKFVzYkFsdGVy
bmF0ZUludGVyZmFjZUluZm8pLCBmYWxzZSwgWzBdLCAwKTsKLSAgICBpZiAoZXJyICE9PSB2YWxp
ZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCi0gICAgICAgIHJldHVybiBlcnI7Ci0KLSAgICBy
ZXR1cm4gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FOwotICB9OwotCi0gIFVzYkludGVy
ZmFjZUluZm8uZW5jb2RlZFNpemUgPSBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDE2OwotCi0g
IFVzYkludGVyZmFjZUluZm8uZGVjb2RlID0gZnVuY3Rpb24oZGVjb2RlcikgewotICAgIHZhciBw
YWNrZWQ7Ci0gICAgdmFyIHZhbCA9IG5ldyBVc2JJbnRlcmZhY2VJbmZvKCk7Ci0gICAgdmFyIG51
bWJlck9mQnl0ZXMgPSBkZWNvZGVyLnJlYWRVaW50MzIoKTsKLSAgICB2YXIgdmVyc2lvbiA9IGRl
Y29kZXIucmVhZFVpbnQzMigpOwotICAgIHZhbC5pbnRlcmZhY2VOdW1iZXIgPSBkZWNvZGVyLmRl
Y29kZVN0cnVjdChjb2RlYy5VaW50OCk7Ci0gICAgZGVjb2Rlci5za2lwKDEpOwotICAgIGRlY29k
ZXIuc2tpcCgxKTsKLSAgICBkZWNvZGVyLnNraXAoMSk7Ci0gICAgZGVjb2Rlci5za2lwKDEpOwot
ICAgIGRlY29kZXIuc2tpcCgxKTsKLSAgICBkZWNvZGVyLnNraXAoMSk7Ci0gICAgZGVjb2Rlci5z
a2lwKDEpOwotICAgIHZhbC5hbHRlcm5hdGVzID0gZGVjb2Rlci5kZWNvZGVBcnJheVBvaW50ZXIo
bmV3IGNvZGVjLlBvaW50ZXJUbyhVc2JBbHRlcm5hdGVJbnRlcmZhY2VJbmZvKSk7Ci0gICAgcmV0
dXJuIHZhbDsKLSAgfTsKLQotICBVc2JJbnRlcmZhY2VJbmZvLmVuY29kZSA9IGZ1bmN0aW9uKGVu
Y29kZXIsIHZhbCkgewotICAgIHZhciBwYWNrZWQ7Ci0gICAgZW5jb2Rlci53cml0ZVVpbnQzMihV
c2JJbnRlcmZhY2VJbmZvLmVuY29kZWRTaXplKTsKLSAgICBlbmNvZGVyLndyaXRlVWludDMyKDAp
OwotICAgIGVuY29kZXIuZW5jb2RlU3RydWN0KGNvZGVjLlVpbnQ4LCB2YWwuaW50ZXJmYWNlTnVt
YmVyKTsKLSAgICBlbmNvZGVyLnNraXAoMSk7Ci0gICAgZW5jb2Rlci5za2lwKDEpOwotICAgIGVu
Y29kZXIuc2tpcCgxKTsKLSAgICBlbmNvZGVyLnNraXAoMSk7Ci0gICAgZW5jb2Rlci5za2lwKDEp
OwotICAgIGVuY29kZXIuc2tpcCgxKTsKLSAgICBlbmNvZGVyLnNraXAoMSk7Ci0gICAgZW5jb2Rl
ci5lbmNvZGVBcnJheVBvaW50ZXIobmV3IGNvZGVjLlBvaW50ZXJUbyhVc2JBbHRlcm5hdGVJbnRl
cmZhY2VJbmZvKSwgdmFsLmFsdGVybmF0ZXMpOwotICB9OwotICBmdW5jdGlvbiBVc2JDb25maWd1
cmF0aW9uSW5mbyh2YWx1ZXMpIHsKLSAgICB0aGlzLmluaXREZWZhdWx0c18oKTsKLSAgICB0aGlz
LmluaXRGaWVsZHNfKHZhbHVlcyk7Ci0gIH0KLQotCi0gIFVzYkNvbmZpZ3VyYXRpb25JbmZvLnBy
b3RvdHlwZS5pbml0RGVmYXVsdHNfID0gZnVuY3Rpb24oKSB7Ci0gICAgdGhpcy5jb25maWd1cmF0
aW9uVmFsdWUgPSAwOwotICAgIHRoaXMuc2VsZlBvd2VyZWQgPSBmYWxzZTsKLSAgICB0aGlzLnJl
bW90ZVdha2V1cCA9IGZhbHNlOwotICAgIHRoaXMubWF4aW11bVBvd2VyID0gMDsKLSAgICB0aGlz
LmNvbmZpZ3VyYXRpb25OYW1lID0gbnVsbDsKLSAgICB0aGlzLmludGVyZmFjZXMgPSBudWxsOwot
ICAgIHRoaXMuZXh0cmFEYXRhID0gbnVsbDsKLSAgfTsKLSAgVXNiQ29uZmlndXJhdGlvbkluZm8u
cHJvdG90eXBlLmluaXRGaWVsZHNfID0gZnVuY3Rpb24oZmllbGRzKSB7Ci0gICAgZm9yKHZhciBm
aWVsZCBpbiBmaWVsZHMpIHsKLSAgICAgICAgaWYgKHRoaXMuaGFzT3duUHJvcGVydHkoZmllbGQp
KQotICAgICAgICAgIHRoaXNbZmllbGRdID0gZmllbGRzW2ZpZWxkXTsKLSAgICB9Ci0gIH07Ci0K
LSAgVXNiQ29uZmlndXJhdGlvbkluZm8udmFsaWRhdGUgPSBmdW5jdGlvbihtZXNzYWdlVmFsaWRh
dG9yLCBvZmZzZXQpIHsKLSAgICB2YXIgZXJyOwotICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3Iu
dmFsaWRhdGVTdHJ1Y3RIZWFkZXIob2Zmc2V0LCBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSk7Ci0g
ICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQotICAgICAgICBy
ZXR1cm4gZXJyOwotCi0gICAgdmFyIGtWZXJzaW9uU2l6ZXMgPSBbCi0gICAgICB7dmVyc2lvbjog
MCwgbnVtQnl0ZXM6IDQwfQotICAgIF07Ci0gICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxp
ZGF0ZVN0cnVjdFZlcnNpb24ob2Zmc2V0LCBrVmVyc2lvblNpemVzKTsKLSAgICBpZiAoZXJyICE9
PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCi0gICAgICAgIHJldHVybiBlcnI7Ci0K
LQotCi0gICAgLy8gdmFsaWRhdGUgVXNiQ29uZmlndXJhdGlvbkluZm8uY29uZmlndXJhdGlvbk5h
bWUKLSAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0UG9pbnRlcihvZmZz
ZXQgKyBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDgsIHN0cmluZzE2JC5TdHJpbmcxNiwgdHJ1
ZSk7Ci0gICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQotICAg
ICAgICByZXR1cm4gZXJyOwotCi0KLQotCi0KLSAgICAvLyB2YWxpZGF0ZSBVc2JDb25maWd1cmF0
aW9uSW5mby5pbnRlcmZhY2VzCi0gICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZUFy
cmF5UG9pbnRlcihvZmZzZXQgKyBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDE2LCA4LCBuZXcg
Y29kZWMuUG9pbnRlclRvKFVzYkludGVyZmFjZUluZm8pLCBmYWxzZSwgWzBdLCAwKTsKLSAgICBp
ZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCi0gICAgICAgIHJldHVy
biBlcnI7Ci0KLQotICAgIC8vIHZhbGlkYXRlIFVzYkNvbmZpZ3VyYXRpb25JbmZvLmV4dHJhRGF0
YQotICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVBcnJheVBvaW50ZXIob2Zmc2V0
ICsgY29kZWMua1N0cnVjdEhlYWRlclNpemUgKyAyNCwgMSwgY29kZWMuVWludDgsIGZhbHNlLCBb
MF0sIDApOwotICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkK
LSAgICAgICAgcmV0dXJuIGVycjsKLQotICAgIHJldHVybiB2YWxpZGF0b3IudmFsaWRhdGlvbkVy
cm9yLk5PTkU7Ci0gIH07Ci0KLSAgVXNiQ29uZmlndXJhdGlvbkluZm8uZW5jb2RlZFNpemUgPSBj
b2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDMyOwotCi0gIFVzYkNvbmZpZ3VyYXRpb25JbmZvLmRl
Y29kZSA9IGZ1bmN0aW9uKGRlY29kZXIpIHsKLSAgICB2YXIgcGFja2VkOwotICAgIHZhciB2YWwg
PSBuZXcgVXNiQ29uZmlndXJhdGlvbkluZm8oKTsKLSAgICB2YXIgbnVtYmVyT2ZCeXRlcyA9IGRl
Y29kZXIucmVhZFVpbnQzMigpOwotICAgIHZhciB2ZXJzaW9uID0gZGVjb2Rlci5yZWFkVWludDMy
KCk7Ci0gICAgdmFsLmNvbmZpZ3VyYXRpb25WYWx1ZSA9IGRlY29kZXIuZGVjb2RlU3RydWN0KGNv
ZGVjLlVpbnQ4KTsKLSAgICBwYWNrZWQgPSBkZWNvZGVyLnJlYWRVaW50OCgpOwotICAgIHZhbC5z
ZWxmUG93ZXJlZCA9IChwYWNrZWQgPj4gMCkgJiAxID8gdHJ1ZSA6IGZhbHNlOwotICAgIHZhbC5y
ZW1vdGVXYWtldXAgPSAocGFja2VkID4+IDEpICYgMSA/IHRydWUgOiBmYWxzZTsKLSAgICB2YWwu
bWF4aW11bVBvd2VyID0gZGVjb2Rlci5kZWNvZGVTdHJ1Y3QoY29kZWMuVWludDgpOwotICAgIGRl
Y29kZXIuc2tpcCgxKTsKLSAgICBkZWNvZGVyLnNraXAoMSk7Ci0gICAgZGVjb2Rlci5za2lwKDEp
OwotICAgIGRlY29kZXIuc2tpcCgxKTsKLSAgICBkZWNvZGVyLnNraXAoMSk7Ci0gICAgdmFsLmNv
bmZpZ3VyYXRpb25OYW1lID0gZGVjb2Rlci5kZWNvZGVTdHJ1Y3RQb2ludGVyKHN0cmluZzE2JC5T
dHJpbmcxNik7Ci0gICAgdmFsLmludGVyZmFjZXMgPSBkZWNvZGVyLmRlY29kZUFycmF5UG9pbnRl
cihuZXcgY29kZWMuUG9pbnRlclRvKFVzYkludGVyZmFjZUluZm8pKTsKLSAgICB2YWwuZXh0cmFE
YXRhID0gZGVjb2Rlci5kZWNvZGVBcnJheVBvaW50ZXIoY29kZWMuVWludDgpOwotICAgIHJldHVy
biB2YWw7Ci0gIH07Ci0KLSAgVXNiQ29uZmlndXJhdGlvbkluZm8uZW5jb2RlID0gZnVuY3Rpb24o
ZW5jb2RlciwgdmFsKSB7Ci0gICAgdmFyIHBhY2tlZDsKLSAgICBlbmNvZGVyLndyaXRlVWludDMy
KFVzYkNvbmZpZ3VyYXRpb25JbmZvLmVuY29kZWRTaXplKTsKLSAgICBlbmNvZGVyLndyaXRlVWlu
dDMyKDApOwotICAgIGVuY29kZXIuZW5jb2RlU3RydWN0KGNvZGVjLlVpbnQ4LCB2YWwuY29uZmln
dXJhdGlvblZhbHVlKTsKLSAgICBwYWNrZWQgPSAwOwotICAgIHBhY2tlZCB8PSAodmFsLnNlbGZQ
b3dlcmVkICYgMSkgPDwgMAotICAgIHBhY2tlZCB8PSAodmFsLnJlbW90ZVdha2V1cCAmIDEpIDw8
IDEKLSAgICBlbmNvZGVyLndyaXRlVWludDgocGFja2VkKTsKLSAgICBlbmNvZGVyLmVuY29kZVN0
cnVjdChjb2RlYy5VaW50OCwgdmFsLm1heGltdW1Qb3dlcik7Ci0gICAgZW5jb2Rlci5za2lwKDEp
OwotICAgIGVuY29kZXIuc2tpcCgxKTsKLSAgICBlbmNvZGVyLnNraXAoMSk7Ci0gICAgZW5jb2Rl
ci5za2lwKDEpOwotICAgIGVuY29kZXIuc2tpcCgxKTsKLSAgICBlbmNvZGVyLmVuY29kZVN0cnVj
dFBvaW50ZXIoc3RyaW5nMTYkLlN0cmluZzE2LCB2YWwuY29uZmlndXJhdGlvbk5hbWUpOwotICAg
IGVuY29kZXIuZW5jb2RlQXJyYXlQb2ludGVyKG5ldyBjb2RlYy5Qb2ludGVyVG8oVXNiSW50ZXJm
YWNlSW5mbyksIHZhbC5pbnRlcmZhY2VzKTsKLSAgICBlbmNvZGVyLmVuY29kZUFycmF5UG9pbnRl
cihjb2RlYy5VaW50OCwgdmFsLmV4dHJhRGF0YSk7Ci0gIH07Ci0gIGZ1bmN0aW9uIFVzYkRldmlj
ZUluZm8odmFsdWVzKSB7Ci0gICAgdGhpcy5pbml0RGVmYXVsdHNfKCk7Ci0gICAgdGhpcy5pbml0
RmllbGRzXyh2YWx1ZXMpOwotICB9Ci0KLQotICBVc2JEZXZpY2VJbmZvLnByb3RvdHlwZS5pbml0
RGVmYXVsdHNfID0gZnVuY3Rpb24oKSB7Ci0gICAgdGhpcy5ndWlkID0gbnVsbDsKLSAgICB0aGlz
LnVzYlZlcnNpb25NYWpvciA9IDA7Ci0gICAgdGhpcy51c2JWZXJzaW9uTWlub3IgPSAwOwotICAg
IHRoaXMudXNiVmVyc2lvblN1Ym1pbm9yID0gMDsKLSAgICB0aGlzLmNsYXNzQ29kZSA9IDA7Ci0g
ICAgdGhpcy5zdWJjbGFzc0NvZGUgPSAwOwotICAgIHRoaXMucHJvdG9jb2xDb2RlID0gMDsKLSAg
ICB0aGlzLnZlbmRvcklkID0gMDsKLSAgICB0aGlzLmJ1c051bWJlciA9IDA7Ci0gICAgdGhpcy5w
b3J0TnVtYmVyID0gMDsKLSAgICB0aGlzLnByb2R1Y3RJZCA9IDA7Ci0gICAgdGhpcy5kZXZpY2VW
ZXJzaW9uTWFqb3IgPSAwOwotICAgIHRoaXMuZGV2aWNlVmVyc2lvbk1pbm9yID0gMDsKLSAgICB0
aGlzLmRldmljZVZlcnNpb25TdWJtaW5vciA9IDA7Ci0gICAgdGhpcy5hY3RpdmVDb25maWd1cmF0
aW9uID0gMDsKLSAgICB0aGlzLm1hbnVmYWN0dXJlck5hbWUgPSBudWxsOwotICAgIHRoaXMucHJv
ZHVjdE5hbWUgPSBudWxsOwotICAgIHRoaXMuc2VyaWFsTnVtYmVyID0gbnVsbDsKLSAgICB0aGlz
LndlYnVzYkxhbmRpbmdQYWdlID0gbnVsbDsKLSAgICB0aGlzLmNvbmZpZ3VyYXRpb25zID0gbnVs
bDsKLSAgfTsKLSAgVXNiRGV2aWNlSW5mby5wcm90b3R5cGUuaW5pdEZpZWxkc18gPSBmdW5jdGlv
bihmaWVsZHMpIHsKLSAgICBmb3IodmFyIGZpZWxkIGluIGZpZWxkcykgewotICAgICAgICBpZiAo
dGhpcy5oYXNPd25Qcm9wZXJ0eShmaWVsZCkpCi0gICAgICAgICAgdGhpc1tmaWVsZF0gPSBmaWVs
ZHNbZmllbGRdOwotICAgIH0KLSAgfTsKLQotICBVc2JEZXZpY2VJbmZvLnZhbGlkYXRlID0gZnVu
Y3Rpb24obWVzc2FnZVZhbGlkYXRvciwgb2Zmc2V0KSB7Ci0gICAgdmFyIGVycjsKLSAgICBlcnIg
PSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0SGVhZGVyKG9mZnNldCwgY29kZWMua1N0
cnVjdEhlYWRlclNpemUpOwotICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJy
b3IuTk9ORSkKLSAgICAgICAgcmV0dXJuIGVycjsKLQotICAgIHZhciBrVmVyc2lvblNpemVzID0g
WwotICAgICAge3ZlcnNpb246IDAsIG51bUJ5dGVzOiA4MH0KLSAgICBdOwotICAgIGVyciA9IG1l
c3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RWZXJzaW9uKG9mZnNldCwga1ZlcnNpb25TaXpl
cyk7Ci0gICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQotICAg
ICAgICByZXR1cm4gZXJyOwotCi0KLSAgICAvLyB2YWxpZGF0ZSBVc2JEZXZpY2VJbmZvLmd1aWQK
LSAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RyaW5nUG9pbnRlcihvZmZzZXQg
KyBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDAsIGZhbHNlKQotICAgIGlmIChlcnIgIT09IHZh
bGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKLSAgICAgICAgcmV0dXJuIGVycjsKLQotCi0K
LQotCi0KLQotCi0KLQotCi0KLQotCi0KLSAgICAvLyB2YWxpZGF0ZSBVc2JEZXZpY2VJbmZvLm1h
bnVmYWN0dXJlck5hbWUKLSAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0
UG9pbnRlcihvZmZzZXQgKyBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDMyLCBzdHJpbmcxNiQu
U3RyaW5nMTYsIHRydWUpOwotICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJy
b3IuTk9ORSkKLSAgICAgICAgcmV0dXJuIGVycjsKLQotCi0gICAgLy8gdmFsaWRhdGUgVXNiRGV2
aWNlSW5mby5wcm9kdWN0TmFtZQotICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVT
dHJ1Y3RQb2ludGVyKG9mZnNldCArIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgNDAsIHN0cmlu
ZzE2JC5TdHJpbmcxNiwgdHJ1ZSk7Ci0gICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRp
b25FcnJvci5OT05FKQotICAgICAgICByZXR1cm4gZXJyOwotCi0KLSAgICAvLyB2YWxpZGF0ZSBV
c2JEZXZpY2VJbmZvLnNlcmlhbE51bWJlcgotICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFs
aWRhdGVTdHJ1Y3RQb2ludGVyKG9mZnNldCArIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgNDgs
IHN0cmluZzE2JC5TdHJpbmcxNiwgdHJ1ZSk7Ci0gICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZh
bGlkYXRpb25FcnJvci5OT05FKQotICAgICAgICByZXR1cm4gZXJyOwotCi0KLSAgICAvLyB2YWxp
ZGF0ZSBVc2JEZXZpY2VJbmZvLndlYnVzYkxhbmRpbmdQYWdlCi0gICAgZXJyID0gbWVzc2FnZVZh
bGlkYXRvci52YWxpZGF0ZVN0cnVjdFBvaW50ZXIob2Zmc2V0ICsgY29kZWMua1N0cnVjdEhlYWRl
clNpemUgKyA1NiwgdXJsJC5VcmwsIHRydWUpOwotICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52
YWxpZGF0aW9uRXJyb3IuTk9ORSkKLSAgICAgICAgcmV0dXJuIGVycjsKLQotCi0KLSAgICAvLyB2
YWxpZGF0ZSBVc2JEZXZpY2VJbmZvLmNvbmZpZ3VyYXRpb25zCi0gICAgZXJyID0gbWVzc2FnZVZh
bGlkYXRvci52YWxpZGF0ZUFycmF5UG9pbnRlcihvZmZzZXQgKyBjb2RlYy5rU3RydWN0SGVhZGVy
U2l6ZSArIDY0LCA4LCBuZXcgY29kZWMuUG9pbnRlclRvKFVzYkNvbmZpZ3VyYXRpb25JbmZvKSwg
ZmFsc2UsIFswXSwgMCk7Ci0gICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJv
ci5OT05FKQotICAgICAgICByZXR1cm4gZXJyOwotCi0gICAgcmV0dXJuIHZhbGlkYXRvci52YWxp
ZGF0aW9uRXJyb3IuTk9ORTsKLSAgfTsKLQotICBVc2JEZXZpY2VJbmZvLmVuY29kZWRTaXplID0g
Y29kZWMua1N0cnVjdEhlYWRlclNpemUgKyA3MjsKLQotICBVc2JEZXZpY2VJbmZvLmRlY29kZSA9
IGZ1bmN0aW9uKGRlY29kZXIpIHsKLSAgICB2YXIgcGFja2VkOwotICAgIHZhciB2YWwgPSBuZXcg
VXNiRGV2aWNlSW5mbygpOwotICAgIHZhciBudW1iZXJPZkJ5dGVzID0gZGVjb2Rlci5yZWFkVWlu
dDMyKCk7Ci0gICAgdmFyIHZlcnNpb24gPSBkZWNvZGVyLnJlYWRVaW50MzIoKTsKLSAgICB2YWwu
Z3VpZCA9IGRlY29kZXIuZGVjb2RlU3RydWN0KGNvZGVjLlN0cmluZyk7Ci0gICAgdmFsLnVzYlZl
cnNpb25NYWpvciA9IGRlY29kZXIuZGVjb2RlU3RydWN0KGNvZGVjLlVpbnQ4KTsKLSAgICB2YWwu
dXNiVmVyc2lvbk1pbm9yID0gZGVjb2Rlci5kZWNvZGVTdHJ1Y3QoY29kZWMuVWludDgpOwotICAg
IHZhbC51c2JWZXJzaW9uU3VibWlub3IgPSBkZWNvZGVyLmRlY29kZVN0cnVjdChjb2RlYy5VaW50
OCk7Ci0gICAgdmFsLmNsYXNzQ29kZSA9IGRlY29kZXIuZGVjb2RlU3RydWN0KGNvZGVjLlVpbnQ4
KTsKLSAgICB2YWwuc3ViY2xhc3NDb2RlID0gZGVjb2Rlci5kZWNvZGVTdHJ1Y3QoY29kZWMuVWlu
dDgpOwotICAgIHZhbC5wcm90b2NvbENvZGUgPSBkZWNvZGVyLmRlY29kZVN0cnVjdChjb2RlYy5V
aW50OCk7Ci0gICAgdmFsLnZlbmRvcklkID0gZGVjb2Rlci5kZWNvZGVTdHJ1Y3QoY29kZWMuVWlu
dDE2KTsKLSAgICB2YWwuYnVzTnVtYmVyID0gZGVjb2Rlci5kZWNvZGVTdHJ1Y3QoY29kZWMuVWlu
dDMyKTsKLSAgICB2YWwucG9ydE51bWJlciA9IGRlY29kZXIuZGVjb2RlU3RydWN0KGNvZGVjLlVp
bnQzMik7Ci0gICAgdmFsLnByb2R1Y3RJZCA9IGRlY29kZXIuZGVjb2RlU3RydWN0KGNvZGVjLlVp
bnQxNik7Ci0gICAgdmFsLmRldmljZVZlcnNpb25NYWpvciA9IGRlY29kZXIuZGVjb2RlU3RydWN0
KGNvZGVjLlVpbnQ4KTsKLSAgICB2YWwuZGV2aWNlVmVyc2lvbk1pbm9yID0gZGVjb2Rlci5kZWNv
ZGVTdHJ1Y3QoY29kZWMuVWludDgpOwotICAgIHZhbC5kZXZpY2VWZXJzaW9uU3VibWlub3IgPSBk
ZWNvZGVyLmRlY29kZVN0cnVjdChjb2RlYy5VaW50OCk7Ci0gICAgdmFsLmFjdGl2ZUNvbmZpZ3Vy
YXRpb24gPSBkZWNvZGVyLmRlY29kZVN0cnVjdChjb2RlYy5VaW50OCk7Ci0gICAgZGVjb2Rlci5z
a2lwKDEpOwotICAgIGRlY29kZXIuc2tpcCgxKTsKLSAgICB2YWwubWFudWZhY3R1cmVyTmFtZSA9
IGRlY29kZXIuZGVjb2RlU3RydWN0UG9pbnRlcihzdHJpbmcxNiQuU3RyaW5nMTYpOwotICAgIHZh
bC5wcm9kdWN0TmFtZSA9IGRlY29kZXIuZGVjb2RlU3RydWN0UG9pbnRlcihzdHJpbmcxNiQuU3Ry
aW5nMTYpOwotICAgIHZhbC5zZXJpYWxOdW1iZXIgPSBkZWNvZGVyLmRlY29kZVN0cnVjdFBvaW50
ZXIoc3RyaW5nMTYkLlN0cmluZzE2KTsKLSAgICB2YWwud2VidXNiTGFuZGluZ1BhZ2UgPSBkZWNv
ZGVyLmRlY29kZVN0cnVjdFBvaW50ZXIodXJsJC5VcmwpOwotICAgIHZhbC5jb25maWd1cmF0aW9u
cyA9IGRlY29kZXIuZGVjb2RlQXJyYXlQb2ludGVyKG5ldyBjb2RlYy5Qb2ludGVyVG8oVXNiQ29u
ZmlndXJhdGlvbkluZm8pKTsKLSAgICByZXR1cm4gdmFsOwotICB9OwotCi0gIFVzYkRldmljZUlu
Zm8uZW5jb2RlID0gZnVuY3Rpb24oZW5jb2RlciwgdmFsKSB7Ci0gICAgdmFyIHBhY2tlZDsKLSAg
ICBlbmNvZGVyLndyaXRlVWludDMyKFVzYkRldmljZUluZm8uZW5jb2RlZFNpemUpOwotICAgIGVu
Y29kZXIud3JpdGVVaW50MzIoMCk7Ci0gICAgZW5jb2Rlci5lbmNvZGVTdHJ1Y3QoY29kZWMuU3Ry
aW5nLCB2YWwuZ3VpZCk7Ci0gICAgZW5jb2Rlci5lbmNvZGVTdHJ1Y3QoY29kZWMuVWludDgsIHZh
bC51c2JWZXJzaW9uTWFqb3IpOwotICAgIGVuY29kZXIuZW5jb2RlU3RydWN0KGNvZGVjLlVpbnQ4
LCB2YWwudXNiVmVyc2lvbk1pbm9yKTsKLSAgICBlbmNvZGVyLmVuY29kZVN0cnVjdChjb2RlYy5V
aW50OCwgdmFsLnVzYlZlcnNpb25TdWJtaW5vcik7Ci0gICAgZW5jb2Rlci5lbmNvZGVTdHJ1Y3Qo
Y29kZWMuVWludDgsIHZhbC5jbGFzc0NvZGUpOwotICAgIGVuY29kZXIuZW5jb2RlU3RydWN0KGNv
ZGVjLlVpbnQ4LCB2YWwuc3ViY2xhc3NDb2RlKTsKLSAgICBlbmNvZGVyLmVuY29kZVN0cnVjdChj
b2RlYy5VaW50OCwgdmFsLnByb3RvY29sQ29kZSk7Ci0gICAgZW5jb2Rlci5lbmNvZGVTdHJ1Y3Qo
Y29kZWMuVWludDE2LCB2YWwudmVuZG9ySWQpOwotICAgIGVuY29kZXIuZW5jb2RlU3RydWN0KGNv
ZGVjLlVpbnQzMiwgdmFsLmJ1c051bWJlcik7Ci0gICAgZW5jb2Rlci5lbmNvZGVTdHJ1Y3QoY29k
ZWMuVWludDMyLCB2YWwucG9ydE51bWJlcik7Ci0gICAgZW5jb2Rlci5lbmNvZGVTdHJ1Y3QoY29k
ZWMuVWludDE2LCB2YWwucHJvZHVjdElkKTsKLSAgICBlbmNvZGVyLmVuY29kZVN0cnVjdChjb2Rl
Yy5VaW50OCwgdmFsLmRldmljZVZlcnNpb25NYWpvcik7Ci0gICAgZW5jb2Rlci5lbmNvZGVTdHJ1
Y3QoY29kZWMuVWludDgsIHZhbC5kZXZpY2VWZXJzaW9uTWlub3IpOwotICAgIGVuY29kZXIuZW5j
b2RlU3RydWN0KGNvZGVjLlVpbnQ4LCB2YWwuZGV2aWNlVmVyc2lvblN1Ym1pbm9yKTsKLSAgICBl
bmNvZGVyLmVuY29kZVN0cnVjdChjb2RlYy5VaW50OCwgdmFsLmFjdGl2ZUNvbmZpZ3VyYXRpb24p
OwotICAgIGVuY29kZXIuc2tpcCgxKTsKLSAgICBlbmNvZGVyLnNraXAoMSk7Ci0gICAgZW5jb2Rl
ci5lbmNvZGVTdHJ1Y3RQb2ludGVyKHN0cmluZzE2JC5TdHJpbmcxNiwgdmFsLm1hbnVmYWN0dXJl
ck5hbWUpOwotICAgIGVuY29kZXIuZW5jb2RlU3RydWN0UG9pbnRlcihzdHJpbmcxNiQuU3RyaW5n
MTYsIHZhbC5wcm9kdWN0TmFtZSk7Ci0gICAgZW5jb2Rlci5lbmNvZGVTdHJ1Y3RQb2ludGVyKHN0
cmluZzE2JC5TdHJpbmcxNiwgdmFsLnNlcmlhbE51bWJlcik7Ci0gICAgZW5jb2Rlci5lbmNvZGVT
dHJ1Y3RQb2ludGVyKHVybCQuVXJsLCB2YWwud2VidXNiTGFuZGluZ1BhZ2UpOwotICAgIGVuY29k
ZXIuZW5jb2RlQXJyYXlQb2ludGVyKG5ldyBjb2RlYy5Qb2ludGVyVG8oVXNiQ29uZmlndXJhdGlv
bkluZm8pLCB2YWwuY29uZmlndXJhdGlvbnMpOwotICB9OwotICBmdW5jdGlvbiBVc2JDb250cm9s
VHJhbnNmZXJQYXJhbXModmFsdWVzKSB7Ci0gICAgdGhpcy5pbml0RGVmYXVsdHNfKCk7Ci0gICAg
dGhpcy5pbml0RmllbGRzXyh2YWx1ZXMpOwotICB9Ci0KLQotICBVc2JDb250cm9sVHJhbnNmZXJQ
YXJhbXMucHJvdG90eXBlLmluaXREZWZhdWx0c18gPSBmdW5jdGlvbigpIHsKLSAgICB0aGlzLnR5
cGUgPSAwOwotICAgIHRoaXMucmVjaXBpZW50ID0gMDsKLSAgICB0aGlzLnJlcXVlc3QgPSAwOwot
ICAgIHRoaXMudmFsdWUgPSAwOwotICAgIHRoaXMuaW5kZXggPSAwOwotICB9OwotICBVc2JDb250
cm9sVHJhbnNmZXJQYXJhbXMucHJvdG90eXBlLmluaXRGaWVsZHNfID0gZnVuY3Rpb24oZmllbGRz
KSB7Ci0gICAgZm9yKHZhciBmaWVsZCBpbiBmaWVsZHMpIHsKLSAgICAgICAgaWYgKHRoaXMuaGFz
T3duUHJvcGVydHkoZmllbGQpKQotICAgICAgICAgIHRoaXNbZmllbGRdID0gZmllbGRzW2ZpZWxk
XTsKLSAgICB9Ci0gIH07Ci0KLSAgVXNiQ29udHJvbFRyYW5zZmVyUGFyYW1zLnZhbGlkYXRlID0g
ZnVuY3Rpb24obWVzc2FnZVZhbGlkYXRvciwgb2Zmc2V0KSB7Ci0gICAgdmFyIGVycjsKLSAgICBl
cnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0SGVhZGVyKG9mZnNldCwgY29kZWMu
a1N0cnVjdEhlYWRlclNpemUpOwotICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9u
RXJyb3IuTk9ORSkKLSAgICAgICAgcmV0dXJuIGVycjsKLQotICAgIHZhciBrVmVyc2lvblNpemVz
ID0gWwotICAgICAge3ZlcnNpb246IDAsIG51bUJ5dGVzOiAyNH0KLSAgICBdOwotICAgIGVyciA9
IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RWZXJzaW9uKG9mZnNldCwga1ZlcnNpb25T
aXplcyk7Ci0gICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQot
ICAgICAgICByZXR1cm4gZXJyOwotCi0KLSAgICAvLyB2YWxpZGF0ZSBVc2JDb250cm9sVHJhbnNm
ZXJQYXJhbXMudHlwZQotICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVFbnVtKG9m
ZnNldCArIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgMCwgVXNiQ29udHJvbFRyYW5zZmVyVHlw
ZSk7Ci0gICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQotICAg
ICAgICByZXR1cm4gZXJyOwotCi0KLSAgICAvLyB2YWxpZGF0ZSBVc2JDb250cm9sVHJhbnNmZXJQ
YXJhbXMucmVjaXBpZW50Ci0gICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZUVudW0o
b2Zmc2V0ICsgY29kZWMua1N0cnVjdEhlYWRlclNpemUgKyA0LCBVc2JDb250cm9sVHJhbnNmZXJS
ZWNpcGllbnQpOwotICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9O
RSkKLSAgICAgICAgcmV0dXJuIGVycjsKLQotCi0KLQotICAgIHJldHVybiB2YWxpZGF0b3IudmFs
aWRhdGlvbkVycm9yLk5PTkU7Ci0gIH07Ci0KLSAgVXNiQ29udHJvbFRyYW5zZmVyUGFyYW1zLmVu
Y29kZWRTaXplID0gY29kZWMua1N0cnVjdEhlYWRlclNpemUgKyAxNjsKLQotICBVc2JDb250cm9s
VHJhbnNmZXJQYXJhbXMuZGVjb2RlID0gZnVuY3Rpb24oZGVjb2RlcikgewotICAgIHZhciBwYWNr
ZWQ7Ci0gICAgdmFyIHZhbCA9IG5ldyBVc2JDb250cm9sVHJhbnNmZXJQYXJhbXMoKTsKLSAgICB2
YXIgbnVtYmVyT2ZCeXRlcyA9IGRlY29kZXIucmVhZFVpbnQzMigpOwotICAgIHZhciB2ZXJzaW9u
ID0gZGVjb2Rlci5yZWFkVWludDMyKCk7Ci0gICAgdmFsLnR5cGUgPSBkZWNvZGVyLmRlY29kZVN0
cnVjdChjb2RlYy5JbnQzMik7Ci0gICAgdmFsLnJlY2lwaWVudCA9IGRlY29kZXIuZGVjb2RlU3Ry
dWN0KGNvZGVjLkludDMyKTsKLSAgICB2YWwucmVxdWVzdCA9IGRlY29kZXIuZGVjb2RlU3RydWN0
KGNvZGVjLlVpbnQ4KTsKLSAgICBkZWNvZGVyLnNraXAoMSk7Ci0gICAgdmFsLnZhbHVlID0gZGVj
b2Rlci5kZWNvZGVTdHJ1Y3QoY29kZWMuVWludDE2KTsKLSAgICB2YWwuaW5kZXggPSBkZWNvZGVy
LmRlY29kZVN0cnVjdChjb2RlYy5VaW50MTYpOwotICAgIGRlY29kZXIuc2tpcCgxKTsKLSAgICBk
ZWNvZGVyLnNraXAoMSk7Ci0gICAgcmV0dXJuIHZhbDsKLSAgfTsKLQotICBVc2JDb250cm9sVHJh
bnNmZXJQYXJhbXMuZW5jb2RlID0gZnVuY3Rpb24oZW5jb2RlciwgdmFsKSB7Ci0gICAgdmFyIHBh
Y2tlZDsKLSAgICBlbmNvZGVyLndyaXRlVWludDMyKFVzYkNvbnRyb2xUcmFuc2ZlclBhcmFtcy5l
bmNvZGVkU2l6ZSk7Ci0gICAgZW5jb2Rlci53cml0ZVVpbnQzMigwKTsKLSAgICBlbmNvZGVyLmVu
Y29kZVN0cnVjdChjb2RlYy5JbnQzMiwgdmFsLnR5cGUpOwotICAgIGVuY29kZXIuZW5jb2RlU3Ry
dWN0KGNvZGVjLkludDMyLCB2YWwucmVjaXBpZW50KTsKLSAgICBlbmNvZGVyLmVuY29kZVN0cnVj
dChjb2RlYy5VaW50OCwgdmFsLnJlcXVlc3QpOwotICAgIGVuY29kZXIuc2tpcCgxKTsKLSAgICBl
bmNvZGVyLmVuY29kZVN0cnVjdChjb2RlYy5VaW50MTYsIHZhbC52YWx1ZSk7Ci0gICAgZW5jb2Rl
ci5lbmNvZGVTdHJ1Y3QoY29kZWMuVWludDE2LCB2YWwuaW5kZXgpOwotICAgIGVuY29kZXIuc2tp
cCgxKTsKLSAgICBlbmNvZGVyLnNraXAoMSk7Ci0gIH07Ci0gIGZ1bmN0aW9uIFVzYklzb2Nocm9u
b3VzUGFja2V0KHZhbHVlcykgewotICAgIHRoaXMuaW5pdERlZmF1bHRzXygpOwotICAgIHRoaXMu
aW5pdEZpZWxkc18odmFsdWVzKTsKLSAgfQotCi0KLSAgVXNiSXNvY2hyb25vdXNQYWNrZXQucHJv
dG90eXBlLmluaXREZWZhdWx0c18gPSBmdW5jdGlvbigpIHsKLSAgICB0aGlzLmxlbmd0aCA9IDA7
Ci0gICAgdGhpcy50cmFuc2ZlcnJlZExlbmd0aCA9IDA7Ci0gICAgdGhpcy5zdGF0dXMgPSAwOwot
ICB9OwotICBVc2JJc29jaHJvbm91c1BhY2tldC5wcm90b3R5cGUuaW5pdEZpZWxkc18gPSBmdW5j
dGlvbihmaWVsZHMpIHsKLSAgICBmb3IodmFyIGZpZWxkIGluIGZpZWxkcykgewotICAgICAgICBp
ZiAodGhpcy5oYXNPd25Qcm9wZXJ0eShmaWVsZCkpCi0gICAgICAgICAgdGhpc1tmaWVsZF0gPSBm
aWVsZHNbZmllbGRdOwotICAgIH0KLSAgfTsKLQotICBVc2JJc29jaHJvbm91c1BhY2tldC52YWxp
ZGF0ZSA9IGZ1bmN0aW9uKG1lc3NhZ2VWYWxpZGF0b3IsIG9mZnNldCkgewotICAgIHZhciBlcnI7
Ci0gICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdEhlYWRlcihvZmZzZXQs
IGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplKTsKLSAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFs
aWRhdGlvbkVycm9yLk5PTkUpCi0gICAgICAgIHJldHVybiBlcnI7Ci0KLSAgICB2YXIga1ZlcnNp
b25TaXplcyA9IFsKLSAgICAgIHt2ZXJzaW9uOiAwLCBudW1CeXRlczogMjR9Ci0gICAgXTsKLSAg
ICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0VmVyc2lvbihvZmZzZXQsIGtW
ZXJzaW9uU2l6ZXMpOwotICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3Iu
Tk9ORSkKLSAgICAgICAgcmV0dXJuIGVycjsKLQotCi0KLQotICAgIC8vIHZhbGlkYXRlIFVzYklz
b2Nocm9ub3VzUGFja2V0LnN0YXR1cwotICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRh
dGVFbnVtKG9mZnNldCArIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgOCwgVXNiVHJhbnNmZXJT
dGF0dXMpOwotICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkK
LSAgICAgICAgcmV0dXJuIGVycjsKLQotICAgIHJldHVybiB2YWxpZGF0b3IudmFsaWRhdGlvbkVy
cm9yLk5PTkU7Ci0gIH07Ci0KLSAgVXNiSXNvY2hyb25vdXNQYWNrZXQuZW5jb2RlZFNpemUgPSBj
b2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDE2OwotCi0gIFVzYklzb2Nocm9ub3VzUGFja2V0LmRl
Y29kZSA9IGZ1bmN0aW9uKGRlY29kZXIpIHsKLSAgICB2YXIgcGFja2VkOwotICAgIHZhciB2YWwg
PSBuZXcgVXNiSXNvY2hyb25vdXNQYWNrZXQoKTsKLSAgICB2YXIgbnVtYmVyT2ZCeXRlcyA9IGRl
Y29kZXIucmVhZFVpbnQzMigpOwotICAgIHZhciB2ZXJzaW9uID0gZGVjb2Rlci5yZWFkVWludDMy
KCk7Ci0gICAgdmFsLmxlbmd0aCA9IGRlY29kZXIuZGVjb2RlU3RydWN0KGNvZGVjLlVpbnQzMik7
Ci0gICAgdmFsLnRyYW5zZmVycmVkTGVuZ3RoID0gZGVjb2Rlci5kZWNvZGVTdHJ1Y3QoY29kZWMu
VWludDMyKTsKLSAgICB2YWwuc3RhdHVzID0gZGVjb2Rlci5kZWNvZGVTdHJ1Y3QoY29kZWMuSW50
MzIpOwotICAgIGRlY29kZXIuc2tpcCgxKTsKLSAgICBkZWNvZGVyLnNraXAoMSk7Ci0gICAgZGVj
b2Rlci5za2lwKDEpOwotICAgIGRlY29kZXIuc2tpcCgxKTsKLSAgICByZXR1cm4gdmFsOwotICB9
OwotCi0gIFVzYklzb2Nocm9ub3VzUGFja2V0LmVuY29kZSA9IGZ1bmN0aW9uKGVuY29kZXIsIHZh
bCkgewotICAgIHZhciBwYWNrZWQ7Ci0gICAgZW5jb2Rlci53cml0ZVVpbnQzMihVc2JJc29jaHJv
bm91c1BhY2tldC5lbmNvZGVkU2l6ZSk7Ci0gICAgZW5jb2Rlci53cml0ZVVpbnQzMigwKTsKLSAg
ICBlbmNvZGVyLmVuY29kZVN0cnVjdChjb2RlYy5VaW50MzIsIHZhbC5sZW5ndGgpOwotICAgIGVu
Y29kZXIuZW5jb2RlU3RydWN0KGNvZGVjLlVpbnQzMiwgdmFsLnRyYW5zZmVycmVkTGVuZ3RoKTsK
LSAgICBlbmNvZGVyLmVuY29kZVN0cnVjdChjb2RlYy5JbnQzMiwgdmFsLnN0YXR1cyk7Ci0gICAg
ZW5jb2Rlci5za2lwKDEpOwotICAgIGVuY29kZXIuc2tpcCgxKTsKLSAgICBlbmNvZGVyLnNraXAo
MSk7Ci0gICAgZW5jb2Rlci5za2lwKDEpOwotICB9OwotICBmdW5jdGlvbiBVc2JEZXZpY2VfT3Bl
bl9QYXJhbXModmFsdWVzKSB7Ci0gICAgdGhpcy5pbml0RGVmYXVsdHNfKCk7Ci0gICAgdGhpcy5p
bml0RmllbGRzXyh2YWx1ZXMpOwotICB9Ci0KLQotICBVc2JEZXZpY2VfT3Blbl9QYXJhbXMucHJv
dG90eXBlLmluaXREZWZhdWx0c18gPSBmdW5jdGlvbigpIHsKLSAgfTsKLSAgVXNiRGV2aWNlX09w
ZW5fUGFyYW1zLnByb3RvdHlwZS5pbml0RmllbGRzXyA9IGZ1bmN0aW9uKGZpZWxkcykgewotICAg
IGZvcih2YXIgZmllbGQgaW4gZmllbGRzKSB7Ci0gICAgICAgIGlmICh0aGlzLmhhc093blByb3Bl
cnR5KGZpZWxkKSkKLSAgICAgICAgICB0aGlzW2ZpZWxkXSA9IGZpZWxkc1tmaWVsZF07Ci0gICAg
fQotICB9OwotCi0gIFVzYkRldmljZV9PcGVuX1BhcmFtcy52YWxpZGF0ZSA9IGZ1bmN0aW9uKG1l
c3NhZ2VWYWxpZGF0b3IsIG9mZnNldCkgewotICAgIHZhciBlcnI7Ci0gICAgZXJyID0gbWVzc2Fn
ZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdEhlYWRlcihvZmZzZXQsIGNvZGVjLmtTdHJ1Y3RIZWFk
ZXJTaXplKTsKLSAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUp
Ci0gICAgICAgIHJldHVybiBlcnI7Ci0KLSAgICB2YXIga1ZlcnNpb25TaXplcyA9IFsKLSAgICAg
IHt2ZXJzaW9uOiAwLCBudW1CeXRlczogOH0KLSAgICBdOwotICAgIGVyciA9IG1lc3NhZ2VWYWxp
ZGF0b3IudmFsaWRhdGVTdHJ1Y3RWZXJzaW9uKG9mZnNldCwga1ZlcnNpb25TaXplcyk7Ci0gICAg
aWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQotICAgICAgICByZXR1
cm4gZXJyOwotCi0gICAgcmV0dXJuIHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORTsKLSAg
fTsKLQotICBVc2JEZXZpY2VfT3Blbl9QYXJhbXMuZW5jb2RlZFNpemUgPSBjb2RlYy5rU3RydWN0
SGVhZGVyU2l6ZSArIDA7Ci0KLSAgVXNiRGV2aWNlX09wZW5fUGFyYW1zLmRlY29kZSA9IGZ1bmN0
aW9uKGRlY29kZXIpIHsKLSAgICB2YXIgcGFja2VkOwotICAgIHZhciB2YWwgPSBuZXcgVXNiRGV2
aWNlX09wZW5fUGFyYW1zKCk7Ci0gICAgdmFyIG51bWJlck9mQnl0ZXMgPSBkZWNvZGVyLnJlYWRV
aW50MzIoKTsKLSAgICB2YXIgdmVyc2lvbiA9IGRlY29kZXIucmVhZFVpbnQzMigpOwotICAgIHJl
dHVybiB2YWw7Ci0gIH07Ci0KLSAgVXNiRGV2aWNlX09wZW5fUGFyYW1zLmVuY29kZSA9IGZ1bmN0
aW9uKGVuY29kZXIsIHZhbCkgewotICAgIHZhciBwYWNrZWQ7Ci0gICAgZW5jb2Rlci53cml0ZVVp
bnQzMihVc2JEZXZpY2VfT3Blbl9QYXJhbXMuZW5jb2RlZFNpemUpOwotICAgIGVuY29kZXIud3Jp
dGVVaW50MzIoMCk7Ci0gIH07Ci0gIGZ1bmN0aW9uIFVzYkRldmljZV9PcGVuX1Jlc3BvbnNlUGFy
YW1zKHZhbHVlcykgewotICAgIHRoaXMuaW5pdERlZmF1bHRzXygpOwotICAgIHRoaXMuaW5pdEZp
ZWxkc18odmFsdWVzKTsKLSAgfQotCi0KLSAgVXNiRGV2aWNlX09wZW5fUmVzcG9uc2VQYXJhbXMu
cHJvdG90eXBlLmluaXREZWZhdWx0c18gPSBmdW5jdGlvbigpIHsKLSAgICB0aGlzLmVycm9yID0g
MDsKLSAgfTsKLSAgVXNiRGV2aWNlX09wZW5fUmVzcG9uc2VQYXJhbXMucHJvdG90eXBlLmluaXRG
aWVsZHNfID0gZnVuY3Rpb24oZmllbGRzKSB7Ci0gICAgZm9yKHZhciBmaWVsZCBpbiBmaWVsZHMp
IHsKLSAgICAgICAgaWYgKHRoaXMuaGFzT3duUHJvcGVydHkoZmllbGQpKQotICAgICAgICAgIHRo
aXNbZmllbGRdID0gZmllbGRzW2ZpZWxkXTsKLSAgICB9Ci0gIH07Ci0KLSAgVXNiRGV2aWNlX09w
ZW5fUmVzcG9uc2VQYXJhbXMudmFsaWRhdGUgPSBmdW5jdGlvbihtZXNzYWdlVmFsaWRhdG9yLCBv
ZmZzZXQpIHsKLSAgICB2YXIgZXJyOwotICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRh
dGVTdHJ1Y3RIZWFkZXIob2Zmc2V0LCBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSk7Ci0gICAgaWYg
KGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQotICAgICAgICByZXR1cm4g
ZXJyOwotCi0gICAgdmFyIGtWZXJzaW9uU2l6ZXMgPSBbCi0gICAgICB7dmVyc2lvbjogMCwgbnVt
Qnl0ZXM6IDE2fQotICAgIF07Ci0gICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0
cnVjdFZlcnNpb24ob2Zmc2V0LCBrVmVyc2lvblNpemVzKTsKLSAgICBpZiAoZXJyICE9PSB2YWxp
ZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCi0gICAgICAgIHJldHVybiBlcnI7Ci0KLQotICAg
IC8vIHZhbGlkYXRlIFVzYkRldmljZV9PcGVuX1Jlc3BvbnNlUGFyYW1zLmVycm9yCi0gICAgZXJy
ID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZUVudW0ob2Zmc2V0ICsgY29kZWMua1N0cnVjdEhl
YWRlclNpemUgKyAwLCBVc2JPcGVuRGV2aWNlRXJyb3IpOwotICAgIGlmIChlcnIgIT09IHZhbGlk
YXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKLSAgICAgICAgcmV0dXJuIGVycjsKLQotICAgIHJl
dHVybiB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkU7Ci0gIH07Ci0KLSAgVXNiRGV2aWNl
X09wZW5fUmVzcG9uc2VQYXJhbXMuZW5jb2RlZFNpemUgPSBjb2RlYy5rU3RydWN0SGVhZGVyU2l6
ZSArIDg7Ci0KLSAgVXNiRGV2aWNlX09wZW5fUmVzcG9uc2VQYXJhbXMuZGVjb2RlID0gZnVuY3Rp
b24oZGVjb2RlcikgewotICAgIHZhciBwYWNrZWQ7Ci0gICAgdmFyIHZhbCA9IG5ldyBVc2JEZXZp
Y2VfT3Blbl9SZXNwb25zZVBhcmFtcygpOwotICAgIHZhciBudW1iZXJPZkJ5dGVzID0gZGVjb2Rl
ci5yZWFkVWludDMyKCk7Ci0gICAgdmFyIHZlcnNpb24gPSBkZWNvZGVyLnJlYWRVaW50MzIoKTsK
LSAgICB2YWwuZXJyb3IgPSBkZWNvZGVyLmRlY29kZVN0cnVjdChjb2RlYy5JbnQzMik7Ci0gICAg
ZGVjb2Rlci5za2lwKDEpOwotICAgIGRlY29kZXIuc2tpcCgxKTsKLSAgICBkZWNvZGVyLnNraXAo
MSk7Ci0gICAgZGVjb2Rlci5za2lwKDEpOwotICAgIHJldHVybiB2YWw7Ci0gIH07Ci0KLSAgVXNi
RGV2aWNlX09wZW5fUmVzcG9uc2VQYXJhbXMuZW5jb2RlID0gZnVuY3Rpb24oZW5jb2RlciwgdmFs
KSB7Ci0gICAgdmFyIHBhY2tlZDsKLSAgICBlbmNvZGVyLndyaXRlVWludDMyKFVzYkRldmljZV9P
cGVuX1Jlc3BvbnNlUGFyYW1zLmVuY29kZWRTaXplKTsKLSAgICBlbmNvZGVyLndyaXRlVWludDMy
KDApOwotICAgIGVuY29kZXIuZW5jb2RlU3RydWN0KGNvZGVjLkludDMyLCB2YWwuZXJyb3IpOwot
ICAgIGVuY29kZXIuc2tpcCgxKTsKLSAgICBlbmNvZGVyLnNraXAoMSk7Ci0gICAgZW5jb2Rlci5z
a2lwKDEpOwotICAgIGVuY29kZXIuc2tpcCgxKTsKLSAgfTsKLSAgZnVuY3Rpb24gVXNiRGV2aWNl
X0Nsb3NlX1BhcmFtcyh2YWx1ZXMpIHsKLSAgICB0aGlzLmluaXREZWZhdWx0c18oKTsKLSAgICB0
aGlzLmluaXRGaWVsZHNfKHZhbHVlcyk7Ci0gIH0KLQotCi0gIFVzYkRldmljZV9DbG9zZV9QYXJh
bXMucHJvdG90eXBlLmluaXREZWZhdWx0c18gPSBmdW5jdGlvbigpIHsKLSAgfTsKLSAgVXNiRGV2
aWNlX0Nsb3NlX1BhcmFtcy5wcm90b3R5cGUuaW5pdEZpZWxkc18gPSBmdW5jdGlvbihmaWVsZHMp
IHsKLSAgICBmb3IodmFyIGZpZWxkIGluIGZpZWxkcykgewotICAgICAgICBpZiAodGhpcy5oYXNP
d25Qcm9wZXJ0eShmaWVsZCkpCi0gICAgICAgICAgdGhpc1tmaWVsZF0gPSBmaWVsZHNbZmllbGRd
OwotICAgIH0KLSAgfTsKLQotICBVc2JEZXZpY2VfQ2xvc2VfUGFyYW1zLnZhbGlkYXRlID0gZnVu
Y3Rpb24obWVzc2FnZVZhbGlkYXRvciwgb2Zmc2V0KSB7Ci0gICAgdmFyIGVycjsKLSAgICBlcnIg
PSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0SGVhZGVyKG9mZnNldCwgY29kZWMua1N0
cnVjdEhlYWRlclNpemUpOwotICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJy
b3IuTk9ORSkKLSAgICAgICAgcmV0dXJuIGVycjsKLQotICAgIHZhciBrVmVyc2lvblNpemVzID0g
WwotICAgICAge3ZlcnNpb246IDAsIG51bUJ5dGVzOiA4fQotICAgIF07Ci0gICAgZXJyID0gbWVz
c2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdFZlcnNpb24ob2Zmc2V0LCBrVmVyc2lvblNpemVz
KTsKLSAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCi0gICAg
ICAgIHJldHVybiBlcnI7Ci0KLSAgICByZXR1cm4gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5O
T05FOwotICB9OwotCi0gIFVzYkRldmljZV9DbG9zZV9QYXJhbXMuZW5jb2RlZFNpemUgPSBjb2Rl
Yy5rU3RydWN0SGVhZGVyU2l6ZSArIDA7Ci0KLSAgVXNiRGV2aWNlX0Nsb3NlX1BhcmFtcy5kZWNv
ZGUgPSBmdW5jdGlvbihkZWNvZGVyKSB7Ci0gICAgdmFyIHBhY2tlZDsKLSAgICB2YXIgdmFsID0g
bmV3IFVzYkRldmljZV9DbG9zZV9QYXJhbXMoKTsKLSAgICB2YXIgbnVtYmVyT2ZCeXRlcyA9IGRl
Y29kZXIucmVhZFVpbnQzMigpOwotICAgIHZhciB2ZXJzaW9uID0gZGVjb2Rlci5yZWFkVWludDMy
KCk7Ci0gICAgcmV0dXJuIHZhbDsKLSAgfTsKLQotICBVc2JEZXZpY2VfQ2xvc2VfUGFyYW1zLmVu
Y29kZSA9IGZ1bmN0aW9uKGVuY29kZXIsIHZhbCkgewotICAgIHZhciBwYWNrZWQ7Ci0gICAgZW5j
b2Rlci53cml0ZVVpbnQzMihVc2JEZXZpY2VfQ2xvc2VfUGFyYW1zLmVuY29kZWRTaXplKTsKLSAg
ICBlbmNvZGVyLndyaXRlVWludDMyKDApOwotICB9OwotICBmdW5jdGlvbiBVc2JEZXZpY2VfQ2xv
c2VfUmVzcG9uc2VQYXJhbXModmFsdWVzKSB7Ci0gICAgdGhpcy5pbml0RGVmYXVsdHNfKCk7Ci0g
ICAgdGhpcy5pbml0RmllbGRzXyh2YWx1ZXMpOwotICB9Ci0KLQotICBVc2JEZXZpY2VfQ2xvc2Vf
UmVzcG9uc2VQYXJhbXMucHJvdG90eXBlLmluaXREZWZhdWx0c18gPSBmdW5jdGlvbigpIHsKLSAg
fTsKLSAgVXNiRGV2aWNlX0Nsb3NlX1Jlc3BvbnNlUGFyYW1zLnByb3RvdHlwZS5pbml0RmllbGRz
XyA9IGZ1bmN0aW9uKGZpZWxkcykgewotICAgIGZvcih2YXIgZmllbGQgaW4gZmllbGRzKSB7Ci0g
ICAgICAgIGlmICh0aGlzLmhhc093blByb3BlcnR5KGZpZWxkKSkKLSAgICAgICAgICB0aGlzW2Zp
ZWxkXSA9IGZpZWxkc1tmaWVsZF07Ci0gICAgfQotICB9OwotCi0gIFVzYkRldmljZV9DbG9zZV9S
ZXNwb25zZVBhcmFtcy52YWxpZGF0ZSA9IGZ1bmN0aW9uKG1lc3NhZ2VWYWxpZGF0b3IsIG9mZnNl
dCkgewotICAgIHZhciBlcnI7Ci0gICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0
cnVjdEhlYWRlcihvZmZzZXQsIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplKTsKLSAgICBpZiAoZXJy
ICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCi0gICAgICAgIHJldHVybiBlcnI7
Ci0KLSAgICB2YXIga1ZlcnNpb25TaXplcyA9IFsKLSAgICAgIHt2ZXJzaW9uOiAwLCBudW1CeXRl
czogOH0KLSAgICBdOwotICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RW
ZXJzaW9uKG9mZnNldCwga1ZlcnNpb25TaXplcyk7Ci0gICAgaWYgKGVyciAhPT0gdmFsaWRhdG9y
LnZhbGlkYXRpb25FcnJvci5OT05FKQotICAgICAgICByZXR1cm4gZXJyOwotCi0gICAgcmV0dXJu
IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORTsKLSAgfTsKLQotICBVc2JEZXZpY2VfQ2xv
c2VfUmVzcG9uc2VQYXJhbXMuZW5jb2RlZFNpemUgPSBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSAr
IDA7Ci0KLSAgVXNiRGV2aWNlX0Nsb3NlX1Jlc3BvbnNlUGFyYW1zLmRlY29kZSA9IGZ1bmN0aW9u
KGRlY29kZXIpIHsKLSAgICB2YXIgcGFja2VkOwotICAgIHZhciB2YWwgPSBuZXcgVXNiRGV2aWNl
X0Nsb3NlX1Jlc3BvbnNlUGFyYW1zKCk7Ci0gICAgdmFyIG51bWJlck9mQnl0ZXMgPSBkZWNvZGVy
LnJlYWRVaW50MzIoKTsKLSAgICB2YXIgdmVyc2lvbiA9IGRlY29kZXIucmVhZFVpbnQzMigpOwot
ICAgIHJldHVybiB2YWw7Ci0gIH07Ci0KLSAgVXNiRGV2aWNlX0Nsb3NlX1Jlc3BvbnNlUGFyYW1z
LmVuY29kZSA9IGZ1bmN0aW9uKGVuY29kZXIsIHZhbCkgewotICAgIHZhciBwYWNrZWQ7Ci0gICAg
ZW5jb2Rlci53cml0ZVVpbnQzMihVc2JEZXZpY2VfQ2xvc2VfUmVzcG9uc2VQYXJhbXMuZW5jb2Rl
ZFNpemUpOwotICAgIGVuY29kZXIud3JpdGVVaW50MzIoMCk7Ci0gIH07Ci0gIGZ1bmN0aW9uIFVz
YkRldmljZV9TZXRDb25maWd1cmF0aW9uX1BhcmFtcyh2YWx1ZXMpIHsKLSAgICB0aGlzLmluaXRE
ZWZhdWx0c18oKTsKLSAgICB0aGlzLmluaXRGaWVsZHNfKHZhbHVlcyk7Ci0gIH0KLQotCi0gIFVz
YkRldmljZV9TZXRDb25maWd1cmF0aW9uX1BhcmFtcy5wcm90b3R5cGUuaW5pdERlZmF1bHRzXyA9
IGZ1bmN0aW9uKCkgewotICAgIHRoaXMudmFsdWUgPSAwOwotICB9OwotICBVc2JEZXZpY2VfU2V0
Q29uZmlndXJhdGlvbl9QYXJhbXMucHJvdG90eXBlLmluaXRGaWVsZHNfID0gZnVuY3Rpb24oZmll
bGRzKSB7Ci0gICAgZm9yKHZhciBmaWVsZCBpbiBmaWVsZHMpIHsKLSAgICAgICAgaWYgKHRoaXMu
aGFzT3duUHJvcGVydHkoZmllbGQpKQotICAgICAgICAgIHRoaXNbZmllbGRdID0gZmllbGRzW2Zp
ZWxkXTsKLSAgICB9Ci0gIH07Ci0KLSAgVXNiRGV2aWNlX1NldENvbmZpZ3VyYXRpb25fUGFyYW1z
LnZhbGlkYXRlID0gZnVuY3Rpb24obWVzc2FnZVZhbGlkYXRvciwgb2Zmc2V0KSB7Ci0gICAgdmFy
IGVycjsKLSAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0SGVhZGVyKG9m
ZnNldCwgY29kZWMua1N0cnVjdEhlYWRlclNpemUpOwotICAgIGlmIChlcnIgIT09IHZhbGlkYXRv
ci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKLSAgICAgICAgcmV0dXJuIGVycjsKLQotICAgIHZhciBr
VmVyc2lvblNpemVzID0gWwotICAgICAge3ZlcnNpb246IDAsIG51bUJ5dGVzOiAxNn0KLSAgICBd
OwotICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RWZXJzaW9uKG9mZnNl
dCwga1ZlcnNpb25TaXplcyk7Ci0gICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25F
cnJvci5OT05FKQotICAgICAgICByZXR1cm4gZXJyOwotCi0KLSAgICByZXR1cm4gdmFsaWRhdG9y
LnZhbGlkYXRpb25FcnJvci5OT05FOwotICB9OwotCi0gIFVzYkRldmljZV9TZXRDb25maWd1cmF0
aW9uX1BhcmFtcy5lbmNvZGVkU2l6ZSA9IGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgODsKLQot
ICBVc2JEZXZpY2VfU2V0Q29uZmlndXJhdGlvbl9QYXJhbXMuZGVjb2RlID0gZnVuY3Rpb24oZGVj
b2RlcikgewotICAgIHZhciBwYWNrZWQ7Ci0gICAgdmFyIHZhbCA9IG5ldyBVc2JEZXZpY2VfU2V0
Q29uZmlndXJhdGlvbl9QYXJhbXMoKTsKLSAgICB2YXIgbnVtYmVyT2ZCeXRlcyA9IGRlY29kZXIu
cmVhZFVpbnQzMigpOwotICAgIHZhciB2ZXJzaW9uID0gZGVjb2Rlci5yZWFkVWludDMyKCk7Ci0g
ICAgdmFsLnZhbHVlID0gZGVjb2Rlci5kZWNvZGVTdHJ1Y3QoY29kZWMuVWludDgpOwotICAgIGRl
Y29kZXIuc2tpcCgxKTsKLSAgICBkZWNvZGVyLnNraXAoMSk7Ci0gICAgZGVjb2Rlci5za2lwKDEp
OwotICAgIGRlY29kZXIuc2tpcCgxKTsKLSAgICBkZWNvZGVyLnNraXAoMSk7Ci0gICAgZGVjb2Rl
ci5za2lwKDEpOwotICAgIGRlY29kZXIuc2tpcCgxKTsKLSAgICByZXR1cm4gdmFsOwotICB9Owot
Ci0gIFVzYkRldmljZV9TZXRDb25maWd1cmF0aW9uX1BhcmFtcy5lbmNvZGUgPSBmdW5jdGlvbihl
bmNvZGVyLCB2YWwpIHsKLSAgICB2YXIgcGFja2VkOwotICAgIGVuY29kZXIud3JpdGVVaW50MzIo
VXNiRGV2aWNlX1NldENvbmZpZ3VyYXRpb25fUGFyYW1zLmVuY29kZWRTaXplKTsKLSAgICBlbmNv
ZGVyLndyaXRlVWludDMyKDApOwotICAgIGVuY29kZXIuZW5jb2RlU3RydWN0KGNvZGVjLlVpbnQ4
LCB2YWwudmFsdWUpOwotICAgIGVuY29kZXIuc2tpcCgxKTsKLSAgICBlbmNvZGVyLnNraXAoMSk7
Ci0gICAgZW5jb2Rlci5za2lwKDEpOwotICAgIGVuY29kZXIuc2tpcCgxKTsKLSAgICBlbmNvZGVy
LnNraXAoMSk7Ci0gICAgZW5jb2Rlci5za2lwKDEpOwotICAgIGVuY29kZXIuc2tpcCgxKTsKLSAg
fTsKLSAgZnVuY3Rpb24gVXNiRGV2aWNlX1NldENvbmZpZ3VyYXRpb25fUmVzcG9uc2VQYXJhbXMo
dmFsdWVzKSB7Ci0gICAgdGhpcy5pbml0RGVmYXVsdHNfKCk7Ci0gICAgdGhpcy5pbml0RmllbGRz
Xyh2YWx1ZXMpOwotICB9Ci0KLQotICBVc2JEZXZpY2VfU2V0Q29uZmlndXJhdGlvbl9SZXNwb25z
ZVBhcmFtcy5wcm90b3R5cGUuaW5pdERlZmF1bHRzXyA9IGZ1bmN0aW9uKCkgewotICAgIHRoaXMu
c3VjY2VzcyA9IGZhbHNlOwotICB9OwotICBVc2JEZXZpY2VfU2V0Q29uZmlndXJhdGlvbl9SZXNw
b25zZVBhcmFtcy5wcm90b3R5cGUuaW5pdEZpZWxkc18gPSBmdW5jdGlvbihmaWVsZHMpIHsKLSAg
ICBmb3IodmFyIGZpZWxkIGluIGZpZWxkcykgewotICAgICAgICBpZiAodGhpcy5oYXNPd25Qcm9w
ZXJ0eShmaWVsZCkpCi0gICAgICAgICAgdGhpc1tmaWVsZF0gPSBmaWVsZHNbZmllbGRdOwotICAg
IH0KLSAgfTsKLQotICBVc2JEZXZpY2VfU2V0Q29uZmlndXJhdGlvbl9SZXNwb25zZVBhcmFtcy52
YWxpZGF0ZSA9IGZ1bmN0aW9uKG1lc3NhZ2VWYWxpZGF0b3IsIG9mZnNldCkgewotICAgIHZhciBl
cnI7Ci0gICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdEhlYWRlcihvZmZz
ZXQsIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplKTsKLSAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3Iu
dmFsaWRhdGlvbkVycm9yLk5PTkUpCi0gICAgICAgIHJldHVybiBlcnI7Ci0KLSAgICB2YXIga1Zl
cnNpb25TaXplcyA9IFsKLSAgICAgIHt2ZXJzaW9uOiAwLCBudW1CeXRlczogMTZ9Ci0gICAgXTsK
LSAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0VmVyc2lvbihvZmZzZXQs
IGtWZXJzaW9uU2l6ZXMpOwotICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJy
b3IuTk9ORSkKLSAgICAgICAgcmV0dXJuIGVycjsKLQotCi0gICAgcmV0dXJuIHZhbGlkYXRvci52
YWxpZGF0aW9uRXJyb3IuTk9ORTsKLSAgfTsKLQotICBVc2JEZXZpY2VfU2V0Q29uZmlndXJhdGlv
bl9SZXNwb25zZVBhcmFtcy5lbmNvZGVkU2l6ZSA9IGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsg
ODsKLQotICBVc2JEZXZpY2VfU2V0Q29uZmlndXJhdGlvbl9SZXNwb25zZVBhcmFtcy5kZWNvZGUg
PSBmdW5jdGlvbihkZWNvZGVyKSB7Ci0gICAgdmFyIHBhY2tlZDsKLSAgICB2YXIgdmFsID0gbmV3
IFVzYkRldmljZV9TZXRDb25maWd1cmF0aW9uX1Jlc3BvbnNlUGFyYW1zKCk7Ci0gICAgdmFyIG51
bWJlck9mQnl0ZXMgPSBkZWNvZGVyLnJlYWRVaW50MzIoKTsKLSAgICB2YXIgdmVyc2lvbiA9IGRl
Y29kZXIucmVhZFVpbnQzMigpOwotICAgIHBhY2tlZCA9IGRlY29kZXIucmVhZFVpbnQ4KCk7Ci0g
ICAgdmFsLnN1Y2Nlc3MgPSAocGFja2VkID4+IDApICYgMSA/IHRydWUgOiBmYWxzZTsKLSAgICBk
ZWNvZGVyLnNraXAoMSk7Ci0gICAgZGVjb2Rlci5za2lwKDEpOwotICAgIGRlY29kZXIuc2tpcCgx
KTsKLSAgICBkZWNvZGVyLnNraXAoMSk7Ci0gICAgZGVjb2Rlci5za2lwKDEpOwotICAgIGRlY29k
ZXIuc2tpcCgxKTsKLSAgICBkZWNvZGVyLnNraXAoMSk7Ci0gICAgcmV0dXJuIHZhbDsKLSAgfTsK
LQotICBVc2JEZXZpY2VfU2V0Q29uZmlndXJhdGlvbl9SZXNwb25zZVBhcmFtcy5lbmNvZGUgPSBm
dW5jdGlvbihlbmNvZGVyLCB2YWwpIHsKLSAgICB2YXIgcGFja2VkOwotICAgIGVuY29kZXIud3Jp
dGVVaW50MzIoVXNiRGV2aWNlX1NldENvbmZpZ3VyYXRpb25fUmVzcG9uc2VQYXJhbXMuZW5jb2Rl
ZFNpemUpOwotICAgIGVuY29kZXIud3JpdGVVaW50MzIoMCk7Ci0gICAgcGFja2VkID0gMDsKLSAg
ICBwYWNrZWQgfD0gKHZhbC5zdWNjZXNzICYgMSkgPDwgMAotICAgIGVuY29kZXIud3JpdGVVaW50
OChwYWNrZWQpOwotICAgIGVuY29kZXIuc2tpcCgxKTsKLSAgICBlbmNvZGVyLnNraXAoMSk7Ci0g
ICAgZW5jb2Rlci5za2lwKDEpOwotICAgIGVuY29kZXIuc2tpcCgxKTsKLSAgICBlbmNvZGVyLnNr
aXAoMSk7Ci0gICAgZW5jb2Rlci5za2lwKDEpOwotICAgIGVuY29kZXIuc2tpcCgxKTsKLSAgfTsK
LSAgZnVuY3Rpb24gVXNiRGV2aWNlX0NsYWltSW50ZXJmYWNlX1BhcmFtcyh2YWx1ZXMpIHsKLSAg
ICB0aGlzLmluaXREZWZhdWx0c18oKTsKLSAgICB0aGlzLmluaXRGaWVsZHNfKHZhbHVlcyk7Ci0g
IH0KLQotCi0gIFVzYkRldmljZV9DbGFpbUludGVyZmFjZV9QYXJhbXMucHJvdG90eXBlLmluaXRE
ZWZhdWx0c18gPSBmdW5jdGlvbigpIHsKLSAgICB0aGlzLmludGVyZmFjZU51bWJlciA9IDA7Ci0g
IH07Ci0gIFVzYkRldmljZV9DbGFpbUludGVyZmFjZV9QYXJhbXMucHJvdG90eXBlLmluaXRGaWVs
ZHNfID0gZnVuY3Rpb24oZmllbGRzKSB7Ci0gICAgZm9yKHZhciBmaWVsZCBpbiBmaWVsZHMpIHsK
LSAgICAgICAgaWYgKHRoaXMuaGFzT3duUHJvcGVydHkoZmllbGQpKQotICAgICAgICAgIHRoaXNb
ZmllbGRdID0gZmllbGRzW2ZpZWxkXTsKLSAgICB9Ci0gIH07Ci0KLSAgVXNiRGV2aWNlX0NsYWlt
SW50ZXJmYWNlX1BhcmFtcy52YWxpZGF0ZSA9IGZ1bmN0aW9uKG1lc3NhZ2VWYWxpZGF0b3IsIG9m
ZnNldCkgewotICAgIHZhciBlcnI7Ci0gICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0
ZVN0cnVjdEhlYWRlcihvZmZzZXQsIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplKTsKLSAgICBpZiAo
ZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCi0gICAgICAgIHJldHVybiBl
cnI7Ci0KLSAgICB2YXIga1ZlcnNpb25TaXplcyA9IFsKLSAgICAgIHt2ZXJzaW9uOiAwLCBudW1C
eXRlczogMTZ9Ci0gICAgXTsKLSAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3Ry
dWN0VmVyc2lvbihvZmZzZXQsIGtWZXJzaW9uU2l6ZXMpOwotICAgIGlmIChlcnIgIT09IHZhbGlk
YXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKLSAgICAgICAgcmV0dXJuIGVycjsKLQotCi0gICAg
cmV0dXJuIHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORTsKLSAgfTsKLQotICBVc2JEZXZp
Y2VfQ2xhaW1JbnRlcmZhY2VfUGFyYW1zLmVuY29kZWRTaXplID0gY29kZWMua1N0cnVjdEhlYWRl
clNpemUgKyA4OwotCi0gIFVzYkRldmljZV9DbGFpbUludGVyZmFjZV9QYXJhbXMuZGVjb2RlID0g
ZnVuY3Rpb24oZGVjb2RlcikgewotICAgIHZhciBwYWNrZWQ7Ci0gICAgdmFyIHZhbCA9IG5ldyBV
c2JEZXZpY2VfQ2xhaW1JbnRlcmZhY2VfUGFyYW1zKCk7Ci0gICAgdmFyIG51bWJlck9mQnl0ZXMg
PSBkZWNvZGVyLnJlYWRVaW50MzIoKTsKLSAgICB2YXIgdmVyc2lvbiA9IGRlY29kZXIucmVhZFVp
bnQzMigpOwotICAgIHZhbC5pbnRlcmZhY2VOdW1iZXIgPSBkZWNvZGVyLmRlY29kZVN0cnVjdChj
b2RlYy5VaW50OCk7Ci0gICAgZGVjb2Rlci5za2lwKDEpOwotICAgIGRlY29kZXIuc2tpcCgxKTsK
LSAgICBkZWNvZGVyLnNraXAoMSk7Ci0gICAgZGVjb2Rlci5za2lwKDEpOwotICAgIGRlY29kZXIu
c2tpcCgxKTsKLSAgICBkZWNvZGVyLnNraXAoMSk7Ci0gICAgZGVjb2Rlci5za2lwKDEpOwotICAg
IHJldHVybiB2YWw7Ci0gIH07Ci0KLSAgVXNiRGV2aWNlX0NsYWltSW50ZXJmYWNlX1BhcmFtcy5l
bmNvZGUgPSBmdW5jdGlvbihlbmNvZGVyLCB2YWwpIHsKLSAgICB2YXIgcGFja2VkOwotICAgIGVu
Y29kZXIud3JpdGVVaW50MzIoVXNiRGV2aWNlX0NsYWltSW50ZXJmYWNlX1BhcmFtcy5lbmNvZGVk
U2l6ZSk7Ci0gICAgZW5jb2Rlci53cml0ZVVpbnQzMigwKTsKLSAgICBlbmNvZGVyLmVuY29kZVN0
cnVjdChjb2RlYy5VaW50OCwgdmFsLmludGVyZmFjZU51bWJlcik7Ci0gICAgZW5jb2Rlci5za2lw
KDEpOwotICAgIGVuY29kZXIuc2tpcCgxKTsKLSAgICBlbmNvZGVyLnNraXAoMSk7Ci0gICAgZW5j
b2Rlci5za2lwKDEpOwotICAgIGVuY29kZXIuc2tpcCgxKTsKLSAgICBlbmNvZGVyLnNraXAoMSk7
Ci0gICAgZW5jb2Rlci5za2lwKDEpOwotICB9OwotICBmdW5jdGlvbiBVc2JEZXZpY2VfQ2xhaW1J
bnRlcmZhY2VfUmVzcG9uc2VQYXJhbXModmFsdWVzKSB7Ci0gICAgdGhpcy5pbml0RGVmYXVsdHNf
KCk7Ci0gICAgdGhpcy5pbml0RmllbGRzXyh2YWx1ZXMpOwotICB9Ci0KLQotICBVc2JEZXZpY2Vf
Q2xhaW1JbnRlcmZhY2VfUmVzcG9uc2VQYXJhbXMucHJvdG90eXBlLmluaXREZWZhdWx0c18gPSBm
dW5jdGlvbigpIHsKLSAgICB0aGlzLnN1Y2Nlc3MgPSBmYWxzZTsKLSAgfTsKLSAgVXNiRGV2aWNl
X0NsYWltSW50ZXJmYWNlX1Jlc3BvbnNlUGFyYW1zLnByb3RvdHlwZS5pbml0RmllbGRzXyA9IGZ1
bmN0aW9uKGZpZWxkcykgewotICAgIGZvcih2YXIgZmllbGQgaW4gZmllbGRzKSB7Ci0gICAgICAg
IGlmICh0aGlzLmhhc093blByb3BlcnR5KGZpZWxkKSkKLSAgICAgICAgICB0aGlzW2ZpZWxkXSA9
IGZpZWxkc1tmaWVsZF07Ci0gICAgfQotICB9OwotCi0gIFVzYkRldmljZV9DbGFpbUludGVyZmFj
ZV9SZXNwb25zZVBhcmFtcy52YWxpZGF0ZSA9IGZ1bmN0aW9uKG1lc3NhZ2VWYWxpZGF0b3IsIG9m
ZnNldCkgewotICAgIHZhciBlcnI7Ci0gICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0
ZVN0cnVjdEhlYWRlcihvZmZzZXQsIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplKTsKLSAgICBpZiAo
ZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCi0gICAgICAgIHJldHVybiBl
cnI7Ci0KLSAgICB2YXIga1ZlcnNpb25TaXplcyA9IFsKLSAgICAgIHt2ZXJzaW9uOiAwLCBudW1C
eXRlczogMTZ9Ci0gICAgXTsKLSAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3Ry
dWN0VmVyc2lvbihvZmZzZXQsIGtWZXJzaW9uU2l6ZXMpOwotICAgIGlmIChlcnIgIT09IHZhbGlk
YXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKLSAgICAgICAgcmV0dXJuIGVycjsKLQotCi0gICAg
cmV0dXJuIHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORTsKLSAgfTsKLQotICBVc2JEZXZp
Y2VfQ2xhaW1JbnRlcmZhY2VfUmVzcG9uc2VQYXJhbXMuZW5jb2RlZFNpemUgPSBjb2RlYy5rU3Ry
dWN0SGVhZGVyU2l6ZSArIDg7Ci0KLSAgVXNiRGV2aWNlX0NsYWltSW50ZXJmYWNlX1Jlc3BvbnNl
UGFyYW1zLmRlY29kZSA9IGZ1bmN0aW9uKGRlY29kZXIpIHsKLSAgICB2YXIgcGFja2VkOwotICAg
IHZhciB2YWwgPSBuZXcgVXNiRGV2aWNlX0NsYWltSW50ZXJmYWNlX1Jlc3BvbnNlUGFyYW1zKCk7
Ci0gICAgdmFyIG51bWJlck9mQnl0ZXMgPSBkZWNvZGVyLnJlYWRVaW50MzIoKTsKLSAgICB2YXIg
dmVyc2lvbiA9IGRlY29kZXIucmVhZFVpbnQzMigpOwotICAgIHBhY2tlZCA9IGRlY29kZXIucmVh
ZFVpbnQ4KCk7Ci0gICAgdmFsLnN1Y2Nlc3MgPSAocGFja2VkID4+IDApICYgMSA/IHRydWUgOiBm
YWxzZTsKLSAgICBkZWNvZGVyLnNraXAoMSk7Ci0gICAgZGVjb2Rlci5za2lwKDEpOwotICAgIGRl
Y29kZXIuc2tpcCgxKTsKLSAgICBkZWNvZGVyLnNraXAoMSk7Ci0gICAgZGVjb2Rlci5za2lwKDEp
OwotICAgIGRlY29kZXIuc2tpcCgxKTsKLSAgICBkZWNvZGVyLnNraXAoMSk7Ci0gICAgcmV0dXJu
IHZhbDsKLSAgfTsKLQotICBVc2JEZXZpY2VfQ2xhaW1JbnRlcmZhY2VfUmVzcG9uc2VQYXJhbXMu
ZW5jb2RlID0gZnVuY3Rpb24oZW5jb2RlciwgdmFsKSB7Ci0gICAgdmFyIHBhY2tlZDsKLSAgICBl
bmNvZGVyLndyaXRlVWludDMyKFVzYkRldmljZV9DbGFpbUludGVyZmFjZV9SZXNwb25zZVBhcmFt
cy5lbmNvZGVkU2l6ZSk7Ci0gICAgZW5jb2Rlci53cml0ZVVpbnQzMigwKTsKLSAgICBwYWNrZWQg
PSAwOwotICAgIHBhY2tlZCB8PSAodmFsLnN1Y2Nlc3MgJiAxKSA8PCAwCi0gICAgZW5jb2Rlci53
cml0ZVVpbnQ4KHBhY2tlZCk7Ci0gICAgZW5jb2Rlci5za2lwKDEpOwotICAgIGVuY29kZXIuc2tp
cCgxKTsKLSAgICBlbmNvZGVyLnNraXAoMSk7Ci0gICAgZW5jb2Rlci5za2lwKDEpOwotICAgIGVu
Y29kZXIuc2tpcCgxKTsKLSAgICBlbmNvZGVyLnNraXAoMSk7Ci0gICAgZW5jb2Rlci5za2lwKDEp
OwotICB9OwotICBmdW5jdGlvbiBVc2JEZXZpY2VfUmVsZWFzZUludGVyZmFjZV9QYXJhbXModmFs
dWVzKSB7Ci0gICAgdGhpcy5pbml0RGVmYXVsdHNfKCk7Ci0gICAgdGhpcy5pbml0RmllbGRzXyh2
YWx1ZXMpOwotICB9Ci0KLQotICBVc2JEZXZpY2VfUmVsZWFzZUludGVyZmFjZV9QYXJhbXMucHJv
dG90eXBlLmluaXREZWZhdWx0c18gPSBmdW5jdGlvbigpIHsKLSAgICB0aGlzLmludGVyZmFjZU51
bWJlciA9IDA7Ci0gIH07Ci0gIFVzYkRldmljZV9SZWxlYXNlSW50ZXJmYWNlX1BhcmFtcy5wcm90
b3R5cGUuaW5pdEZpZWxkc18gPSBmdW5jdGlvbihmaWVsZHMpIHsKLSAgICBmb3IodmFyIGZpZWxk
IGluIGZpZWxkcykgewotICAgICAgICBpZiAodGhpcy5oYXNPd25Qcm9wZXJ0eShmaWVsZCkpCi0g
ICAgICAgICAgdGhpc1tmaWVsZF0gPSBmaWVsZHNbZmllbGRdOwotICAgIH0KLSAgfTsKLQotICBV
c2JEZXZpY2VfUmVsZWFzZUludGVyZmFjZV9QYXJhbXMudmFsaWRhdGUgPSBmdW5jdGlvbihtZXNz
YWdlVmFsaWRhdG9yLCBvZmZzZXQpIHsKLSAgICB2YXIgZXJyOwotICAgIGVyciA9IG1lc3NhZ2VW
YWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RIZWFkZXIob2Zmc2V0LCBjb2RlYy5rU3RydWN0SGVhZGVy
U2l6ZSk7Ci0gICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQot
ICAgICAgICByZXR1cm4gZXJyOwotCi0gICAgdmFyIGtWZXJzaW9uU2l6ZXMgPSBbCi0gICAgICB7
dmVyc2lvbjogMCwgbnVtQnl0ZXM6IDE2fQotICAgIF07Ci0gICAgZXJyID0gbWVzc2FnZVZhbGlk
YXRvci52YWxpZGF0ZVN0cnVjdFZlcnNpb24ob2Zmc2V0LCBrVmVyc2lvblNpemVzKTsKLSAgICBp
ZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCi0gICAgICAgIHJldHVy
biBlcnI7Ci0KLQotICAgIHJldHVybiB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkU7Ci0g
IH07Ci0KLSAgVXNiRGV2aWNlX1JlbGVhc2VJbnRlcmZhY2VfUGFyYW1zLmVuY29kZWRTaXplID0g
Y29kZWMua1N0cnVjdEhlYWRlclNpemUgKyA4OwotCi0gIFVzYkRldmljZV9SZWxlYXNlSW50ZXJm
YWNlX1BhcmFtcy5kZWNvZGUgPSBmdW5jdGlvbihkZWNvZGVyKSB7Ci0gICAgdmFyIHBhY2tlZDsK
LSAgICB2YXIgdmFsID0gbmV3IFVzYkRldmljZV9SZWxlYXNlSW50ZXJmYWNlX1BhcmFtcygpOwot
ICAgIHZhciBudW1iZXJPZkJ5dGVzID0gZGVjb2Rlci5yZWFkVWludDMyKCk7Ci0gICAgdmFyIHZl
cnNpb24gPSBkZWNvZGVyLnJlYWRVaW50MzIoKTsKLSAgICB2YWwuaW50ZXJmYWNlTnVtYmVyID0g
ZGVjb2Rlci5kZWNvZGVTdHJ1Y3QoY29kZWMuVWludDgpOwotICAgIGRlY29kZXIuc2tpcCgxKTsK
LSAgICBkZWNvZGVyLnNraXAoMSk7Ci0gICAgZGVjb2Rlci5za2lwKDEpOwotICAgIGRlY29kZXIu
c2tpcCgxKTsKLSAgICBkZWNvZGVyLnNraXAoMSk7Ci0gICAgZGVjb2Rlci5za2lwKDEpOwotICAg
IGRlY29kZXIuc2tpcCgxKTsKLSAgICByZXR1cm4gdmFsOwotICB9OwotCi0gIFVzYkRldmljZV9S
ZWxlYXNlSW50ZXJmYWNlX1BhcmFtcy5lbmNvZGUgPSBmdW5jdGlvbihlbmNvZGVyLCB2YWwpIHsK
LSAgICB2YXIgcGFja2VkOwotICAgIGVuY29kZXIud3JpdGVVaW50MzIoVXNiRGV2aWNlX1JlbGVh
c2VJbnRlcmZhY2VfUGFyYW1zLmVuY29kZWRTaXplKTsKLSAgICBlbmNvZGVyLndyaXRlVWludDMy
KDApOwotICAgIGVuY29kZXIuZW5jb2RlU3RydWN0KGNvZGVjLlVpbnQ4LCB2YWwuaW50ZXJmYWNl
TnVtYmVyKTsKLSAgICBlbmNvZGVyLnNraXAoMSk7Ci0gICAgZW5jb2Rlci5za2lwKDEpOwotICAg
IGVuY29kZXIuc2tpcCgxKTsKLSAgICBlbmNvZGVyLnNraXAoMSk7Ci0gICAgZW5jb2Rlci5za2lw
KDEpOwotICAgIGVuY29kZXIuc2tpcCgxKTsKLSAgICBlbmNvZGVyLnNraXAoMSk7Ci0gIH07Ci0g
IGZ1bmN0aW9uIFVzYkRldmljZV9SZWxlYXNlSW50ZXJmYWNlX1Jlc3BvbnNlUGFyYW1zKHZhbHVl
cykgewotICAgIHRoaXMuaW5pdERlZmF1bHRzXygpOwotICAgIHRoaXMuaW5pdEZpZWxkc18odmFs
dWVzKTsKLSAgfQotCi0KLSAgVXNiRGV2aWNlX1JlbGVhc2VJbnRlcmZhY2VfUmVzcG9uc2VQYXJh
bXMucHJvdG90eXBlLmluaXREZWZhdWx0c18gPSBmdW5jdGlvbigpIHsKLSAgICB0aGlzLnN1Y2Nl
c3MgPSBmYWxzZTsKLSAgfTsKLSAgVXNiRGV2aWNlX1JlbGVhc2VJbnRlcmZhY2VfUmVzcG9uc2VQ
YXJhbXMucHJvdG90eXBlLmluaXRGaWVsZHNfID0gZnVuY3Rpb24oZmllbGRzKSB7Ci0gICAgZm9y
KHZhciBmaWVsZCBpbiBmaWVsZHMpIHsKLSAgICAgICAgaWYgKHRoaXMuaGFzT3duUHJvcGVydHko
ZmllbGQpKQotICAgICAgICAgIHRoaXNbZmllbGRdID0gZmllbGRzW2ZpZWxkXTsKLSAgICB9Ci0g
IH07Ci0KLSAgVXNiRGV2aWNlX1JlbGVhc2VJbnRlcmZhY2VfUmVzcG9uc2VQYXJhbXMudmFsaWRh
dGUgPSBmdW5jdGlvbihtZXNzYWdlVmFsaWRhdG9yLCBvZmZzZXQpIHsKLSAgICB2YXIgZXJyOwot
ICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RIZWFkZXIob2Zmc2V0LCBj
b2RlYy5rU3RydWN0SGVhZGVyU2l6ZSk7Ci0gICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlk
YXRpb25FcnJvci5OT05FKQotICAgICAgICByZXR1cm4gZXJyOwotCi0gICAgdmFyIGtWZXJzaW9u
U2l6ZXMgPSBbCi0gICAgICB7dmVyc2lvbjogMCwgbnVtQnl0ZXM6IDE2fQotICAgIF07Ci0gICAg
ZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdFZlcnNpb24ob2Zmc2V0LCBrVmVy
c2lvblNpemVzKTsKLSAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5P
TkUpCi0gICAgICAgIHJldHVybiBlcnI7Ci0KLQotICAgIHJldHVybiB2YWxpZGF0b3IudmFsaWRh
dGlvbkVycm9yLk5PTkU7Ci0gIH07Ci0KLSAgVXNiRGV2aWNlX1JlbGVhc2VJbnRlcmZhY2VfUmVz
cG9uc2VQYXJhbXMuZW5jb2RlZFNpemUgPSBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDg7Ci0K
LSAgVXNiRGV2aWNlX1JlbGVhc2VJbnRlcmZhY2VfUmVzcG9uc2VQYXJhbXMuZGVjb2RlID0gZnVu
Y3Rpb24oZGVjb2RlcikgewotICAgIHZhciBwYWNrZWQ7Ci0gICAgdmFyIHZhbCA9IG5ldyBVc2JE
ZXZpY2VfUmVsZWFzZUludGVyZmFjZV9SZXNwb25zZVBhcmFtcygpOwotICAgIHZhciBudW1iZXJP
ZkJ5dGVzID0gZGVjb2Rlci5yZWFkVWludDMyKCk7Ci0gICAgdmFyIHZlcnNpb24gPSBkZWNvZGVy
LnJlYWRVaW50MzIoKTsKLSAgICBwYWNrZWQgPSBkZWNvZGVyLnJlYWRVaW50OCgpOwotICAgIHZh
bC5zdWNjZXNzID0gKHBhY2tlZCA+PiAwKSAmIDEgPyB0cnVlIDogZmFsc2U7Ci0gICAgZGVjb2Rl
ci5za2lwKDEpOwotICAgIGRlY29kZXIuc2tpcCgxKTsKLSAgICBkZWNvZGVyLnNraXAoMSk7Ci0g
ICAgZGVjb2Rlci5za2lwKDEpOwotICAgIGRlY29kZXIuc2tpcCgxKTsKLSAgICBkZWNvZGVyLnNr
aXAoMSk7Ci0gICAgZGVjb2Rlci5za2lwKDEpOwotICAgIHJldHVybiB2YWw7Ci0gIH07Ci0KLSAg
VXNiRGV2aWNlX1JlbGVhc2VJbnRlcmZhY2VfUmVzcG9uc2VQYXJhbXMuZW5jb2RlID0gZnVuY3Rp
b24oZW5jb2RlciwgdmFsKSB7Ci0gICAgdmFyIHBhY2tlZDsKLSAgICBlbmNvZGVyLndyaXRlVWlu
dDMyKFVzYkRldmljZV9SZWxlYXNlSW50ZXJmYWNlX1Jlc3BvbnNlUGFyYW1zLmVuY29kZWRTaXpl
KTsKLSAgICBlbmNvZGVyLndyaXRlVWludDMyKDApOwotICAgIHBhY2tlZCA9IDA7Ci0gICAgcGFj
a2VkIHw9ICh2YWwuc3VjY2VzcyAmIDEpIDw8IDAKLSAgICBlbmNvZGVyLndyaXRlVWludDgocGFj
a2VkKTsKLSAgICBlbmNvZGVyLnNraXAoMSk7Ci0gICAgZW5jb2Rlci5za2lwKDEpOwotICAgIGVu
Y29kZXIuc2tpcCgxKTsKLSAgICBlbmNvZGVyLnNraXAoMSk7Ci0gICAgZW5jb2Rlci5za2lwKDEp
OwotICAgIGVuY29kZXIuc2tpcCgxKTsKLSAgICBlbmNvZGVyLnNraXAoMSk7Ci0gIH07Ci0gIGZ1
bmN0aW9uIFVzYkRldmljZV9TZXRJbnRlcmZhY2VBbHRlcm5hdGVTZXR0aW5nX1BhcmFtcyh2YWx1
ZXMpIHsKLSAgICB0aGlzLmluaXREZWZhdWx0c18oKTsKLSAgICB0aGlzLmluaXRGaWVsZHNfKHZh
bHVlcyk7Ci0gIH0KLQotCi0gIFVzYkRldmljZV9TZXRJbnRlcmZhY2VBbHRlcm5hdGVTZXR0aW5n
X1BhcmFtcy5wcm90b3R5cGUuaW5pdERlZmF1bHRzXyA9IGZ1bmN0aW9uKCkgewotICAgIHRoaXMu
aW50ZXJmYWNlTnVtYmVyID0gMDsKLSAgICB0aGlzLmFsdGVybmF0ZVNldHRpbmcgPSAwOwotICB9
OwotICBVc2JEZXZpY2VfU2V0SW50ZXJmYWNlQWx0ZXJuYXRlU2V0dGluZ19QYXJhbXMucHJvdG90
eXBlLmluaXRGaWVsZHNfID0gZnVuY3Rpb24oZmllbGRzKSB7Ci0gICAgZm9yKHZhciBmaWVsZCBp
biBmaWVsZHMpIHsKLSAgICAgICAgaWYgKHRoaXMuaGFzT3duUHJvcGVydHkoZmllbGQpKQotICAg
ICAgICAgIHRoaXNbZmllbGRdID0gZmllbGRzW2ZpZWxkXTsKLSAgICB9Ci0gIH07Ci0KLSAgVXNi
RGV2aWNlX1NldEludGVyZmFjZUFsdGVybmF0ZVNldHRpbmdfUGFyYW1zLnZhbGlkYXRlID0gZnVu
Y3Rpb24obWVzc2FnZVZhbGlkYXRvciwgb2Zmc2V0KSB7Ci0gICAgdmFyIGVycjsKLSAgICBlcnIg
PSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0SGVhZGVyKG9mZnNldCwgY29kZWMua1N0
cnVjdEhlYWRlclNpemUpOwotICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJy
b3IuTk9ORSkKLSAgICAgICAgcmV0dXJuIGVycjsKLQotICAgIHZhciBrVmVyc2lvblNpemVzID0g
WwotICAgICAge3ZlcnNpb246IDAsIG51bUJ5dGVzOiAxNn0KLSAgICBdOwotICAgIGVyciA9IG1l
c3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RWZXJzaW9uKG9mZnNldCwga1ZlcnNpb25TaXpl
cyk7Ci0gICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQotICAg
ICAgICByZXR1cm4gZXJyOwotCi0KLQotICAgIHJldHVybiB2YWxpZGF0b3IudmFsaWRhdGlvbkVy
cm9yLk5PTkU7Ci0gIH07Ci0KLSAgVXNiRGV2aWNlX1NldEludGVyZmFjZUFsdGVybmF0ZVNldHRp
bmdfUGFyYW1zLmVuY29kZWRTaXplID0gY29kZWMua1N0cnVjdEhlYWRlclNpemUgKyA4OwotCi0g
IFVzYkRldmljZV9TZXRJbnRlcmZhY2VBbHRlcm5hdGVTZXR0aW5nX1BhcmFtcy5kZWNvZGUgPSBm
dW5jdGlvbihkZWNvZGVyKSB7Ci0gICAgdmFyIHBhY2tlZDsKLSAgICB2YXIgdmFsID0gbmV3IFVz
YkRldmljZV9TZXRJbnRlcmZhY2VBbHRlcm5hdGVTZXR0aW5nX1BhcmFtcygpOwotICAgIHZhciBu
dW1iZXJPZkJ5dGVzID0gZGVjb2Rlci5yZWFkVWludDMyKCk7Ci0gICAgdmFyIHZlcnNpb24gPSBk
ZWNvZGVyLnJlYWRVaW50MzIoKTsKLSAgICB2YWwuaW50ZXJmYWNlTnVtYmVyID0gZGVjb2Rlci5k
ZWNvZGVTdHJ1Y3QoY29kZWMuVWludDgpOwotICAgIHZhbC5hbHRlcm5hdGVTZXR0aW5nID0gZGVj
b2Rlci5kZWNvZGVTdHJ1Y3QoY29kZWMuVWludDgpOwotICAgIGRlY29kZXIuc2tpcCgxKTsKLSAg
ICBkZWNvZGVyLnNraXAoMSk7Ci0gICAgZGVjb2Rlci5za2lwKDEpOwotICAgIGRlY29kZXIuc2tp
cCgxKTsKLSAgICBkZWNvZGVyLnNraXAoMSk7Ci0gICAgZGVjb2Rlci5za2lwKDEpOwotICAgIHJl
dHVybiB2YWw7Ci0gIH07Ci0KLSAgVXNiRGV2aWNlX1NldEludGVyZmFjZUFsdGVybmF0ZVNldHRp
bmdfUGFyYW1zLmVuY29kZSA9IGZ1bmN0aW9uKGVuY29kZXIsIHZhbCkgewotICAgIHZhciBwYWNr
ZWQ7Ci0gICAgZW5jb2Rlci53cml0ZVVpbnQzMihVc2JEZXZpY2VfU2V0SW50ZXJmYWNlQWx0ZXJu
YXRlU2V0dGluZ19QYXJhbXMuZW5jb2RlZFNpemUpOwotICAgIGVuY29kZXIud3JpdGVVaW50MzIo
MCk7Ci0gICAgZW5jb2Rlci5lbmNvZGVTdHJ1Y3QoY29kZWMuVWludDgsIHZhbC5pbnRlcmZhY2VO
dW1iZXIpOwotICAgIGVuY29kZXIuZW5jb2RlU3RydWN0KGNvZGVjLlVpbnQ4LCB2YWwuYWx0ZXJu
YXRlU2V0dGluZyk7Ci0gICAgZW5jb2Rlci5za2lwKDEpOwotICAgIGVuY29kZXIuc2tpcCgxKTsK
LSAgICBlbmNvZGVyLnNraXAoMSk7Ci0gICAgZW5jb2Rlci5za2lwKDEpOwotICAgIGVuY29kZXIu
c2tpcCgxKTsKLSAgICBlbmNvZGVyLnNraXAoMSk7Ci0gIH07Ci0gIGZ1bmN0aW9uIFVzYkRldmlj
ZV9TZXRJbnRlcmZhY2VBbHRlcm5hdGVTZXR0aW5nX1Jlc3BvbnNlUGFyYW1zKHZhbHVlcykgewot
ICAgIHRoaXMuaW5pdERlZmF1bHRzXygpOwotICAgIHRoaXMuaW5pdEZpZWxkc18odmFsdWVzKTsK
LSAgfQotCi0KLSAgVXNiRGV2aWNlX1NldEludGVyZmFjZUFsdGVybmF0ZVNldHRpbmdfUmVzcG9u
c2VQYXJhbXMucHJvdG90eXBlLmluaXREZWZhdWx0c18gPSBmdW5jdGlvbigpIHsKLSAgICB0aGlz
LnN1Y2Nlc3MgPSBmYWxzZTsKLSAgfTsKLSAgVXNiRGV2aWNlX1NldEludGVyZmFjZUFsdGVybmF0
ZVNldHRpbmdfUmVzcG9uc2VQYXJhbXMucHJvdG90eXBlLmluaXRGaWVsZHNfID0gZnVuY3Rpb24o
ZmllbGRzKSB7Ci0gICAgZm9yKHZhciBmaWVsZCBpbiBmaWVsZHMpIHsKLSAgICAgICAgaWYgKHRo
aXMuaGFzT3duUHJvcGVydHkoZmllbGQpKQotICAgICAgICAgIHRoaXNbZmllbGRdID0gZmllbGRz
W2ZpZWxkXTsKLSAgICB9Ci0gIH07Ci0KLSAgVXNiRGV2aWNlX1NldEludGVyZmFjZUFsdGVybmF0
ZVNldHRpbmdfUmVzcG9uc2VQYXJhbXMudmFsaWRhdGUgPSBmdW5jdGlvbihtZXNzYWdlVmFsaWRh
dG9yLCBvZmZzZXQpIHsKLSAgICB2YXIgZXJyOwotICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3Iu
dmFsaWRhdGVTdHJ1Y3RIZWFkZXIob2Zmc2V0LCBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSk7Ci0g
ICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQotICAgICAgICBy
ZXR1cm4gZXJyOwotCi0gICAgdmFyIGtWZXJzaW9uU2l6ZXMgPSBbCi0gICAgICB7dmVyc2lvbjog
MCwgbnVtQnl0ZXM6IDE2fQotICAgIF07Ci0gICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxp
ZGF0ZVN0cnVjdFZlcnNpb24ob2Zmc2V0LCBrVmVyc2lvblNpemVzKTsKLSAgICBpZiAoZXJyICE9
PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCi0gICAgICAgIHJldHVybiBlcnI7Ci0K
LQotICAgIHJldHVybiB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkU7Ci0gIH07Ci0KLSAg
VXNiRGV2aWNlX1NldEludGVyZmFjZUFsdGVybmF0ZVNldHRpbmdfUmVzcG9uc2VQYXJhbXMuZW5j
b2RlZFNpemUgPSBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDg7Ci0KLSAgVXNiRGV2aWNlX1Nl
dEludGVyZmFjZUFsdGVybmF0ZVNldHRpbmdfUmVzcG9uc2VQYXJhbXMuZGVjb2RlID0gZnVuY3Rp
b24oZGVjb2RlcikgewotICAgIHZhciBwYWNrZWQ7Ci0gICAgdmFyIHZhbCA9IG5ldyBVc2JEZXZp
Y2VfU2V0SW50ZXJmYWNlQWx0ZXJuYXRlU2V0dGluZ19SZXNwb25zZVBhcmFtcygpOwotICAgIHZh
ciBudW1iZXJPZkJ5dGVzID0gZGVjb2Rlci5yZWFkVWludDMyKCk7Ci0gICAgdmFyIHZlcnNpb24g
PSBkZWNvZGVyLnJlYWRVaW50MzIoKTsKLSAgICBwYWNrZWQgPSBkZWNvZGVyLnJlYWRVaW50OCgp
OwotICAgIHZhbC5zdWNjZXNzID0gKHBhY2tlZCA+PiAwKSAmIDEgPyB0cnVlIDogZmFsc2U7Ci0g
ICAgZGVjb2Rlci5za2lwKDEpOwotICAgIGRlY29kZXIuc2tpcCgxKTsKLSAgICBkZWNvZGVyLnNr
aXAoMSk7Ci0gICAgZGVjb2Rlci5za2lwKDEpOwotICAgIGRlY29kZXIuc2tpcCgxKTsKLSAgICBk
ZWNvZGVyLnNraXAoMSk7Ci0gICAgZGVjb2Rlci5za2lwKDEpOwotICAgIHJldHVybiB2YWw7Ci0g
IH07Ci0KLSAgVXNiRGV2aWNlX1NldEludGVyZmFjZUFsdGVybmF0ZVNldHRpbmdfUmVzcG9uc2VQ
YXJhbXMuZW5jb2RlID0gZnVuY3Rpb24oZW5jb2RlciwgdmFsKSB7Ci0gICAgdmFyIHBhY2tlZDsK
LSAgICBlbmNvZGVyLndyaXRlVWludDMyKFVzYkRldmljZV9TZXRJbnRlcmZhY2VBbHRlcm5hdGVT
ZXR0aW5nX1Jlc3BvbnNlUGFyYW1zLmVuY29kZWRTaXplKTsKLSAgICBlbmNvZGVyLndyaXRlVWlu
dDMyKDApOwotICAgIHBhY2tlZCA9IDA7Ci0gICAgcGFja2VkIHw9ICh2YWwuc3VjY2VzcyAmIDEp
IDw8IDAKLSAgICBlbmNvZGVyLndyaXRlVWludDgocGFja2VkKTsKLSAgICBlbmNvZGVyLnNraXAo
MSk7Ci0gICAgZW5jb2Rlci5za2lwKDEpOwotICAgIGVuY29kZXIuc2tpcCgxKTsKLSAgICBlbmNv
ZGVyLnNraXAoMSk7Ci0gICAgZW5jb2Rlci5za2lwKDEpOwotICAgIGVuY29kZXIuc2tpcCgxKTsK
LSAgICBlbmNvZGVyLnNraXAoMSk7Ci0gIH07Ci0gIGZ1bmN0aW9uIFVzYkRldmljZV9SZXNldF9Q
YXJhbXModmFsdWVzKSB7Ci0gICAgdGhpcy5pbml0RGVmYXVsdHNfKCk7Ci0gICAgdGhpcy5pbml0
RmllbGRzXyh2YWx1ZXMpOwotICB9Ci0KLQotICBVc2JEZXZpY2VfUmVzZXRfUGFyYW1zLnByb3Rv
dHlwZS5pbml0RGVmYXVsdHNfID0gZnVuY3Rpb24oKSB7Ci0gIH07Ci0gIFVzYkRldmljZV9SZXNl
dF9QYXJhbXMucHJvdG90eXBlLmluaXRGaWVsZHNfID0gZnVuY3Rpb24oZmllbGRzKSB7Ci0gICAg
Zm9yKHZhciBmaWVsZCBpbiBmaWVsZHMpIHsKLSAgICAgICAgaWYgKHRoaXMuaGFzT3duUHJvcGVy
dHkoZmllbGQpKQotICAgICAgICAgIHRoaXNbZmllbGRdID0gZmllbGRzW2ZpZWxkXTsKLSAgICB9
Ci0gIH07Ci0KLSAgVXNiRGV2aWNlX1Jlc2V0X1BhcmFtcy52YWxpZGF0ZSA9IGZ1bmN0aW9uKG1l
c3NhZ2VWYWxpZGF0b3IsIG9mZnNldCkgewotICAgIHZhciBlcnI7Ci0gICAgZXJyID0gbWVzc2Fn
ZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdEhlYWRlcihvZmZzZXQsIGNvZGVjLmtTdHJ1Y3RIZWFk
ZXJTaXplKTsKLSAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUp
Ci0gICAgICAgIHJldHVybiBlcnI7Ci0KLSAgICB2YXIga1ZlcnNpb25TaXplcyA9IFsKLSAgICAg
IHt2ZXJzaW9uOiAwLCBudW1CeXRlczogOH0KLSAgICBdOwotICAgIGVyciA9IG1lc3NhZ2VWYWxp
ZGF0b3IudmFsaWRhdGVTdHJ1Y3RWZXJzaW9uKG9mZnNldCwga1ZlcnNpb25TaXplcyk7Ci0gICAg
aWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQotICAgICAgICByZXR1
cm4gZXJyOwotCi0gICAgcmV0dXJuIHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORTsKLSAg
fTsKLQotICBVc2JEZXZpY2VfUmVzZXRfUGFyYW1zLmVuY29kZWRTaXplID0gY29kZWMua1N0cnVj
dEhlYWRlclNpemUgKyAwOwotCi0gIFVzYkRldmljZV9SZXNldF9QYXJhbXMuZGVjb2RlID0gZnVu
Y3Rpb24oZGVjb2RlcikgewotICAgIHZhciBwYWNrZWQ7Ci0gICAgdmFyIHZhbCA9IG5ldyBVc2JE
ZXZpY2VfUmVzZXRfUGFyYW1zKCk7Ci0gICAgdmFyIG51bWJlck9mQnl0ZXMgPSBkZWNvZGVyLnJl
YWRVaW50MzIoKTsKLSAgICB2YXIgdmVyc2lvbiA9IGRlY29kZXIucmVhZFVpbnQzMigpOwotICAg
IHJldHVybiB2YWw7Ci0gIH07Ci0KLSAgVXNiRGV2aWNlX1Jlc2V0X1BhcmFtcy5lbmNvZGUgPSBm
dW5jdGlvbihlbmNvZGVyLCB2YWwpIHsKLSAgICB2YXIgcGFja2VkOwotICAgIGVuY29kZXIud3Jp
dGVVaW50MzIoVXNiRGV2aWNlX1Jlc2V0X1BhcmFtcy5lbmNvZGVkU2l6ZSk7Ci0gICAgZW5jb2Rl
ci53cml0ZVVpbnQzMigwKTsKLSAgfTsKLSAgZnVuY3Rpb24gVXNiRGV2aWNlX1Jlc2V0X1Jlc3Bv
bnNlUGFyYW1zKHZhbHVlcykgewotICAgIHRoaXMuaW5pdERlZmF1bHRzXygpOwotICAgIHRoaXMu
aW5pdEZpZWxkc18odmFsdWVzKTsKLSAgfQotCi0KLSAgVXNiRGV2aWNlX1Jlc2V0X1Jlc3BvbnNl
UGFyYW1zLnByb3RvdHlwZS5pbml0RGVmYXVsdHNfID0gZnVuY3Rpb24oKSB7Ci0gICAgdGhpcy5z
dWNjZXNzID0gZmFsc2U7Ci0gIH07Ci0gIFVzYkRldmljZV9SZXNldF9SZXNwb25zZVBhcmFtcy5w
cm90b3R5cGUuaW5pdEZpZWxkc18gPSBmdW5jdGlvbihmaWVsZHMpIHsKLSAgICBmb3IodmFyIGZp
ZWxkIGluIGZpZWxkcykgewotICAgICAgICBpZiAodGhpcy5oYXNPd25Qcm9wZXJ0eShmaWVsZCkp
Ci0gICAgICAgICAgdGhpc1tmaWVsZF0gPSBmaWVsZHNbZmllbGRdOwotICAgIH0KLSAgfTsKLQot
ICBVc2JEZXZpY2VfUmVzZXRfUmVzcG9uc2VQYXJhbXMudmFsaWRhdGUgPSBmdW5jdGlvbihtZXNz
YWdlVmFsaWRhdG9yLCBvZmZzZXQpIHsKLSAgICB2YXIgZXJyOwotICAgIGVyciA9IG1lc3NhZ2VW
YWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RIZWFkZXIob2Zmc2V0LCBjb2RlYy5rU3RydWN0SGVhZGVy
U2l6ZSk7Ci0gICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQot
ICAgICAgICByZXR1cm4gZXJyOwotCi0gICAgdmFyIGtWZXJzaW9uU2l6ZXMgPSBbCi0gICAgICB7
dmVyc2lvbjogMCwgbnVtQnl0ZXM6IDE2fQotICAgIF07Ci0gICAgZXJyID0gbWVzc2FnZVZhbGlk
YXRvci52YWxpZGF0ZVN0cnVjdFZlcnNpb24ob2Zmc2V0LCBrVmVyc2lvblNpemVzKTsKLSAgICBp
ZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCi0gICAgICAgIHJldHVy
biBlcnI7Ci0KLQotICAgIHJldHVybiB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkU7Ci0g
IH07Ci0KLSAgVXNiRGV2aWNlX1Jlc2V0X1Jlc3BvbnNlUGFyYW1zLmVuY29kZWRTaXplID0gY29k
ZWMua1N0cnVjdEhlYWRlclNpemUgKyA4OwotCi0gIFVzYkRldmljZV9SZXNldF9SZXNwb25zZVBh
cmFtcy5kZWNvZGUgPSBmdW5jdGlvbihkZWNvZGVyKSB7Ci0gICAgdmFyIHBhY2tlZDsKLSAgICB2
YXIgdmFsID0gbmV3IFVzYkRldmljZV9SZXNldF9SZXNwb25zZVBhcmFtcygpOwotICAgIHZhciBu
dW1iZXJPZkJ5dGVzID0gZGVjb2Rlci5yZWFkVWludDMyKCk7Ci0gICAgdmFyIHZlcnNpb24gPSBk
ZWNvZGVyLnJlYWRVaW50MzIoKTsKLSAgICBwYWNrZWQgPSBkZWNvZGVyLnJlYWRVaW50OCgpOwot
ICAgIHZhbC5zdWNjZXNzID0gKHBhY2tlZCA+PiAwKSAmIDEgPyB0cnVlIDogZmFsc2U7Ci0gICAg
ZGVjb2Rlci5za2lwKDEpOwotICAgIGRlY29kZXIuc2tpcCgxKTsKLSAgICBkZWNvZGVyLnNraXAo
MSk7Ci0gICAgZGVjb2Rlci5za2lwKDEpOwotICAgIGRlY29kZXIuc2tpcCgxKTsKLSAgICBkZWNv
ZGVyLnNraXAoMSk7Ci0gICAgZGVjb2Rlci5za2lwKDEpOwotICAgIHJldHVybiB2YWw7Ci0gIH07
Ci0KLSAgVXNiRGV2aWNlX1Jlc2V0X1Jlc3BvbnNlUGFyYW1zLmVuY29kZSA9IGZ1bmN0aW9uKGVu
Y29kZXIsIHZhbCkgewotICAgIHZhciBwYWNrZWQ7Ci0gICAgZW5jb2Rlci53cml0ZVVpbnQzMihV
c2JEZXZpY2VfUmVzZXRfUmVzcG9uc2VQYXJhbXMuZW5jb2RlZFNpemUpOwotICAgIGVuY29kZXIu
d3JpdGVVaW50MzIoMCk7Ci0gICAgcGFja2VkID0gMDsKLSAgICBwYWNrZWQgfD0gKHZhbC5zdWNj
ZXNzICYgMSkgPDwgMAotICAgIGVuY29kZXIud3JpdGVVaW50OChwYWNrZWQpOwotICAgIGVuY29k
ZXIuc2tpcCgxKTsKLSAgICBlbmNvZGVyLnNraXAoMSk7Ci0gICAgZW5jb2Rlci5za2lwKDEpOwot
ICAgIGVuY29kZXIuc2tpcCgxKTsKLSAgICBlbmNvZGVyLnNraXAoMSk7Ci0gICAgZW5jb2Rlci5z
a2lwKDEpOwotICAgIGVuY29kZXIuc2tpcCgxKTsKLSAgfTsKLSAgZnVuY3Rpb24gVXNiRGV2aWNl
X0NsZWFySGFsdF9QYXJhbXModmFsdWVzKSB7Ci0gICAgdGhpcy5pbml0RGVmYXVsdHNfKCk7Ci0g
ICAgdGhpcy5pbml0RmllbGRzXyh2YWx1ZXMpOwotICB9Ci0KLQotICBVc2JEZXZpY2VfQ2xlYXJI
YWx0X1BhcmFtcy5wcm90b3R5cGUuaW5pdERlZmF1bHRzXyA9IGZ1bmN0aW9uKCkgewotICAgIHRo
aXMuZW5kcG9pbnQgPSAwOwotICB9OwotICBVc2JEZXZpY2VfQ2xlYXJIYWx0X1BhcmFtcy5wcm90
b3R5cGUuaW5pdEZpZWxkc18gPSBmdW5jdGlvbihmaWVsZHMpIHsKLSAgICBmb3IodmFyIGZpZWxk
IGluIGZpZWxkcykgewotICAgICAgICBpZiAodGhpcy5oYXNPd25Qcm9wZXJ0eShmaWVsZCkpCi0g
ICAgICAgICAgdGhpc1tmaWVsZF0gPSBmaWVsZHNbZmllbGRdOwotICAgIH0KLSAgfTsKLQotICBV
c2JEZXZpY2VfQ2xlYXJIYWx0X1BhcmFtcy52YWxpZGF0ZSA9IGZ1bmN0aW9uKG1lc3NhZ2VWYWxp
ZGF0b3IsIG9mZnNldCkgewotICAgIHZhciBlcnI7Ci0gICAgZXJyID0gbWVzc2FnZVZhbGlkYXRv
ci52YWxpZGF0ZVN0cnVjdEhlYWRlcihvZmZzZXQsIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplKTsK
LSAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCi0gICAgICAg
IHJldHVybiBlcnI7Ci0KLSAgICB2YXIga1ZlcnNpb25TaXplcyA9IFsKLSAgICAgIHt2ZXJzaW9u
OiAwLCBudW1CeXRlczogMTZ9Ci0gICAgXTsKLSAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZh
bGlkYXRlU3RydWN0VmVyc2lvbihvZmZzZXQsIGtWZXJzaW9uU2l6ZXMpOwotICAgIGlmIChlcnIg
IT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKLSAgICAgICAgcmV0dXJuIGVycjsK
LQotCi0gICAgcmV0dXJuIHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORTsKLSAgfTsKLQot
ICBVc2JEZXZpY2VfQ2xlYXJIYWx0X1BhcmFtcy5lbmNvZGVkU2l6ZSA9IGNvZGVjLmtTdHJ1Y3RI
ZWFkZXJTaXplICsgODsKLQotICBVc2JEZXZpY2VfQ2xlYXJIYWx0X1BhcmFtcy5kZWNvZGUgPSBm
dW5jdGlvbihkZWNvZGVyKSB7Ci0gICAgdmFyIHBhY2tlZDsKLSAgICB2YXIgdmFsID0gbmV3IFVz
YkRldmljZV9DbGVhckhhbHRfUGFyYW1zKCk7Ci0gICAgdmFyIG51bWJlck9mQnl0ZXMgPSBkZWNv
ZGVyLnJlYWRVaW50MzIoKTsKLSAgICB2YXIgdmVyc2lvbiA9IGRlY29kZXIucmVhZFVpbnQzMigp
OwotICAgIHZhbC5lbmRwb2ludCA9IGRlY29kZXIuZGVjb2RlU3RydWN0KGNvZGVjLlVpbnQ4KTsK
LSAgICBkZWNvZGVyLnNraXAoMSk7Ci0gICAgZGVjb2Rlci5za2lwKDEpOwotICAgIGRlY29kZXIu
c2tpcCgxKTsKLSAgICBkZWNvZGVyLnNraXAoMSk7Ci0gICAgZGVjb2Rlci5za2lwKDEpOwotICAg
IGRlY29kZXIuc2tpcCgxKTsKLSAgICBkZWNvZGVyLnNraXAoMSk7Ci0gICAgcmV0dXJuIHZhbDsK
LSAgfTsKLQotICBVc2JEZXZpY2VfQ2xlYXJIYWx0X1BhcmFtcy5lbmNvZGUgPSBmdW5jdGlvbihl
bmNvZGVyLCB2YWwpIHsKLSAgICB2YXIgcGFja2VkOwotICAgIGVuY29kZXIud3JpdGVVaW50MzIo
VXNiRGV2aWNlX0NsZWFySGFsdF9QYXJhbXMuZW5jb2RlZFNpemUpOwotICAgIGVuY29kZXIud3Jp
dGVVaW50MzIoMCk7Ci0gICAgZW5jb2Rlci5lbmNvZGVTdHJ1Y3QoY29kZWMuVWludDgsIHZhbC5l
bmRwb2ludCk7Ci0gICAgZW5jb2Rlci5za2lwKDEpOwotICAgIGVuY29kZXIuc2tpcCgxKTsKLSAg
ICBlbmNvZGVyLnNraXAoMSk7Ci0gICAgZW5jb2Rlci5za2lwKDEpOwotICAgIGVuY29kZXIuc2tp
cCgxKTsKLSAgICBlbmNvZGVyLnNraXAoMSk7Ci0gICAgZW5jb2Rlci5za2lwKDEpOwotICB9Owot
ICBmdW5jdGlvbiBVc2JEZXZpY2VfQ2xlYXJIYWx0X1Jlc3BvbnNlUGFyYW1zKHZhbHVlcykgewot
ICAgIHRoaXMuaW5pdERlZmF1bHRzXygpOwotICAgIHRoaXMuaW5pdEZpZWxkc18odmFsdWVzKTsK
LSAgfQotCi0KLSAgVXNiRGV2aWNlX0NsZWFySGFsdF9SZXNwb25zZVBhcmFtcy5wcm90b3R5cGUu
aW5pdERlZmF1bHRzXyA9IGZ1bmN0aW9uKCkgewotICAgIHRoaXMuc3VjY2VzcyA9IGZhbHNlOwot
ICB9OwotICBVc2JEZXZpY2VfQ2xlYXJIYWx0X1Jlc3BvbnNlUGFyYW1zLnByb3RvdHlwZS5pbml0
RmllbGRzXyA9IGZ1bmN0aW9uKGZpZWxkcykgewotICAgIGZvcih2YXIgZmllbGQgaW4gZmllbGRz
KSB7Ci0gICAgICAgIGlmICh0aGlzLmhhc093blByb3BlcnR5KGZpZWxkKSkKLSAgICAgICAgICB0
aGlzW2ZpZWxkXSA9IGZpZWxkc1tmaWVsZF07Ci0gICAgfQotICB9OwotCi0gIFVzYkRldmljZV9D
bGVhckhhbHRfUmVzcG9uc2VQYXJhbXMudmFsaWRhdGUgPSBmdW5jdGlvbihtZXNzYWdlVmFsaWRh
dG9yLCBvZmZzZXQpIHsKLSAgICB2YXIgZXJyOwotICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3Iu
dmFsaWRhdGVTdHJ1Y3RIZWFkZXIob2Zmc2V0LCBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSk7Ci0g
ICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQotICAgICAgICBy
ZXR1cm4gZXJyOwotCi0gICAgdmFyIGtWZXJzaW9uU2l6ZXMgPSBbCi0gICAgICB7dmVyc2lvbjog
MCwgbnVtQnl0ZXM6IDE2fQotICAgIF07Ci0gICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxp
ZGF0ZVN0cnVjdFZlcnNpb24ob2Zmc2V0LCBrVmVyc2lvblNpemVzKTsKLSAgICBpZiAoZXJyICE9
PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCi0gICAgICAgIHJldHVybiBlcnI7Ci0K
LQotICAgIHJldHVybiB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkU7Ci0gIH07Ci0KLSAg
VXNiRGV2aWNlX0NsZWFySGFsdF9SZXNwb25zZVBhcmFtcy5lbmNvZGVkU2l6ZSA9IGNvZGVjLmtT
dHJ1Y3RIZWFkZXJTaXplICsgODsKLQotICBVc2JEZXZpY2VfQ2xlYXJIYWx0X1Jlc3BvbnNlUGFy
YW1zLmRlY29kZSA9IGZ1bmN0aW9uKGRlY29kZXIpIHsKLSAgICB2YXIgcGFja2VkOwotICAgIHZh
ciB2YWwgPSBuZXcgVXNiRGV2aWNlX0NsZWFySGFsdF9SZXNwb25zZVBhcmFtcygpOwotICAgIHZh
ciBudW1iZXJPZkJ5dGVzID0gZGVjb2Rlci5yZWFkVWludDMyKCk7Ci0gICAgdmFyIHZlcnNpb24g
PSBkZWNvZGVyLnJlYWRVaW50MzIoKTsKLSAgICBwYWNrZWQgPSBkZWNvZGVyLnJlYWRVaW50OCgp
OwotICAgIHZhbC5zdWNjZXNzID0gKHBhY2tlZCA+PiAwKSAmIDEgPyB0cnVlIDogZmFsc2U7Ci0g
ICAgZGVjb2Rlci5za2lwKDEpOwotICAgIGRlY29kZXIuc2tpcCgxKTsKLSAgICBkZWNvZGVyLnNr
aXAoMSk7Ci0gICAgZGVjb2Rlci5za2lwKDEpOwotICAgIGRlY29kZXIuc2tpcCgxKTsKLSAgICBk
ZWNvZGVyLnNraXAoMSk7Ci0gICAgZGVjb2Rlci5za2lwKDEpOwotICAgIHJldHVybiB2YWw7Ci0g
IH07Ci0KLSAgVXNiRGV2aWNlX0NsZWFySGFsdF9SZXNwb25zZVBhcmFtcy5lbmNvZGUgPSBmdW5j
dGlvbihlbmNvZGVyLCB2YWwpIHsKLSAgICB2YXIgcGFja2VkOwotICAgIGVuY29kZXIud3JpdGVV
aW50MzIoVXNiRGV2aWNlX0NsZWFySGFsdF9SZXNwb25zZVBhcmFtcy5lbmNvZGVkU2l6ZSk7Ci0g
ICAgZW5jb2Rlci53cml0ZVVpbnQzMigwKTsKLSAgICBwYWNrZWQgPSAwOwotICAgIHBhY2tlZCB8
PSAodmFsLnN1Y2Nlc3MgJiAxKSA8PCAwCi0gICAgZW5jb2Rlci53cml0ZVVpbnQ4KHBhY2tlZCk7
Ci0gICAgZW5jb2Rlci5za2lwKDEpOwotICAgIGVuY29kZXIuc2tpcCgxKTsKLSAgICBlbmNvZGVy
LnNraXAoMSk7Ci0gICAgZW5jb2Rlci5za2lwKDEpOwotICAgIGVuY29kZXIuc2tpcCgxKTsKLSAg
ICBlbmNvZGVyLnNraXAoMSk7Ci0gICAgZW5jb2Rlci5za2lwKDEpOwotICB9OwotICBmdW5jdGlv
biBVc2JEZXZpY2VfQ29udHJvbFRyYW5zZmVySW5fUGFyYW1zKHZhbHVlcykgewotICAgIHRoaXMu
aW5pdERlZmF1bHRzXygpOwotICAgIHRoaXMuaW5pdEZpZWxkc18odmFsdWVzKTsKLSAgfQotCi0K
LSAgVXNiRGV2aWNlX0NvbnRyb2xUcmFuc2ZlckluX1BhcmFtcy5wcm90b3R5cGUuaW5pdERlZmF1
bHRzXyA9IGZ1bmN0aW9uKCkgewotICAgIHRoaXMucGFyYW1zID0gbnVsbDsKLSAgICB0aGlzLmxl
bmd0aCA9IDA7Ci0gICAgdGhpcy50aW1lb3V0ID0gMDsKLSAgfTsKLSAgVXNiRGV2aWNlX0NvbnRy
b2xUcmFuc2ZlckluX1BhcmFtcy5wcm90b3R5cGUuaW5pdEZpZWxkc18gPSBmdW5jdGlvbihmaWVs
ZHMpIHsKLSAgICBmb3IodmFyIGZpZWxkIGluIGZpZWxkcykgewotICAgICAgICBpZiAodGhpcy5o
YXNPd25Qcm9wZXJ0eShmaWVsZCkpCi0gICAgICAgICAgdGhpc1tmaWVsZF0gPSBmaWVsZHNbZmll
bGRdOwotICAgIH0KLSAgfTsKLQotICBVc2JEZXZpY2VfQ29udHJvbFRyYW5zZmVySW5fUGFyYW1z
LnZhbGlkYXRlID0gZnVuY3Rpb24obWVzc2FnZVZhbGlkYXRvciwgb2Zmc2V0KSB7Ci0gICAgdmFy
IGVycjsKLSAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0SGVhZGVyKG9m
ZnNldCwgY29kZWMua1N0cnVjdEhlYWRlclNpemUpOwotICAgIGlmIChlcnIgIT09IHZhbGlkYXRv
ci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKLSAgICAgICAgcmV0dXJuIGVycjsKLQotICAgIHZhciBr
VmVyc2lvblNpemVzID0gWwotICAgICAge3ZlcnNpb246IDAsIG51bUJ5dGVzOiAyNH0KLSAgICBd
OwotICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RWZXJzaW9uKG9mZnNl
dCwga1ZlcnNpb25TaXplcyk7Ci0gICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25F
cnJvci5OT05FKQotICAgICAgICByZXR1cm4gZXJyOwotCi0KLSAgICAvLyB2YWxpZGF0ZSBVc2JE
ZXZpY2VfQ29udHJvbFRyYW5zZmVySW5fUGFyYW1zLnBhcmFtcwotICAgIGVyciA9IG1lc3NhZ2VW
YWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RQb2ludGVyKG9mZnNldCArIGNvZGVjLmtTdHJ1Y3RIZWFk
ZXJTaXplICsgMCwgVXNiQ29udHJvbFRyYW5zZmVyUGFyYW1zLCBmYWxzZSk7Ci0gICAgaWYgKGVy
ciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQotICAgICAgICByZXR1cm4gZXJy
OwotCi0KLQotICAgIHJldHVybiB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkU7Ci0gIH07
Ci0KLSAgVXNiRGV2aWNlX0NvbnRyb2xUcmFuc2ZlckluX1BhcmFtcy5lbmNvZGVkU2l6ZSA9IGNv
ZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgMTY7Ci0KLSAgVXNiRGV2aWNlX0NvbnRyb2xUcmFuc2Zl
ckluX1BhcmFtcy5kZWNvZGUgPSBmdW5jdGlvbihkZWNvZGVyKSB7Ci0gICAgdmFyIHBhY2tlZDsK
LSAgICB2YXIgdmFsID0gbmV3IFVzYkRldmljZV9Db250cm9sVHJhbnNmZXJJbl9QYXJhbXMoKTsK
LSAgICB2YXIgbnVtYmVyT2ZCeXRlcyA9IGRlY29kZXIucmVhZFVpbnQzMigpOwotICAgIHZhciB2
ZXJzaW9uID0gZGVjb2Rlci5yZWFkVWludDMyKCk7Ci0gICAgdmFsLnBhcmFtcyA9IGRlY29kZXIu
ZGVjb2RlU3RydWN0UG9pbnRlcihVc2JDb250cm9sVHJhbnNmZXJQYXJhbXMpOwotICAgIHZhbC5s
ZW5ndGggPSBkZWNvZGVyLmRlY29kZVN0cnVjdChjb2RlYy5VaW50MzIpOwotICAgIHZhbC50aW1l
b3V0ID0gZGVjb2Rlci5kZWNvZGVTdHJ1Y3QoY29kZWMuVWludDMyKTsKLSAgICByZXR1cm4gdmFs
OwotICB9OwotCi0gIFVzYkRldmljZV9Db250cm9sVHJhbnNmZXJJbl9QYXJhbXMuZW5jb2RlID0g
ZnVuY3Rpb24oZW5jb2RlciwgdmFsKSB7Ci0gICAgdmFyIHBhY2tlZDsKLSAgICBlbmNvZGVyLndy
aXRlVWludDMyKFVzYkRldmljZV9Db250cm9sVHJhbnNmZXJJbl9QYXJhbXMuZW5jb2RlZFNpemUp
OwotICAgIGVuY29kZXIud3JpdGVVaW50MzIoMCk7Ci0gICAgZW5jb2Rlci5lbmNvZGVTdHJ1Y3RQ
b2ludGVyKFVzYkNvbnRyb2xUcmFuc2ZlclBhcmFtcywgdmFsLnBhcmFtcyk7Ci0gICAgZW5jb2Rl
ci5lbmNvZGVTdHJ1Y3QoY29kZWMuVWludDMyLCB2YWwubGVuZ3RoKTsKLSAgICBlbmNvZGVyLmVu
Y29kZVN0cnVjdChjb2RlYy5VaW50MzIsIHZhbC50aW1lb3V0KTsKLSAgfTsKLSAgZnVuY3Rpb24g
VXNiRGV2aWNlX0NvbnRyb2xUcmFuc2ZlckluX1Jlc3BvbnNlUGFyYW1zKHZhbHVlcykgewotICAg
IHRoaXMuaW5pdERlZmF1bHRzXygpOwotICAgIHRoaXMuaW5pdEZpZWxkc18odmFsdWVzKTsKLSAg
fQotCi0KLSAgVXNiRGV2aWNlX0NvbnRyb2xUcmFuc2ZlckluX1Jlc3BvbnNlUGFyYW1zLnByb3Rv
dHlwZS5pbml0RGVmYXVsdHNfID0gZnVuY3Rpb24oKSB7Ci0gICAgdGhpcy5zdGF0dXMgPSAwOwot
ICAgIHRoaXMuZGF0YSA9IG51bGw7Ci0gIH07Ci0gIFVzYkRldmljZV9Db250cm9sVHJhbnNmZXJJ
bl9SZXNwb25zZVBhcmFtcy5wcm90b3R5cGUuaW5pdEZpZWxkc18gPSBmdW5jdGlvbihmaWVsZHMp
IHsKLSAgICBmb3IodmFyIGZpZWxkIGluIGZpZWxkcykgewotICAgICAgICBpZiAodGhpcy5oYXNP
d25Qcm9wZXJ0eShmaWVsZCkpCi0gICAgICAgICAgdGhpc1tmaWVsZF0gPSBmaWVsZHNbZmllbGRd
OwotICAgIH0KLSAgfTsKLQotICBVc2JEZXZpY2VfQ29udHJvbFRyYW5zZmVySW5fUmVzcG9uc2VQ
YXJhbXMudmFsaWRhdGUgPSBmdW5jdGlvbihtZXNzYWdlVmFsaWRhdG9yLCBvZmZzZXQpIHsKLSAg
ICB2YXIgZXJyOwotICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RIZWFk
ZXIob2Zmc2V0LCBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSk7Ci0gICAgaWYgKGVyciAhPT0gdmFs
aWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQotICAgICAgICByZXR1cm4gZXJyOwotCi0gICAg
dmFyIGtWZXJzaW9uU2l6ZXMgPSBbCi0gICAgICB7dmVyc2lvbjogMCwgbnVtQnl0ZXM6IDI0fQot
ICAgIF07Ci0gICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdFZlcnNpb24o
b2Zmc2V0LCBrVmVyc2lvblNpemVzKTsKLSAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRh
dGlvbkVycm9yLk5PTkUpCi0gICAgICAgIHJldHVybiBlcnI7Ci0KLQotICAgIC8vIHZhbGlkYXRl
IFVzYkRldmljZV9Db250cm9sVHJhbnNmZXJJbl9SZXNwb25zZVBhcmFtcy5zdGF0dXMKLSAgICBl
cnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlRW51bShvZmZzZXQgKyBjb2RlYy5rU3RydWN0
SGVhZGVyU2l6ZSArIDAsIFVzYlRyYW5zZmVyU3RhdHVzKTsKLSAgICBpZiAoZXJyICE9PSB2YWxp
ZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCi0gICAgICAgIHJldHVybiBlcnI7Ci0KLQotICAg
IC8vIHZhbGlkYXRlIFVzYkRldmljZV9Db250cm9sVHJhbnNmZXJJbl9SZXNwb25zZVBhcmFtcy5k
YXRhCi0gICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZUFycmF5UG9pbnRlcihvZmZz
ZXQgKyBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDgsIDEsIGNvZGVjLlVpbnQ4LCBmYWxzZSwg
WzBdLCAwKTsKLSAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUp
Ci0gICAgICAgIHJldHVybiBlcnI7Ci0KLSAgICByZXR1cm4gdmFsaWRhdG9yLnZhbGlkYXRpb25F
cnJvci5OT05FOwotICB9OwotCi0gIFVzYkRldmljZV9Db250cm9sVHJhbnNmZXJJbl9SZXNwb25z
ZVBhcmFtcy5lbmNvZGVkU2l6ZSA9IGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgMTY7Ci0KLSAg
VXNiRGV2aWNlX0NvbnRyb2xUcmFuc2ZlckluX1Jlc3BvbnNlUGFyYW1zLmRlY29kZSA9IGZ1bmN0
aW9uKGRlY29kZXIpIHsKLSAgICB2YXIgcGFja2VkOwotICAgIHZhciB2YWwgPSBuZXcgVXNiRGV2
aWNlX0NvbnRyb2xUcmFuc2ZlckluX1Jlc3BvbnNlUGFyYW1zKCk7Ci0gICAgdmFyIG51bWJlck9m
Qnl0ZXMgPSBkZWNvZGVyLnJlYWRVaW50MzIoKTsKLSAgICB2YXIgdmVyc2lvbiA9IGRlY29kZXIu
cmVhZFVpbnQzMigpOwotICAgIHZhbC5zdGF0dXMgPSBkZWNvZGVyLmRlY29kZVN0cnVjdChjb2Rl
Yy5JbnQzMik7Ci0gICAgZGVjb2Rlci5za2lwKDEpOwotICAgIGRlY29kZXIuc2tpcCgxKTsKLSAg
ICBkZWNvZGVyLnNraXAoMSk7Ci0gICAgZGVjb2Rlci5za2lwKDEpOwotICAgIHZhbC5kYXRhID0g
ZGVjb2Rlci5kZWNvZGVBcnJheVBvaW50ZXIoY29kZWMuVWludDgpOwotICAgIHJldHVybiB2YWw7
Ci0gIH07Ci0KLSAgVXNiRGV2aWNlX0NvbnRyb2xUcmFuc2ZlckluX1Jlc3BvbnNlUGFyYW1zLmVu
Y29kZSA9IGZ1bmN0aW9uKGVuY29kZXIsIHZhbCkgewotICAgIHZhciBwYWNrZWQ7Ci0gICAgZW5j
b2Rlci53cml0ZVVpbnQzMihVc2JEZXZpY2VfQ29udHJvbFRyYW5zZmVySW5fUmVzcG9uc2VQYXJh
bXMuZW5jb2RlZFNpemUpOwotICAgIGVuY29kZXIud3JpdGVVaW50MzIoMCk7Ci0gICAgZW5jb2Rl
ci5lbmNvZGVTdHJ1Y3QoY29kZWMuSW50MzIsIHZhbC5zdGF0dXMpOwotICAgIGVuY29kZXIuc2tp
cCgxKTsKLSAgICBlbmNvZGVyLnNraXAoMSk7Ci0gICAgZW5jb2Rlci5za2lwKDEpOwotICAgIGVu
Y29kZXIuc2tpcCgxKTsKLSAgICBlbmNvZGVyLmVuY29kZUFycmF5UG9pbnRlcihjb2RlYy5VaW50
OCwgdmFsLmRhdGEpOwotICB9OwotICBmdW5jdGlvbiBVc2JEZXZpY2VfQ29udHJvbFRyYW5zZmVy
T3V0X1BhcmFtcyh2YWx1ZXMpIHsKLSAgICB0aGlzLmluaXREZWZhdWx0c18oKTsKLSAgICB0aGlz
LmluaXRGaWVsZHNfKHZhbHVlcyk7Ci0gIH0KLQotCi0gIFVzYkRldmljZV9Db250cm9sVHJhbnNm
ZXJPdXRfUGFyYW1zLnByb3RvdHlwZS5pbml0RGVmYXVsdHNfID0gZnVuY3Rpb24oKSB7Ci0gICAg
dGhpcy5wYXJhbXMgPSBudWxsOwotICAgIHRoaXMuZGF0YSA9IG51bGw7Ci0gICAgdGhpcy50aW1l
b3V0ID0gMDsKLSAgfTsKLSAgVXNiRGV2aWNlX0NvbnRyb2xUcmFuc2Zlck91dF9QYXJhbXMucHJv
dG90eXBlLmluaXRGaWVsZHNfID0gZnVuY3Rpb24oZmllbGRzKSB7Ci0gICAgZm9yKHZhciBmaWVs
ZCBpbiBmaWVsZHMpIHsKLSAgICAgICAgaWYgKHRoaXMuaGFzT3duUHJvcGVydHkoZmllbGQpKQot
ICAgICAgICAgIHRoaXNbZmllbGRdID0gZmllbGRzW2ZpZWxkXTsKLSAgICB9Ci0gIH07Ci0KLSAg
VXNiRGV2aWNlX0NvbnRyb2xUcmFuc2Zlck91dF9QYXJhbXMudmFsaWRhdGUgPSBmdW5jdGlvbiht
ZXNzYWdlVmFsaWRhdG9yLCBvZmZzZXQpIHsKLSAgICB2YXIgZXJyOwotICAgIGVyciA9IG1lc3Nh
Z2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RIZWFkZXIob2Zmc2V0LCBjb2RlYy5rU3RydWN0SGVh
ZGVyU2l6ZSk7Ci0gICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05F
KQotICAgICAgICByZXR1cm4gZXJyOwotCi0gICAgdmFyIGtWZXJzaW9uU2l6ZXMgPSBbCi0gICAg
ICB7dmVyc2lvbjogMCwgbnVtQnl0ZXM6IDMyfQotICAgIF07Ci0gICAgZXJyID0gbWVzc2FnZVZh
bGlkYXRvci52YWxpZGF0ZVN0cnVjdFZlcnNpb24ob2Zmc2V0LCBrVmVyc2lvblNpemVzKTsKLSAg
ICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCi0gICAgICAgIHJl
dHVybiBlcnI7Ci0KLQotICAgIC8vIHZhbGlkYXRlIFVzYkRldmljZV9Db250cm9sVHJhbnNmZXJP
dXRfUGFyYW1zLnBhcmFtcwotICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1
Y3RQb2ludGVyKG9mZnNldCArIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgMCwgVXNiQ29udHJv
bFRyYW5zZmVyUGFyYW1zLCBmYWxzZSk7Ci0gICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlk
YXRpb25FcnJvci5OT05FKQotICAgICAgICByZXR1cm4gZXJyOwotCi0KLSAgICAvLyB2YWxpZGF0
ZSBVc2JEZXZpY2VfQ29udHJvbFRyYW5zZmVyT3V0X1BhcmFtcy5kYXRhCi0gICAgZXJyID0gbWVz
c2FnZVZhbGlkYXRvci52YWxpZGF0ZUFycmF5UG9pbnRlcihvZmZzZXQgKyBjb2RlYy5rU3RydWN0
SGVhZGVyU2l6ZSArIDgsIDEsIGNvZGVjLlVpbnQ4LCBmYWxzZSwgWzBdLCAwKTsKLSAgICBpZiAo
ZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCi0gICAgICAgIHJldHVybiBl
cnI7Ci0KLQotICAgIHJldHVybiB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkU7Ci0gIH07
Ci0KLSAgVXNiRGV2aWNlX0NvbnRyb2xUcmFuc2Zlck91dF9QYXJhbXMuZW5jb2RlZFNpemUgPSBj
b2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDI0OwotCi0gIFVzYkRldmljZV9Db250cm9sVHJhbnNm
ZXJPdXRfUGFyYW1zLmRlY29kZSA9IGZ1bmN0aW9uKGRlY29kZXIpIHsKLSAgICB2YXIgcGFja2Vk
OwotICAgIHZhciB2YWwgPSBuZXcgVXNiRGV2aWNlX0NvbnRyb2xUcmFuc2Zlck91dF9QYXJhbXMo
KTsKLSAgICB2YXIgbnVtYmVyT2ZCeXRlcyA9IGRlY29kZXIucmVhZFVpbnQzMigpOwotICAgIHZh
ciB2ZXJzaW9uID0gZGVjb2Rlci5yZWFkVWludDMyKCk7Ci0gICAgdmFsLnBhcmFtcyA9IGRlY29k
ZXIuZGVjb2RlU3RydWN0UG9pbnRlcihVc2JDb250cm9sVHJhbnNmZXJQYXJhbXMpOwotICAgIHZh
bC5kYXRhID0gZGVjb2Rlci5kZWNvZGVBcnJheVBvaW50ZXIoY29kZWMuVWludDgpOwotICAgIHZh
bC50aW1lb3V0ID0gZGVjb2Rlci5kZWNvZGVTdHJ1Y3QoY29kZWMuVWludDMyKTsKLSAgICBkZWNv
ZGVyLnNraXAoMSk7Ci0gICAgZGVjb2Rlci5za2lwKDEpOwotICAgIGRlY29kZXIuc2tpcCgxKTsK
LSAgICBkZWNvZGVyLnNraXAoMSk7Ci0gICAgcmV0dXJuIHZhbDsKLSAgfTsKLQotICBVc2JEZXZp
Y2VfQ29udHJvbFRyYW5zZmVyT3V0X1BhcmFtcy5lbmNvZGUgPSBmdW5jdGlvbihlbmNvZGVyLCB2
YWwpIHsKLSAgICB2YXIgcGFja2VkOwotICAgIGVuY29kZXIud3JpdGVVaW50MzIoVXNiRGV2aWNl
X0NvbnRyb2xUcmFuc2Zlck91dF9QYXJhbXMuZW5jb2RlZFNpemUpOwotICAgIGVuY29kZXIud3Jp
dGVVaW50MzIoMCk7Ci0gICAgZW5jb2Rlci5lbmNvZGVTdHJ1Y3RQb2ludGVyKFVzYkNvbnRyb2xU
cmFuc2ZlclBhcmFtcywgdmFsLnBhcmFtcyk7Ci0gICAgZW5jb2Rlci5lbmNvZGVBcnJheVBvaW50
ZXIoY29kZWMuVWludDgsIHZhbC5kYXRhKTsKLSAgICBlbmNvZGVyLmVuY29kZVN0cnVjdChjb2Rl
Yy5VaW50MzIsIHZhbC50aW1lb3V0KTsKLSAgICBlbmNvZGVyLnNraXAoMSk7Ci0gICAgZW5jb2Rl
ci5za2lwKDEpOwotICAgIGVuY29kZXIuc2tpcCgxKTsKLSAgICBlbmNvZGVyLnNraXAoMSk7Ci0g
IH07Ci0gIGZ1bmN0aW9uIFVzYkRldmljZV9Db250cm9sVHJhbnNmZXJPdXRfUmVzcG9uc2VQYXJh
bXModmFsdWVzKSB7Ci0gICAgdGhpcy5pbml0RGVmYXVsdHNfKCk7Ci0gICAgdGhpcy5pbml0Rmll
bGRzXyh2YWx1ZXMpOwotICB9Ci0KLQotICBVc2JEZXZpY2VfQ29udHJvbFRyYW5zZmVyT3V0X1Jl
c3BvbnNlUGFyYW1zLnByb3RvdHlwZS5pbml0RGVmYXVsdHNfID0gZnVuY3Rpb24oKSB7Ci0gICAg
dGhpcy5zdGF0dXMgPSAwOwotICB9OwotICBVc2JEZXZpY2VfQ29udHJvbFRyYW5zZmVyT3V0X1Jl
c3BvbnNlUGFyYW1zLnByb3RvdHlwZS5pbml0RmllbGRzXyA9IGZ1bmN0aW9uKGZpZWxkcykgewot
ICAgIGZvcih2YXIgZmllbGQgaW4gZmllbGRzKSB7Ci0gICAgICAgIGlmICh0aGlzLmhhc093blBy
b3BlcnR5KGZpZWxkKSkKLSAgICAgICAgICB0aGlzW2ZpZWxkXSA9IGZpZWxkc1tmaWVsZF07Ci0g
ICAgfQotICB9OwotCi0gIFVzYkRldmljZV9Db250cm9sVHJhbnNmZXJPdXRfUmVzcG9uc2VQYXJh
bXMudmFsaWRhdGUgPSBmdW5jdGlvbihtZXNzYWdlVmFsaWRhdG9yLCBvZmZzZXQpIHsKLSAgICB2
YXIgZXJyOwotICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RIZWFkZXIo
b2Zmc2V0LCBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSk7Ci0gICAgaWYgKGVyciAhPT0gdmFsaWRh
dG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQotICAgICAgICByZXR1cm4gZXJyOwotCi0gICAgdmFy
IGtWZXJzaW9uU2l6ZXMgPSBbCi0gICAgICB7dmVyc2lvbjogMCwgbnVtQnl0ZXM6IDE2fQotICAg
IF07Ci0gICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdFZlcnNpb24ob2Zm
c2V0LCBrVmVyc2lvblNpemVzKTsKLSAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlv
bkVycm9yLk5PTkUpCi0gICAgICAgIHJldHVybiBlcnI7Ci0KLQotICAgIC8vIHZhbGlkYXRlIFVz
YkRldmljZV9Db250cm9sVHJhbnNmZXJPdXRfUmVzcG9uc2VQYXJhbXMuc3RhdHVzCi0gICAgZXJy
ID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZUVudW0ob2Zmc2V0ICsgY29kZWMua1N0cnVjdEhl
YWRlclNpemUgKyAwLCBVc2JUcmFuc2ZlclN0YXR1cyk7Ci0gICAgaWYgKGVyciAhPT0gdmFsaWRh
dG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQotICAgICAgICByZXR1cm4gZXJyOwotCi0gICAgcmV0
dXJuIHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORTsKLSAgfTsKLQotICBVc2JEZXZpY2Vf
Q29udHJvbFRyYW5zZmVyT3V0X1Jlc3BvbnNlUGFyYW1zLmVuY29kZWRTaXplID0gY29kZWMua1N0
cnVjdEhlYWRlclNpemUgKyA4OwotCi0gIFVzYkRldmljZV9Db250cm9sVHJhbnNmZXJPdXRfUmVz
cG9uc2VQYXJhbXMuZGVjb2RlID0gZnVuY3Rpb24oZGVjb2RlcikgewotICAgIHZhciBwYWNrZWQ7
Ci0gICAgdmFyIHZhbCA9IG5ldyBVc2JEZXZpY2VfQ29udHJvbFRyYW5zZmVyT3V0X1Jlc3BvbnNl
UGFyYW1zKCk7Ci0gICAgdmFyIG51bWJlck9mQnl0ZXMgPSBkZWNvZGVyLnJlYWRVaW50MzIoKTsK
LSAgICB2YXIgdmVyc2lvbiA9IGRlY29kZXIucmVhZFVpbnQzMigpOwotICAgIHZhbC5zdGF0dXMg
PSBkZWNvZGVyLmRlY29kZVN0cnVjdChjb2RlYy5JbnQzMik7Ci0gICAgZGVjb2Rlci5za2lwKDEp
OwotICAgIGRlY29kZXIuc2tpcCgxKTsKLSAgICBkZWNvZGVyLnNraXAoMSk7Ci0gICAgZGVjb2Rl
ci5za2lwKDEpOwotICAgIHJldHVybiB2YWw7Ci0gIH07Ci0KLSAgVXNiRGV2aWNlX0NvbnRyb2xU
cmFuc2Zlck91dF9SZXNwb25zZVBhcmFtcy5lbmNvZGUgPSBmdW5jdGlvbihlbmNvZGVyLCB2YWwp
IHsKLSAgICB2YXIgcGFja2VkOwotICAgIGVuY29kZXIud3JpdGVVaW50MzIoVXNiRGV2aWNlX0Nv
bnRyb2xUcmFuc2Zlck91dF9SZXNwb25zZVBhcmFtcy5lbmNvZGVkU2l6ZSk7Ci0gICAgZW5jb2Rl
ci53cml0ZVVpbnQzMigwKTsKLSAgICBlbmNvZGVyLmVuY29kZVN0cnVjdChjb2RlYy5JbnQzMiwg
dmFsLnN0YXR1cyk7Ci0gICAgZW5jb2Rlci5za2lwKDEpOwotICAgIGVuY29kZXIuc2tpcCgxKTsK
LSAgICBlbmNvZGVyLnNraXAoMSk7Ci0gICAgZW5jb2Rlci5za2lwKDEpOwotICB9OwotICBmdW5j
dGlvbiBVc2JEZXZpY2VfR2VuZXJpY1RyYW5zZmVySW5fUGFyYW1zKHZhbHVlcykgewotICAgIHRo
aXMuaW5pdERlZmF1bHRzXygpOwotICAgIHRoaXMuaW5pdEZpZWxkc18odmFsdWVzKTsKLSAgfQot
Ci0KLSAgVXNiRGV2aWNlX0dlbmVyaWNUcmFuc2ZlckluX1BhcmFtcy5wcm90b3R5cGUuaW5pdERl
ZmF1bHRzXyA9IGZ1bmN0aW9uKCkgewotICAgIHRoaXMuZW5kcG9pbnROdW1iZXIgPSAwOwotICAg
IHRoaXMubGVuZ3RoID0gMDsKLSAgICB0aGlzLnRpbWVvdXQgPSAwOwotICB9OwotICBVc2JEZXZp
Y2VfR2VuZXJpY1RyYW5zZmVySW5fUGFyYW1zLnByb3RvdHlwZS5pbml0RmllbGRzXyA9IGZ1bmN0
aW9uKGZpZWxkcykgewotICAgIGZvcih2YXIgZmllbGQgaW4gZmllbGRzKSB7Ci0gICAgICAgIGlm
ICh0aGlzLmhhc093blByb3BlcnR5KGZpZWxkKSkKLSAgICAgICAgICB0aGlzW2ZpZWxkXSA9IGZp
ZWxkc1tmaWVsZF07Ci0gICAgfQotICB9OwotCi0gIFVzYkRldmljZV9HZW5lcmljVHJhbnNmZXJJ
bl9QYXJhbXMudmFsaWRhdGUgPSBmdW5jdGlvbihtZXNzYWdlVmFsaWRhdG9yLCBvZmZzZXQpIHsK
LSAgICB2YXIgZXJyOwotICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RI
ZWFkZXIob2Zmc2V0LCBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSk7Ci0gICAgaWYgKGVyciAhPT0g
dmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQotICAgICAgICByZXR1cm4gZXJyOwotCi0g
ICAgdmFyIGtWZXJzaW9uU2l6ZXMgPSBbCi0gICAgICB7dmVyc2lvbjogMCwgbnVtQnl0ZXM6IDI0
fQotICAgIF07Ci0gICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdFZlcnNp
b24ob2Zmc2V0LCBrVmVyc2lvblNpemVzKTsKLSAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFs
aWRhdGlvbkVycm9yLk5PTkUpCi0gICAgICAgIHJldHVybiBlcnI7Ci0KLQotCi0KLSAgICByZXR1
cm4gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FOwotICB9OwotCi0gIFVzYkRldmljZV9H
ZW5lcmljVHJhbnNmZXJJbl9QYXJhbXMuZW5jb2RlZFNpemUgPSBjb2RlYy5rU3RydWN0SGVhZGVy
U2l6ZSArIDE2OwotCi0gIFVzYkRldmljZV9HZW5lcmljVHJhbnNmZXJJbl9QYXJhbXMuZGVjb2Rl
ID0gZnVuY3Rpb24oZGVjb2RlcikgewotICAgIHZhciBwYWNrZWQ7Ci0gICAgdmFyIHZhbCA9IG5l
dyBVc2JEZXZpY2VfR2VuZXJpY1RyYW5zZmVySW5fUGFyYW1zKCk7Ci0gICAgdmFyIG51bWJlck9m
Qnl0ZXMgPSBkZWNvZGVyLnJlYWRVaW50MzIoKTsKLSAgICB2YXIgdmVyc2lvbiA9IGRlY29kZXIu
cmVhZFVpbnQzMigpOwotICAgIHZhbC5lbmRwb2ludE51bWJlciA9IGRlY29kZXIuZGVjb2RlU3Ry
dWN0KGNvZGVjLlVpbnQ4KTsKLSAgICBkZWNvZGVyLnNraXAoMSk7Ci0gICAgZGVjb2Rlci5za2lw
KDEpOwotICAgIGRlY29kZXIuc2tpcCgxKTsKLSAgICB2YWwubGVuZ3RoID0gZGVjb2Rlci5kZWNv
ZGVTdHJ1Y3QoY29kZWMuVWludDMyKTsKLSAgICB2YWwudGltZW91dCA9IGRlY29kZXIuZGVjb2Rl
U3RydWN0KGNvZGVjLlVpbnQzMik7Ci0gICAgZGVjb2Rlci5za2lwKDEpOwotICAgIGRlY29kZXIu
c2tpcCgxKTsKLSAgICBkZWNvZGVyLnNraXAoMSk7Ci0gICAgZGVjb2Rlci5za2lwKDEpOwotICAg
IHJldHVybiB2YWw7Ci0gIH07Ci0KLSAgVXNiRGV2aWNlX0dlbmVyaWNUcmFuc2ZlckluX1BhcmFt
cy5lbmNvZGUgPSBmdW5jdGlvbihlbmNvZGVyLCB2YWwpIHsKLSAgICB2YXIgcGFja2VkOwotICAg
IGVuY29kZXIud3JpdGVVaW50MzIoVXNiRGV2aWNlX0dlbmVyaWNUcmFuc2ZlckluX1BhcmFtcy5l
bmNvZGVkU2l6ZSk7Ci0gICAgZW5jb2Rlci53cml0ZVVpbnQzMigwKTsKLSAgICBlbmNvZGVyLmVu
Y29kZVN0cnVjdChjb2RlYy5VaW50OCwgdmFsLmVuZHBvaW50TnVtYmVyKTsKLSAgICBlbmNvZGVy
LnNraXAoMSk7Ci0gICAgZW5jb2Rlci5za2lwKDEpOwotICAgIGVuY29kZXIuc2tpcCgxKTsKLSAg
ICBlbmNvZGVyLmVuY29kZVN0cnVjdChjb2RlYy5VaW50MzIsIHZhbC5sZW5ndGgpOwotICAgIGVu
Y29kZXIuZW5jb2RlU3RydWN0KGNvZGVjLlVpbnQzMiwgdmFsLnRpbWVvdXQpOwotICAgIGVuY29k
ZXIuc2tpcCgxKTsKLSAgICBlbmNvZGVyLnNraXAoMSk7Ci0gICAgZW5jb2Rlci5za2lwKDEpOwot
ICAgIGVuY29kZXIuc2tpcCgxKTsKLSAgfTsKLSAgZnVuY3Rpb24gVXNiRGV2aWNlX0dlbmVyaWNU
cmFuc2ZlckluX1Jlc3BvbnNlUGFyYW1zKHZhbHVlcykgewotICAgIHRoaXMuaW5pdERlZmF1bHRz
XygpOwotICAgIHRoaXMuaW5pdEZpZWxkc18odmFsdWVzKTsKLSAgfQotCi0KLSAgVXNiRGV2aWNl
X0dlbmVyaWNUcmFuc2ZlckluX1Jlc3BvbnNlUGFyYW1zLnByb3RvdHlwZS5pbml0RGVmYXVsdHNf
ID0gZnVuY3Rpb24oKSB7Ci0gICAgdGhpcy5zdGF0dXMgPSAwOwotICAgIHRoaXMuZGF0YSA9IG51
bGw7Ci0gIH07Ci0gIFVzYkRldmljZV9HZW5lcmljVHJhbnNmZXJJbl9SZXNwb25zZVBhcmFtcy5w
cm90b3R5cGUuaW5pdEZpZWxkc18gPSBmdW5jdGlvbihmaWVsZHMpIHsKLSAgICBmb3IodmFyIGZp
ZWxkIGluIGZpZWxkcykgewotICAgICAgICBpZiAodGhpcy5oYXNPd25Qcm9wZXJ0eShmaWVsZCkp
Ci0gICAgICAgICAgdGhpc1tmaWVsZF0gPSBmaWVsZHNbZmllbGRdOwotICAgIH0KLSAgfTsKLQot
ICBVc2JEZXZpY2VfR2VuZXJpY1RyYW5zZmVySW5fUmVzcG9uc2VQYXJhbXMudmFsaWRhdGUgPSBm
dW5jdGlvbihtZXNzYWdlVmFsaWRhdG9yLCBvZmZzZXQpIHsKLSAgICB2YXIgZXJyOwotICAgIGVy
ciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RIZWFkZXIob2Zmc2V0LCBjb2RlYy5r
U3RydWN0SGVhZGVyU2l6ZSk7Ci0gICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25F
cnJvci5OT05FKQotICAgICAgICByZXR1cm4gZXJyOwotCi0gICAgdmFyIGtWZXJzaW9uU2l6ZXMg
PSBbCi0gICAgICB7dmVyc2lvbjogMCwgbnVtQnl0ZXM6IDI0fQotICAgIF07Ci0gICAgZXJyID0g
bWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdFZlcnNpb24ob2Zmc2V0LCBrVmVyc2lvblNp
emVzKTsKLSAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCi0g
ICAgICAgIHJldHVybiBlcnI7Ci0KLQotICAgIC8vIHZhbGlkYXRlIFVzYkRldmljZV9HZW5lcmlj
VHJhbnNmZXJJbl9SZXNwb25zZVBhcmFtcy5zdGF0dXMKLSAgICBlcnIgPSBtZXNzYWdlVmFsaWRh
dG9yLnZhbGlkYXRlRW51bShvZmZzZXQgKyBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDAsIFVz
YlRyYW5zZmVyU3RhdHVzKTsKLSAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVy
cm9yLk5PTkUpCi0gICAgICAgIHJldHVybiBlcnI7Ci0KLQotICAgIC8vIHZhbGlkYXRlIFVzYkRl
dmljZV9HZW5lcmljVHJhbnNmZXJJbl9SZXNwb25zZVBhcmFtcy5kYXRhCi0gICAgZXJyID0gbWVz
c2FnZVZhbGlkYXRvci52YWxpZGF0ZUFycmF5UG9pbnRlcihvZmZzZXQgKyBjb2RlYy5rU3RydWN0
SGVhZGVyU2l6ZSArIDgsIDEsIGNvZGVjLlVpbnQ4LCBmYWxzZSwgWzBdLCAwKTsKLSAgICBpZiAo
ZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCi0gICAgICAgIHJldHVybiBl
cnI7Ci0KLSAgICByZXR1cm4gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FOwotICB9Owot
Ci0gIFVzYkRldmljZV9HZW5lcmljVHJhbnNmZXJJbl9SZXNwb25zZVBhcmFtcy5lbmNvZGVkU2l6
ZSA9IGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgMTY7Ci0KLSAgVXNiRGV2aWNlX0dlbmVyaWNU
cmFuc2ZlckluX1Jlc3BvbnNlUGFyYW1zLmRlY29kZSA9IGZ1bmN0aW9uKGRlY29kZXIpIHsKLSAg
ICB2YXIgcGFja2VkOwotICAgIHZhciB2YWwgPSBuZXcgVXNiRGV2aWNlX0dlbmVyaWNUcmFuc2Zl
ckluX1Jlc3BvbnNlUGFyYW1zKCk7Ci0gICAgdmFyIG51bWJlck9mQnl0ZXMgPSBkZWNvZGVyLnJl
YWRVaW50MzIoKTsKLSAgICB2YXIgdmVyc2lvbiA9IGRlY29kZXIucmVhZFVpbnQzMigpOwotICAg
IHZhbC5zdGF0dXMgPSBkZWNvZGVyLmRlY29kZVN0cnVjdChjb2RlYy5JbnQzMik7Ci0gICAgZGVj
b2Rlci5za2lwKDEpOwotICAgIGRlY29kZXIuc2tpcCgxKTsKLSAgICBkZWNvZGVyLnNraXAoMSk7
Ci0gICAgZGVjb2Rlci5za2lwKDEpOwotICAgIHZhbC5kYXRhID0gZGVjb2Rlci5kZWNvZGVBcnJh
eVBvaW50ZXIoY29kZWMuVWludDgpOwotICAgIHJldHVybiB2YWw7Ci0gIH07Ci0KLSAgVXNiRGV2
aWNlX0dlbmVyaWNUcmFuc2ZlckluX1Jlc3BvbnNlUGFyYW1zLmVuY29kZSA9IGZ1bmN0aW9uKGVu
Y29kZXIsIHZhbCkgewotICAgIHZhciBwYWNrZWQ7Ci0gICAgZW5jb2Rlci53cml0ZVVpbnQzMihV
c2JEZXZpY2VfR2VuZXJpY1RyYW5zZmVySW5fUmVzcG9uc2VQYXJhbXMuZW5jb2RlZFNpemUpOwot
ICAgIGVuY29kZXIud3JpdGVVaW50MzIoMCk7Ci0gICAgZW5jb2Rlci5lbmNvZGVTdHJ1Y3QoY29k
ZWMuSW50MzIsIHZhbC5zdGF0dXMpOwotICAgIGVuY29kZXIuc2tpcCgxKTsKLSAgICBlbmNvZGVy
LnNraXAoMSk7Ci0gICAgZW5jb2Rlci5za2lwKDEpOwotICAgIGVuY29kZXIuc2tpcCgxKTsKLSAg
ICBlbmNvZGVyLmVuY29kZUFycmF5UG9pbnRlcihjb2RlYy5VaW50OCwgdmFsLmRhdGEpOwotICB9
OwotICBmdW5jdGlvbiBVc2JEZXZpY2VfR2VuZXJpY1RyYW5zZmVyT3V0X1BhcmFtcyh2YWx1ZXMp
IHsKLSAgICB0aGlzLmluaXREZWZhdWx0c18oKTsKLSAgICB0aGlzLmluaXRGaWVsZHNfKHZhbHVl
cyk7Ci0gIH0KLQotCi0gIFVzYkRldmljZV9HZW5lcmljVHJhbnNmZXJPdXRfUGFyYW1zLnByb3Rv
dHlwZS5pbml0RGVmYXVsdHNfID0gZnVuY3Rpb24oKSB7Ci0gICAgdGhpcy5lbmRwb2ludE51bWJl
ciA9IDA7Ci0gICAgdGhpcy50aW1lb3V0ID0gMDsKLSAgICB0aGlzLmRhdGEgPSBudWxsOwotICB9
OwotICBVc2JEZXZpY2VfR2VuZXJpY1RyYW5zZmVyT3V0X1BhcmFtcy5wcm90b3R5cGUuaW5pdEZp
ZWxkc18gPSBmdW5jdGlvbihmaWVsZHMpIHsKLSAgICBmb3IodmFyIGZpZWxkIGluIGZpZWxkcykg
ewotICAgICAgICBpZiAodGhpcy5oYXNPd25Qcm9wZXJ0eShmaWVsZCkpCi0gICAgICAgICAgdGhp
c1tmaWVsZF0gPSBmaWVsZHNbZmllbGRdOwotICAgIH0KLSAgfTsKLQotICBVc2JEZXZpY2VfR2Vu
ZXJpY1RyYW5zZmVyT3V0X1BhcmFtcy52YWxpZGF0ZSA9IGZ1bmN0aW9uKG1lc3NhZ2VWYWxpZGF0
b3IsIG9mZnNldCkgewotICAgIHZhciBlcnI7Ci0gICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52
YWxpZGF0ZVN0cnVjdEhlYWRlcihvZmZzZXQsIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplKTsKLSAg
ICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCi0gICAgICAgIHJl
dHVybiBlcnI7Ci0KLSAgICB2YXIga1ZlcnNpb25TaXplcyA9IFsKLSAgICAgIHt2ZXJzaW9uOiAw
LCBudW1CeXRlczogMjR9Ci0gICAgXTsKLSAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlk
YXRlU3RydWN0VmVyc2lvbihvZmZzZXQsIGtWZXJzaW9uU2l6ZXMpOwotICAgIGlmIChlcnIgIT09
IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKLSAgICAgICAgcmV0dXJuIGVycjsKLQot
Ci0KLSAgICAvLyB2YWxpZGF0ZSBVc2JEZXZpY2VfR2VuZXJpY1RyYW5zZmVyT3V0X1BhcmFtcy5k
YXRhCi0gICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZUFycmF5UG9pbnRlcihvZmZz
ZXQgKyBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDgsIDEsIGNvZGVjLlVpbnQ4LCBmYWxzZSwg
WzBdLCAwKTsKLSAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUp
Ci0gICAgICAgIHJldHVybiBlcnI7Ci0KLQotICAgIHJldHVybiB2YWxpZGF0b3IudmFsaWRhdGlv
bkVycm9yLk5PTkU7Ci0gIH07Ci0KLSAgVXNiRGV2aWNlX0dlbmVyaWNUcmFuc2Zlck91dF9QYXJh
bXMuZW5jb2RlZFNpemUgPSBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDE2OwotCi0gIFVzYkRl
dmljZV9HZW5lcmljVHJhbnNmZXJPdXRfUGFyYW1zLmRlY29kZSA9IGZ1bmN0aW9uKGRlY29kZXIp
IHsKLSAgICB2YXIgcGFja2VkOwotICAgIHZhciB2YWwgPSBuZXcgVXNiRGV2aWNlX0dlbmVyaWNU
cmFuc2Zlck91dF9QYXJhbXMoKTsKLSAgICB2YXIgbnVtYmVyT2ZCeXRlcyA9IGRlY29kZXIucmVh
ZFVpbnQzMigpOwotICAgIHZhciB2ZXJzaW9uID0gZGVjb2Rlci5yZWFkVWludDMyKCk7Ci0gICAg
dmFsLmVuZHBvaW50TnVtYmVyID0gZGVjb2Rlci5kZWNvZGVTdHJ1Y3QoY29kZWMuVWludDgpOwot
ICAgIGRlY29kZXIuc2tpcCgxKTsKLSAgICBkZWNvZGVyLnNraXAoMSk7Ci0gICAgZGVjb2Rlci5z
a2lwKDEpOwotICAgIHZhbC50aW1lb3V0ID0gZGVjb2Rlci5kZWNvZGVTdHJ1Y3QoY29kZWMuVWlu
dDMyKTsKLSAgICB2YWwuZGF0YSA9IGRlY29kZXIuZGVjb2RlQXJyYXlQb2ludGVyKGNvZGVjLlVp
bnQ4KTsKLSAgICByZXR1cm4gdmFsOwotICB9OwotCi0gIFVzYkRldmljZV9HZW5lcmljVHJhbnNm
ZXJPdXRfUGFyYW1zLmVuY29kZSA9IGZ1bmN0aW9uKGVuY29kZXIsIHZhbCkgewotICAgIHZhciBw
YWNrZWQ7Ci0gICAgZW5jb2Rlci53cml0ZVVpbnQzMihVc2JEZXZpY2VfR2VuZXJpY1RyYW5zZmVy
T3V0X1BhcmFtcy5lbmNvZGVkU2l6ZSk7Ci0gICAgZW5jb2Rlci53cml0ZVVpbnQzMigwKTsKLSAg
ICBlbmNvZGVyLmVuY29kZVN0cnVjdChjb2RlYy5VaW50OCwgdmFsLmVuZHBvaW50TnVtYmVyKTsK
LSAgICBlbmNvZGVyLnNraXAoMSk7Ci0gICAgZW5jb2Rlci5za2lwKDEpOwotICAgIGVuY29kZXIu
c2tpcCgxKTsKLSAgICBlbmNvZGVyLmVuY29kZVN0cnVjdChjb2RlYy5VaW50MzIsIHZhbC50aW1l
b3V0KTsKLSAgICBlbmNvZGVyLmVuY29kZUFycmF5UG9pbnRlcihjb2RlYy5VaW50OCwgdmFsLmRh
dGEpOwotICB9OwotICBmdW5jdGlvbiBVc2JEZXZpY2VfR2VuZXJpY1RyYW5zZmVyT3V0X1Jlc3Bv
bnNlUGFyYW1zKHZhbHVlcykgewotICAgIHRoaXMuaW5pdERlZmF1bHRzXygpOwotICAgIHRoaXMu
aW5pdEZpZWxkc18odmFsdWVzKTsKLSAgfQotCi0KLSAgVXNiRGV2aWNlX0dlbmVyaWNUcmFuc2Zl
ck91dF9SZXNwb25zZVBhcmFtcy5wcm90b3R5cGUuaW5pdERlZmF1bHRzXyA9IGZ1bmN0aW9uKCkg
ewotICAgIHRoaXMuc3RhdHVzID0gMDsKLSAgfTsKLSAgVXNiRGV2aWNlX0dlbmVyaWNUcmFuc2Zl
ck91dF9SZXNwb25zZVBhcmFtcy5wcm90b3R5cGUuaW5pdEZpZWxkc18gPSBmdW5jdGlvbihmaWVs
ZHMpIHsKLSAgICBmb3IodmFyIGZpZWxkIGluIGZpZWxkcykgewotICAgICAgICBpZiAodGhpcy5o
YXNPd25Qcm9wZXJ0eShmaWVsZCkpCi0gICAgICAgICAgdGhpc1tmaWVsZF0gPSBmaWVsZHNbZmll
bGRdOwotICAgIH0KLSAgfTsKLQotICBVc2JEZXZpY2VfR2VuZXJpY1RyYW5zZmVyT3V0X1Jlc3Bv
bnNlUGFyYW1zLnZhbGlkYXRlID0gZnVuY3Rpb24obWVzc2FnZVZhbGlkYXRvciwgb2Zmc2V0KSB7
Ci0gICAgdmFyIGVycjsKLSAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0
SGVhZGVyKG9mZnNldCwgY29kZWMua1N0cnVjdEhlYWRlclNpemUpOwotICAgIGlmIChlcnIgIT09
IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKLSAgICAgICAgcmV0dXJuIGVycjsKLQot
ICAgIHZhciBrVmVyc2lvblNpemVzID0gWwotICAgICAge3ZlcnNpb246IDAsIG51bUJ5dGVzOiAx
Nn0KLSAgICBdOwotICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RWZXJz
aW9uKG9mZnNldCwga1ZlcnNpb25TaXplcyk7Ci0gICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZh
bGlkYXRpb25FcnJvci5OT05FKQotICAgICAgICByZXR1cm4gZXJyOwotCi0KLSAgICAvLyB2YWxp
ZGF0ZSBVc2JEZXZpY2VfR2VuZXJpY1RyYW5zZmVyT3V0X1Jlc3BvbnNlUGFyYW1zLnN0YXR1cwot
ICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVFbnVtKG9mZnNldCArIGNvZGVjLmtT
dHJ1Y3RIZWFkZXJTaXplICsgMCwgVXNiVHJhbnNmZXJTdGF0dXMpOwotICAgIGlmIChlcnIgIT09
IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKLSAgICAgICAgcmV0dXJuIGVycjsKLQot
ICAgIHJldHVybiB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkU7Ci0gIH07Ci0KLSAgVXNi
RGV2aWNlX0dlbmVyaWNUcmFuc2Zlck91dF9SZXNwb25zZVBhcmFtcy5lbmNvZGVkU2l6ZSA9IGNv
ZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgODsKLQotICBVc2JEZXZpY2VfR2VuZXJpY1RyYW5zZmVy
T3V0X1Jlc3BvbnNlUGFyYW1zLmRlY29kZSA9IGZ1bmN0aW9uKGRlY29kZXIpIHsKLSAgICB2YXIg
cGFja2VkOwotICAgIHZhciB2YWwgPSBuZXcgVXNiRGV2aWNlX0dlbmVyaWNUcmFuc2Zlck91dF9S
ZXNwb25zZVBhcmFtcygpOwotICAgIHZhciBudW1iZXJPZkJ5dGVzID0gZGVjb2Rlci5yZWFkVWlu
dDMyKCk7Ci0gICAgdmFyIHZlcnNpb24gPSBkZWNvZGVyLnJlYWRVaW50MzIoKTsKLSAgICB2YWwu
c3RhdHVzID0gZGVjb2Rlci5kZWNvZGVTdHJ1Y3QoY29kZWMuSW50MzIpOwotICAgIGRlY29kZXIu
c2tpcCgxKTsKLSAgICBkZWNvZGVyLnNraXAoMSk7Ci0gICAgZGVjb2Rlci5za2lwKDEpOwotICAg
IGRlY29kZXIuc2tpcCgxKTsKLSAgICByZXR1cm4gdmFsOwotICB9OwotCi0gIFVzYkRldmljZV9H
ZW5lcmljVHJhbnNmZXJPdXRfUmVzcG9uc2VQYXJhbXMuZW5jb2RlID0gZnVuY3Rpb24oZW5jb2Rl
ciwgdmFsKSB7Ci0gICAgdmFyIHBhY2tlZDsKLSAgICBlbmNvZGVyLndyaXRlVWludDMyKFVzYkRl
dmljZV9HZW5lcmljVHJhbnNmZXJPdXRfUmVzcG9uc2VQYXJhbXMuZW5jb2RlZFNpemUpOwotICAg
IGVuY29kZXIud3JpdGVVaW50MzIoMCk7Ci0gICAgZW5jb2Rlci5lbmNvZGVTdHJ1Y3QoY29kZWMu
SW50MzIsIHZhbC5zdGF0dXMpOwotICAgIGVuY29kZXIuc2tpcCgxKTsKLSAgICBlbmNvZGVyLnNr
aXAoMSk7Ci0gICAgZW5jb2Rlci5za2lwKDEpOwotICAgIGVuY29kZXIuc2tpcCgxKTsKLSAgfTsK
LSAgZnVuY3Rpb24gVXNiRGV2aWNlX0lzb2Nocm9ub3VzVHJhbnNmZXJJbl9QYXJhbXModmFsdWVz
KSB7Ci0gICAgdGhpcy5pbml0RGVmYXVsdHNfKCk7Ci0gICAgdGhpcy5pbml0RmllbGRzXyh2YWx1
ZXMpOwotICB9Ci0KLQotICBVc2JEZXZpY2VfSXNvY2hyb25vdXNUcmFuc2ZlckluX1BhcmFtcy5w
cm90b3R5cGUuaW5pdERlZmF1bHRzXyA9IGZ1bmN0aW9uKCkgewotICAgIHRoaXMuZW5kcG9pbnRO
dW1iZXIgPSAwOwotICAgIHRoaXMudGltZW91dCA9IDA7Ci0gICAgdGhpcy5wYWNrZXRMZW5ndGhz
ID0gbnVsbDsKLSAgfTsKLSAgVXNiRGV2aWNlX0lzb2Nocm9ub3VzVHJhbnNmZXJJbl9QYXJhbXMu
cHJvdG90eXBlLmluaXRGaWVsZHNfID0gZnVuY3Rpb24oZmllbGRzKSB7Ci0gICAgZm9yKHZhciBm
aWVsZCBpbiBmaWVsZHMpIHsKLSAgICAgICAgaWYgKHRoaXMuaGFzT3duUHJvcGVydHkoZmllbGQp
KQotICAgICAgICAgIHRoaXNbZmllbGRdID0gZmllbGRzW2ZpZWxkXTsKLSAgICB9Ci0gIH07Ci0K
LSAgVXNiRGV2aWNlX0lzb2Nocm9ub3VzVHJhbnNmZXJJbl9QYXJhbXMudmFsaWRhdGUgPSBmdW5j
dGlvbihtZXNzYWdlVmFsaWRhdG9yLCBvZmZzZXQpIHsKLSAgICB2YXIgZXJyOwotICAgIGVyciA9
IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RIZWFkZXIob2Zmc2V0LCBjb2RlYy5rU3Ry
dWN0SGVhZGVyU2l6ZSk7Ci0gICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJv
ci5OT05FKQotICAgICAgICByZXR1cm4gZXJyOwotCi0gICAgdmFyIGtWZXJzaW9uU2l6ZXMgPSBb
Ci0gICAgICB7dmVyc2lvbjogMCwgbnVtQnl0ZXM6IDI0fQotICAgIF07Ci0gICAgZXJyID0gbWVz
c2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdFZlcnNpb24ob2Zmc2V0LCBrVmVyc2lvblNpemVz
KTsKLSAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCi0gICAg
ICAgIHJldHVybiBlcnI7Ci0KLQotCi0gICAgLy8gdmFsaWRhdGUgVXNiRGV2aWNlX0lzb2Nocm9u
b3VzVHJhbnNmZXJJbl9QYXJhbXMucGFja2V0TGVuZ3RocwotICAgIGVyciA9IG1lc3NhZ2VWYWxp
ZGF0b3IudmFsaWRhdGVBcnJheVBvaW50ZXIob2Zmc2V0ICsgY29kZWMua1N0cnVjdEhlYWRlclNp
emUgKyA4LCA0LCBjb2RlYy5VaW50MzIsIGZhbHNlLCBbMF0sIDApOwotICAgIGlmIChlcnIgIT09
IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKLSAgICAgICAgcmV0dXJuIGVycjsKLQot
Ci0gICAgcmV0dXJuIHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORTsKLSAgfTsKLQotICBV
c2JEZXZpY2VfSXNvY2hyb25vdXNUcmFuc2ZlckluX1BhcmFtcy5lbmNvZGVkU2l6ZSA9IGNvZGVj
LmtTdHJ1Y3RIZWFkZXJTaXplICsgMTY7Ci0KLSAgVXNiRGV2aWNlX0lzb2Nocm9ub3VzVHJhbnNm
ZXJJbl9QYXJhbXMuZGVjb2RlID0gZnVuY3Rpb24oZGVjb2RlcikgewotICAgIHZhciBwYWNrZWQ7
Ci0gICAgdmFyIHZhbCA9IG5ldyBVc2JEZXZpY2VfSXNvY2hyb25vdXNUcmFuc2ZlckluX1BhcmFt
cygpOwotICAgIHZhciBudW1iZXJPZkJ5dGVzID0gZGVjb2Rlci5yZWFkVWludDMyKCk7Ci0gICAg
dmFyIHZlcnNpb24gPSBkZWNvZGVyLnJlYWRVaW50MzIoKTsKLSAgICB2YWwuZW5kcG9pbnROdW1i
ZXIgPSBkZWNvZGVyLmRlY29kZVN0cnVjdChjb2RlYy5VaW50OCk7Ci0gICAgZGVjb2Rlci5za2lw
KDEpOwotICAgIGRlY29kZXIuc2tpcCgxKTsKLSAgICBkZWNvZGVyLnNraXAoMSk7Ci0gICAgdmFs
LnRpbWVvdXQgPSBkZWNvZGVyLmRlY29kZVN0cnVjdChjb2RlYy5VaW50MzIpOwotICAgIHZhbC5w
YWNrZXRMZW5ndGhzID0gZGVjb2Rlci5kZWNvZGVBcnJheVBvaW50ZXIoY29kZWMuVWludDMyKTsK
LSAgICByZXR1cm4gdmFsOwotICB9OwotCi0gIFVzYkRldmljZV9Jc29jaHJvbm91c1RyYW5zZmVy
SW5fUGFyYW1zLmVuY29kZSA9IGZ1bmN0aW9uKGVuY29kZXIsIHZhbCkgewotICAgIHZhciBwYWNr
ZWQ7Ci0gICAgZW5jb2Rlci53cml0ZVVpbnQzMihVc2JEZXZpY2VfSXNvY2hyb25vdXNUcmFuc2Zl
ckluX1BhcmFtcy5lbmNvZGVkU2l6ZSk7Ci0gICAgZW5jb2Rlci53cml0ZVVpbnQzMigwKTsKLSAg
ICBlbmNvZGVyLmVuY29kZVN0cnVjdChjb2RlYy5VaW50OCwgdmFsLmVuZHBvaW50TnVtYmVyKTsK
LSAgICBlbmNvZGVyLnNraXAoMSk7Ci0gICAgZW5jb2Rlci5za2lwKDEpOwotICAgIGVuY29kZXIu
c2tpcCgxKTsKLSAgICBlbmNvZGVyLmVuY29kZVN0cnVjdChjb2RlYy5VaW50MzIsIHZhbC50aW1l
b3V0KTsKLSAgICBlbmNvZGVyLmVuY29kZUFycmF5UG9pbnRlcihjb2RlYy5VaW50MzIsIHZhbC5w
YWNrZXRMZW5ndGhzKTsKLSAgfTsKLSAgZnVuY3Rpb24gVXNiRGV2aWNlX0lzb2Nocm9ub3VzVHJh
bnNmZXJJbl9SZXNwb25zZVBhcmFtcyh2YWx1ZXMpIHsKLSAgICB0aGlzLmluaXREZWZhdWx0c18o
KTsKLSAgICB0aGlzLmluaXRGaWVsZHNfKHZhbHVlcyk7Ci0gIH0KLQotCi0gIFVzYkRldmljZV9J
c29jaHJvbm91c1RyYW5zZmVySW5fUmVzcG9uc2VQYXJhbXMucHJvdG90eXBlLmluaXREZWZhdWx0
c18gPSBmdW5jdGlvbigpIHsKLSAgICB0aGlzLmRhdGEgPSBudWxsOwotICAgIHRoaXMucGFja2V0
cyA9IG51bGw7Ci0gIH07Ci0gIFVzYkRldmljZV9Jc29jaHJvbm91c1RyYW5zZmVySW5fUmVzcG9u
c2VQYXJhbXMucHJvdG90eXBlLmluaXRGaWVsZHNfID0gZnVuY3Rpb24oZmllbGRzKSB7Ci0gICAg
Zm9yKHZhciBmaWVsZCBpbiBmaWVsZHMpIHsKLSAgICAgICAgaWYgKHRoaXMuaGFzT3duUHJvcGVy
dHkoZmllbGQpKQotICAgICAgICAgIHRoaXNbZmllbGRdID0gZmllbGRzW2ZpZWxkXTsKLSAgICB9
Ci0gIH07Ci0KLSAgVXNiRGV2aWNlX0lzb2Nocm9ub3VzVHJhbnNmZXJJbl9SZXNwb25zZVBhcmFt
cy52YWxpZGF0ZSA9IGZ1bmN0aW9uKG1lc3NhZ2VWYWxpZGF0b3IsIG9mZnNldCkgewotICAgIHZh
ciBlcnI7Ci0gICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdEhlYWRlcihv
ZmZzZXQsIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplKTsKLSAgICBpZiAoZXJyICE9PSB2YWxpZGF0
b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCi0gICAgICAgIHJldHVybiBlcnI7Ci0KLSAgICB2YXIg
a1ZlcnNpb25TaXplcyA9IFsKLSAgICAgIHt2ZXJzaW9uOiAwLCBudW1CeXRlczogMjR9Ci0gICAg
XTsKLSAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0VmVyc2lvbihvZmZz
ZXQsIGtWZXJzaW9uU2l6ZXMpOwotICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9u
RXJyb3IuTk9ORSkKLSAgICAgICAgcmV0dXJuIGVycjsKLQotCi0gICAgLy8gdmFsaWRhdGUgVXNi
RGV2aWNlX0lzb2Nocm9ub3VzVHJhbnNmZXJJbl9SZXNwb25zZVBhcmFtcy5kYXRhCi0gICAgZXJy
ID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZUFycmF5UG9pbnRlcihvZmZzZXQgKyBjb2RlYy5r
U3RydWN0SGVhZGVyU2l6ZSArIDAsIDEsIGNvZGVjLlVpbnQ4LCBmYWxzZSwgWzBdLCAwKTsKLSAg
ICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCi0gICAgICAgIHJl
dHVybiBlcnI7Ci0KLQotICAgIC8vIHZhbGlkYXRlIFVzYkRldmljZV9Jc29jaHJvbm91c1RyYW5z
ZmVySW5fUmVzcG9uc2VQYXJhbXMucGFja2V0cwotICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3Iu
dmFsaWRhdGVBcnJheVBvaW50ZXIob2Zmc2V0ICsgY29kZWMua1N0cnVjdEhlYWRlclNpemUgKyA4
LCA4LCBuZXcgY29kZWMuUG9pbnRlclRvKFVzYklzb2Nocm9ub3VzUGFja2V0KSwgZmFsc2UsIFsw
XSwgMCk7Ci0gICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQot
ICAgICAgICByZXR1cm4gZXJyOwotCi0gICAgcmV0dXJuIHZhbGlkYXRvci52YWxpZGF0aW9uRXJy
b3IuTk9ORTsKLSAgfTsKLQotICBVc2JEZXZpY2VfSXNvY2hyb25vdXNUcmFuc2ZlckluX1Jlc3Bv
bnNlUGFyYW1zLmVuY29kZWRTaXplID0gY29kZWMua1N0cnVjdEhlYWRlclNpemUgKyAxNjsKLQot
ICBVc2JEZXZpY2VfSXNvY2hyb25vdXNUcmFuc2ZlckluX1Jlc3BvbnNlUGFyYW1zLmRlY29kZSA9
IGZ1bmN0aW9uKGRlY29kZXIpIHsKLSAgICB2YXIgcGFja2VkOwotICAgIHZhciB2YWwgPSBuZXcg
VXNiRGV2aWNlX0lzb2Nocm9ub3VzVHJhbnNmZXJJbl9SZXNwb25zZVBhcmFtcygpOwotICAgIHZh
ciBudW1iZXJPZkJ5dGVzID0gZGVjb2Rlci5yZWFkVWludDMyKCk7Ci0gICAgdmFyIHZlcnNpb24g
PSBkZWNvZGVyLnJlYWRVaW50MzIoKTsKLSAgICB2YWwuZGF0YSA9IGRlY29kZXIuZGVjb2RlQXJy
YXlQb2ludGVyKGNvZGVjLlVpbnQ4KTsKLSAgICB2YWwucGFja2V0cyA9IGRlY29kZXIuZGVjb2Rl
QXJyYXlQb2ludGVyKG5ldyBjb2RlYy5Qb2ludGVyVG8oVXNiSXNvY2hyb25vdXNQYWNrZXQpKTsK
LSAgICByZXR1cm4gdmFsOwotICB9OwotCi0gIFVzYkRldmljZV9Jc29jaHJvbm91c1RyYW5zZmVy
SW5fUmVzcG9uc2VQYXJhbXMuZW5jb2RlID0gZnVuY3Rpb24oZW5jb2RlciwgdmFsKSB7Ci0gICAg
dmFyIHBhY2tlZDsKLSAgICBlbmNvZGVyLndyaXRlVWludDMyKFVzYkRldmljZV9Jc29jaHJvbm91
c1RyYW5zZmVySW5fUmVzcG9uc2VQYXJhbXMuZW5jb2RlZFNpemUpOwotICAgIGVuY29kZXIud3Jp
dGVVaW50MzIoMCk7Ci0gICAgZW5jb2Rlci5lbmNvZGVBcnJheVBvaW50ZXIoY29kZWMuVWludDgs
IHZhbC5kYXRhKTsKLSAgICBlbmNvZGVyLmVuY29kZUFycmF5UG9pbnRlcihuZXcgY29kZWMuUG9p
bnRlclRvKFVzYklzb2Nocm9ub3VzUGFja2V0KSwgdmFsLnBhY2tldHMpOwotICB9OwotICBmdW5j
dGlvbiBVc2JEZXZpY2VfSXNvY2hyb25vdXNUcmFuc2Zlck91dF9QYXJhbXModmFsdWVzKSB7Ci0g
ICAgdGhpcy5pbml0RGVmYXVsdHNfKCk7Ci0gICAgdGhpcy5pbml0RmllbGRzXyh2YWx1ZXMpOwot
ICB9Ci0KLQotICBVc2JEZXZpY2VfSXNvY2hyb25vdXNUcmFuc2Zlck91dF9QYXJhbXMucHJvdG90
eXBlLmluaXREZWZhdWx0c18gPSBmdW5jdGlvbigpIHsKLSAgICB0aGlzLmVuZHBvaW50TnVtYmVy
ID0gMDsKLSAgICB0aGlzLnRpbWVvdXQgPSAwOwotICAgIHRoaXMuZGF0YSA9IG51bGw7Ci0gICAg
dGhpcy5wYWNrZXRMZW5ndGhzID0gbnVsbDsKLSAgfTsKLSAgVXNiRGV2aWNlX0lzb2Nocm9ub3Vz
VHJhbnNmZXJPdXRfUGFyYW1zLnByb3RvdHlwZS5pbml0RmllbGRzXyA9IGZ1bmN0aW9uKGZpZWxk
cykgewotICAgIGZvcih2YXIgZmllbGQgaW4gZmllbGRzKSB7Ci0gICAgICAgIGlmICh0aGlzLmhh
c093blByb3BlcnR5KGZpZWxkKSkKLSAgICAgICAgICB0aGlzW2ZpZWxkXSA9IGZpZWxkc1tmaWVs
ZF07Ci0gICAgfQotICB9OwotCi0gIFVzYkRldmljZV9Jc29jaHJvbm91c1RyYW5zZmVyT3V0X1Bh
cmFtcy52YWxpZGF0ZSA9IGZ1bmN0aW9uKG1lc3NhZ2VWYWxpZGF0b3IsIG9mZnNldCkgewotICAg
IHZhciBlcnI7Ci0gICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdEhlYWRl
cihvZmZzZXQsIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplKTsKLSAgICBpZiAoZXJyICE9PSB2YWxp
ZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCi0gICAgICAgIHJldHVybiBlcnI7Ci0KLSAgICB2
YXIga1ZlcnNpb25TaXplcyA9IFsKLSAgICAgIHt2ZXJzaW9uOiAwLCBudW1CeXRlczogMzJ9Ci0g
ICAgXTsKLSAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0VmVyc2lvbihv
ZmZzZXQsIGtWZXJzaW9uU2l6ZXMpOwotICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0
aW9uRXJyb3IuTk9ORSkKLSAgICAgICAgcmV0dXJuIGVycjsKLQotCi0KLSAgICAvLyB2YWxpZGF0
ZSBVc2JEZXZpY2VfSXNvY2hyb25vdXNUcmFuc2Zlck91dF9QYXJhbXMuZGF0YQotICAgIGVyciA9
IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVBcnJheVBvaW50ZXIob2Zmc2V0ICsgY29kZWMua1N0
cnVjdEhlYWRlclNpemUgKyA4LCAxLCBjb2RlYy5VaW50OCwgZmFsc2UsIFswXSwgMCk7Ci0gICAg
aWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQotICAgICAgICByZXR1
cm4gZXJyOwotCi0KLSAgICAvLyB2YWxpZGF0ZSBVc2JEZXZpY2VfSXNvY2hyb25vdXNUcmFuc2Zl
ck91dF9QYXJhbXMucGFja2V0TGVuZ3RocwotICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFs
aWRhdGVBcnJheVBvaW50ZXIob2Zmc2V0ICsgY29kZWMua1N0cnVjdEhlYWRlclNpemUgKyAxNiwg
NCwgY29kZWMuVWludDMyLCBmYWxzZSwgWzBdLCAwKTsKLSAgICBpZiAoZXJyICE9PSB2YWxpZGF0
b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCi0gICAgICAgIHJldHVybiBlcnI7Ci0KLQotICAgIHJl
dHVybiB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkU7Ci0gIH07Ci0KLSAgVXNiRGV2aWNl
X0lzb2Nocm9ub3VzVHJhbnNmZXJPdXRfUGFyYW1zLmVuY29kZWRTaXplID0gY29kZWMua1N0cnVj
dEhlYWRlclNpemUgKyAyNDsKLQotICBVc2JEZXZpY2VfSXNvY2hyb25vdXNUcmFuc2Zlck91dF9Q
YXJhbXMuZGVjb2RlID0gZnVuY3Rpb24oZGVjb2RlcikgewotICAgIHZhciBwYWNrZWQ7Ci0gICAg
dmFyIHZhbCA9IG5ldyBVc2JEZXZpY2VfSXNvY2hyb25vdXNUcmFuc2Zlck91dF9QYXJhbXMoKTsK
LSAgICB2YXIgbnVtYmVyT2ZCeXRlcyA9IGRlY29kZXIucmVhZFVpbnQzMigpOwotICAgIHZhciB2
ZXJzaW9uID0gZGVjb2Rlci5yZWFkVWludDMyKCk7Ci0gICAgdmFsLmVuZHBvaW50TnVtYmVyID0g
ZGVjb2Rlci5kZWNvZGVTdHJ1Y3QoY29kZWMuVWludDgpOwotICAgIGRlY29kZXIuc2tpcCgxKTsK
LSAgICBkZWNvZGVyLnNraXAoMSk7Ci0gICAgZGVjb2Rlci5za2lwKDEpOwotICAgIHZhbC50aW1l
b3V0ID0gZGVjb2Rlci5kZWNvZGVTdHJ1Y3QoY29kZWMuVWludDMyKTsKLSAgICB2YWwuZGF0YSA9
IGRlY29kZXIuZGVjb2RlQXJyYXlQb2ludGVyKGNvZGVjLlVpbnQ4KTsKLSAgICB2YWwucGFja2V0
TGVuZ3RocyA9IGRlY29kZXIuZGVjb2RlQXJyYXlQb2ludGVyKGNvZGVjLlVpbnQzMik7Ci0gICAg
cmV0dXJuIHZhbDsKLSAgfTsKLQotICBVc2JEZXZpY2VfSXNvY2hyb25vdXNUcmFuc2Zlck91dF9Q
YXJhbXMuZW5jb2RlID0gZnVuY3Rpb24oZW5jb2RlciwgdmFsKSB7Ci0gICAgdmFyIHBhY2tlZDsK
LSAgICBlbmNvZGVyLndyaXRlVWludDMyKFVzYkRldmljZV9Jc29jaHJvbm91c1RyYW5zZmVyT3V0
X1BhcmFtcy5lbmNvZGVkU2l6ZSk7Ci0gICAgZW5jb2Rlci53cml0ZVVpbnQzMigwKTsKLSAgICBl
bmNvZGVyLmVuY29kZVN0cnVjdChjb2RlYy5VaW50OCwgdmFsLmVuZHBvaW50TnVtYmVyKTsKLSAg
ICBlbmNvZGVyLnNraXAoMSk7Ci0gICAgZW5jb2Rlci5za2lwKDEpOwotICAgIGVuY29kZXIuc2tp
cCgxKTsKLSAgICBlbmNvZGVyLmVuY29kZVN0cnVjdChjb2RlYy5VaW50MzIsIHZhbC50aW1lb3V0
KTsKLSAgICBlbmNvZGVyLmVuY29kZUFycmF5UG9pbnRlcihjb2RlYy5VaW50OCwgdmFsLmRhdGEp
OwotICAgIGVuY29kZXIuZW5jb2RlQXJyYXlQb2ludGVyKGNvZGVjLlVpbnQzMiwgdmFsLnBhY2tl
dExlbmd0aHMpOwotICB9OwotICBmdW5jdGlvbiBVc2JEZXZpY2VfSXNvY2hyb25vdXNUcmFuc2Zl
ck91dF9SZXNwb25zZVBhcmFtcyh2YWx1ZXMpIHsKLSAgICB0aGlzLmluaXREZWZhdWx0c18oKTsK
LSAgICB0aGlzLmluaXRGaWVsZHNfKHZhbHVlcyk7Ci0gIH0KLQotCi0gIFVzYkRldmljZV9Jc29j
aHJvbm91c1RyYW5zZmVyT3V0X1Jlc3BvbnNlUGFyYW1zLnByb3RvdHlwZS5pbml0RGVmYXVsdHNf
ID0gZnVuY3Rpb24oKSB7Ci0gICAgdGhpcy5wYWNrZXRzID0gbnVsbDsKLSAgfTsKLSAgVXNiRGV2
aWNlX0lzb2Nocm9ub3VzVHJhbnNmZXJPdXRfUmVzcG9uc2VQYXJhbXMucHJvdG90eXBlLmluaXRG
aWVsZHNfID0gZnVuY3Rpb24oZmllbGRzKSB7Ci0gICAgZm9yKHZhciBmaWVsZCBpbiBmaWVsZHMp
IHsKLSAgICAgICAgaWYgKHRoaXMuaGFzT3duUHJvcGVydHkoZmllbGQpKQotICAgICAgICAgIHRo
aXNbZmllbGRdID0gZmllbGRzW2ZpZWxkXTsKLSAgICB9Ci0gIH07Ci0KLSAgVXNiRGV2aWNlX0lz
b2Nocm9ub3VzVHJhbnNmZXJPdXRfUmVzcG9uc2VQYXJhbXMudmFsaWRhdGUgPSBmdW5jdGlvbiht
ZXNzYWdlVmFsaWRhdG9yLCBvZmZzZXQpIHsKLSAgICB2YXIgZXJyOwotICAgIGVyciA9IG1lc3Nh
Z2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RIZWFkZXIob2Zmc2V0LCBjb2RlYy5rU3RydWN0SGVh
ZGVyU2l6ZSk7Ci0gICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05F
KQotICAgICAgICByZXR1cm4gZXJyOwotCi0gICAgdmFyIGtWZXJzaW9uU2l6ZXMgPSBbCi0gICAg
ICB7dmVyc2lvbjogMCwgbnVtQnl0ZXM6IDE2fQotICAgIF07Ci0gICAgZXJyID0gbWVzc2FnZVZh
bGlkYXRvci52YWxpZGF0ZVN0cnVjdFZlcnNpb24ob2Zmc2V0LCBrVmVyc2lvblNpemVzKTsKLSAg
ICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCi0gICAgICAgIHJl
dHVybiBlcnI7Ci0KLQotICAgIC8vIHZhbGlkYXRlIFVzYkRldmljZV9Jc29jaHJvbm91c1RyYW5z
ZmVyT3V0X1Jlc3BvbnNlUGFyYW1zLnBhY2tldHMKLSAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9y
LnZhbGlkYXRlQXJyYXlQb2ludGVyKG9mZnNldCArIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsg
MCwgOCwgbmV3IGNvZGVjLlBvaW50ZXJUbyhVc2JJc29jaHJvbm91c1BhY2tldCksIGZhbHNlLCBb
MF0sIDApOwotICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkK
LSAgICAgICAgcmV0dXJuIGVycjsKLQotICAgIHJldHVybiB2YWxpZGF0b3IudmFsaWRhdGlvbkVy
cm9yLk5PTkU7Ci0gIH07Ci0KLSAgVXNiRGV2aWNlX0lzb2Nocm9ub3VzVHJhbnNmZXJPdXRfUmVz
cG9uc2VQYXJhbXMuZW5jb2RlZFNpemUgPSBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDg7Ci0K
LSAgVXNiRGV2aWNlX0lzb2Nocm9ub3VzVHJhbnNmZXJPdXRfUmVzcG9uc2VQYXJhbXMuZGVjb2Rl
ID0gZnVuY3Rpb24oZGVjb2RlcikgewotICAgIHZhciBwYWNrZWQ7Ci0gICAgdmFyIHZhbCA9IG5l
dyBVc2JEZXZpY2VfSXNvY2hyb25vdXNUcmFuc2Zlck91dF9SZXNwb25zZVBhcmFtcygpOwotICAg
IHZhciBudW1iZXJPZkJ5dGVzID0gZGVjb2Rlci5yZWFkVWludDMyKCk7Ci0gICAgdmFyIHZlcnNp
b24gPSBkZWNvZGVyLnJlYWRVaW50MzIoKTsKLSAgICB2YWwucGFja2V0cyA9IGRlY29kZXIuZGVj
b2RlQXJyYXlQb2ludGVyKG5ldyBjb2RlYy5Qb2ludGVyVG8oVXNiSXNvY2hyb25vdXNQYWNrZXQp
KTsKLSAgICByZXR1cm4gdmFsOwotICB9OwotCi0gIFVzYkRldmljZV9Jc29jaHJvbm91c1RyYW5z
ZmVyT3V0X1Jlc3BvbnNlUGFyYW1zLmVuY29kZSA9IGZ1bmN0aW9uKGVuY29kZXIsIHZhbCkgewot
ICAgIHZhciBwYWNrZWQ7Ci0gICAgZW5jb2Rlci53cml0ZVVpbnQzMihVc2JEZXZpY2VfSXNvY2hy
b25vdXNUcmFuc2Zlck91dF9SZXNwb25zZVBhcmFtcy5lbmNvZGVkU2l6ZSk7Ci0gICAgZW5jb2Rl
ci53cml0ZVVpbnQzMigwKTsKLSAgICBlbmNvZGVyLmVuY29kZUFycmF5UG9pbnRlcihuZXcgY29k
ZWMuUG9pbnRlclRvKFVzYklzb2Nocm9ub3VzUGFja2V0KSwgdmFsLnBhY2tldHMpOwotICB9Owot
ICBmdW5jdGlvbiBVc2JEZXZpY2VDbGllbnRfT25EZXZpY2VPcGVuZWRfUGFyYW1zKHZhbHVlcykg
ewotICAgIHRoaXMuaW5pdERlZmF1bHRzXygpOwotICAgIHRoaXMuaW5pdEZpZWxkc18odmFsdWVz
KTsKLSAgfQotCi0KLSAgVXNiRGV2aWNlQ2xpZW50X09uRGV2aWNlT3BlbmVkX1BhcmFtcy5wcm90
b3R5cGUuaW5pdERlZmF1bHRzXyA9IGZ1bmN0aW9uKCkgewotICB9OwotICBVc2JEZXZpY2VDbGll
bnRfT25EZXZpY2VPcGVuZWRfUGFyYW1zLnByb3RvdHlwZS5pbml0RmllbGRzXyA9IGZ1bmN0aW9u
KGZpZWxkcykgewotICAgIGZvcih2YXIgZmllbGQgaW4gZmllbGRzKSB7Ci0gICAgICAgIGlmICh0
aGlzLmhhc093blByb3BlcnR5KGZpZWxkKSkKLSAgICAgICAgICB0aGlzW2ZpZWxkXSA9IGZpZWxk
c1tmaWVsZF07Ci0gICAgfQotICB9OwotCi0gIFVzYkRldmljZUNsaWVudF9PbkRldmljZU9wZW5l
ZF9QYXJhbXMudmFsaWRhdGUgPSBmdW5jdGlvbihtZXNzYWdlVmFsaWRhdG9yLCBvZmZzZXQpIHsK
LSAgICB2YXIgZXJyOwotICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RI
ZWFkZXIob2Zmc2V0LCBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSk7Ci0gICAgaWYgKGVyciAhPT0g
dmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQotICAgICAgICByZXR1cm4gZXJyOwotCi0g
ICAgdmFyIGtWZXJzaW9uU2l6ZXMgPSBbCi0gICAgICB7dmVyc2lvbjogMCwgbnVtQnl0ZXM6IDh9
Ci0gICAgXTsKLSAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0VmVyc2lv
bihvZmZzZXQsIGtWZXJzaW9uU2l6ZXMpOwotICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxp
ZGF0aW9uRXJyb3IuTk9ORSkKLSAgICAgICAgcmV0dXJuIGVycjsKLQotICAgIHJldHVybiB2YWxp
ZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkU7Ci0gIH07Ci0KLSAgVXNiRGV2aWNlQ2xpZW50X09u
RGV2aWNlT3BlbmVkX1BhcmFtcy5lbmNvZGVkU2l6ZSA9IGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXpl
ICsgMDsKLQotICBVc2JEZXZpY2VDbGllbnRfT25EZXZpY2VPcGVuZWRfUGFyYW1zLmRlY29kZSA9
IGZ1bmN0aW9uKGRlY29kZXIpIHsKLSAgICB2YXIgcGFja2VkOwotICAgIHZhciB2YWwgPSBuZXcg
VXNiRGV2aWNlQ2xpZW50X09uRGV2aWNlT3BlbmVkX1BhcmFtcygpOwotICAgIHZhciBudW1iZXJP
ZkJ5dGVzID0gZGVjb2Rlci5yZWFkVWludDMyKCk7Ci0gICAgdmFyIHZlcnNpb24gPSBkZWNvZGVy
LnJlYWRVaW50MzIoKTsKLSAgICByZXR1cm4gdmFsOwotICB9OwotCi0gIFVzYkRldmljZUNsaWVu
dF9PbkRldmljZU9wZW5lZF9QYXJhbXMuZW5jb2RlID0gZnVuY3Rpb24oZW5jb2RlciwgdmFsKSB7
Ci0gICAgdmFyIHBhY2tlZDsKLSAgICBlbmNvZGVyLndyaXRlVWludDMyKFVzYkRldmljZUNsaWVu
dF9PbkRldmljZU9wZW5lZF9QYXJhbXMuZW5jb2RlZFNpemUpOwotICAgIGVuY29kZXIud3JpdGVV
aW50MzIoMCk7Ci0gIH07Ci0gIGZ1bmN0aW9uIFVzYkRldmljZUNsaWVudF9PbkRldmljZUNsb3Nl
ZF9QYXJhbXModmFsdWVzKSB7Ci0gICAgdGhpcy5pbml0RGVmYXVsdHNfKCk7Ci0gICAgdGhpcy5p
bml0RmllbGRzXyh2YWx1ZXMpOwotICB9Ci0KLQotICBVc2JEZXZpY2VDbGllbnRfT25EZXZpY2VD
bG9zZWRfUGFyYW1zLnByb3RvdHlwZS5pbml0RGVmYXVsdHNfID0gZnVuY3Rpb24oKSB7Ci0gIH07
Ci0gIFVzYkRldmljZUNsaWVudF9PbkRldmljZUNsb3NlZF9QYXJhbXMucHJvdG90eXBlLmluaXRG
aWVsZHNfID0gZnVuY3Rpb24oZmllbGRzKSB7Ci0gICAgZm9yKHZhciBmaWVsZCBpbiBmaWVsZHMp
IHsKLSAgICAgICAgaWYgKHRoaXMuaGFzT3duUHJvcGVydHkoZmllbGQpKQotICAgICAgICAgIHRo
aXNbZmllbGRdID0gZmllbGRzW2ZpZWxkXTsKLSAgICB9Ci0gIH07Ci0KLSAgVXNiRGV2aWNlQ2xp
ZW50X09uRGV2aWNlQ2xvc2VkX1BhcmFtcy52YWxpZGF0ZSA9IGZ1bmN0aW9uKG1lc3NhZ2VWYWxp
ZGF0b3IsIG9mZnNldCkgewotICAgIHZhciBlcnI7Ci0gICAgZXJyID0gbWVzc2FnZVZhbGlkYXRv
ci52YWxpZGF0ZVN0cnVjdEhlYWRlcihvZmZzZXQsIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplKTsK
LSAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCi0gICAgICAg
IHJldHVybiBlcnI7Ci0KLSAgICB2YXIga1ZlcnNpb25TaXplcyA9IFsKLSAgICAgIHt2ZXJzaW9u
OiAwLCBudW1CeXRlczogOH0KLSAgICBdOwotICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFs
aWRhdGVTdHJ1Y3RWZXJzaW9uKG9mZnNldCwga1ZlcnNpb25TaXplcyk7Ci0gICAgaWYgKGVyciAh
PT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQotICAgICAgICByZXR1cm4gZXJyOwot
Ci0gICAgcmV0dXJuIHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORTsKLSAgfTsKLQotICBV
c2JEZXZpY2VDbGllbnRfT25EZXZpY2VDbG9zZWRfUGFyYW1zLmVuY29kZWRTaXplID0gY29kZWMu
a1N0cnVjdEhlYWRlclNpemUgKyAwOwotCi0gIFVzYkRldmljZUNsaWVudF9PbkRldmljZUNsb3Nl
ZF9QYXJhbXMuZGVjb2RlID0gZnVuY3Rpb24oZGVjb2RlcikgewotICAgIHZhciBwYWNrZWQ7Ci0g
ICAgdmFyIHZhbCA9IG5ldyBVc2JEZXZpY2VDbGllbnRfT25EZXZpY2VDbG9zZWRfUGFyYW1zKCk7
Ci0gICAgdmFyIG51bWJlck9mQnl0ZXMgPSBkZWNvZGVyLnJlYWRVaW50MzIoKTsKLSAgICB2YXIg
dmVyc2lvbiA9IGRlY29kZXIucmVhZFVpbnQzMigpOwotICAgIHJldHVybiB2YWw7Ci0gIH07Ci0K
LSAgVXNiRGV2aWNlQ2xpZW50X09uRGV2aWNlQ2xvc2VkX1BhcmFtcy5lbmNvZGUgPSBmdW5jdGlv
bihlbmNvZGVyLCB2YWwpIHsKLSAgICB2YXIgcGFja2VkOwotICAgIGVuY29kZXIud3JpdGVVaW50
MzIoVXNiRGV2aWNlQ2xpZW50X09uRGV2aWNlQ2xvc2VkX1BhcmFtcy5lbmNvZGVkU2l6ZSk7Ci0g
ICAgZW5jb2Rlci53cml0ZVVpbnQzMigwKTsKLSAgfTsKLSAgdmFyIGtVc2JEZXZpY2VfT3Blbl9O
YW1lID0gMDsKLSAgdmFyIGtVc2JEZXZpY2VfQ2xvc2VfTmFtZSA9IDE7Ci0gIHZhciBrVXNiRGV2
aWNlX1NldENvbmZpZ3VyYXRpb25fTmFtZSA9IDI7Ci0gIHZhciBrVXNiRGV2aWNlX0NsYWltSW50
ZXJmYWNlX05hbWUgPSAzOwotICB2YXIga1VzYkRldmljZV9SZWxlYXNlSW50ZXJmYWNlX05hbWUg
PSA0OwotICB2YXIga1VzYkRldmljZV9TZXRJbnRlcmZhY2VBbHRlcm5hdGVTZXR0aW5nX05hbWUg
PSA1OwotICB2YXIga1VzYkRldmljZV9SZXNldF9OYW1lID0gNjsKLSAgdmFyIGtVc2JEZXZpY2Vf
Q2xlYXJIYWx0X05hbWUgPSA3OwotICB2YXIga1VzYkRldmljZV9Db250cm9sVHJhbnNmZXJJbl9O
YW1lID0gODsKLSAgdmFyIGtVc2JEZXZpY2VfQ29udHJvbFRyYW5zZmVyT3V0X05hbWUgPSA5Owot
ICB2YXIga1VzYkRldmljZV9HZW5lcmljVHJhbnNmZXJJbl9OYW1lID0gMTA7Ci0gIHZhciBrVXNi
RGV2aWNlX0dlbmVyaWNUcmFuc2Zlck91dF9OYW1lID0gMTE7Ci0gIHZhciBrVXNiRGV2aWNlX0lz
b2Nocm9ub3VzVHJhbnNmZXJJbl9OYW1lID0gMTI7Ci0gIHZhciBrVXNiRGV2aWNlX0lzb2Nocm9u
b3VzVHJhbnNmZXJPdXRfTmFtZSA9IDEzOwotCi0gIGZ1bmN0aW9uIFVzYkRldmljZVB0cihoYW5k
bGVPclB0ckluZm8pIHsKLSAgICB0aGlzLnB0ciA9IG5ldyBiaW5kaW5ncy5JbnRlcmZhY2VQdHJD
b250cm9sbGVyKFVzYkRldmljZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGhhbmRsZU9yUHRySW5mbyk7Ci0gIH0KLQotICBmdW5jdGlvbiBVc2JE
ZXZpY2VBc3NvY2lhdGVkUHRyKGFzc29jaWF0ZWRJbnRlcmZhY2VQdHJJbmZvKSB7Ci0gICAgdGhp
cy5wdHIgPSBuZXcgYXNzb2NpYXRlZEJpbmRpbmdzLkFzc29jaWF0ZWRJbnRlcmZhY2VQdHJDb250
cm9sbGVyKAotICAgICAgICBVc2JEZXZpY2UsIGFzc29jaWF0ZWRJbnRlcmZhY2VQdHJJbmZvKTsK
LSAgfQotCi0gIFVzYkRldmljZUFzc29jaWF0ZWRQdHIucHJvdG90eXBlID0KLSAgICAgIE9iamVj
dC5jcmVhdGUoVXNiRGV2aWNlUHRyLnByb3RvdHlwZSk7Ci0gIFVzYkRldmljZUFzc29jaWF0ZWRQ
dHIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0KLSAgICAgIFVzYkRldmljZUFzc29jaWF0ZWRQdHI7
Ci0KLSAgZnVuY3Rpb24gVXNiRGV2aWNlUHJveHkocmVjZWl2ZXIpIHsKLSAgICB0aGlzLnJlY2Vp
dmVyXyA9IHJlY2VpdmVyOwotICB9Ci0gIFVzYkRldmljZVB0ci5wcm90b3R5cGUub3BlbiA9IGZ1
bmN0aW9uKCkgewotICAgIHJldHVybiBVc2JEZXZpY2VQcm94eS5wcm90b3R5cGUub3BlbgotICAg
ICAgICAuYXBwbHkodGhpcy5wdHIuZ2V0UHJveHkoKSwgYXJndW1lbnRzKTsKLSAgfTsKLQotICBV
c2JEZXZpY2VQcm94eS5wcm90b3R5cGUub3BlbiA9IGZ1bmN0aW9uKCkgewotICAgIHZhciBwYXJh
bXNfID0gbmV3IFVzYkRldmljZV9PcGVuX1BhcmFtcygpOwotICAgIHJldHVybiBuZXcgUHJvbWlz
ZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3QpIHsKLSAgICAgIHZhciBidWlsZGVyID0gbmV3IGNv
ZGVjLk1lc3NhZ2VWMUJ1aWxkZXIoCi0gICAgICAgICAga1VzYkRldmljZV9PcGVuX05hbWUsCi0g
ICAgICAgICAgY29kZWMuYWxpZ24oVXNiRGV2aWNlX09wZW5fUGFyYW1zLmVuY29kZWRTaXplKSwK
LSAgICAgICAgICBjb2RlYy5rTWVzc2FnZUV4cGVjdHNSZXNwb25zZSwgMCk7Ci0gICAgICBidWls
ZGVyLmVuY29kZVN0cnVjdChVc2JEZXZpY2VfT3Blbl9QYXJhbXMsIHBhcmFtc18pOwotICAgICAg
dmFyIG1lc3NhZ2UgPSBidWlsZGVyLmZpbmlzaCgpOwotICAgICAgdGhpcy5yZWNlaXZlcl8uYWNj
ZXB0QW5kRXhwZWN0UmVzcG9uc2UobWVzc2FnZSkudGhlbihmdW5jdGlvbihtZXNzYWdlKSB7Ci0g
ICAgICAgIHZhciByZWFkZXIgPSBuZXcgY29kZWMuTWVzc2FnZVJlYWRlcihtZXNzYWdlKTsKLSAg
ICAgICAgdmFyIHJlc3BvbnNlUGFyYW1zID0KLSAgICAgICAgICAgIHJlYWRlci5kZWNvZGVTdHJ1
Y3QoVXNiRGV2aWNlX09wZW5fUmVzcG9uc2VQYXJhbXMpOwotICAgICAgICByZXNvbHZlKHJlc3Bv
bnNlUGFyYW1zKTsKLSAgICAgIH0pLmNhdGNoKGZ1bmN0aW9uKHJlc3VsdCkgewotICAgICAgICBy
ZWplY3QoRXJyb3IoIkNvbm5lY3Rpb24gZXJyb3I6ICIgKyByZXN1bHQpKTsKLSAgICAgIH0pOwot
ICAgIH0uYmluZCh0aGlzKSk7Ci0gIH07Ci0gIFVzYkRldmljZVB0ci5wcm90b3R5cGUuY2xvc2Ug
PSBmdW5jdGlvbigpIHsKLSAgICByZXR1cm4gVXNiRGV2aWNlUHJveHkucHJvdG90eXBlLmNsb3Nl
Ci0gICAgICAgIC5hcHBseSh0aGlzLnB0ci5nZXRQcm94eSgpLCBhcmd1bWVudHMpOwotICB9Owot
Ci0gIFVzYkRldmljZVByb3h5LnByb3RvdHlwZS5jbG9zZSA9IGZ1bmN0aW9uKCkgewotICAgIHZh
ciBwYXJhbXNfID0gbmV3IFVzYkRldmljZV9DbG9zZV9QYXJhbXMoKTsKLSAgICByZXR1cm4gbmV3
IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7Ci0gICAgICB2YXIgYnVpbGRlciA9
IG5ldyBjb2RlYy5NZXNzYWdlVjFCdWlsZGVyKAotICAgICAgICAgIGtVc2JEZXZpY2VfQ2xvc2Vf
TmFtZSwKLSAgICAgICAgICBjb2RlYy5hbGlnbihVc2JEZXZpY2VfQ2xvc2VfUGFyYW1zLmVuY29k
ZWRTaXplKSwKLSAgICAgICAgICBjb2RlYy5rTWVzc2FnZUV4cGVjdHNSZXNwb25zZSwgMCk7Ci0g
ICAgICBidWlsZGVyLmVuY29kZVN0cnVjdChVc2JEZXZpY2VfQ2xvc2VfUGFyYW1zLCBwYXJhbXNf
KTsKLSAgICAgIHZhciBtZXNzYWdlID0gYnVpbGRlci5maW5pc2goKTsKLSAgICAgIHRoaXMucmVj
ZWl2ZXJfLmFjY2VwdEFuZEV4cGVjdFJlc3BvbnNlKG1lc3NhZ2UpLnRoZW4oZnVuY3Rpb24obWVz
c2FnZSkgewotICAgICAgICB2YXIgcmVhZGVyID0gbmV3IGNvZGVjLk1lc3NhZ2VSZWFkZXIobWVz
c2FnZSk7Ci0gICAgICAgIHZhciByZXNwb25zZVBhcmFtcyA9Ci0gICAgICAgICAgICByZWFkZXIu
ZGVjb2RlU3RydWN0KFVzYkRldmljZV9DbG9zZV9SZXNwb25zZVBhcmFtcyk7Ci0gICAgICAgIHJl
c29sdmUocmVzcG9uc2VQYXJhbXMpOwotICAgICAgfSkuY2F0Y2goZnVuY3Rpb24ocmVzdWx0KSB7
Ci0gICAgICAgIHJlamVjdChFcnJvcigiQ29ubmVjdGlvbiBlcnJvcjogIiArIHJlc3VsdCkpOwot
ICAgICAgfSk7Ci0gICAgfS5iaW5kKHRoaXMpKTsKLSAgfTsKLSAgVXNiRGV2aWNlUHRyLnByb3Rv
dHlwZS5zZXRDb25maWd1cmF0aW9uID0gZnVuY3Rpb24oKSB7Ci0gICAgcmV0dXJuIFVzYkRldmlj
ZVByb3h5LnByb3RvdHlwZS5zZXRDb25maWd1cmF0aW9uCi0gICAgICAgIC5hcHBseSh0aGlzLnB0
ci5nZXRQcm94eSgpLCBhcmd1bWVudHMpOwotICB9OwotCi0gIFVzYkRldmljZVByb3h5LnByb3Rv
dHlwZS5zZXRDb25maWd1cmF0aW9uID0gZnVuY3Rpb24odmFsdWUpIHsKLSAgICB2YXIgcGFyYW1z
XyA9IG5ldyBVc2JEZXZpY2VfU2V0Q29uZmlndXJhdGlvbl9QYXJhbXMoKTsKLSAgICBwYXJhbXNf
LnZhbHVlID0gdmFsdWU7Ci0gICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUs
IHJlamVjdCkgewotICAgICAgdmFyIGJ1aWxkZXIgPSBuZXcgY29kZWMuTWVzc2FnZVYxQnVpbGRl
cigKLSAgICAgICAgICBrVXNiRGV2aWNlX1NldENvbmZpZ3VyYXRpb25fTmFtZSwKLSAgICAgICAg
ICBjb2RlYy5hbGlnbihVc2JEZXZpY2VfU2V0Q29uZmlndXJhdGlvbl9QYXJhbXMuZW5jb2RlZFNp
emUpLAotICAgICAgICAgIGNvZGVjLmtNZXNzYWdlRXhwZWN0c1Jlc3BvbnNlLCAwKTsKLSAgICAg
IGJ1aWxkZXIuZW5jb2RlU3RydWN0KFVzYkRldmljZV9TZXRDb25maWd1cmF0aW9uX1BhcmFtcywg
cGFyYW1zXyk7Ci0gICAgICB2YXIgbWVzc2FnZSA9IGJ1aWxkZXIuZmluaXNoKCk7Ci0gICAgICB0
aGlzLnJlY2VpdmVyXy5hY2NlcHRBbmRFeHBlY3RSZXNwb25zZShtZXNzYWdlKS50aGVuKGZ1bmN0
aW9uKG1lc3NhZ2UpIHsKLSAgICAgICAgdmFyIHJlYWRlciA9IG5ldyBjb2RlYy5NZXNzYWdlUmVh
ZGVyKG1lc3NhZ2UpOwotICAgICAgICB2YXIgcmVzcG9uc2VQYXJhbXMgPQotICAgICAgICAgICAg
cmVhZGVyLmRlY29kZVN0cnVjdChVc2JEZXZpY2VfU2V0Q29uZmlndXJhdGlvbl9SZXNwb25zZVBh
cmFtcyk7Ci0gICAgICAgIHJlc29sdmUocmVzcG9uc2VQYXJhbXMpOwotICAgICAgfSkuY2F0Y2go
ZnVuY3Rpb24ocmVzdWx0KSB7Ci0gICAgICAgIHJlamVjdChFcnJvcigiQ29ubmVjdGlvbiBlcnJv
cjogIiArIHJlc3VsdCkpOwotICAgICAgfSk7Ci0gICAgfS5iaW5kKHRoaXMpKTsKLSAgfTsKLSAg
VXNiRGV2aWNlUHRyLnByb3RvdHlwZS5jbGFpbUludGVyZmFjZSA9IGZ1bmN0aW9uKCkgewotICAg
IHJldHVybiBVc2JEZXZpY2VQcm94eS5wcm90b3R5cGUuY2xhaW1JbnRlcmZhY2UKLSAgICAgICAg
LmFwcGx5KHRoaXMucHRyLmdldFByb3h5KCksIGFyZ3VtZW50cyk7Ci0gIH07Ci0KLSAgVXNiRGV2
aWNlUHJveHkucHJvdG90eXBlLmNsYWltSW50ZXJmYWNlID0gZnVuY3Rpb24oaW50ZXJmYWNlTnVt
YmVyKSB7Ci0gICAgdmFyIHBhcmFtc18gPSBuZXcgVXNiRGV2aWNlX0NsYWltSW50ZXJmYWNlX1Bh
cmFtcygpOwotICAgIHBhcmFtc18uaW50ZXJmYWNlTnVtYmVyID0gaW50ZXJmYWNlTnVtYmVyOwot
ICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3QpIHsKLSAgICAg
IHZhciBidWlsZGVyID0gbmV3IGNvZGVjLk1lc3NhZ2VWMUJ1aWxkZXIoCi0gICAgICAgICAga1Vz
YkRldmljZV9DbGFpbUludGVyZmFjZV9OYW1lLAotICAgICAgICAgIGNvZGVjLmFsaWduKFVzYkRl
dmljZV9DbGFpbUludGVyZmFjZV9QYXJhbXMuZW5jb2RlZFNpemUpLAotICAgICAgICAgIGNvZGVj
LmtNZXNzYWdlRXhwZWN0c1Jlc3BvbnNlLCAwKTsKLSAgICAgIGJ1aWxkZXIuZW5jb2RlU3RydWN0
KFVzYkRldmljZV9DbGFpbUludGVyZmFjZV9QYXJhbXMsIHBhcmFtc18pOwotICAgICAgdmFyIG1l
c3NhZ2UgPSBidWlsZGVyLmZpbmlzaCgpOwotICAgICAgdGhpcy5yZWNlaXZlcl8uYWNjZXB0QW5k
RXhwZWN0UmVzcG9uc2UobWVzc2FnZSkudGhlbihmdW5jdGlvbihtZXNzYWdlKSB7Ci0gICAgICAg
IHZhciByZWFkZXIgPSBuZXcgY29kZWMuTWVzc2FnZVJlYWRlcihtZXNzYWdlKTsKLSAgICAgICAg
dmFyIHJlc3BvbnNlUGFyYW1zID0KLSAgICAgICAgICAgIHJlYWRlci5kZWNvZGVTdHJ1Y3QoVXNi
RGV2aWNlX0NsYWltSW50ZXJmYWNlX1Jlc3BvbnNlUGFyYW1zKTsKLSAgICAgICAgcmVzb2x2ZShy
ZXNwb25zZVBhcmFtcyk7Ci0gICAgICB9KS5jYXRjaChmdW5jdGlvbihyZXN1bHQpIHsKLSAgICAg
ICAgcmVqZWN0KEVycm9yKCJDb25uZWN0aW9uIGVycm9yOiAiICsgcmVzdWx0KSk7Ci0gICAgICB9
KTsKLSAgICB9LmJpbmQodGhpcykpOwotICB9OwotICBVc2JEZXZpY2VQdHIucHJvdG90eXBlLnJl
bGVhc2VJbnRlcmZhY2UgPSBmdW5jdGlvbigpIHsKLSAgICByZXR1cm4gVXNiRGV2aWNlUHJveHku
cHJvdG90eXBlLnJlbGVhc2VJbnRlcmZhY2UKLSAgICAgICAgLmFwcGx5KHRoaXMucHRyLmdldFBy
b3h5KCksIGFyZ3VtZW50cyk7Ci0gIH07Ci0KLSAgVXNiRGV2aWNlUHJveHkucHJvdG90eXBlLnJl
bGVhc2VJbnRlcmZhY2UgPSBmdW5jdGlvbihpbnRlcmZhY2VOdW1iZXIpIHsKLSAgICB2YXIgcGFy
YW1zXyA9IG5ldyBVc2JEZXZpY2VfUmVsZWFzZUludGVyZmFjZV9QYXJhbXMoKTsKLSAgICBwYXJh
bXNfLmludGVyZmFjZU51bWJlciA9IGludGVyZmFjZU51bWJlcjsKLSAgICByZXR1cm4gbmV3IFBy
b21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7Ci0gICAgICB2YXIgYnVpbGRlciA9IG5l
dyBjb2RlYy5NZXNzYWdlVjFCdWlsZGVyKAotICAgICAgICAgIGtVc2JEZXZpY2VfUmVsZWFzZUlu
dGVyZmFjZV9OYW1lLAotICAgICAgICAgIGNvZGVjLmFsaWduKFVzYkRldmljZV9SZWxlYXNlSW50
ZXJmYWNlX1BhcmFtcy5lbmNvZGVkU2l6ZSksCi0gICAgICAgICAgY29kZWMua01lc3NhZ2VFeHBl
Y3RzUmVzcG9uc2UsIDApOwotICAgICAgYnVpbGRlci5lbmNvZGVTdHJ1Y3QoVXNiRGV2aWNlX1Jl
bGVhc2VJbnRlcmZhY2VfUGFyYW1zLCBwYXJhbXNfKTsKLSAgICAgIHZhciBtZXNzYWdlID0gYnVp
bGRlci5maW5pc2goKTsKLSAgICAgIHRoaXMucmVjZWl2ZXJfLmFjY2VwdEFuZEV4cGVjdFJlc3Bv
bnNlKG1lc3NhZ2UpLnRoZW4oZnVuY3Rpb24obWVzc2FnZSkgewotICAgICAgICB2YXIgcmVhZGVy
ID0gbmV3IGNvZGVjLk1lc3NhZ2VSZWFkZXIobWVzc2FnZSk7Ci0gICAgICAgIHZhciByZXNwb25z
ZVBhcmFtcyA9Ci0gICAgICAgICAgICByZWFkZXIuZGVjb2RlU3RydWN0KFVzYkRldmljZV9SZWxl
YXNlSW50ZXJmYWNlX1Jlc3BvbnNlUGFyYW1zKTsKLSAgICAgICAgcmVzb2x2ZShyZXNwb25zZVBh
cmFtcyk7Ci0gICAgICB9KS5jYXRjaChmdW5jdGlvbihyZXN1bHQpIHsKLSAgICAgICAgcmVqZWN0
KEVycm9yKCJDb25uZWN0aW9uIGVycm9yOiAiICsgcmVzdWx0KSk7Ci0gICAgICB9KTsKLSAgICB9
LmJpbmQodGhpcykpOwotICB9OwotICBVc2JEZXZpY2VQdHIucHJvdG90eXBlLnNldEludGVyZmFj
ZUFsdGVybmF0ZVNldHRpbmcgPSBmdW5jdGlvbigpIHsKLSAgICByZXR1cm4gVXNiRGV2aWNlUHJv
eHkucHJvdG90eXBlLnNldEludGVyZmFjZUFsdGVybmF0ZVNldHRpbmcKLSAgICAgICAgLmFwcGx5
KHRoaXMucHRyLmdldFByb3h5KCksIGFyZ3VtZW50cyk7Ci0gIH07Ci0KLSAgVXNiRGV2aWNlUHJv
eHkucHJvdG90eXBlLnNldEludGVyZmFjZUFsdGVybmF0ZVNldHRpbmcgPSBmdW5jdGlvbihpbnRl
cmZhY2VOdW1iZXIsIGFsdGVybmF0ZVNldHRpbmcpIHsKLSAgICB2YXIgcGFyYW1zXyA9IG5ldyBV
c2JEZXZpY2VfU2V0SW50ZXJmYWNlQWx0ZXJuYXRlU2V0dGluZ19QYXJhbXMoKTsKLSAgICBwYXJh
bXNfLmludGVyZmFjZU51bWJlciA9IGludGVyZmFjZU51bWJlcjsKLSAgICBwYXJhbXNfLmFsdGVy
bmF0ZVNldHRpbmcgPSBhbHRlcm5hdGVTZXR0aW5nOwotICAgIHJldHVybiBuZXcgUHJvbWlzZShm
dW5jdGlvbihyZXNvbHZlLCByZWplY3QpIHsKLSAgICAgIHZhciBidWlsZGVyID0gbmV3IGNvZGVj
Lk1lc3NhZ2VWMUJ1aWxkZXIoCi0gICAgICAgICAga1VzYkRldmljZV9TZXRJbnRlcmZhY2VBbHRl
cm5hdGVTZXR0aW5nX05hbWUsCi0gICAgICAgICAgY29kZWMuYWxpZ24oVXNiRGV2aWNlX1NldElu
dGVyZmFjZUFsdGVybmF0ZVNldHRpbmdfUGFyYW1zLmVuY29kZWRTaXplKSwKLSAgICAgICAgICBj
b2RlYy5rTWVzc2FnZUV4cGVjdHNSZXNwb25zZSwgMCk7Ci0gICAgICBidWlsZGVyLmVuY29kZVN0
cnVjdChVc2JEZXZpY2VfU2V0SW50ZXJmYWNlQWx0ZXJuYXRlU2V0dGluZ19QYXJhbXMsIHBhcmFt
c18pOwotICAgICAgdmFyIG1lc3NhZ2UgPSBidWlsZGVyLmZpbmlzaCgpOwotICAgICAgdGhpcy5y
ZWNlaXZlcl8uYWNjZXB0QW5kRXhwZWN0UmVzcG9uc2UobWVzc2FnZSkudGhlbihmdW5jdGlvbiht
ZXNzYWdlKSB7Ci0gICAgICAgIHZhciByZWFkZXIgPSBuZXcgY29kZWMuTWVzc2FnZVJlYWRlciht
ZXNzYWdlKTsKLSAgICAgICAgdmFyIHJlc3BvbnNlUGFyYW1zID0KLSAgICAgICAgICAgIHJlYWRl
ci5kZWNvZGVTdHJ1Y3QoVXNiRGV2aWNlX1NldEludGVyZmFjZUFsdGVybmF0ZVNldHRpbmdfUmVz
cG9uc2VQYXJhbXMpOwotICAgICAgICByZXNvbHZlKHJlc3BvbnNlUGFyYW1zKTsKLSAgICAgIH0p
LmNhdGNoKGZ1bmN0aW9uKHJlc3VsdCkgewotICAgICAgICByZWplY3QoRXJyb3IoIkNvbm5lY3Rp
b24gZXJyb3I6ICIgKyByZXN1bHQpKTsKLSAgICAgIH0pOwotICAgIH0uYmluZCh0aGlzKSk7Ci0g
IH07Ci0gIFVzYkRldmljZVB0ci5wcm90b3R5cGUucmVzZXQgPSBmdW5jdGlvbigpIHsKLSAgICBy
ZXR1cm4gVXNiRGV2aWNlUHJveHkucHJvdG90eXBlLnJlc2V0Ci0gICAgICAgIC5hcHBseSh0aGlz
LnB0ci5nZXRQcm94eSgpLCBhcmd1bWVudHMpOwotICB9OwotCi0gIFVzYkRldmljZVByb3h5LnBy
b3RvdHlwZS5yZXNldCA9IGZ1bmN0aW9uKCkgewotICAgIHZhciBwYXJhbXNfID0gbmV3IFVzYkRl
dmljZV9SZXNldF9QYXJhbXMoKTsKLSAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVz
b2x2ZSwgcmVqZWN0KSB7Ci0gICAgICB2YXIgYnVpbGRlciA9IG5ldyBjb2RlYy5NZXNzYWdlVjFC
dWlsZGVyKAotICAgICAgICAgIGtVc2JEZXZpY2VfUmVzZXRfTmFtZSwKLSAgICAgICAgICBjb2Rl
Yy5hbGlnbihVc2JEZXZpY2VfUmVzZXRfUGFyYW1zLmVuY29kZWRTaXplKSwKLSAgICAgICAgICBj
b2RlYy5rTWVzc2FnZUV4cGVjdHNSZXNwb25zZSwgMCk7Ci0gICAgICBidWlsZGVyLmVuY29kZVN0
cnVjdChVc2JEZXZpY2VfUmVzZXRfUGFyYW1zLCBwYXJhbXNfKTsKLSAgICAgIHZhciBtZXNzYWdl
ID0gYnVpbGRlci5maW5pc2goKTsKLSAgICAgIHRoaXMucmVjZWl2ZXJfLmFjY2VwdEFuZEV4cGVj
dFJlc3BvbnNlKG1lc3NhZ2UpLnRoZW4oZnVuY3Rpb24obWVzc2FnZSkgewotICAgICAgICB2YXIg
cmVhZGVyID0gbmV3IGNvZGVjLk1lc3NhZ2VSZWFkZXIobWVzc2FnZSk7Ci0gICAgICAgIHZhciBy
ZXNwb25zZVBhcmFtcyA9Ci0gICAgICAgICAgICByZWFkZXIuZGVjb2RlU3RydWN0KFVzYkRldmlj
ZV9SZXNldF9SZXNwb25zZVBhcmFtcyk7Ci0gICAgICAgIHJlc29sdmUocmVzcG9uc2VQYXJhbXMp
OwotICAgICAgfSkuY2F0Y2goZnVuY3Rpb24ocmVzdWx0KSB7Ci0gICAgICAgIHJlamVjdChFcnJv
cigiQ29ubmVjdGlvbiBlcnJvcjogIiArIHJlc3VsdCkpOwotICAgICAgfSk7Ci0gICAgfS5iaW5k
KHRoaXMpKTsKLSAgfTsKLSAgVXNiRGV2aWNlUHRyLnByb3RvdHlwZS5jbGVhckhhbHQgPSBmdW5j
dGlvbigpIHsKLSAgICByZXR1cm4gVXNiRGV2aWNlUHJveHkucHJvdG90eXBlLmNsZWFySGFsdAot
ICAgICAgICAuYXBwbHkodGhpcy5wdHIuZ2V0UHJveHkoKSwgYXJndW1lbnRzKTsKLSAgfTsKLQot
ICBVc2JEZXZpY2VQcm94eS5wcm90b3R5cGUuY2xlYXJIYWx0ID0gZnVuY3Rpb24oZW5kcG9pbnQp
IHsKLSAgICB2YXIgcGFyYW1zXyA9IG5ldyBVc2JEZXZpY2VfQ2xlYXJIYWx0X1BhcmFtcygpOwot
ICAgIHBhcmFtc18uZW5kcG9pbnQgPSBlbmRwb2ludDsKLSAgICByZXR1cm4gbmV3IFByb21pc2Uo
ZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7Ci0gICAgICB2YXIgYnVpbGRlciA9IG5ldyBjb2Rl
Yy5NZXNzYWdlVjFCdWlsZGVyKAotICAgICAgICAgIGtVc2JEZXZpY2VfQ2xlYXJIYWx0X05hbWUs
Ci0gICAgICAgICAgY29kZWMuYWxpZ24oVXNiRGV2aWNlX0NsZWFySGFsdF9QYXJhbXMuZW5jb2Rl
ZFNpemUpLAotICAgICAgICAgIGNvZGVjLmtNZXNzYWdlRXhwZWN0c1Jlc3BvbnNlLCAwKTsKLSAg
ICAgIGJ1aWxkZXIuZW5jb2RlU3RydWN0KFVzYkRldmljZV9DbGVhckhhbHRfUGFyYW1zLCBwYXJh
bXNfKTsKLSAgICAgIHZhciBtZXNzYWdlID0gYnVpbGRlci5maW5pc2goKTsKLSAgICAgIHRoaXMu
cmVjZWl2ZXJfLmFjY2VwdEFuZEV4cGVjdFJlc3BvbnNlKG1lc3NhZ2UpLnRoZW4oZnVuY3Rpb24o
bWVzc2FnZSkgewotICAgICAgICB2YXIgcmVhZGVyID0gbmV3IGNvZGVjLk1lc3NhZ2VSZWFkZXIo
bWVzc2FnZSk7Ci0gICAgICAgIHZhciByZXNwb25zZVBhcmFtcyA9Ci0gICAgICAgICAgICByZWFk
ZXIuZGVjb2RlU3RydWN0KFVzYkRldmljZV9DbGVhckhhbHRfUmVzcG9uc2VQYXJhbXMpOwotICAg
ICAgICByZXNvbHZlKHJlc3BvbnNlUGFyYW1zKTsKLSAgICAgIH0pLmNhdGNoKGZ1bmN0aW9uKHJl
c3VsdCkgewotICAgICAgICByZWplY3QoRXJyb3IoIkNvbm5lY3Rpb24gZXJyb3I6ICIgKyByZXN1
bHQpKTsKLSAgICAgIH0pOwotICAgIH0uYmluZCh0aGlzKSk7Ci0gIH07Ci0gIFVzYkRldmljZVB0
ci5wcm90b3R5cGUuY29udHJvbFRyYW5zZmVySW4gPSBmdW5jdGlvbigpIHsKLSAgICByZXR1cm4g
VXNiRGV2aWNlUHJveHkucHJvdG90eXBlLmNvbnRyb2xUcmFuc2ZlckluCi0gICAgICAgIC5hcHBs
eSh0aGlzLnB0ci5nZXRQcm94eSgpLCBhcmd1bWVudHMpOwotICB9OwotCi0gIFVzYkRldmljZVBy
b3h5LnByb3RvdHlwZS5jb250cm9sVHJhbnNmZXJJbiA9IGZ1bmN0aW9uKHBhcmFtcywgbGVuZ3Ro
LCB0aW1lb3V0KSB7Ci0gICAgdmFyIHBhcmFtc18gPSBuZXcgVXNiRGV2aWNlX0NvbnRyb2xUcmFu
c2ZlckluX1BhcmFtcygpOwotICAgIHBhcmFtc18ucGFyYW1zID0gcGFyYW1zOwotICAgIHBhcmFt
c18ubGVuZ3RoID0gbGVuZ3RoOwotICAgIHBhcmFtc18udGltZW91dCA9IHRpbWVvdXQ7Ci0gICAg
cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkgewotICAgICAgdmFy
IGJ1aWxkZXIgPSBuZXcgY29kZWMuTWVzc2FnZVYxQnVpbGRlcigKLSAgICAgICAgICBrVXNiRGV2
aWNlX0NvbnRyb2xUcmFuc2ZlckluX05hbWUsCi0gICAgICAgICAgY29kZWMuYWxpZ24oVXNiRGV2
aWNlX0NvbnRyb2xUcmFuc2ZlckluX1BhcmFtcy5lbmNvZGVkU2l6ZSksCi0gICAgICAgICAgY29k
ZWMua01lc3NhZ2VFeHBlY3RzUmVzcG9uc2UsIDApOwotICAgICAgYnVpbGRlci5lbmNvZGVTdHJ1
Y3QoVXNiRGV2aWNlX0NvbnRyb2xUcmFuc2ZlckluX1BhcmFtcywgcGFyYW1zXyk7Ci0gICAgICB2
YXIgbWVzc2FnZSA9IGJ1aWxkZXIuZmluaXNoKCk7Ci0gICAgICB0aGlzLnJlY2VpdmVyXy5hY2Nl
cHRBbmRFeHBlY3RSZXNwb25zZShtZXNzYWdlKS50aGVuKGZ1bmN0aW9uKG1lc3NhZ2UpIHsKLSAg
ICAgICAgdmFyIHJlYWRlciA9IG5ldyBjb2RlYy5NZXNzYWdlUmVhZGVyKG1lc3NhZ2UpOwotICAg
ICAgICB2YXIgcmVzcG9uc2VQYXJhbXMgPQotICAgICAgICAgICAgcmVhZGVyLmRlY29kZVN0cnVj
dChVc2JEZXZpY2VfQ29udHJvbFRyYW5zZmVySW5fUmVzcG9uc2VQYXJhbXMpOwotICAgICAgICBy
ZXNvbHZlKHJlc3BvbnNlUGFyYW1zKTsKLSAgICAgIH0pLmNhdGNoKGZ1bmN0aW9uKHJlc3VsdCkg
ewotICAgICAgICByZWplY3QoRXJyb3IoIkNvbm5lY3Rpb24gZXJyb3I6ICIgKyByZXN1bHQpKTsK
LSAgICAgIH0pOwotICAgIH0uYmluZCh0aGlzKSk7Ci0gIH07Ci0gIFVzYkRldmljZVB0ci5wcm90
b3R5cGUuY29udHJvbFRyYW5zZmVyT3V0ID0gZnVuY3Rpb24oKSB7Ci0gICAgcmV0dXJuIFVzYkRl
dmljZVByb3h5LnByb3RvdHlwZS5jb250cm9sVHJhbnNmZXJPdXQKLSAgICAgICAgLmFwcGx5KHRo
aXMucHRyLmdldFByb3h5KCksIGFyZ3VtZW50cyk7Ci0gIH07Ci0KLSAgVXNiRGV2aWNlUHJveHku
cHJvdG90eXBlLmNvbnRyb2xUcmFuc2Zlck91dCA9IGZ1bmN0aW9uKHBhcmFtcywgZGF0YSwgdGlt
ZW91dCkgewotICAgIHZhciBwYXJhbXNfID0gbmV3IFVzYkRldmljZV9Db250cm9sVHJhbnNmZXJP
dXRfUGFyYW1zKCk7Ci0gICAgcGFyYW1zXy5wYXJhbXMgPSBwYXJhbXM7Ci0gICAgcGFyYW1zXy5k
YXRhID0gZGF0YTsKLSAgICBwYXJhbXNfLnRpbWVvdXQgPSB0aW1lb3V0OwotICAgIHJldHVybiBu
ZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3QpIHsKLSAgICAgIHZhciBidWlsZGVy
ID0gbmV3IGNvZGVjLk1lc3NhZ2VWMUJ1aWxkZXIoCi0gICAgICAgICAga1VzYkRldmljZV9Db250
cm9sVHJhbnNmZXJPdXRfTmFtZSwKLSAgICAgICAgICBjb2RlYy5hbGlnbihVc2JEZXZpY2VfQ29u
dHJvbFRyYW5zZmVyT3V0X1BhcmFtcy5lbmNvZGVkU2l6ZSksCi0gICAgICAgICAgY29kZWMua01l
c3NhZ2VFeHBlY3RzUmVzcG9uc2UsIDApOwotICAgICAgYnVpbGRlci5lbmNvZGVTdHJ1Y3QoVXNi
RGV2aWNlX0NvbnRyb2xUcmFuc2Zlck91dF9QYXJhbXMsIHBhcmFtc18pOwotICAgICAgdmFyIG1l
c3NhZ2UgPSBidWlsZGVyLmZpbmlzaCgpOwotICAgICAgdGhpcy5yZWNlaXZlcl8uYWNjZXB0QW5k
RXhwZWN0UmVzcG9uc2UobWVzc2FnZSkudGhlbihmdW5jdGlvbihtZXNzYWdlKSB7Ci0gICAgICAg
IHZhciByZWFkZXIgPSBuZXcgY29kZWMuTWVzc2FnZVJlYWRlcihtZXNzYWdlKTsKLSAgICAgICAg
dmFyIHJlc3BvbnNlUGFyYW1zID0KLSAgICAgICAgICAgIHJlYWRlci5kZWNvZGVTdHJ1Y3QoVXNi
RGV2aWNlX0NvbnRyb2xUcmFuc2Zlck91dF9SZXNwb25zZVBhcmFtcyk7Ci0gICAgICAgIHJlc29s
dmUocmVzcG9uc2VQYXJhbXMpOwotICAgICAgfSkuY2F0Y2goZnVuY3Rpb24ocmVzdWx0KSB7Ci0g
ICAgICAgIHJlamVjdChFcnJvcigiQ29ubmVjdGlvbiBlcnJvcjogIiArIHJlc3VsdCkpOwotICAg
ICAgfSk7Ci0gICAgfS5iaW5kKHRoaXMpKTsKLSAgfTsKLSAgVXNiRGV2aWNlUHRyLnByb3RvdHlw
ZS5nZW5lcmljVHJhbnNmZXJJbiA9IGZ1bmN0aW9uKCkgewotICAgIHJldHVybiBVc2JEZXZpY2VQ
cm94eS5wcm90b3R5cGUuZ2VuZXJpY1RyYW5zZmVySW4KLSAgICAgICAgLmFwcGx5KHRoaXMucHRy
LmdldFByb3h5KCksIGFyZ3VtZW50cyk7Ci0gIH07Ci0KLSAgVXNiRGV2aWNlUHJveHkucHJvdG90
eXBlLmdlbmVyaWNUcmFuc2ZlckluID0gZnVuY3Rpb24oZW5kcG9pbnROdW1iZXIsIGxlbmd0aCwg
dGltZW91dCkgewotICAgIHZhciBwYXJhbXNfID0gbmV3IFVzYkRldmljZV9HZW5lcmljVHJhbnNm
ZXJJbl9QYXJhbXMoKTsKLSAgICBwYXJhbXNfLmVuZHBvaW50TnVtYmVyID0gZW5kcG9pbnROdW1i
ZXI7Ci0gICAgcGFyYW1zXy5sZW5ndGggPSBsZW5ndGg7Ci0gICAgcGFyYW1zXy50aW1lb3V0ID0g
dGltZW91dDsKLSAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0
KSB7Ci0gICAgICB2YXIgYnVpbGRlciA9IG5ldyBjb2RlYy5NZXNzYWdlVjFCdWlsZGVyKAotICAg
ICAgICAgIGtVc2JEZXZpY2VfR2VuZXJpY1RyYW5zZmVySW5fTmFtZSwKLSAgICAgICAgICBjb2Rl
Yy5hbGlnbihVc2JEZXZpY2VfR2VuZXJpY1RyYW5zZmVySW5fUGFyYW1zLmVuY29kZWRTaXplKSwK
LSAgICAgICAgICBjb2RlYy5rTWVzc2FnZUV4cGVjdHNSZXNwb25zZSwgMCk7Ci0gICAgICBidWls
ZGVyLmVuY29kZVN0cnVjdChVc2JEZXZpY2VfR2VuZXJpY1RyYW5zZmVySW5fUGFyYW1zLCBwYXJh
bXNfKTsKLSAgICAgIHZhciBtZXNzYWdlID0gYnVpbGRlci5maW5pc2goKTsKLSAgICAgIHRoaXMu
cmVjZWl2ZXJfLmFjY2VwdEFuZEV4cGVjdFJlc3BvbnNlKG1lc3NhZ2UpLnRoZW4oZnVuY3Rpb24o
bWVzc2FnZSkgewotICAgICAgICB2YXIgcmVhZGVyID0gbmV3IGNvZGVjLk1lc3NhZ2VSZWFkZXIo
bWVzc2FnZSk7Ci0gICAgICAgIHZhciByZXNwb25zZVBhcmFtcyA9Ci0gICAgICAgICAgICByZWFk
ZXIuZGVjb2RlU3RydWN0KFVzYkRldmljZV9HZW5lcmljVHJhbnNmZXJJbl9SZXNwb25zZVBhcmFt
cyk7Ci0gICAgICAgIHJlc29sdmUocmVzcG9uc2VQYXJhbXMpOwotICAgICAgfSkuY2F0Y2goZnVu
Y3Rpb24ocmVzdWx0KSB7Ci0gICAgICAgIHJlamVjdChFcnJvcigiQ29ubmVjdGlvbiBlcnJvcjog
IiArIHJlc3VsdCkpOwotICAgICAgfSk7Ci0gICAgfS5iaW5kKHRoaXMpKTsKLSAgfTsKLSAgVXNi
RGV2aWNlUHRyLnByb3RvdHlwZS5nZW5lcmljVHJhbnNmZXJPdXQgPSBmdW5jdGlvbigpIHsKLSAg
ICByZXR1cm4gVXNiRGV2aWNlUHJveHkucHJvdG90eXBlLmdlbmVyaWNUcmFuc2Zlck91dAotICAg
ICAgICAuYXBwbHkodGhpcy5wdHIuZ2V0UHJveHkoKSwgYXJndW1lbnRzKTsKLSAgfTsKLQotICBV
c2JEZXZpY2VQcm94eS5wcm90b3R5cGUuZ2VuZXJpY1RyYW5zZmVyT3V0ID0gZnVuY3Rpb24oZW5k
cG9pbnROdW1iZXIsIGRhdGEsIHRpbWVvdXQpIHsKLSAgICB2YXIgcGFyYW1zXyA9IG5ldyBVc2JE
ZXZpY2VfR2VuZXJpY1RyYW5zZmVyT3V0X1BhcmFtcygpOwotICAgIHBhcmFtc18uZW5kcG9pbnRO
dW1iZXIgPSBlbmRwb2ludE51bWJlcjsKLSAgICBwYXJhbXNfLmRhdGEgPSBkYXRhOwotICAgIHBh
cmFtc18udGltZW91dCA9IHRpbWVvdXQ7Ci0gICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9u
KHJlc29sdmUsIHJlamVjdCkgewotICAgICAgdmFyIGJ1aWxkZXIgPSBuZXcgY29kZWMuTWVzc2Fn
ZVYxQnVpbGRlcigKLSAgICAgICAgICBrVXNiRGV2aWNlX0dlbmVyaWNUcmFuc2Zlck91dF9OYW1l
LAotICAgICAgICAgIGNvZGVjLmFsaWduKFVzYkRldmljZV9HZW5lcmljVHJhbnNmZXJPdXRfUGFy
YW1zLmVuY29kZWRTaXplKSwKLSAgICAgICAgICBjb2RlYy5rTWVzc2FnZUV4cGVjdHNSZXNwb25z
ZSwgMCk7Ci0gICAgICBidWlsZGVyLmVuY29kZVN0cnVjdChVc2JEZXZpY2VfR2VuZXJpY1RyYW5z
ZmVyT3V0X1BhcmFtcywgcGFyYW1zXyk7Ci0gICAgICB2YXIgbWVzc2FnZSA9IGJ1aWxkZXIuZmlu
aXNoKCk7Ci0gICAgICB0aGlzLnJlY2VpdmVyXy5hY2NlcHRBbmRFeHBlY3RSZXNwb25zZShtZXNz
YWdlKS50aGVuKGZ1bmN0aW9uKG1lc3NhZ2UpIHsKLSAgICAgICAgdmFyIHJlYWRlciA9IG5ldyBj
b2RlYy5NZXNzYWdlUmVhZGVyKG1lc3NhZ2UpOwotICAgICAgICB2YXIgcmVzcG9uc2VQYXJhbXMg
PQotICAgICAgICAgICAgcmVhZGVyLmRlY29kZVN0cnVjdChVc2JEZXZpY2VfR2VuZXJpY1RyYW5z
ZmVyT3V0X1Jlc3BvbnNlUGFyYW1zKTsKLSAgICAgICAgcmVzb2x2ZShyZXNwb25zZVBhcmFtcyk7
Ci0gICAgICB9KS5jYXRjaChmdW5jdGlvbihyZXN1bHQpIHsKLSAgICAgICAgcmVqZWN0KEVycm9y
KCJDb25uZWN0aW9uIGVycm9yOiAiICsgcmVzdWx0KSk7Ci0gICAgICB9KTsKLSAgICB9LmJpbmQo
dGhpcykpOwotICB9OwotICBVc2JEZXZpY2VQdHIucHJvdG90eXBlLmlzb2Nocm9ub3VzVHJhbnNm
ZXJJbiA9IGZ1bmN0aW9uKCkgewotICAgIHJldHVybiBVc2JEZXZpY2VQcm94eS5wcm90b3R5cGUu
aXNvY2hyb25vdXNUcmFuc2ZlckluCi0gICAgICAgIC5hcHBseSh0aGlzLnB0ci5nZXRQcm94eSgp
LCBhcmd1bWVudHMpOwotICB9OwotCi0gIFVzYkRldmljZVByb3h5LnByb3RvdHlwZS5pc29jaHJv
bm91c1RyYW5zZmVySW4gPSBmdW5jdGlvbihlbmRwb2ludE51bWJlciwgcGFja2V0TGVuZ3Rocywg
dGltZW91dCkgewotICAgIHZhciBwYXJhbXNfID0gbmV3IFVzYkRldmljZV9Jc29jaHJvbm91c1Ry
YW5zZmVySW5fUGFyYW1zKCk7Ci0gICAgcGFyYW1zXy5lbmRwb2ludE51bWJlciA9IGVuZHBvaW50
TnVtYmVyOwotICAgIHBhcmFtc18ucGFja2V0TGVuZ3RocyA9IHBhY2tldExlbmd0aHM7Ci0gICAg
cGFyYW1zXy50aW1lb3V0ID0gdGltZW91dDsKLSAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rp
b24ocmVzb2x2ZSwgcmVqZWN0KSB7Ci0gICAgICB2YXIgYnVpbGRlciA9IG5ldyBjb2RlYy5NZXNz
YWdlVjFCdWlsZGVyKAotICAgICAgICAgIGtVc2JEZXZpY2VfSXNvY2hyb25vdXNUcmFuc2Zlcklu
X05hbWUsCi0gICAgICAgICAgY29kZWMuYWxpZ24oVXNiRGV2aWNlX0lzb2Nocm9ub3VzVHJhbnNm
ZXJJbl9QYXJhbXMuZW5jb2RlZFNpemUpLAotICAgICAgICAgIGNvZGVjLmtNZXNzYWdlRXhwZWN0
c1Jlc3BvbnNlLCAwKTsKLSAgICAgIGJ1aWxkZXIuZW5jb2RlU3RydWN0KFVzYkRldmljZV9Jc29j
aHJvbm91c1RyYW5zZmVySW5fUGFyYW1zLCBwYXJhbXNfKTsKLSAgICAgIHZhciBtZXNzYWdlID0g
YnVpbGRlci5maW5pc2goKTsKLSAgICAgIHRoaXMucmVjZWl2ZXJfLmFjY2VwdEFuZEV4cGVjdFJl
c3BvbnNlKG1lc3NhZ2UpLnRoZW4oZnVuY3Rpb24obWVzc2FnZSkgewotICAgICAgICB2YXIgcmVh
ZGVyID0gbmV3IGNvZGVjLk1lc3NhZ2VSZWFkZXIobWVzc2FnZSk7Ci0gICAgICAgIHZhciByZXNw
b25zZVBhcmFtcyA9Ci0gICAgICAgICAgICByZWFkZXIuZGVjb2RlU3RydWN0KFVzYkRldmljZV9J
c29jaHJvbm91c1RyYW5zZmVySW5fUmVzcG9uc2VQYXJhbXMpOwotICAgICAgICByZXNvbHZlKHJl
c3BvbnNlUGFyYW1zKTsKLSAgICAgIH0pLmNhdGNoKGZ1bmN0aW9uKHJlc3VsdCkgewotICAgICAg
ICByZWplY3QoRXJyb3IoIkNvbm5lY3Rpb24gZXJyb3I6ICIgKyByZXN1bHQpKTsKLSAgICAgIH0p
OwotICAgIH0uYmluZCh0aGlzKSk7Ci0gIH07Ci0gIFVzYkRldmljZVB0ci5wcm90b3R5cGUuaXNv
Y2hyb25vdXNUcmFuc2Zlck91dCA9IGZ1bmN0aW9uKCkgewotICAgIHJldHVybiBVc2JEZXZpY2VQ
cm94eS5wcm90b3R5cGUuaXNvY2hyb25vdXNUcmFuc2Zlck91dAotICAgICAgICAuYXBwbHkodGhp
cy5wdHIuZ2V0UHJveHkoKSwgYXJndW1lbnRzKTsKLSAgfTsKLQotICBVc2JEZXZpY2VQcm94eS5w
cm90b3R5cGUuaXNvY2hyb25vdXNUcmFuc2Zlck91dCA9IGZ1bmN0aW9uKGVuZHBvaW50TnVtYmVy
LCBkYXRhLCBwYWNrZXRMZW5ndGhzLCB0aW1lb3V0KSB7Ci0gICAgdmFyIHBhcmFtc18gPSBuZXcg
VXNiRGV2aWNlX0lzb2Nocm9ub3VzVHJhbnNmZXJPdXRfUGFyYW1zKCk7Ci0gICAgcGFyYW1zXy5l
bmRwb2ludE51bWJlciA9IGVuZHBvaW50TnVtYmVyOwotICAgIHBhcmFtc18uZGF0YSA9IGRhdGE7
Ci0gICAgcGFyYW1zXy5wYWNrZXRMZW5ndGhzID0gcGFja2V0TGVuZ3RoczsKLSAgICBwYXJhbXNf
LnRpbWVvdXQgPSB0aW1lb3V0OwotICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNv
bHZlLCByZWplY3QpIHsKLSAgICAgIHZhciBidWlsZGVyID0gbmV3IGNvZGVjLk1lc3NhZ2VWMUJ1
aWxkZXIoCi0gICAgICAgICAga1VzYkRldmljZV9Jc29jaHJvbm91c1RyYW5zZmVyT3V0X05hbWUs
Ci0gICAgICAgICAgY29kZWMuYWxpZ24oVXNiRGV2aWNlX0lzb2Nocm9ub3VzVHJhbnNmZXJPdXRf
UGFyYW1zLmVuY29kZWRTaXplKSwKLSAgICAgICAgICBjb2RlYy5rTWVzc2FnZUV4cGVjdHNSZXNw
b25zZSwgMCk7Ci0gICAgICBidWlsZGVyLmVuY29kZVN0cnVjdChVc2JEZXZpY2VfSXNvY2hyb25v
dXNUcmFuc2Zlck91dF9QYXJhbXMsIHBhcmFtc18pOwotICAgICAgdmFyIG1lc3NhZ2UgPSBidWls
ZGVyLmZpbmlzaCgpOwotICAgICAgdGhpcy5yZWNlaXZlcl8uYWNjZXB0QW5kRXhwZWN0UmVzcG9u
c2UobWVzc2FnZSkudGhlbihmdW5jdGlvbihtZXNzYWdlKSB7Ci0gICAgICAgIHZhciByZWFkZXIg
PSBuZXcgY29kZWMuTWVzc2FnZVJlYWRlcihtZXNzYWdlKTsKLSAgICAgICAgdmFyIHJlc3BvbnNl
UGFyYW1zID0KLSAgICAgICAgICAgIHJlYWRlci5kZWNvZGVTdHJ1Y3QoVXNiRGV2aWNlX0lzb2No
cm9ub3VzVHJhbnNmZXJPdXRfUmVzcG9uc2VQYXJhbXMpOwotICAgICAgICByZXNvbHZlKHJlc3Bv
bnNlUGFyYW1zKTsKLSAgICAgIH0pLmNhdGNoKGZ1bmN0aW9uKHJlc3VsdCkgewotICAgICAgICBy
ZWplY3QoRXJyb3IoIkNvbm5lY3Rpb24gZXJyb3I6ICIgKyByZXN1bHQpKTsKLSAgICAgIH0pOwot
ICAgIH0uYmluZCh0aGlzKSk7Ci0gIH07Ci0KLSAgZnVuY3Rpb24gVXNiRGV2aWNlU3R1YihkZWxl
Z2F0ZSkgewotICAgIHRoaXMuZGVsZWdhdGVfID0gZGVsZWdhdGU7Ci0gIH0KLSAgVXNiRGV2aWNl
U3R1Yi5wcm90b3R5cGUub3BlbiA9IGZ1bmN0aW9uKCkgewotICAgIHJldHVybiB0aGlzLmRlbGVn
YXRlXyAmJiB0aGlzLmRlbGVnYXRlXy5vcGVuICYmIHRoaXMuZGVsZWdhdGVfLm9wZW4oKTsKLSAg
fQotICBVc2JEZXZpY2VTdHViLnByb3RvdHlwZS5jbG9zZSA9IGZ1bmN0aW9uKCkgewotICAgIHJl
dHVybiB0aGlzLmRlbGVnYXRlXyAmJiB0aGlzLmRlbGVnYXRlXy5jbG9zZSAmJiB0aGlzLmRlbGVn
YXRlXy5jbG9zZSgpOwotICB9Ci0gIFVzYkRldmljZVN0dWIucHJvdG90eXBlLnNldENvbmZpZ3Vy
YXRpb24gPSBmdW5jdGlvbih2YWx1ZSkgewotICAgIHJldHVybiB0aGlzLmRlbGVnYXRlXyAmJiB0
aGlzLmRlbGVnYXRlXy5zZXRDb25maWd1cmF0aW9uICYmIHRoaXMuZGVsZWdhdGVfLnNldENvbmZp
Z3VyYXRpb24odmFsdWUpOwotICB9Ci0gIFVzYkRldmljZVN0dWIucHJvdG90eXBlLmNsYWltSW50
ZXJmYWNlID0gZnVuY3Rpb24oaW50ZXJmYWNlTnVtYmVyKSB7Ci0gICAgcmV0dXJuIHRoaXMuZGVs
ZWdhdGVfICYmIHRoaXMuZGVsZWdhdGVfLmNsYWltSW50ZXJmYWNlICYmIHRoaXMuZGVsZWdhdGVf
LmNsYWltSW50ZXJmYWNlKGludGVyZmFjZU51bWJlcik7Ci0gIH0KLSAgVXNiRGV2aWNlU3R1Yi5w
cm90b3R5cGUucmVsZWFzZUludGVyZmFjZSA9IGZ1bmN0aW9uKGludGVyZmFjZU51bWJlcikgewot
ICAgIHJldHVybiB0aGlzLmRlbGVnYXRlXyAmJiB0aGlzLmRlbGVnYXRlXy5yZWxlYXNlSW50ZXJm
YWNlICYmIHRoaXMuZGVsZWdhdGVfLnJlbGVhc2VJbnRlcmZhY2UoaW50ZXJmYWNlTnVtYmVyKTsK
LSAgfQotICBVc2JEZXZpY2VTdHViLnByb3RvdHlwZS5zZXRJbnRlcmZhY2VBbHRlcm5hdGVTZXR0
aW5nID0gZnVuY3Rpb24oaW50ZXJmYWNlTnVtYmVyLCBhbHRlcm5hdGVTZXR0aW5nKSB7Ci0gICAg
cmV0dXJuIHRoaXMuZGVsZWdhdGVfICYmIHRoaXMuZGVsZWdhdGVfLnNldEludGVyZmFjZUFsdGVy
bmF0ZVNldHRpbmcgJiYgdGhpcy5kZWxlZ2F0ZV8uc2V0SW50ZXJmYWNlQWx0ZXJuYXRlU2V0dGlu
ZyhpbnRlcmZhY2VOdW1iZXIsIGFsdGVybmF0ZVNldHRpbmcpOwotICB9Ci0gIFVzYkRldmljZVN0
dWIucHJvdG90eXBlLnJlc2V0ID0gZnVuY3Rpb24oKSB7Ci0gICAgcmV0dXJuIHRoaXMuZGVsZWdh
dGVfICYmIHRoaXMuZGVsZWdhdGVfLnJlc2V0ICYmIHRoaXMuZGVsZWdhdGVfLnJlc2V0KCk7Ci0g
IH0KLSAgVXNiRGV2aWNlU3R1Yi5wcm90b3R5cGUuY2xlYXJIYWx0ID0gZnVuY3Rpb24oZW5kcG9p
bnQpIHsKLSAgICByZXR1cm4gdGhpcy5kZWxlZ2F0ZV8gJiYgdGhpcy5kZWxlZ2F0ZV8uY2xlYXJI
YWx0ICYmIHRoaXMuZGVsZWdhdGVfLmNsZWFySGFsdChlbmRwb2ludCk7Ci0gIH0KLSAgVXNiRGV2
aWNlU3R1Yi5wcm90b3R5cGUuY29udHJvbFRyYW5zZmVySW4gPSBmdW5jdGlvbihwYXJhbXMsIGxl
bmd0aCwgdGltZW91dCkgewotICAgIHJldHVybiB0aGlzLmRlbGVnYXRlXyAmJiB0aGlzLmRlbGVn
YXRlXy5jb250cm9sVHJhbnNmZXJJbiAmJiB0aGlzLmRlbGVnYXRlXy5jb250cm9sVHJhbnNmZXJJ
bihwYXJhbXMsIGxlbmd0aCwgdGltZW91dCk7Ci0gIH0KLSAgVXNiRGV2aWNlU3R1Yi5wcm90b3R5
cGUuY29udHJvbFRyYW5zZmVyT3V0ID0gZnVuY3Rpb24ocGFyYW1zLCBkYXRhLCB0aW1lb3V0KSB7
Ci0gICAgcmV0dXJuIHRoaXMuZGVsZWdhdGVfICYmIHRoaXMuZGVsZWdhdGVfLmNvbnRyb2xUcmFu
c2Zlck91dCAmJiB0aGlzLmRlbGVnYXRlXy5jb250cm9sVHJhbnNmZXJPdXQocGFyYW1zLCBkYXRh
LCB0aW1lb3V0KTsKLSAgfQotICBVc2JEZXZpY2VTdHViLnByb3RvdHlwZS5nZW5lcmljVHJhbnNm
ZXJJbiA9IGZ1bmN0aW9uKGVuZHBvaW50TnVtYmVyLCBsZW5ndGgsIHRpbWVvdXQpIHsKLSAgICBy
ZXR1cm4gdGhpcy5kZWxlZ2F0ZV8gJiYgdGhpcy5kZWxlZ2F0ZV8uZ2VuZXJpY1RyYW5zZmVySW4g
JiYgdGhpcy5kZWxlZ2F0ZV8uZ2VuZXJpY1RyYW5zZmVySW4oZW5kcG9pbnROdW1iZXIsIGxlbmd0
aCwgdGltZW91dCk7Ci0gIH0KLSAgVXNiRGV2aWNlU3R1Yi5wcm90b3R5cGUuZ2VuZXJpY1RyYW5z
ZmVyT3V0ID0gZnVuY3Rpb24oZW5kcG9pbnROdW1iZXIsIGRhdGEsIHRpbWVvdXQpIHsKLSAgICBy
ZXR1cm4gdGhpcy5kZWxlZ2F0ZV8gJiYgdGhpcy5kZWxlZ2F0ZV8uZ2VuZXJpY1RyYW5zZmVyT3V0
ICYmIHRoaXMuZGVsZWdhdGVfLmdlbmVyaWNUcmFuc2Zlck91dChlbmRwb2ludE51bWJlciwgZGF0
YSwgdGltZW91dCk7Ci0gIH0KLSAgVXNiRGV2aWNlU3R1Yi5wcm90b3R5cGUuaXNvY2hyb25vdXNU
cmFuc2ZlckluID0gZnVuY3Rpb24oZW5kcG9pbnROdW1iZXIsIHBhY2tldExlbmd0aHMsIHRpbWVv
dXQpIHsKLSAgICByZXR1cm4gdGhpcy5kZWxlZ2F0ZV8gJiYgdGhpcy5kZWxlZ2F0ZV8uaXNvY2hy
b25vdXNUcmFuc2ZlckluICYmIHRoaXMuZGVsZWdhdGVfLmlzb2Nocm9ub3VzVHJhbnNmZXJJbihl
bmRwb2ludE51bWJlciwgcGFja2V0TGVuZ3RocywgdGltZW91dCk7Ci0gIH0KLSAgVXNiRGV2aWNl
U3R1Yi5wcm90b3R5cGUuaXNvY2hyb25vdXNUcmFuc2Zlck91dCA9IGZ1bmN0aW9uKGVuZHBvaW50
TnVtYmVyLCBkYXRhLCBwYWNrZXRMZW5ndGhzLCB0aW1lb3V0KSB7Ci0gICAgcmV0dXJuIHRoaXMu
ZGVsZWdhdGVfICYmIHRoaXMuZGVsZWdhdGVfLmlzb2Nocm9ub3VzVHJhbnNmZXJPdXQgJiYgdGhp
cy5kZWxlZ2F0ZV8uaXNvY2hyb25vdXNUcmFuc2Zlck91dChlbmRwb2ludE51bWJlciwgZGF0YSwg
cGFja2V0TGVuZ3RocywgdGltZW91dCk7Ci0gIH0KLQotICBVc2JEZXZpY2VTdHViLnByb3RvdHlw
ZS5hY2NlcHQgPSBmdW5jdGlvbihtZXNzYWdlKSB7Ci0gICAgdmFyIHJlYWRlciA9IG5ldyBjb2Rl
Yy5NZXNzYWdlUmVhZGVyKG1lc3NhZ2UpOwotICAgIHN3aXRjaCAocmVhZGVyLm1lc3NhZ2VOYW1l
KSB7Ci0gICAgZGVmYXVsdDoKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gIH07Ci0KLSAg
VXNiRGV2aWNlU3R1Yi5wcm90b3R5cGUuYWNjZXB0V2l0aFJlc3BvbmRlciA9Ci0gICAgICBmdW5j
dGlvbihtZXNzYWdlLCByZXNwb25kZXIpIHsKLSAgICB2YXIgcmVhZGVyID0gbmV3IGNvZGVjLk1l
c3NhZ2VSZWFkZXIobWVzc2FnZSk7Ci0gICAgc3dpdGNoIChyZWFkZXIubWVzc2FnZU5hbWUpIHsK
LSAgICBjYXNlIGtVc2JEZXZpY2VfT3Blbl9OYW1lOgotICAgICAgdmFyIHBhcmFtcyA9IHJlYWRl
ci5kZWNvZGVTdHJ1Y3QoVXNiRGV2aWNlX09wZW5fUGFyYW1zKTsKLSAgICAgIHRoaXMub3Blbigp
LnRoZW4oZnVuY3Rpb24ocmVzcG9uc2UpIHsKLSAgICAgICAgdmFyIHJlc3BvbnNlUGFyYW1zID0K
LSAgICAgICAgICAgIG5ldyBVc2JEZXZpY2VfT3Blbl9SZXNwb25zZVBhcmFtcygpOwotICAgICAg
ICByZXNwb25zZVBhcmFtcy5lcnJvciA9IHJlc3BvbnNlLmVycm9yOwotICAgICAgICB2YXIgYnVp
bGRlciA9IG5ldyBjb2RlYy5NZXNzYWdlVjFCdWlsZGVyKAotICAgICAgICAgICAga1VzYkRldmlj
ZV9PcGVuX05hbWUsCi0gICAgICAgICAgICBjb2RlYy5hbGlnbihVc2JEZXZpY2VfT3Blbl9SZXNw
b25zZVBhcmFtcy5lbmNvZGVkU2l6ZSksCi0gICAgICAgICAgICBjb2RlYy5rTWVzc2FnZUlzUmVz
cG9uc2UsIHJlYWRlci5yZXF1ZXN0SUQpOwotICAgICAgICBidWlsZGVyLmVuY29kZVN0cnVjdChV
c2JEZXZpY2VfT3Blbl9SZXNwb25zZVBhcmFtcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcmVzcG9uc2VQYXJhbXMpOwotICAgICAgICB2YXIgbWVzc2FnZSA9IGJ1aWxkZXIuZmluaXNo
KCk7Ci0gICAgICAgIHJlc3BvbmRlci5hY2NlcHQobWVzc2FnZSk7Ci0gICAgICB9KTsKLSAgICAg
IHJldHVybiB0cnVlOwotICAgIGNhc2Uga1VzYkRldmljZV9DbG9zZV9OYW1lOgotICAgICAgdmFy
IHBhcmFtcyA9IHJlYWRlci5kZWNvZGVTdHJ1Y3QoVXNiRGV2aWNlX0Nsb3NlX1BhcmFtcyk7Ci0g
ICAgICB0aGlzLmNsb3NlKCkudGhlbihmdW5jdGlvbihyZXNwb25zZSkgewotICAgICAgICB2YXIg
cmVzcG9uc2VQYXJhbXMgPQotICAgICAgICAgICAgbmV3IFVzYkRldmljZV9DbG9zZV9SZXNwb25z
ZVBhcmFtcygpOwotICAgICAgICB2YXIgYnVpbGRlciA9IG5ldyBjb2RlYy5NZXNzYWdlVjFCdWls
ZGVyKAotICAgICAgICAgICAga1VzYkRldmljZV9DbG9zZV9OYW1lLAotICAgICAgICAgICAgY29k
ZWMuYWxpZ24oVXNiRGV2aWNlX0Nsb3NlX1Jlc3BvbnNlUGFyYW1zLmVuY29kZWRTaXplKSwKLSAg
ICAgICAgICAgIGNvZGVjLmtNZXNzYWdlSXNSZXNwb25zZSwgcmVhZGVyLnJlcXVlc3RJRCk7Ci0g
ICAgICAgIGJ1aWxkZXIuZW5jb2RlU3RydWN0KFVzYkRldmljZV9DbG9zZV9SZXNwb25zZVBhcmFt
cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2VQYXJhbXMpOwotICAgICAg
ICB2YXIgbWVzc2FnZSA9IGJ1aWxkZXIuZmluaXNoKCk7Ci0gICAgICAgIHJlc3BvbmRlci5hY2Nl
cHQobWVzc2FnZSk7Ci0gICAgICB9KTsKLSAgICAgIHJldHVybiB0cnVlOwotICAgIGNhc2Uga1Vz
YkRldmljZV9TZXRDb25maWd1cmF0aW9uX05hbWU6Ci0gICAgICB2YXIgcGFyYW1zID0gcmVhZGVy
LmRlY29kZVN0cnVjdChVc2JEZXZpY2VfU2V0Q29uZmlndXJhdGlvbl9QYXJhbXMpOwotICAgICAg
dGhpcy5zZXRDb25maWd1cmF0aW9uKHBhcmFtcy52YWx1ZSkudGhlbihmdW5jdGlvbihyZXNwb25z
ZSkgewotICAgICAgICB2YXIgcmVzcG9uc2VQYXJhbXMgPQotICAgICAgICAgICAgbmV3IFVzYkRl
dmljZV9TZXRDb25maWd1cmF0aW9uX1Jlc3BvbnNlUGFyYW1zKCk7Ci0gICAgICAgIHJlc3BvbnNl
UGFyYW1zLnN1Y2Nlc3MgPSByZXNwb25zZS5zdWNjZXNzOwotICAgICAgICB2YXIgYnVpbGRlciA9
IG5ldyBjb2RlYy5NZXNzYWdlVjFCdWlsZGVyKAotICAgICAgICAgICAga1VzYkRldmljZV9TZXRD
b25maWd1cmF0aW9uX05hbWUsCi0gICAgICAgICAgICBjb2RlYy5hbGlnbihVc2JEZXZpY2VfU2V0
Q29uZmlndXJhdGlvbl9SZXNwb25zZVBhcmFtcy5lbmNvZGVkU2l6ZSksCi0gICAgICAgICAgICBj
b2RlYy5rTWVzc2FnZUlzUmVzcG9uc2UsIHJlYWRlci5yZXF1ZXN0SUQpOwotICAgICAgICBidWls
ZGVyLmVuY29kZVN0cnVjdChVc2JEZXZpY2VfU2V0Q29uZmlndXJhdGlvbl9SZXNwb25zZVBhcmFt
cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2VQYXJhbXMpOwotICAgICAg
ICB2YXIgbWVzc2FnZSA9IGJ1aWxkZXIuZmluaXNoKCk7Ci0gICAgICAgIHJlc3BvbmRlci5hY2Nl
cHQobWVzc2FnZSk7Ci0gICAgICB9KTsKLSAgICAgIHJldHVybiB0cnVlOwotICAgIGNhc2Uga1Vz
YkRldmljZV9DbGFpbUludGVyZmFjZV9OYW1lOgotICAgICAgdmFyIHBhcmFtcyA9IHJlYWRlci5k
ZWNvZGVTdHJ1Y3QoVXNiRGV2aWNlX0NsYWltSW50ZXJmYWNlX1BhcmFtcyk7Ci0gICAgICB0aGlz
LmNsYWltSW50ZXJmYWNlKHBhcmFtcy5pbnRlcmZhY2VOdW1iZXIpLnRoZW4oZnVuY3Rpb24ocmVz
cG9uc2UpIHsKLSAgICAgICAgdmFyIHJlc3BvbnNlUGFyYW1zID0KLSAgICAgICAgICAgIG5ldyBV
c2JEZXZpY2VfQ2xhaW1JbnRlcmZhY2VfUmVzcG9uc2VQYXJhbXMoKTsKLSAgICAgICAgcmVzcG9u
c2VQYXJhbXMuc3VjY2VzcyA9IHJlc3BvbnNlLnN1Y2Nlc3M7Ci0gICAgICAgIHZhciBidWlsZGVy
ID0gbmV3IGNvZGVjLk1lc3NhZ2VWMUJ1aWxkZXIoCi0gICAgICAgICAgICBrVXNiRGV2aWNlX0Ns
YWltSW50ZXJmYWNlX05hbWUsCi0gICAgICAgICAgICBjb2RlYy5hbGlnbihVc2JEZXZpY2VfQ2xh
aW1JbnRlcmZhY2VfUmVzcG9uc2VQYXJhbXMuZW5jb2RlZFNpemUpLAotICAgICAgICAgICAgY29k
ZWMua01lc3NhZ2VJc1Jlc3BvbnNlLCByZWFkZXIucmVxdWVzdElEKTsKLSAgICAgICAgYnVpbGRl
ci5lbmNvZGVTdHJ1Y3QoVXNiRGV2aWNlX0NsYWltSW50ZXJmYWNlX1Jlc3BvbnNlUGFyYW1zLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zZVBhcmFtcyk7Ci0gICAgICAgIHZh
ciBtZXNzYWdlID0gYnVpbGRlci5maW5pc2goKTsKLSAgICAgICAgcmVzcG9uZGVyLmFjY2VwdCht
ZXNzYWdlKTsKLSAgICAgIH0pOwotICAgICAgcmV0dXJuIHRydWU7Ci0gICAgY2FzZSBrVXNiRGV2
aWNlX1JlbGVhc2VJbnRlcmZhY2VfTmFtZToKLSAgICAgIHZhciBwYXJhbXMgPSByZWFkZXIuZGVj
b2RlU3RydWN0KFVzYkRldmljZV9SZWxlYXNlSW50ZXJmYWNlX1BhcmFtcyk7Ci0gICAgICB0aGlz
LnJlbGVhc2VJbnRlcmZhY2UocGFyYW1zLmludGVyZmFjZU51bWJlcikudGhlbihmdW5jdGlvbihy
ZXNwb25zZSkgewotICAgICAgICB2YXIgcmVzcG9uc2VQYXJhbXMgPQotICAgICAgICAgICAgbmV3
IFVzYkRldmljZV9SZWxlYXNlSW50ZXJmYWNlX1Jlc3BvbnNlUGFyYW1zKCk7Ci0gICAgICAgIHJl
c3BvbnNlUGFyYW1zLnN1Y2Nlc3MgPSByZXNwb25zZS5zdWNjZXNzOwotICAgICAgICB2YXIgYnVp
bGRlciA9IG5ldyBjb2RlYy5NZXNzYWdlVjFCdWlsZGVyKAotICAgICAgICAgICAga1VzYkRldmlj
ZV9SZWxlYXNlSW50ZXJmYWNlX05hbWUsCi0gICAgICAgICAgICBjb2RlYy5hbGlnbihVc2JEZXZp
Y2VfUmVsZWFzZUludGVyZmFjZV9SZXNwb25zZVBhcmFtcy5lbmNvZGVkU2l6ZSksCi0gICAgICAg
ICAgICBjb2RlYy5rTWVzc2FnZUlzUmVzcG9uc2UsIHJlYWRlci5yZXF1ZXN0SUQpOwotICAgICAg
ICBidWlsZGVyLmVuY29kZVN0cnVjdChVc2JEZXZpY2VfUmVsZWFzZUludGVyZmFjZV9SZXNwb25z
ZVBhcmFtcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2VQYXJhbXMpOwot
ICAgICAgICB2YXIgbWVzc2FnZSA9IGJ1aWxkZXIuZmluaXNoKCk7Ci0gICAgICAgIHJlc3BvbmRl
ci5hY2NlcHQobWVzc2FnZSk7Ci0gICAgICB9KTsKLSAgICAgIHJldHVybiB0cnVlOwotICAgIGNh
c2Uga1VzYkRldmljZV9TZXRJbnRlcmZhY2VBbHRlcm5hdGVTZXR0aW5nX05hbWU6Ci0gICAgICB2
YXIgcGFyYW1zID0gcmVhZGVyLmRlY29kZVN0cnVjdChVc2JEZXZpY2VfU2V0SW50ZXJmYWNlQWx0
ZXJuYXRlU2V0dGluZ19QYXJhbXMpOwotICAgICAgdGhpcy5zZXRJbnRlcmZhY2VBbHRlcm5hdGVT
ZXR0aW5nKHBhcmFtcy5pbnRlcmZhY2VOdW1iZXIsIHBhcmFtcy5hbHRlcm5hdGVTZXR0aW5nKS50
aGVuKGZ1bmN0aW9uKHJlc3BvbnNlKSB7Ci0gICAgICAgIHZhciByZXNwb25zZVBhcmFtcyA9Ci0g
ICAgICAgICAgICBuZXcgVXNiRGV2aWNlX1NldEludGVyZmFjZUFsdGVybmF0ZVNldHRpbmdfUmVz
cG9uc2VQYXJhbXMoKTsKLSAgICAgICAgcmVzcG9uc2VQYXJhbXMuc3VjY2VzcyA9IHJlc3BvbnNl
LnN1Y2Nlc3M7Ci0gICAgICAgIHZhciBidWlsZGVyID0gbmV3IGNvZGVjLk1lc3NhZ2VWMUJ1aWxk
ZXIoCi0gICAgICAgICAgICBrVXNiRGV2aWNlX1NldEludGVyZmFjZUFsdGVybmF0ZVNldHRpbmdf
TmFtZSwKLSAgICAgICAgICAgIGNvZGVjLmFsaWduKFVzYkRldmljZV9TZXRJbnRlcmZhY2VBbHRl
cm5hdGVTZXR0aW5nX1Jlc3BvbnNlUGFyYW1zLmVuY29kZWRTaXplKSwKLSAgICAgICAgICAgIGNv
ZGVjLmtNZXNzYWdlSXNSZXNwb25zZSwgcmVhZGVyLnJlcXVlc3RJRCk7Ci0gICAgICAgIGJ1aWxk
ZXIuZW5jb2RlU3RydWN0KFVzYkRldmljZV9TZXRJbnRlcmZhY2VBbHRlcm5hdGVTZXR0aW5nX1Jl
c3BvbnNlUGFyYW1zLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zZVBhcmFt
cyk7Ci0gICAgICAgIHZhciBtZXNzYWdlID0gYnVpbGRlci5maW5pc2goKTsKLSAgICAgICAgcmVz
cG9uZGVyLmFjY2VwdChtZXNzYWdlKTsKLSAgICAgIH0pOwotICAgICAgcmV0dXJuIHRydWU7Ci0g
ICAgY2FzZSBrVXNiRGV2aWNlX1Jlc2V0X05hbWU6Ci0gICAgICB2YXIgcGFyYW1zID0gcmVhZGVy
LmRlY29kZVN0cnVjdChVc2JEZXZpY2VfUmVzZXRfUGFyYW1zKTsKLSAgICAgIHRoaXMucmVzZXQo
KS50aGVuKGZ1bmN0aW9uKHJlc3BvbnNlKSB7Ci0gICAgICAgIHZhciByZXNwb25zZVBhcmFtcyA9
Ci0gICAgICAgICAgICBuZXcgVXNiRGV2aWNlX1Jlc2V0X1Jlc3BvbnNlUGFyYW1zKCk7Ci0gICAg
ICAgIHJlc3BvbnNlUGFyYW1zLnN1Y2Nlc3MgPSByZXNwb25zZS5zdWNjZXNzOwotICAgICAgICB2
YXIgYnVpbGRlciA9IG5ldyBjb2RlYy5NZXNzYWdlVjFCdWlsZGVyKAotICAgICAgICAgICAga1Vz
YkRldmljZV9SZXNldF9OYW1lLAotICAgICAgICAgICAgY29kZWMuYWxpZ24oVXNiRGV2aWNlX1Jl
c2V0X1Jlc3BvbnNlUGFyYW1zLmVuY29kZWRTaXplKSwKLSAgICAgICAgICAgIGNvZGVjLmtNZXNz
YWdlSXNSZXNwb25zZSwgcmVhZGVyLnJlcXVlc3RJRCk7Ci0gICAgICAgIGJ1aWxkZXIuZW5jb2Rl
U3RydWN0KFVzYkRldmljZV9SZXNldF9SZXNwb25zZVBhcmFtcywKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcmVzcG9uc2VQYXJhbXMpOwotICAgICAgICB2YXIgbWVzc2FnZSA9IGJ1aWxk
ZXIuZmluaXNoKCk7Ci0gICAgICAgIHJlc3BvbmRlci5hY2NlcHQobWVzc2FnZSk7Ci0gICAgICB9
KTsKLSAgICAgIHJldHVybiB0cnVlOwotICAgIGNhc2Uga1VzYkRldmljZV9DbGVhckhhbHRfTmFt
ZToKLSAgICAgIHZhciBwYXJhbXMgPSByZWFkZXIuZGVjb2RlU3RydWN0KFVzYkRldmljZV9DbGVh
ckhhbHRfUGFyYW1zKTsKLSAgICAgIHRoaXMuY2xlYXJIYWx0KHBhcmFtcy5lbmRwb2ludCkudGhl
bihmdW5jdGlvbihyZXNwb25zZSkgewotICAgICAgICB2YXIgcmVzcG9uc2VQYXJhbXMgPQotICAg
ICAgICAgICAgbmV3IFVzYkRldmljZV9DbGVhckhhbHRfUmVzcG9uc2VQYXJhbXMoKTsKLSAgICAg
ICAgcmVzcG9uc2VQYXJhbXMuc3VjY2VzcyA9IHJlc3BvbnNlLnN1Y2Nlc3M7Ci0gICAgICAgIHZh
ciBidWlsZGVyID0gbmV3IGNvZGVjLk1lc3NhZ2VWMUJ1aWxkZXIoCi0gICAgICAgICAgICBrVXNi
RGV2aWNlX0NsZWFySGFsdF9OYW1lLAotICAgICAgICAgICAgY29kZWMuYWxpZ24oVXNiRGV2aWNl
X0NsZWFySGFsdF9SZXNwb25zZVBhcmFtcy5lbmNvZGVkU2l6ZSksCi0gICAgICAgICAgICBjb2Rl
Yy5rTWVzc2FnZUlzUmVzcG9uc2UsIHJlYWRlci5yZXF1ZXN0SUQpOwotICAgICAgICBidWlsZGVy
LmVuY29kZVN0cnVjdChVc2JEZXZpY2VfQ2xlYXJIYWx0X1Jlc3BvbnNlUGFyYW1zLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zZVBhcmFtcyk7Ci0gICAgICAgIHZhciBtZXNz
YWdlID0gYnVpbGRlci5maW5pc2goKTsKLSAgICAgICAgcmVzcG9uZGVyLmFjY2VwdChtZXNzYWdl
KTsKLSAgICAgIH0pOwotICAgICAgcmV0dXJuIHRydWU7Ci0gICAgY2FzZSBrVXNiRGV2aWNlX0Nv
bnRyb2xUcmFuc2ZlckluX05hbWU6Ci0gICAgICB2YXIgcGFyYW1zID0gcmVhZGVyLmRlY29kZVN0
cnVjdChVc2JEZXZpY2VfQ29udHJvbFRyYW5zZmVySW5fUGFyYW1zKTsKLSAgICAgIHRoaXMuY29u
dHJvbFRyYW5zZmVySW4ocGFyYW1zLnBhcmFtcywgcGFyYW1zLmxlbmd0aCwgcGFyYW1zLnRpbWVv
dXQpLnRoZW4oZnVuY3Rpb24ocmVzcG9uc2UpIHsKLSAgICAgICAgdmFyIHJlc3BvbnNlUGFyYW1z
ID0KLSAgICAgICAgICAgIG5ldyBVc2JEZXZpY2VfQ29udHJvbFRyYW5zZmVySW5fUmVzcG9uc2VQ
YXJhbXMoKTsKLSAgICAgICAgcmVzcG9uc2VQYXJhbXMuc3RhdHVzID0gcmVzcG9uc2Uuc3RhdHVz
OwotICAgICAgICByZXNwb25zZVBhcmFtcy5kYXRhID0gcmVzcG9uc2UuZGF0YTsKLSAgICAgICAg
dmFyIGJ1aWxkZXIgPSBuZXcgY29kZWMuTWVzc2FnZVYxQnVpbGRlcigKLSAgICAgICAgICAgIGtV
c2JEZXZpY2VfQ29udHJvbFRyYW5zZmVySW5fTmFtZSwKLSAgICAgICAgICAgIGNvZGVjLmFsaWdu
KFVzYkRldmljZV9Db250cm9sVHJhbnNmZXJJbl9SZXNwb25zZVBhcmFtcy5lbmNvZGVkU2l6ZSks
Ci0gICAgICAgICAgICBjb2RlYy5rTWVzc2FnZUlzUmVzcG9uc2UsIHJlYWRlci5yZXF1ZXN0SUQp
OwotICAgICAgICBidWlsZGVyLmVuY29kZVN0cnVjdChVc2JEZXZpY2VfQ29udHJvbFRyYW5zZmVy
SW5fUmVzcG9uc2VQYXJhbXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNl
UGFyYW1zKTsKLSAgICAgICAgdmFyIG1lc3NhZ2UgPSBidWlsZGVyLmZpbmlzaCgpOwotICAgICAg
ICByZXNwb25kZXIuYWNjZXB0KG1lc3NhZ2UpOwotICAgICAgfSk7Ci0gICAgICByZXR1cm4gdHJ1
ZTsKLSAgICBjYXNlIGtVc2JEZXZpY2VfQ29udHJvbFRyYW5zZmVyT3V0X05hbWU6Ci0gICAgICB2
YXIgcGFyYW1zID0gcmVhZGVyLmRlY29kZVN0cnVjdChVc2JEZXZpY2VfQ29udHJvbFRyYW5zZmVy
T3V0X1BhcmFtcyk7Ci0gICAgICB0aGlzLmNvbnRyb2xUcmFuc2Zlck91dChwYXJhbXMucGFyYW1z
LCBwYXJhbXMuZGF0YSwgcGFyYW1zLnRpbWVvdXQpLnRoZW4oZnVuY3Rpb24ocmVzcG9uc2UpIHsK
LSAgICAgICAgdmFyIHJlc3BvbnNlUGFyYW1zID0KLSAgICAgICAgICAgIG5ldyBVc2JEZXZpY2Vf
Q29udHJvbFRyYW5zZmVyT3V0X1Jlc3BvbnNlUGFyYW1zKCk7Ci0gICAgICAgIHJlc3BvbnNlUGFy
YW1zLnN0YXR1cyA9IHJlc3BvbnNlLnN0YXR1czsKLSAgICAgICAgdmFyIGJ1aWxkZXIgPSBuZXcg
Y29kZWMuTWVzc2FnZVYxQnVpbGRlcigKLSAgICAgICAgICAgIGtVc2JEZXZpY2VfQ29udHJvbFRy
YW5zZmVyT3V0X05hbWUsCi0gICAgICAgICAgICBjb2RlYy5hbGlnbihVc2JEZXZpY2VfQ29udHJv
bFRyYW5zZmVyT3V0X1Jlc3BvbnNlUGFyYW1zLmVuY29kZWRTaXplKSwKLSAgICAgICAgICAgIGNv
ZGVjLmtNZXNzYWdlSXNSZXNwb25zZSwgcmVhZGVyLnJlcXVlc3RJRCk7Ci0gICAgICAgIGJ1aWxk
ZXIuZW5jb2RlU3RydWN0KFVzYkRldmljZV9Db250cm9sVHJhbnNmZXJPdXRfUmVzcG9uc2VQYXJh
bXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlUGFyYW1zKTsKLSAgICAg
ICAgdmFyIG1lc3NhZ2UgPSBidWlsZGVyLmZpbmlzaCgpOwotICAgICAgICByZXNwb25kZXIuYWNj
ZXB0KG1lc3NhZ2UpOwotICAgICAgfSk7Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICBjYXNlIGtV
c2JEZXZpY2VfR2VuZXJpY1RyYW5zZmVySW5fTmFtZToKLSAgICAgIHZhciBwYXJhbXMgPSByZWFk
ZXIuZGVjb2RlU3RydWN0KFVzYkRldmljZV9HZW5lcmljVHJhbnNmZXJJbl9QYXJhbXMpOwotICAg
ICAgdGhpcy5nZW5lcmljVHJhbnNmZXJJbihwYXJhbXMuZW5kcG9pbnROdW1iZXIsIHBhcmFtcy5s
ZW5ndGgsIHBhcmFtcy50aW1lb3V0KS50aGVuKGZ1bmN0aW9uKHJlc3BvbnNlKSB7Ci0gICAgICAg
IHZhciByZXNwb25zZVBhcmFtcyA9Ci0gICAgICAgICAgICBuZXcgVXNiRGV2aWNlX0dlbmVyaWNU
cmFuc2ZlckluX1Jlc3BvbnNlUGFyYW1zKCk7Ci0gICAgICAgIHJlc3BvbnNlUGFyYW1zLnN0YXR1
cyA9IHJlc3BvbnNlLnN0YXR1czsKLSAgICAgICAgcmVzcG9uc2VQYXJhbXMuZGF0YSA9IHJlc3Bv
bnNlLmRhdGE7Ci0gICAgICAgIHZhciBidWlsZGVyID0gbmV3IGNvZGVjLk1lc3NhZ2VWMUJ1aWxk
ZXIoCi0gICAgICAgICAgICBrVXNiRGV2aWNlX0dlbmVyaWNUcmFuc2ZlckluX05hbWUsCi0gICAg
ICAgICAgICBjb2RlYy5hbGlnbihVc2JEZXZpY2VfR2VuZXJpY1RyYW5zZmVySW5fUmVzcG9uc2VQ
YXJhbXMuZW5jb2RlZFNpemUpLAotICAgICAgICAgICAgY29kZWMua01lc3NhZ2VJc1Jlc3BvbnNl
LCByZWFkZXIucmVxdWVzdElEKTsKLSAgICAgICAgYnVpbGRlci5lbmNvZGVTdHJ1Y3QoVXNiRGV2
aWNlX0dlbmVyaWNUcmFuc2ZlckluX1Jlc3BvbnNlUGFyYW1zLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICByZXNwb25zZVBhcmFtcyk7Ci0gICAgICAgIHZhciBtZXNzYWdlID0gYnVpbGRl
ci5maW5pc2goKTsKLSAgICAgICAgcmVzcG9uZGVyLmFjY2VwdChtZXNzYWdlKTsKLSAgICAgIH0p
OwotICAgICAgcmV0dXJuIHRydWU7Ci0gICAgY2FzZSBrVXNiRGV2aWNlX0dlbmVyaWNUcmFuc2Zl
ck91dF9OYW1lOgotICAgICAgdmFyIHBhcmFtcyA9IHJlYWRlci5kZWNvZGVTdHJ1Y3QoVXNiRGV2
aWNlX0dlbmVyaWNUcmFuc2Zlck91dF9QYXJhbXMpOwotICAgICAgdGhpcy5nZW5lcmljVHJhbnNm
ZXJPdXQocGFyYW1zLmVuZHBvaW50TnVtYmVyLCBwYXJhbXMuZGF0YSwgcGFyYW1zLnRpbWVvdXQp
LnRoZW4oZnVuY3Rpb24ocmVzcG9uc2UpIHsKLSAgICAgICAgdmFyIHJlc3BvbnNlUGFyYW1zID0K
LSAgICAgICAgICAgIG5ldyBVc2JEZXZpY2VfR2VuZXJpY1RyYW5zZmVyT3V0X1Jlc3BvbnNlUGFy
YW1zKCk7Ci0gICAgICAgIHJlc3BvbnNlUGFyYW1zLnN0YXR1cyA9IHJlc3BvbnNlLnN0YXR1czsK
LSAgICAgICAgdmFyIGJ1aWxkZXIgPSBuZXcgY29kZWMuTWVzc2FnZVYxQnVpbGRlcigKLSAgICAg
ICAgICAgIGtVc2JEZXZpY2VfR2VuZXJpY1RyYW5zZmVyT3V0X05hbWUsCi0gICAgICAgICAgICBj
b2RlYy5hbGlnbihVc2JEZXZpY2VfR2VuZXJpY1RyYW5zZmVyT3V0X1Jlc3BvbnNlUGFyYW1zLmVu
Y29kZWRTaXplKSwKLSAgICAgICAgICAgIGNvZGVjLmtNZXNzYWdlSXNSZXNwb25zZSwgcmVhZGVy
LnJlcXVlc3RJRCk7Ci0gICAgICAgIGJ1aWxkZXIuZW5jb2RlU3RydWN0KFVzYkRldmljZV9HZW5l
cmljVHJhbnNmZXJPdXRfUmVzcG9uc2VQYXJhbXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHJlc3BvbnNlUGFyYW1zKTsKLSAgICAgICAgdmFyIG1lc3NhZ2UgPSBidWlsZGVyLmZpbmlz
aCgpOwotICAgICAgICByZXNwb25kZXIuYWNjZXB0KG1lc3NhZ2UpOwotICAgICAgfSk7Ci0gICAg
ICByZXR1cm4gdHJ1ZTsKLSAgICBjYXNlIGtVc2JEZXZpY2VfSXNvY2hyb25vdXNUcmFuc2Zlcklu
X05hbWU6Ci0gICAgICB2YXIgcGFyYW1zID0gcmVhZGVyLmRlY29kZVN0cnVjdChVc2JEZXZpY2Vf
SXNvY2hyb25vdXNUcmFuc2ZlckluX1BhcmFtcyk7Ci0gICAgICB0aGlzLmlzb2Nocm9ub3VzVHJh
bnNmZXJJbihwYXJhbXMuZW5kcG9pbnROdW1iZXIsIHBhcmFtcy5wYWNrZXRMZW5ndGhzLCBwYXJh
bXMudGltZW91dCkudGhlbihmdW5jdGlvbihyZXNwb25zZSkgewotICAgICAgICB2YXIgcmVzcG9u
c2VQYXJhbXMgPQotICAgICAgICAgICAgbmV3IFVzYkRldmljZV9Jc29jaHJvbm91c1RyYW5zZmVy
SW5fUmVzcG9uc2VQYXJhbXMoKTsKLSAgICAgICAgcmVzcG9uc2VQYXJhbXMuZGF0YSA9IHJlc3Bv
bnNlLmRhdGE7Ci0gICAgICAgIHJlc3BvbnNlUGFyYW1zLnBhY2tldHMgPSByZXNwb25zZS5wYWNr
ZXRzOwotICAgICAgICB2YXIgYnVpbGRlciA9IG5ldyBjb2RlYy5NZXNzYWdlVjFCdWlsZGVyKAot
ICAgICAgICAgICAga1VzYkRldmljZV9Jc29jaHJvbm91c1RyYW5zZmVySW5fTmFtZSwKLSAgICAg
ICAgICAgIGNvZGVjLmFsaWduKFVzYkRldmljZV9Jc29jaHJvbm91c1RyYW5zZmVySW5fUmVzcG9u
c2VQYXJhbXMuZW5jb2RlZFNpemUpLAotICAgICAgICAgICAgY29kZWMua01lc3NhZ2VJc1Jlc3Bv
bnNlLCByZWFkZXIucmVxdWVzdElEKTsKLSAgICAgICAgYnVpbGRlci5lbmNvZGVTdHJ1Y3QoVXNi
RGV2aWNlX0lzb2Nocm9ub3VzVHJhbnNmZXJJbl9SZXNwb25zZVBhcmFtcywKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcmVzcG9uc2VQYXJhbXMpOwotICAgICAgICB2YXIgbWVzc2FnZSA9
IGJ1aWxkZXIuZmluaXNoKCk7Ci0gICAgICAgIHJlc3BvbmRlci5hY2NlcHQobWVzc2FnZSk7Ci0g
ICAgICB9KTsKLSAgICAgIHJldHVybiB0cnVlOwotICAgIGNhc2Uga1VzYkRldmljZV9Jc29jaHJv
bm91c1RyYW5zZmVyT3V0X05hbWU6Ci0gICAgICB2YXIgcGFyYW1zID0gcmVhZGVyLmRlY29kZVN0
cnVjdChVc2JEZXZpY2VfSXNvY2hyb25vdXNUcmFuc2Zlck91dF9QYXJhbXMpOwotICAgICAgdGhp
cy5pc29jaHJvbm91c1RyYW5zZmVyT3V0KHBhcmFtcy5lbmRwb2ludE51bWJlciwgcGFyYW1zLmRh
dGEsIHBhcmFtcy5wYWNrZXRMZW5ndGhzLCBwYXJhbXMudGltZW91dCkudGhlbihmdW5jdGlvbihy
ZXNwb25zZSkgewotICAgICAgICB2YXIgcmVzcG9uc2VQYXJhbXMgPQotICAgICAgICAgICAgbmV3
IFVzYkRldmljZV9Jc29jaHJvbm91c1RyYW5zZmVyT3V0X1Jlc3BvbnNlUGFyYW1zKCk7Ci0gICAg
ICAgIHJlc3BvbnNlUGFyYW1zLnBhY2tldHMgPSByZXNwb25zZS5wYWNrZXRzOwotICAgICAgICB2
YXIgYnVpbGRlciA9IG5ldyBjb2RlYy5NZXNzYWdlVjFCdWlsZGVyKAotICAgICAgICAgICAga1Vz
YkRldmljZV9Jc29jaHJvbm91c1RyYW5zZmVyT3V0X05hbWUsCi0gICAgICAgICAgICBjb2RlYy5h
bGlnbihVc2JEZXZpY2VfSXNvY2hyb25vdXNUcmFuc2Zlck91dF9SZXNwb25zZVBhcmFtcy5lbmNv
ZGVkU2l6ZSksCi0gICAgICAgICAgICBjb2RlYy5rTWVzc2FnZUlzUmVzcG9uc2UsIHJlYWRlci5y
ZXF1ZXN0SUQpOwotICAgICAgICBidWlsZGVyLmVuY29kZVN0cnVjdChVc2JEZXZpY2VfSXNvY2hy
b25vdXNUcmFuc2Zlck91dF9SZXNwb25zZVBhcmFtcywKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcmVzcG9uc2VQYXJhbXMpOwotICAgICAgICB2YXIgbWVzc2FnZSA9IGJ1aWxkZXIuZmlu
aXNoKCk7Ci0gICAgICAgIHJlc3BvbmRlci5hY2NlcHQobWVzc2FnZSk7Ci0gICAgICB9KTsKLSAg
ICAgIHJldHVybiB0cnVlOwotICAgIGRlZmF1bHQ6Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
fQotICB9OwotCi0gIGZ1bmN0aW9uIHZhbGlkYXRlVXNiRGV2aWNlUmVxdWVzdChtZXNzYWdlVmFs
aWRhdG9yKSB7Ci0gICAgdmFyIG1lc3NhZ2UgPSBtZXNzYWdlVmFsaWRhdG9yLm1lc3NhZ2U7Ci0g
ICAgdmFyIHBhcmFtc0NsYXNzID0gbnVsbDsKLSAgICBzd2l0Y2ggKG1lc3NhZ2UuZ2V0TmFtZSgp
KSB7Ci0gICAgICBjYXNlIGtVc2JEZXZpY2VfT3Blbl9OYW1lOgotICAgICAgICBpZiAobWVzc2Fn
ZS5leHBlY3RzUmVzcG9uc2UoKSkKLSAgICAgICAgICBwYXJhbXNDbGFzcyA9IFVzYkRldmljZV9P
cGVuX1BhcmFtczsKLSAgICAgIGJyZWFrOwotICAgICAgY2FzZSBrVXNiRGV2aWNlX0Nsb3NlX05h
bWU6Ci0gICAgICAgIGlmIChtZXNzYWdlLmV4cGVjdHNSZXNwb25zZSgpKQotICAgICAgICAgIHBh
cmFtc0NsYXNzID0gVXNiRGV2aWNlX0Nsb3NlX1BhcmFtczsKLSAgICAgIGJyZWFrOwotICAgICAg
Y2FzZSBrVXNiRGV2aWNlX1NldENvbmZpZ3VyYXRpb25fTmFtZToKLSAgICAgICAgaWYgKG1lc3Nh
Z2UuZXhwZWN0c1Jlc3BvbnNlKCkpCi0gICAgICAgICAgcGFyYW1zQ2xhc3MgPSBVc2JEZXZpY2Vf
U2V0Q29uZmlndXJhdGlvbl9QYXJhbXM7Ci0gICAgICBicmVhazsKLSAgICAgIGNhc2Uga1VzYkRl
dmljZV9DbGFpbUludGVyZmFjZV9OYW1lOgotICAgICAgICBpZiAobWVzc2FnZS5leHBlY3RzUmVz
cG9uc2UoKSkKLSAgICAgICAgICBwYXJhbXNDbGFzcyA9IFVzYkRldmljZV9DbGFpbUludGVyZmFj
ZV9QYXJhbXM7Ci0gICAgICBicmVhazsKLSAgICAgIGNhc2Uga1VzYkRldmljZV9SZWxlYXNlSW50
ZXJmYWNlX05hbWU6Ci0gICAgICAgIGlmIChtZXNzYWdlLmV4cGVjdHNSZXNwb25zZSgpKQotICAg
ICAgICAgIHBhcmFtc0NsYXNzID0gVXNiRGV2aWNlX1JlbGVhc2VJbnRlcmZhY2VfUGFyYW1zOwot
ICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIGtVc2JEZXZpY2VfU2V0SW50ZXJmYWNlQWx0ZXJuYXRl
U2V0dGluZ19OYW1lOgotICAgICAgICBpZiAobWVzc2FnZS5leHBlY3RzUmVzcG9uc2UoKSkKLSAg
ICAgICAgICBwYXJhbXNDbGFzcyA9IFVzYkRldmljZV9TZXRJbnRlcmZhY2VBbHRlcm5hdGVTZXR0
aW5nX1BhcmFtczsKLSAgICAgIGJyZWFrOwotICAgICAgY2FzZSBrVXNiRGV2aWNlX1Jlc2V0X05h
bWU6Ci0gICAgICAgIGlmIChtZXNzYWdlLmV4cGVjdHNSZXNwb25zZSgpKQotICAgICAgICAgIHBh
cmFtc0NsYXNzID0gVXNiRGV2aWNlX1Jlc2V0X1BhcmFtczsKLSAgICAgIGJyZWFrOwotICAgICAg
Y2FzZSBrVXNiRGV2aWNlX0NsZWFySGFsdF9OYW1lOgotICAgICAgICBpZiAobWVzc2FnZS5leHBl
Y3RzUmVzcG9uc2UoKSkKLSAgICAgICAgICBwYXJhbXNDbGFzcyA9IFVzYkRldmljZV9DbGVhckhh
bHRfUGFyYW1zOwotICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIGtVc2JEZXZpY2VfQ29udHJvbFRy
YW5zZmVySW5fTmFtZToKLSAgICAgICAgaWYgKG1lc3NhZ2UuZXhwZWN0c1Jlc3BvbnNlKCkpCi0g
ICAgICAgICAgcGFyYW1zQ2xhc3MgPSBVc2JEZXZpY2VfQ29udHJvbFRyYW5zZmVySW5fUGFyYW1z
OwotICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIGtVc2JEZXZpY2VfQ29udHJvbFRyYW5zZmVyT3V0
X05hbWU6Ci0gICAgICAgIGlmIChtZXNzYWdlLmV4cGVjdHNSZXNwb25zZSgpKQotICAgICAgICAg
IHBhcmFtc0NsYXNzID0gVXNiRGV2aWNlX0NvbnRyb2xUcmFuc2Zlck91dF9QYXJhbXM7Ci0gICAg
ICBicmVhazsKLSAgICAgIGNhc2Uga1VzYkRldmljZV9HZW5lcmljVHJhbnNmZXJJbl9OYW1lOgot
ICAgICAgICBpZiAobWVzc2FnZS5leHBlY3RzUmVzcG9uc2UoKSkKLSAgICAgICAgICBwYXJhbXND
bGFzcyA9IFVzYkRldmljZV9HZW5lcmljVHJhbnNmZXJJbl9QYXJhbXM7Ci0gICAgICBicmVhazsK
LSAgICAgIGNhc2Uga1VzYkRldmljZV9HZW5lcmljVHJhbnNmZXJPdXRfTmFtZToKLSAgICAgICAg
aWYgKG1lc3NhZ2UuZXhwZWN0c1Jlc3BvbnNlKCkpCi0gICAgICAgICAgcGFyYW1zQ2xhc3MgPSBV
c2JEZXZpY2VfR2VuZXJpY1RyYW5zZmVyT3V0X1BhcmFtczsKLSAgICAgIGJyZWFrOwotICAgICAg
Y2FzZSBrVXNiRGV2aWNlX0lzb2Nocm9ub3VzVHJhbnNmZXJJbl9OYW1lOgotICAgICAgICBpZiAo
bWVzc2FnZS5leHBlY3RzUmVzcG9uc2UoKSkKLSAgICAgICAgICBwYXJhbXNDbGFzcyA9IFVzYkRl
dmljZV9Jc29jaHJvbm91c1RyYW5zZmVySW5fUGFyYW1zOwotICAgICAgYnJlYWs7Ci0gICAgICBj
YXNlIGtVc2JEZXZpY2VfSXNvY2hyb25vdXNUcmFuc2Zlck91dF9OYW1lOgotICAgICAgICBpZiAo
bWVzc2FnZS5leHBlY3RzUmVzcG9uc2UoKSkKLSAgICAgICAgICBwYXJhbXNDbGFzcyA9IFVzYkRl
dmljZV9Jc29jaHJvbm91c1RyYW5zZmVyT3V0X1BhcmFtczsKLSAgICAgIGJyZWFrOwotICAgIH0K
LSAgICBpZiAocGFyYW1zQ2xhc3MgPT09IG51bGwpCi0gICAgICByZXR1cm4gdmFsaWRhdG9yLnZh
bGlkYXRpb25FcnJvci5OT05FOwotICAgIHJldHVybiBwYXJhbXNDbGFzcy52YWxpZGF0ZShtZXNz
YWdlVmFsaWRhdG9yLCBtZXNzYWdlVmFsaWRhdG9yLm1lc3NhZ2UuZ2V0SGVhZGVyTnVtQnl0ZXMo
KSk7Ci0gIH0KLQotICBmdW5jdGlvbiB2YWxpZGF0ZVVzYkRldmljZVJlc3BvbnNlKG1lc3NhZ2VW
YWxpZGF0b3IpIHsKLSAgIHZhciBtZXNzYWdlID0gbWVzc2FnZVZhbGlkYXRvci5tZXNzYWdlOwot
ICAgdmFyIHBhcmFtc0NsYXNzID0gbnVsbDsKLSAgIHN3aXRjaCAobWVzc2FnZS5nZXROYW1lKCkp
IHsKLSAgICAgIGNhc2Uga1VzYkRldmljZV9PcGVuX05hbWU6Ci0gICAgICAgIGlmIChtZXNzYWdl
LmlzUmVzcG9uc2UoKSkKLSAgICAgICAgICBwYXJhbXNDbGFzcyA9IFVzYkRldmljZV9PcGVuX1Jl
c3BvbnNlUGFyYW1zOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2Uga1VzYkRldmljZV9DbG9z
ZV9OYW1lOgotICAgICAgICBpZiAobWVzc2FnZS5pc1Jlc3BvbnNlKCkpCi0gICAgICAgICAgcGFy
YW1zQ2xhc3MgPSBVc2JEZXZpY2VfQ2xvc2VfUmVzcG9uc2VQYXJhbXM7Ci0gICAgICAgIGJyZWFr
OwotICAgICAgY2FzZSBrVXNiRGV2aWNlX1NldENvbmZpZ3VyYXRpb25fTmFtZToKLSAgICAgICAg
aWYgKG1lc3NhZ2UuaXNSZXNwb25zZSgpKQotICAgICAgICAgIHBhcmFtc0NsYXNzID0gVXNiRGV2
aWNlX1NldENvbmZpZ3VyYXRpb25fUmVzcG9uc2VQYXJhbXM7Ci0gICAgICAgIGJyZWFrOwotICAg
ICAgY2FzZSBrVXNiRGV2aWNlX0NsYWltSW50ZXJmYWNlX05hbWU6Ci0gICAgICAgIGlmIChtZXNz
YWdlLmlzUmVzcG9uc2UoKSkKLSAgICAgICAgICBwYXJhbXNDbGFzcyA9IFVzYkRldmljZV9DbGFp
bUludGVyZmFjZV9SZXNwb25zZVBhcmFtczsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIGtV
c2JEZXZpY2VfUmVsZWFzZUludGVyZmFjZV9OYW1lOgotICAgICAgICBpZiAobWVzc2FnZS5pc1Jl
c3BvbnNlKCkpCi0gICAgICAgICAgcGFyYW1zQ2xhc3MgPSBVc2JEZXZpY2VfUmVsZWFzZUludGVy
ZmFjZV9SZXNwb25zZVBhcmFtczsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIGtVc2JEZXZp
Y2VfU2V0SW50ZXJmYWNlQWx0ZXJuYXRlU2V0dGluZ19OYW1lOgotICAgICAgICBpZiAobWVzc2Fn
ZS5pc1Jlc3BvbnNlKCkpCi0gICAgICAgICAgcGFyYW1zQ2xhc3MgPSBVc2JEZXZpY2VfU2V0SW50
ZXJmYWNlQWx0ZXJuYXRlU2V0dGluZ19SZXNwb25zZVBhcmFtczsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgICBjYXNlIGtVc2JEZXZpY2VfUmVzZXRfTmFtZToKLSAgICAgICAgaWYgKG1lc3NhZ2UuaXNS
ZXNwb25zZSgpKQotICAgICAgICAgIHBhcmFtc0NsYXNzID0gVXNiRGV2aWNlX1Jlc2V0X1Jlc3Bv
bnNlUGFyYW1zOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2Uga1VzYkRldmljZV9DbGVhckhh
bHRfTmFtZToKLSAgICAgICAgaWYgKG1lc3NhZ2UuaXNSZXNwb25zZSgpKQotICAgICAgICAgIHBh
cmFtc0NsYXNzID0gVXNiRGV2aWNlX0NsZWFySGFsdF9SZXNwb25zZVBhcmFtczsKLSAgICAgICAg
YnJlYWs7Ci0gICAgICBjYXNlIGtVc2JEZXZpY2VfQ29udHJvbFRyYW5zZmVySW5fTmFtZToKLSAg
ICAgICAgaWYgKG1lc3NhZ2UuaXNSZXNwb25zZSgpKQotICAgICAgICAgIHBhcmFtc0NsYXNzID0g
VXNiRGV2aWNlX0NvbnRyb2xUcmFuc2ZlckluX1Jlc3BvbnNlUGFyYW1zOwotICAgICAgICBicmVh
azsKLSAgICAgIGNhc2Uga1VzYkRldmljZV9Db250cm9sVHJhbnNmZXJPdXRfTmFtZToKLSAgICAg
ICAgaWYgKG1lc3NhZ2UuaXNSZXNwb25zZSgpKQotICAgICAgICAgIHBhcmFtc0NsYXNzID0gVXNi
RGV2aWNlX0NvbnRyb2xUcmFuc2Zlck91dF9SZXNwb25zZVBhcmFtczsKLSAgICAgICAgYnJlYWs7
Ci0gICAgICBjYXNlIGtVc2JEZXZpY2VfR2VuZXJpY1RyYW5zZmVySW5fTmFtZToKLSAgICAgICAg
aWYgKG1lc3NhZ2UuaXNSZXNwb25zZSgpKQotICAgICAgICAgIHBhcmFtc0NsYXNzID0gVXNiRGV2
aWNlX0dlbmVyaWNUcmFuc2ZlckluX1Jlc3BvbnNlUGFyYW1zOwotICAgICAgICBicmVhazsKLSAg
ICAgIGNhc2Uga1VzYkRldmljZV9HZW5lcmljVHJhbnNmZXJPdXRfTmFtZToKLSAgICAgICAgaWYg
KG1lc3NhZ2UuaXNSZXNwb25zZSgpKQotICAgICAgICAgIHBhcmFtc0NsYXNzID0gVXNiRGV2aWNl
X0dlbmVyaWNUcmFuc2Zlck91dF9SZXNwb25zZVBhcmFtczsKLSAgICAgICAgYnJlYWs7Ci0gICAg
ICBjYXNlIGtVc2JEZXZpY2VfSXNvY2hyb25vdXNUcmFuc2ZlckluX05hbWU6Ci0gICAgICAgIGlm
IChtZXNzYWdlLmlzUmVzcG9uc2UoKSkKLSAgICAgICAgICBwYXJhbXNDbGFzcyA9IFVzYkRldmlj
ZV9Jc29jaHJvbm91c1RyYW5zZmVySW5fUmVzcG9uc2VQYXJhbXM7Ci0gICAgICAgIGJyZWFrOwot
ICAgICAgY2FzZSBrVXNiRGV2aWNlX0lzb2Nocm9ub3VzVHJhbnNmZXJPdXRfTmFtZToKLSAgICAg
ICAgaWYgKG1lc3NhZ2UuaXNSZXNwb25zZSgpKQotICAgICAgICAgIHBhcmFtc0NsYXNzID0gVXNi
RGV2aWNlX0lzb2Nocm9ub3VzVHJhbnNmZXJPdXRfUmVzcG9uc2VQYXJhbXM7Ci0gICAgICAgIGJy
ZWFrOwotICAgIH0KLSAgICBpZiAocGFyYW1zQ2xhc3MgPT09IG51bGwpCi0gICAgICByZXR1cm4g
dmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FOwotICAgIHJldHVybiBwYXJhbXNDbGFzcy52
YWxpZGF0ZShtZXNzYWdlVmFsaWRhdG9yLCBtZXNzYWdlVmFsaWRhdG9yLm1lc3NhZ2UuZ2V0SGVh
ZGVyTnVtQnl0ZXMoKSk7Ci0gIH0KLQotICB2YXIgVXNiRGV2aWNlID0gewotICAgIG5hbWU6ICdk
ZXZpY2UubW9qb20uVXNiRGV2aWNlJywKLSAgICBrVmVyc2lvbjogMCwKLSAgICBwdHJDbGFzczog
VXNiRGV2aWNlUHRyLAotICAgIHByb3h5Q2xhc3M6IFVzYkRldmljZVByb3h5LAotICAgIHN0dWJD
bGFzczogVXNiRGV2aWNlU3R1YiwKLSAgICB2YWxpZGF0ZVJlcXVlc3Q6IHZhbGlkYXRlVXNiRGV2
aWNlUmVxdWVzdCwKLSAgICB2YWxpZGF0ZVJlc3BvbnNlOiB2YWxpZGF0ZVVzYkRldmljZVJlc3Bv
bnNlLAotICB9OwotICBVc2JEZXZpY2VTdHViLnByb3RvdHlwZS52YWxpZGF0b3IgPSB2YWxpZGF0
ZVVzYkRldmljZVJlcXVlc3Q7Ci0gIFVzYkRldmljZVByb3h5LnByb3RvdHlwZS52YWxpZGF0b3Ig
PSB2YWxpZGF0ZVVzYkRldmljZVJlc3BvbnNlOwotICB2YXIga1VzYkRldmljZUNsaWVudF9PbkRl
dmljZU9wZW5lZF9OYW1lID0gMDsKLSAgdmFyIGtVc2JEZXZpY2VDbGllbnRfT25EZXZpY2VDbG9z
ZWRfTmFtZSA9IDE7Ci0KLSAgZnVuY3Rpb24gVXNiRGV2aWNlQ2xpZW50UHRyKGhhbmRsZU9yUHRy
SW5mbykgewotICAgIHRoaXMucHRyID0gbmV3IGJpbmRpbmdzLkludGVyZmFjZVB0ckNvbnRyb2xs
ZXIoVXNiRGV2aWNlQ2xpZW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaGFuZGxlT3JQdHJJbmZvKTsKLSAgfQotCi0gIGZ1bmN0aW9uIFVzYkRl
dmljZUNsaWVudEFzc29jaWF0ZWRQdHIoYXNzb2NpYXRlZEludGVyZmFjZVB0ckluZm8pIHsKLSAg
ICB0aGlzLnB0ciA9IG5ldyBhc3NvY2lhdGVkQmluZGluZ3MuQXNzb2NpYXRlZEludGVyZmFjZVB0
ckNvbnRyb2xsZXIoCi0gICAgICAgIFVzYkRldmljZUNsaWVudCwgYXNzb2NpYXRlZEludGVyZmFj
ZVB0ckluZm8pOwotICB9Ci0KLSAgVXNiRGV2aWNlQ2xpZW50QXNzb2NpYXRlZFB0ci5wcm90b3R5
cGUgPQotICAgICAgT2JqZWN0LmNyZWF0ZShVc2JEZXZpY2VDbGllbnRQdHIucHJvdG90eXBlKTsK
LSAgVXNiRGV2aWNlQ2xpZW50QXNzb2NpYXRlZFB0ci5wcm90b3R5cGUuY29uc3RydWN0b3IgPQot
ICAgICAgVXNiRGV2aWNlQ2xpZW50QXNzb2NpYXRlZFB0cjsKLQotICBmdW5jdGlvbiBVc2JEZXZp
Y2VDbGllbnRQcm94eShyZWNlaXZlcikgewotICAgIHRoaXMucmVjZWl2ZXJfID0gcmVjZWl2ZXI7
Ci0gIH0KLSAgVXNiRGV2aWNlQ2xpZW50UHRyLnByb3RvdHlwZS5vbkRldmljZU9wZW5lZCA9IGZ1
bmN0aW9uKCkgewotICAgIHJldHVybiBVc2JEZXZpY2VDbGllbnRQcm94eS5wcm90b3R5cGUub25E
ZXZpY2VPcGVuZWQKLSAgICAgICAgLmFwcGx5KHRoaXMucHRyLmdldFByb3h5KCksIGFyZ3VtZW50
cyk7Ci0gIH07Ci0KLSAgVXNiRGV2aWNlQ2xpZW50UHJveHkucHJvdG90eXBlLm9uRGV2aWNlT3Bl
bmVkID0gZnVuY3Rpb24oKSB7Ci0gICAgdmFyIHBhcmFtc18gPSBuZXcgVXNiRGV2aWNlQ2xpZW50
X09uRGV2aWNlT3BlbmVkX1BhcmFtcygpOwotICAgIHZhciBidWlsZGVyID0gbmV3IGNvZGVjLk1l
c3NhZ2VWMEJ1aWxkZXIoCi0gICAgICAgIGtVc2JEZXZpY2VDbGllbnRfT25EZXZpY2VPcGVuZWRf
TmFtZSwKLSAgICAgICAgY29kZWMuYWxpZ24oVXNiRGV2aWNlQ2xpZW50X09uRGV2aWNlT3BlbmVk
X1BhcmFtcy5lbmNvZGVkU2l6ZSkpOwotICAgIGJ1aWxkZXIuZW5jb2RlU3RydWN0KFVzYkRldmlj
ZUNsaWVudF9PbkRldmljZU9wZW5lZF9QYXJhbXMsIHBhcmFtc18pOwotICAgIHZhciBtZXNzYWdl
ID0gYnVpbGRlci5maW5pc2goKTsKLSAgICB0aGlzLnJlY2VpdmVyXy5hY2NlcHQobWVzc2FnZSk7
Ci0gIH07Ci0gIFVzYkRldmljZUNsaWVudFB0ci5wcm90b3R5cGUub25EZXZpY2VDbG9zZWQgPSBm
dW5jdGlvbigpIHsKLSAgICByZXR1cm4gVXNiRGV2aWNlQ2xpZW50UHJveHkucHJvdG90eXBlLm9u
RGV2aWNlQ2xvc2VkCi0gICAgICAgIC5hcHBseSh0aGlzLnB0ci5nZXRQcm94eSgpLCBhcmd1bWVu
dHMpOwotICB9OwotCi0gIFVzYkRldmljZUNsaWVudFByb3h5LnByb3RvdHlwZS5vbkRldmljZUNs
b3NlZCA9IGZ1bmN0aW9uKCkgewotICAgIHZhciBwYXJhbXNfID0gbmV3IFVzYkRldmljZUNsaWVu
dF9PbkRldmljZUNsb3NlZF9QYXJhbXMoKTsKLSAgICB2YXIgYnVpbGRlciA9IG5ldyBjb2RlYy5N
ZXNzYWdlVjBCdWlsZGVyKAotICAgICAgICBrVXNiRGV2aWNlQ2xpZW50X09uRGV2aWNlQ2xvc2Vk
X05hbWUsCi0gICAgICAgIGNvZGVjLmFsaWduKFVzYkRldmljZUNsaWVudF9PbkRldmljZUNsb3Nl
ZF9QYXJhbXMuZW5jb2RlZFNpemUpKTsKLSAgICBidWlsZGVyLmVuY29kZVN0cnVjdChVc2JEZXZp
Y2VDbGllbnRfT25EZXZpY2VDbG9zZWRfUGFyYW1zLCBwYXJhbXNfKTsKLSAgICB2YXIgbWVzc2Fn
ZSA9IGJ1aWxkZXIuZmluaXNoKCk7Ci0gICAgdGhpcy5yZWNlaXZlcl8uYWNjZXB0KG1lc3NhZ2Up
OwotICB9OwotCi0gIGZ1bmN0aW9uIFVzYkRldmljZUNsaWVudFN0dWIoZGVsZWdhdGUpIHsKLSAg
ICB0aGlzLmRlbGVnYXRlXyA9IGRlbGVnYXRlOwotICB9Ci0gIFVzYkRldmljZUNsaWVudFN0dWIu
cHJvdG90eXBlLm9uRGV2aWNlT3BlbmVkID0gZnVuY3Rpb24oKSB7Ci0gICAgcmV0dXJuIHRoaXMu
ZGVsZWdhdGVfICYmIHRoaXMuZGVsZWdhdGVfLm9uRGV2aWNlT3BlbmVkICYmIHRoaXMuZGVsZWdh
dGVfLm9uRGV2aWNlT3BlbmVkKCk7Ci0gIH0KLSAgVXNiRGV2aWNlQ2xpZW50U3R1Yi5wcm90b3R5
cGUub25EZXZpY2VDbG9zZWQgPSBmdW5jdGlvbigpIHsKLSAgICByZXR1cm4gdGhpcy5kZWxlZ2F0
ZV8gJiYgdGhpcy5kZWxlZ2F0ZV8ub25EZXZpY2VDbG9zZWQgJiYgdGhpcy5kZWxlZ2F0ZV8ub25E
ZXZpY2VDbG9zZWQoKTsKLSAgfQotCi0gIFVzYkRldmljZUNsaWVudFN0dWIucHJvdG90eXBlLmFj
Y2VwdCA9IGZ1bmN0aW9uKG1lc3NhZ2UpIHsKLSAgICB2YXIgcmVhZGVyID0gbmV3IGNvZGVjLk1l
c3NhZ2VSZWFkZXIobWVzc2FnZSk7Ci0gICAgc3dpdGNoIChyZWFkZXIubWVzc2FnZU5hbWUpIHsK
LSAgICBjYXNlIGtVc2JEZXZpY2VDbGllbnRfT25EZXZpY2VPcGVuZWRfTmFtZToKLSAgICAgIHZh
ciBwYXJhbXMgPSByZWFkZXIuZGVjb2RlU3RydWN0KFVzYkRldmljZUNsaWVudF9PbkRldmljZU9w
ZW5lZF9QYXJhbXMpOwotICAgICAgdGhpcy5vbkRldmljZU9wZW5lZCgpOwotICAgICAgcmV0dXJu
IHRydWU7Ci0gICAgY2FzZSBrVXNiRGV2aWNlQ2xpZW50X09uRGV2aWNlQ2xvc2VkX05hbWU6Ci0g
ICAgICB2YXIgcGFyYW1zID0gcmVhZGVyLmRlY29kZVN0cnVjdChVc2JEZXZpY2VDbGllbnRfT25E
ZXZpY2VDbG9zZWRfUGFyYW1zKTsKLSAgICAgIHRoaXMub25EZXZpY2VDbG9zZWQoKTsKLSAgICAg
IHJldHVybiB0cnVlOwotICAgIGRlZmF1bHQ6Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQot
ICB9OwotCi0gIFVzYkRldmljZUNsaWVudFN0dWIucHJvdG90eXBlLmFjY2VwdFdpdGhSZXNwb25k
ZXIgPQotICAgICAgZnVuY3Rpb24obWVzc2FnZSwgcmVzcG9uZGVyKSB7Ci0gICAgdmFyIHJlYWRl
ciA9IG5ldyBjb2RlYy5NZXNzYWdlUmVhZGVyKG1lc3NhZ2UpOwotICAgIHN3aXRjaCAocmVhZGVy
Lm1lc3NhZ2VOYW1lKSB7Ci0gICAgZGVmYXVsdDoKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9
Ci0gIH07Ci0KLSAgZnVuY3Rpb24gdmFsaWRhdGVVc2JEZXZpY2VDbGllbnRSZXF1ZXN0KG1lc3Nh
Z2VWYWxpZGF0b3IpIHsKLSAgICB2YXIgbWVzc2FnZSA9IG1lc3NhZ2VWYWxpZGF0b3IubWVzc2Fn
ZTsKLSAgICB2YXIgcGFyYW1zQ2xhc3MgPSBudWxsOwotICAgIHN3aXRjaCAobWVzc2FnZS5nZXRO
YW1lKCkpIHsKLSAgICAgIGNhc2Uga1VzYkRldmljZUNsaWVudF9PbkRldmljZU9wZW5lZF9OYW1l
OgotICAgICAgICBpZiAoIW1lc3NhZ2UuZXhwZWN0c1Jlc3BvbnNlKCkgJiYgIW1lc3NhZ2UuaXNS
ZXNwb25zZSgpKQotICAgICAgICAgIHBhcmFtc0NsYXNzID0gVXNiRGV2aWNlQ2xpZW50X09uRGV2
aWNlT3BlbmVkX1BhcmFtczsKLSAgICAgIGJyZWFrOwotICAgICAgY2FzZSBrVXNiRGV2aWNlQ2xp
ZW50X09uRGV2aWNlQ2xvc2VkX05hbWU6Ci0gICAgICAgIGlmICghbWVzc2FnZS5leHBlY3RzUmVz
cG9uc2UoKSAmJiAhbWVzc2FnZS5pc1Jlc3BvbnNlKCkpCi0gICAgICAgICAgcGFyYW1zQ2xhc3Mg
PSBVc2JEZXZpY2VDbGllbnRfT25EZXZpY2VDbG9zZWRfUGFyYW1zOwotICAgICAgYnJlYWs7Ci0g
ICAgfQotICAgIGlmIChwYXJhbXNDbGFzcyA9PT0gbnVsbCkKLSAgICAgIHJldHVybiB2YWxpZGF0
b3IudmFsaWRhdGlvbkVycm9yLk5PTkU7Ci0gICAgcmV0dXJuIHBhcmFtc0NsYXNzLnZhbGlkYXRl
KG1lc3NhZ2VWYWxpZGF0b3IsIG1lc3NhZ2VWYWxpZGF0b3IubWVzc2FnZS5nZXRIZWFkZXJOdW1C
eXRlcygpKTsKLSAgfQotCi0gIGZ1bmN0aW9uIHZhbGlkYXRlVXNiRGV2aWNlQ2xpZW50UmVzcG9u
c2UobWVzc2FnZVZhbGlkYXRvcikgewotICAgIHJldHVybiB2YWxpZGF0b3IudmFsaWRhdGlvbkVy
cm9yLk5PTkU7Ci0gIH0KLQotICB2YXIgVXNiRGV2aWNlQ2xpZW50ID0gewotICAgIG5hbWU6ICdk
ZXZpY2UubW9qb20uVXNiRGV2aWNlQ2xpZW50JywKLSAgICBrVmVyc2lvbjogMCwKLSAgICBwdHJD
bGFzczogVXNiRGV2aWNlQ2xpZW50UHRyLAotICAgIHByb3h5Q2xhc3M6IFVzYkRldmljZUNsaWVu
dFByb3h5LAotICAgIHN0dWJDbGFzczogVXNiRGV2aWNlQ2xpZW50U3R1YiwKLSAgICB2YWxpZGF0
ZVJlcXVlc3Q6IHZhbGlkYXRlVXNiRGV2aWNlQ2xpZW50UmVxdWVzdCwKLSAgICB2YWxpZGF0ZVJl
c3BvbnNlOiBudWxsLAotICB9OwotICBVc2JEZXZpY2VDbGllbnRTdHViLnByb3RvdHlwZS52YWxp
ZGF0b3IgPSB2YWxpZGF0ZVVzYkRldmljZUNsaWVudFJlcXVlc3Q7Ci0gIFVzYkRldmljZUNsaWVu
dFByb3h5LnByb3RvdHlwZS52YWxpZGF0b3IgPSBudWxsOwotICBleHBvcnRzLlVzYk9wZW5EZXZp
Y2VFcnJvciA9IFVzYk9wZW5EZXZpY2VFcnJvcjsKLSAgZXhwb3J0cy5Vc2JUcmFuc2ZlckRpcmVj
dGlvbiA9IFVzYlRyYW5zZmVyRGlyZWN0aW9uOwotICBleHBvcnRzLlVzYkNvbnRyb2xUcmFuc2Zl
clR5cGUgPSBVc2JDb250cm9sVHJhbnNmZXJUeXBlOwotICBleHBvcnRzLlVzYkNvbnRyb2xUcmFu
c2ZlclJlY2lwaWVudCA9IFVzYkNvbnRyb2xUcmFuc2ZlclJlY2lwaWVudDsKLSAgZXhwb3J0cy5V
c2JUcmFuc2ZlclR5cGUgPSBVc2JUcmFuc2ZlclR5cGU7Ci0gIGV4cG9ydHMuVXNiU3luY2hyb25p
emF0aW9uVHlwZSA9IFVzYlN5bmNocm9uaXphdGlvblR5cGU7Ci0gIGV4cG9ydHMuVXNiVXNhZ2VU
eXBlID0gVXNiVXNhZ2VUeXBlOwotICBleHBvcnRzLlVzYlRyYW5zZmVyU3RhdHVzID0gVXNiVHJh
bnNmZXJTdGF0dXM7Ci0gIGV4cG9ydHMuVXNiRW5kcG9pbnRJbmZvID0gVXNiRW5kcG9pbnRJbmZv
OwotICBleHBvcnRzLlVzYkFsdGVybmF0ZUludGVyZmFjZUluZm8gPSBVc2JBbHRlcm5hdGVJbnRl
cmZhY2VJbmZvOwotICBleHBvcnRzLlVzYkludGVyZmFjZUluZm8gPSBVc2JJbnRlcmZhY2VJbmZv
OwotICBleHBvcnRzLlVzYkNvbmZpZ3VyYXRpb25JbmZvID0gVXNiQ29uZmlndXJhdGlvbkluZm87
Ci0gIGV4cG9ydHMuVXNiRGV2aWNlSW5mbyA9IFVzYkRldmljZUluZm87Ci0gIGV4cG9ydHMuVXNi
Q29udHJvbFRyYW5zZmVyUGFyYW1zID0gVXNiQ29udHJvbFRyYW5zZmVyUGFyYW1zOwotICBleHBv
cnRzLlVzYklzb2Nocm9ub3VzUGFja2V0ID0gVXNiSXNvY2hyb25vdXNQYWNrZXQ7Ci0gIGV4cG9y
dHMuVXNiRGV2aWNlID0gVXNiRGV2aWNlOwotICBleHBvcnRzLlVzYkRldmljZVB0ciA9IFVzYkRl
dmljZVB0cjsKLSAgZXhwb3J0cy5Vc2JEZXZpY2VBc3NvY2lhdGVkUHRyID0gVXNiRGV2aWNlQXNz
b2NpYXRlZFB0cjsKLSAgZXhwb3J0cy5Vc2JEZXZpY2VDbGllbnQgPSBVc2JEZXZpY2VDbGllbnQ7
Ci0gIGV4cG9ydHMuVXNiRGV2aWNlQ2xpZW50UHRyID0gVXNiRGV2aWNlQ2xpZW50UHRyOwotICBl
eHBvcnRzLlVzYkRldmljZUNsaWVudEFzc29jaWF0ZWRQdHIgPSBVc2JEZXZpY2VDbGllbnRBc3Nv
Y2lhdGVkUHRyOwotfSkoKTsKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93
ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL2RldmljZS5tb2pvbS5qcy5oZWFk
ZXJzIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJj
ZXMvY2hyb21pdW0vZGV2aWNlLm1vam9tLmpzLmhlYWRlcnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDY4MDVjMzIzZGY1YTk3NTIzMTY0OGI4MzBlMzNjZTE4M2MzY2JiZDMuLjAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvTGF5b3V0VGVzdHMvaW1w
b3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vZGV2aWNlLm1v
am9tLmpzLmhlYWRlcnMKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi1Db250ZW50LVR5cGU6
IHRleHQvamF2YXNjcmlwdDsgY2hhcnNldD11dGYtOApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMv
aW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vZGV2aWNl
X2VudW1lcmF0aW9uX29wdGlvbnMubW9qb20uanMgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mv
d2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS9kZXZpY2VfZW51bWVyYXRpb25f
b3B0aW9ucy5tb2pvbS5qcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWE3NzVhZDM2
ODc4ZjJjMmEzY2YwNWRiNTU2OTdiODUxZTJhNGRiNy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMAotLS0gYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRm
b3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS9kZXZpY2VfZW51bWVyYXRpb25fb3B0aW9ucy5t
b2pvbS5qcworKysgL2Rldi9udWxsCkBAIC0xLDE4NCArMCwwIEBACi0vLyBDb3B5cmlnaHQgMjAx
NCBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0
aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBj
YW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLSd1c2Ugc3RyaWN0JzsKLQot
KGZ1bmN0aW9uKCkgewotICB2YXIgbW9qb21JZCA9ICdkZXZpY2UvdXNiL3B1YmxpYy9tb2pvbS9k
ZXZpY2VfZW51bWVyYXRpb25fb3B0aW9ucy5tb2pvbSc7Ci0gIGlmIChtb2pvLmludGVybmFsLmlz
TW9qb21Mb2FkZWQobW9qb21JZCkpIHsKLSAgICBjb25zb2xlLndhcm4oJ1RoZSBmb2xsb3dpbmcg
bW9qb20gaXMgbG9hZGVkIG11bHRpcGxlIHRpbWVzOiAnICsgbW9qb21JZCk7Ci0gICAgcmV0dXJu
OwotICB9Ci0gIG1vam8uaW50ZXJuYWwubWFya01vam9tTG9hZGVkKG1vam9tSWQpOwotICB2YXIg
YmluZGluZ3MgPSBtb2pvOwotICB2YXIgYXNzb2NpYXRlZEJpbmRpbmdzID0gbW9qbzsKLSAgdmFy
IGNvZGVjID0gbW9qby5pbnRlcm5hbDsKLSAgdmFyIHZhbGlkYXRvciA9IG1vam8uaW50ZXJuYWw7
Ci0KLSAgdmFyIGV4cG9ydHMgPSBtb2pvLmludGVybmFsLmV4cG9zZU5hbWVzcGFjZSgnZGV2aWNl
Lm1vam9tJyk7Ci0gIHZhciBzdHJpbmcxNiQgPQotICAgICAgbW9qby5pbnRlcm5hbC5leHBvc2VO
YW1lc3BhY2UoJ21vam9CYXNlLm1vam9tJyk7Ci0gIGlmIChtb2pvLmNvbmZpZy5hdXRvTG9hZE1v
am9tRGVwcykgewotICAgIG1vam8uaW50ZXJuYWwubG9hZE1vam9tSWZOZWNlc3NhcnkoCi0gICAg
ICAgICdtb2pvL3B1YmxpYy9tb2pvbS9iYXNlL3N0cmluZzE2Lm1vam9tJywgJy4uLy4uLy4uLy4u
L21vam8vcHVibGljL21vam9tL2Jhc2Uvc3RyaW5nMTYubW9qb20uanMnKTsKLSAgfQotCi0KLQot
ICBmdW5jdGlvbiBVc2JEZXZpY2VGaWx0ZXIodmFsdWVzKSB7Ci0gICAgdGhpcy5pbml0RGVmYXVs
dHNfKCk7Ci0gICAgdGhpcy5pbml0RmllbGRzXyh2YWx1ZXMpOwotICB9Ci0KLQotICBVc2JEZXZp
Y2VGaWx0ZXIucHJvdG90eXBlLmluaXREZWZhdWx0c18gPSBmdW5jdGlvbigpIHsKLSAgICB0aGlz
Lmhhc1ZlbmRvcklkID0gZmFsc2U7Ci0gICAgdGhpcy5oYXNQcm9kdWN0SWQgPSBmYWxzZTsKLSAg
ICB0aGlzLmhhc0NsYXNzQ29kZSA9IGZhbHNlOwotICAgIHRoaXMuaGFzU3ViY2xhc3NDb2RlID0g
ZmFsc2U7Ci0gICAgdGhpcy5oYXNQcm90b2NvbENvZGUgPSBmYWxzZTsKLSAgICB0aGlzLmNsYXNz
Q29kZSA9IDA7Ci0gICAgdGhpcy52ZW5kb3JJZCA9IDA7Ci0gICAgdGhpcy5wcm9kdWN0SWQgPSAw
OwotICAgIHRoaXMuc3ViY2xhc3NDb2RlID0gMDsKLSAgICB0aGlzLnByb3RvY29sQ29kZSA9IDA7
Ci0gICAgdGhpcy5zZXJpYWxOdW1iZXIgPSBudWxsOwotICB9OwotICBVc2JEZXZpY2VGaWx0ZXIu
cHJvdG90eXBlLmluaXRGaWVsZHNfID0gZnVuY3Rpb24oZmllbGRzKSB7Ci0gICAgZm9yKHZhciBm
aWVsZCBpbiBmaWVsZHMpIHsKLSAgICAgICAgaWYgKHRoaXMuaGFzT3duUHJvcGVydHkoZmllbGQp
KQotICAgICAgICAgIHRoaXNbZmllbGRdID0gZmllbGRzW2ZpZWxkXTsKLSAgICB9Ci0gIH07Ci0K
LSAgVXNiRGV2aWNlRmlsdGVyLnZhbGlkYXRlID0gZnVuY3Rpb24obWVzc2FnZVZhbGlkYXRvciwg
b2Zmc2V0KSB7Ci0gICAgdmFyIGVycjsKLSAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlk
YXRlU3RydWN0SGVhZGVyKG9mZnNldCwgY29kZWMua1N0cnVjdEhlYWRlclNpemUpOwotICAgIGlm
IChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKLSAgICAgICAgcmV0dXJu
IGVycjsKLQotICAgIHZhciBrVmVyc2lvblNpemVzID0gWwotICAgICAge3ZlcnNpb246IDAsIG51
bUJ5dGVzOiAyNH0KLSAgICBdOwotICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVT
dHJ1Y3RWZXJzaW9uKG9mZnNldCwga1ZlcnNpb25TaXplcyk7Ci0gICAgaWYgKGVyciAhPT0gdmFs
aWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQotICAgICAgICByZXR1cm4gZXJyOwotCi0KLQot
Ci0KLQotCi0KLQotCi0KLQotICAgIC8vIHZhbGlkYXRlIFVzYkRldmljZUZpbHRlci5zZXJpYWxO
dW1iZXIKLSAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0UG9pbnRlcihv
ZmZzZXQgKyBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDgsIHN0cmluZzE2JC5TdHJpbmcxNiwg
dHJ1ZSk7Ci0gICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQot
ICAgICAgICByZXR1cm4gZXJyOwotCi0gICAgcmV0dXJuIHZhbGlkYXRvci52YWxpZGF0aW9uRXJy
b3IuTk9ORTsKLSAgfTsKLQotICBVc2JEZXZpY2VGaWx0ZXIuZW5jb2RlZFNpemUgPSBjb2RlYy5r
U3RydWN0SGVhZGVyU2l6ZSArIDE2OwotCi0gIFVzYkRldmljZUZpbHRlci5kZWNvZGUgPSBmdW5j
dGlvbihkZWNvZGVyKSB7Ci0gICAgdmFyIHBhY2tlZDsKLSAgICB2YXIgdmFsID0gbmV3IFVzYkRl
dmljZUZpbHRlcigpOwotICAgIHZhciBudW1iZXJPZkJ5dGVzID0gZGVjb2Rlci5yZWFkVWludDMy
KCk7Ci0gICAgdmFyIHZlcnNpb24gPSBkZWNvZGVyLnJlYWRVaW50MzIoKTsKLSAgICBwYWNrZWQg
PSBkZWNvZGVyLnJlYWRVaW50OCgpOwotICAgIHZhbC5oYXNWZW5kb3JJZCA9IChwYWNrZWQgPj4g
MCkgJiAxID8gdHJ1ZSA6IGZhbHNlOwotICAgIHZhbC5oYXNQcm9kdWN0SWQgPSAocGFja2VkID4+
IDEpICYgMSA/IHRydWUgOiBmYWxzZTsKLSAgICB2YWwuaGFzQ2xhc3NDb2RlID0gKHBhY2tlZCA+
PiAyKSAmIDEgPyB0cnVlIDogZmFsc2U7Ci0gICAgdmFsLmhhc1N1YmNsYXNzQ29kZSA9IChwYWNr
ZWQgPj4gMykgJiAxID8gdHJ1ZSA6IGZhbHNlOwotICAgIHZhbC5oYXNQcm90b2NvbENvZGUgPSAo
cGFja2VkID4+IDQpICYgMSA/IHRydWUgOiBmYWxzZTsKLSAgICB2YWwuY2xhc3NDb2RlID0gZGVj
b2Rlci5kZWNvZGVTdHJ1Y3QoY29kZWMuVWludDgpOwotICAgIHZhbC52ZW5kb3JJZCA9IGRlY29k
ZXIuZGVjb2RlU3RydWN0KGNvZGVjLlVpbnQxNik7Ci0gICAgdmFsLnByb2R1Y3RJZCA9IGRlY29k
ZXIuZGVjb2RlU3RydWN0KGNvZGVjLlVpbnQxNik7Ci0gICAgdmFsLnN1YmNsYXNzQ29kZSA9IGRl
Y29kZXIuZGVjb2RlU3RydWN0KGNvZGVjLlVpbnQ4KTsKLSAgICB2YWwucHJvdG9jb2xDb2RlID0g
ZGVjb2Rlci5kZWNvZGVTdHJ1Y3QoY29kZWMuVWludDgpOwotICAgIHZhbC5zZXJpYWxOdW1iZXIg
PSBkZWNvZGVyLmRlY29kZVN0cnVjdFBvaW50ZXIoc3RyaW5nMTYkLlN0cmluZzE2KTsKLSAgICBy
ZXR1cm4gdmFsOwotICB9OwotCi0gIFVzYkRldmljZUZpbHRlci5lbmNvZGUgPSBmdW5jdGlvbihl
bmNvZGVyLCB2YWwpIHsKLSAgICB2YXIgcGFja2VkOwotICAgIGVuY29kZXIud3JpdGVVaW50MzIo
VXNiRGV2aWNlRmlsdGVyLmVuY29kZWRTaXplKTsKLSAgICBlbmNvZGVyLndyaXRlVWludDMyKDAp
OwotICAgIHBhY2tlZCA9IDA7Ci0gICAgcGFja2VkIHw9ICh2YWwuaGFzVmVuZG9ySWQgJiAxKSA8
PCAwCi0gICAgcGFja2VkIHw9ICh2YWwuaGFzUHJvZHVjdElkICYgMSkgPDwgMQotICAgIHBhY2tl
ZCB8PSAodmFsLmhhc0NsYXNzQ29kZSAmIDEpIDw8IDIKLSAgICBwYWNrZWQgfD0gKHZhbC5oYXNT
dWJjbGFzc0NvZGUgJiAxKSA8PCAzCi0gICAgcGFja2VkIHw9ICh2YWwuaGFzUHJvdG9jb2xDb2Rl
ICYgMSkgPDwgNAotICAgIGVuY29kZXIud3JpdGVVaW50OChwYWNrZWQpOwotICAgIGVuY29kZXIu
ZW5jb2RlU3RydWN0KGNvZGVjLlVpbnQ4LCB2YWwuY2xhc3NDb2RlKTsKLSAgICBlbmNvZGVyLmVu
Y29kZVN0cnVjdChjb2RlYy5VaW50MTYsIHZhbC52ZW5kb3JJZCk7Ci0gICAgZW5jb2Rlci5lbmNv
ZGVTdHJ1Y3QoY29kZWMuVWludDE2LCB2YWwucHJvZHVjdElkKTsKLSAgICBlbmNvZGVyLmVuY29k
ZVN0cnVjdChjb2RlYy5VaW50OCwgdmFsLnN1YmNsYXNzQ29kZSk7Ci0gICAgZW5jb2Rlci5lbmNv
ZGVTdHJ1Y3QoY29kZWMuVWludDgsIHZhbC5wcm90b2NvbENvZGUpOwotICAgIGVuY29kZXIuZW5j
b2RlU3RydWN0UG9pbnRlcihzdHJpbmcxNiQuU3RyaW5nMTYsIHZhbC5zZXJpYWxOdW1iZXIpOwot
ICB9OwotICBmdW5jdGlvbiBVc2JFbnVtZXJhdGlvbk9wdGlvbnModmFsdWVzKSB7Ci0gICAgdGhp
cy5pbml0RGVmYXVsdHNfKCk7Ci0gICAgdGhpcy5pbml0RmllbGRzXyh2YWx1ZXMpOwotICB9Ci0K
LQotICBVc2JFbnVtZXJhdGlvbk9wdGlvbnMucHJvdG90eXBlLmluaXREZWZhdWx0c18gPSBmdW5j
dGlvbigpIHsKLSAgICB0aGlzLmZpbHRlcnMgPSBudWxsOwotICB9OwotICBVc2JFbnVtZXJhdGlv
bk9wdGlvbnMucHJvdG90eXBlLmluaXRGaWVsZHNfID0gZnVuY3Rpb24oZmllbGRzKSB7Ci0gICAg
Zm9yKHZhciBmaWVsZCBpbiBmaWVsZHMpIHsKLSAgICAgICAgaWYgKHRoaXMuaGFzT3duUHJvcGVy
dHkoZmllbGQpKQotICAgICAgICAgIHRoaXNbZmllbGRdID0gZmllbGRzW2ZpZWxkXTsKLSAgICB9
Ci0gIH07Ci0KLSAgVXNiRW51bWVyYXRpb25PcHRpb25zLnZhbGlkYXRlID0gZnVuY3Rpb24obWVz
c2FnZVZhbGlkYXRvciwgb2Zmc2V0KSB7Ci0gICAgdmFyIGVycjsKLSAgICBlcnIgPSBtZXNzYWdl
VmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0SGVhZGVyKG9mZnNldCwgY29kZWMua1N0cnVjdEhlYWRl
clNpemUpOwotICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkK
LSAgICAgICAgcmV0dXJuIGVycjsKLQotICAgIHZhciBrVmVyc2lvblNpemVzID0gWwotICAgICAg
e3ZlcnNpb246IDAsIG51bUJ5dGVzOiAxNn0KLSAgICBdOwotICAgIGVyciA9IG1lc3NhZ2VWYWxp
ZGF0b3IudmFsaWRhdGVTdHJ1Y3RWZXJzaW9uKG9mZnNldCwga1ZlcnNpb25TaXplcyk7Ci0gICAg
aWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQotICAgICAgICByZXR1
cm4gZXJyOwotCi0KLSAgICAvLyB2YWxpZGF0ZSBVc2JFbnVtZXJhdGlvbk9wdGlvbnMuZmlsdGVy
cwotICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVBcnJheVBvaW50ZXIob2Zmc2V0
ICsgY29kZWMua1N0cnVjdEhlYWRlclNpemUgKyAwLCA4LCBuZXcgY29kZWMuUG9pbnRlclRvKFVz
YkRldmljZUZpbHRlciksIGZhbHNlLCBbMF0sIDApOwotICAgIGlmIChlcnIgIT09IHZhbGlkYXRv
ci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKLSAgICAgICAgcmV0dXJuIGVycjsKLQotICAgIHJldHVy
biB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkU7Ci0gIH07Ci0KLSAgVXNiRW51bWVyYXRp
b25PcHRpb25zLmVuY29kZWRTaXplID0gY29kZWMua1N0cnVjdEhlYWRlclNpemUgKyA4OwotCi0g
IFVzYkVudW1lcmF0aW9uT3B0aW9ucy5kZWNvZGUgPSBmdW5jdGlvbihkZWNvZGVyKSB7Ci0gICAg
dmFyIHBhY2tlZDsKLSAgICB2YXIgdmFsID0gbmV3IFVzYkVudW1lcmF0aW9uT3B0aW9ucygpOwot
ICAgIHZhciBudW1iZXJPZkJ5dGVzID0gZGVjb2Rlci5yZWFkVWludDMyKCk7Ci0gICAgdmFyIHZl
cnNpb24gPSBkZWNvZGVyLnJlYWRVaW50MzIoKTsKLSAgICB2YWwuZmlsdGVycyA9IGRlY29kZXIu
ZGVjb2RlQXJyYXlQb2ludGVyKG5ldyBjb2RlYy5Qb2ludGVyVG8oVXNiRGV2aWNlRmlsdGVyKSk7
Ci0gICAgcmV0dXJuIHZhbDsKLSAgfTsKLQotICBVc2JFbnVtZXJhdGlvbk9wdGlvbnMuZW5jb2Rl
ID0gZnVuY3Rpb24oZW5jb2RlciwgdmFsKSB7Ci0gICAgdmFyIHBhY2tlZDsKLSAgICBlbmNvZGVy
LndyaXRlVWludDMyKFVzYkVudW1lcmF0aW9uT3B0aW9ucy5lbmNvZGVkU2l6ZSk7Ci0gICAgZW5j
b2Rlci53cml0ZVVpbnQzMigwKTsKLSAgICBlbmNvZGVyLmVuY29kZUFycmF5UG9pbnRlcihuZXcg
Y29kZWMuUG9pbnRlclRvKFVzYkRldmljZUZpbHRlciksIHZhbC5maWx0ZXJzKTsKLSAgfTsKLSAg
ZXhwb3J0cy5Vc2JEZXZpY2VGaWx0ZXIgPSBVc2JEZXZpY2VGaWx0ZXI7Ci0gIGV4cG9ydHMuVXNi
RW51bWVyYXRpb25PcHRpb25zID0gVXNiRW51bWVyYXRpb25PcHRpb25zOwotfSkoKTsKXCBObyBu
ZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93
M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS9kZXZpY2VfZW51bWVyYXRp
b25fb3B0aW9ucy5tb2pvbS5qcy5oZWFkZXJzIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dl
Yi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vZGV2aWNlX2VudW1lcmF0aW9uX29w
dGlvbnMubW9qb20uanMuaGVhZGVycwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmM2
MWEzNGE0ZWMyZTc1MDk2ZGIwZWI5Zjc3NDhiMTQyZjBkYjdiYi4uMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2Vi
LXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS9kZXZpY2VfZW51bWVyYXRpb25fb3B0
aW9ucy5tb2pvbS5qcy5oZWFkZXJzCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotQ29udGVu
dC1UeXBlOiB0ZXh0L2phdmFzY3JpcHQ7IGNoYXJzZXQ9dXRmLTgKXCBObyBuZXdsaW5lIGF0IGVu
ZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRm
b3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS9kZXZpY2VfbWFuYWdlcl9jbGllbnQubW9qb20u
anMgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNl
cy9jaHJvbWl1bS9kZXZpY2VfbWFuYWdlcl9jbGllbnQubW9qb20uanMKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDQzOWY2NDY1NzRkZmE3ODVkOGY0ZDE1OTk0NTk3ZWQxNTZkYWU2OTUu
LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvTGF5b3V0VGVz
dHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vZGV2
aWNlX21hbmFnZXJfY2xpZW50Lm1vam9tLmpzCisrKyAvZGV2L251bGwKQEAgLTEsMjYyICswLDAg
QEAKLS8vIENvcHlyaWdodCAyMDE0IFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qt
c3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4K
LQotJ3VzZSBzdHJpY3QnOwotCi0oZnVuY3Rpb24oKSB7Ci0gIHZhciBtb2pvbUlkID0gJ2Rldmlj
ZS91c2IvcHVibGljL21vam9tL2RldmljZV9tYW5hZ2VyX2NsaWVudC5tb2pvbSc7Ci0gIGlmICht
b2pvLmludGVybmFsLmlzTW9qb21Mb2FkZWQobW9qb21JZCkpIHsKLSAgICBjb25zb2xlLndhcm4o
J1RoZSBmb2xsb3dpbmcgbW9qb20gaXMgbG9hZGVkIG11bHRpcGxlIHRpbWVzOiAnICsgbW9qb21J
ZCk7Ci0gICAgcmV0dXJuOwotICB9Ci0gIG1vam8uaW50ZXJuYWwubWFya01vam9tTG9hZGVkKG1v
am9tSWQpOwotICB2YXIgYmluZGluZ3MgPSBtb2pvOwotICB2YXIgYXNzb2NpYXRlZEJpbmRpbmdz
ID0gbW9qbzsKLSAgdmFyIGNvZGVjID0gbW9qby5pbnRlcm5hbDsKLSAgdmFyIHZhbGlkYXRvciA9
IG1vam8uaW50ZXJuYWw7Ci0KLSAgdmFyIGV4cG9ydHMgPSBtb2pvLmludGVybmFsLmV4cG9zZU5h
bWVzcGFjZSgnZGV2aWNlLm1vam9tJyk7Ci0gIHZhciBkZXZpY2UkID0KLSAgICAgIG1vam8uaW50
ZXJuYWwuZXhwb3NlTmFtZXNwYWNlKCdkZXZpY2UubW9qb20nKTsKLSAgaWYgKG1vam8uY29uZmln
LmF1dG9Mb2FkTW9qb21EZXBzKSB7Ci0gICAgbW9qby5pbnRlcm5hbC5sb2FkTW9qb21JZk5lY2Vz
c2FyeSgKLSAgICAgICAgJ2RldmljZS91c2IvcHVibGljL21vam9tL2RldmljZS5tb2pvbScsICdk
ZXZpY2UubW9qb20uanMnKTsKLSAgfQotCi0KLQotICBmdW5jdGlvbiBVc2JEZXZpY2VNYW5hZ2Vy
Q2xpZW50X09uRGV2aWNlQWRkZWRfUGFyYW1zKHZhbHVlcykgewotICAgIHRoaXMuaW5pdERlZmF1
bHRzXygpOwotICAgIHRoaXMuaW5pdEZpZWxkc18odmFsdWVzKTsKLSAgfQotCi0KLSAgVXNiRGV2
aWNlTWFuYWdlckNsaWVudF9PbkRldmljZUFkZGVkX1BhcmFtcy5wcm90b3R5cGUuaW5pdERlZmF1
bHRzXyA9IGZ1bmN0aW9uKCkgewotICAgIHRoaXMuZGV2aWNlSW5mbyA9IG51bGw7Ci0gIH07Ci0g
IFVzYkRldmljZU1hbmFnZXJDbGllbnRfT25EZXZpY2VBZGRlZF9QYXJhbXMucHJvdG90eXBlLmlu
aXRGaWVsZHNfID0gZnVuY3Rpb24oZmllbGRzKSB7Ci0gICAgZm9yKHZhciBmaWVsZCBpbiBmaWVs
ZHMpIHsKLSAgICAgICAgaWYgKHRoaXMuaGFzT3duUHJvcGVydHkoZmllbGQpKQotICAgICAgICAg
IHRoaXNbZmllbGRdID0gZmllbGRzW2ZpZWxkXTsKLSAgICB9Ci0gIH07Ci0KLSAgVXNiRGV2aWNl
TWFuYWdlckNsaWVudF9PbkRldmljZUFkZGVkX1BhcmFtcy52YWxpZGF0ZSA9IGZ1bmN0aW9uKG1l
c3NhZ2VWYWxpZGF0b3IsIG9mZnNldCkgewotICAgIHZhciBlcnI7Ci0gICAgZXJyID0gbWVzc2Fn
ZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdEhlYWRlcihvZmZzZXQsIGNvZGVjLmtTdHJ1Y3RIZWFk
ZXJTaXplKTsKLSAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUp
Ci0gICAgICAgIHJldHVybiBlcnI7Ci0KLSAgICB2YXIga1ZlcnNpb25TaXplcyA9IFsKLSAgICAg
IHt2ZXJzaW9uOiAwLCBudW1CeXRlczogMTZ9Ci0gICAgXTsKLSAgICBlcnIgPSBtZXNzYWdlVmFs
aWRhdG9yLnZhbGlkYXRlU3RydWN0VmVyc2lvbihvZmZzZXQsIGtWZXJzaW9uU2l6ZXMpOwotICAg
IGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKLSAgICAgICAgcmV0
dXJuIGVycjsKLQotCi0gICAgLy8gdmFsaWRhdGUgVXNiRGV2aWNlTWFuYWdlckNsaWVudF9PbkRl
dmljZUFkZGVkX1BhcmFtcy5kZXZpY2VJbmZvCi0gICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52
YWxpZGF0ZVN0cnVjdFBvaW50ZXIob2Zmc2V0ICsgY29kZWMua1N0cnVjdEhlYWRlclNpemUgKyAw
LCBkZXZpY2UkLlVzYkRldmljZUluZm8sIGZhbHNlKTsKLSAgICBpZiAoZXJyICE9PSB2YWxpZGF0
b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCi0gICAgICAgIHJldHVybiBlcnI7Ci0KLSAgICByZXR1
cm4gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FOwotICB9OwotCi0gIFVzYkRldmljZU1h
bmFnZXJDbGllbnRfT25EZXZpY2VBZGRlZF9QYXJhbXMuZW5jb2RlZFNpemUgPSBjb2RlYy5rU3Ry
dWN0SGVhZGVyU2l6ZSArIDg7Ci0KLSAgVXNiRGV2aWNlTWFuYWdlckNsaWVudF9PbkRldmljZUFk
ZGVkX1BhcmFtcy5kZWNvZGUgPSBmdW5jdGlvbihkZWNvZGVyKSB7Ci0gICAgdmFyIHBhY2tlZDsK
LSAgICB2YXIgdmFsID0gbmV3IFVzYkRldmljZU1hbmFnZXJDbGllbnRfT25EZXZpY2VBZGRlZF9Q
YXJhbXMoKTsKLSAgICB2YXIgbnVtYmVyT2ZCeXRlcyA9IGRlY29kZXIucmVhZFVpbnQzMigpOwot
ICAgIHZhciB2ZXJzaW9uID0gZGVjb2Rlci5yZWFkVWludDMyKCk7Ci0gICAgdmFsLmRldmljZUlu
Zm8gPSBkZWNvZGVyLmRlY29kZVN0cnVjdFBvaW50ZXIoZGV2aWNlJC5Vc2JEZXZpY2VJbmZvKTsK
LSAgICByZXR1cm4gdmFsOwotICB9OwotCi0gIFVzYkRldmljZU1hbmFnZXJDbGllbnRfT25EZXZp
Y2VBZGRlZF9QYXJhbXMuZW5jb2RlID0gZnVuY3Rpb24oZW5jb2RlciwgdmFsKSB7Ci0gICAgdmFy
IHBhY2tlZDsKLSAgICBlbmNvZGVyLndyaXRlVWludDMyKFVzYkRldmljZU1hbmFnZXJDbGllbnRf
T25EZXZpY2VBZGRlZF9QYXJhbXMuZW5jb2RlZFNpemUpOwotICAgIGVuY29kZXIud3JpdGVVaW50
MzIoMCk7Ci0gICAgZW5jb2Rlci5lbmNvZGVTdHJ1Y3RQb2ludGVyKGRldmljZSQuVXNiRGV2aWNl
SW5mbywgdmFsLmRldmljZUluZm8pOwotICB9OwotICBmdW5jdGlvbiBVc2JEZXZpY2VNYW5hZ2Vy
Q2xpZW50X09uRGV2aWNlUmVtb3ZlZF9QYXJhbXModmFsdWVzKSB7Ci0gICAgdGhpcy5pbml0RGVm
YXVsdHNfKCk7Ci0gICAgdGhpcy5pbml0RmllbGRzXyh2YWx1ZXMpOwotICB9Ci0KLQotICBVc2JE
ZXZpY2VNYW5hZ2VyQ2xpZW50X09uRGV2aWNlUmVtb3ZlZF9QYXJhbXMucHJvdG90eXBlLmluaXRE
ZWZhdWx0c18gPSBmdW5jdGlvbigpIHsKLSAgICB0aGlzLmRldmljZUluZm8gPSBudWxsOwotICB9
OwotICBVc2JEZXZpY2VNYW5hZ2VyQ2xpZW50X09uRGV2aWNlUmVtb3ZlZF9QYXJhbXMucHJvdG90
eXBlLmluaXRGaWVsZHNfID0gZnVuY3Rpb24oZmllbGRzKSB7Ci0gICAgZm9yKHZhciBmaWVsZCBp
biBmaWVsZHMpIHsKLSAgICAgICAgaWYgKHRoaXMuaGFzT3duUHJvcGVydHkoZmllbGQpKQotICAg
ICAgICAgIHRoaXNbZmllbGRdID0gZmllbGRzW2ZpZWxkXTsKLSAgICB9Ci0gIH07Ci0KLSAgVXNi
RGV2aWNlTWFuYWdlckNsaWVudF9PbkRldmljZVJlbW92ZWRfUGFyYW1zLnZhbGlkYXRlID0gZnVu
Y3Rpb24obWVzc2FnZVZhbGlkYXRvciwgb2Zmc2V0KSB7Ci0gICAgdmFyIGVycjsKLSAgICBlcnIg
PSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0SGVhZGVyKG9mZnNldCwgY29kZWMua1N0
cnVjdEhlYWRlclNpemUpOwotICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJy
b3IuTk9ORSkKLSAgICAgICAgcmV0dXJuIGVycjsKLQotICAgIHZhciBrVmVyc2lvblNpemVzID0g
WwotICAgICAge3ZlcnNpb246IDAsIG51bUJ5dGVzOiAxNn0KLSAgICBdOwotICAgIGVyciA9IG1l
c3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RWZXJzaW9uKG9mZnNldCwga1ZlcnNpb25TaXpl
cyk7Ci0gICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQotICAg
ICAgICByZXR1cm4gZXJyOwotCi0KLSAgICAvLyB2YWxpZGF0ZSBVc2JEZXZpY2VNYW5hZ2VyQ2xp
ZW50X09uRGV2aWNlUmVtb3ZlZF9QYXJhbXMuZGV2aWNlSW5mbwotICAgIGVyciA9IG1lc3NhZ2VW
YWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RQb2ludGVyKG9mZnNldCArIGNvZGVjLmtTdHJ1Y3RIZWFk
ZXJTaXplICsgMCwgZGV2aWNlJC5Vc2JEZXZpY2VJbmZvLCBmYWxzZSk7Ci0gICAgaWYgKGVyciAh
PT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQotICAgICAgICByZXR1cm4gZXJyOwot
Ci0gICAgcmV0dXJuIHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORTsKLSAgfTsKLQotICBV
c2JEZXZpY2VNYW5hZ2VyQ2xpZW50X09uRGV2aWNlUmVtb3ZlZF9QYXJhbXMuZW5jb2RlZFNpemUg
PSBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDg7Ci0KLSAgVXNiRGV2aWNlTWFuYWdlckNsaWVu
dF9PbkRldmljZVJlbW92ZWRfUGFyYW1zLmRlY29kZSA9IGZ1bmN0aW9uKGRlY29kZXIpIHsKLSAg
ICB2YXIgcGFja2VkOwotICAgIHZhciB2YWwgPSBuZXcgVXNiRGV2aWNlTWFuYWdlckNsaWVudF9P
bkRldmljZVJlbW92ZWRfUGFyYW1zKCk7Ci0gICAgdmFyIG51bWJlck9mQnl0ZXMgPSBkZWNvZGVy
LnJlYWRVaW50MzIoKTsKLSAgICB2YXIgdmVyc2lvbiA9IGRlY29kZXIucmVhZFVpbnQzMigpOwot
ICAgIHZhbC5kZXZpY2VJbmZvID0gZGVjb2Rlci5kZWNvZGVTdHJ1Y3RQb2ludGVyKGRldmljZSQu
VXNiRGV2aWNlSW5mbyk7Ci0gICAgcmV0dXJuIHZhbDsKLSAgfTsKLQotICBVc2JEZXZpY2VNYW5h
Z2VyQ2xpZW50X09uRGV2aWNlUmVtb3ZlZF9QYXJhbXMuZW5jb2RlID0gZnVuY3Rpb24oZW5jb2Rl
ciwgdmFsKSB7Ci0gICAgdmFyIHBhY2tlZDsKLSAgICBlbmNvZGVyLndyaXRlVWludDMyKFVzYkRl
dmljZU1hbmFnZXJDbGllbnRfT25EZXZpY2VSZW1vdmVkX1BhcmFtcy5lbmNvZGVkU2l6ZSk7Ci0g
ICAgZW5jb2Rlci53cml0ZVVpbnQzMigwKTsKLSAgICBlbmNvZGVyLmVuY29kZVN0cnVjdFBvaW50
ZXIoZGV2aWNlJC5Vc2JEZXZpY2VJbmZvLCB2YWwuZGV2aWNlSW5mbyk7Ci0gIH07Ci0gIHZhciBr
VXNiRGV2aWNlTWFuYWdlckNsaWVudF9PbkRldmljZUFkZGVkX05hbWUgPSAwOwotICB2YXIga1Vz
YkRldmljZU1hbmFnZXJDbGllbnRfT25EZXZpY2VSZW1vdmVkX05hbWUgPSAxOwotCi0gIGZ1bmN0
aW9uIFVzYkRldmljZU1hbmFnZXJDbGllbnRQdHIoaGFuZGxlT3JQdHJJbmZvKSB7Ci0gICAgdGhp
cy5wdHIgPSBuZXcgYmluZGluZ3MuSW50ZXJmYWNlUHRyQ29udHJvbGxlcihVc2JEZXZpY2VNYW5h
Z2VyQ2xpZW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaGFuZGxlT3JQdHJJbmZvKTsKLSAgfQotCi0gIGZ1bmN0aW9uIFVzYkRldmljZU1hbmFn
ZXJDbGllbnRBc3NvY2lhdGVkUHRyKGFzc29jaWF0ZWRJbnRlcmZhY2VQdHJJbmZvKSB7Ci0gICAg
dGhpcy5wdHIgPSBuZXcgYXNzb2NpYXRlZEJpbmRpbmdzLkFzc29jaWF0ZWRJbnRlcmZhY2VQdHJD
b250cm9sbGVyKAotICAgICAgICBVc2JEZXZpY2VNYW5hZ2VyQ2xpZW50LCBhc3NvY2lhdGVkSW50
ZXJmYWNlUHRySW5mbyk7Ci0gIH0KLQotICBVc2JEZXZpY2VNYW5hZ2VyQ2xpZW50QXNzb2NpYXRl
ZFB0ci5wcm90b3R5cGUgPQotICAgICAgT2JqZWN0LmNyZWF0ZShVc2JEZXZpY2VNYW5hZ2VyQ2xp
ZW50UHRyLnByb3RvdHlwZSk7Ci0gIFVzYkRldmljZU1hbmFnZXJDbGllbnRBc3NvY2lhdGVkUHRy
LnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9Ci0gICAgICBVc2JEZXZpY2VNYW5hZ2VyQ2xpZW50QXNz
b2NpYXRlZFB0cjsKLQotICBmdW5jdGlvbiBVc2JEZXZpY2VNYW5hZ2VyQ2xpZW50UHJveHkocmVj
ZWl2ZXIpIHsKLSAgICB0aGlzLnJlY2VpdmVyXyA9IHJlY2VpdmVyOwotICB9Ci0gIFVzYkRldmlj
ZU1hbmFnZXJDbGllbnRQdHIucHJvdG90eXBlLm9uRGV2aWNlQWRkZWQgPSBmdW5jdGlvbigpIHsK
LSAgICByZXR1cm4gVXNiRGV2aWNlTWFuYWdlckNsaWVudFByb3h5LnByb3RvdHlwZS5vbkRldmlj
ZUFkZGVkCi0gICAgICAgIC5hcHBseSh0aGlzLnB0ci5nZXRQcm94eSgpLCBhcmd1bWVudHMpOwot
ICB9OwotCi0gIFVzYkRldmljZU1hbmFnZXJDbGllbnRQcm94eS5wcm90b3R5cGUub25EZXZpY2VB
ZGRlZCA9IGZ1bmN0aW9uKGRldmljZUluZm8pIHsKLSAgICB2YXIgcGFyYW1zXyA9IG5ldyBVc2JE
ZXZpY2VNYW5hZ2VyQ2xpZW50X09uRGV2aWNlQWRkZWRfUGFyYW1zKCk7Ci0gICAgcGFyYW1zXy5k
ZXZpY2VJbmZvID0gZGV2aWNlSW5mbzsKLSAgICB2YXIgYnVpbGRlciA9IG5ldyBjb2RlYy5NZXNz
YWdlVjBCdWlsZGVyKAotICAgICAgICBrVXNiRGV2aWNlTWFuYWdlckNsaWVudF9PbkRldmljZUFk
ZGVkX05hbWUsCi0gICAgICAgIGNvZGVjLmFsaWduKFVzYkRldmljZU1hbmFnZXJDbGllbnRfT25E
ZXZpY2VBZGRlZF9QYXJhbXMuZW5jb2RlZFNpemUpKTsKLSAgICBidWlsZGVyLmVuY29kZVN0cnVj
dChVc2JEZXZpY2VNYW5hZ2VyQ2xpZW50X09uRGV2aWNlQWRkZWRfUGFyYW1zLCBwYXJhbXNfKTsK
LSAgICB2YXIgbWVzc2FnZSA9IGJ1aWxkZXIuZmluaXNoKCk7Ci0gICAgdGhpcy5yZWNlaXZlcl8u
YWNjZXB0KG1lc3NhZ2UpOwotICB9OwotICBVc2JEZXZpY2VNYW5hZ2VyQ2xpZW50UHRyLnByb3Rv
dHlwZS5vbkRldmljZVJlbW92ZWQgPSBmdW5jdGlvbigpIHsKLSAgICByZXR1cm4gVXNiRGV2aWNl
TWFuYWdlckNsaWVudFByb3h5LnByb3RvdHlwZS5vbkRldmljZVJlbW92ZWQKLSAgICAgICAgLmFw
cGx5KHRoaXMucHRyLmdldFByb3h5KCksIGFyZ3VtZW50cyk7Ci0gIH07Ci0KLSAgVXNiRGV2aWNl
TWFuYWdlckNsaWVudFByb3h5LnByb3RvdHlwZS5vbkRldmljZVJlbW92ZWQgPSBmdW5jdGlvbihk
ZXZpY2VJbmZvKSB7Ci0gICAgdmFyIHBhcmFtc18gPSBuZXcgVXNiRGV2aWNlTWFuYWdlckNsaWVu
dF9PbkRldmljZVJlbW92ZWRfUGFyYW1zKCk7Ci0gICAgcGFyYW1zXy5kZXZpY2VJbmZvID0gZGV2
aWNlSW5mbzsKLSAgICB2YXIgYnVpbGRlciA9IG5ldyBjb2RlYy5NZXNzYWdlVjBCdWlsZGVyKAot
ICAgICAgICBrVXNiRGV2aWNlTWFuYWdlckNsaWVudF9PbkRldmljZVJlbW92ZWRfTmFtZSwKLSAg
ICAgICAgY29kZWMuYWxpZ24oVXNiRGV2aWNlTWFuYWdlckNsaWVudF9PbkRldmljZVJlbW92ZWRf
UGFyYW1zLmVuY29kZWRTaXplKSk7Ci0gICAgYnVpbGRlci5lbmNvZGVTdHJ1Y3QoVXNiRGV2aWNl
TWFuYWdlckNsaWVudF9PbkRldmljZVJlbW92ZWRfUGFyYW1zLCBwYXJhbXNfKTsKLSAgICB2YXIg
bWVzc2FnZSA9IGJ1aWxkZXIuZmluaXNoKCk7Ci0gICAgdGhpcy5yZWNlaXZlcl8uYWNjZXB0KG1l
c3NhZ2UpOwotICB9OwotCi0gIGZ1bmN0aW9uIFVzYkRldmljZU1hbmFnZXJDbGllbnRTdHViKGRl
bGVnYXRlKSB7Ci0gICAgdGhpcy5kZWxlZ2F0ZV8gPSBkZWxlZ2F0ZTsKLSAgfQotICBVc2JEZXZp
Y2VNYW5hZ2VyQ2xpZW50U3R1Yi5wcm90b3R5cGUub25EZXZpY2VBZGRlZCA9IGZ1bmN0aW9uKGRl
dmljZUluZm8pIHsKLSAgICByZXR1cm4gdGhpcy5kZWxlZ2F0ZV8gJiYgdGhpcy5kZWxlZ2F0ZV8u
b25EZXZpY2VBZGRlZCAmJiB0aGlzLmRlbGVnYXRlXy5vbkRldmljZUFkZGVkKGRldmljZUluZm8p
OwotICB9Ci0gIFVzYkRldmljZU1hbmFnZXJDbGllbnRTdHViLnByb3RvdHlwZS5vbkRldmljZVJl
bW92ZWQgPSBmdW5jdGlvbihkZXZpY2VJbmZvKSB7Ci0gICAgcmV0dXJuIHRoaXMuZGVsZWdhdGVf
ICYmIHRoaXMuZGVsZWdhdGVfLm9uRGV2aWNlUmVtb3ZlZCAmJiB0aGlzLmRlbGVnYXRlXy5vbkRl
dmljZVJlbW92ZWQoZGV2aWNlSW5mbyk7Ci0gIH0KLQotICBVc2JEZXZpY2VNYW5hZ2VyQ2xpZW50
U3R1Yi5wcm90b3R5cGUuYWNjZXB0ID0gZnVuY3Rpb24obWVzc2FnZSkgewotICAgIHZhciByZWFk
ZXIgPSBuZXcgY29kZWMuTWVzc2FnZVJlYWRlcihtZXNzYWdlKTsKLSAgICBzd2l0Y2ggKHJlYWRl
ci5tZXNzYWdlTmFtZSkgewotICAgIGNhc2Uga1VzYkRldmljZU1hbmFnZXJDbGllbnRfT25EZXZp
Y2VBZGRlZF9OYW1lOgotICAgICAgdmFyIHBhcmFtcyA9IHJlYWRlci5kZWNvZGVTdHJ1Y3QoVXNi
RGV2aWNlTWFuYWdlckNsaWVudF9PbkRldmljZUFkZGVkX1BhcmFtcyk7Ci0gICAgICB0aGlzLm9u
RGV2aWNlQWRkZWQocGFyYW1zLmRldmljZUluZm8pOwotICAgICAgcmV0dXJuIHRydWU7Ci0gICAg
Y2FzZSBrVXNiRGV2aWNlTWFuYWdlckNsaWVudF9PbkRldmljZVJlbW92ZWRfTmFtZToKLSAgICAg
IHZhciBwYXJhbXMgPSByZWFkZXIuZGVjb2RlU3RydWN0KFVzYkRldmljZU1hbmFnZXJDbGllbnRf
T25EZXZpY2VSZW1vdmVkX1BhcmFtcyk7Ci0gICAgICB0aGlzLm9uRGV2aWNlUmVtb3ZlZChwYXJh
bXMuZGV2aWNlSW5mbyk7Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICBkZWZhdWx0OgotICAgICAg
cmV0dXJuIGZhbHNlOwotICAgIH0KLSAgfTsKLQotICBVc2JEZXZpY2VNYW5hZ2VyQ2xpZW50U3R1
Yi5wcm90b3R5cGUuYWNjZXB0V2l0aFJlc3BvbmRlciA9Ci0gICAgICBmdW5jdGlvbihtZXNzYWdl
LCByZXNwb25kZXIpIHsKLSAgICB2YXIgcmVhZGVyID0gbmV3IGNvZGVjLk1lc3NhZ2VSZWFkZXIo
bWVzc2FnZSk7Ci0gICAgc3dpdGNoIChyZWFkZXIubWVzc2FnZU5hbWUpIHsKLSAgICBkZWZhdWx0
OgotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgfTsKLQotICBmdW5jdGlvbiB2YWxpZGF0
ZVVzYkRldmljZU1hbmFnZXJDbGllbnRSZXF1ZXN0KG1lc3NhZ2VWYWxpZGF0b3IpIHsKLSAgICB2
YXIgbWVzc2FnZSA9IG1lc3NhZ2VWYWxpZGF0b3IubWVzc2FnZTsKLSAgICB2YXIgcGFyYW1zQ2xh
c3MgPSBudWxsOwotICAgIHN3aXRjaCAobWVzc2FnZS5nZXROYW1lKCkpIHsKLSAgICAgIGNhc2Ug
a1VzYkRldmljZU1hbmFnZXJDbGllbnRfT25EZXZpY2VBZGRlZF9OYW1lOgotICAgICAgICBpZiAo
IW1lc3NhZ2UuZXhwZWN0c1Jlc3BvbnNlKCkgJiYgIW1lc3NhZ2UuaXNSZXNwb25zZSgpKQotICAg
ICAgICAgIHBhcmFtc0NsYXNzID0gVXNiRGV2aWNlTWFuYWdlckNsaWVudF9PbkRldmljZUFkZGVk
X1BhcmFtczsKLSAgICAgIGJyZWFrOwotICAgICAgY2FzZSBrVXNiRGV2aWNlTWFuYWdlckNsaWVu
dF9PbkRldmljZVJlbW92ZWRfTmFtZToKLSAgICAgICAgaWYgKCFtZXNzYWdlLmV4cGVjdHNSZXNw
b25zZSgpICYmICFtZXNzYWdlLmlzUmVzcG9uc2UoKSkKLSAgICAgICAgICBwYXJhbXNDbGFzcyA9
IFVzYkRldmljZU1hbmFnZXJDbGllbnRfT25EZXZpY2VSZW1vdmVkX1BhcmFtczsKLSAgICAgIGJy
ZWFrOwotICAgIH0KLSAgICBpZiAocGFyYW1zQ2xhc3MgPT09IG51bGwpCi0gICAgICByZXR1cm4g
dmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FOwotICAgIHJldHVybiBwYXJhbXNDbGFzcy52
YWxpZGF0ZShtZXNzYWdlVmFsaWRhdG9yLCBtZXNzYWdlVmFsaWRhdG9yLm1lc3NhZ2UuZ2V0SGVh
ZGVyTnVtQnl0ZXMoKSk7Ci0gIH0KLQotICBmdW5jdGlvbiB2YWxpZGF0ZVVzYkRldmljZU1hbmFn
ZXJDbGllbnRSZXNwb25zZShtZXNzYWdlVmFsaWRhdG9yKSB7Ci0gICAgcmV0dXJuIHZhbGlkYXRv
ci52YWxpZGF0aW9uRXJyb3IuTk9ORTsKLSAgfQotCi0gIHZhciBVc2JEZXZpY2VNYW5hZ2VyQ2xp
ZW50ID0gewotICAgIG5hbWU6ICdkZXZpY2UubW9qb20uVXNiRGV2aWNlTWFuYWdlckNsaWVudCcs
Ci0gICAga1ZlcnNpb246IDAsCi0gICAgcHRyQ2xhc3M6IFVzYkRldmljZU1hbmFnZXJDbGllbnRQ
dHIsCi0gICAgcHJveHlDbGFzczogVXNiRGV2aWNlTWFuYWdlckNsaWVudFByb3h5LAotICAgIHN0
dWJDbGFzczogVXNiRGV2aWNlTWFuYWdlckNsaWVudFN0dWIsCi0gICAgdmFsaWRhdGVSZXF1ZXN0
OiB2YWxpZGF0ZVVzYkRldmljZU1hbmFnZXJDbGllbnRSZXF1ZXN0LAotICAgIHZhbGlkYXRlUmVz
cG9uc2U6IG51bGwsCi0gIH07Ci0gIFVzYkRldmljZU1hbmFnZXJDbGllbnRTdHViLnByb3RvdHlw
ZS52YWxpZGF0b3IgPSB2YWxpZGF0ZVVzYkRldmljZU1hbmFnZXJDbGllbnRSZXF1ZXN0OwotICBV
c2JEZXZpY2VNYW5hZ2VyQ2xpZW50UHJveHkucHJvdG90eXBlLnZhbGlkYXRvciA9IG51bGw7Ci0g
IGV4cG9ydHMuVXNiRGV2aWNlTWFuYWdlckNsaWVudCA9IFVzYkRldmljZU1hbmFnZXJDbGllbnQ7
Ci0gIGV4cG9ydHMuVXNiRGV2aWNlTWFuYWdlckNsaWVudFB0ciA9IFVzYkRldmljZU1hbmFnZXJD
bGllbnRQdHI7Ci0gIGV4cG9ydHMuVXNiRGV2aWNlTWFuYWdlckNsaWVudEFzc29jaWF0ZWRQdHIg
PSBVc2JEZXZpY2VNYW5hZ2VyQ2xpZW50QXNzb2NpYXRlZFB0cjsKLX0pKCk7ClwgTm8gbmV3bGlu
ZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dl
Yi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vZGV2aWNlX21hbmFnZXJfY2xpZW50
Lm1vam9tLmpzLmhlYWRlcnMgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3Jt
LXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS9kZXZpY2VfbWFuYWdlcl9jbGllbnQubW9qb20uanMu
aGVhZGVycwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmM2MWEzNGE0ZWMyZTc1MDk2
ZGIwZWI5Zjc3NDhiMTQyZjBkYjdiYi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMAotLS0gYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3Rz
L3Jlc291cmNlcy9jaHJvbWl1bS9kZXZpY2VfbWFuYWdlcl9jbGllbnQubW9qb20uanMuaGVhZGVy
cworKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLUNvbnRlbnQtVHlwZTogdGV4dC9qYXZhc2Ny
aXB0OyBjaGFyc2V0PXV0Zi04ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0
IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMv
Y2hyb21pdW0vZW5hYmxlLWh5cGVybGluay1hdWRpdGluZy5qcyBiL0xheW91dFRlc3RzL2ltcG9y
dGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL2VuYWJsZS1oeXBl
cmxpbmstYXVkaXRpbmcuanMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI2M2Y2NTEy
ZjA5YTkwMjIwOTQwOTc1Yjk0NzRmZWNhYmYyODM3YzcuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0
Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vZW5hYmxlLWh5cGVybGluay1hdWRpdGluZy5q
cworKysgL2Rldi9udWxsCkBAIC0xLDIgKzAsMCBAQAotaWYgKHdpbmRvdy50ZXN0UnVubmVyKQot
ICB0ZXN0UnVubmVyLm92ZXJyaWRlUHJlZmVyZW5jZSgiV2ViS2l0SHlwZXJsaW5rQXVkaXRpbmdF
bmFibGVkIiwgMSk7CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBs
YXRmb3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS9nZW5lcmljX3NlbnNvcl9tb2Nrcy5qcyBi
L0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2No
cm9taXVtL2dlbmVyaWNfc2Vuc29yX21vY2tzLmpzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCBmZTJmNzBiZTM0ZWJkZWViNzRkZGFjNWU1ZmE0YjM5Njg0YjBlM2I1Li4wMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL0xheW91dFRlc3RzL2ltcG9ydGVk
L3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL2dlbmVyaWNfc2Vuc29y
X21vY2tzLmpzCisrKyAvZGV2L251bGwKQEAgLTEsMzk1ICswLDAgQEAKLSd1c2Ugc3RyaWN0JzsK
LQotLy8gQSAic2xpZGluZyB3aW5kb3ciIHRoYXQgaXRlcmF0ZXMgb3ZlciB8ZGF0YXwgYW5kIHJl
dHVybnMgb25lIGl0ZW0gYXQgYQotLy8gdGltZSwgYWR2YW5jaW5nIGFuZCB3cmFwcGluZyBhcm91
bmQgYXMgbmVlZGVkLiB8ZGF0YXwgbXVzdCBiZSBhbiBhcnJheSBvZgotLy8gYXJyYXlzLgotY2xh
c3MgUmluZ0J1ZmZlciB7Ci0gIGNvbnN0cnVjdG9yKGRhdGEpIHsKLSAgICB0aGlzLmJ1ZmZlclBv
c2l0aW9uXyA9IDA7Ci0gICAgLy8gVmFsaWRhdGUgfGRhdGF8J3MgZm9ybWF0IGFuZCBkZWVwLWNv
cHkgZXZlcnkgZWxlbWVudC4KLSAgICB0aGlzLmRhdGFfID0gQXJyYXkuZnJvbShkYXRhLCBlbGVt
ZW50ID0+IHsKLSAgICAgIGlmICghQXJyYXkuaXNBcnJheShlbGVtZW50KSkgewotICAgICAgICB0
aHJvdyBuZXcgVHlwZUVycm9yKCdFdmVyeSB8ZGF0YXwgZWxlbWVudCBtdXN0IGJlIGFuIGFycmF5
LicpOwotICAgICAgfQotICAgICAgcmV0dXJuIEFycmF5LmZyb20oZWxlbWVudCk7Ci0gICAgfSkK
LSAgfQotCi0gIG5leHQoKSB7Ci0gICAgY29uc3QgdmFsdWUgPSB0aGlzLmRhdGFfW3RoaXMuYnVm
ZmVyUG9zaXRpb25fXTsKLSAgICB0aGlzLmJ1ZmZlclBvc2l0aW9uXyA9ICh0aGlzLmJ1ZmZlclBv
c2l0aW9uXyArIDEpICUgdGhpcy5kYXRhXy5sZW5ndGg7Ci0gICAgcmV0dXJuIHsgZG9uZTogZmFs
c2UsIHZhbHVlOiB2YWx1ZSB9OwotICB9Ci0KLSAgdmFsdWUoKSB7Ci0gICAgcmV0dXJuIHRoaXMu
ZGF0YV9bdGhpcy5idWZmZXJQb3NpdGlvbl9dOwotICB9Ci0KLSAgW1N5bWJvbC5pdGVyYXRvcl0o
KSB7Ci0gICAgcmV0dXJuIHRoaXM7Ci0gIH0KLX0KLQotdmFyIEdlbmVyaWNTZW5zb3JUZXN0ID0g
KCgpID0+IHsKLSAgLy8gRGVmYXVsdCBzZW5zb3IgZnJlcXVlbmN5IGluIGRlZmF1bHQgY29uZmln
dXJhdGlvbnMuCi0gIGNvbnN0IERFRkFVTFRfRlJFUVVFTkNZID0gNTsKLQotICAvLyBDbGFzcyB0
aGF0IG1vY2tzIFNlbnNvciBpbnRlcmZhY2UgZGVmaW5lZCBpbgotICAvLyBodHRwczovL2NzLmNo
cm9taXVtLm9yZy9jaHJvbWl1bS9zcmMvc2VydmljZXMvZGV2aWNlL3B1YmxpYy9tb2pvbS9zZW5z
b3IubW9qb20KLSAgY2xhc3MgTW9ja1NlbnNvciB7Ci0gICAgY29uc3RydWN0b3Ioc2Vuc29yUmVx
dWVzdCwgaGFuZGxlLCBvZmZzZXQsIHNpemUsIHJlcG9ydGluZ01vZGUpIHsKLSAgICAgIHRoaXMu
Y2xpZW50XyA9IG51bGw7Ci0gICAgICB0aGlzLnN0YXJ0U2hvdWxkRmFpbF8gPSBmYWxzZTsKLSAg
ICAgIHRoaXMubm90aWZ5T25SZWFkaW5nQ2hhbmdlXyA9IHRydWU7Ci0gICAgICB0aGlzLnJlcG9y
dGluZ01vZGVfID0gcmVwb3J0aW5nTW9kZTsKLSAgICAgIHRoaXMuc2Vuc29yUmVhZGluZ1RpbWVy
SWRfID0gbnVsbDsKLSAgICAgIHRoaXMucmVhZGluZ0RhdGFfID0gbnVsbDsKLSAgICAgIHRoaXMu
cmVxdWVzdGVkRnJlcXVlbmNpZXNfID0gW107Ci0gICAgICBsZXQgcnYgPSBoYW5kbGUubWFwQnVm
ZmVyKG9mZnNldCwgc2l6ZSk7Ci0gICAgICBhc3NlcnRfZXF1YWxzKHJ2LnJlc3VsdCwgTW9qby5S
RVNVTFRfT0ssICJGYWlsZWQgdG8gbWFwIHNoYXJlZCBidWZmZXIiKTsKLSAgICAgIHRoaXMuYnVm
ZmVyXyA9IG5ldyBGbG9hdDY0QXJyYXkocnYuYnVmZmVyKTsKLSAgICAgIHRoaXMuYnVmZmVyXy5m
aWxsKDApOwotICAgICAgdGhpcy5iaW5kaW5nXyA9IG5ldyBtb2pvLkJpbmRpbmcoZGV2aWNlLm1v
am9tLlNlbnNvciwgdGhpcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHNlbnNvclJlcXVlc3QpOwotICAgICAgdGhpcy5iaW5kaW5nXy5zZXRDb25uZWN0aW9uRXJyb3JI
YW5kbGVyKCgpID0+IHsKLSAgICAgICAgdGhpcy5yZXNldCgpOwotICAgICAgfSk7Ci0gICAgfQot
Ci0gICAgLy8gUmV0dXJucyBkZWZhdWx0IGNvbmZpZ3VyYXRpb24uCi0gICAgYXN5bmMgZ2V0RGVm
YXVsdENvbmZpZ3VyYXRpb24oKSB7Ci0gICAgICByZXR1cm4geyBmcmVxdWVuY3k6IERFRkFVTFRf
RlJFUVVFTkNZIH07Ci0gICAgfQotCi0gICAgLy8gQWRkcyBjb25maWd1cmF0aW9uIGZvciB0aGUg
c2Vuc29yIGFuZCBzdGFydHMgcmVwb3J0aW5nIGZha2UgZGF0YQotICAgIC8vIHRocm91Z2ggc2V0
U2Vuc29yUmVhZGluZyBmdW5jdGlvbi4KLSAgICBhc3luYyBhZGRDb25maWd1cmF0aW9uKGNvbmZp
Z3VyYXRpb24pIHsKLSAgICAgIGFzc2VydF9ub3RfZXF1YWxzKGNvbmZpZ3VyYXRpb24sIG51bGws
ICJJbnZhbGlkIHNlbnNvciBjb25maWd1cmF0aW9uLiIpOwotCi0gICAgICB0aGlzLnJlcXVlc3Rl
ZEZyZXF1ZW5jaWVzXy5wdXNoKGNvbmZpZ3VyYXRpb24uZnJlcXVlbmN5KTsKLSAgICAgIC8vIFNv
cnQgdXNpbmcgZGVzY2VuZGluZyBvcmRlci4KLSAgICAgIHRoaXMucmVxdWVzdGVkRnJlcXVlbmNp
ZXNfLnNvcnQoCi0gICAgICAgICAgKGZpcnN0LCBzZWNvbmQpID0+IHsgcmV0dXJuIHNlY29uZCAt
IGZpcnN0IH0pOwotCi0gICAgICBpZiAoIXRoaXMuc3RhcnRTaG91bGRGYWlsXyApCi0gICAgICAg
IHRoaXMuc3RhcnRSZWFkaW5nKCk7Ci0KLSAgICAgIHJldHVybiB7IHN1Y2Nlc3M6ICF0aGlzLnN0
YXJ0U2hvdWxkRmFpbF8gfTsKLSAgICB9Ci0KLSAgICAvLyBSZW1vdmVzIHNlbnNvciBjb25maWd1
cmF0aW9uIGZyb20gdGhlIGxpc3Qgb2YgYWN0aXZlIGNvbmZpZ3VyYXRpb25zIGFuZAotICAgIC8v
IHN0b3BzIG5vdGlmaWNhdGlvbiBhYm91dCBzZW5zb3IgcmVhZGluZyBjaGFuZ2VzIGlmCi0gICAg
Ly8gcmVxdWVzdGVkRnJlcXVlbmNpZXNfIGlzIGVtcHR5LgotICAgIHJlbW92ZUNvbmZpZ3VyYXRp
b24oY29uZmlndXJhdGlvbikgewotICAgICAgY29uc3QgaW5kZXggPSB0aGlzLnJlcXVlc3RlZEZy
ZXF1ZW5jaWVzXy5pbmRleE9mKGNvbmZpZ3VyYXRpb24uZnJlcXVlbmN5KTsKLSAgICAgIGlmIChp
bmRleCA9PSAtMSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgICB0aGlzLnJlcXVlc3RlZEZyZXF1
ZW5jaWVzXy5zcGxpY2UoaW5kZXgsIDEpOwotICAgICAgaWYgKHRoaXMucmVxdWVzdGVkRnJlcXVl
bmNpZXNfLmxlbmd0aCA9PT0gMCkKLSAgICAgICAgdGhpcy5zdG9wUmVhZGluZygpOwotICAgIH0K
LQotICAgIC8vIENvbmZpZ3VyZVJlYWRpbmdDaGFuZ2VOb3RpZmljYXRpb25zKGJvb2wgZW5hYmxl
ZCkKLSAgICAvLyBDb25maWd1cmVzIHdoZXRoZXIgdG8gcmVwb3J0IGEgcmVhZGluZyBjaGFuZ2Ug
d2hlbiBpbiBPTl9DSEFOR0UKLSAgICAvLyByZXBvcnRpbmcgbW9kZS4KLSAgICBjb25maWd1cmVS
ZWFkaW5nQ2hhbmdlTm90aWZpY2F0aW9ucyhub3RpZnlPblJlYWRpbmdDaGFuZ2UpIHsKLSAgICAg
IHRoaXMubm90aWZ5T25SZWFkaW5nQ2hhbmdlXyA9IG5vdGlmeU9uUmVhZGluZ0NoYW5nZTsKLSAg
ICB9Ci0KLSAgICAvLyBNb2NrIGZ1bmN0aW9ucwotCi0gICAgLy8gUmVzZXRzIG1vY2sgU2Vuc29y
IHN0YXRlLgotICAgIHJlc2V0KCkgewotICAgICAgdGhpcy5zdG9wUmVhZGluZygpOwotICAgICAg
dGhpcy5zdGFydFNob3VsZEZhaWxfID0gZmFsc2U7Ci0gICAgICB0aGlzLnJlcXVlc3RlZEZyZXF1
ZW5jaWVzXyA9IFtdOwotICAgICAgdGhpcy5ub3RpZnlPblJlYWRpbmdDaGFuZ2VfID0gdHJ1ZTsK
LSAgICAgIHRoaXMucmVhZGluZ0RhdGFfID0gbnVsbDsKLSAgICAgIHRoaXMuYnVmZmVyXy5maWxs
KDApOwotICAgICAgdGhpcy5iaW5kaW5nXy5jbG9zZSgpOwotICAgIH0KLQotICAgIC8vIFNldHMg
ZmFrZSBkYXRhIHRoYXQgaXMgdXNlZCB0byBkZWxpdmVyIHNlbnNvciByZWFkaW5nIHVwZGF0ZXMu
Ci0gICAgYXN5bmMgc2V0U2Vuc29yUmVhZGluZyhyZWFkaW5nRGF0YSkgewotICAgICAgdGhpcy5y
ZWFkaW5nRGF0YV8gPSBuZXcgUmluZ0J1ZmZlcihyZWFkaW5nRGF0YSk7Ci0gICAgICByZXR1cm4g
dGhpczsKLSAgICB9Ci0KLSAgICAvLyBUaGlzIGlzIGEgd29ya2Fyb3VuZCB0byBhY2NvbW1vZGF0
ZSBCbGluaydzIERldmljZSBPcmllbnRhdGlvbgotICAgIC8vIGltcGxlbWVudGF0aW9uLiBJbiBn
ZW5lcmFsLCBhbGwgdGVzdHMgc2hvdWxkIHVzZSBzZXRTZW5zb3JSZWFkaW5nKCkKLSAgICAvLyBp
bnN0ZWFkLgotICAgIHNldFNlbnNvclJlYWRpbmdJbW1lZGlhdGVseShyZWFkaW5nRGF0YSkgewot
ICAgICAgdGhpcy5zZXRTZW5zb3JSZWFkaW5nKHJlYWRpbmdEYXRhKTsKLQotICAgICAgY29uc3Qg
cmVhZGluZyA9IHRoaXMucmVhZGluZ0RhdGFfLnZhbHVlKCk7Ci0gICAgICB0aGlzLmJ1ZmZlcl8u
c2V0KHJlYWRpbmcsIDIpOwotICAgICAgdGhpcy5idWZmZXJfWzFdID0gd2luZG93LnBlcmZvcm1h
bmNlLm5vdygpICogMC4wMDE7Ci0gICAgfQotCi0gICAgLy8gU2V0cyBmbGFnIHRoYXQgZm9yY2Vz
IHNlbnNvciB0byBmYWlsIHdoZW4gYWRkQ29uZmlndXJhdGlvbiBpcyBpbnZva2VkLgotICAgIHNl
dFN0YXJ0U2hvdWxkRmFpbChzaG91bGRGYWlsKSB7Ci0gICAgICB0aGlzLnN0YXJ0U2hvdWxkRmFp
bF8gPSBzaG91bGRGYWlsOwotICAgIH0KLQotICAgIHN0YXJ0UmVhZGluZygpIHsKLSAgICAgIGlm
ICh0aGlzLnJlYWRpbmdEYXRhXyAhPSBudWxsKSB7Ci0gICAgICAgIHRoaXMuc3RvcFJlYWRpbmco
KTsKLSAgICAgIH0KLSAgICAgIGxldCBtYXhGcmVxdWVuY3lVc2VkID0gdGhpcy5yZXF1ZXN0ZWRG
cmVxdWVuY2llc19bMF07Ci0gICAgICBsZXQgdGltZW91dCA9ICgxIC8gbWF4RnJlcXVlbmN5VXNl
ZCkgKiAxMDAwOwotICAgICAgdGhpcy5zZW5zb3JSZWFkaW5nVGltZXJJZF8gPSB3aW5kb3cuc2V0
SW50ZXJ2YWwoKCkgPT4gewotICAgICAgICBpZiAodGhpcy5yZWFkaW5nRGF0YV8pIHsKLSAgICAg
ICAgICAvLyB8YnVmZmVyX3wgaXMgYSBUeXBlZEFycmF5LCBzbyB3ZSBuZWVkIHRvIG1ha2Ugc3Vy
ZSBwYXNzIGFuCi0gICAgICAgICAgLy8gYXJyYXkgdG8gc2V0KCkuCi0gICAgICAgICAgY29uc3Qg
cmVhZGluZyA9IHRoaXMucmVhZGluZ0RhdGFfLm5leHQoKS52YWx1ZTsKLSAgICAgICAgICBhc3Nl
cnRfdHJ1ZShBcnJheS5pc0FycmF5KHJlYWRpbmcpLCAiVGhlIHJlYWRpbmdzIHBhc3NlZCB0byAi
ICsKLSAgICAgICAgICAgICAgInNldFNlbnNvclJlYWRpbmcoKSBtdXN0IGJlIGFycmF5cy4iKTsK
LSAgICAgICAgICB0aGlzLmJ1ZmZlcl8uc2V0KHJlYWRpbmcsIDIpOwotICAgICAgICB9Ci0gICAg
ICAgIC8vIEZvciBhbGwgdGVzdHMgc2Vuc29yIHJlYWRpbmcgc2hvdWxkIGhhdmUgbW9ub3Rvbmlj
YWxseQotICAgICAgICAvLyBpbmNyZWFzaW5nIHRpbWVzdGFtcCBpbiBzZWNvbmRzLgotICAgICAg
ICB0aGlzLmJ1ZmZlcl9bMV0gPSB3aW5kb3cucGVyZm9ybWFuY2Uubm93KCkgKiAwLjAwMTsKLSAg
ICAgICAgaWYgKHRoaXMucmVwb3J0aW5nTW9kZV8gPT09IGRldmljZS5tb2pvbS5SZXBvcnRpbmdN
b2RlLk9OX0NIQU5HRSAmJgotICAgICAgICAgICAgdGhpcy5ub3RpZnlPblJlYWRpbmdDaGFuZ2Vf
KSB7Ci0gICAgICAgICAgdGhpcy5jbGllbnRfLnNlbnNvclJlYWRpbmdDaGFuZ2VkKCk7Ci0gICAg
ICAgIH0KLSAgICAgIH0sIHRpbWVvdXQpOwotICAgIH0KLQotICAgIHN0b3BSZWFkaW5nKCkgewot
ICAgICAgaWYgKHRoaXMuc2Vuc29yUmVhZGluZ1RpbWVySWRfICE9IG51bGwpIHsKLSAgICAgICAg
d2luZG93LmNsZWFySW50ZXJ2YWwodGhpcy5zZW5zb3JSZWFkaW5nVGltZXJJZF8pOwotICAgICAg
ICB0aGlzLnNlbnNvclJlYWRpbmdUaW1lcklkXyA9IG51bGw7Ci0gICAgICB9Ci0gICAgfQotCi0g
ICAgZ2V0U2FtcGxpbmdGcmVxdWVuY3koKSB7Ci0gICAgICAgYXNzZXJ0X3RydWUodGhpcy5yZXF1
ZXN0ZWRGcmVxdWVuY2llc18ubGVuZ3RoID4gMCk7Ci0gICAgICAgcmV0dXJuIHRoaXMucmVxdWVz
dGVkRnJlcXVlbmNpZXNfWzBdOwotICAgIH0KLSAgfQotCi0gIC8vIENsYXNzIHRoYXQgbW9ja3Mg
U2Vuc29yUHJvdmlkZXIgaW50ZXJmYWNlIGRlZmluZWQgaW4KLSAgLy8gaHR0cHM6Ly9jcy5jaHJv
bWl1bS5vcmcvY2hyb21pdW0vc3JjL3NlcnZpY2VzL2RldmljZS9wdWJsaWMvbW9qb20vc2Vuc29y
X3Byb3ZpZGVyLm1vam9tCi0gIGNsYXNzIE1vY2tTZW5zb3JQcm92aWRlciB7Ci0gICAgY29uc3Ry
dWN0b3IoKSB7Ci0gICAgICB0aGlzLnJlYWRpbmdTaXplSW5CeXRlc18gPQotICAgICAgICAgIGRl
dmljZS5tb2pvbS5TZW5zb3JJbml0UGFyYW1zLlJFQURfQlVGRkVSX1NJWkVfRk9SX1RFU1RTOwot
ICAgICAgdGhpcy5zaGFyZWRCdWZmZXJTaXplSW5CeXRlc18gPSB0aGlzLnJlYWRpbmdTaXplSW5C
eXRlc18gKgotICAgICAgICAgICAgICAoZGV2aWNlLm1vam9tLlNlbnNvclR5cGUuTUFYX1ZBTFVF
ICsgMSk7Ci0gICAgICBjb25zdCBydiA9IE1vam8uY3JlYXRlU2hhcmVkQnVmZmVyKHRoaXMuc2hh
cmVkQnVmZmVyU2l6ZUluQnl0ZXNfKTsKLSAgICAgIGFzc2VydF9lcXVhbHMocnYucmVzdWx0LCBN
b2pvLlJFU1VMVF9PSywgIkZhaWxlZCB0byBjcmVhdGUgYnVmZmVyIik7Ci0gICAgICB0aGlzLnNo
YXJlZEJ1ZmZlckhhbmRsZV8gPSBydi5oYW5kbGU7Ci0gICAgICB0aGlzLmFjdGl2ZVNlbnNvcnNf
ID0gbmV3IE1hcCgpOwotICAgICAgdGhpcy5yZXNvbHZlRnVuY3NfID0gbmV3IE1hcCgpOwotICAg
ICAgdGhpcy5nZXRTZW5zb3JTaG91bGRGYWlsXyA9IG5ldyBNYXAoKTsKLSAgICAgIHRoaXMucGVy
bWlzc2lvbnNEZW5pZWRfID0gbmV3IE1hcCgpOwotICAgICAgdGhpcy5tYXhGcmVxdWVuY3lfID0g
NjA7Ci0gICAgICB0aGlzLm1pbkZyZXF1ZW5jeV8gPSAxOwotICAgICAgdGhpcy5tb2pvbVNlbnNv
clR5cGVfID0gbmV3IE1hcChbCi0gICAgICAgIFsnQWNjZWxlcm9tZXRlcicsIGRldmljZS5tb2pv
bS5TZW5zb3JUeXBlLkFDQ0VMRVJPTUVURVJdLAotICAgICAgICBbJ0xpbmVhckFjY2VsZXJhdGlv
blNlbnNvcicsCi0gICAgICAgICAgICBkZXZpY2UubW9qb20uU2Vuc29yVHlwZS5MSU5FQVJfQUND
RUxFUkFUSU9OXSwKLSAgICAgICAgWydBbWJpZW50TGlnaHRTZW5zb3InLCBkZXZpY2UubW9qb20u
U2Vuc29yVHlwZS5BTUJJRU5UX0xJR0hUXSwKLSAgICAgICAgWydHeXJvc2NvcGUnLCBkZXZpY2Uu
bW9qb20uU2Vuc29yVHlwZS5HWVJPU0NPUEVdLAotICAgICAgICBbJ01hZ25ldG9tZXRlcicsIGRl
dmljZS5tb2pvbS5TZW5zb3JUeXBlLk1BR05FVE9NRVRFUl0sCi0gICAgICAgIFsnQWJzb2x1dGVP
cmllbnRhdGlvblNlbnNvcicsCi0gICAgICAgICAgICBkZXZpY2UubW9qb20uU2Vuc29yVHlwZS5B
QlNPTFVURV9PUklFTlRBVElPTl9RVUFURVJOSU9OXSwKLSAgICAgICAgWydBYnNvbHV0ZU9yaWVu
dGF0aW9uRXVsZXJBbmdsZXMnLAotICAgICAgICAgICAgZGV2aWNlLm1vam9tLlNlbnNvclR5cGUu
QUJTT0xVVEVfT1JJRU5UQVRJT05fRVVMRVJfQU5HTEVTXSwKLSAgICAgICAgWydSZWxhdGl2ZU9y
aWVudGF0aW9uU2Vuc29yJywKLSAgICAgICAgICAgIGRldmljZS5tb2pvbS5TZW5zb3JUeXBlLlJF
TEFUSVZFX09SSUVOVEFUSU9OX1FVQVRFUk5JT05dLAotICAgICAgICBbJ1JlbGF0aXZlT3JpZW50
YXRpb25FdWxlckFuZ2xlcycsCi0gICAgICAgICAgICBkZXZpY2UubW9qb20uU2Vuc29yVHlwZS5S
RUxBVElWRV9PUklFTlRBVElPTl9FVUxFUl9BTkdMRVNdLAotICAgICAgICBbJ1Byb3hpbWl0eVNl
bnNvcicsIGRldmljZS5tb2pvbS5TZW5zb3JUeXBlLlBST1hJTUlUWV0KLSAgICAgIF0pOwotICAg
ICAgdGhpcy5iaW5kaW5nXyA9IG5ldyBtb2pvLkJpbmRpbmcoZGV2aWNlLm1vam9tLlNlbnNvclBy
b3ZpZGVyLCB0aGlzKTsKLQotICAgICAgdGhpcy5pbnRlcmNlcHRvcl8gPQotICAgICAgICAgIG5l
dyBNb2pvSW50ZXJmYWNlSW50ZXJjZXB0b3IoZGV2aWNlLm1vam9tLlNlbnNvclByb3ZpZGVyLm5h
bWUpOwotICAgICAgdGhpcy5pbnRlcmNlcHRvcl8ub25pbnRlcmZhY2VyZXF1ZXN0ID0gZSA9PiB7
Ci0gICAgICAgIHRoaXMuYmluZFRvUGlwZShlLmhhbmRsZSk7Ci0gICAgICB9OwotICAgICAgdGhp
cy5pbnRlcmNlcHRvcl8uc3RhcnQoKTsKLSAgICB9Ci0KLSAgICAvLyBSZXR1cm5zIGluaXRpYWxp
emVkIFNlbnNvciBwcm94eSB0byB0aGUgY2xpZW50LgotICAgIGFzeW5jIGdldFNlbnNvcih0eXBl
KSB7Ci0gICAgICBpZiAodGhpcy5nZXRTZW5zb3JTaG91bGRGYWlsXy5nZXQodHlwZSkpIHsKLSAg
ICAgICAgcmV0dXJuIHtyZXN1bHQ6IGRldmljZS5tb2pvbS5TZW5zb3JDcmVhdGlvblJlc3VsdC5F
UlJPUl9OT1RfQVZBSUxBQkxFLAotICAgICAgICAgICAgICAgIGluaXRQYXJhbXM6IG51bGx9Owot
ICAgICAgfQotICAgICAgaWYgKHRoaXMucGVybWlzc2lvbnNEZW5pZWRfLmdldCh0eXBlKSkgewot
ICAgICAgICByZXR1cm4ge3Jlc3VsdDogZGV2aWNlLm1vam9tLlNlbnNvckNyZWF0aW9uUmVzdWx0
LkVSUk9SX05PVF9BTExPV0VELAotICAgICAgICAgICAgICAgIGluaXRQYXJhbXM6IG51bGx9Owot
ICAgICAgfQotCi0gICAgICBjb25zdCBvZmZzZXQgPSB0eXBlICogdGhpcy5yZWFkaW5nU2l6ZUlu
Qnl0ZXNfOwotICAgICAgY29uc3QgcmVwb3J0aW5nTW9kZSA9IGRldmljZS5tb2pvbS5SZXBvcnRp
bmdNb2RlLk9OX0NIQU5HRTsKLQotICAgICAgY29uc3Qgc2Vuc29yUHRyID0gbmV3IGRldmljZS5t
b2pvbS5TZW5zb3JQdHIoKTsKLSAgICAgIGlmICghdGhpcy5hY3RpdmVTZW5zb3JzXy5oYXModHlw
ZSkpIHsKLSAgICAgICAgY29uc3QgbW9ja1NlbnNvciA9IG5ldyBNb2NrU2Vuc29yKAotICAgICAg
ICAgICAgbW9qby5tYWtlUmVxdWVzdChzZW5zb3JQdHIpLCB0aGlzLnNoYXJlZEJ1ZmZlckhhbmRs
ZV8sIG9mZnNldCwKLSAgICAgICAgICAgIHRoaXMucmVhZGluZ1NpemVJbkJ5dGVzXywgcmVwb3J0
aW5nTW9kZSk7Ci0gICAgICAgIHRoaXMuYWN0aXZlU2Vuc29yc18uc2V0KHR5cGUsIG1vY2tTZW5z
b3IpOwotICAgICAgICB0aGlzLmFjdGl2ZVNlbnNvcnNfLmdldCh0eXBlKS5jbGllbnRfID0KLSAg
ICAgICAgICAgIG5ldyBkZXZpY2UubW9qb20uU2Vuc29yQ2xpZW50UHRyKCk7Ci0gICAgICB9Ci0K
LSAgICAgIGNvbnN0IHJ2ID0gdGhpcy5zaGFyZWRCdWZmZXJIYW5kbGVfLmR1cGxpY2F0ZUJ1ZmZl
ckhhbmRsZSgpOwotCi0gICAgICBhc3NlcnRfZXF1YWxzKHJ2LnJlc3VsdCwgTW9qby5SRVNVTFRf
T0spOwotCi0gICAgICBjb25zdCBkZWZhdWx0Q29uZmlnID0geyBmcmVxdWVuY3k6IERFRkFVTFRf
RlJFUVVFTkNZIH07Ci0gICAgICAvLyBDb25zaWRlciBzZW5zb3IgdHJhaXRzIHRvIG1lZXQgYXNz
ZXJ0aW9ucyBpbiBDKysgY29kZSAoc2VlCi0gICAgICAvLyBzZXJ2aWNlcy9kZXZpY2UvcHVibGlj
L2NwcC9nZW5lcmljX3NlbnNvci9zZW5zb3JfdHJhaXRzLmgpCi0gICAgICBpZiAodHlwZSA9PSBk
ZXZpY2UubW9qb20uU2Vuc29yVHlwZS5BTUJJRU5UX0xJR0hUIHx8Ci0gICAgICAgICAgdHlwZSA9
PSBkZXZpY2UubW9qb20uU2Vuc29yVHlwZS5NQUdORVRPTUVURVIpIHsKLSAgICAgICAgdGhpcy5t
YXhGcmVxdWVuY3lfID0gTWF0aC5taW4oMTAsIHRoaXMubWF4RnJlcXVlbmN5Xyk7Ci0gICAgICB9
Ci0KLSAgICAgIC8vIENocm9taXVtIGFwcGxpZXMgc29tZSByb3VuZGluZyBhbmQgb3RoZXIgcHJp
dmFjeS1yZWxhdGVkIG1lYXN1cmVzIHRoYXQKLSAgICAgIC8vIGNhbiBjYXVzZSBBTFMgbm90IHRv
IHJlcG9ydCBhIHJlYWRpbmcgd2hlbiBpdCBoYXMgbm90IGNoYW5nZWQgYmV5b25kIGEKLSAgICAg
IC8vIGNlcnRhaW4gdGhyZXNob2xkIGNvbXBhcmVkIHRvIHRoZSBwcmV2aW91cyBpbGx1bWluYW5j
ZSB2YWx1ZS4gTWFrZQotICAgICAgLy8gZWFjaCByZWFkaW5nIHJldHVybiBhIGRpZmZlcmVudCB2
YWx1ZSB0aGF0IGlzIHNpZ25pZmljYW50bHkgZGlmZmVyZW50Ci0gICAgICAvLyBmcm9tIHRoZSBw
cmV2aW91cyBvbmUgd2hlbiBzZXRTZW5zb3JSZWFkaW5nKCkgaXMgbm90IGNhbGxlZCBieSBjbGll
bnQKLSAgICAgIC8vIGNvZGUgKGUuZy4gcnVuX2dlbmVyaWNfc2Vuc29yX2lmcmFtZV90ZXN0cygp
KS4KLSAgICAgIGlmICh0eXBlID09IGRldmljZS5tb2pvbS5TZW5zb3JUeXBlLkFNQklFTlRfTElH
SFQpIHsKLSAgICAgICAgdGhpcy5hY3RpdmVTZW5zb3JzXy5nZXQodHlwZSkuc2V0U2Vuc29yUmVh
ZGluZyhbCi0gICAgICAgICAgW3dpbmRvdy5wZXJmb3JtYW5jZS5ub3coKSAqIDEwMF0sCi0gICAg
ICAgICAgWyh3aW5kb3cucGVyZm9ybWFuY2Uubm93KCkgKyA1MCkgKiAxMDBdCi0gICAgICAgIF0p
OwotICAgICAgfQotCi0gICAgICBjb25zdCBpbml0UGFyYW1zID0gbmV3IGRldmljZS5tb2pvbS5T
ZW5zb3JJbml0UGFyYW1zKHsKLSAgICAgICAgc2Vuc29yOiBzZW5zb3JQdHIsCi0gICAgICAgIGNs
aWVudFJlY2VpdmVyOiBtb2pvLm1ha2VSZXF1ZXN0KHRoaXMuYWN0aXZlU2Vuc29yc18uZ2V0KHR5
cGUpLmNsaWVudF8pLAotICAgICAgICBtZW1vcnk6IHJ2LmhhbmRsZSwKLSAgICAgICAgYnVmZmVy
T2Zmc2V0OiBvZmZzZXQsCi0gICAgICAgIG1vZGU6IHJlcG9ydGluZ01vZGUsCi0gICAgICAgIGRl
ZmF1bHRDb25maWd1cmF0aW9uOiBkZWZhdWx0Q29uZmlnLAotICAgICAgICBtaW5pbXVtRnJlcXVl
bmN5OiB0aGlzLm1pbkZyZXF1ZW5jeV8sCi0gICAgICAgIG1heGltdW1GcmVxdWVuY3k6IHRoaXMu
bWF4RnJlcXVlbmN5XwotICAgICAgfSk7Ci0KLSAgICAgIGlmICh0aGlzLnJlc29sdmVGdW5jc18u
aGFzKHR5cGUpKSB7Ci0gICAgICAgIGZvciAobGV0IHJlc29sdmVGdW5jIG9mIHRoaXMucmVzb2x2
ZUZ1bmNzXy5nZXQodHlwZSkpIHsKLSAgICAgICAgICByZXNvbHZlRnVuYyh0aGlzLmFjdGl2ZVNl
bnNvcnNfLmdldCh0eXBlKSk7Ci0gICAgICAgIH0KLSAgICAgICAgdGhpcy5yZXNvbHZlRnVuY3Nf
LmRlbGV0ZSh0eXBlKTsKLSAgICAgIH0KLQotICAgICAgcmV0dXJuIHtyZXN1bHQ6IGRldmljZS5t
b2pvbS5TZW5zb3JDcmVhdGlvblJlc3VsdC5TVUNDRVNTLAotICAgICAgICAgICAgICBpbml0UGFy
YW1zOiBpbml0UGFyYW1zfTsKLSAgICB9Ci0KLSAgICAvLyBCaW5kcyBvYmplY3QgdG8gbW9qbyBt
ZXNzYWdlIHBpcGUKLSAgICBiaW5kVG9QaXBlKHBpcGUpIHsKLSAgICAgIHRoaXMuYmluZGluZ18u
YmluZChwaXBlKTsKLSAgICAgIHRoaXMuYmluZGluZ18uc2V0Q29ubmVjdGlvbkVycm9ySGFuZGxl
cigoKSA9PiB7Ci0gICAgICAgIHRoaXMucmVzZXQoKTsKLSAgICAgIH0pOwotICAgIH0KLQotICAg
IC8vIE1vY2sgZnVuY3Rpb25zCi0KLSAgICAvLyBSZXNldHMgc3RhdGUgb2YgbW9jayBTZW5zb3JQ
cm92aWRlciBiZXR3ZWVuIHRlc3QgcnVucy4KLSAgICByZXNldCgpIHsKLSAgICAgIGZvciAoY29u
c3Qgc2Vuc29yIG9mIHRoaXMuYWN0aXZlU2Vuc29yc18udmFsdWVzKCkpIHsKLSAgICAgICAgc2Vu
c29yLnJlc2V0KCk7Ci0gICAgICB9Ci0gICAgICB0aGlzLmFjdGl2ZVNlbnNvcnNfLmNsZWFyKCk7
Ci0gICAgICB0aGlzLnJlc29sdmVGdW5jc18uY2xlYXIoKTsKLSAgICAgIHRoaXMuZ2V0U2Vuc29y
U2hvdWxkRmFpbF8uY2xlYXIoKTsKLSAgICAgIHRoaXMucGVybWlzc2lvbnNEZW5pZWRfLmNsZWFy
KCk7Ci0gICAgICB0aGlzLm1heEZyZXF1ZW5jeV8gPSA2MDsKLSAgICAgIHRoaXMubWluRnJlcXVl
bmN5XyA9IDE7Ci0gICAgICB0aGlzLmJpbmRpbmdfLmNsb3NlKCk7Ci0gICAgICB0aGlzLmludGVy
Y2VwdG9yXy5zdG9wKCk7Ci0gICAgfQotCi0gICAgLy8gU2V0cyBmbGFnIHRoYXQgZm9yY2VzIG1v
Y2sgU2Vuc29yUHJvdmlkZXIgdG8gZmFpbCB3aGVuIGdldFNlbnNvcigpIGlzCi0gICAgLy8gaW52
b2tlZC4KLSAgICBzZXRHZXRTZW5zb3JTaG91bGRGYWlsKHNlbnNvclR5cGUsIHNob3VsZEZhaWwp
IHsKLSAgICAgIHRoaXMuZ2V0U2Vuc29yU2hvdWxkRmFpbF8uc2V0KHRoaXMubW9qb21TZW5zb3JU
eXBlXy5nZXQoc2Vuc29yVHlwZSksCi0gICAgICAgICAgc2hvdWxkRmFpbCk7Ci0gICAgfQotCi0g
ICAgc2V0UGVybWlzc2lvbnNEZW5pZWQoc2Vuc29yVHlwZSwgcGVybWlzc2lvbnNEZW5pZWQpIHsK
LSAgICAgIHRoaXMucGVybWlzc2lvbnNEZW5pZWRfLnNldCh0aGlzLm1vam9tU2Vuc29yVHlwZV8u
Z2V0KHNlbnNvclR5cGUpLAotICAgICAgICAgIHBlcm1pc3Npb25zRGVuaWVkKTsKLSAgICB9Ci0K
LSAgICAvLyBSZXR1cm5zIG1vY2sgc2Vuc29yIHRoYXQgd2FzIGNyZWF0ZWQgaW4gZ2V0U2Vuc29y
IHRvIHRoZSBsYXlvdXQgdGVzdC4KLSAgICBnZXRDcmVhdGVkU2Vuc29yKHNlbnNvclR5cGUpIHsK
LSAgICAgIGNvbnN0IHR5cGUgPSB0aGlzLm1vam9tU2Vuc29yVHlwZV8uZ2V0KHNlbnNvclR5cGUp
OwotICAgICAgYXNzZXJ0X2VxdWFscyh0eXBlb2YgdHlwZSwgIm51bWJlciIsICJBIHNlbnNvciB0
eXBlIG11c3QgYmUgc3BlY2lmaWVkLiIpOwotCi0gICAgICBpZiAodGhpcy5hY3RpdmVTZW5zb3Jz
Xy5oYXModHlwZSkpIHsKLSAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh0aGlzLmFjdGl2
ZVNlbnNvcnNfLmdldCh0eXBlKSk7Ci0gICAgICB9Ci0KLSAgICAgIHJldHVybiBuZXcgUHJvbWlz
ZShyZXNvbHZlID0+IHsKLSAgICAgICAgaWYgKCF0aGlzLnJlc29sdmVGdW5jc18uaGFzKHR5cGUp
KSB7Ci0gICAgICAgICAgdGhpcy5yZXNvbHZlRnVuY3NfLnNldCh0eXBlLCBbXSk7Ci0gICAgICAg
IH0KLSAgICAgICAgdGhpcy5yZXNvbHZlRnVuY3NfLmdldCh0eXBlKS5wdXNoKHJlc29sdmUpOwot
ICAgICAgfSk7Ci0gICAgfQotCi0gICAgLy8gU2V0cyB0aGUgbWF4aW11bSBmcmVxdWVuY3kgZm9y
IGEgY29uY3JldGUgc2Vuc29yLgotICAgIHNldE1heGltdW1TdXBwb3J0ZWRGcmVxdWVuY3koZnJl
cXVlbmN5KSB7Ci0gICAgICB0aGlzLm1heEZyZXF1ZW5jeV8gPSBmcmVxdWVuY3k7Ci0gICAgfQot
Ci0gICAgLy8gU2V0cyB0aGUgbWluaW11bSBmcmVxdWVuY3kgZm9yIGEgY29uY3JldGUgc2Vuc29y
LgotICAgIHNldE1pbmltdW1TdXBwb3J0ZWRGcmVxdWVuY3koZnJlcXVlbmN5KSB7Ci0gICAgICB0
aGlzLm1pbkZyZXF1ZW5jeV8gPSBmcmVxdWVuY3k7Ci0gICAgfQotICB9Ci0KLSAgbGV0IHRlc3RJ
bnRlcm5hbCA9IHsKLSAgICBpbml0aWFsaXplZDogZmFsc2UsCi0gICAgc2Vuc29yUHJvdmlkZXI6
IG51bGwKLSAgfQotCi0gIGNsYXNzIEdlbmVyaWNTZW5zb3JUZXN0Q2hyb21pdW0gewotICAgIGNv
bnN0cnVjdG9yKCkgewotICAgICAgT2JqZWN0LmZyZWV6ZSh0aGlzKTsgLy8gTWFrZSBpdCBpbW11
dGFibGUuCi0gICAgfQotCi0gICAgYXN5bmMgaW5pdGlhbGl6ZSgpIHsKLSAgICAgIGlmICh0ZXN0
SW50ZXJuYWwuaW5pdGlhbGl6ZWQpCi0gICAgICAgIHRocm93IG5ldyBFcnJvcignQ2FsbCByZXNl
dCgpIGJlZm9yZSBpbml0aWFsaXplKCkuJyk7Ci0KLSAgICAgIC8vIEdyYW50IHNlbnNvciBwZXJt
aXNzaW9ucyBmb3IgQ2hyb21pdW0gdGVzdGRyaXZlci4KLSAgICAgIGZvciAoY29uc3QgZW50cnkg
b2YgWydhY2NlbGVyb21ldGVyJywgJ2d5cm9zY29wZScsCi0gICAgICAgICAgJ21hZ25ldG9tZXRl
cicsICdhbWJpZW50LWxpZ2h0LXNlbnNvciddKSB7Ci0gICAgICAgIGF3YWl0IHRlc3RfZHJpdmVy
LnNldF9wZXJtaXNzaW9uKHsgbmFtZTogZW50cnkgfSwgJ2dyYW50ZWQnLCBmYWxzZSk7Ci0gICAg
ICB9OwotCi0gICAgICB0ZXN0SW50ZXJuYWwuc2Vuc29yUHJvdmlkZXIgPSBuZXcgTW9ja1NlbnNv
clByb3ZpZGVyOwotICAgICAgdGVzdEludGVybmFsLmluaXRpYWxpemVkID0gdHJ1ZTsKLSAgICB9
Ci0gICAgLy8gUmVzZXRzIHN0YXRlIG9mIHNlbnNvciBtb2NrcyBiZXR3ZWVuIHRlc3QgcnVucy4K
LSAgICBhc3luYyByZXNldCgpIHsKLSAgICAgIGlmICghdGVzdEludGVybmFsLmluaXRpYWxpemVk
KQotICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0NhbGwgaW5pdGlhbGl6ZSgpIGJlZm9yZSByZXNl
dCgpLicpOwotICAgICAgdGVzdEludGVybmFsLnNlbnNvclByb3ZpZGVyLnJlc2V0KCk7Ci0gICAg
ICB0ZXN0SW50ZXJuYWwuc2Vuc29yUHJvdmlkZXIgPSBudWxsOwotICAgICAgdGVzdEludGVybmFs
LmluaXRpYWxpemVkID0gZmFsc2U7Ci0KLSAgICAgIC8vIFdhaXQgZm9yIGFuIGV2ZW50IGxvb3Ag
aXRlcmF0aW9uIHRvIGxldCBhbnkgcGVuZGluZyBtb2pvIGNvbW1hbmRzIGluCi0gICAgICAvLyB0
aGUgc2Vuc29yIHByb3ZpZGVyIGZpbmlzaC4KLSAgICAgIGF3YWl0IG5ldyBQcm9taXNlKHJlc29s
dmUgPT4gc2V0VGltZW91dChyZXNvbHZlLCAwKSk7Ci0gICAgfQotCi0gICAgZ2V0U2Vuc29yUHJv
dmlkZXIoKSB7Ci0gICAgICByZXR1cm4gdGVzdEludGVybmFsLnNlbnNvclByb3ZpZGVyOwotICAg
IH0KLSAgfQotCi0gIHJldHVybiBHZW5lcmljU2Vuc29yVGVzdENocm9taXVtOwotfSkoKTsKZGlm
ZiAtLWdpdCBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVz
b3VyY2VzL2Nocm9taXVtL2dlbmVyaWNfc2Vuc29yX21vY2tzLmpzLmhlYWRlcnMgYi9MYXlvdXRU
ZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS9n
ZW5lcmljX3NlbnNvcl9tb2Nrcy5qcy5oZWFkZXJzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCA2ODA1YzMyM2RmNWE5NzUyMzE2NDhiODMwZTMzY2UxODNjM2NiYmQzLi4wMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL0xheW91dFRlc3RzL2ltcG9ydGVk
L3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL2dlbmVyaWNfc2Vuc29y
X21vY2tzLmpzLmhlYWRlcnMKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi1Db250ZW50LVR5
cGU6IHRleHQvamF2YXNjcmlwdDsgY2hhcnNldD11dGYtOApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVz
dHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vaW1h
Z2VfY2FwdHVyZS1tb2pvbS5qcy5oZWFkZXJzIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dl
Yi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vaW1hZ2VfY2FwdHVyZS1tb2pvbS5q
cy5oZWFkZXJzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2YzYxYTM0YTRlYzJlNzUw
OTZkYjBlYjlmNzc0OGIxNDJmMGRiN2JiLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwCi0tLSBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVz
dHMvcmVzb3VyY2VzL2Nocm9taXVtL2ltYWdlX2NhcHR1cmUtbW9qb20uanMuaGVhZGVycworKysg
L2Rldi9udWxsCkBAIC0xICswLDAgQEAKLUNvbnRlbnQtVHlwZTogdGV4dC9qYXZhc2NyaXB0OyBj
aGFyc2V0PXV0Zi04ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvTGF5
b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21p
dW0vaW1hZ2VfY2FwdHVyZS5tb2pvbS5qcyBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWIt
cGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL2ltYWdlX2NhcHR1cmUubW9qb20uanMK
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYxNDVkN2EzNDAyNTQzYTE4MjI5NjI5ZGEw
MTMzZGVhODFkZDM3NTUuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAK
LS0tIGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJj
ZXMvY2hyb21pdW0vaW1hZ2VfY2FwdHVyZS5tb2pvbS5qcworKysgL2Rldi9udWxsCkBAIC0xLDE0
MDMgKzAsMCBAQAotLy8gQ29weXJpZ2h0IDIwMTQgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBi
eSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5T
RSBmaWxlLgotCi0ndXNlIHN0cmljdCc7Ci0KLShmdW5jdGlvbigpIHsKLSAgdmFyIG1vam9tSWQg
PSAnbWVkaWEvY2FwdHVyZS9tb2pvbS9pbWFnZV9jYXB0dXJlLm1vam9tJzsKLSAgaWYgKG1vam8u
aW50ZXJuYWwuaXNNb2pvbUxvYWRlZChtb2pvbUlkKSkgewotICAgIGNvbnNvbGUud2FybignVGhl
IGZvbGxvd2luZyBtb2pvbSBpcyBsb2FkZWQgbXVsdGlwbGUgdGltZXM6ICcgKyBtb2pvbUlkKTsK
LSAgICByZXR1cm47Ci0gIH0KLSAgbW9qby5pbnRlcm5hbC5tYXJrTW9qb21Mb2FkZWQobW9qb21J
ZCk7Ci0gIHZhciBiaW5kaW5ncyA9IG1vam87Ci0gIHZhciBhc3NvY2lhdGVkQmluZGluZ3MgPSBt
b2pvOwotICB2YXIgY29kZWMgPSBtb2pvLmludGVybmFsOwotICB2YXIgdmFsaWRhdG9yID0gbW9q
by5pbnRlcm5hbDsKLQotICB2YXIgZXhwb3J0cyA9IG1vam8uaW50ZXJuYWwuZXhwb3NlTmFtZXNw
YWNlKCdtZWRpYS5tb2pvbScpOwotCi0KLSAgdmFyIE1ldGVyaW5nTW9kZSA9IHt9OwotICBNZXRl
cmluZ01vZGUuTk9ORSA9IDA7Ci0gIE1ldGVyaW5nTW9kZS5NQU5VQUwgPSBNZXRlcmluZ01vZGUu
Tk9ORSArIDE7Ci0gIE1ldGVyaW5nTW9kZS5TSU5HTEVfU0hPVCA9IE1ldGVyaW5nTW9kZS5NQU5V
QUwgKyAxOwotICBNZXRlcmluZ01vZGUuQ09OVElOVU9VUyA9IE1ldGVyaW5nTW9kZS5TSU5HTEVf
U0hPVCArIDE7Ci0gIE1ldGVyaW5nTW9kZS5NSU5fVkFMVUUgPSAwLAotICBNZXRlcmluZ01vZGUu
TUFYX1ZBTFVFID0gMywKLQotICBNZXRlcmluZ01vZGUuaXNLbm93bkVudW1WYWx1ZSA9IGZ1bmN0
aW9uKHZhbHVlKSB7Ci0gICAgc3dpdGNoICh2YWx1ZSkgewotICAgIGNhc2UgMDoKLSAgICBjYXNl
IDE6Ci0gICAgY2FzZSAyOgotICAgIGNhc2UgMzoKLSAgICAgIHJldHVybiB0cnVlOwotICAgIH0K
LSAgICByZXR1cm4gZmFsc2U7Ci0gIH07Ci0KLSAgTWV0ZXJpbmdNb2RlLnZhbGlkYXRlID0gZnVu
Y3Rpb24oZW51bVZhbHVlKSB7Ci0gICAgdmFyIGlzRXh0ZW5zaWJsZSA9IGZhbHNlOwotICAgIGlm
IChpc0V4dGVuc2libGUgfHwgdGhpcy5pc0tub3duRW51bVZhbHVlKGVudW1WYWx1ZSkpCi0gICAg
ICByZXR1cm4gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FOwotCi0gICAgcmV0dXJuIHZh
bGlkYXRvci52YWxpZGF0aW9uRXJyb3IuVU5LTk9XTl9FTlVNX1ZBTFVFOwotICB9OwotICB2YXIg
UmVkRXllUmVkdWN0aW9uID0ge307Ci0gIFJlZEV5ZVJlZHVjdGlvbi5ORVZFUiA9IDA7Ci0gIFJl
ZEV5ZVJlZHVjdGlvbi5BTFdBWVMgPSBSZWRFeWVSZWR1Y3Rpb24uTkVWRVIgKyAxOwotICBSZWRF
eWVSZWR1Y3Rpb24uQ09OVFJPTExBQkxFID0gUmVkRXllUmVkdWN0aW9uLkFMV0FZUyArIDE7Ci0g
IFJlZEV5ZVJlZHVjdGlvbi5NSU5fVkFMVUUgPSAwLAotICBSZWRFeWVSZWR1Y3Rpb24uTUFYX1ZB
TFVFID0gMiwKLQotICBSZWRFeWVSZWR1Y3Rpb24uaXNLbm93bkVudW1WYWx1ZSA9IGZ1bmN0aW9u
KHZhbHVlKSB7Ci0gICAgc3dpdGNoICh2YWx1ZSkgewotICAgIGNhc2UgMDoKLSAgICBjYXNlIDE6
Ci0gICAgY2FzZSAyOgotICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIHJldHVybiBmYWxz
ZTsKLSAgfTsKLQotICBSZWRFeWVSZWR1Y3Rpb24udmFsaWRhdGUgPSBmdW5jdGlvbihlbnVtVmFs
dWUpIHsKLSAgICB2YXIgaXNFeHRlbnNpYmxlID0gZmFsc2U7Ci0gICAgaWYgKGlzRXh0ZW5zaWJs
ZSB8fCB0aGlzLmlzS25vd25FbnVtVmFsdWUoZW51bVZhbHVlKSkKLSAgICAgIHJldHVybiB2YWxp
ZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkU7Ci0KLSAgICByZXR1cm4gdmFsaWRhdG9yLnZhbGlk
YXRpb25FcnJvci5VTktOT1dOX0VOVU1fVkFMVUU7Ci0gIH07Ci0gIHZhciBGaWxsTGlnaHRNb2Rl
ID0ge307Ci0gIEZpbGxMaWdodE1vZGUuT0ZGID0gMDsKLSAgRmlsbExpZ2h0TW9kZS5BVVRPID0g
RmlsbExpZ2h0TW9kZS5PRkYgKyAxOwotICBGaWxsTGlnaHRNb2RlLkZMQVNIID0gRmlsbExpZ2h0
TW9kZS5BVVRPICsgMTsKLSAgRmlsbExpZ2h0TW9kZS5NSU5fVkFMVUUgPSAwLAotICBGaWxsTGln
aHRNb2RlLk1BWF9WQUxVRSA9IDIsCi0KLSAgRmlsbExpZ2h0TW9kZS5pc0tub3duRW51bVZhbHVl
ID0gZnVuY3Rpb24odmFsdWUpIHsKLSAgICBzd2l0Y2ggKHZhbHVlKSB7Ci0gICAgY2FzZSAwOgot
ICAgIGNhc2UgMToKLSAgICBjYXNlIDI6Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAg
cmV0dXJuIGZhbHNlOwotICB9OwotCi0gIEZpbGxMaWdodE1vZGUudmFsaWRhdGUgPSBmdW5jdGlv
bihlbnVtVmFsdWUpIHsKLSAgICB2YXIgaXNFeHRlbnNpYmxlID0gZmFsc2U7Ci0gICAgaWYgKGlz
RXh0ZW5zaWJsZSB8fCB0aGlzLmlzS25vd25FbnVtVmFsdWUoZW51bVZhbHVlKSkKLSAgICAgIHJl
dHVybiB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkU7Ci0KLSAgICByZXR1cm4gdmFsaWRh
dG9yLnZhbGlkYXRpb25FcnJvci5VTktOT1dOX0VOVU1fVkFMVUU7Ci0gIH07Ci0KLSAgZnVuY3Rp
b24gUmFuZ2UodmFsdWVzKSB7Ci0gICAgdGhpcy5pbml0RGVmYXVsdHNfKCk7Ci0gICAgdGhpcy5p
bml0RmllbGRzXyh2YWx1ZXMpOwotICB9Ci0KLQotICBSYW5nZS5wcm90b3R5cGUuaW5pdERlZmF1
bHRzXyA9IGZ1bmN0aW9uKCkgewotICAgIHRoaXMubWF4ID0gMDsKLSAgICB0aGlzLm1pbiA9IDA7
Ci0gICAgdGhpcy5jdXJyZW50ID0gMDsKLSAgICB0aGlzLnN0ZXAgPSAwOwotICB9OwotICBSYW5n
ZS5wcm90b3R5cGUuaW5pdEZpZWxkc18gPSBmdW5jdGlvbihmaWVsZHMpIHsKLSAgICBmb3IodmFy
IGZpZWxkIGluIGZpZWxkcykgewotICAgICAgICBpZiAodGhpcy5oYXNPd25Qcm9wZXJ0eShmaWVs
ZCkpCi0gICAgICAgICAgdGhpc1tmaWVsZF0gPSBmaWVsZHNbZmllbGRdOwotICAgIH0KLSAgfTsK
LQotICBSYW5nZS52YWxpZGF0ZSA9IGZ1bmN0aW9uKG1lc3NhZ2VWYWxpZGF0b3IsIG9mZnNldCkg
ewotICAgIHZhciBlcnI7Ci0gICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVj
dEhlYWRlcihvZmZzZXQsIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplKTsKLSAgICBpZiAoZXJyICE9
PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCi0gICAgICAgIHJldHVybiBlcnI7Ci0K
LSAgICB2YXIga1ZlcnNpb25TaXplcyA9IFsKLSAgICAgIHt2ZXJzaW9uOiAwLCBudW1CeXRlczog
NDB9Ci0gICAgXTsKLSAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0VmVy
c2lvbihvZmZzZXQsIGtWZXJzaW9uU2l6ZXMpOwotICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52
YWxpZGF0aW9uRXJyb3IuTk9ORSkKLSAgICAgICAgcmV0dXJuIGVycjsKLQotCi0KLQotCi0gICAg
cmV0dXJuIHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORTsKLSAgfTsKLQotICBSYW5nZS5l
bmNvZGVkU2l6ZSA9IGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgMzI7Ci0KLSAgUmFuZ2UuZGVj
b2RlID0gZnVuY3Rpb24oZGVjb2RlcikgewotICAgIHZhciBwYWNrZWQ7Ci0gICAgdmFyIHZhbCA9
IG5ldyBSYW5nZSgpOwotICAgIHZhciBudW1iZXJPZkJ5dGVzID0gZGVjb2Rlci5yZWFkVWludDMy
KCk7Ci0gICAgdmFyIHZlcnNpb24gPSBkZWNvZGVyLnJlYWRVaW50MzIoKTsKLSAgICB2YWwubWF4
ID0gZGVjb2Rlci5kZWNvZGVTdHJ1Y3QoY29kZWMuRG91YmxlKTsKLSAgICB2YWwubWluID0gZGVj
b2Rlci5kZWNvZGVTdHJ1Y3QoY29kZWMuRG91YmxlKTsKLSAgICB2YWwuY3VycmVudCA9IGRlY29k
ZXIuZGVjb2RlU3RydWN0KGNvZGVjLkRvdWJsZSk7Ci0gICAgdmFsLnN0ZXAgPSBkZWNvZGVyLmRl
Y29kZVN0cnVjdChjb2RlYy5Eb3VibGUpOwotICAgIHJldHVybiB2YWw7Ci0gIH07Ci0KLSAgUmFu
Z2UuZW5jb2RlID0gZnVuY3Rpb24oZW5jb2RlciwgdmFsKSB7Ci0gICAgdmFyIHBhY2tlZDsKLSAg
ICBlbmNvZGVyLndyaXRlVWludDMyKFJhbmdlLmVuY29kZWRTaXplKTsKLSAgICBlbmNvZGVyLndy
aXRlVWludDMyKDApOwotICAgIGVuY29kZXIuZW5jb2RlU3RydWN0KGNvZGVjLkRvdWJsZSwgdmFs
Lm1heCk7Ci0gICAgZW5jb2Rlci5lbmNvZGVTdHJ1Y3QoY29kZWMuRG91YmxlLCB2YWwubWluKTsK
LSAgICBlbmNvZGVyLmVuY29kZVN0cnVjdChjb2RlYy5Eb3VibGUsIHZhbC5jdXJyZW50KTsKLSAg
ICBlbmNvZGVyLmVuY29kZVN0cnVjdChjb2RlYy5Eb3VibGUsIHZhbC5zdGVwKTsKLSAgfTsKLSAg
ZnVuY3Rpb24gUGhvdG9TdGF0ZSh2YWx1ZXMpIHsKLSAgICB0aGlzLmluaXREZWZhdWx0c18oKTsK
LSAgICB0aGlzLmluaXRGaWVsZHNfKHZhbHVlcyk7Ci0gIH0KLQotCi0gIFBob3RvU3RhdGUucHJv
dG90eXBlLmluaXREZWZhdWx0c18gPSBmdW5jdGlvbigpIHsKLSAgICB0aGlzLnN1cHBvcnRlZFdo
aXRlQmFsYW5jZU1vZGVzID0gbnVsbDsKLSAgICB0aGlzLmN1cnJlbnRXaGl0ZUJhbGFuY2VNb2Rl
ID0gMDsKLSAgICB0aGlzLmN1cnJlbnRFeHBvc3VyZU1vZGUgPSAwOwotICAgIHRoaXMuc3VwcG9y
dGVkRXhwb3N1cmVNb2RlcyA9IG51bGw7Ci0gICAgdGhpcy5zdXBwb3J0ZWRGb2N1c01vZGVzID0g
bnVsbDsKLSAgICB0aGlzLmN1cnJlbnRGb2N1c01vZGUgPSAwOwotICAgIHRoaXMuc3VwcG9ydHNU
b3JjaCA9IGZhbHNlOwotICAgIHRoaXMudG9yY2ggPSBmYWxzZTsKLSAgICB0aGlzLnBvaW50c09m
SW50ZXJlc3QgPSBudWxsOwotICAgIHRoaXMuZXhwb3N1cmVDb21wZW5zYXRpb24gPSBudWxsOwot
ICAgIHRoaXMuZXhwb3N1cmVUaW1lID0gbnVsbDsKLSAgICB0aGlzLmNvbG9yVGVtcGVyYXR1cmUg
PSBudWxsOwotICAgIHRoaXMuaXNvID0gbnVsbDsKLSAgICB0aGlzLmJyaWdodG5lc3MgPSBudWxs
OwotICAgIHRoaXMuY29udHJhc3QgPSBudWxsOwotICAgIHRoaXMuc2F0dXJhdGlvbiA9IG51bGw7
Ci0gICAgdGhpcy5zaGFycG5lc3MgPSBudWxsOwotICAgIHRoaXMuZm9jdXNEaXN0YW5jZSA9IG51
bGw7Ci0gICAgdGhpcy5wYW4gPSBudWxsOwotICAgIHRoaXMudGlsdCA9IG51bGw7Ci0gICAgdGhp
cy56b29tID0gbnVsbDsKLSAgICB0aGlzLnJlZEV5ZVJlZHVjdGlvbiA9IDA7Ci0gICAgdGhpcy5o
ZWlnaHQgPSBudWxsOwotICAgIHRoaXMud2lkdGggPSBudWxsOwotICAgIHRoaXMuZmlsbExpZ2h0
TW9kZSA9IG51bGw7Ci0gIH07Ci0gIFBob3RvU3RhdGUucHJvdG90eXBlLmluaXRGaWVsZHNfID0g
ZnVuY3Rpb24oZmllbGRzKSB7Ci0gICAgZm9yKHZhciBmaWVsZCBpbiBmaWVsZHMpIHsKLSAgICAg
ICAgaWYgKHRoaXMuaGFzT3duUHJvcGVydHkoZmllbGQpKQotICAgICAgICAgIHRoaXNbZmllbGRd
ID0gZmllbGRzW2ZpZWxkXTsKLSAgICB9Ci0gIH07Ci0KLSAgUGhvdG9TdGF0ZS52YWxpZGF0ZSA9
IGZ1bmN0aW9uKG1lc3NhZ2VWYWxpZGF0b3IsIG9mZnNldCkgewotICAgIHZhciBlcnI7Ci0gICAg
ZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdEhlYWRlcihvZmZzZXQsIGNvZGVj
LmtTdHJ1Y3RIZWFkZXJTaXplKTsKLSAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlv
bkVycm9yLk5PTkUpCi0gICAgICAgIHJldHVybiBlcnI7Ci0KLSAgICB2YXIga1ZlcnNpb25TaXpl
cyA9IFsKLSAgICAgIHt2ZXJzaW9uOiAwLCBudW1CeXRlczogMTg0fQotICAgIF07Ci0gICAgZXJy
ID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdFZlcnNpb24ob2Zmc2V0LCBrVmVyc2lv
blNpemVzKTsKLSAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUp
Ci0gICAgICAgIHJldHVybiBlcnI7Ci0KLQotICAgIC8vIHZhbGlkYXRlIFBob3RvU3RhdGUuc3Vw
cG9ydGVkV2hpdGVCYWxhbmNlTW9kZXMKLSAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlk
YXRlQXJyYXlQb2ludGVyKG9mZnNldCArIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgMCwgNCwg
bmV3IGNvZGVjLkVudW0oTWV0ZXJpbmdNb2RlKSwgZmFsc2UsIFswXSwgMCk7Ci0gICAgaWYgKGVy
ciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQotICAgICAgICByZXR1cm4gZXJy
OwotCi0KLSAgICAvLyB2YWxpZGF0ZSBQaG90b1N0YXRlLmN1cnJlbnRXaGl0ZUJhbGFuY2VNb2Rl
Ci0gICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZUVudW0ob2Zmc2V0ICsgY29kZWMu
a1N0cnVjdEhlYWRlclNpemUgKyA4LCBNZXRlcmluZ01vZGUpOwotICAgIGlmIChlcnIgIT09IHZh
bGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKLSAgICAgICAgcmV0dXJuIGVycjsKLQotCi0g
ICAgLy8gdmFsaWRhdGUgUGhvdG9TdGF0ZS5zdXBwb3J0ZWRFeHBvc3VyZU1vZGVzCi0gICAgZXJy
ID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZUFycmF5UG9pbnRlcihvZmZzZXQgKyBjb2RlYy5r
U3RydWN0SGVhZGVyU2l6ZSArIDE2LCA0LCBuZXcgY29kZWMuRW51bShNZXRlcmluZ01vZGUpLCBm
YWxzZSwgWzBdLCAwKTsKLSAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9y
Lk5PTkUpCi0gICAgICAgIHJldHVybiBlcnI7Ci0KLQotICAgIC8vIHZhbGlkYXRlIFBob3RvU3Rh
dGUuY3VycmVudEV4cG9zdXJlTW9kZQotICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRh
dGVFbnVtKG9mZnNldCArIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgMTIsIE1ldGVyaW5nTW9k
ZSk7Ci0gICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQotICAg
ICAgICByZXR1cm4gZXJyOwotCi0KLSAgICAvLyB2YWxpZGF0ZSBQaG90b1N0YXRlLnN1cHBvcnRl
ZEZvY3VzTW9kZXMKLSAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlQXJyYXlQb2lu
dGVyKG9mZnNldCArIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgMjQsIDQsIG5ldyBjb2RlYy5F
bnVtKE1ldGVyaW5nTW9kZSksIGZhbHNlLCBbMF0sIDApOwotICAgIGlmIChlcnIgIT09IHZhbGlk
YXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKLSAgICAgICAgcmV0dXJuIGVycjsKLQotCi0gICAg
Ly8gdmFsaWRhdGUgUGhvdG9TdGF0ZS5jdXJyZW50Rm9jdXNNb2RlCi0gICAgZXJyID0gbWVzc2Fn
ZVZhbGlkYXRvci52YWxpZGF0ZUVudW0ob2Zmc2V0ICsgY29kZWMua1N0cnVjdEhlYWRlclNpemUg
KyAzMiwgTWV0ZXJpbmdNb2RlKTsKLSAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlv
bkVycm9yLk5PTkUpCi0gICAgICAgIHJldHVybiBlcnI7Ci0KLQotICAgIC8vIHZhbGlkYXRlIFBo
b3RvU3RhdGUucG9pbnRzT2ZJbnRlcmVzdAotICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFs
aWRhdGVBcnJheVBvaW50ZXIob2Zmc2V0ICsgY29kZWMua1N0cnVjdEhlYWRlclNpemUgKyA0MCwg
OCwgbmV3IGNvZGVjLlBvaW50ZXJUbyhQb2ludDJEKSwgZmFsc2UsIFswXSwgMCk7Ci0gICAgaWYg
KGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQotICAgICAgICByZXR1cm4g
ZXJyOwotCi0KLSAgICAvLyB2YWxpZGF0ZSBQaG90b1N0YXRlLmV4cG9zdXJlQ29tcGVuc2F0aW9u
Ci0gICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdFBvaW50ZXIob2Zmc2V0
ICsgY29kZWMua1N0cnVjdEhlYWRlclNpemUgKyA0OCwgUmFuZ2UsIGZhbHNlKTsKLSAgICBpZiAo
ZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCi0gICAgICAgIHJldHVybiBl
cnI7Ci0KLQotICAgIC8vIHZhbGlkYXRlIFBob3RvU3RhdGUuZXhwb3N1cmVUaW1lCi0gICAgZXJy
ID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdFBvaW50ZXIob2Zmc2V0ICsgY29kZWMu
a1N0cnVjdEhlYWRlclNpemUgKyA1NiwgUmFuZ2UsIGZhbHNlKTsKLSAgICBpZiAoZXJyICE9PSB2
YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCi0gICAgICAgIHJldHVybiBlcnI7Ci0KLQot
ICAgIC8vIHZhbGlkYXRlIFBob3RvU3RhdGUuY29sb3JUZW1wZXJhdHVyZQotICAgIGVyciA9IG1l
c3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RQb2ludGVyKG9mZnNldCArIGNvZGVjLmtTdHJ1
Y3RIZWFkZXJTaXplICsgNjQsIFJhbmdlLCBmYWxzZSk7Ci0gICAgaWYgKGVyciAhPT0gdmFsaWRh
dG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQotICAgICAgICByZXR1cm4gZXJyOwotCi0KLSAgICAv
LyB2YWxpZGF0ZSBQaG90b1N0YXRlLmlzbwotICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFs
aWRhdGVTdHJ1Y3RQb2ludGVyKG9mZnNldCArIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgNzIs
IFJhbmdlLCBmYWxzZSk7Ci0gICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJv
ci5OT05FKQotICAgICAgICByZXR1cm4gZXJyOwotCi0KLSAgICAvLyB2YWxpZGF0ZSBQaG90b1N0
YXRlLmJyaWdodG5lc3MKLSAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0
UG9pbnRlcihvZmZzZXQgKyBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDgwLCBSYW5nZSwgZmFs
c2UpOwotICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKLSAg
ICAgICAgcmV0dXJuIGVycjsKLQotCi0gICAgLy8gdmFsaWRhdGUgUGhvdG9TdGF0ZS5jb250cmFz
dAotICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RQb2ludGVyKG9mZnNl
dCArIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgODgsIFJhbmdlLCBmYWxzZSk7Ci0gICAgaWYg
KGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQotICAgICAgICByZXR1cm4g
ZXJyOwotCi0KLSAgICAvLyB2YWxpZGF0ZSBQaG90b1N0YXRlLnNhdHVyYXRpb24KLSAgICBlcnIg
PSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0UG9pbnRlcihvZmZzZXQgKyBjb2RlYy5r
U3RydWN0SGVhZGVyU2l6ZSArIDk2LCBSYW5nZSwgZmFsc2UpOwotICAgIGlmIChlcnIgIT09IHZh
bGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKLSAgICAgICAgcmV0dXJuIGVycjsKLQotCi0g
ICAgLy8gdmFsaWRhdGUgUGhvdG9TdGF0ZS5zaGFycG5lc3MKLSAgICBlcnIgPSBtZXNzYWdlVmFs
aWRhdG9yLnZhbGlkYXRlU3RydWN0UG9pbnRlcihvZmZzZXQgKyBjb2RlYy5rU3RydWN0SGVhZGVy
U2l6ZSArIDEwNCwgUmFuZ2UsIGZhbHNlKTsKLSAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFs
aWRhdGlvbkVycm9yLk5PTkUpCi0gICAgICAgIHJldHVybiBlcnI7Ci0KLQotICAgIC8vIHZhbGlk
YXRlIFBob3RvU3RhdGUuZm9jdXNEaXN0YW5jZQotICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3Iu
dmFsaWRhdGVTdHJ1Y3RQb2ludGVyKG9mZnNldCArIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsg
MTEyLCBSYW5nZSwgZmFsc2UpOwotICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9u
RXJyb3IuTk9ORSkKLSAgICAgICAgcmV0dXJuIGVycjsKLQotCi0gICAgLy8gdmFsaWRhdGUgUGhv
dG9TdGF0ZS5wYW4KLSAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0UG9p
bnRlcihvZmZzZXQgKyBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDEyMCwgUmFuZ2UsIGZhbHNl
KTsKLSAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCi0gICAg
ICAgIHJldHVybiBlcnI7Ci0KLQotICAgIC8vIHZhbGlkYXRlIFBob3RvU3RhdGUudGlsdAotICAg
IGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RQb2ludGVyKG9mZnNldCArIGNv
ZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgMTI4LCBSYW5nZSwgZmFsc2UpOwotICAgIGlmIChlcnIg
IT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKLSAgICAgICAgcmV0dXJuIGVycjsK
LQotCi0gICAgLy8gdmFsaWRhdGUgUGhvdG9TdGF0ZS56b29tCi0gICAgZXJyID0gbWVzc2FnZVZh
bGlkYXRvci52YWxpZGF0ZVN0cnVjdFBvaW50ZXIob2Zmc2V0ICsgY29kZWMua1N0cnVjdEhlYWRl
clNpemUgKyAxMzYsIFJhbmdlLCBmYWxzZSk7Ci0gICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZh
bGlkYXRpb25FcnJvci5OT05FKQotICAgICAgICByZXR1cm4gZXJyOwotCi0KLQotCi0gICAgLy8g
dmFsaWRhdGUgUGhvdG9TdGF0ZS5yZWRFeWVSZWR1Y3Rpb24KLSAgICBlcnIgPSBtZXNzYWdlVmFs
aWRhdG9yLnZhbGlkYXRlRW51bShvZmZzZXQgKyBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDE0
NCwgUmVkRXllUmVkdWN0aW9uKTsKLSAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlv
bkVycm9yLk5PTkUpCi0gICAgICAgIHJldHVybiBlcnI7Ci0KLQotICAgIC8vIHZhbGlkYXRlIFBo
b3RvU3RhdGUuaGVpZ2h0Ci0gICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVj
dFBvaW50ZXIob2Zmc2V0ICsgY29kZWMua1N0cnVjdEhlYWRlclNpemUgKyAxNTIsIFJhbmdlLCBm
YWxzZSk7Ci0gICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQot
ICAgICAgICByZXR1cm4gZXJyOwotCi0KLSAgICAvLyB2YWxpZGF0ZSBQaG90b1N0YXRlLndpZHRo
Ci0gICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdFBvaW50ZXIob2Zmc2V0
ICsgY29kZWMua1N0cnVjdEhlYWRlclNpemUgKyAxNjAsIFJhbmdlLCBmYWxzZSk7Ci0gICAgaWYg
KGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQotICAgICAgICByZXR1cm4g
ZXJyOwotCi0KLSAgICAvLyB2YWxpZGF0ZSBQaG90b1N0YXRlLmZpbGxMaWdodE1vZGUKLSAgICBl
cnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlQXJyYXlQb2ludGVyKG9mZnNldCArIGNvZGVj
LmtTdHJ1Y3RIZWFkZXJTaXplICsgMTY4LCA0LCBuZXcgY29kZWMuRW51bShGaWxsTGlnaHRNb2Rl
KSwgZmFsc2UsIFswXSwgMCk7Ci0gICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25F
cnJvci5OT05FKQotICAgICAgICByZXR1cm4gZXJyOwotCi0gICAgcmV0dXJuIHZhbGlkYXRvci52
YWxpZGF0aW9uRXJyb3IuTk9ORTsKLSAgfTsKLQotICBQaG90b1N0YXRlLmVuY29kZWRTaXplID0g
Y29kZWMua1N0cnVjdEhlYWRlclNpemUgKyAxNzY7Ci0KLSAgUGhvdG9TdGF0ZS5kZWNvZGUgPSBm
dW5jdGlvbihkZWNvZGVyKSB7Ci0gICAgdmFyIHBhY2tlZDsKLSAgICB2YXIgdmFsID0gbmV3IFBo
b3RvU3RhdGUoKTsKLSAgICB2YXIgbnVtYmVyT2ZCeXRlcyA9IGRlY29kZXIucmVhZFVpbnQzMigp
OwotICAgIHZhciB2ZXJzaW9uID0gZGVjb2Rlci5yZWFkVWludDMyKCk7Ci0gICAgdmFsLnN1cHBv
cnRlZFdoaXRlQmFsYW5jZU1vZGVzID0gZGVjb2Rlci5kZWNvZGVBcnJheVBvaW50ZXIobmV3IGNv
ZGVjLkVudW0oTWV0ZXJpbmdNb2RlKSk7Ci0gICAgdmFsLmN1cnJlbnRXaGl0ZUJhbGFuY2VNb2Rl
ID0gZGVjb2Rlci5kZWNvZGVTdHJ1Y3QoY29kZWMuSW50MzIpOwotICAgIHZhbC5jdXJyZW50RXhw
b3N1cmVNb2RlID0gZGVjb2Rlci5kZWNvZGVTdHJ1Y3QoY29kZWMuSW50MzIpOwotICAgIHZhbC5z
dXBwb3J0ZWRFeHBvc3VyZU1vZGVzID0gZGVjb2Rlci5kZWNvZGVBcnJheVBvaW50ZXIobmV3IGNv
ZGVjLkVudW0oTWV0ZXJpbmdNb2RlKSk7Ci0gICAgdmFsLnN1cHBvcnRlZEZvY3VzTW9kZXMgPSBk
ZWNvZGVyLmRlY29kZUFycmF5UG9pbnRlcihuZXcgY29kZWMuRW51bShNZXRlcmluZ01vZGUpKTsK
LSAgICB2YWwuY3VycmVudEZvY3VzTW9kZSA9IGRlY29kZXIuZGVjb2RlU3RydWN0KGNvZGVjLklu
dDMyKTsKLSAgICBwYWNrZWQgPSBkZWNvZGVyLnJlYWRVaW50OCgpOwotICAgIHZhbC5zdXBwb3J0
c1RvcmNoID0gKHBhY2tlZCA+PiAwKSAmIDEgPyB0cnVlIDogZmFsc2U7Ci0gICAgdmFsLnRvcmNo
ID0gKHBhY2tlZCA+PiAxKSAmIDEgPyB0cnVlIDogZmFsc2U7Ci0gICAgZGVjb2Rlci5za2lwKDEp
OwotICAgIGRlY29kZXIuc2tpcCgxKTsKLSAgICBkZWNvZGVyLnNraXAoMSk7Ci0gICAgdmFsLnBv
aW50c09mSW50ZXJlc3QgPSBkZWNvZGVyLmRlY29kZUFycmF5UG9pbnRlcihuZXcgY29kZWMuUG9p
bnRlclRvKFBvaW50MkQpKTsKLSAgICB2YWwuZXhwb3N1cmVDb21wZW5zYXRpb24gPSBkZWNvZGVy
LmRlY29kZVN0cnVjdFBvaW50ZXIoUmFuZ2UpOwotICAgIHZhbC5leHBvc3VyZVRpbWUgPSBkZWNv
ZGVyLmRlY29kZVN0cnVjdFBvaW50ZXIoUmFuZ2UpOwotICAgIHZhbC5jb2xvclRlbXBlcmF0dXJl
ID0gZGVjb2Rlci5kZWNvZGVTdHJ1Y3RQb2ludGVyKFJhbmdlKTsKLSAgICB2YWwuaXNvID0gZGVj
b2Rlci5kZWNvZGVTdHJ1Y3RQb2ludGVyKFJhbmdlKTsKLSAgICB2YWwuYnJpZ2h0bmVzcyA9IGRl
Y29kZXIuZGVjb2RlU3RydWN0UG9pbnRlcihSYW5nZSk7Ci0gICAgdmFsLmNvbnRyYXN0ID0gZGVj
b2Rlci5kZWNvZGVTdHJ1Y3RQb2ludGVyKFJhbmdlKTsKLSAgICB2YWwuc2F0dXJhdGlvbiA9IGRl
Y29kZXIuZGVjb2RlU3RydWN0UG9pbnRlcihSYW5nZSk7Ci0gICAgdmFsLnNoYXJwbmVzcyA9IGRl
Y29kZXIuZGVjb2RlU3RydWN0UG9pbnRlcihSYW5nZSk7Ci0gICAgdmFsLmZvY3VzRGlzdGFuY2Ug
PSBkZWNvZGVyLmRlY29kZVN0cnVjdFBvaW50ZXIoUmFuZ2UpOwotICAgIHZhbC5wYW4gPSBkZWNv
ZGVyLmRlY29kZVN0cnVjdFBvaW50ZXIoUmFuZ2UpOwotICAgIHZhbC50aWx0ID0gZGVjb2Rlci5k
ZWNvZGVTdHJ1Y3RQb2ludGVyKFJhbmdlKTsKLSAgICB2YWwuem9vbSA9IGRlY29kZXIuZGVjb2Rl
U3RydWN0UG9pbnRlcihSYW5nZSk7Ci0gICAgdmFsLnJlZEV5ZVJlZHVjdGlvbiA9IGRlY29kZXIu
ZGVjb2RlU3RydWN0KGNvZGVjLkludDMyKTsKLSAgICBkZWNvZGVyLnNraXAoMSk7Ci0gICAgZGVj
b2Rlci5za2lwKDEpOwotICAgIGRlY29kZXIuc2tpcCgxKTsKLSAgICBkZWNvZGVyLnNraXAoMSk7
Ci0gICAgdmFsLmhlaWdodCA9IGRlY29kZXIuZGVjb2RlU3RydWN0UG9pbnRlcihSYW5nZSk7Ci0g
ICAgdmFsLndpZHRoID0gZGVjb2Rlci5kZWNvZGVTdHJ1Y3RQb2ludGVyKFJhbmdlKTsKLSAgICB2
YWwuZmlsbExpZ2h0TW9kZSA9IGRlY29kZXIuZGVjb2RlQXJyYXlQb2ludGVyKG5ldyBjb2RlYy5F
bnVtKEZpbGxMaWdodE1vZGUpKTsKLSAgICByZXR1cm4gdmFsOwotICB9OwotCi0gIFBob3RvU3Rh
dGUuZW5jb2RlID0gZnVuY3Rpb24oZW5jb2RlciwgdmFsKSB7Ci0gICAgdmFyIHBhY2tlZDsKLSAg
ICBlbmNvZGVyLndyaXRlVWludDMyKFBob3RvU3RhdGUuZW5jb2RlZFNpemUpOwotICAgIGVuY29k
ZXIud3JpdGVVaW50MzIoMCk7Ci0gICAgZW5jb2Rlci5lbmNvZGVBcnJheVBvaW50ZXIobmV3IGNv
ZGVjLkVudW0oTWV0ZXJpbmdNb2RlKSwgdmFsLnN1cHBvcnRlZFdoaXRlQmFsYW5jZU1vZGVzKTsK
LSAgICBlbmNvZGVyLmVuY29kZVN0cnVjdChjb2RlYy5JbnQzMiwgdmFsLmN1cnJlbnRXaGl0ZUJh
bGFuY2VNb2RlKTsKLSAgICBlbmNvZGVyLmVuY29kZVN0cnVjdChjb2RlYy5JbnQzMiwgdmFsLmN1
cnJlbnRFeHBvc3VyZU1vZGUpOwotICAgIGVuY29kZXIuZW5jb2RlQXJyYXlQb2ludGVyKG5ldyBj
b2RlYy5FbnVtKE1ldGVyaW5nTW9kZSksIHZhbC5zdXBwb3J0ZWRFeHBvc3VyZU1vZGVzKTsKLSAg
ICBlbmNvZGVyLmVuY29kZUFycmF5UG9pbnRlcihuZXcgY29kZWMuRW51bShNZXRlcmluZ01vZGUp
LCB2YWwuc3VwcG9ydGVkRm9jdXNNb2Rlcyk7Ci0gICAgZW5jb2Rlci5lbmNvZGVTdHJ1Y3QoY29k
ZWMuSW50MzIsIHZhbC5jdXJyZW50Rm9jdXNNb2RlKTsKLSAgICBwYWNrZWQgPSAwOwotICAgIHBh
Y2tlZCB8PSAodmFsLnN1cHBvcnRzVG9yY2ggJiAxKSA8PCAwCi0gICAgcGFja2VkIHw9ICh2YWwu
dG9yY2ggJiAxKSA8PCAxCi0gICAgZW5jb2Rlci53cml0ZVVpbnQ4KHBhY2tlZCk7Ci0gICAgZW5j
b2Rlci5za2lwKDEpOwotICAgIGVuY29kZXIuc2tpcCgxKTsKLSAgICBlbmNvZGVyLnNraXAoMSk7
Ci0gICAgZW5jb2Rlci5lbmNvZGVBcnJheVBvaW50ZXIobmV3IGNvZGVjLlBvaW50ZXJUbyhQb2lu
dDJEKSwgdmFsLnBvaW50c09mSW50ZXJlc3QpOwotICAgIGVuY29kZXIuZW5jb2RlU3RydWN0UG9p
bnRlcihSYW5nZSwgdmFsLmV4cG9zdXJlQ29tcGVuc2F0aW9uKTsKLSAgICBlbmNvZGVyLmVuY29k
ZVN0cnVjdFBvaW50ZXIoUmFuZ2UsIHZhbC5leHBvc3VyZVRpbWUpOwotICAgIGVuY29kZXIuZW5j
b2RlU3RydWN0UG9pbnRlcihSYW5nZSwgdmFsLmNvbG9yVGVtcGVyYXR1cmUpOwotICAgIGVuY29k
ZXIuZW5jb2RlU3RydWN0UG9pbnRlcihSYW5nZSwgdmFsLmlzbyk7Ci0gICAgZW5jb2Rlci5lbmNv
ZGVTdHJ1Y3RQb2ludGVyKFJhbmdlLCB2YWwuYnJpZ2h0bmVzcyk7Ci0gICAgZW5jb2Rlci5lbmNv
ZGVTdHJ1Y3RQb2ludGVyKFJhbmdlLCB2YWwuY29udHJhc3QpOwotICAgIGVuY29kZXIuZW5jb2Rl
U3RydWN0UG9pbnRlcihSYW5nZSwgdmFsLnNhdHVyYXRpb24pOwotICAgIGVuY29kZXIuZW5jb2Rl
U3RydWN0UG9pbnRlcihSYW5nZSwgdmFsLnNoYXJwbmVzcyk7Ci0gICAgZW5jb2Rlci5lbmNvZGVT
dHJ1Y3RQb2ludGVyKFJhbmdlLCB2YWwuZm9jdXNEaXN0YW5jZSk7Ci0gICAgZW5jb2Rlci5lbmNv
ZGVTdHJ1Y3RQb2ludGVyKFJhbmdlLCB2YWwucGFuKTsKLSAgICBlbmNvZGVyLmVuY29kZVN0cnVj
dFBvaW50ZXIoUmFuZ2UsIHZhbC50aWx0KTsKLSAgICBlbmNvZGVyLmVuY29kZVN0cnVjdFBvaW50
ZXIoUmFuZ2UsIHZhbC56b29tKTsKLSAgICBlbmNvZGVyLmVuY29kZVN0cnVjdChjb2RlYy5JbnQz
MiwgdmFsLnJlZEV5ZVJlZHVjdGlvbik7Ci0gICAgZW5jb2Rlci5za2lwKDEpOwotICAgIGVuY29k
ZXIuc2tpcCgxKTsKLSAgICBlbmNvZGVyLnNraXAoMSk7Ci0gICAgZW5jb2Rlci5za2lwKDEpOwot
ICAgIGVuY29kZXIuZW5jb2RlU3RydWN0UG9pbnRlcihSYW5nZSwgdmFsLmhlaWdodCk7Ci0gICAg
ZW5jb2Rlci5lbmNvZGVTdHJ1Y3RQb2ludGVyKFJhbmdlLCB2YWwud2lkdGgpOwotICAgIGVuY29k
ZXIuZW5jb2RlQXJyYXlQb2ludGVyKG5ldyBjb2RlYy5FbnVtKEZpbGxMaWdodE1vZGUpLCB2YWwu
ZmlsbExpZ2h0TW9kZSk7Ci0gIH07Ci0gIGZ1bmN0aW9uIFBvaW50MkQodmFsdWVzKSB7Ci0gICAg
dGhpcy5pbml0RGVmYXVsdHNfKCk7Ci0gICAgdGhpcy5pbml0RmllbGRzXyh2YWx1ZXMpOwotICB9
Ci0KLQotICBQb2ludDJELnByb3RvdHlwZS5pbml0RGVmYXVsdHNfID0gZnVuY3Rpb24oKSB7Ci0g
ICAgdGhpcy54ID0gMDsKLSAgICB0aGlzLnkgPSAwOwotICB9OwotICBQb2ludDJELnByb3RvdHlw
ZS5pbml0RmllbGRzXyA9IGZ1bmN0aW9uKGZpZWxkcykgewotICAgIGZvcih2YXIgZmllbGQgaW4g
ZmllbGRzKSB7Ci0gICAgICAgIGlmICh0aGlzLmhhc093blByb3BlcnR5KGZpZWxkKSkKLSAgICAg
ICAgICB0aGlzW2ZpZWxkXSA9IGZpZWxkc1tmaWVsZF07Ci0gICAgfQotICB9OwotCi0gIFBvaW50
MkQudmFsaWRhdGUgPSBmdW5jdGlvbihtZXNzYWdlVmFsaWRhdG9yLCBvZmZzZXQpIHsKLSAgICB2
YXIgZXJyOwotICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RIZWFkZXIo
b2Zmc2V0LCBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSk7Ci0gICAgaWYgKGVyciAhPT0gdmFsaWRh
dG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQotICAgICAgICByZXR1cm4gZXJyOwotCi0gICAgdmFy
IGtWZXJzaW9uU2l6ZXMgPSBbCi0gICAgICB7dmVyc2lvbjogMCwgbnVtQnl0ZXM6IDI0fQotICAg
IF07Ci0gICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdFZlcnNpb24ob2Zm
c2V0LCBrVmVyc2lvblNpemVzKTsKLSAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlv
bkVycm9yLk5PTkUpCi0gICAgICAgIHJldHVybiBlcnI7Ci0KLQotCi0gICAgcmV0dXJuIHZhbGlk
YXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORTsKLSAgfTsKLQotICBQb2ludDJELmVuY29kZWRTaXpl
ID0gY29kZWMua1N0cnVjdEhlYWRlclNpemUgKyAxNjsKLQotICBQb2ludDJELmRlY29kZSA9IGZ1
bmN0aW9uKGRlY29kZXIpIHsKLSAgICB2YXIgcGFja2VkOwotICAgIHZhciB2YWwgPSBuZXcgUG9p
bnQyRCgpOwotICAgIHZhciBudW1iZXJPZkJ5dGVzID0gZGVjb2Rlci5yZWFkVWludDMyKCk7Ci0g
ICAgdmFyIHZlcnNpb24gPSBkZWNvZGVyLnJlYWRVaW50MzIoKTsKLSAgICB2YWwueCA9IGRlY29k
ZXIuZGVjb2RlU3RydWN0KGNvZGVjLkRvdWJsZSk7Ci0gICAgdmFsLnkgPSBkZWNvZGVyLmRlY29k
ZVN0cnVjdChjb2RlYy5Eb3VibGUpOwotICAgIHJldHVybiB2YWw7Ci0gIH07Ci0KLSAgUG9pbnQy
RC5lbmNvZGUgPSBmdW5jdGlvbihlbmNvZGVyLCB2YWwpIHsKLSAgICB2YXIgcGFja2VkOwotICAg
IGVuY29kZXIud3JpdGVVaW50MzIoUG9pbnQyRC5lbmNvZGVkU2l6ZSk7Ci0gICAgZW5jb2Rlci53
cml0ZVVpbnQzMigwKTsKLSAgICBlbmNvZGVyLmVuY29kZVN0cnVjdChjb2RlYy5Eb3VibGUsIHZh
bC54KTsKLSAgICBlbmNvZGVyLmVuY29kZVN0cnVjdChjb2RlYy5Eb3VibGUsIHZhbC55KTsKLSAg
fTsKLSAgZnVuY3Rpb24gUGhvdG9TZXR0aW5ncyh2YWx1ZXMpIHsKLSAgICB0aGlzLmluaXREZWZh
dWx0c18oKTsKLSAgICB0aGlzLmluaXRGaWVsZHNfKHZhbHVlcyk7Ci0gIH0KLQotCi0gIFBob3Rv
U2V0dGluZ3MucHJvdG90eXBlLmluaXREZWZhdWx0c18gPSBmdW5jdGlvbigpIHsKLSAgICB0aGlz
Lmhhc1doaXRlQmFsYW5jZU1vZGUgPSBmYWxzZTsKLSAgICB0aGlzLmhhc0V4cG9zdXJlTW9kZSA9
IGZhbHNlOwotICAgIHRoaXMuaGFzRm9jdXNNb2RlID0gZmFsc2U7Ci0gICAgdGhpcy5oYXNFeHBv
c3VyZUNvbXBlbnNhdGlvbiA9IGZhbHNlOwotICAgIHRoaXMuaGFzRXhwb3N1cmVUaW1lID0gZmFs
c2U7Ci0gICAgdGhpcy5oYXNDb2xvclRlbXBlcmF0dXJlID0gZmFsc2U7Ci0gICAgdGhpcy5oYXNJ
c28gPSBmYWxzZTsKLSAgICB0aGlzLmhhc0JyaWdodG5lc3MgPSBmYWxzZTsKLSAgICB0aGlzLmhh
c0NvbnRyYXN0ID0gZmFsc2U7Ci0gICAgdGhpcy5oYXNTYXR1cmF0aW9uID0gZmFsc2U7Ci0gICAg
dGhpcy5oYXNTaGFycG5lc3MgPSBmYWxzZTsKLSAgICB0aGlzLmhhc0ZvY3VzRGlzdGFuY2UgPSBm
YWxzZTsKLSAgICB0aGlzLmhhc1BhbiA9IGZhbHNlOwotICAgIHRoaXMuaGFzVGlsdCA9IGZhbHNl
OwotICAgIHRoaXMuaGFzWm9vbSA9IGZhbHNlOwotICAgIHRoaXMuaGFzVG9yY2ggPSBmYWxzZTsK
LSAgICB0aGlzLnRvcmNoID0gZmFsc2U7Ci0gICAgdGhpcy5oYXNGaWxsTGlnaHRNb2RlID0gZmFs
c2U7Ci0gICAgdGhpcy5oYXNXaWR0aCA9IGZhbHNlOwotICAgIHRoaXMuaGFzSGVpZ2h0ID0gZmFs
c2U7Ci0gICAgdGhpcy5oYXNSZWRFeWVSZWR1Y3Rpb24gPSBmYWxzZTsKLSAgICB0aGlzLnJlZEV5
ZVJlZHVjdGlvbiA9IGZhbHNlOwotICAgIHRoaXMud2hpdGVCYWxhbmNlTW9kZSA9IDA7Ci0gICAg
dGhpcy5leHBvc3VyZU1vZGUgPSAwOwotICAgIHRoaXMuZm9jdXNNb2RlID0gMDsKLSAgICB0aGlz
LnBvaW50c09mSW50ZXJlc3QgPSBudWxsOwotICAgIHRoaXMuZXhwb3N1cmVDb21wZW5zYXRpb24g
PSAwOwotICAgIHRoaXMuZXhwb3N1cmVUaW1lID0gMDsKLSAgICB0aGlzLmNvbG9yVGVtcGVyYXR1
cmUgPSAwOwotICAgIHRoaXMuaXNvID0gMDsKLSAgICB0aGlzLmJyaWdodG5lc3MgPSAwOwotICAg
IHRoaXMuY29udHJhc3QgPSAwOwotICAgIHRoaXMuc2F0dXJhdGlvbiA9IDA7Ci0gICAgdGhpcy5z
aGFycG5lc3MgPSAwOwotICAgIHRoaXMuZm9jdXNEaXN0YW5jZSA9IDA7Ci0gICAgdGhpcy5wYW4g
PSAwOwotICAgIHRoaXMudGlsdCA9IDA7Ci0gICAgdGhpcy56b29tID0gMDsKLSAgICB0aGlzLmZp
bGxMaWdodE1vZGUgPSAwOwotICAgIHRoaXMud2lkdGggPSAwOwotICAgIHRoaXMuaGVpZ2h0ID0g
MDsKLSAgfTsKLSAgUGhvdG9TZXR0aW5ncy5wcm90b3R5cGUuaW5pdEZpZWxkc18gPSBmdW5jdGlv
bihmaWVsZHMpIHsKLSAgICBmb3IodmFyIGZpZWxkIGluIGZpZWxkcykgewotICAgICAgICBpZiAo
dGhpcy5oYXNPd25Qcm9wZXJ0eShmaWVsZCkpCi0gICAgICAgICAgdGhpc1tmaWVsZF0gPSBmaWVs
ZHNbZmllbGRdOwotICAgIH0KLSAgfTsKLQotICBQaG90b1NldHRpbmdzLnZhbGlkYXRlID0gZnVu
Y3Rpb24obWVzc2FnZVZhbGlkYXRvciwgb2Zmc2V0KSB7Ci0gICAgdmFyIGVycjsKLSAgICBlcnIg
PSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0SGVhZGVyKG9mZnNldCwgY29kZWMua1N0
cnVjdEhlYWRlclNpemUpOwotICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJy
b3IuTk9ORSkKLSAgICAgICAgcmV0dXJuIGVycjsKLQotICAgIHZhciBrVmVyc2lvblNpemVzID0g
WwotICAgICAge3ZlcnNpb246IDAsIG51bUJ5dGVzOiAxNTJ9Ci0gICAgXTsKLSAgICBlcnIgPSBt
ZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0VmVyc2lvbihvZmZzZXQsIGtWZXJzaW9uU2l6
ZXMpOwotICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKLSAg
ICAgICAgcmV0dXJuIGVycjsKLQotCi0KLSAgICAvLyB2YWxpZGF0ZSBQaG90b1NldHRpbmdzLndo
aXRlQmFsYW5jZU1vZGUKLSAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlRW51bShv
ZmZzZXQgKyBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDQsIE1ldGVyaW5nTW9kZSk7Ci0gICAg
aWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQotICAgICAgICByZXR1
cm4gZXJyOwotCi0KLQotICAgIC8vIHZhbGlkYXRlIFBob3RvU2V0dGluZ3MuZXhwb3N1cmVNb2Rl
Ci0gICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZUVudW0ob2Zmc2V0ICsgY29kZWMu
a1N0cnVjdEhlYWRlclNpemUgKyA4LCBNZXRlcmluZ01vZGUpOwotICAgIGlmIChlcnIgIT09IHZh
bGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKLSAgICAgICAgcmV0dXJuIGVycjsKLQotCi0K
LSAgICAvLyB2YWxpZGF0ZSBQaG90b1NldHRpbmdzLmZvY3VzTW9kZQotICAgIGVyciA9IG1lc3Nh
Z2VWYWxpZGF0b3IudmFsaWRhdGVFbnVtKG9mZnNldCArIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXpl
ICsgMTIsIE1ldGVyaW5nTW9kZSk7Ci0gICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRp
b25FcnJvci5OT05FKQotICAgICAgICByZXR1cm4gZXJyOwotCi0KLSAgICAvLyB2YWxpZGF0ZSBQ
aG90b1NldHRpbmdzLnBvaW50c09mSW50ZXJlc3QKLSAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9y
LnZhbGlkYXRlQXJyYXlQb2ludGVyKG9mZnNldCArIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsg
MTYsIDgsIG5ldyBjb2RlYy5Qb2ludGVyVG8oUG9pbnQyRCksIGZhbHNlLCBbMF0sIDApOwotICAg
IGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKLSAgICAgICAgcmV0
dXJuIGVycjsKLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0K
LQotCi0KLQotCi0gICAgLy8gdmFsaWRhdGUgUGhvdG9TZXR0aW5ncy5maWxsTGlnaHRNb2RlCi0g
ICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZUVudW0ob2Zmc2V0ICsgY29kZWMua1N0
cnVjdEhlYWRlclNpemUgKyAxMjAsIEZpbGxMaWdodE1vZGUpOwotICAgIGlmIChlcnIgIT09IHZh
bGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKLSAgICAgICAgcmV0dXJuIGVycjsKLQotCi0K
LQotCi0KLQotICAgIHJldHVybiB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkU7Ci0gIH07
Ci0KLSAgUGhvdG9TZXR0aW5ncy5lbmNvZGVkU2l6ZSA9IGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXpl
ICsgMTQ0OwotCi0gIFBob3RvU2V0dGluZ3MuZGVjb2RlID0gZnVuY3Rpb24oZGVjb2Rlcikgewot
ICAgIHZhciBwYWNrZWQ7Ci0gICAgdmFyIHZhbCA9IG5ldyBQaG90b1NldHRpbmdzKCk7Ci0gICAg
dmFyIG51bWJlck9mQnl0ZXMgPSBkZWNvZGVyLnJlYWRVaW50MzIoKTsKLSAgICB2YXIgdmVyc2lv
biA9IGRlY29kZXIucmVhZFVpbnQzMigpOwotICAgIHBhY2tlZCA9IGRlY29kZXIucmVhZFVpbnQ4
KCk7Ci0gICAgdmFsLmhhc1doaXRlQmFsYW5jZU1vZGUgPSAocGFja2VkID4+IDApICYgMSA/IHRy
dWUgOiBmYWxzZTsKLSAgICB2YWwuaGFzRXhwb3N1cmVNb2RlID0gKHBhY2tlZCA+PiAxKSAmIDEg
PyB0cnVlIDogZmFsc2U7Ci0gICAgdmFsLmhhc0ZvY3VzTW9kZSA9IChwYWNrZWQgPj4gMikgJiAx
ID8gdHJ1ZSA6IGZhbHNlOwotICAgIHZhbC5oYXNFeHBvc3VyZUNvbXBlbnNhdGlvbiA9IChwYWNr
ZWQgPj4gMykgJiAxID8gdHJ1ZSA6IGZhbHNlOwotICAgIHZhbC5oYXNFeHBvc3VyZVRpbWUgPSAo
cGFja2VkID4+IDQpICYgMSA/IHRydWUgOiBmYWxzZTsKLSAgICB2YWwuaGFzQ29sb3JUZW1wZXJh
dHVyZSA9IChwYWNrZWQgPj4gNSkgJiAxID8gdHJ1ZSA6IGZhbHNlOwotICAgIHZhbC5oYXNJc28g
PSAocGFja2VkID4+IDYpICYgMSA/IHRydWUgOiBmYWxzZTsKLSAgICB2YWwuaGFzQnJpZ2h0bmVz
cyA9IChwYWNrZWQgPj4gNykgJiAxID8gdHJ1ZSA6IGZhbHNlOwotICAgIHBhY2tlZCA9IGRlY29k
ZXIucmVhZFVpbnQ4KCk7Ci0gICAgdmFsLmhhc0NvbnRyYXN0ID0gKHBhY2tlZCA+PiAwKSAmIDEg
PyB0cnVlIDogZmFsc2U7Ci0gICAgdmFsLmhhc1NhdHVyYXRpb24gPSAocGFja2VkID4+IDEpICYg
MSA/IHRydWUgOiBmYWxzZTsKLSAgICB2YWwuaGFzU2hhcnBuZXNzID0gKHBhY2tlZCA+PiAyKSAm
IDEgPyB0cnVlIDogZmFsc2U7Ci0gICAgdmFsLmhhc0ZvY3VzRGlzdGFuY2UgPSAocGFja2VkID4+
IDMpICYgMSA/IHRydWUgOiBmYWxzZTsKLSAgICB2YWwuaGFzUGFuID0gKHBhY2tlZCA+PiA0KSAm
IDEgPyB0cnVlIDogZmFsc2U7Ci0gICAgdmFsLmhhc1RpbHQgPSAocGFja2VkID4+IDUpICYgMSA/
IHRydWUgOiBmYWxzZTsKLSAgICB2YWwuaGFzWm9vbSA9IChwYWNrZWQgPj4gNikgJiAxID8gdHJ1
ZSA6IGZhbHNlOwotICAgIHZhbC5oYXNUb3JjaCA9IChwYWNrZWQgPj4gNykgJiAxID8gdHJ1ZSA6
IGZhbHNlOwotICAgIHBhY2tlZCA9IGRlY29kZXIucmVhZFVpbnQ4KCk7Ci0gICAgdmFsLnRvcmNo
ID0gKHBhY2tlZCA+PiAwKSAmIDEgPyB0cnVlIDogZmFsc2U7Ci0gICAgdmFsLmhhc0ZpbGxMaWdo
dE1vZGUgPSAocGFja2VkID4+IDEpICYgMSA/IHRydWUgOiBmYWxzZTsKLSAgICB2YWwuaGFzV2lk
dGggPSAocGFja2VkID4+IDIpICYgMSA/IHRydWUgOiBmYWxzZTsKLSAgICB2YWwuaGFzSGVpZ2h0
ID0gKHBhY2tlZCA+PiAzKSAmIDEgPyB0cnVlIDogZmFsc2U7Ci0gICAgdmFsLmhhc1JlZEV5ZVJl
ZHVjdGlvbiA9IChwYWNrZWQgPj4gNCkgJiAxID8gdHJ1ZSA6IGZhbHNlOwotICAgIHZhbC5yZWRF
eWVSZWR1Y3Rpb24gPSAocGFja2VkID4+IDUpICYgMSA/IHRydWUgOiBmYWxzZTsKLSAgICBkZWNv
ZGVyLnNraXAoMSk7Ci0gICAgdmFsLndoaXRlQmFsYW5jZU1vZGUgPSBkZWNvZGVyLmRlY29kZVN0
cnVjdChjb2RlYy5JbnQzMik7Ci0gICAgdmFsLmV4cG9zdXJlTW9kZSA9IGRlY29kZXIuZGVjb2Rl
U3RydWN0KGNvZGVjLkludDMyKTsKLSAgICB2YWwuZm9jdXNNb2RlID0gZGVjb2Rlci5kZWNvZGVT
dHJ1Y3QoY29kZWMuSW50MzIpOwotICAgIHZhbC5wb2ludHNPZkludGVyZXN0ID0gZGVjb2Rlci5k
ZWNvZGVBcnJheVBvaW50ZXIobmV3IGNvZGVjLlBvaW50ZXJUbyhQb2ludDJEKSk7Ci0gICAgdmFs
LmV4cG9zdXJlQ29tcGVuc2F0aW9uID0gZGVjb2Rlci5kZWNvZGVTdHJ1Y3QoY29kZWMuRG91Ymxl
KTsKLSAgICB2YWwuZXhwb3N1cmVUaW1lID0gZGVjb2Rlci5kZWNvZGVTdHJ1Y3QoY29kZWMuRG91
YmxlKTsKLSAgICB2YWwuY29sb3JUZW1wZXJhdHVyZSA9IGRlY29kZXIuZGVjb2RlU3RydWN0KGNv
ZGVjLkRvdWJsZSk7Ci0gICAgdmFsLmlzbyA9IGRlY29kZXIuZGVjb2RlU3RydWN0KGNvZGVjLkRv
dWJsZSk7Ci0gICAgdmFsLmJyaWdodG5lc3MgPSBkZWNvZGVyLmRlY29kZVN0cnVjdChjb2RlYy5E
b3VibGUpOwotICAgIHZhbC5jb250cmFzdCA9IGRlY29kZXIuZGVjb2RlU3RydWN0KGNvZGVjLkRv
dWJsZSk7Ci0gICAgdmFsLnNhdHVyYXRpb24gPSBkZWNvZGVyLmRlY29kZVN0cnVjdChjb2RlYy5E
b3VibGUpOwotICAgIHZhbC5zaGFycG5lc3MgPSBkZWNvZGVyLmRlY29kZVN0cnVjdChjb2RlYy5E
b3VibGUpOwotICAgIHZhbC5mb2N1c0Rpc3RhbmNlID0gZGVjb2Rlci5kZWNvZGVTdHJ1Y3QoY29k
ZWMuRG91YmxlKTsKLSAgICB2YWwucGFuID0gZGVjb2Rlci5kZWNvZGVTdHJ1Y3QoY29kZWMuRG91
YmxlKTsKLSAgICB2YWwudGlsdCA9IGRlY29kZXIuZGVjb2RlU3RydWN0KGNvZGVjLkRvdWJsZSk7
Ci0gICAgdmFsLnpvb20gPSBkZWNvZGVyLmRlY29kZVN0cnVjdChjb2RlYy5Eb3VibGUpOwotICAg
IHZhbC5maWxsTGlnaHRNb2RlID0gZGVjb2Rlci5kZWNvZGVTdHJ1Y3QoY29kZWMuSW50MzIpOwot
ICAgIGRlY29kZXIuc2tpcCgxKTsKLSAgICBkZWNvZGVyLnNraXAoMSk7Ci0gICAgZGVjb2Rlci5z
a2lwKDEpOwotICAgIGRlY29kZXIuc2tpcCgxKTsKLSAgICB2YWwud2lkdGggPSBkZWNvZGVyLmRl
Y29kZVN0cnVjdChjb2RlYy5Eb3VibGUpOwotICAgIHZhbC5oZWlnaHQgPSBkZWNvZGVyLmRlY29k
ZVN0cnVjdChjb2RlYy5Eb3VibGUpOwotICAgIHJldHVybiB2YWw7Ci0gIH07Ci0KLSAgUGhvdG9T
ZXR0aW5ncy5lbmNvZGUgPSBmdW5jdGlvbihlbmNvZGVyLCB2YWwpIHsKLSAgICB2YXIgcGFja2Vk
OwotICAgIGVuY29kZXIud3JpdGVVaW50MzIoUGhvdG9TZXR0aW5ncy5lbmNvZGVkU2l6ZSk7Ci0g
ICAgZW5jb2Rlci53cml0ZVVpbnQzMigwKTsKLSAgICBwYWNrZWQgPSAwOwotICAgIHBhY2tlZCB8
PSAodmFsLmhhc1doaXRlQmFsYW5jZU1vZGUgJiAxKSA8PCAwCi0gICAgcGFja2VkIHw9ICh2YWwu
aGFzRXhwb3N1cmVNb2RlICYgMSkgPDwgMQotICAgIHBhY2tlZCB8PSAodmFsLmhhc0ZvY3VzTW9k
ZSAmIDEpIDw8IDIKLSAgICBwYWNrZWQgfD0gKHZhbC5oYXNFeHBvc3VyZUNvbXBlbnNhdGlvbiAm
IDEpIDw8IDMKLSAgICBwYWNrZWQgfD0gKHZhbC5oYXNFeHBvc3VyZVRpbWUgJiAxKSA8PCA0Ci0g
ICAgcGFja2VkIHw9ICh2YWwuaGFzQ29sb3JUZW1wZXJhdHVyZSAmIDEpIDw8IDUKLSAgICBwYWNr
ZWQgfD0gKHZhbC5oYXNJc28gJiAxKSA8PCA2Ci0gICAgcGFja2VkIHw9ICh2YWwuaGFzQnJpZ2h0
bmVzcyAmIDEpIDw8IDcKLSAgICBlbmNvZGVyLndyaXRlVWludDgocGFja2VkKTsKLSAgICBwYWNr
ZWQgPSAwOwotICAgIHBhY2tlZCB8PSAodmFsLmhhc0NvbnRyYXN0ICYgMSkgPDwgMAotICAgIHBh
Y2tlZCB8PSAodmFsLmhhc1NhdHVyYXRpb24gJiAxKSA8PCAxCi0gICAgcGFja2VkIHw9ICh2YWwu
aGFzU2hhcnBuZXNzICYgMSkgPDwgMgotICAgIHBhY2tlZCB8PSAodmFsLmhhc0ZvY3VzRGlzdGFu
Y2UgJiAxKSA8PCAzCi0gICAgcGFja2VkIHw9ICh2YWwuaGFzUGFuICYgMSkgPDwgNAotICAgIHBh
Y2tlZCB8PSAodmFsLmhhc1RpbHQgJiAxKSA8PCA1Ci0gICAgcGFja2VkIHw9ICh2YWwuaGFzWm9v
bSAmIDEpIDw8IDYKLSAgICBwYWNrZWQgfD0gKHZhbC5oYXNUb3JjaCAmIDEpIDw8IDcKLSAgICBl
bmNvZGVyLndyaXRlVWludDgocGFja2VkKTsKLSAgICBwYWNrZWQgPSAwOwotICAgIHBhY2tlZCB8
PSAodmFsLnRvcmNoICYgMSkgPDwgMAotICAgIHBhY2tlZCB8PSAodmFsLmhhc0ZpbGxMaWdodE1v
ZGUgJiAxKSA8PCAxCi0gICAgcGFja2VkIHw9ICh2YWwuaGFzV2lkdGggJiAxKSA8PCAyCi0gICAg
cGFja2VkIHw9ICh2YWwuaGFzSGVpZ2h0ICYgMSkgPDwgMwotICAgIHBhY2tlZCB8PSAodmFsLmhh
c1JlZEV5ZVJlZHVjdGlvbiAmIDEpIDw8IDQKLSAgICBwYWNrZWQgfD0gKHZhbC5yZWRFeWVSZWR1
Y3Rpb24gJiAxKSA8PCA1Ci0gICAgZW5jb2Rlci53cml0ZVVpbnQ4KHBhY2tlZCk7Ci0gICAgZW5j
b2Rlci5za2lwKDEpOwotICAgIGVuY29kZXIuZW5jb2RlU3RydWN0KGNvZGVjLkludDMyLCB2YWwu
d2hpdGVCYWxhbmNlTW9kZSk7Ci0gICAgZW5jb2Rlci5lbmNvZGVTdHJ1Y3QoY29kZWMuSW50MzIs
IHZhbC5leHBvc3VyZU1vZGUpOwotICAgIGVuY29kZXIuZW5jb2RlU3RydWN0KGNvZGVjLkludDMy
LCB2YWwuZm9jdXNNb2RlKTsKLSAgICBlbmNvZGVyLmVuY29kZUFycmF5UG9pbnRlcihuZXcgY29k
ZWMuUG9pbnRlclRvKFBvaW50MkQpLCB2YWwucG9pbnRzT2ZJbnRlcmVzdCk7Ci0gICAgZW5jb2Rl
ci5lbmNvZGVTdHJ1Y3QoY29kZWMuRG91YmxlLCB2YWwuZXhwb3N1cmVDb21wZW5zYXRpb24pOwot
ICAgIGVuY29kZXIuZW5jb2RlU3RydWN0KGNvZGVjLkRvdWJsZSwgdmFsLmV4cG9zdXJlVGltZSk7
Ci0gICAgZW5jb2Rlci5lbmNvZGVTdHJ1Y3QoY29kZWMuRG91YmxlLCB2YWwuY29sb3JUZW1wZXJh
dHVyZSk7Ci0gICAgZW5jb2Rlci5lbmNvZGVTdHJ1Y3QoY29kZWMuRG91YmxlLCB2YWwuaXNvKTsK
LSAgICBlbmNvZGVyLmVuY29kZVN0cnVjdChjb2RlYy5Eb3VibGUsIHZhbC5icmlnaHRuZXNzKTsK
LSAgICBlbmNvZGVyLmVuY29kZVN0cnVjdChjb2RlYy5Eb3VibGUsIHZhbC5jb250cmFzdCk7Ci0g
ICAgZW5jb2Rlci5lbmNvZGVTdHJ1Y3QoY29kZWMuRG91YmxlLCB2YWwuc2F0dXJhdGlvbik7Ci0g
ICAgZW5jb2Rlci5lbmNvZGVTdHJ1Y3QoY29kZWMuRG91YmxlLCB2YWwuc2hhcnBuZXNzKTsKLSAg
ICBlbmNvZGVyLmVuY29kZVN0cnVjdChjb2RlYy5Eb3VibGUsIHZhbC5mb2N1c0Rpc3RhbmNlKTsK
LSAgICBlbmNvZGVyLmVuY29kZVN0cnVjdChjb2RlYy5Eb3VibGUsIHZhbC5wYW4pOwotICAgIGVu
Y29kZXIuZW5jb2RlU3RydWN0KGNvZGVjLkRvdWJsZSwgdmFsLnRpbHQpOwotICAgIGVuY29kZXIu
ZW5jb2RlU3RydWN0KGNvZGVjLkRvdWJsZSwgdmFsLnpvb20pOwotICAgIGVuY29kZXIuZW5jb2Rl
U3RydWN0KGNvZGVjLkludDMyLCB2YWwuZmlsbExpZ2h0TW9kZSk7Ci0gICAgZW5jb2Rlci5za2lw
KDEpOwotICAgIGVuY29kZXIuc2tpcCgxKTsKLSAgICBlbmNvZGVyLnNraXAoMSk7Ci0gICAgZW5j
b2Rlci5za2lwKDEpOwotICAgIGVuY29kZXIuZW5jb2RlU3RydWN0KGNvZGVjLkRvdWJsZSwgdmFs
LndpZHRoKTsKLSAgICBlbmNvZGVyLmVuY29kZVN0cnVjdChjb2RlYy5Eb3VibGUsIHZhbC5oZWln
aHQpOwotICB9OwotICBmdW5jdGlvbiBCbG9iKHZhbHVlcykgewotICAgIHRoaXMuaW5pdERlZmF1
bHRzXygpOwotICAgIHRoaXMuaW5pdEZpZWxkc18odmFsdWVzKTsKLSAgfQotCi0KLSAgQmxvYi5w
cm90b3R5cGUuaW5pdERlZmF1bHRzXyA9IGZ1bmN0aW9uKCkgewotICAgIHRoaXMubWltZVR5cGUg
PSBudWxsOwotICAgIHRoaXMuZGF0YSA9IG51bGw7Ci0gIH07Ci0gIEJsb2IucHJvdG90eXBlLmlu
aXRGaWVsZHNfID0gZnVuY3Rpb24oZmllbGRzKSB7Ci0gICAgZm9yKHZhciBmaWVsZCBpbiBmaWVs
ZHMpIHsKLSAgICAgICAgaWYgKHRoaXMuaGFzT3duUHJvcGVydHkoZmllbGQpKQotICAgICAgICAg
IHRoaXNbZmllbGRdID0gZmllbGRzW2ZpZWxkXTsKLSAgICB9Ci0gIH07Ci0KLSAgQmxvYi52YWxp
ZGF0ZSA9IGZ1bmN0aW9uKG1lc3NhZ2VWYWxpZGF0b3IsIG9mZnNldCkgewotICAgIHZhciBlcnI7
Ci0gICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdEhlYWRlcihvZmZzZXQs
IGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplKTsKLSAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFs
aWRhdGlvbkVycm9yLk5PTkUpCi0gICAgICAgIHJldHVybiBlcnI7Ci0KLSAgICB2YXIga1ZlcnNp
b25TaXplcyA9IFsKLSAgICAgIHt2ZXJzaW9uOiAwLCBudW1CeXRlczogMjR9Ci0gICAgXTsKLSAg
ICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0VmVyc2lvbihvZmZzZXQsIGtW
ZXJzaW9uU2l6ZXMpOwotICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3Iu
Tk9ORSkKLSAgICAgICAgcmV0dXJuIGVycjsKLQotCi0gICAgLy8gdmFsaWRhdGUgQmxvYi5taW1l
VHlwZQotICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJpbmdQb2ludGVyKG9m
ZnNldCArIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgMCwgZmFsc2UpCi0gICAgaWYgKGVyciAh
PT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQotICAgICAgICByZXR1cm4gZXJyOwot
Ci0KLSAgICAvLyB2YWxpZGF0ZSBCbG9iLmRhdGEKLSAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9y
LnZhbGlkYXRlQXJyYXlQb2ludGVyKG9mZnNldCArIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsg
OCwgMSwgY29kZWMuVWludDgsIGZhbHNlLCBbMF0sIDApOwotICAgIGlmIChlcnIgIT09IHZhbGlk
YXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKLSAgICAgICAgcmV0dXJuIGVycjsKLQotICAgIHJl
dHVybiB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkU7Ci0gIH07Ci0KLSAgQmxvYi5lbmNv
ZGVkU2l6ZSA9IGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgMTY7Ci0KLSAgQmxvYi5kZWNvZGUg
PSBmdW5jdGlvbihkZWNvZGVyKSB7Ci0gICAgdmFyIHBhY2tlZDsKLSAgICB2YXIgdmFsID0gbmV3
IEJsb2IoKTsKLSAgICB2YXIgbnVtYmVyT2ZCeXRlcyA9IGRlY29kZXIucmVhZFVpbnQzMigpOwot
ICAgIHZhciB2ZXJzaW9uID0gZGVjb2Rlci5yZWFkVWludDMyKCk7Ci0gICAgdmFsLm1pbWVUeXBl
ID0gZGVjb2Rlci5kZWNvZGVTdHJ1Y3QoY29kZWMuU3RyaW5nKTsKLSAgICB2YWwuZGF0YSA9IGRl
Y29kZXIuZGVjb2RlQXJyYXlQb2ludGVyKGNvZGVjLlVpbnQ4KTsKLSAgICByZXR1cm4gdmFsOwot
ICB9OwotCi0gIEJsb2IuZW5jb2RlID0gZnVuY3Rpb24oZW5jb2RlciwgdmFsKSB7Ci0gICAgdmFy
IHBhY2tlZDsKLSAgICBlbmNvZGVyLndyaXRlVWludDMyKEJsb2IuZW5jb2RlZFNpemUpOwotICAg
IGVuY29kZXIud3JpdGVVaW50MzIoMCk7Ci0gICAgZW5jb2Rlci5lbmNvZGVTdHJ1Y3QoY29kZWMu
U3RyaW5nLCB2YWwubWltZVR5cGUpOwotICAgIGVuY29kZXIuZW5jb2RlQXJyYXlQb2ludGVyKGNv
ZGVjLlVpbnQ4LCB2YWwuZGF0YSk7Ci0gIH07Ci0gIGZ1bmN0aW9uIEltYWdlQ2FwdHVyZV9HZXRQ
aG90b1N0YXRlX1BhcmFtcyh2YWx1ZXMpIHsKLSAgICB0aGlzLmluaXREZWZhdWx0c18oKTsKLSAg
ICB0aGlzLmluaXRGaWVsZHNfKHZhbHVlcyk7Ci0gIH0KLQotCi0gIEltYWdlQ2FwdHVyZV9HZXRQ
aG90b1N0YXRlX1BhcmFtcy5wcm90b3R5cGUuaW5pdERlZmF1bHRzXyA9IGZ1bmN0aW9uKCkgewot
ICAgIHRoaXMuc291cmNlSWQgPSBudWxsOwotICB9OwotICBJbWFnZUNhcHR1cmVfR2V0UGhvdG9T
dGF0ZV9QYXJhbXMucHJvdG90eXBlLmluaXRGaWVsZHNfID0gZnVuY3Rpb24oZmllbGRzKSB7Ci0g
ICAgZm9yKHZhciBmaWVsZCBpbiBmaWVsZHMpIHsKLSAgICAgICAgaWYgKHRoaXMuaGFzT3duUHJv
cGVydHkoZmllbGQpKQotICAgICAgICAgIHRoaXNbZmllbGRdID0gZmllbGRzW2ZpZWxkXTsKLSAg
ICB9Ci0gIH07Ci0KLSAgSW1hZ2VDYXB0dXJlX0dldFBob3RvU3RhdGVfUGFyYW1zLnZhbGlkYXRl
ID0gZnVuY3Rpb24obWVzc2FnZVZhbGlkYXRvciwgb2Zmc2V0KSB7Ci0gICAgdmFyIGVycjsKLSAg
ICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0SGVhZGVyKG9mZnNldCwgY29k
ZWMua1N0cnVjdEhlYWRlclNpemUpOwotICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0
aW9uRXJyb3IuTk9ORSkKLSAgICAgICAgcmV0dXJuIGVycjsKLQotICAgIHZhciBrVmVyc2lvblNp
emVzID0gWwotICAgICAge3ZlcnNpb246IDAsIG51bUJ5dGVzOiAxNn0KLSAgICBdOwotICAgIGVy
ciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RWZXJzaW9uKG9mZnNldCwga1ZlcnNp
b25TaXplcyk7Ci0gICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05F
KQotICAgICAgICByZXR1cm4gZXJyOwotCi0KLSAgICAvLyB2YWxpZGF0ZSBJbWFnZUNhcHR1cmVf
R2V0UGhvdG9TdGF0ZV9QYXJhbXMuc291cmNlSWQKLSAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9y
LnZhbGlkYXRlU3RyaW5nUG9pbnRlcihvZmZzZXQgKyBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSAr
IDAsIGZhbHNlKQotICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9O
RSkKLSAgICAgICAgcmV0dXJuIGVycjsKLQotICAgIHJldHVybiB2YWxpZGF0b3IudmFsaWRhdGlv
bkVycm9yLk5PTkU7Ci0gIH07Ci0KLSAgSW1hZ2VDYXB0dXJlX0dldFBob3RvU3RhdGVfUGFyYW1z
LmVuY29kZWRTaXplID0gY29kZWMua1N0cnVjdEhlYWRlclNpemUgKyA4OwotCi0gIEltYWdlQ2Fw
dHVyZV9HZXRQaG90b1N0YXRlX1BhcmFtcy5kZWNvZGUgPSBmdW5jdGlvbihkZWNvZGVyKSB7Ci0g
ICAgdmFyIHBhY2tlZDsKLSAgICB2YXIgdmFsID0gbmV3IEltYWdlQ2FwdHVyZV9HZXRQaG90b1N0
YXRlX1BhcmFtcygpOwotICAgIHZhciBudW1iZXJPZkJ5dGVzID0gZGVjb2Rlci5yZWFkVWludDMy
KCk7Ci0gICAgdmFyIHZlcnNpb24gPSBkZWNvZGVyLnJlYWRVaW50MzIoKTsKLSAgICB2YWwuc291
cmNlSWQgPSBkZWNvZGVyLmRlY29kZVN0cnVjdChjb2RlYy5TdHJpbmcpOwotICAgIHJldHVybiB2
YWw7Ci0gIH07Ci0KLSAgSW1hZ2VDYXB0dXJlX0dldFBob3RvU3RhdGVfUGFyYW1zLmVuY29kZSA9
IGZ1bmN0aW9uKGVuY29kZXIsIHZhbCkgewotICAgIHZhciBwYWNrZWQ7Ci0gICAgZW5jb2Rlci53
cml0ZVVpbnQzMihJbWFnZUNhcHR1cmVfR2V0UGhvdG9TdGF0ZV9QYXJhbXMuZW5jb2RlZFNpemUp
OwotICAgIGVuY29kZXIud3JpdGVVaW50MzIoMCk7Ci0gICAgZW5jb2Rlci5lbmNvZGVTdHJ1Y3Qo
Y29kZWMuU3RyaW5nLCB2YWwuc291cmNlSWQpOwotICB9OwotICBmdW5jdGlvbiBJbWFnZUNhcHR1
cmVfR2V0UGhvdG9TdGF0ZV9SZXNwb25zZVBhcmFtcyh2YWx1ZXMpIHsKLSAgICB0aGlzLmluaXRE
ZWZhdWx0c18oKTsKLSAgICB0aGlzLmluaXRGaWVsZHNfKHZhbHVlcyk7Ci0gIH0KLQotCi0gIElt
YWdlQ2FwdHVyZV9HZXRQaG90b1N0YXRlX1Jlc3BvbnNlUGFyYW1zLnByb3RvdHlwZS5pbml0RGVm
YXVsdHNfID0gZnVuY3Rpb24oKSB7Ci0gICAgdGhpcy5zdGF0ZSA9IG51bGw7Ci0gIH07Ci0gIElt
YWdlQ2FwdHVyZV9HZXRQaG90b1N0YXRlX1Jlc3BvbnNlUGFyYW1zLnByb3RvdHlwZS5pbml0Rmll
bGRzXyA9IGZ1bmN0aW9uKGZpZWxkcykgewotICAgIGZvcih2YXIgZmllbGQgaW4gZmllbGRzKSB7
Ci0gICAgICAgIGlmICh0aGlzLmhhc093blByb3BlcnR5KGZpZWxkKSkKLSAgICAgICAgICB0aGlz
W2ZpZWxkXSA9IGZpZWxkc1tmaWVsZF07Ci0gICAgfQotICB9OwotCi0gIEltYWdlQ2FwdHVyZV9H
ZXRQaG90b1N0YXRlX1Jlc3BvbnNlUGFyYW1zLnZhbGlkYXRlID0gZnVuY3Rpb24obWVzc2FnZVZh
bGlkYXRvciwgb2Zmc2V0KSB7Ci0gICAgdmFyIGVycjsKLSAgICBlcnIgPSBtZXNzYWdlVmFsaWRh
dG9yLnZhbGlkYXRlU3RydWN0SGVhZGVyKG9mZnNldCwgY29kZWMua1N0cnVjdEhlYWRlclNpemUp
OwotICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKLSAgICAg
ICAgcmV0dXJuIGVycjsKLQotICAgIHZhciBrVmVyc2lvblNpemVzID0gWwotICAgICAge3ZlcnNp
b246IDAsIG51bUJ5dGVzOiAxNn0KLSAgICBdOwotICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3Iu
dmFsaWRhdGVTdHJ1Y3RWZXJzaW9uKG9mZnNldCwga1ZlcnNpb25TaXplcyk7Ci0gICAgaWYgKGVy
ciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQotICAgICAgICByZXR1cm4gZXJy
OwotCi0KLSAgICAvLyB2YWxpZGF0ZSBJbWFnZUNhcHR1cmVfR2V0UGhvdG9TdGF0ZV9SZXNwb25z
ZVBhcmFtcy5zdGF0ZQotICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RQ
b2ludGVyKG9mZnNldCArIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgMCwgUGhvdG9TdGF0ZSwg
ZmFsc2UpOwotICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkK
LSAgICAgICAgcmV0dXJuIGVycjsKLQotICAgIHJldHVybiB2YWxpZGF0b3IudmFsaWRhdGlvbkVy
cm9yLk5PTkU7Ci0gIH07Ci0KLSAgSW1hZ2VDYXB0dXJlX0dldFBob3RvU3RhdGVfUmVzcG9uc2VQ
YXJhbXMuZW5jb2RlZFNpemUgPSBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDg7Ci0KLSAgSW1h
Z2VDYXB0dXJlX0dldFBob3RvU3RhdGVfUmVzcG9uc2VQYXJhbXMuZGVjb2RlID0gZnVuY3Rpb24o
ZGVjb2RlcikgewotICAgIHZhciBwYWNrZWQ7Ci0gICAgdmFyIHZhbCA9IG5ldyBJbWFnZUNhcHR1
cmVfR2V0UGhvdG9TdGF0ZV9SZXNwb25zZVBhcmFtcygpOwotICAgIHZhciBudW1iZXJPZkJ5dGVz
ID0gZGVjb2Rlci5yZWFkVWludDMyKCk7Ci0gICAgdmFyIHZlcnNpb24gPSBkZWNvZGVyLnJlYWRV
aW50MzIoKTsKLSAgICB2YWwuc3RhdGUgPSBkZWNvZGVyLmRlY29kZVN0cnVjdFBvaW50ZXIoUGhv
dG9TdGF0ZSk7Ci0gICAgcmV0dXJuIHZhbDsKLSAgfTsKLQotICBJbWFnZUNhcHR1cmVfR2V0UGhv
dG9TdGF0ZV9SZXNwb25zZVBhcmFtcy5lbmNvZGUgPSBmdW5jdGlvbihlbmNvZGVyLCB2YWwpIHsK
LSAgICB2YXIgcGFja2VkOwotICAgIGVuY29kZXIud3JpdGVVaW50MzIoSW1hZ2VDYXB0dXJlX0dl
dFBob3RvU3RhdGVfUmVzcG9uc2VQYXJhbXMuZW5jb2RlZFNpemUpOwotICAgIGVuY29kZXIud3Jp
dGVVaW50MzIoMCk7Ci0gICAgZW5jb2Rlci5lbmNvZGVTdHJ1Y3RQb2ludGVyKFBob3RvU3RhdGUs
IHZhbC5zdGF0ZSk7Ci0gIH07Ci0gIGZ1bmN0aW9uIEltYWdlQ2FwdHVyZV9TZXRPcHRpb25zX1Bh
cmFtcyh2YWx1ZXMpIHsKLSAgICB0aGlzLmluaXREZWZhdWx0c18oKTsKLSAgICB0aGlzLmluaXRG
aWVsZHNfKHZhbHVlcyk7Ci0gIH0KLQotCi0gIEltYWdlQ2FwdHVyZV9TZXRPcHRpb25zX1BhcmFt
cy5wcm90b3R5cGUuaW5pdERlZmF1bHRzXyA9IGZ1bmN0aW9uKCkgewotICAgIHRoaXMuc291cmNl
SWQgPSBudWxsOwotICAgIHRoaXMuc2V0dGluZ3MgPSBudWxsOwotICB9OwotICBJbWFnZUNhcHR1
cmVfU2V0T3B0aW9uc19QYXJhbXMucHJvdG90eXBlLmluaXRGaWVsZHNfID0gZnVuY3Rpb24oZmll
bGRzKSB7Ci0gICAgZm9yKHZhciBmaWVsZCBpbiBmaWVsZHMpIHsKLSAgICAgICAgaWYgKHRoaXMu
aGFzT3duUHJvcGVydHkoZmllbGQpKQotICAgICAgICAgIHRoaXNbZmllbGRdID0gZmllbGRzW2Zp
ZWxkXTsKLSAgICB9Ci0gIH07Ci0KLSAgSW1hZ2VDYXB0dXJlX1NldE9wdGlvbnNfUGFyYW1zLnZh
bGlkYXRlID0gZnVuY3Rpb24obWVzc2FnZVZhbGlkYXRvciwgb2Zmc2V0KSB7Ci0gICAgdmFyIGVy
cjsKLSAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0SGVhZGVyKG9mZnNl
dCwgY29kZWMua1N0cnVjdEhlYWRlclNpemUpOwotICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52
YWxpZGF0aW9uRXJyb3IuTk9ORSkKLSAgICAgICAgcmV0dXJuIGVycjsKLQotICAgIHZhciBrVmVy
c2lvblNpemVzID0gWwotICAgICAge3ZlcnNpb246IDAsIG51bUJ5dGVzOiAyNH0KLSAgICBdOwot
ICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RWZXJzaW9uKG9mZnNldCwg
a1ZlcnNpb25TaXplcyk7Ci0gICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJv
ci5OT05FKQotICAgICAgICByZXR1cm4gZXJyOwotCi0KLSAgICAvLyB2YWxpZGF0ZSBJbWFnZUNh
cHR1cmVfU2V0T3B0aW9uc19QYXJhbXMuc291cmNlSWQKLSAgICBlcnIgPSBtZXNzYWdlVmFsaWRh
dG9yLnZhbGlkYXRlU3RyaW5nUG9pbnRlcihvZmZzZXQgKyBjb2RlYy5rU3RydWN0SGVhZGVyU2l6
ZSArIDAsIGZhbHNlKQotICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3Iu
Tk9ORSkKLSAgICAgICAgcmV0dXJuIGVycjsKLQotCi0gICAgLy8gdmFsaWRhdGUgSW1hZ2VDYXB0
dXJlX1NldE9wdGlvbnNfUGFyYW1zLnNldHRpbmdzCi0gICAgZXJyID0gbWVzc2FnZVZhbGlkYXRv
ci52YWxpZGF0ZVN0cnVjdFBvaW50ZXIob2Zmc2V0ICsgY29kZWMua1N0cnVjdEhlYWRlclNpemUg
KyA4LCBQaG90b1NldHRpbmdzLCBmYWxzZSk7Ci0gICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZh
bGlkYXRpb25FcnJvci5OT05FKQotICAgICAgICByZXR1cm4gZXJyOwotCi0gICAgcmV0dXJuIHZh
bGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORTsKLSAgfTsKLQotICBJbWFnZUNhcHR1cmVfU2V0
T3B0aW9uc19QYXJhbXMuZW5jb2RlZFNpemUgPSBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDE2
OwotCi0gIEltYWdlQ2FwdHVyZV9TZXRPcHRpb25zX1BhcmFtcy5kZWNvZGUgPSBmdW5jdGlvbihk
ZWNvZGVyKSB7Ci0gICAgdmFyIHBhY2tlZDsKLSAgICB2YXIgdmFsID0gbmV3IEltYWdlQ2FwdHVy
ZV9TZXRPcHRpb25zX1BhcmFtcygpOwotICAgIHZhciBudW1iZXJPZkJ5dGVzID0gZGVjb2Rlci5y
ZWFkVWludDMyKCk7Ci0gICAgdmFyIHZlcnNpb24gPSBkZWNvZGVyLnJlYWRVaW50MzIoKTsKLSAg
ICB2YWwuc291cmNlSWQgPSBkZWNvZGVyLmRlY29kZVN0cnVjdChjb2RlYy5TdHJpbmcpOwotICAg
IHZhbC5zZXR0aW5ncyA9IGRlY29kZXIuZGVjb2RlU3RydWN0UG9pbnRlcihQaG90b1NldHRpbmdz
KTsKLSAgICByZXR1cm4gdmFsOwotICB9OwotCi0gIEltYWdlQ2FwdHVyZV9TZXRPcHRpb25zX1Bh
cmFtcy5lbmNvZGUgPSBmdW5jdGlvbihlbmNvZGVyLCB2YWwpIHsKLSAgICB2YXIgcGFja2VkOwot
ICAgIGVuY29kZXIud3JpdGVVaW50MzIoSW1hZ2VDYXB0dXJlX1NldE9wdGlvbnNfUGFyYW1zLmVu
Y29kZWRTaXplKTsKLSAgICBlbmNvZGVyLndyaXRlVWludDMyKDApOwotICAgIGVuY29kZXIuZW5j
b2RlU3RydWN0KGNvZGVjLlN0cmluZywgdmFsLnNvdXJjZUlkKTsKLSAgICBlbmNvZGVyLmVuY29k
ZVN0cnVjdFBvaW50ZXIoUGhvdG9TZXR0aW5ncywgdmFsLnNldHRpbmdzKTsKLSAgfTsKLSAgZnVu
Y3Rpb24gSW1hZ2VDYXB0dXJlX1NldE9wdGlvbnNfUmVzcG9uc2VQYXJhbXModmFsdWVzKSB7Ci0g
ICAgdGhpcy5pbml0RGVmYXVsdHNfKCk7Ci0gICAgdGhpcy5pbml0RmllbGRzXyh2YWx1ZXMpOwot
ICB9Ci0KLQotICBJbWFnZUNhcHR1cmVfU2V0T3B0aW9uc19SZXNwb25zZVBhcmFtcy5wcm90b3R5
cGUuaW5pdERlZmF1bHRzXyA9IGZ1bmN0aW9uKCkgewotICAgIHRoaXMuc3VjY2VzcyA9IGZhbHNl
OwotICB9OwotICBJbWFnZUNhcHR1cmVfU2V0T3B0aW9uc19SZXNwb25zZVBhcmFtcy5wcm90b3R5
cGUuaW5pdEZpZWxkc18gPSBmdW5jdGlvbihmaWVsZHMpIHsKLSAgICBmb3IodmFyIGZpZWxkIGlu
IGZpZWxkcykgewotICAgICAgICBpZiAodGhpcy5oYXNPd25Qcm9wZXJ0eShmaWVsZCkpCi0gICAg
ICAgICAgdGhpc1tmaWVsZF0gPSBmaWVsZHNbZmllbGRdOwotICAgIH0KLSAgfTsKLQotICBJbWFn
ZUNhcHR1cmVfU2V0T3B0aW9uc19SZXNwb25zZVBhcmFtcy52YWxpZGF0ZSA9IGZ1bmN0aW9uKG1l
c3NhZ2VWYWxpZGF0b3IsIG9mZnNldCkgewotICAgIHZhciBlcnI7Ci0gICAgZXJyID0gbWVzc2Fn
ZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdEhlYWRlcihvZmZzZXQsIGNvZGVjLmtTdHJ1Y3RIZWFk
ZXJTaXplKTsKLSAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUp
Ci0gICAgICAgIHJldHVybiBlcnI7Ci0KLSAgICB2YXIga1ZlcnNpb25TaXplcyA9IFsKLSAgICAg
IHt2ZXJzaW9uOiAwLCBudW1CeXRlczogMTZ9Ci0gICAgXTsKLSAgICBlcnIgPSBtZXNzYWdlVmFs
aWRhdG9yLnZhbGlkYXRlU3RydWN0VmVyc2lvbihvZmZzZXQsIGtWZXJzaW9uU2l6ZXMpOwotICAg
IGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKLSAgICAgICAgcmV0
dXJuIGVycjsKLQotCi0gICAgcmV0dXJuIHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORTsK
LSAgfTsKLQotICBJbWFnZUNhcHR1cmVfU2V0T3B0aW9uc19SZXNwb25zZVBhcmFtcy5lbmNvZGVk
U2l6ZSA9IGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgODsKLQotICBJbWFnZUNhcHR1cmVfU2V0
T3B0aW9uc19SZXNwb25zZVBhcmFtcy5kZWNvZGUgPSBmdW5jdGlvbihkZWNvZGVyKSB7Ci0gICAg
dmFyIHBhY2tlZDsKLSAgICB2YXIgdmFsID0gbmV3IEltYWdlQ2FwdHVyZV9TZXRPcHRpb25zX1Jl
c3BvbnNlUGFyYW1zKCk7Ci0gICAgdmFyIG51bWJlck9mQnl0ZXMgPSBkZWNvZGVyLnJlYWRVaW50
MzIoKTsKLSAgICB2YXIgdmVyc2lvbiA9IGRlY29kZXIucmVhZFVpbnQzMigpOwotICAgIHBhY2tl
ZCA9IGRlY29kZXIucmVhZFVpbnQ4KCk7Ci0gICAgdmFsLnN1Y2Nlc3MgPSAocGFja2VkID4+IDAp
ICYgMSA/IHRydWUgOiBmYWxzZTsKLSAgICBkZWNvZGVyLnNraXAoMSk7Ci0gICAgZGVjb2Rlci5z
a2lwKDEpOwotICAgIGRlY29kZXIuc2tpcCgxKTsKLSAgICBkZWNvZGVyLnNraXAoMSk7Ci0gICAg
ZGVjb2Rlci5za2lwKDEpOwotICAgIGRlY29kZXIuc2tpcCgxKTsKLSAgICBkZWNvZGVyLnNraXAo
MSk7Ci0gICAgcmV0dXJuIHZhbDsKLSAgfTsKLQotICBJbWFnZUNhcHR1cmVfU2V0T3B0aW9uc19S
ZXNwb25zZVBhcmFtcy5lbmNvZGUgPSBmdW5jdGlvbihlbmNvZGVyLCB2YWwpIHsKLSAgICB2YXIg
cGFja2VkOwotICAgIGVuY29kZXIud3JpdGVVaW50MzIoSW1hZ2VDYXB0dXJlX1NldE9wdGlvbnNf
UmVzcG9uc2VQYXJhbXMuZW5jb2RlZFNpemUpOwotICAgIGVuY29kZXIud3JpdGVVaW50MzIoMCk7
Ci0gICAgcGFja2VkID0gMDsKLSAgICBwYWNrZWQgfD0gKHZhbC5zdWNjZXNzICYgMSkgPDwgMAot
ICAgIGVuY29kZXIud3JpdGVVaW50OChwYWNrZWQpOwotICAgIGVuY29kZXIuc2tpcCgxKTsKLSAg
ICBlbmNvZGVyLnNraXAoMSk7Ci0gICAgZW5jb2Rlci5za2lwKDEpOwotICAgIGVuY29kZXIuc2tp
cCgxKTsKLSAgICBlbmNvZGVyLnNraXAoMSk7Ci0gICAgZW5jb2Rlci5za2lwKDEpOwotICAgIGVu
Y29kZXIuc2tpcCgxKTsKLSAgfTsKLSAgZnVuY3Rpb24gSW1hZ2VDYXB0dXJlX1Rha2VQaG90b19Q
YXJhbXModmFsdWVzKSB7Ci0gICAgdGhpcy5pbml0RGVmYXVsdHNfKCk7Ci0gICAgdGhpcy5pbml0
RmllbGRzXyh2YWx1ZXMpOwotICB9Ci0KLQotICBJbWFnZUNhcHR1cmVfVGFrZVBob3RvX1BhcmFt
cy5wcm90b3R5cGUuaW5pdERlZmF1bHRzXyA9IGZ1bmN0aW9uKCkgewotICAgIHRoaXMuc291cmNl
SWQgPSBudWxsOwotICB9OwotICBJbWFnZUNhcHR1cmVfVGFrZVBob3RvX1BhcmFtcy5wcm90b3R5
cGUuaW5pdEZpZWxkc18gPSBmdW5jdGlvbihmaWVsZHMpIHsKLSAgICBmb3IodmFyIGZpZWxkIGlu
IGZpZWxkcykgewotICAgICAgICBpZiAodGhpcy5oYXNPd25Qcm9wZXJ0eShmaWVsZCkpCi0gICAg
ICAgICAgdGhpc1tmaWVsZF0gPSBmaWVsZHNbZmllbGRdOwotICAgIH0KLSAgfTsKLQotICBJbWFn
ZUNhcHR1cmVfVGFrZVBob3RvX1BhcmFtcy52YWxpZGF0ZSA9IGZ1bmN0aW9uKG1lc3NhZ2VWYWxp
ZGF0b3IsIG9mZnNldCkgewotICAgIHZhciBlcnI7Ci0gICAgZXJyID0gbWVzc2FnZVZhbGlkYXRv
ci52YWxpZGF0ZVN0cnVjdEhlYWRlcihvZmZzZXQsIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplKTsK
LSAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCi0gICAgICAg
IHJldHVybiBlcnI7Ci0KLSAgICB2YXIga1ZlcnNpb25TaXplcyA9IFsKLSAgICAgIHt2ZXJzaW9u
OiAwLCBudW1CeXRlczogMTZ9Ci0gICAgXTsKLSAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZh
bGlkYXRlU3RydWN0VmVyc2lvbihvZmZzZXQsIGtWZXJzaW9uU2l6ZXMpOwotICAgIGlmIChlcnIg
IT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKLSAgICAgICAgcmV0dXJuIGVycjsK
LQotCi0gICAgLy8gdmFsaWRhdGUgSW1hZ2VDYXB0dXJlX1Rha2VQaG90b19QYXJhbXMuc291cmNl
SWQKLSAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RyaW5nUG9pbnRlcihvZmZz
ZXQgKyBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDAsIGZhbHNlKQotICAgIGlmIChlcnIgIT09
IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKLSAgICAgICAgcmV0dXJuIGVycjsKLQot
ICAgIHJldHVybiB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkU7Ci0gIH07Ci0KLSAgSW1h
Z2VDYXB0dXJlX1Rha2VQaG90b19QYXJhbXMuZW5jb2RlZFNpemUgPSBjb2RlYy5rU3RydWN0SGVh
ZGVyU2l6ZSArIDg7Ci0KLSAgSW1hZ2VDYXB0dXJlX1Rha2VQaG90b19QYXJhbXMuZGVjb2RlID0g
ZnVuY3Rpb24oZGVjb2RlcikgewotICAgIHZhciBwYWNrZWQ7Ci0gICAgdmFyIHZhbCA9IG5ldyBJ
bWFnZUNhcHR1cmVfVGFrZVBob3RvX1BhcmFtcygpOwotICAgIHZhciBudW1iZXJPZkJ5dGVzID0g
ZGVjb2Rlci5yZWFkVWludDMyKCk7Ci0gICAgdmFyIHZlcnNpb24gPSBkZWNvZGVyLnJlYWRVaW50
MzIoKTsKLSAgICB2YWwuc291cmNlSWQgPSBkZWNvZGVyLmRlY29kZVN0cnVjdChjb2RlYy5TdHJp
bmcpOwotICAgIHJldHVybiB2YWw7Ci0gIH07Ci0KLSAgSW1hZ2VDYXB0dXJlX1Rha2VQaG90b19Q
YXJhbXMuZW5jb2RlID0gZnVuY3Rpb24oZW5jb2RlciwgdmFsKSB7Ci0gICAgdmFyIHBhY2tlZDsK
LSAgICBlbmNvZGVyLndyaXRlVWludDMyKEltYWdlQ2FwdHVyZV9UYWtlUGhvdG9fUGFyYW1zLmVu
Y29kZWRTaXplKTsKLSAgICBlbmNvZGVyLndyaXRlVWludDMyKDApOwotICAgIGVuY29kZXIuZW5j
b2RlU3RydWN0KGNvZGVjLlN0cmluZywgdmFsLnNvdXJjZUlkKTsKLSAgfTsKLSAgZnVuY3Rpb24g
SW1hZ2VDYXB0dXJlX1Rha2VQaG90b19SZXNwb25zZVBhcmFtcyh2YWx1ZXMpIHsKLSAgICB0aGlz
LmluaXREZWZhdWx0c18oKTsKLSAgICB0aGlzLmluaXRGaWVsZHNfKHZhbHVlcyk7Ci0gIH0KLQot
Ci0gIEltYWdlQ2FwdHVyZV9UYWtlUGhvdG9fUmVzcG9uc2VQYXJhbXMucHJvdG90eXBlLmluaXRE
ZWZhdWx0c18gPSBmdW5jdGlvbigpIHsKLSAgICB0aGlzLmJsb2IgPSBudWxsOwotICB9OwotICBJ
bWFnZUNhcHR1cmVfVGFrZVBob3RvX1Jlc3BvbnNlUGFyYW1zLnByb3RvdHlwZS5pbml0RmllbGRz
XyA9IGZ1bmN0aW9uKGZpZWxkcykgewotICAgIGZvcih2YXIgZmllbGQgaW4gZmllbGRzKSB7Ci0g
ICAgICAgIGlmICh0aGlzLmhhc093blByb3BlcnR5KGZpZWxkKSkKLSAgICAgICAgICB0aGlzW2Zp
ZWxkXSA9IGZpZWxkc1tmaWVsZF07Ci0gICAgfQotICB9OwotCi0gIEltYWdlQ2FwdHVyZV9UYWtl
UGhvdG9fUmVzcG9uc2VQYXJhbXMudmFsaWRhdGUgPSBmdW5jdGlvbihtZXNzYWdlVmFsaWRhdG9y
LCBvZmZzZXQpIHsKLSAgICB2YXIgZXJyOwotICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFs
aWRhdGVTdHJ1Y3RIZWFkZXIob2Zmc2V0LCBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSk7Ci0gICAg
aWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQotICAgICAgICByZXR1
cm4gZXJyOwotCi0gICAgdmFyIGtWZXJzaW9uU2l6ZXMgPSBbCi0gICAgICB7dmVyc2lvbjogMCwg
bnVtQnl0ZXM6IDE2fQotICAgIF07Ci0gICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0
ZVN0cnVjdFZlcnNpb24ob2Zmc2V0LCBrVmVyc2lvblNpemVzKTsKLSAgICBpZiAoZXJyICE9PSB2
YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCi0gICAgICAgIHJldHVybiBlcnI7Ci0KLQot
ICAgIC8vIHZhbGlkYXRlIEltYWdlQ2FwdHVyZV9UYWtlUGhvdG9fUmVzcG9uc2VQYXJhbXMuYmxv
YgotICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RQb2ludGVyKG9mZnNl
dCArIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgMCwgQmxvYiwgZmFsc2UpOwotICAgIGlmIChl
cnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKLSAgICAgICAgcmV0dXJuIGVy
cjsKLQotICAgIHJldHVybiB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkU7Ci0gIH07Ci0K
LSAgSW1hZ2VDYXB0dXJlX1Rha2VQaG90b19SZXNwb25zZVBhcmFtcy5lbmNvZGVkU2l6ZSA9IGNv
ZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgODsKLQotICBJbWFnZUNhcHR1cmVfVGFrZVBob3RvX1Jl
c3BvbnNlUGFyYW1zLmRlY29kZSA9IGZ1bmN0aW9uKGRlY29kZXIpIHsKLSAgICB2YXIgcGFja2Vk
OwotICAgIHZhciB2YWwgPSBuZXcgSW1hZ2VDYXB0dXJlX1Rha2VQaG90b19SZXNwb25zZVBhcmFt
cygpOwotICAgIHZhciBudW1iZXJPZkJ5dGVzID0gZGVjb2Rlci5yZWFkVWludDMyKCk7Ci0gICAg
dmFyIHZlcnNpb24gPSBkZWNvZGVyLnJlYWRVaW50MzIoKTsKLSAgICB2YWwuYmxvYiA9IGRlY29k
ZXIuZGVjb2RlU3RydWN0UG9pbnRlcihCbG9iKTsKLSAgICByZXR1cm4gdmFsOwotICB9OwotCi0g
IEltYWdlQ2FwdHVyZV9UYWtlUGhvdG9fUmVzcG9uc2VQYXJhbXMuZW5jb2RlID0gZnVuY3Rpb24o
ZW5jb2RlciwgdmFsKSB7Ci0gICAgdmFyIHBhY2tlZDsKLSAgICBlbmNvZGVyLndyaXRlVWludDMy
KEltYWdlQ2FwdHVyZV9UYWtlUGhvdG9fUmVzcG9uc2VQYXJhbXMuZW5jb2RlZFNpemUpOwotICAg
IGVuY29kZXIud3JpdGVVaW50MzIoMCk7Ci0gICAgZW5jb2Rlci5lbmNvZGVTdHJ1Y3RQb2ludGVy
KEJsb2IsIHZhbC5ibG9iKTsKLSAgfTsKLSAgdmFyIGtJbWFnZUNhcHR1cmVfR2V0UGhvdG9TdGF0
ZV9OYW1lID0gMDsKLSAgdmFyIGtJbWFnZUNhcHR1cmVfU2V0T3B0aW9uc19OYW1lID0gMTsKLSAg
dmFyIGtJbWFnZUNhcHR1cmVfVGFrZVBob3RvX05hbWUgPSAyOwotCi0gIGZ1bmN0aW9uIEltYWdl
Q2FwdHVyZVB0cihoYW5kbGVPclB0ckluZm8pIHsKLSAgICB0aGlzLnB0ciA9IG5ldyBiaW5kaW5n
cy5JbnRlcmZhY2VQdHJDb250cm9sbGVyKEltYWdlQ2FwdHVyZSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZU9yUHRySW5mbyk7Ci0gIH0K
LQotICBmdW5jdGlvbiBJbWFnZUNhcHR1cmVBc3NvY2lhdGVkUHRyKGFzc29jaWF0ZWRJbnRlcmZh
Y2VQdHJJbmZvKSB7Ci0gICAgdGhpcy5wdHIgPSBuZXcgYXNzb2NpYXRlZEJpbmRpbmdzLkFzc29j
aWF0ZWRJbnRlcmZhY2VQdHJDb250cm9sbGVyKAotICAgICAgICBJbWFnZUNhcHR1cmUsIGFzc29j
aWF0ZWRJbnRlcmZhY2VQdHJJbmZvKTsKLSAgfQotCi0gIEltYWdlQ2FwdHVyZUFzc29jaWF0ZWRQ
dHIucHJvdG90eXBlID0KLSAgICAgIE9iamVjdC5jcmVhdGUoSW1hZ2VDYXB0dXJlUHRyLnByb3Rv
dHlwZSk7Ci0gIEltYWdlQ2FwdHVyZUFzc29jaWF0ZWRQdHIucHJvdG90eXBlLmNvbnN0cnVjdG9y
ID0KLSAgICAgIEltYWdlQ2FwdHVyZUFzc29jaWF0ZWRQdHI7Ci0KLSAgZnVuY3Rpb24gSW1hZ2VD
YXB0dXJlUHJveHkocmVjZWl2ZXIpIHsKLSAgICB0aGlzLnJlY2VpdmVyXyA9IHJlY2VpdmVyOwot
ICB9Ci0gIEltYWdlQ2FwdHVyZVB0ci5wcm90b3R5cGUuZ2V0UGhvdG9TdGF0ZSA9IGZ1bmN0aW9u
KCkgewotICAgIHJldHVybiBJbWFnZUNhcHR1cmVQcm94eS5wcm90b3R5cGUuZ2V0UGhvdG9TdGF0
ZQotICAgICAgICAuYXBwbHkodGhpcy5wdHIuZ2V0UHJveHkoKSwgYXJndW1lbnRzKTsKLSAgfTsK
LQotICBJbWFnZUNhcHR1cmVQcm94eS5wcm90b3R5cGUuZ2V0UGhvdG9TdGF0ZSA9IGZ1bmN0aW9u
KHNvdXJjZUlkKSB7Ci0gICAgdmFyIHBhcmFtc18gPSBuZXcgSW1hZ2VDYXB0dXJlX0dldFBob3Rv
U3RhdGVfUGFyYW1zKCk7Ci0gICAgcGFyYW1zXy5zb3VyY2VJZCA9IHNvdXJjZUlkOwotICAgIHJl
dHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3QpIHsKLSAgICAgIHZhciBi
dWlsZGVyID0gbmV3IGNvZGVjLk1lc3NhZ2VWMUJ1aWxkZXIoCi0gICAgICAgICAga0ltYWdlQ2Fw
dHVyZV9HZXRQaG90b1N0YXRlX05hbWUsCi0gICAgICAgICAgY29kZWMuYWxpZ24oSW1hZ2VDYXB0
dXJlX0dldFBob3RvU3RhdGVfUGFyYW1zLmVuY29kZWRTaXplKSwKLSAgICAgICAgICBjb2RlYy5r
TWVzc2FnZUV4cGVjdHNSZXNwb25zZSwgMCk7Ci0gICAgICBidWlsZGVyLmVuY29kZVN0cnVjdChJ
bWFnZUNhcHR1cmVfR2V0UGhvdG9TdGF0ZV9QYXJhbXMsIHBhcmFtc18pOwotICAgICAgdmFyIG1l
c3NhZ2UgPSBidWlsZGVyLmZpbmlzaCgpOwotICAgICAgdGhpcy5yZWNlaXZlcl8uYWNjZXB0QW5k
RXhwZWN0UmVzcG9uc2UobWVzc2FnZSkudGhlbihmdW5jdGlvbihtZXNzYWdlKSB7Ci0gICAgICAg
IHZhciByZWFkZXIgPSBuZXcgY29kZWMuTWVzc2FnZVJlYWRlcihtZXNzYWdlKTsKLSAgICAgICAg
dmFyIHJlc3BvbnNlUGFyYW1zID0KLSAgICAgICAgICAgIHJlYWRlci5kZWNvZGVTdHJ1Y3QoSW1h
Z2VDYXB0dXJlX0dldFBob3RvU3RhdGVfUmVzcG9uc2VQYXJhbXMpOwotICAgICAgICByZXNvbHZl
KHJlc3BvbnNlUGFyYW1zKTsKLSAgICAgIH0pLmNhdGNoKGZ1bmN0aW9uKHJlc3VsdCkgewotICAg
ICAgICByZWplY3QoRXJyb3IoIkNvbm5lY3Rpb24gZXJyb3I6ICIgKyByZXN1bHQpKTsKLSAgICAg
IH0pOwotICAgIH0uYmluZCh0aGlzKSk7Ci0gIH07Ci0gIEltYWdlQ2FwdHVyZVB0ci5wcm90b3R5
cGUuc2V0T3B0aW9ucyA9IGZ1bmN0aW9uKCkgewotICAgIHJldHVybiBJbWFnZUNhcHR1cmVQcm94
eS5wcm90b3R5cGUuc2V0T3B0aW9ucwotICAgICAgICAuYXBwbHkodGhpcy5wdHIuZ2V0UHJveHko
KSwgYXJndW1lbnRzKTsKLSAgfTsKLQotICBJbWFnZUNhcHR1cmVQcm94eS5wcm90b3R5cGUuc2V0
T3B0aW9ucyA9IGZ1bmN0aW9uKHNvdXJjZUlkLCBzZXR0aW5ncykgewotICAgIHZhciBwYXJhbXNf
ID0gbmV3IEltYWdlQ2FwdHVyZV9TZXRPcHRpb25zX1BhcmFtcygpOwotICAgIHBhcmFtc18uc291
cmNlSWQgPSBzb3VyY2VJZDsKLSAgICBwYXJhbXNfLnNldHRpbmdzID0gc2V0dGluZ3M7Ci0gICAg
cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkgewotICAgICAgdmFy
IGJ1aWxkZXIgPSBuZXcgY29kZWMuTWVzc2FnZVYxQnVpbGRlcigKLSAgICAgICAgICBrSW1hZ2VD
YXB0dXJlX1NldE9wdGlvbnNfTmFtZSwKLSAgICAgICAgICBjb2RlYy5hbGlnbihJbWFnZUNhcHR1
cmVfU2V0T3B0aW9uc19QYXJhbXMuZW5jb2RlZFNpemUpLAotICAgICAgICAgIGNvZGVjLmtNZXNz
YWdlRXhwZWN0c1Jlc3BvbnNlLCAwKTsKLSAgICAgIGJ1aWxkZXIuZW5jb2RlU3RydWN0KEltYWdl
Q2FwdHVyZV9TZXRPcHRpb25zX1BhcmFtcywgcGFyYW1zXyk7Ci0gICAgICB2YXIgbWVzc2FnZSA9
IGJ1aWxkZXIuZmluaXNoKCk7Ci0gICAgICB0aGlzLnJlY2VpdmVyXy5hY2NlcHRBbmRFeHBlY3RS
ZXNwb25zZShtZXNzYWdlKS50aGVuKGZ1bmN0aW9uKG1lc3NhZ2UpIHsKLSAgICAgICAgdmFyIHJl
YWRlciA9IG5ldyBjb2RlYy5NZXNzYWdlUmVhZGVyKG1lc3NhZ2UpOwotICAgICAgICB2YXIgcmVz
cG9uc2VQYXJhbXMgPQotICAgICAgICAgICAgcmVhZGVyLmRlY29kZVN0cnVjdChJbWFnZUNhcHR1
cmVfU2V0T3B0aW9uc19SZXNwb25zZVBhcmFtcyk7Ci0gICAgICAgIHJlc29sdmUocmVzcG9uc2VQ
YXJhbXMpOwotICAgICAgfSkuY2F0Y2goZnVuY3Rpb24ocmVzdWx0KSB7Ci0gICAgICAgIHJlamVj
dChFcnJvcigiQ29ubmVjdGlvbiBlcnJvcjogIiArIHJlc3VsdCkpOwotICAgICAgfSk7Ci0gICAg
fS5iaW5kKHRoaXMpKTsKLSAgfTsKLSAgSW1hZ2VDYXB0dXJlUHRyLnByb3RvdHlwZS50YWtlUGhv
dG8gPSBmdW5jdGlvbigpIHsKLSAgICByZXR1cm4gSW1hZ2VDYXB0dXJlUHJveHkucHJvdG90eXBl
LnRha2VQaG90bwotICAgICAgICAuYXBwbHkodGhpcy5wdHIuZ2V0UHJveHkoKSwgYXJndW1lbnRz
KTsKLSAgfTsKLQotICBJbWFnZUNhcHR1cmVQcm94eS5wcm90b3R5cGUudGFrZVBob3RvID0gZnVu
Y3Rpb24oc291cmNlSWQpIHsKLSAgICB2YXIgcGFyYW1zXyA9IG5ldyBJbWFnZUNhcHR1cmVfVGFr
ZVBob3RvX1BhcmFtcygpOwotICAgIHBhcmFtc18uc291cmNlSWQgPSBzb3VyY2VJZDsKLSAgICBy
ZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7Ci0gICAgICB2YXIg
YnVpbGRlciA9IG5ldyBjb2RlYy5NZXNzYWdlVjFCdWlsZGVyKAotICAgICAgICAgIGtJbWFnZUNh
cHR1cmVfVGFrZVBob3RvX05hbWUsCi0gICAgICAgICAgY29kZWMuYWxpZ24oSW1hZ2VDYXB0dXJl
X1Rha2VQaG90b19QYXJhbXMuZW5jb2RlZFNpemUpLAotICAgICAgICAgIGNvZGVjLmtNZXNzYWdl
RXhwZWN0c1Jlc3BvbnNlLCAwKTsKLSAgICAgIGJ1aWxkZXIuZW5jb2RlU3RydWN0KEltYWdlQ2Fw
dHVyZV9UYWtlUGhvdG9fUGFyYW1zLCBwYXJhbXNfKTsKLSAgICAgIHZhciBtZXNzYWdlID0gYnVp
bGRlci5maW5pc2goKTsKLSAgICAgIHRoaXMucmVjZWl2ZXJfLmFjY2VwdEFuZEV4cGVjdFJlc3Bv
bnNlKG1lc3NhZ2UpLnRoZW4oZnVuY3Rpb24obWVzc2FnZSkgewotICAgICAgICB2YXIgcmVhZGVy
ID0gbmV3IGNvZGVjLk1lc3NhZ2VSZWFkZXIobWVzc2FnZSk7Ci0gICAgICAgIHZhciByZXNwb25z
ZVBhcmFtcyA9Ci0gICAgICAgICAgICByZWFkZXIuZGVjb2RlU3RydWN0KEltYWdlQ2FwdHVyZV9U
YWtlUGhvdG9fUmVzcG9uc2VQYXJhbXMpOwotICAgICAgICByZXNvbHZlKHJlc3BvbnNlUGFyYW1z
KTsKLSAgICAgIH0pLmNhdGNoKGZ1bmN0aW9uKHJlc3VsdCkgewotICAgICAgICByZWplY3QoRXJy
b3IoIkNvbm5lY3Rpb24gZXJyb3I6ICIgKyByZXN1bHQpKTsKLSAgICAgIH0pOwotICAgIH0uYmlu
ZCh0aGlzKSk7Ci0gIH07Ci0KLSAgZnVuY3Rpb24gSW1hZ2VDYXB0dXJlU3R1YihkZWxlZ2F0ZSkg
ewotICAgIHRoaXMuZGVsZWdhdGVfID0gZGVsZWdhdGU7Ci0gIH0KLSAgSW1hZ2VDYXB0dXJlU3R1
Yi5wcm90b3R5cGUuZ2V0UGhvdG9TdGF0ZSA9IGZ1bmN0aW9uKHNvdXJjZUlkKSB7Ci0gICAgcmV0
dXJuIHRoaXMuZGVsZWdhdGVfICYmIHRoaXMuZGVsZWdhdGVfLmdldFBob3RvU3RhdGUgJiYgdGhp
cy5kZWxlZ2F0ZV8uZ2V0UGhvdG9TdGF0ZShzb3VyY2VJZCk7Ci0gIH0KLSAgSW1hZ2VDYXB0dXJl
U3R1Yi5wcm90b3R5cGUuc2V0T3B0aW9ucyA9IGZ1bmN0aW9uKHNvdXJjZUlkLCBzZXR0aW5ncykg
ewotICAgIHJldHVybiB0aGlzLmRlbGVnYXRlXyAmJiB0aGlzLmRlbGVnYXRlXy5zZXRPcHRpb25z
ICYmIHRoaXMuZGVsZWdhdGVfLnNldE9wdGlvbnMoc291cmNlSWQsIHNldHRpbmdzKTsKLSAgfQot
ICBJbWFnZUNhcHR1cmVTdHViLnByb3RvdHlwZS50YWtlUGhvdG8gPSBmdW5jdGlvbihzb3VyY2VJ
ZCkgewotICAgIHJldHVybiB0aGlzLmRlbGVnYXRlXyAmJiB0aGlzLmRlbGVnYXRlXy50YWtlUGhv
dG8gJiYgdGhpcy5kZWxlZ2F0ZV8udGFrZVBob3RvKHNvdXJjZUlkKTsKLSAgfQotCi0gIEltYWdl
Q2FwdHVyZVN0dWIucHJvdG90eXBlLmFjY2VwdCA9IGZ1bmN0aW9uKG1lc3NhZ2UpIHsKLSAgICB2
YXIgcmVhZGVyID0gbmV3IGNvZGVjLk1lc3NhZ2VSZWFkZXIobWVzc2FnZSk7Ci0gICAgc3dpdGNo
IChyZWFkZXIubWVzc2FnZU5hbWUpIHsKLSAgICBkZWZhdWx0OgotICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIH0KLSAgfTsKLQotICBJbWFnZUNhcHR1cmVTdHViLnByb3RvdHlwZS5hY2NlcHRXaXRo
UmVzcG9uZGVyID0KLSAgICAgIGZ1bmN0aW9uKG1lc3NhZ2UsIHJlc3BvbmRlcikgewotICAgIHZh
ciByZWFkZXIgPSBuZXcgY29kZWMuTWVzc2FnZVJlYWRlcihtZXNzYWdlKTsKLSAgICBzd2l0Y2gg
KHJlYWRlci5tZXNzYWdlTmFtZSkgewotICAgIGNhc2Uga0ltYWdlQ2FwdHVyZV9HZXRQaG90b1N0
YXRlX05hbWU6Ci0gICAgICB2YXIgcGFyYW1zID0gcmVhZGVyLmRlY29kZVN0cnVjdChJbWFnZUNh
cHR1cmVfR2V0UGhvdG9TdGF0ZV9QYXJhbXMpOwotICAgICAgdGhpcy5nZXRQaG90b1N0YXRlKHBh
cmFtcy5zb3VyY2VJZCkudGhlbihmdW5jdGlvbihyZXNwb25zZSkgewotICAgICAgICB2YXIgcmVz
cG9uc2VQYXJhbXMgPQotICAgICAgICAgICAgbmV3IEltYWdlQ2FwdHVyZV9HZXRQaG90b1N0YXRl
X1Jlc3BvbnNlUGFyYW1zKCk7Ci0gICAgICAgIHJlc3BvbnNlUGFyYW1zLnN0YXRlID0gcmVzcG9u
c2Uuc3RhdGU7Ci0gICAgICAgIHZhciBidWlsZGVyID0gbmV3IGNvZGVjLk1lc3NhZ2VWMUJ1aWxk
ZXIoCi0gICAgICAgICAgICBrSW1hZ2VDYXB0dXJlX0dldFBob3RvU3RhdGVfTmFtZSwKLSAgICAg
ICAgICAgIGNvZGVjLmFsaWduKEltYWdlQ2FwdHVyZV9HZXRQaG90b1N0YXRlX1Jlc3BvbnNlUGFy
YW1zLmVuY29kZWRTaXplKSwKLSAgICAgICAgICAgIGNvZGVjLmtNZXNzYWdlSXNSZXNwb25zZSwg
cmVhZGVyLnJlcXVlc3RJRCk7Ci0gICAgICAgIGJ1aWxkZXIuZW5jb2RlU3RydWN0KEltYWdlQ2Fw
dHVyZV9HZXRQaG90b1N0YXRlX1Jlc3BvbnNlUGFyYW1zLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICByZXNwb25zZVBhcmFtcyk7Ci0gICAgICAgIHZhciBtZXNzYWdlID0gYnVpbGRlci5m
aW5pc2goKTsKLSAgICAgICAgcmVzcG9uZGVyLmFjY2VwdChtZXNzYWdlKTsKLSAgICAgIH0pOwot
ICAgICAgcmV0dXJuIHRydWU7Ci0gICAgY2FzZSBrSW1hZ2VDYXB0dXJlX1NldE9wdGlvbnNfTmFt
ZToKLSAgICAgIHZhciBwYXJhbXMgPSByZWFkZXIuZGVjb2RlU3RydWN0KEltYWdlQ2FwdHVyZV9T
ZXRPcHRpb25zX1BhcmFtcyk7Ci0gICAgICB0aGlzLnNldE9wdGlvbnMocGFyYW1zLnNvdXJjZUlk
LCBwYXJhbXMuc2V0dGluZ3MpLnRoZW4oZnVuY3Rpb24ocmVzcG9uc2UpIHsKLSAgICAgICAgdmFy
IHJlc3BvbnNlUGFyYW1zID0KLSAgICAgICAgICAgIG5ldyBJbWFnZUNhcHR1cmVfU2V0T3B0aW9u
c19SZXNwb25zZVBhcmFtcygpOwotICAgICAgICByZXNwb25zZVBhcmFtcy5zdWNjZXNzID0gcmVz
cG9uc2Uuc3VjY2VzczsKLSAgICAgICAgdmFyIGJ1aWxkZXIgPSBuZXcgY29kZWMuTWVzc2FnZVYx
QnVpbGRlcigKLSAgICAgICAgICAgIGtJbWFnZUNhcHR1cmVfU2V0T3B0aW9uc19OYW1lLAotICAg
ICAgICAgICAgY29kZWMuYWxpZ24oSW1hZ2VDYXB0dXJlX1NldE9wdGlvbnNfUmVzcG9uc2VQYXJh
bXMuZW5jb2RlZFNpemUpLAotICAgICAgICAgICAgY29kZWMua01lc3NhZ2VJc1Jlc3BvbnNlLCBy
ZWFkZXIucmVxdWVzdElEKTsKLSAgICAgICAgYnVpbGRlci5lbmNvZGVTdHJ1Y3QoSW1hZ2VDYXB0
dXJlX1NldE9wdGlvbnNfUmVzcG9uc2VQYXJhbXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHJlc3BvbnNlUGFyYW1zKTsKLSAgICAgICAgdmFyIG1lc3NhZ2UgPSBidWlsZGVyLmZpbmlz
aCgpOwotICAgICAgICByZXNwb25kZXIuYWNjZXB0KG1lc3NhZ2UpOwotICAgICAgfSk7Ci0gICAg
ICByZXR1cm4gdHJ1ZTsKLSAgICBjYXNlIGtJbWFnZUNhcHR1cmVfVGFrZVBob3RvX05hbWU6Ci0g
ICAgICB2YXIgcGFyYW1zID0gcmVhZGVyLmRlY29kZVN0cnVjdChJbWFnZUNhcHR1cmVfVGFrZVBo
b3RvX1BhcmFtcyk7Ci0gICAgICB0aGlzLnRha2VQaG90byhwYXJhbXMuc291cmNlSWQpLnRoZW4o
ZnVuY3Rpb24ocmVzcG9uc2UpIHsKLSAgICAgICAgdmFyIHJlc3BvbnNlUGFyYW1zID0KLSAgICAg
ICAgICAgIG5ldyBJbWFnZUNhcHR1cmVfVGFrZVBob3RvX1Jlc3BvbnNlUGFyYW1zKCk7Ci0gICAg
ICAgIHJlc3BvbnNlUGFyYW1zLmJsb2IgPSByZXNwb25zZS5ibG9iOwotICAgICAgICB2YXIgYnVp
bGRlciA9IG5ldyBjb2RlYy5NZXNzYWdlVjFCdWlsZGVyKAotICAgICAgICAgICAga0ltYWdlQ2Fw
dHVyZV9UYWtlUGhvdG9fTmFtZSwKLSAgICAgICAgICAgIGNvZGVjLmFsaWduKEltYWdlQ2FwdHVy
ZV9UYWtlUGhvdG9fUmVzcG9uc2VQYXJhbXMuZW5jb2RlZFNpemUpLAotICAgICAgICAgICAgY29k
ZWMua01lc3NhZ2VJc1Jlc3BvbnNlLCByZWFkZXIucmVxdWVzdElEKTsKLSAgICAgICAgYnVpbGRl
ci5lbmNvZGVTdHJ1Y3QoSW1hZ2VDYXB0dXJlX1Rha2VQaG90b19SZXNwb25zZVBhcmFtcywKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2VQYXJhbXMpOwotICAgICAgICB2YXIg
bWVzc2FnZSA9IGJ1aWxkZXIuZmluaXNoKCk7Ci0gICAgICAgIHJlc3BvbmRlci5hY2NlcHQobWVz
c2FnZSk7Ci0gICAgICB9KTsKLSAgICAgIHJldHVybiB0cnVlOwotICAgIGRlZmF1bHQ6Ci0gICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICB9OwotCi0gIGZ1bmN0aW9uIHZhbGlkYXRlSW1hZ2VD
YXB0dXJlUmVxdWVzdChtZXNzYWdlVmFsaWRhdG9yKSB7Ci0gICAgdmFyIG1lc3NhZ2UgPSBtZXNz
YWdlVmFsaWRhdG9yLm1lc3NhZ2U7Ci0gICAgdmFyIHBhcmFtc0NsYXNzID0gbnVsbDsKLSAgICBz
d2l0Y2ggKG1lc3NhZ2UuZ2V0TmFtZSgpKSB7Ci0gICAgICBjYXNlIGtJbWFnZUNhcHR1cmVfR2V0
UGhvdG9TdGF0ZV9OYW1lOgotICAgICAgICBpZiAobWVzc2FnZS5leHBlY3RzUmVzcG9uc2UoKSkK
LSAgICAgICAgICBwYXJhbXNDbGFzcyA9IEltYWdlQ2FwdHVyZV9HZXRQaG90b1N0YXRlX1BhcmFt
czsKLSAgICAgIGJyZWFrOwotICAgICAgY2FzZSBrSW1hZ2VDYXB0dXJlX1NldE9wdGlvbnNfTmFt
ZToKLSAgICAgICAgaWYgKG1lc3NhZ2UuZXhwZWN0c1Jlc3BvbnNlKCkpCi0gICAgICAgICAgcGFy
YW1zQ2xhc3MgPSBJbWFnZUNhcHR1cmVfU2V0T3B0aW9uc19QYXJhbXM7Ci0gICAgICBicmVhazsK
LSAgICAgIGNhc2Uga0ltYWdlQ2FwdHVyZV9UYWtlUGhvdG9fTmFtZToKLSAgICAgICAgaWYgKG1l
c3NhZ2UuZXhwZWN0c1Jlc3BvbnNlKCkpCi0gICAgICAgICAgcGFyYW1zQ2xhc3MgPSBJbWFnZUNh
cHR1cmVfVGFrZVBob3RvX1BhcmFtczsKLSAgICAgIGJyZWFrOwotICAgIH0KLSAgICBpZiAocGFy
YW1zQ2xhc3MgPT09IG51bGwpCi0gICAgICByZXR1cm4gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJv
ci5OT05FOwotICAgIHJldHVybiBwYXJhbXNDbGFzcy52YWxpZGF0ZShtZXNzYWdlVmFsaWRhdG9y
LCBtZXNzYWdlVmFsaWRhdG9yLm1lc3NhZ2UuZ2V0SGVhZGVyTnVtQnl0ZXMoKSk7Ci0gIH0KLQot
ICBmdW5jdGlvbiB2YWxpZGF0ZUltYWdlQ2FwdHVyZVJlc3BvbnNlKG1lc3NhZ2VWYWxpZGF0b3Ip
IHsKLSAgIHZhciBtZXNzYWdlID0gbWVzc2FnZVZhbGlkYXRvci5tZXNzYWdlOwotICAgdmFyIHBh
cmFtc0NsYXNzID0gbnVsbDsKLSAgIHN3aXRjaCAobWVzc2FnZS5nZXROYW1lKCkpIHsKLSAgICAg
IGNhc2Uga0ltYWdlQ2FwdHVyZV9HZXRQaG90b1N0YXRlX05hbWU6Ci0gICAgICAgIGlmIChtZXNz
YWdlLmlzUmVzcG9uc2UoKSkKLSAgICAgICAgICBwYXJhbXNDbGFzcyA9IEltYWdlQ2FwdHVyZV9H
ZXRQaG90b1N0YXRlX1Jlc3BvbnNlUGFyYW1zOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2Ug
a0ltYWdlQ2FwdHVyZV9TZXRPcHRpb25zX05hbWU6Ci0gICAgICAgIGlmIChtZXNzYWdlLmlzUmVz
cG9uc2UoKSkKLSAgICAgICAgICBwYXJhbXNDbGFzcyA9IEltYWdlQ2FwdHVyZV9TZXRPcHRpb25z
X1Jlc3BvbnNlUGFyYW1zOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2Uga0ltYWdlQ2FwdHVy
ZV9UYWtlUGhvdG9fTmFtZToKLSAgICAgICAgaWYgKG1lc3NhZ2UuaXNSZXNwb25zZSgpKQotICAg
ICAgICAgIHBhcmFtc0NsYXNzID0gSW1hZ2VDYXB0dXJlX1Rha2VQaG90b19SZXNwb25zZVBhcmFt
czsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGlmIChwYXJhbXNDbGFzcyA9PT0gbnVsbCkK
LSAgICAgIHJldHVybiB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkU7Ci0gICAgcmV0dXJu
IHBhcmFtc0NsYXNzLnZhbGlkYXRlKG1lc3NhZ2VWYWxpZGF0b3IsIG1lc3NhZ2VWYWxpZGF0b3Iu
bWVzc2FnZS5nZXRIZWFkZXJOdW1CeXRlcygpKTsKLSAgfQotCi0gIHZhciBJbWFnZUNhcHR1cmUg
PSB7Ci0gICAgbmFtZTogJ21lZGlhLm1vam9tLkltYWdlQ2FwdHVyZScsCi0gICAga1ZlcnNpb246
IDAsCi0gICAgcHRyQ2xhc3M6IEltYWdlQ2FwdHVyZVB0ciwKLSAgICBwcm94eUNsYXNzOiBJbWFn
ZUNhcHR1cmVQcm94eSwKLSAgICBzdHViQ2xhc3M6IEltYWdlQ2FwdHVyZVN0dWIsCi0gICAgdmFs
aWRhdGVSZXF1ZXN0OiB2YWxpZGF0ZUltYWdlQ2FwdHVyZVJlcXVlc3QsCi0gICAgdmFsaWRhdGVS
ZXNwb25zZTogdmFsaWRhdGVJbWFnZUNhcHR1cmVSZXNwb25zZSwKLSAgfTsKLSAgSW1hZ2VDYXB0
dXJlU3R1Yi5wcm90b3R5cGUudmFsaWRhdG9yID0gdmFsaWRhdGVJbWFnZUNhcHR1cmVSZXF1ZXN0
OwotICBJbWFnZUNhcHR1cmVQcm94eS5wcm90b3R5cGUudmFsaWRhdG9yID0gdmFsaWRhdGVJbWFn
ZUNhcHR1cmVSZXNwb25zZTsKLSAgZXhwb3J0cy5NZXRlcmluZ01vZGUgPSBNZXRlcmluZ01vZGU7
Ci0gIGV4cG9ydHMuUmVkRXllUmVkdWN0aW9uID0gUmVkRXllUmVkdWN0aW9uOwotICBleHBvcnRz
LkZpbGxMaWdodE1vZGUgPSBGaWxsTGlnaHRNb2RlOwotICBleHBvcnRzLlJhbmdlID0gUmFuZ2U7
Ci0gIGV4cG9ydHMuUGhvdG9TdGF0ZSA9IFBob3RvU3RhdGU7Ci0gIGV4cG9ydHMuUG9pbnQyRCA9
IFBvaW50MkQ7Ci0gIGV4cG9ydHMuUGhvdG9TZXR0aW5ncyA9IFBob3RvU2V0dGluZ3M7Ci0gIGV4
cG9ydHMuQmxvYiA9IEJsb2I7Ci0gIGV4cG9ydHMuSW1hZ2VDYXB0dXJlID0gSW1hZ2VDYXB0dXJl
OwotICBleHBvcnRzLkltYWdlQ2FwdHVyZVB0ciA9IEltYWdlQ2FwdHVyZVB0cjsKLSAgZXhwb3J0
cy5JbWFnZUNhcHR1cmVBc3NvY2lhdGVkUHRyID0gSW1hZ2VDYXB0dXJlQXNzb2NpYXRlZFB0cjsK
LX0pKCk7ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVz
dHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vbW9j
ay1iYXJjb2RlZGV0ZWN0aW9uLmpzIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0
Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vbW9jay1iYXJjb2RlZGV0ZWN0aW9uLmpzCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMTFmODc5YjViNmUwY2U0M2JmZmVmN2Y4ZjVj
YWJlNmZiYTUxNjMyLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0t
LSBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2Vz
L2Nocm9taXVtL21vY2stYmFyY29kZWRldGVjdGlvbi5qcworKysgL2Rldi9udWxsCkBAIC0xLDEz
NSArMCwwIEBACi0idXNlIHN0cmljdCI7Ci0KLXZhciBCYXJjb2RlRGV0ZWN0aW9uVGVzdCA9ICgo
KSA9PiB7Ci0gIC8vIENsYXNzIHRoYXQgbW9ja3MgQmFyY29kZURldGVjdGlvblByb3ZpZGVyIGlu
dGVyZmFjZSBkZWZpbmVkIGluCi0gIC8vIGh0dHBzOi8vY3MuY2hyb21pdW0ub3JnL2Nocm9taXVt
L3NyYy9zZXJ2aWNlcy9zaGFwZV9kZXRlY3Rpb24vcHVibGljL21vam9tL2JhcmNvZGVkZXRlY3Rp
b25fcHJvdmlkZXIubW9qb20KLSAgY2xhc3MgTW9ja0JhcmNvZGVEZXRlY3Rpb25Qcm92aWRlciB7
Ci0gICAgY29uc3RydWN0b3IoKSB7Ci0gICAgICB0aGlzLmJpbmRpbmdTZXRfID0gbmV3IG1vam8u
QmluZGluZ1NldCgKLSAgICAgICAgICBzaGFwZURldGVjdGlvbi5tb2pvbS5CYXJjb2RlRGV0ZWN0
aW9uUHJvdmlkZXIpOwotCi0gICAgICB0aGlzLmludGVyY2VwdG9yXyA9IG5ldyBNb2pvSW50ZXJm
YWNlSW50ZXJjZXB0b3IoCi0gICAgICAgICAgc2hhcGVEZXRlY3Rpb24ubW9qb20uQmFyY29kZURl
dGVjdGlvblByb3ZpZGVyLm5hbWUpOwotICAgICAgdGhpcy5pbnRlcmNlcHRvcl8ub25pbnRlcmZh
Y2VyZXF1ZXN0ID0gZSA9PiB7Ci0gICAgICAgIGlmICh0aGlzLnNob3VsZF9jbG9zZV9waXBlX29u
X3JlcXVlc3RfKQotICAgICAgICAgIGUuaGFuZGxlLmNsb3NlKCk7Ci0gICAgICAgIGVsc2UKLSAg
ICAgICAgICB0aGlzLmJpbmRpbmdTZXRfLmFkZEJpbmRpbmcodGhpcywgZS5oYW5kbGUpOwotICAg
ICAgfQotICAgICAgdGhpcy5pbnRlcmNlcHRvcl8uc3RhcnQoKTsKLSAgICAgIHRoaXMuc2hvdWxk
X2Nsb3NlX3BpcGVfb25fcmVxdWVzdF8gPSBmYWxzZTsKLSAgICB9Ci0KLSAgICBjcmVhdGVCYXJj
b2RlRGV0ZWN0aW9uKHJlcXVlc3QsIG9wdGlvbnMpIHsKLSAgICAgIHRoaXMubW9ja1NlcnZpY2Vf
ID0gbmV3IE1vY2tCYXJjb2RlRGV0ZWN0aW9uKHJlcXVlc3QsIG9wdGlvbnMpOwotICAgIH0KLQot
ICAgIGVudW1lcmF0ZVN1cHBvcnRlZEZvcm1hdHMoKSB7Ci0gICAgICByZXR1cm4gUHJvbWlzZS5y
ZXNvbHZlKHsKLSAgICAgICAgc3VwcG9ydGVkRm9ybWF0czogWwotICAgICAgICAgIHNoYXBlRGV0
ZWN0aW9uLm1vam9tLkJhcmNvZGVGb3JtYXQuQVpURUMsCi0gICAgICAgICAgc2hhcGVEZXRlY3Rp
b24ubW9qb20uQmFyY29kZUZvcm1hdC5EQVRBX01BVFJJWCwKLSAgICAgICAgICBzaGFwZURldGVj
dGlvbi5tb2pvbS5CYXJjb2RlRm9ybWF0LlFSX0NPREUsCi0gICAgICAgIF0KLSAgICAgIH0pOwot
ICAgIH0KLQotICAgIGdldEZyYW1lRGF0YSgpIHsKLSAgICAgIHJldHVybiB0aGlzLm1vY2tTZXJ2
aWNlXy5idWZmZXJEYXRhXzsKLSAgICB9Ci0KLSAgICBnZXRGb3JtYXRzKCkgewotICAgICByZXR1
cm4gdGhpcy5tb2NrU2VydmljZV8ub3B0aW9uc18uZm9ybWF0czsKLSAgICB9Ci0KLSAgICByZXNl
dCgpIHsKLSAgICAgIHRoaXMubW9ja1NlcnZpY2VfID0gbnVsbDsKLSAgICAgIHRoaXMuc2hvdWxk
X2Nsb3NlX3BpcGVfb25fcmVxdWVzdF8gPSBmYWxzZTsKLSAgICAgIHRoaXMuYmluZGluZ1NldF8u
Y2xvc2VBbGxCaW5kaW5ncygpOwotICAgICAgdGhpcy5pbnRlcmNlcHRvcl8uc3RvcCgpOwotICAg
IH0KLQotICAgIC8vIHNpbXVsYXRlIGEgJ25vIGltcGxlbWVudGF0aW9uIGF2YWlsYWJsZScgY2Fz
ZQotICAgIHNpbXVsYXRlTm9JbXBsZW1lbnRhdGlvbigpIHsKLSAgICAgIHRoaXMuc2hvdWxkX2Ns
b3NlX3BpcGVfb25fcmVxdWVzdF8gPSB0cnVlOwotICAgIH0KLSAgfQotCi0gIC8vIENsYXNzIHRo
YXQgbW9ja3MgQmFyY29kZURldGVjdGlvbiBpbnRlcmZhY2UgZGVmaW5lZCBpbgotICAvLyBodHRw
czovL2NzLmNocm9taXVtLm9yZy9jaHJvbWl1bS9zcmMvc2VydmljZXMvc2hhcGVfZGV0ZWN0aW9u
L3B1YmxpYy9tb2pvbS9iYXJjb2RlZGV0ZWN0aW9uLm1vam9tCi0gIGNsYXNzIE1vY2tCYXJjb2Rl
RGV0ZWN0aW9uIHsKLSAgICBjb25zdHJ1Y3RvcihyZXF1ZXN0LCBvcHRpb25zKSB7Ci0gICAgICB0
aGlzLm9wdGlvbnNfID0gb3B0aW9uczsKLSAgICAgIHRoaXMuYmluZGluZ18gPQotICAgICAgICAg
IG5ldyBtb2pvLkJpbmRpbmcoc2hhcGVEZXRlY3Rpb24ubW9qb20uQmFyY29kZURldGVjdGlvbiwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMsIHJlcXVlc3QpOwotICAgIH0KLQotICAg
IGRldGVjdChiaXRtYXBEYXRhKSB7Ci0gICAgICB0aGlzLmJ1ZmZlckRhdGFfID0KLSAgICAgICAg
ICBuZXcgVWludDMyQXJyYXkoZ2V0QXJyYXlCdWZmZXJGcm9tQmlnQnVmZmVyKGJpdG1hcERhdGEu
cGl4ZWxEYXRhKSk7Ci0gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHsKLSAgICAgICAgcmVz
dWx0czogWwotICAgICAgICAgIHsKLSAgICAgICAgICAgIHJhd1ZhbHVlIDogImNhdHMiLAotICAg
ICAgICAgICAgYm91bmRpbmdCb3g6IHsgeDogMS4wLCB5OiAxLjAsIHdpZHRoOiAxMDAuMCwgaGVp
Z2h0OiAxMDAuMCB9LAotICAgICAgICAgICAgZm9ybWF0OiBzaGFwZURldGVjdGlvbi5tb2pvbS5C
YXJjb2RlRm9ybWF0LlFSX0NPREUsCi0gICAgICAgICAgICBjb3JuZXJQb2ludHM6IFsKLSAgICAg
ICAgICAgICAgeyB4OiAxLjAsIHk6IDEuMCB9LAotICAgICAgICAgICAgICB7IHg6IDEwMS4wLCB5
OiAxLjAgfSwKLSAgICAgICAgICAgICAgeyB4OiAxMDEuMCwgeTogMTAxLjAgfSwKLSAgICAgICAg
ICAgICAgeyB4OiAxLjAsIHk6IDEwMS4wIH0KLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgfSwK
LSAgICAgICAgICB7Ci0gICAgICAgICAgICByYXdWYWx1ZSA6ICJkb2dzIiwKLSAgICAgICAgICAg
IGJvdW5kaW5nQm94OiB7IHg6IDIuMCwgeTogMi4wLCB3aWR0aDogNTAuMCwgaGVpZ2h0OiA1MC4w
IH0sCi0gICAgICAgICAgICBmb3JtYXQ6IHNoYXBlRGV0ZWN0aW9uLm1vam9tLkJhcmNvZGVGb3Jt
YXQuQ09ERV8xMjgsCi0gICAgICAgICAgICBjb3JuZXJQb2ludHM6IFsKLSAgICAgICAgICAgICAg
eyB4OiAyLjAsIHk6IDIuMCB9LAotICAgICAgICAgICAgICB7IHg6IDUyLjAsIHk6IDIuMCB9LAot
ICAgICAgICAgICAgICB7IHg6IDUyLjAsIHk6IDUyLjAgfSwKLSAgICAgICAgICAgICAgeyB4OiAy
LjAsIHk6IDUyLjAgfQotICAgICAgICAgICAgXSwKLSAgICAgICAgICB9LAotICAgICAgICBdLAot
ICAgICAgfSk7Ci0gICAgfQotICB9Ci0KLSAgbGV0IHRlc3RJbnRlcm5hbCA9IHsKLSAgICBpbml0
aWFsaXplZDogZmFsc2UsCi0gICAgTW9ja0JhcmNvZGVEZXRlY3Rpb25Qcm92aWRlcjogbnVsbAot
ICB9Ci0KLSAgY2xhc3MgQmFyY29kZURldGVjdGlvblRlc3RDaHJvbWl1bSB7Ci0gICAgY29uc3Ry
dWN0b3IoKSB7Ci0gICAgICBPYmplY3QuZnJlZXplKHRoaXMpOyAvLyBNYWtlIGl0IGltbXV0YWJs
ZS4KLSAgICB9Ci0KLSAgICBpbml0aWFsaXplKCkgewotICAgICAgaWYgKHRlc3RJbnRlcm5hbC5p
bml0aWFsaXplZCkKLSAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYWxsIHJlc2V0KCkgYmVmb3Jl
IGluaXRpYWxpemUoKS4nKTsKLQotICAgICAgdGVzdEludGVybmFsLk1vY2tCYXJjb2RlRGV0ZWN0
aW9uUHJvdmlkZXIgPSBuZXcgTW9ja0JhcmNvZGVEZXRlY3Rpb25Qcm92aWRlcjsKLSAgICAgIHRl
c3RJbnRlcm5hbC5pbml0aWFsaXplZCA9IHRydWU7Ci0gICAgfQotCi0gICAgLy8gUmVzZXRzIHN0
YXRlIG9mIGJhcmNvZGUgZGV0ZWN0aW9uIG1vY2tzIGJldHdlZW4gdGVzdCBydW5zLgotICAgIGFz
eW5jIHJlc2V0KCkgewotICAgICAgaWYgKCF0ZXN0SW50ZXJuYWwuaW5pdGlhbGl6ZWQpCi0gICAg
ICAgIHRocm93IG5ldyBFcnJvcignQ2FsbCBpbml0aWFsaXplKCkgYmVmb3JlIHJlc2V0KCkuJyk7
Ci0gICAgICB0ZXN0SW50ZXJuYWwuTW9ja0JhcmNvZGVEZXRlY3Rpb25Qcm92aWRlci5yZXNldCgp
OwotICAgICAgdGVzdEludGVybmFsLk1vY2tCYXJjb2RlRGV0ZWN0aW9uUHJvdmlkZXIgPSBudWxs
OwotICAgICAgdGVzdEludGVybmFsLmluaXRpYWxpemVkID0gZmFsc2U7Ci0KLSAgICAgIGF3YWl0
IG5ldyBQcm9taXNlKHJlc29sdmUgPT4gc2V0VGltZW91dChyZXNvbHZlLCAwKSk7Ci0gICAgfQot
Ci0gICAgTW9ja0JhcmNvZGVEZXRlY3Rpb25Qcm92aWRlcigpIHsKLSAgICAgIHJldHVybiB0ZXN0
SW50ZXJuYWwuTW9ja0JhcmNvZGVEZXRlY3Rpb25Qcm92aWRlcjsKLSAgICB9Ci0gIH0KLQotICBy
ZXR1cm4gQmFyY29kZURldGVjdGlvblRlc3RDaHJvbWl1bTsKLX0pKCk7CmRpZmYgLS1naXQgYS9M
YXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9jaHJv
bWl1bS9tb2NrLWJhcmNvZGVkZXRlY3Rpb24uanMuaGVhZGVycyBiL0xheW91dFRlc3RzL2ltcG9y
dGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL21vY2stYmFyY29k
ZWRldGVjdGlvbi5qcy5oZWFkZXJzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2YzYx
YTM0YTRlYzJlNzUwOTZkYjBlYjlmNzc0OGIxNDJmMGRiN2JiLi4wMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWIt
cGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL21vY2stYmFyY29kZWRldGVjdGlvbi5q
cy5oZWFkZXJzCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotQ29udGVudC1UeXBlOiB0ZXh0
L2phdmFzY3JpcHQ7IGNoYXJzZXQ9dXRmLTgKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRp
ZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jl
c291cmNlcy9jaHJvbWl1bS9tb2NrLWZhY2VkZXRlY3Rpb24uanMgYi9MYXlvdXRUZXN0cy9pbXBv
cnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS9tb2NrLWZhY2Vk
ZXRlY3Rpb24uanMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDEyNzVlNGRkMmY1ZTI0
OTg4ZTcyM2E3MjhkYmY1YmI0YWNjNGM2Y2IuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAKLS0tIGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10
ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vbW9jay1mYWNlZGV0ZWN0aW9uLmpzCisrKyAvZGV2L251
bGwKQEAgLTEsMTMxICswLDAgQEAKLSJ1c2Ugc3RyaWN0IjsKLQotdmFyIEZhY2VEZXRlY3Rpb25U
ZXN0ID0gKCgpID0+IHsKLSAgLy8gQ2xhc3MgdGhhdCBtb2NrcyBGYWNlRGV0ZWN0aW9uUHJvdmlk
ZXIgaW50ZXJmYWNlIGRlZmluZWQgaW4KLSAgLy8gaHR0cHM6Ly9jcy5jaHJvbWl1bS5vcmcvY2hy
b21pdW0vc3JjL3NlcnZpY2VzL3NoYXBlX2RldGVjdGlvbi9wdWJsaWMvbW9qb20vZmFjZWRldGVj
dGlvbl9wcm92aWRlci5tb2pvbQotICBjbGFzcyBNb2NrRmFjZURldGVjdGlvblByb3ZpZGVyIHsK
LSAgICBjb25zdHJ1Y3RvcigpIHsKLSAgICAgIHRoaXMuYmluZGluZ1NldF8gPSBuZXcgbW9qby5C
aW5kaW5nU2V0KAotICAgICAgICBzaGFwZURldGVjdGlvbi5tb2pvbS5GYWNlRGV0ZWN0aW9uUHJv
dmlkZXIpOwotCi0gICAgICB0aGlzLmludGVyY2VwdG9yXyA9IG5ldyBNb2pvSW50ZXJmYWNlSW50
ZXJjZXB0b3IoCi0gICAgICAgICAgc2hhcGVEZXRlY3Rpb24ubW9qb20uRmFjZURldGVjdGlvblBy
b3ZpZGVyLm5hbWUpOwotICAgICAgdGhpcy5pbnRlcmNlcHRvcl8ub25pbnRlcmZhY2VyZXF1ZXN0
ID0KLSAgICAgICAgIGUgPT4gdGhpcy5iaW5kaW5nU2V0Xy5hZGRCaW5kaW5nKHRoaXMsIGUuaGFu
ZGxlKTsKLSAgICAgIHRoaXMuaW50ZXJjZXB0b3JfLnN0YXJ0KCk7Ci0gICAgfQotCi0gICAgY3Jl
YXRlRmFjZURldGVjdGlvbihyZXF1ZXN0LCBvcHRpb25zKSB7Ci0gICAgICB0aGlzLm1vY2tTZXJ2
aWNlXyA9IG5ldyBNb2NrRmFjZURldGVjdGlvbihyZXF1ZXN0LCBvcHRpb25zKTsKLSAgICB9Ci0K
LSAgICBnZXRGcmFtZURhdGEoKSB7Ci0gICAgICByZXR1cm4gdGhpcy5tb2NrU2VydmljZV8uYnVm
ZmVyRGF0YV87Ci0gICAgfQotCi0gICAgZ2V0TWF4RGV0ZWN0ZWRGYWNlcygpIHsKLSAgICAgcmV0
dXJuIHRoaXMubW9ja1NlcnZpY2VfLm1heERldGVjdGVkRmFjZXNfOwotICAgIH0KLQotICAgIGdl
dEZhc3RNb2RlICgpIHsKLSAgICAgIHJldHVybiB0aGlzLm1vY2tTZXJ2aWNlXy5mYXN0TW9kZV87
Ci0gICAgfQotCi0gICAgcmVzZXQoKSB7Ci0gICAgICB0aGlzLm1vY2tTZXJ2aWNlXyA9IG51bGw7
Ci0gICAgICB0aGlzLmJpbmRpbmdTZXRfLmNsb3NlQWxsQmluZGluZ3MoKTsKLSAgICAgIHRoaXMu
aW50ZXJjZXB0b3JfLnN0b3AoKTsKLSAgICB9Ci0gIH0KLQotICAvLyBDbGFzcyB0aGF0IG1vY2tz
IEZhY2VEZXRlY3Rpb24gaW50ZXJmYWNlIGRlZmluZWQgaW4KLSAgLy8gaHR0cHM6Ly9jcy5jaHJv
bWl1bS5vcmcvY2hyb21pdW0vc3JjL3NlcnZpY2VzL3NoYXBlX2RldGVjdGlvbi9wdWJsaWMvbW9q
b20vZmFjZWRldGVjdGlvbi5tb2pvbQotICBjbGFzcyBNb2NrRmFjZURldGVjdGlvbiB7Ci0gICAg
Y29uc3RydWN0b3IocmVxdWVzdCwgb3B0aW9ucykgewotICAgICAgdGhpcy5tYXhEZXRlY3RlZEZh
Y2VzXyA9IG9wdGlvbnMubWF4RGV0ZWN0ZWRGYWNlczsKLSAgICAgIHRoaXMuZmFzdE1vZGVfID0g
b3B0aW9ucy5mYXN0TW9kZTsKLSAgICAgIHRoaXMuYmluZGluZ18gPQotICAgICAgICAgIG5ldyBt
b2pvLkJpbmRpbmcoc2hhcGVEZXRlY3Rpb24ubW9qb20uRmFjZURldGVjdGlvbiwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHRoaXMsIHJlcXVlc3QpOwotICAgIH0KLQotICAgIGRldGVjdChi
aXRtYXBEYXRhKSB7Ci0gICAgICB0aGlzLmJ1ZmZlckRhdGFfID0KLSAgICAgICAgICBuZXcgVWlu
dDMyQXJyYXkoZ2V0QXJyYXlCdWZmZXJGcm9tQmlnQnVmZmVyKGJpdG1hcERhdGEucGl4ZWxEYXRh
KSk7Ci0gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHsKLSAgICAgICAgcmVzdWx0czogWwot
ICAgICAgICAgIHsKLSAgICAgICAgICAgIGJvdW5kaW5nQm94OiB7eDogMS4wLCB5OiAxLjAsIHdp
ZHRoOiAxMDAuMCwgaGVpZ2h0OiAxMDAuMH0sCi0gICAgICAgICAgICBsYW5kbWFya3M6IFt7Ci0g
ICAgICAgICAgICAgIHR5cGU6IHNoYXBlRGV0ZWN0aW9uLm1vam9tLkxhbmRtYXJrVHlwZS5FWUUs
Ci0gICAgICAgICAgICAgIGxvY2F0aW9uczogW3t4OiA0LjAsIHk6IDUuMH1dCi0gICAgICAgICAg
ICB9LAotICAgICAgICAgICAgewotICAgICAgICAgICAgICB0eXBlOiBzaGFwZURldGVjdGlvbi5t
b2pvbS5MYW5kbWFya1R5cGUuRVlFLAotICAgICAgICAgICAgICBsb2NhdGlvbnM6IFsKLSAgICAg
ICAgICAgICAgICB7eDogNC4wLCB5OiA1LjB9LCB7eDogNS4wLCB5OiA0LjB9LCB7eDogNi4wLCB5
OiAzLjB9LAotICAgICAgICAgICAgICAgIHt4OiA3LjAsIHk6IDQuMH0sIHt4OiA4LjAsIHk6IDUu
MH0sIHt4OiA3LjAsIHk6IDYuMH0sCi0gICAgICAgICAgICAgICAge3g6IDYuMCwgeTogNy4wfSwg
e3g6IDUuMCwgeTogNi4wfQotICAgICAgICAgICAgICBdCi0gICAgICAgICAgICB9XQotICAgICAg
ICAgIH0sCi0gICAgICAgICAgewotICAgICAgICAgICAgYm91bmRpbmdCb3g6IHt4OiAyLjAsIHk6
IDIuMCwgd2lkdGg6IDIwMC4wLCBoZWlnaHQ6IDIwMC4wfSwKLSAgICAgICAgICAgIGxhbmRtYXJr
czogW3sKLSAgICAgICAgICAgICAgdHlwZTogc2hhcGVEZXRlY3Rpb24ubW9qb20uTGFuZG1hcmtU
eXBlLk5PU0UsCi0gICAgICAgICAgICAgIGxvY2F0aW9uczogW3t4OiAxMDAuMCwgeTogNTAuMH1d
Ci0gICAgICAgICAgICB9LAotICAgICAgICAgICAgewotICAgICAgICAgICAgICB0eXBlOiBzaGFw
ZURldGVjdGlvbi5tb2pvbS5MYW5kbWFya1R5cGUuTk9TRSwKLSAgICAgICAgICAgICAgbG9jYXRp
b25zOiBbCi0gICAgICAgICAgICAgICAge3g6IDgwLjAsIHk6IDUwLjB9LCB7eDogNzAuMCwgeTog
NjAuMH0sIHt4OiA2MC4wLCB5OiA3MC4wfSwKLSAgICAgICAgICAgICAgICB7eDogNzAuMCwgeTog
NjAuMH0sIHt4OiA4MC4wLCB5OiA3MC4wfSwge3g6IDkwLjAsIHk6IDgwLjB9LAotICAgICAgICAg
ICAgICAgIHt4OiAxMDAuMCwgeTogNzAuMH0sIHt4OiA5MC4wLCB5OiA2MC4wfSwge3g6IDgwLjAs
IHk6IDUwLjB9Ci0gICAgICAgICAgICAgIF0KLSAgICAgICAgICAgIH1dCi0gICAgICAgICAgfSwK
LSAgICAgICAgICB7Ci0gICAgICAgICAgICBib3VuZGluZ0JveDoge3g6IDMuMCwgeTogMy4wLCB3
aWR0aDogMzAwLjAsIGhlaWdodDogMzAwLjB9LAotICAgICAgICAgICAgbGFuZG1hcmtzOiBbXQot
ICAgICAgICAgIH0sCi0gICAgICAgIF0KLSAgICAgIH0pOwotICAgIH0KLSAgfQotCi0gIGxldCB0
ZXN0SW50ZXJuYWwgPSB7Ci0gICAgaW5pdGlhbGl6ZWQ6IGZhbHNlLAotICAgIE1vY2tGYWNlRGV0
ZWN0aW9uUHJvdmlkZXI6IG51bGwKLSAgfQotCi0gIGNsYXNzIEZhY2VEZXRlY3Rpb25UZXN0Q2hy
b21pdW0gewotICAgIGNvbnN0cnVjdG9yKCkgewotICAgICAgT2JqZWN0LmZyZWV6ZSh0aGlzKTsg
Ly8gTWFrZSBpdCBpbW11dGFibGUuCi0gICAgfQotCi0gICAgaW5pdGlhbGl6ZSgpIHsKLSAgICAg
IGlmICh0ZXN0SW50ZXJuYWwuaW5pdGlhbGl6ZWQpCi0gICAgICAgIHRocm93IG5ldyBFcnJvcign
Q2FsbCByZXNldCgpIGJlZm9yZSBpbml0aWFsaXplKCkuJyk7Ci0KLSAgICAgIHRlc3RJbnRlcm5h
bC5Nb2NrRmFjZURldGVjdGlvblByb3ZpZGVyID0gbmV3IE1vY2tGYWNlRGV0ZWN0aW9uUHJvdmlk
ZXI7Ci0gICAgICB0ZXN0SW50ZXJuYWwuaW5pdGlhbGl6ZWQgPSB0cnVlOwotICAgIH0KLQotICAg
IC8vIFJlc2V0cyBzdGF0ZSBvZiBmYWNlIGRldGVjdGlvbiBtb2NrcyBiZXR3ZWVuIHRlc3QgcnVu
cy4KLSAgICBhc3luYyByZXNldCgpIHsKLSAgICAgIGlmICghdGVzdEludGVybmFsLmluaXRpYWxp
emVkKQotICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0NhbGwgaW5pdGlhbGl6ZSgpIGJlZm9yZSBy
ZXNldCgpLicpOwotICAgICAgdGVzdEludGVybmFsLk1vY2tGYWNlRGV0ZWN0aW9uUHJvdmlkZXIu
cmVzZXQoKTsKLSAgICAgIHRlc3RJbnRlcm5hbC5Nb2NrRmFjZURldGVjdGlvblByb3ZpZGVyID0g
bnVsbDsKLSAgICAgIHRlc3RJbnRlcm5hbC5pbml0aWFsaXplZCA9IGZhbHNlOwotCi0gICAgICBh
d2FpdCBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHNldFRpbWVvdXQocmVzb2x2ZSwgMCkpOwotICAg
IH0KLQotICAgIE1vY2tGYWNlRGV0ZWN0aW9uUHJvdmlkZXIoKSB7Ci0gICAgICByZXR1cm4gdGVz
dEludGVybmFsLk1vY2tGYWNlRGV0ZWN0aW9uUHJvdmlkZXI7Ci0gICAgfQotICB9Ci0KLSAgcmV0
dXJuIEZhY2VEZXRlY3Rpb25UZXN0Q2hyb21pdW07Ci19KSgpOwpkaWZmIC0tZ2l0IGEvTGF5b3V0
VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0v
bW9jay1mYWNlZGV0ZWN0aW9uLmpzLmhlYWRlcnMgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mv
d2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS9tb2NrLWZhY2VkZXRlY3Rpb24u
anMuaGVhZGVycwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmM2MWEzNGE0ZWMyZTc1
MDk2ZGIwZWI5Zjc3NDhiMTQyZjBkYjdiYi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMAotLS0gYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRl
c3RzL3Jlc291cmNlcy9jaHJvbWl1bS9tb2NrLWZhY2VkZXRlY3Rpb24uanMuaGVhZGVycworKysg
L2Rldi9udWxsCkBAIC0xICswLDAgQEAKLUNvbnRlbnQtVHlwZTogdGV4dC9qYXZhc2NyaXB0OyBj
aGFyc2V0PXV0Zi04ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvTGF5
b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21p
dW0vbW9jay1pbWFnZWNhcHR1cmUuanMgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBs
YXRmb3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS9tb2NrLWltYWdlY2FwdHVyZS5qcwpkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2UyYjk2ODM5MTM0MzMzOWE5OTU4MTAwZjU2NGZh
NzNkNWMwMTUwOS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0g
YS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9j
aHJvbWl1bS9tb2NrLWltYWdlY2FwdHVyZS5qcworKysgL2Rldi9udWxsCkBAIC0xLDI2NSArMCww
IEBACi0idXNlIHN0cmljdCI7Ci0KLXZhciBJbWFnZUNhcHR1cmVUZXN0ID0gKCgpID0+IHsKLSAg
Ly8gQ2xhc3MgdGhhdCBtb2NrcyBJbWFnZUNhcHR1cmUgaW50ZXJmYWNlIGRlZmluZWQgaW4KLSAg
Ly8gaHR0cHM6Ly9jcy5jaHJvbWl1bS5vcmcvY2hyb21pdW0vc3JjL21lZGlhL2NhcHR1cmUvbW9q
b20vaW1hZ2VfY2FwdHVyZS5tb2pvbQotICBjbGFzcyBNb2NrSW1hZ2VDYXB0dXJlIHsKLSAgICBj
b25zdHJ1Y3RvcigpIHsKLSAgICAgIHRoaXMuaW50ZXJjZXB0b3JfID0KLSAgICAgICAgICBuZXcg
TW9qb0ludGVyZmFjZUludGVyY2VwdG9yKG1lZGlhLm1vam9tLkltYWdlQ2FwdHVyZS5uYW1lKTsK
LSAgICAgIHRoaXMuaW50ZXJjZXB0b3JfLm9uaW50ZXJmYWNlcmVxdWVzdCA9Ci0gICAgICAgIGUg
PT4gdGhpcy5iaW5kaW5nU2V0Xy5hZGRCaW5kaW5nKHRoaXMsIGUuaGFuZGxlKTsKLSAgICAgIHRo
aXMuaW50ZXJjZXB0b3JfLnN0YXJ0KCk7Ci0KLSAgICAgIHRoaXMuc3RhdGVfID0gewotICAgICAg
ICBzdGF0ZTogewotICAgICAgICAgIHN1cHBvcnRlZFdoaXRlQmFsYW5jZU1vZGVzOiBbCi0gICAg
ICAgICAgICBtZWRpYS5tb2pvbS5NZXRlcmluZ01vZGUuU0lOR0xFX1NIT1QsCi0gICAgICAgICAg
ICBtZWRpYS5tb2pvbS5NZXRlcmluZ01vZGUuQ09OVElOVU9VUwotICAgICAgICAgIF0sCi0gICAg
ICAgICAgY3VycmVudFdoaXRlQmFsYW5jZU1vZGU6IG1lZGlhLm1vam9tLk1ldGVyaW5nTW9kZS5D
T05USU5VT1VTLAotICAgICAgICAgIHN1cHBvcnRlZEV4cG9zdXJlTW9kZXM6IFsKLSAgICAgICAg
ICAgIG1lZGlhLm1vam9tLk1ldGVyaW5nTW9kZS5NQU5VQUwsCi0gICAgICAgICAgICBtZWRpYS5t
b2pvbS5NZXRlcmluZ01vZGUuU0lOR0xFX1NIT1QsCi0gICAgICAgICAgICBtZWRpYS5tb2pvbS5N
ZXRlcmluZ01vZGUuQ09OVElOVU9VUwotICAgICAgICAgIF0sCi0gICAgICAgICAgY3VycmVudEV4
cG9zdXJlTW9kZTogbWVkaWEubW9qb20uTWV0ZXJpbmdNb2RlLk1BTlVBTCwKLSAgICAgICAgICBz
dXBwb3J0ZWRGb2N1c01vZGVzOiBbCi0gICAgICAgICAgICBtZWRpYS5tb2pvbS5NZXRlcmluZ01v
ZGUuTUFOVUFMLAotICAgICAgICAgICAgbWVkaWEubW9qb20uTWV0ZXJpbmdNb2RlLlNJTkdMRV9T
SE9UCi0gICAgICAgICAgXSwKLSAgICAgICAgICBjdXJyZW50Rm9jdXNNb2RlOiBtZWRpYS5tb2pv
bS5NZXRlcmluZ01vZGUuTUFOVUFMLAotICAgICAgICAgIHBvaW50c09mSW50ZXJlc3Q6IFt7Ci0g
ICAgICAgICAgICB4OiAwLjQsCi0gICAgICAgICAgICB5OiAwLjYKLSAgICAgICAgICB9XSwKLQot
ICAgICAgICAgIGV4cG9zdXJlQ29tcGVuc2F0aW9uOiB7Ci0gICAgICAgICAgICBtaW46IC0yMDAu
MCwKLSAgICAgICAgICAgIG1heDogMjAwLjAsCi0gICAgICAgICAgICBjdXJyZW50OiAzMy4wLAot
ICAgICAgICAgICAgc3RlcDogMzMuMAotICAgICAgICAgIH0sCi0gICAgICAgICAgZXhwb3N1cmVU
aW1lOiB7Ci0gICAgICAgICAgICBtaW46IDEwMC4wLAotICAgICAgICAgICAgbWF4OiAxMDAwMDAu
MCwKLSAgICAgICAgICAgIGN1cnJlbnQ6IDEwMDAuMCwKLSAgICAgICAgICAgIHN0ZXA6IDEwMC4w
Ci0gICAgICAgICAgfSwKLSAgICAgICAgICBjb2xvclRlbXBlcmF0dXJlOiB7Ci0gICAgICAgICAg
ICBtaW46IDI1MDAuMCwKLSAgICAgICAgICAgIG1heDogNjUwMC4wLAotICAgICAgICAgICAgY3Vy
cmVudDogNjAwMC4wLAotICAgICAgICAgICAgc3RlcDogMTAwMC4wCi0gICAgICAgICAgfSwKLSAg
ICAgICAgICBpc286IHsKLSAgICAgICAgICAgIG1pbjogMTAwLjAsCi0gICAgICAgICAgICBtYXg6
IDEyMDAwLjAsCi0gICAgICAgICAgICBjdXJyZW50OiA0MDAuMCwKLSAgICAgICAgICAgIHN0ZXA6
IDEuMAotICAgICAgICAgIH0sCi0KLSAgICAgICAgICBicmlnaHRuZXNzOiB7Ci0gICAgICAgICAg
ICBtaW46IDEuMCwKLSAgICAgICAgICAgIG1heDogMTAuMCwKLSAgICAgICAgICAgIGN1cnJlbnQ6
IDUuMCwKLSAgICAgICAgICAgIHN0ZXA6IDEuMAotICAgICAgICAgIH0sCi0gICAgICAgICAgY29u
dHJhc3Q6IHsKLSAgICAgICAgICAgIG1pbjogMi4wLAotICAgICAgICAgICAgbWF4OiA5LjAsCi0g
ICAgICAgICAgICBjdXJyZW50OiA1LjAsCi0gICAgICAgICAgICBzdGVwOiAxLjAKLSAgICAgICAg
ICB9LAotICAgICAgICAgIHNhdHVyYXRpb246IHsKLSAgICAgICAgICAgIG1pbjogMy4wLAotICAg
ICAgICAgICAgbWF4OiA4LjAsCi0gICAgICAgICAgICBjdXJyZW50OiA2LjAsCi0gICAgICAgICAg
ICBzdGVwOiAxLjAKLSAgICAgICAgICB9LAotICAgICAgICAgIHNoYXJwbmVzczogewotICAgICAg
ICAgICAgbWluOiA0LjAsCi0gICAgICAgICAgICBtYXg6IDcuMCwKLSAgICAgICAgICAgIGN1cnJl
bnQ6IDcuMCwKLSAgICAgICAgICAgIHN0ZXA6IDEuMAotICAgICAgICAgIH0sCi0KLSAgICAgICAg
ICBmb2N1c0Rpc3RhbmNlOiB7Ci0gICAgICAgICAgICBtaW46IDEuMCwKLSAgICAgICAgICAgIG1h
eDogMTAuMCwKLSAgICAgICAgICAgIGN1cnJlbnQ6IDMuMCwKLSAgICAgICAgICAgIHN0ZXA6IDEu
MAotICAgICAgICAgIH0sCi0KLSAgICAgICAgICBwYW46IHsKLSAgICAgICAgICAgIG1pbjogMC4w
LAotICAgICAgICAgICAgbWF4OiAxMC4wLAotICAgICAgICAgICAgY3VycmVudDogNS4wLAotICAg
ICAgICAgICAgc3RlcDogMi4wCi0gICAgICAgICAgfSwKLQotICAgICAgICAgIHRpbHQ6IHsKLSAg
ICAgICAgICAgIG1pbjogMC4wLAotICAgICAgICAgICAgbWF4OiAxMC4wLAotICAgICAgICAgICAg
Y3VycmVudDogNS4wLAotICAgICAgICAgICAgc3RlcDogMi4wCi0gICAgICAgICAgfSwKLQotICAg
ICAgICAgIHpvb206IHsKLSAgICAgICAgICAgIG1pbjogMC4wLAotICAgICAgICAgICAgbWF4OiAx
MC4wLAotICAgICAgICAgICAgY3VycmVudDogNS4wLAotICAgICAgICAgICAgc3RlcDogNS4wCi0g
ICAgICAgICAgfSwKLQotICAgICAgICAgIHN1cHBvcnRzVG9yY2g6IHRydWUsCi0gICAgICAgICAg
dG9yY2g6IGZhbHNlLAotCi0gICAgICAgICAgcmVkRXllUmVkdWN0aW9uOiBtZWRpYS5tb2pvbS5S
ZWRFeWVSZWR1Y3Rpb24uQ09OVFJPTExBQkxFLAotICAgICAgICAgIGhlaWdodDogewotICAgICAg
ICAgICAgbWluOiAyNDAuMCwKLSAgICAgICAgICAgIG1heDogMjQ0OC4wLAotICAgICAgICAgICAg
Y3VycmVudDogMjQwLjAsCi0gICAgICAgICAgICBzdGVwOiAyLjAKLSAgICAgICAgICB9LAotICAg
ICAgICAgIHdpZHRoOiB7Ci0gICAgICAgICAgICBtaW46IDMyMC4wLAotICAgICAgICAgICAgbWF4
OiAzMjY0LjAsCi0gICAgICAgICAgICBjdXJyZW50OiAzMjAuMCwKLSAgICAgICAgICAgIHN0ZXA6
IDMuMAotICAgICAgICAgIH0sCi0gICAgICAgICAgZmlsbExpZ2h0TW9kZTogWwotICAgICAgICAg
ICAgbWVkaWEubW9qb20uRmlsbExpZ2h0TW9kZS5BVVRPLCBtZWRpYS5tb2pvbS5GaWxsTGlnaHRN
b2RlLkZMQVNICi0gICAgICAgICAgXSwKLSAgICAgICAgfQotICAgICAgfTsKLSAgICAgIHRoaXMu
c2V0dGluZ3NfID0gbnVsbDsKLSAgICAgIHRoaXMuYmluZGluZ1NldF8gPSBuZXcgbW9qby5CaW5k
aW5nU2V0KG1lZGlhLm1vam9tLkltYWdlQ2FwdHVyZSk7Ci0gICAgfQotCi0gICAgcmVzZXQoKSB7
Ci0gICAgICB0aGlzLmJpbmRpbmdTZXRfLmNsb3NlQWxsQmluZGluZ3MoKTsKLSAgICAgIHRoaXMu
aW50ZXJjZXB0b3JfLnN0b3AoKTsKLSAgICB9Ci0KLSAgICBnZXRQaG90b1N0YXRlKHNvdXJjZV9p
ZCkgewotICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh0aGlzLnN0YXRlXyk7Ci0gICAgfQot
Ci0gICAgc2V0T3B0aW9ucyhzb3VyY2VfaWQsIHNldHRpbmdzKSB7Ci0gICAgICB0aGlzLnNldHRp
bmdzXyA9IHNldHRpbmdzOwotICAgICAgaWYgKHNldHRpbmdzLmhhc0lzbykKLSAgICAgICAgdGhp
cy5zdGF0ZV8uc3RhdGUuaXNvLmN1cnJlbnQgPSBzZXR0aW5ncy5pc287Ci0gICAgICBpZiAoc2V0
dGluZ3MuaGFzSGVpZ2h0KQotICAgICAgICB0aGlzLnN0YXRlXy5zdGF0ZS5oZWlnaHQuY3VycmVu
dCA9IHNldHRpbmdzLmhlaWdodDsKLSAgICAgIGlmIChzZXR0aW5ncy5oYXNXaWR0aCkKLSAgICAg
ICAgdGhpcy5zdGF0ZV8uc3RhdGUud2lkdGguY3VycmVudCA9IHNldHRpbmdzLndpZHRoOwotICAg
ICAgaWYgKHNldHRpbmdzLmhhc1BhbikKLSAgICAgICAgdGhpcy5zdGF0ZV8uc3RhdGUucGFuLmN1
cnJlbnQgPSBzZXR0aW5ncy5wYW47Ci0gICAgICBpZiAoc2V0dGluZ3MuaGFzVGlsdCkKLSAgICAg
ICAgdGhpcy5zdGF0ZV8uc3RhdGUudGlsdC5jdXJyZW50ID0gc2V0dGluZ3MudGlsdDsKLSAgICAg
IGlmIChzZXR0aW5ncy5oYXNab29tKQotICAgICAgICB0aGlzLnN0YXRlXy5zdGF0ZS56b29tLmN1
cnJlbnQgPSBzZXR0aW5ncy56b29tOwotICAgICAgaWYgKHNldHRpbmdzLmhhc0ZvY3VzTW9kZSkK
LSAgICAgICAgdGhpcy5zdGF0ZV8uc3RhdGUuY3VycmVudEZvY3VzTW9kZSA9IHNldHRpbmdzLmZv
Y3VzTW9kZTsKLSAgICAgIGlmIChzZXR0aW5ncy5oYXNGb2N1c0Rpc3RhbmNlKQotICAgICAgICB0
aGlzLnN0YXRlXy5zdGF0ZS5mb2N1c0Rpc3RhbmNlLmN1cnJlbnQgPSBzZXR0aW5ncy5mb2N1c0Rp
c3RhbmNlOwotCi0gICAgICBpZiAoc2V0dGluZ3MucG9pbnRzT2ZJbnRlcmVzdC5sZW5ndGggPiAw
KSB7Ci0gICAgICAgIHRoaXMuc3RhdGVfLnN0YXRlLnBvaW50c09mSW50ZXJlc3QgPQotICAgICAg
ICAgIHNldHRpbmdzLnBvaW50c09mSW50ZXJlc3Q7Ci0gICAgICB9Ci0KLSAgICAgIGlmIChzZXR0
aW5ncy5oYXNFeHBvc3VyZU1vZGUpCi0gICAgICAgIHRoaXMuc3RhdGVfLnN0YXRlLmN1cnJlbnRF
eHBvc3VyZU1vZGUgPSBzZXR0aW5ncy5leHBvc3VyZU1vZGU7Ci0KLSAgICAgIGlmIChzZXR0aW5n
cy5oYXNFeHBvc3VyZUNvbXBlbnNhdGlvbikgewotICAgICAgICB0aGlzLnN0YXRlXy5zdGF0ZS5l
eHBvc3VyZUNvbXBlbnNhdGlvbi5jdXJyZW50ID0KLSAgICAgICAgICBzZXR0aW5ncy5leHBvc3Vy
ZUNvbXBlbnNhdGlvbjsKLSAgICAgIH0KLSAgICAgIGlmIChzZXR0aW5ncy5oYXNFeHBvc3VyZVRp
bWUpIHsKLSAgICAgICAgdGhpcy5zdGF0ZV8uc3RhdGUuZXhwb3N1cmVUaW1lLmN1cnJlbnQgPQot
ICAgICAgICAgIHNldHRpbmdzLmV4cG9zdXJlVGltZTsKLSAgICAgIH0KLSAgICAgIGlmIChzZXR0
aW5ncy5oYXNXaGl0ZUJhbGFuY2VNb2RlKSB7Ci0gICAgICAgIHRoaXMuc3RhdGVfLnN0YXRlLmN1
cnJlbnRXaGl0ZUJhbGFuY2VNb2RlID0KLSAgICAgICAgICBzZXR0aW5ncy53aGl0ZUJhbGFuY2VN
b2RlOwotICAgICAgfQotICAgICAgaWYgKHNldHRpbmdzLmhhc0ZpbGxMaWdodE1vZGUpCi0gICAg
ICAgIHRoaXMuc3RhdGVfLnN0YXRlLmZpbGxMaWdodE1vZGUgPSBbc2V0dGluZ3MuZmlsbExpZ2h0
TW9kZV07Ci0gICAgICBpZiAoc2V0dGluZ3MuaGFzUmVkRXllUmVkdWN0aW9uKQotICAgICAgICB0
aGlzLnN0YXRlXy5zdGF0ZS5yZWRFeWVSZWR1Y3Rpb24gPSBzZXR0aW5ncy5yZWRFeWVSZWR1Y3Rp
b247Ci0gICAgICBpZiAoc2V0dGluZ3MuaGFzQ29sb3JUZW1wZXJhdHVyZSkgewotICAgICAgICB0
aGlzLnN0YXRlXy5zdGF0ZS5jb2xvclRlbXBlcmF0dXJlLmN1cnJlbnQgPQotICAgICAgICAgIHNl
dHRpbmdzLmNvbG9yVGVtcGVyYXR1cmU7Ci0gICAgICB9Ci0gICAgICBpZiAoc2V0dGluZ3MuaGFz
QnJpZ2h0bmVzcykKLSAgICAgICAgdGhpcy5zdGF0ZV8uc3RhdGUuYnJpZ2h0bmVzcy5jdXJyZW50
ID0gc2V0dGluZ3MuYnJpZ2h0bmVzczsKLSAgICAgIGlmIChzZXR0aW5ncy5oYXNDb250cmFzdCkK
LSAgICAgICAgdGhpcy5zdGF0ZV8uc3RhdGUuY29udHJhc3QuY3VycmVudCA9IHNldHRpbmdzLmNv
bnRyYXN0OwotICAgICAgaWYgKHNldHRpbmdzLmhhc1NhdHVyYXRpb24pCi0gICAgICAgIHRoaXMu
c3RhdGVfLnN0YXRlLnNhdHVyYXRpb24uY3VycmVudCA9IHNldHRpbmdzLnNhdHVyYXRpb247Ci0g
ICAgICBpZiAoc2V0dGluZ3MuaGFzU2hhcnBuZXNzKQotICAgICAgICB0aGlzLnN0YXRlXy5zdGF0
ZS5zaGFycG5lc3MuY3VycmVudCA9IHNldHRpbmdzLnNoYXJwbmVzczsKLQotICAgICAgaWYgKHNl
dHRpbmdzLmhhc1RvcmNoKQotICAgICAgICB0aGlzLnN0YXRlXy5zdGF0ZS50b3JjaCA9IHNldHRp
bmdzLnRvcmNoOwotCi0gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHsKLSAgICAgICAgc3Vj
Y2VzczogdHJ1ZQotICAgICAgfSk7Ci0gICAgfQotCi0gICAgdGFrZVBob3RvKHNvdXJjZV9pZCkg
ewotICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh7Ci0gICAgICAgIGJsb2I6IHsKLSAgICAg
ICAgICBtaW1lVHlwZTogJ2ltYWdlL2NhdCcsCi0gICAgICAgICAgZGF0YTogbmV3IEFycmF5KDIp
Ci0gICAgICAgIH0KLSAgICAgIH0pOwotICAgIH0KLQotICAgIHN0YXRlKCkgewotICAgICAgcmV0
dXJuIHRoaXMuc3RhdGVfLnN0YXRlOwotICAgIH0KLQotICAgIG9wdGlvbnMoKSB7Ci0gICAgICBy
ZXR1cm4gdGhpcy5zZXR0aW5nc187Ci0gICAgfQotICB9Ci0KLSAgbGV0IHRlc3RJbnRlcm5hbCA9
IHsKLSAgICBpbml0aWFsaXplZDogZmFsc2UsCi0gICAgbW9ja0ltYWdlQ2FwdHVyZTogbnVsbAot
ICB9Ci0KLSAgY2xhc3MgSW1hZ2VDYXB0dXJlVGVzdENocm9taXVtIHsKLQotICAgIGNvbnN0cnVj
dG9yKCkgewotICAgICAgT2JqZWN0LmZyZWV6ZSh0aGlzKTsgLy8gTWFrZSBpdCBpbW11dGFibGUu
Ci0gICAgfQotCi0gICAgaW5pdGlhbGl6ZSgpIHsKLSAgICAgIGlmICh0ZXN0SW50ZXJuYWwuaW5p
dGlhbGl6ZWQpCi0gICAgICAgIHRocm93IG5ldyBFcnJvcignQ2FsbCByZXNldCgpIGJlZm9yZSBp
bml0aWFsaXplKCkuJyk7Ci0KLSAgICAgIHRlc3RJbnRlcm5hbC5tb2NrSW1hZ2VDYXB0dXJlID0g
bmV3IE1vY2tJbWFnZUNhcHR1cmU7Ci0gICAgICB0ZXN0SW50ZXJuYWwuaW5pdGlhbGl6ZWQgPSB0
cnVlOwotICAgIH0KLSAgICAvLyBSZXNldHMgc3RhdGUgb2YgaW1hZ2UgY2FwdHVyZSBtb2NrcyBi
ZXR3ZWVuIHRlc3QgcnVucy4KLSAgICBhc3luYyByZXNldCgpIHsKLSAgICAgIGlmICghdGVzdElu
dGVybmFsLmluaXRpYWxpemVkKQotICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0NhbGwgaW5pdGlh
bGl6ZSgpIGJlZm9yZSByZXNldCgpLicpOwotICAgICAgdGVzdEludGVybmFsLm1vY2tJbWFnZUNh
cHR1cmUucmVzZXQoKTsKLSAgICAgIHRlc3RJbnRlcm5hbC5tb2NrSW1hZ2VDYXB0dXJlID0gbnVs
bDsKLSAgICAgIHRlc3RJbnRlcm5hbC5pbml0aWFsaXplZCA9IGZhbHNlOwotCi0gICAgICBhd2Fp
dCBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHNldFRpbWVvdXQocmVzb2x2ZSwgMCkpOwotICAgIH0K
LSAgICBtb2NrSW1hZ2VDYXB0dXJlKCkgewotICAgICAgcmV0dXJuIHRlc3RJbnRlcm5hbC5tb2Nr
SW1hZ2VDYXB0dXJlOwotICAgIH0KLSAgfQotCi0gIHJldHVybiBJbWFnZUNhcHR1cmVUZXN0Q2hy
b21pdW07Ci19KSgpOwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1w
bGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vbW9jay1zY3JlZW5lbnVtZXJhdGlvbi5q
cyBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2Vz
L2Nocm9taXVtL21vY2stc2NyZWVuZW51bWVyYXRpb24uanMKZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDVhMmQ3YjE4ZDI4MjI5ZDllMGUzZTUzYTIyMDA2YTA4MmRlMjVkZWEuLjAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvTGF5b3V0VGVzdHMvaW1w
b3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vbW9jay1zY3Jl
ZW5lbnVtZXJhdGlvbi5qcworKysgL2Rldi9udWxsCkBAIC0xLDkyICswLDAgQEAKLSd1c2Ugc3Ry
aWN0JwotCi12YXIgU2NyZWVuRW51bWVyYXRpb25UZXN0ID0gKCgpID0+IHsKLQotICBjbGFzcyBN
b2NrU2NyZWVuRW51bWVyYXRpb24gewotICAgIGNvbnN0cnVjdG9yKCkgewotICAgICAgdGhpcy5i
aW5kaW5nU2V0XyA9IG5ldyBtb2pvLkJpbmRpbmdTZXQoYmxpbmsubW9qb20uU2NyZWVuRW51bWVy
YXRpb24pOwotICAgICAgdGhpcy5pbnRlcmNlcHRvcl8gPSBuZXcgTW9qb0ludGVyZmFjZUludGVy
Y2VwdG9yKGJsaW5rLm1vam9tLlNjcmVlbkVudW1lcmF0aW9uLm5hbWUpOwotICAgICAgdGhpcy5p
bnRlcmNlcHRvcl8ub25pbnRlcmZhY2VyZXF1ZXN0ID0gZSA9PiB7Ci0gICAgICAgIHRoaXMuYmlu
ZGluZ1NldF8uYWRkQmluZGluZyh0aGlzLCBlLmhhbmRsZSk7Ci0gICAgICB9Ci0gICAgICB0aGlz
LnJlc2V0KCk7Ci0gICAgICB0aGlzLmludGVyY2VwdG9yXy5zdGFydCgpOwotICAgIH0KLQotICAg
IHJlc2V0KCkgewotICAgICAgdGhpcy5kaXNwbGF5c18gPSBbXTsKLSAgICAgIHRoaXMuaW50ZXJu
YWxJZF8gPSAwOwotICAgICAgdGhpcy5wcmltYXJ5SWRfID0gMDsKLSAgICAgIHRoaXMuc3VjY2Vz
c18gPSBmYWxzZTsKLSAgICB9Ci0KLSAgICBzZXRJbnRlcm5hbElkKGludGVybmFsSWQpIHsKLSAg
ICAgIHRoaXMuaW50ZXJuYWxJZF8gPSBpbnRlcm5hbElkOwotICAgIH0KLQotICAgIHNldFByaW1h
cnlJZChwcmltYXJ5SWQpIHsKLSAgICAgIHRoaXMucHJpbWFyeUlkXyA9IHByaW1hcnlJZDsKLSAg
ICB9Ci0KLSAgICBzZXRTdWNjZXNzKHN1Y2Nlc3MpIHsKLSAgICAgIHRoaXMuc3VjY2Vzc18gPSBz
dWNjZXNzOwotICAgIH0KLQotICAgIGFkZERpc3BsYXkoZGlzcGxheSkgewotICAgICAgdGhpcy5k
aXNwbGF5c18ucHVzaChkaXNwbGF5KTsKLSAgICB9Ci0KLSAgICByZW1vdmVEaXNwbGF5KGlkKSB7
Ci0gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuZGlzcGxheXNfLmxlbmd0aDsgaSsrKSB7
Ci0gICAgICAgIGlmICh0aGlzLmRpc3BsYXlzX1tpXS5pZCA9PT0gaWQpCi0gICAgICAgICAgdGhp
cy5kaXNwbGF5c18uc3BsaWNlKGksMSk7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgYXN5bmMgZ2V0
RGlzcGxheXMoKSB7Ci0gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHsKLSAgICAgICAgZGlz
cGxheXM6IHRoaXMuZGlzcGxheXNfLAotICAgICAgICBpbnRlcm5hbElkOiB0aGlzLmludGVybmFs
SWRfLAotICAgICAgICBwcmltYXJ5SWQ6IHRoaXMucHJpbWFyeUlkXywKLSAgICAgICAgc3VjY2Vz
czogdGhpcy5zdWNjZXNzXywKLSAgICAgIH0pOwotICAgIH0KLSAgfQotCi0gIGxldCB0ZXN0SW50
ZXJuYWwgPSB7Ci0gICAgaW5pdGlhbGl6ZWQ6IGZhbHNlLAotICAgIG1vY2tTY3JlZW5FbnVtZXJh
dGlvbjogbnVsbAotICB9Ci0KLSAgY2xhc3MgU2NyZWVuRW51bWVyYXRpb25UZXN0Q2hyb21pdW0g
ewotICAgIGNvbnN0cnVjdG9yKCkgewotICAgICAgT2JqZWN0LmZyZWV6ZSh0aGlzKTsgLy8gTWFr
ZXMgaXQgaW1tdXRhYmxlLgotICAgIH0KLQotICAgIGFzeW5jIGluaXRpYWxpemUoKSB7Ci0gICAg
ICBpZiAodGVzdEludGVybmFsLmluaXRpYWxpemVkKQotICAgICAgICB0aHJvdyBuZXcgRXJyb3Io
J0NhbGwgcmVzZXQoKSBiZWZvcmUgaW5pdGlhbGl6ZSgpLicpOwotCi0gICAgICBpZiAodGVzdElu
dGVybmFsLm1vY2tTY3JlZW5FbnVtZXJhdGlvbiA9PSBudWxsKQotICAgICAgICB0ZXN0SW50ZXJu
YWwubW9ja1NjcmVlbkVudW1lcmF0aW9uID0gbmV3IE1vY2tTY3JlZW5FbnVtZXJhdGlvbigpOwot
ICAgICAgdGVzdEludGVybmFsLmluaXRpYWxpemVkID0gdHJ1ZTsKLSAgICB9Ci0KLSAgICBhc3lu
YyByZXNldCgpIHsKLSAgICAgIGlmICghdGVzdEludGVybmFsLmluaXRpYWxpemVkKQotICAgICAg
ICB0aHJvdyBuZXcgRXJyb3IoJ0NhbGwgaW5pdGlhbGl6ZSgpIGJlZm9yZSByZXNldCgpLicpOwot
ICAgICAgdGVzdEludGVybmFsLm1vY2tTY3JlZW5FbnVtZXJhdGlvbi5yZXNldCgpOwotICAgICAg
dGVzdEludGVybmFsLmluaXRpYWxpemVkID0gZmFsc2U7Ci0KLSAgICAgIC8vIFdhaXQgZm9yIGFu
IGV2ZW50IGxvb3AgaXRlcmF0aW9uIHRvIGxldCBhbnkgcGVuZGluZyBtb2pvIGNvbW1hbmRzCi0g
ICAgICAvLyB0byBmaW5pc2guCi0gICAgICBhd2FpdCBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHNl
dFRpbWVvdXQocmVzb2x2ZSwgMCkpOwotICAgIH0KLQotICAgIGdldE1vY2tTY3JlZW5FbnVtZXJh
dGlvbigpIHsKLSAgICAgIHJldHVybiB0ZXN0SW50ZXJuYWwubW9ja1NjcmVlbkVudW1lcmF0aW9u
OwotICAgIH0KLSAgfQotCi0gIHJldHVybiBTY3JlZW5FbnVtZXJhdGlvblRlc3RDaHJvbWl1bTsK
LX0pKCk7CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3Jt
LXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS9tb2NrLXNjcmVlbmVudW1lcmF0aW9uLmpzLmhlYWRl
ciBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2Vz
L2Nocm9taXVtL21vY2stc2NyZWVuZW51bWVyYXRpb24uanMuaGVhZGVyCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCA2ODA1YzMyM2RmNWE5NzUyMzE2NDhiODMwZTMzY2UxODNjM2NiYmQz
Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL0xheW91dFRl
c3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL21v
Y2stc2NyZWVuZW51bWVyYXRpb24uanMuaGVhZGVyCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBA
QAotQ29udGVudC1UeXBlOiB0ZXh0L2phdmFzY3JpcHQ7IGNoYXJzZXQ9dXRmLTgKZGlmZiAtLWdp
dCBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2Vz
L2Nocm9taXVtL21vY2stc21zLXJlY2VpdmVyLmpzIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNj
L3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vbW9jay1zbXMtcmVjZWl2ZXIu
anMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM0YWE5YTg2ZjJjOGExNTMwM2Y5NmNj
OTg1OWIyZWMxNDZlYjJmNTguLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAKLS0tIGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNv
dXJjZXMvY2hyb21pdW0vbW9jay1zbXMtcmVjZWl2ZXIuanMKKysrIC9kZXYvbnVsbApAQCAtMSw1
MSArMCwwIEBACi0ndXNlIHN0cmljdCc7Ci0KLWNvbnN0IFNtc1Byb3ZpZGVyID0gKCgpID0+IHsK
LQotICBjbGFzcyBNb2NrU21zUmVjZWl2ZXIgewotCi0gICAgY29uc3RydWN0b3IoKSB7Ci0gICAg
ICB0aGlzLm1vam9SZWNlaXZlcl8gPSBuZXcgYmxpbmsubW9qb20uU21zUmVjZWl2ZXJSZWNlaXZl
cih0aGlzKTsKLQotICAgICAgdGhpcy5pbnRlcmNlcHRvcl8gPQotICAgICAgICAgIG5ldyBNb2pv
SW50ZXJmYWNlSW50ZXJjZXB0b3IoYmxpbmsubW9qb20uU21zUmVjZWl2ZXIuJGludGVyZmFjZU5h
bWUpOwotCi0gICAgICB0aGlzLmludGVyY2VwdG9yXy5vbmludGVyZmFjZXJlcXVlc3QgPSAoZSkg
PT4gewotICAgICAgICB0aGlzLm1vam9SZWNlaXZlcl8uJC5iaW5kSGFuZGxlKGUuaGFuZGxlKTsK
LSAgICAgIH0KLSAgICAgIHRoaXMuaW50ZXJjZXB0b3JfLnN0YXJ0KCk7Ci0KLSAgICAgIHRoaXMu
cmV0dXJuVmFsdWVzXyA9IHt9OwotICAgIH0KLQotICAgIGFzeW5jIHJlY2VpdmUoKSB7Ci0gICAg
ICBsZXQgY2FsbCA9IHRoaXMucmV0dXJuVmFsdWVzXy5yZWNlaXZlID8KLSAgICAgICAgICB0aGlz
LnJldHVyblZhbHVlc18ucmVjZWl2ZS5zaGlmdCgpIDogbnVsbDsKLSAgICAgIGlmICghY2FsbCkK
LSAgICAgICAgcmV0dXJuOwotICAgICAgcmV0dXJuIGNhbGwoKTsKLSAgICB9Ci0KLSAgICBhc3lu
YyBhYm9ydCgpIHt9OwotCi0gICAgcHVzaFJldHVyblZhbHVlc0ZvclRlc3RpbmcoY2FsbE5hbWUs
IHZhbHVlKSB7Ci0gICAgICB0aGlzLnJldHVyblZhbHVlc19bY2FsbE5hbWVdID0gdGhpcy5yZXR1
cm5WYWx1ZXNfW2NhbGxOYW1lXSB8fCBbXTsKLSAgICAgIHRoaXMucmV0dXJuVmFsdWVzX1tjYWxs
TmFtZV0ucHVzaCh2YWx1ZSk7Ci0gICAgICByZXR1cm4gdGhpczsKLSAgICB9Ci0gIH0KLQotICBj
b25zdCBtb2NrU21zUmVjZWl2ZXIgPSBuZXcgTW9ja1Ntc1JlY2VpdmVyKCk7Ci0KLSAgY2xhc3Mg
U21zUHJvdmlkZXJDaHJvbWl1bSB7Ci0gICAgY29uc3RydWN0b3IoKSB7Ci0gICAgICBPYmplY3Qu
ZnJlZXplKHRoaXMpOyAvLyBNYWtlIGl0IGltbXV0YWJsZS4KLSAgICB9Ci0KLSAgICBwdXNoUmV0
dXJuVmFsdWVzRm9yVGVzdGluZyhjYWxsTmFtZSwgY2FsbGJhY2spIHsKLSAgICAgIG1vY2tTbXNS
ZWNlaXZlci5wdXNoUmV0dXJuVmFsdWVzRm9yVGVzdGluZyhjYWxsTmFtZSwgY2FsbGJhY2spOwot
ICAgIH0KLSAgfQotCi0gIHJldHVybiBTbXNQcm92aWRlckNocm9taXVtOwotfSkoKTsKZGlmZiAt
LWdpdCBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3Vy
Y2VzL2Nocm9taXVtL21vY2stdGV4dGRldGVjdGlvbi5qcyBiL0xheW91dFRlc3RzL2ltcG9ydGVk
L3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL21vY2stdGV4dGRldGVj
dGlvbi5qcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDI3Y2UzOGRhMjFhOWNkMDBl
MTFhYWIzMTM3MDhmMjcxOWQ4YjA5NC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMAotLS0gYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3Rz
L3Jlc291cmNlcy9jaHJvbWl1bS9tb2NrLXRleHRkZXRlY3Rpb24uanMKKysrIC9kZXYvbnVsbApA
QCAtMSw5MyArMCwwIEBACi0idXNlIHN0cmljdCI7Ci12YXIgVGV4dERldGVjdGlvblRlc3QgPSAo
KCkgPT4gewotICAvLyBDbGFzcyB0aGF0IG1vY2tzIFRleHREZXRlY3Rpb24gaW50ZXJmYWNlIGRl
ZmluZWQgaW4KLSAgLy8gaHR0cHM6Ly9jcy5jaHJvbWl1bS5vcmcvY2hyb21pdW0vc3JjL3NlcnZp
Y2VzL3NoYXBlX2RldGVjdGlvbi9wdWJsaWMvbW9qb20vdGV4dGRldGVjdGlvbi5tb2pvbQotICBj
bGFzcyBNb2NrVGV4dERldGVjdGlvbiB7Ci0gICAgY29uc3RydWN0b3IoKSB7Ci0gICAgICB0aGlz
LmJpbmRpbmdTZXRfID0KLSAgICAgICAgICBuZXcgbW9qby5CaW5kaW5nU2V0KHNoYXBlRGV0ZWN0
aW9uLm1vam9tLlRleHREZXRlY3Rpb24pOwotCi0gICAgICB0aGlzLmludGVyY2VwdG9yXyA9Ci0g
ICAgICAgICAgbmV3IE1vam9JbnRlcmZhY2VJbnRlcmNlcHRvcihzaGFwZURldGVjdGlvbi5tb2pv
bS5UZXh0RGV0ZWN0aW9uLm5hbWUpOwotICAgICAgdGhpcy5pbnRlcmNlcHRvcl8ub25pbnRlcmZh
Y2VyZXF1ZXN0ID0KLSAgICAgICAgICBlID0+IHRoaXMuYmluZGluZ1NldF8uYWRkQmluZGluZyh0
aGlzLCBlLmhhbmRsZSk7Ci0gICAgICB0aGlzLmludGVyY2VwdG9yXy5zdGFydCgpOwotICAgIH0K
LQotICAgIGRldGVjdChiaXRtYXBEYXRhKSB7Ci0gICAgICB0aGlzLmJ1ZmZlckRhdGFfID0KLSAg
ICAgICAgICBuZXcgVWludDMyQXJyYXkoZ2V0QXJyYXlCdWZmZXJGcm9tQmlnQnVmZmVyKGJpdG1h
cERhdGEucGl4ZWxEYXRhKSk7Ci0gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHsKLSAgICAg
ICAgcmVzdWx0czogWwotICAgICAgICAgIHsKLSAgICAgICAgICAgIHJhd1ZhbHVlIDogImNhdHMi
LAotICAgICAgICAgICAgYm91bmRpbmdCb3g6IHsgeDogMS4wLCB5OiAxLjAsIHdpZHRoOiAxMDAu
MCwgaGVpZ2h0OiAxMDAuMCB9LAotICAgICAgICAgICAgY29ybmVyUG9pbnRzOiBbCi0gICAgICAg
ICAgICAgIHsgeDogMS4wLCB5OiAxLjAgfSwKLSAgICAgICAgICAgICAgeyB4OiAxMDEuMCwgeTog
MS4wIH0sCi0gICAgICAgICAgICAgIHsgeDogMTAxLjAsIHk6IDEwMS4wIH0sCi0gICAgICAgICAg
ICAgIHsgeDogMS4wLCB5OiAxMDEuMCB9Ci0gICAgICAgICAgICBdCi0gICAgICAgICAgfSwKLSAg
ICAgICAgICB7Ci0gICAgICAgICAgICByYXdWYWx1ZSA6ICJkb2dzIiwKLSAgICAgICAgICAgIGJv
dW5kaW5nQm94OiB7IHg6IDIuMCwgeTogMi4wLCB3aWR0aDogNTAuMCwgaGVpZ2h0OiA1MC4wIH0s
Ci0gICAgICAgICAgICBjb3JuZXJQb2ludHM6IFsKLSAgICAgICAgICAgICAgeyB4OiAyLjAsIHk6
IDIuMCB9LAotICAgICAgICAgICAgICB7IHg6IDUyLjAsIHk6IDIuMCB9LAotICAgICAgICAgICAg
ICB7IHg6IDUyLjAsIHk6IDUyLjAgfSwKLSAgICAgICAgICAgICAgeyB4OiAyLjAsIHk6IDUyLjAg
fQotICAgICAgICAgICAgXQotICAgICAgICAgIH0sCi0gICAgICAgIF0sCi0gICAgICB9KTsKLSAg
ICB9Ci0KLSAgICBnZXRGcmFtZURhdGEoKSB7Ci0gICAgICByZXR1cm4gdGhpcy5idWZmZXJEYXRh
XzsKLSAgICB9Ci0KLSAgICByZXNldCgpIHsKLSAgICAgIHRoaXMuYmluZGluZ1NldF8uY2xvc2VB
bGxCaW5kaW5ncygpOwotICAgICAgdGhpcy5pbnRlcmNlcHRvcl8uc3RvcCgpOwotICAgIH0KLQot
ICB9Ci0KLSAgbGV0IHRlc3RJbnRlcm5hbCA9IHsKLSAgICBpbml0aWFsaXplZDogZmFsc2UsCi0g
ICAgTW9ja1RleHREZXRlY3Rpb246IG51bGwKLSAgfQotCi0gIGNsYXNzIFRleHREZXRlY3Rpb25U
ZXN0Q2hyb21pdW0gewotICAgIGNvbnN0cnVjdG9yKCkgewotICAgICAgT2JqZWN0LmZyZWV6ZSh0
aGlzKTsgLy8gTWFrZSBpdCBpbW11dGFibGUuCi0gICAgfQotCi0gICAgaW5pdGlhbGl6ZSgpIHsK
LSAgICAgIGlmICh0ZXN0SW50ZXJuYWwuaW5pdGlhbGl6ZWQpCi0gICAgICAgIHRocm93IG5ldyBF
cnJvcignQ2FsbCByZXNldCgpIGJlZm9yZSBpbml0aWFsaXplKCkuJyk7Ci0KLSAgICAgIHRlc3RJ
bnRlcm5hbC5Nb2NrVGV4dERldGVjdGlvbiA9IG5ldyBNb2NrVGV4dERldGVjdGlvbjsKLSAgICAg
IHRlc3RJbnRlcm5hbC5pbml0aWFsaXplZCA9IHRydWU7Ci0gICAgfQotCi0gICAgLy8gUmVzZXRz
IHN0YXRlIG9mIHRleHQgZGV0ZWN0aW9uIG1vY2tzIGJldHdlZW4gdGVzdCBydW5zLgotICAgIGFz
eW5jIHJlc2V0KCkgewotICAgICAgaWYgKCF0ZXN0SW50ZXJuYWwuaW5pdGlhbGl6ZWQpCi0gICAg
ICAgIHRocm93IG5ldyBFcnJvcignQ2FsbCBpbml0aWFsaXplKCkgYmVmb3JlIHJlc2V0KCkuJyk7
Ci0gICAgICB0ZXN0SW50ZXJuYWwuTW9ja1RleHREZXRlY3Rpb24ucmVzZXQoKTsKLSAgICAgIHRl
c3RJbnRlcm5hbC5Nb2NrVGV4dERldGVjdGlvbiA9IG51bGw7Ci0gICAgICB0ZXN0SW50ZXJuYWwu
aW5pdGlhbGl6ZWQgPSBmYWxzZTsKLQotICAgICAgYXdhaXQgbmV3IFByb21pc2UocmVzb2x2ZSA9
PiBzZXRUaW1lb3V0KHJlc29sdmUsIDApKTsKLSAgICB9Ci0KLSAgICBNb2NrVGV4dERldGVjdGlv
bigpIHsKLSAgICAgIHJldHVybiB0ZXN0SW50ZXJuYWwuTW9ja1RleHREZXRlY3Rpb247Ci0gICAg
fQotICB9Ci0KLSAgcmV0dXJuIFRleHREZXRlY3Rpb25UZXN0Q2hyb21pdW07Ci0KLX0pKCk7CmRp
ZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jl
c291cmNlcy9jaHJvbWl1bS9tb2NrLXRleHRkZXRlY3Rpb24uanMuaGVhZGVycyBiL0xheW91dFRl
c3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL21v
Y2stdGV4dGRldGVjdGlvbi5qcy5oZWFkZXJzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCA2YzYxYTM0YTRlYzJlNzUwOTZkYjBlYjlmNzc0OGIxNDJmMGRiN2JiLi4wMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3cz
Yy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL21vY2stdGV4dGRldGVjdGlv
bi5qcy5oZWFkZXJzCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotQ29udGVudC1UeXBlOiB0
ZXh0L2phdmFzY3JpcHQ7IGNoYXJzZXQ9dXRmLTgKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxl
CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3Rz
L3Jlc291cmNlcy9jaHJvbWl1bS9tb2pvX2JpbmRpbmdzLmpzIGIvTGF5b3V0VGVzdHMvaW1wb3J0
ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vbW9qb19iaW5kaW5n
cy5qcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzBmNmNhZDVlNWYwNmY0ZjY0YTBm
ZDRjZGNkNjkzZmNlYTEyYmI3OC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMAotLS0gYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jl
c291cmNlcy9jaHJvbWl1bS9tb2pvX2JpbmRpbmdzLmpzCisrKyAvZGV2L251bGwKQEAgLTEsNTE0
NiArMCwwIEBACi0vLyBDb3B5cmlnaHQgMjAxNyBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5
IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNF
IGZpbGUuCi0KLSd1c2Ugc3RyaWN0JzsKLQotaWYgKCh0eXBlb2YgbW9qbyAhPT0gJ3VuZGVmaW5l
ZCcpICYmIG1vam8uYmluZGluZ3NMaWJyYXJ5SW5pdGlhbGl6ZWQpIHsKLSAgdGhyb3cgbmV3IEVy
cm9yKCdUaGUgTW9qbyBiaW5kaW5ncyBsaWJyYXJ5IGhhcyBiZWVuIGluaXRpYWxpemVkLicpOwot
fQotCi12YXIgbW9qbyA9IG1vam8gfHwge307Ci1tb2pvLmJpbmRpbmdzTGlicmFyeUluaXRpYWxp
emVkID0gdHJ1ZTsKLQotbW9qby5pbnRlcm5hbCA9IG1vam8uaW50ZXJuYWwgfHwge307Ci0KLW1v
am8uY29uZmlnID0gbW9qby5jb25maWcgfHwge307Ci1pZiAodHlwZW9mIG1vam8uY29uZmlnLmds
b2JhbCA9PT0gJ3VuZGVmaW5lZCcpIHsKLSAgbW9qby5jb25maWcuZ2xvYmFsID0gdGhpczsKLX0K
LQotaWYgKHR5cGVvZiBtb2pvLmNvbmZpZy5hdXRvTG9hZE1vam9tRGVwcyA9PT0gJ3VuZGVmaW5l
ZCcpIHsKLSAgLy8gV2hldGhlciB0byBhdXRvbWF0aWNhbGx5IGxvYWQgbW9qb20gZGVwZW5kZW5j
aWVzLgotICAvLyBGb3IgZXhhbXBsZSwgaWYgZm9vLm1vam9tIGltcG9ydHMgYmFyLm1vam9tLCB8
YXV0b0xvYWRNb2pvbURlcHN8IHNldCB0bwotICAvLyB0cnVlIG1lYW5zIHRoYXQgbG9hZGluZyBm
b28ubW9qb20uanMgd2lsbCBpbnNlcnQgYSA8c2NyaXB0PiB0YWcgdG8gbG9hZAotICAvLyBiYXIu
bW9qb20uanMsIGlmIGl0IGhhc24ndCBiZWVuIGxvYWRlZC4KLSAgLy8KLSAgLy8gVGhlIFVSTCBv
ZiBiYXIubW9qb20uanMgaXMgZGV0ZXJtaW5lZCBieSB0aGUgcmVsYXRpdmUgcGF0aCBvZiBiYXIu
bW9qb20KLSAgLy8gKHJlbGF0aXZlIHRvIHRoZSBwb3NpdGlvbiBvZiBmb28ubW9qb20gYXQgYnVp
bGQgdGltZSkgYW5kIHRoZSBVUkwgb2YKLSAgLy8gZm9vLm1vam9tLmpzLiBGb3IgZXhtcGxlLCBp
ZiBhdCBidWlsZCB0aW1lIHRoZSB0d28gbW9qb20gZmlsZXMgYXJlCi0gIC8vIGxvY2F0ZWQgYXQ6
Ci0gIC8vICAgYS9iL2MvZm9vLm1vam9tCi0gIC8vICAgYS9iL2QvYmFyLm1vam9tCi0gIC8vIGFu
ZCB0aGUgVVJMIG9mIGZvby5tb2pvbS5qcyBpczoKLSAgLy8gICBodHRwOi8vZXhhbXBsZS5vcmcv
c2NyaXB0cy9iL2MvZm9vLm1vam9tLmpzCi0gIC8vIHRoZW4gdGhlIFVSTCBvZiBiYXIubW9qb20u
anMgd2lsbCBiZToKLSAgLy8gICBodHRwOi8vZXhhbXBsZS5vcmcvc2NyaXB0cy9iL2QvYmFyLm1v
am9tLmpzCi0gIC8vCi0gIC8vIElmIHlvdSB3b3VsZCBsaWtlIGJhci5tb2pvbS5qcyB0byBsaXZl
IGF0IGEgZGlmZmVyZW50IGxvY2F0aW9uLCB5b3UgbmVlZAotICAvLyB0byB0dXJuIG9mZiB8YXV0
b0xvYWRNb2pvbURlcHN8IGJlZm9yZSBsb2FkaW5nIGZvby5tb2pvbS5qcywgYW5kIG1hbnVhbGx5
Ci0gIC8vIGxvYWQgYmFyLm1vam9tLmpzIHlvdXJzZWxmLiBTaW1pbGFybHksIHlvdSBuZWVkIHRv
IHR1cm4gb2ZmIHRoZSBvcHRpb24gaWYKLSAgLy8geW91IG1lcmdlIGJhci5tb2pvbS5qcyBhbmQg
Zm9vLm1vam9tLmpzIGludG8gYSBzaW5nbGUgZmlsZS4KLSAgLy8KLSAgLy8gUGVyZm9ybWFuY2Ug
dGlwOiBBdm9pZCBsb2FkaW5nIHRoZSBzYW1lIG1vam9tLmpzIGZpbGUgbXVsdGlwbGUgdGltZXMu
Ci0gIC8vIEFzc3VtZSB0aGF0IHxhdXRvTG9hZE1vam9tRGVwc3wgaXMgc2V0IHRvIHRydWUsCi0g
IC8vCi0gIC8vIDwhLS0KLSAgLy8gKFRoaXMgY29tbWVudCB0YWcgaXMgbmVjZXNzYXJ5IG9uIElP
UyB0byBhdm9pZCBpbnRlcnByZXRpbmcgdGhlIGNsb3NpbmcKLSAgLy8gc2NyaXB0IHRhZ3MgaW4g
dGhlIGV4YW1wbGUuKQotICAvLwotICAvLyBObyBkdXBsaWNhdGUgbG9hZGluZzsgcmVjb21tZW5k
ZWQ6Ci0gIC8vIDxzY3JpcHQgc3JjPSJodHRwOi8vZXhhbXBsZS5vcmcvc2NyaXB0cy9iL2MvZm9v
Lm1vam9tLmpzIj48L3NjcmlwdD4KLSAgLy8KLSAgLy8gTm8gZHVwbGljYXRlIGxvYWRpbmcsIGFs
dGhvdWdoIHVubmVjZXNzYXJ5OgotICAvLyA8c2NyaXB0IHNyYz0iaHR0cDovL2V4YW1wbGUub3Jn
L3NjcmlwdHMvYi9kL2Jhci5tb2pvbS5qcyI+PC9zY3JpcHQ+Ci0gIC8vIDxzY3JpcHQgc3JjPSJo
dHRwOi8vZXhhbXBsZS5vcmcvc2NyaXB0cy9iL2MvZm9vLm1vam9tLmpzIj48L3NjcmlwdD4KLSAg
Ly8KLSAgLy8gTG9hZCBiYXIubW9qb20uanMgdHdpY2U7IHNob3VsZCBiZSBhdm9pZGVkOgotICAv
LyA8c2NyaXB0IHNyYz0iaHR0cDovL2V4YW1wbGUub3JnL3NjcmlwdHMvYi9jL2Zvby5tb2pvbS5q
cyI+PC9zY3JpcHQ+Ci0gIC8vIDxzY3JpcHQgc3JjPSJodHRwOi8vZXhhbXBsZS5vcmcvc2NyaXB0
cy9iL2QvYmFyLm1vam9tLmpzIj48L3NjcmlwdD4KLSAgLy8KLSAgLy8gLS0+Ci0gIG1vam8uY29u
ZmlnLmF1dG9Mb2FkTW9qb21EZXBzID0gdHJ1ZTsKLX0KLQotKGZ1bmN0aW9uKCkgewotICB2YXIg
aW50ZXJuYWwgPSBtb2pvLmludGVybmFsOwotICB2YXIgY29uZmlnID0gbW9qby5jb25maWc7Ci0K
LSAgdmFyIExvYWRTdGF0ZSA9IHsKLSAgICBQRU5ESU5HX0xPQUQ6IDEsCi0gICAgTE9BREVEOiAy
Ci0gIH07Ci0KLSAgdmFyIG1vam9tUmVnaXN0cnkgPSBuZXcgTWFwKCk7Ci0KLSAgZnVuY3Rpb24g
ZXhwb3NlTmFtZXNwYWNlKG5hbWVzcGFjZSkgewotICAgIHZhciBjdXJyZW50ID0gY29uZmlnLmds
b2JhbDsKLSAgICB2YXIgcGFydHMgPSBuYW1lc3BhY2Uuc3BsaXQoJy4nKTsKLQotICAgIGZvciAo
dmFyIHBhcnQ7IHBhcnRzLmxlbmd0aCAmJiAocGFydCA9IHBhcnRzLnNoaWZ0KCkpOykgewotICAg
ICAgaWYgKCFjdXJyZW50W3BhcnRdKSB7Ci0gICAgICAgIGN1cnJlbnRbcGFydF0gPSB7fTsKLSAg
ICAgIH0KLSAgICAgIGN1cnJlbnQgPSBjdXJyZW50W3BhcnRdOwotICAgIH0KLQotICAgIHJldHVy
biBjdXJyZW50OwotICB9Ci0KLSAgZnVuY3Rpb24gaXNNb2pvbVBlbmRpbmdMb2FkKGlkKSB7Ci0g
ICAgcmV0dXJuIG1vam9tUmVnaXN0cnkuZ2V0KGlkKSA9PT0gTG9hZFN0YXRlLlBFTkRJTkdfTE9B
RDsKLSAgfQotCi0gIGZ1bmN0aW9uIGlzTW9qb21Mb2FkZWQoaWQpIHsKLSAgICByZXR1cm4gbW9q
b21SZWdpc3RyeS5nZXQoaWQpID09PSBMb2FkU3RhdGUuTE9BREVEOwotICB9Ci0KLSAgZnVuY3Rp
b24gbWFya01vam9tUGVuZGluZ0xvYWQoaWQpIHsKLSAgICBpZiAoaXNNb2pvbUxvYWRlZChpZCkp
IHsKLSAgICAgIHRocm93IG5ldyBFcnJvcignVGhlIGZvbGxvd2luZyBtb2pvbSBmaWxlIGhhcyBi
ZWVuIGxvYWRlZDogJyArIGlkKTsKLSAgICB9Ci0KLSAgICBtb2pvbVJlZ2lzdHJ5LnNldChpZCwg
TG9hZFN0YXRlLlBFTkRJTkdfTE9BRCk7Ci0gIH0KLQotICBmdW5jdGlvbiBtYXJrTW9qb21Mb2Fk
ZWQoaWQpIHsKLSAgICBtb2pvbVJlZ2lzdHJ5LnNldChpZCwgTG9hZFN0YXRlLkxPQURFRCk7Ci0g
IH0KLQotICBmdW5jdGlvbiBsb2FkTW9qb21JZk5lY2Vzc2FyeShpZCwgcmVsYXRpdmVQYXRoKSB7
Ci0gICAgaWYgKG1vam9tUmVnaXN0cnkuaGFzKGlkKSkgewotICAgICAgcmV0dXJuOwotICAgIH0K
LQotICAgIGlmIChjb25maWcuZ2xvYmFsLmRvY3VtZW50ID09PSB1bmRlZmluZWQpIHsKLSAgICAg
IHRocm93IG5ldyBFcnJvcigKLSAgICAgICAgICAnTW9qb20gZGVwZW5kZW5jeSBhdXRvbG9hZGlu
ZyBpcyBub3QgaW1wbGVtZW50ZWQgaW4gd29ya2Vycy4gJyArCi0gICAgICAgICAgJ1BsZWFzZSBz
ZWUgY29uZmlnIHZhcmlhYmxlIG1vam8uY29uZmlnLmF1dG9Mb2FkTW9qb21EZXBzIGZvciBtb3Jl
ICcgKwotICAgICAgICAgICdkZXRhaWxzLicpOwotICAgIH0KLQotICAgIG1hcmtNb2pvbVBlbmRp
bmdMb2FkKGlkKTsKLSAgICB2YXIgdXJsID0gbmV3IFVSTChyZWxhdGl2ZVBhdGgsIGRvY3VtZW50
LmN1cnJlbnRTY3JpcHQuc3JjKS5ocmVmOwotICAgIGNvbmZpZy5nbG9iYWwuZG9jdW1lbnQud3Jp
dGUoJzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9IicgKwotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdXJsICsgJyI+PCcgKyAnL3NjcmlwdD4nKTsKLSAgfQotCi0g
IGludGVybmFsLmV4cG9zZU5hbWVzcGFjZSA9IGV4cG9zZU5hbWVzcGFjZTsKLSAgaW50ZXJuYWwu
aXNNb2pvbVBlbmRpbmdMb2FkID0gaXNNb2pvbVBlbmRpbmdMb2FkOwotICBpbnRlcm5hbC5pc01v
am9tTG9hZGVkID0gaXNNb2pvbUxvYWRlZDsKLSAgaW50ZXJuYWwubWFya01vam9tUGVuZGluZ0xv
YWQgPSBtYXJrTW9qb21QZW5kaW5nTG9hZDsKLSAgaW50ZXJuYWwubWFya01vam9tTG9hZGVkID0g
bWFya01vam9tTG9hZGVkOwotICBpbnRlcm5hbC5sb2FkTW9qb21JZk5lY2Vzc2FyeSA9IGxvYWRN
b2pvbUlmTmVjZXNzYXJ5OwotfSkoKTsKLS8vIENvcHlyaWdodCAyMDE3IFRoZSBDaHJvbWl1bSBB
dXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUg
aXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQg
aW4gdGhlIExJQ0VOU0UgZmlsZS4KLQotKGZ1bmN0aW9uKCkgewotICB2YXIgaW50ZXJuYWwgPSBt
b2pvLmludGVybmFsOwotCi0gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0gIC8vIHxvdXRwdXR8
IGNvdWxkIGJlIGFuIGludGVyZmFjZSBwb2ludGVyLCBJbnRlcmZhY2VQdHJJbmZvIG9yCi0gIC8v
IEFzc29jaWF0ZWRJbnRlcmZhY2VQdHJJbmZvLgotICBmdW5jdGlvbiBtYWtlUmVxdWVzdChvdXRw
dXQpIHsKLSAgICBpZiAob3V0cHV0IGluc3RhbmNlb2YgbW9qby5Bc3NvY2lhdGVkSW50ZXJmYWNl
UHRySW5mbykgewotICAgICAgdmFyIHtoYW5kbGUwLCBoYW5kbGUxfSA9IGludGVybmFsLmNyZWF0
ZVBhaXJQZW5kaW5nQXNzb2NpYXRpb24oKTsKLSAgICAgIG91dHB1dC5pbnRlcmZhY2VFbmRwb2lu
dEhhbmRsZSA9IGhhbmRsZTA7Ci0gICAgICBvdXRwdXQudmVyc2lvbiA9IDA7Ci0KLSAgICAgIHJl
dHVybiBuZXcgbW9qby5Bc3NvY2lhdGVkSW50ZXJmYWNlUmVxdWVzdChoYW5kbGUxKTsKLSAgICB9
Ci0KLSAgICBpZiAob3V0cHV0IGluc3RhbmNlb2YgbW9qby5JbnRlcmZhY2VQdHJJbmZvKSB7Ci0g
ICAgICB2YXIgcGlwZSA9IE1vam8uY3JlYXRlTWVzc2FnZVBpcGUoKTsKLSAgICAgIG91dHB1dC5o
YW5kbGUgPSBwaXBlLmhhbmRsZTA7Ci0gICAgICBvdXRwdXQudmVyc2lvbiA9IDA7Ci0KLSAgICAg
IHJldHVybiBuZXcgbW9qby5JbnRlcmZhY2VSZXF1ZXN0KHBpcGUuaGFuZGxlMSk7Ci0gICAgfQot
Ci0gICAgdmFyIHBpcGUgPSBNb2pvLmNyZWF0ZU1lc3NhZ2VQaXBlKCk7Ci0gICAgb3V0cHV0LnB0
ci5iaW5kKG5ldyBtb2pvLkludGVyZmFjZVB0ckluZm8ocGlwZS5oYW5kbGUwLCAwKSk7Ci0gICAg
cmV0dXJuIG5ldyBtb2pvLkludGVyZmFjZVJlcXVlc3QocGlwZS5oYW5kbGUxKTsKLSAgfQotCi0g
IC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0gIC8vIE9wZXJhdGlvbnMgdXNlZCB0byBzZXR1cC9j
b25maWd1cmUgYW4gaW50ZXJmYWNlIHBvaW50ZXIuIEV4cG9zZWQgYXMgdGhlCi0gIC8vIHxwdHJ8
IGZpZWxkIG9mIGdlbmVyYXRlZCBpbnRlcmZhY2UgcG9pbnRlciBjbGFzc2VzLgotICAvLyB8cHRy
SW5mb09ySGFuZGxlfCBjb3VsZCBiZSBvbWl0dGVkIGFuZCBwYXNzZWQgaW50byBiaW5kKCkgbGF0
ZXIuCi0gIGZ1bmN0aW9uIEludGVyZmFjZVB0ckNvbnRyb2xsZXIoaW50ZXJmYWNlVHlwZSwgcHRy
SW5mb09ySGFuZGxlKSB7Ci0gICAgdGhpcy52ZXJzaW9uID0gMDsKLQotICAgIHRoaXMuaW50ZXJm
YWNlVHlwZV8gPSBpbnRlcmZhY2VUeXBlOwotICAgIHRoaXMucm91dGVyXyA9IG51bGw7Ci0gICAg
dGhpcy5pbnRlcmZhY2VFbmRwb2ludENsaWVudF8gPSBudWxsOwotICAgIHRoaXMucHJveHlfID0g
bnVsbDsKLQotICAgIC8vIHxyb3V0ZXJffCBhbmQgfGludGVyZmFjZUVuZHBvaW50Q2xpZW50X3wg
YXJlIGxhemlseSBpbml0aWFsaXplZC4KLSAgICAvLyB8aGFuZGxlX3wgaXMgdmFsaWQgYmV0d2Vl
biBiaW5kKCkgYW5kCi0gICAgLy8gdGhlIGluaXRpYWxpemF0aW9uIG9mIHxyb3V0ZXJffCBhbmQg
fGludGVyZmFjZUVuZHBvaW50Q2xpZW50X3wuCi0gICAgdGhpcy5oYW5kbGVfID0gbnVsbDsKLQot
ICAgIGlmIChwdHJJbmZvT3JIYW5kbGUpCi0gICAgICB0aGlzLmJpbmQocHRySW5mb09ySGFuZGxl
KTsKLSAgfQotCi0gIEludGVyZmFjZVB0ckNvbnRyb2xsZXIucHJvdG90eXBlLmJpbmQgPSBmdW5j
dGlvbihwdHJJbmZvT3JIYW5kbGUpIHsKLSAgICB0aGlzLnJlc2V0KCk7Ci0KLSAgICBpZiAocHRy
SW5mb09ySGFuZGxlIGluc3RhbmNlb2YgbW9qby5JbnRlcmZhY2VQdHJJbmZvKSB7Ci0gICAgICB0
aGlzLnZlcnNpb24gPSBwdHJJbmZvT3JIYW5kbGUudmVyc2lvbjsKLSAgICAgIHRoaXMuaGFuZGxl
XyA9IHB0ckluZm9PckhhbmRsZS5oYW5kbGU7Ci0gICAgfSBlbHNlIHsKLSAgICAgIHRoaXMuaGFu
ZGxlXyA9IHB0ckluZm9PckhhbmRsZTsKLSAgICB9Ci0gIH07Ci0KLSAgSW50ZXJmYWNlUHRyQ29u
dHJvbGxlci5wcm90b3R5cGUuaXNCb3VuZCA9IGZ1bmN0aW9uKCkgewotICAgIHJldHVybiB0aGlz
LmludGVyZmFjZUVuZHBvaW50Q2xpZW50XyAhPT0gbnVsbCB8fCB0aGlzLmhhbmRsZV8gIT09IG51
bGw7Ci0gIH07Ci0KLSAgLy8gQWx0aG91Z2ggdXNlcnMgY291bGQganVzdCBkaXNjYXJkIHRoZSBv
YmplY3QsIHJlc2V0KCkgY2xvc2VzIHRoZSBwaXBlCi0gIC8vIGltbWVkaWF0ZWx5LgotICBJbnRl
cmZhY2VQdHJDb250cm9sbGVyLnByb3RvdHlwZS5yZXNldCA9IGZ1bmN0aW9uKCkgewotICAgIHRo
aXMudmVyc2lvbiA9IDA7Ci0gICAgaWYgKHRoaXMuaW50ZXJmYWNlRW5kcG9pbnRDbGllbnRfKSB7
Ci0gICAgICB0aGlzLmludGVyZmFjZUVuZHBvaW50Q2xpZW50Xy5jbG9zZSgpOwotICAgICAgdGhp
cy5pbnRlcmZhY2VFbmRwb2ludENsaWVudF8gPSBudWxsOwotICAgIH0KLSAgICBpZiAodGhpcy5y
b3V0ZXJfKSB7Ci0gICAgICB0aGlzLnJvdXRlcl8uY2xvc2UoKTsKLSAgICAgIHRoaXMucm91dGVy
XyA9IG51bGw7Ci0KLSAgICAgIHRoaXMucHJveHlfID0gbnVsbDsKLSAgICB9Ci0gICAgaWYgKHRo
aXMuaGFuZGxlXykgewotICAgICAgdGhpcy5oYW5kbGVfLmNsb3NlKCk7Ci0gICAgICB0aGlzLmhh
bmRsZV8gPSBudWxsOwotICAgIH0KLSAgfTsKLQotICBJbnRlcmZhY2VQdHJDb250cm9sbGVyLnBy
b3RvdHlwZS5yZXNldFdpdGhSZWFzb24gPSBmdW5jdGlvbihyZWFzb24pIHsKLSAgICBpZiAodGhp
cy5pc0JvdW5kKCkpIHsKLSAgICAgIHRoaXMuY29uZmlndXJlUHJveHlJZk5lY2Vzc2FyeV8oKTsK
LSAgICAgIHRoaXMuaW50ZXJmYWNlRW5kcG9pbnRDbGllbnRfLmNsb3NlKHJlYXNvbik7Ci0gICAg
ICB0aGlzLmludGVyZmFjZUVuZHBvaW50Q2xpZW50XyA9IG51bGw7Ci0gICAgfQotICAgIHRoaXMu
cmVzZXQoKTsKLSAgfTsKLQotICBJbnRlcmZhY2VQdHJDb250cm9sbGVyLnByb3RvdHlwZS5zZXRD
b25uZWN0aW9uRXJyb3JIYW5kbGVyID0gZnVuY3Rpb24oCi0gICAgICBjYWxsYmFjaykgewotICAg
IGlmICghdGhpcy5pc0JvdW5kKCkpCi0gICAgICB0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBzZXQg
Y29ubmVjdGlvbiBlcnJvciBoYW5kbGVyIGlmIG5vdCBib3VuZC4iKTsKLQotICAgIHRoaXMuY29u
ZmlndXJlUHJveHlJZk5lY2Vzc2FyeV8oKTsKLSAgICB0aGlzLmludGVyZmFjZUVuZHBvaW50Q2xp
ZW50Xy5zZXRDb25uZWN0aW9uRXJyb3JIYW5kbGVyKGNhbGxiYWNrKTsKLSAgfTsKLQotICBJbnRl
cmZhY2VQdHJDb250cm9sbGVyLnByb3RvdHlwZS5wYXNzSW50ZXJmYWNlID0gZnVuY3Rpb24oKSB7
Ci0gICAgdmFyIHJlc3VsdDsKLSAgICBpZiAodGhpcy5yb3V0ZXJfKSB7Ci0gICAgICAvLyBUT0RP
KHl6c2hlbik6IEZpeCBSb3V0ZXIgaW50ZXJmYWNlIHRvIHN1cHBvcnQgZXh0cmFjdGluZyBoYW5k
bGUuCi0gICAgICByZXN1bHQgPSBuZXcgbW9qby5JbnRlcmZhY2VQdHJJbmZvKAotICAgICAgICAg
IHRoaXMucm91dGVyXy5jb25uZWN0b3JfLmhhbmRsZV8sIHRoaXMudmVyc2lvbik7Ci0gICAgICB0
aGlzLnJvdXRlcl8uY29ubmVjdG9yXy5oYW5kbGVfID0gbnVsbDsKLSAgICB9IGVsc2UgewotICAg
ICAgLy8gVGhpcyBhbHNvIGhhbmRsZXMgdGhlIGNhc2Ugd2hlbiB0aGlzIG9iamVjdCBpcyBub3Qg
Ym91bmQuCi0gICAgICByZXN1bHQgPSBuZXcgbW9qby5JbnRlcmZhY2VQdHJJbmZvKHRoaXMuaGFu
ZGxlXywgdGhpcy52ZXJzaW9uKTsKLSAgICAgIHRoaXMuaGFuZGxlXyA9IG51bGw7Ci0gICAgfQot
Ci0gICAgdGhpcy5yZXNldCgpOwotICAgIHJldHVybiByZXN1bHQ7Ci0gIH07Ci0KLSAgSW50ZXJm
YWNlUHRyQ29udHJvbGxlci5wcm90b3R5cGUuZ2V0UHJveHkgPSBmdW5jdGlvbigpIHsKLSAgICB0
aGlzLmNvbmZpZ3VyZVByb3h5SWZOZWNlc3NhcnlfKCk7Ci0gICAgcmV0dXJuIHRoaXMucHJveHlf
OwotICB9OwotCi0gIEludGVyZmFjZVB0ckNvbnRyb2xsZXIucHJvdG90eXBlLmNvbmZpZ3VyZVBy
b3h5SWZOZWNlc3NhcnlfID0gZnVuY3Rpb24oKSB7Ci0gICAgaWYgKCF0aGlzLmhhbmRsZV8pCi0g
ICAgICByZXR1cm47Ci0KLSAgICB0aGlzLnJvdXRlcl8gPSBuZXcgaW50ZXJuYWwuUm91dGVyKHRo
aXMuaGFuZGxlXywgdHJ1ZSk7Ci0gICAgdGhpcy5oYW5kbGVfID0gbnVsbDsKLQotICAgIHRoaXMu
aW50ZXJmYWNlRW5kcG9pbnRDbGllbnRfID0gbmV3IGludGVybmFsLkludGVyZmFjZUVuZHBvaW50
Q2xpZW50KAotICAgICAgICB0aGlzLnJvdXRlcl8uY3JlYXRlTG9jYWxFbmRwb2ludEhhbmRsZShp
bnRlcm5hbC5rTWFzdGVySW50ZXJmYWNlSWQpKTsKLQotICAgIHRoaXMuaW50ZXJmYWNlRW5kcG9p
bnRDbGllbnRfIC5zZXRQYXlsb2FkVmFsaWRhdG9ycyhbCi0gICAgICAgIHRoaXMuaW50ZXJmYWNl
VHlwZV8udmFsaWRhdGVSZXNwb25zZV0pOwotICAgIHRoaXMucHJveHlfID0gbmV3IHRoaXMuaW50
ZXJmYWNlVHlwZV8ucHJveHlDbGFzcygKLSAgICAgICAgdGhpcy5pbnRlcmZhY2VFbmRwb2ludENs
aWVudF8pOwotICB9OwotCi0gIEludGVyZmFjZVB0ckNvbnRyb2xsZXIucHJvdG90eXBlLnF1ZXJ5
VmVyc2lvbiA9IGZ1bmN0aW9uKCkgewotICAgIGZ1bmN0aW9uIG9uUXVlcnlWZXJzaW9uKHZlcnNp
b24pIHsKLSAgICAgIHRoaXMudmVyc2lvbiA9IHZlcnNpb247Ci0gICAgICByZXR1cm4gdmVyc2lv
bjsKLSAgICB9Ci0KLSAgICB0aGlzLmNvbmZpZ3VyZVByb3h5SWZOZWNlc3NhcnlfKCk7Ci0gICAg
cmV0dXJuIHRoaXMuaW50ZXJmYWNlRW5kcG9pbnRDbGllbnRfLnF1ZXJ5VmVyc2lvbigpLnRoZW4o
Ci0gICAgICBvblF1ZXJ5VmVyc2lvbi5iaW5kKHRoaXMpKTsKLSAgfTsKLQotICBJbnRlcmZhY2VQ
dHJDb250cm9sbGVyLnByb3RvdHlwZS5yZXF1aXJlVmVyc2lvbiA9IGZ1bmN0aW9uKHZlcnNpb24p
IHsKLSAgICB0aGlzLmNvbmZpZ3VyZVByb3h5SWZOZWNlc3NhcnlfKCk7Ci0KLSAgICBpZiAodGhp
cy52ZXJzaW9uID49IHZlcnNpb24pIHsKLSAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgdGhpcy52
ZXJzaW9uID0gdmVyc2lvbjsKLSAgICB0aGlzLmludGVyZmFjZUVuZHBvaW50Q2xpZW50Xy5yZXF1
aXJlVmVyc2lvbih2ZXJzaW9uKTsKLSAgfTsKLQotICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQot
ICAvLyB8cmVxdWVzdHwgY291bGQgYmUgb21pdHRlZCBhbmQgcGFzc2VkIGludG8gYmluZCgpIGxh
dGVyLgotICAvLwotICAvLyBFeGFtcGxlOgotICAvLwotICAvLyAgICAvLyBGb29JbXBsIGltcGxl
bWVudHMgbW9qb20uRm9vLgotICAvLyAgICBmdW5jdGlvbiBGb29JbXBsKCkgeyAuLi4gfQotICAv
LyAgICBGb29JbXBsLnByb3RvdHlwZS5mb29NZXRob2QxID0gZnVuY3Rpb24oKSB7IC4uLiB9Ci0g
IC8vICAgIEZvb0ltcGwucHJvdG90eXBlLmZvb01ldGhvZDIgPSBmdW5jdGlvbigpIHsgLi4uIH0K
LSAgLy8KLSAgLy8gICAgdmFyIGZvb1B0ciA9IG5ldyBtb2pvbS5Gb29QdHIoKTsKLSAgLy8gICAg
dmFyIHJlcXVlc3QgPSBtYWtlUmVxdWVzdChmb29QdHIpOwotICAvLyAgICB2YXIgYmluZGluZyA9
IG5ldyBCaW5kaW5nKG1vam9tLkZvbywgbmV3IEZvb0ltcGwoKSwgcmVxdWVzdCk7Ci0gIC8vICAg
IGZvb1B0ci5mb29NZXRob2QxKCk7Ci0gIGZ1bmN0aW9uIEJpbmRpbmcoaW50ZXJmYWNlVHlwZSwg
aW1wbCwgcmVxdWVzdE9ySGFuZGxlKSB7Ci0gICAgdGhpcy5pbnRlcmZhY2VUeXBlXyA9IGludGVy
ZmFjZVR5cGU7Ci0gICAgdGhpcy5pbXBsXyA9IGltcGw7Ci0gICAgdGhpcy5yb3V0ZXJfID0gbnVs
bDsKLSAgICB0aGlzLmludGVyZmFjZUVuZHBvaW50Q2xpZW50XyA9IG51bGw7Ci0gICAgdGhpcy5z
dHViXyA9IG51bGw7Ci0KLSAgICBpZiAocmVxdWVzdE9ySGFuZGxlKQotICAgICAgdGhpcy5iaW5k
KHJlcXVlc3RPckhhbmRsZSk7Ci0gIH0KLQotICBCaW5kaW5nLnByb3RvdHlwZS5pc0JvdW5kID0g
ZnVuY3Rpb24oKSB7Ci0gICAgcmV0dXJuIHRoaXMucm91dGVyXyAhPT0gbnVsbDsKLSAgfTsKLQot
ICBCaW5kaW5nLnByb3RvdHlwZS5jcmVhdGVJbnRlcmZhY2VQdHJBbmRCaW5kID0gZnVuY3Rpb24o
KSB7Ci0gICAgdmFyIHB0ciA9IG5ldyB0aGlzLmludGVyZmFjZVR5cGVfLnB0ckNsYXNzKCk7Ci0g
ICAgLy8gVE9ETyh5enNoZW4pOiBTZXQgdGhlIHZlcnNpb24gb2YgdGhlIGludGVyZmFjZSBwb2lu
dGVyLgotICAgIHRoaXMuYmluZChtYWtlUmVxdWVzdChwdHIpKTsKLSAgICByZXR1cm4gcHRyOwot
ICB9OwotCi0gIEJpbmRpbmcucHJvdG90eXBlLmJpbmQgPSBmdW5jdGlvbihyZXF1ZXN0T3JIYW5k
bGUpIHsKLSAgICB0aGlzLmNsb3NlKCk7Ci0KLSAgICB2YXIgaGFuZGxlID0gcmVxdWVzdE9ySGFu
ZGxlIGluc3RhbmNlb2YgbW9qby5JbnRlcmZhY2VSZXF1ZXN0ID8KLSAgICAgICAgcmVxdWVzdE9y
SGFuZGxlLmhhbmRsZSA6IHJlcXVlc3RPckhhbmRsZTsKLSAgICBpZiAoIShoYW5kbGUgaW5zdGFu
Y2VvZiBNb2pvSGFuZGxlKSkKLSAgICAgIHJldHVybjsKLQotICAgIHRoaXMucm91dGVyXyA9IG5l
dyBpbnRlcm5hbC5Sb3V0ZXIoaGFuZGxlKTsKLQotICAgIHRoaXMuc3R1Yl8gPSBuZXcgdGhpcy5p
bnRlcmZhY2VUeXBlXy5zdHViQ2xhc3ModGhpcy5pbXBsXyk7Ci0gICAgdGhpcy5pbnRlcmZhY2VF
bmRwb2ludENsaWVudF8gPSBuZXcgaW50ZXJuYWwuSW50ZXJmYWNlRW5kcG9pbnRDbGllbnQoCi0g
ICAgICAgIHRoaXMucm91dGVyXy5jcmVhdGVMb2NhbEVuZHBvaW50SGFuZGxlKGludGVybmFsLmtN
YXN0ZXJJbnRlcmZhY2VJZCksCi0gICAgICAgIHRoaXMuc3R1Yl8sIHRoaXMuaW50ZXJmYWNlVHlw
ZV8ua1ZlcnNpb24pOwotCi0gICAgdGhpcy5pbnRlcmZhY2VFbmRwb2ludENsaWVudF8gLnNldFBh
eWxvYWRWYWxpZGF0b3JzKFsKLSAgICAgICAgdGhpcy5pbnRlcmZhY2VUeXBlXy52YWxpZGF0ZVJl
cXVlc3RdKTsKLSAgfTsKLQotICBCaW5kaW5nLnByb3RvdHlwZS5jbG9zZSA9IGZ1bmN0aW9uKCkg
ewotICAgIGlmICghdGhpcy5pc0JvdW5kKCkpCi0gICAgICByZXR1cm47Ci0KLSAgICBpZiAodGhp
cy5pbnRlcmZhY2VFbmRwb2ludENsaWVudF8pIHsKLSAgICAgIHRoaXMuaW50ZXJmYWNlRW5kcG9p
bnRDbGllbnRfLmNsb3NlKCk7Ci0gICAgICB0aGlzLmludGVyZmFjZUVuZHBvaW50Q2xpZW50XyA9
IG51bGw7Ci0gICAgfQotCi0gICAgdGhpcy5yb3V0ZXJfLmNsb3NlKCk7Ci0gICAgdGhpcy5yb3V0
ZXJfID0gbnVsbDsKLSAgICB0aGlzLnN0dWJfID0gbnVsbDsKLSAgfTsKLQotICBCaW5kaW5nLnBy
b3RvdHlwZS5jbG9zZVdpdGhSZWFzb24gPSBmdW5jdGlvbihyZWFzb24pIHsKLSAgICBpZiAodGhp
cy5pbnRlcmZhY2VFbmRwb2ludENsaWVudF8pIHsKLSAgICAgIHRoaXMuaW50ZXJmYWNlRW5kcG9p
bnRDbGllbnRfLmNsb3NlKHJlYXNvbik7Ci0gICAgICB0aGlzLmludGVyZmFjZUVuZHBvaW50Q2xp
ZW50XyA9IG51bGw7Ci0gICAgfQotICAgIHRoaXMuY2xvc2UoKTsKLSAgfTsKLQotICBCaW5kaW5n
LnByb3RvdHlwZS5zZXRDb25uZWN0aW9uRXJyb3JIYW5kbGVyID0gZnVuY3Rpb24oY2FsbGJhY2sp
IHsKLSAgICBpZiAoIXRoaXMuaXNCb3VuZCgpKSB7Ci0gICAgICB0aHJvdyBuZXcgRXJyb3IoIkNh
bm5vdCBzZXQgY29ubmVjdGlvbiBlcnJvciBoYW5kbGVyIGlmIG5vdCBib3VuZC4iKTsKLSAgICB9
Ci0gICAgdGhpcy5pbnRlcmZhY2VFbmRwb2ludENsaWVudF8uc2V0Q29ubmVjdGlvbkVycm9ySGFu
ZGxlcihjYWxsYmFjayk7Ci0gIH07Ci0KLSAgQmluZGluZy5wcm90b3R5cGUudW5iaW5kID0gZnVu
Y3Rpb24oKSB7Ci0gICAgaWYgKCF0aGlzLmlzQm91bmQoKSkKLSAgICAgIHJldHVybiBuZXcgbW9q
by5JbnRlcmZhY2VSZXF1ZXN0KG51bGwpOwotCi0gICAgdmFyIHJlc3VsdCA9IG5ldyBtb2pvLklu
dGVyZmFjZVJlcXVlc3QodGhpcy5yb3V0ZXJfLmNvbm5lY3Rvcl8uaGFuZGxlXyk7Ci0gICAgdGhp
cy5yb3V0ZXJfLmNvbm5lY3Rvcl8uaGFuZGxlXyA9IG51bGw7Ci0gICAgdGhpcy5jbG9zZSgpOwot
ICAgIHJldHVybiByZXN1bHQ7Ci0gIH07Ci0KLSAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLSAg
ZnVuY3Rpb24gQmluZGluZ1NldEVudHJ5KGJpbmRpbmdTZXQsIGludGVyZmFjZVR5cGUsIGJpbmRp
bmdUeXBlLCBpbXBsLAotICAgICAgcmVxdWVzdE9ySGFuZGxlLCBiaW5kaW5nSWQpIHsKLSAgICB0
aGlzLmJpbmRpbmdTZXRfID0gYmluZGluZ1NldDsKLSAgICB0aGlzLmJpbmRpbmdJZF8gPSBiaW5k
aW5nSWQ7Ci0gICAgdGhpcy5iaW5kaW5nXyA9IG5ldyBiaW5kaW5nVHlwZShpbnRlcmZhY2VUeXBl
LCBpbXBsLAotICAgICAgICByZXF1ZXN0T3JIYW5kbGUpOwotCi0gICAgdGhpcy5iaW5kaW5nXy5z
ZXRDb25uZWN0aW9uRXJyb3JIYW5kbGVyKGZ1bmN0aW9uKHJlYXNvbikgewotICAgICAgdGhpcy5i
aW5kaW5nU2V0Xy5vbkNvbm5lY3Rpb25FcnJvcihiaW5kaW5nSWQsIHJlYXNvbik7Ci0gICAgfS5i
aW5kKHRoaXMpKTsKLSAgfQotCi0gIEJpbmRpbmdTZXRFbnRyeS5wcm90b3R5cGUuY2xvc2UgPSBm
dW5jdGlvbigpIHsKLSAgICB0aGlzLmJpbmRpbmdfLmNsb3NlKCk7Ci0gIH07Ci0KLSAgZnVuY3Rp
b24gQmluZGluZ1NldChpbnRlcmZhY2VUeXBlKSB7Ci0gICAgdGhpcy5pbnRlcmZhY2VUeXBlXyA9
IGludGVyZmFjZVR5cGU7Ci0gICAgdGhpcy5uZXh0QmluZGluZ0lkXyA9IDA7Ci0gICAgdGhpcy5i
aW5kaW5nc18gPSBuZXcgTWFwKCk7Ci0gICAgdGhpcy5lcnJvckhhbmRsZXJfID0gbnVsbDsKLSAg
ICB0aGlzLmJpbmRpbmdUeXBlXyA9IEJpbmRpbmc7Ci0gIH0KLQotICBCaW5kaW5nU2V0LnByb3Rv
dHlwZS5pc0VtcHR5ID0gZnVuY3Rpb24oKSB7Ci0gICAgcmV0dXJuIHRoaXMuYmluZGluZ3NfLnNp
emUgPT0gMDsKLSAgfTsKLQotICBCaW5kaW5nU2V0LnByb3RvdHlwZS5hZGRCaW5kaW5nID0gZnVu
Y3Rpb24oaW1wbCwgcmVxdWVzdE9ySGFuZGxlKSB7Ci0gICAgdGhpcy5iaW5kaW5nc18uc2V0KAot
ICAgICAgICB0aGlzLm5leHRCaW5kaW5nSWRfLAotICAgICAgICBuZXcgQmluZGluZ1NldEVudHJ5
KHRoaXMsIHRoaXMuaW50ZXJmYWNlVHlwZV8sIHRoaXMuYmluZGluZ1R5cGVfLCBpbXBsLAotICAg
ICAgICAgICAgcmVxdWVzdE9ySGFuZGxlLCB0aGlzLm5leHRCaW5kaW5nSWRfKSk7Ci0gICAgKyt0
aGlzLm5leHRCaW5kaW5nSWRfOwotICB9OwotCi0gIEJpbmRpbmdTZXQucHJvdG90eXBlLmNsb3Nl
QWxsQmluZGluZ3MgPSBmdW5jdGlvbigpIHsKLSAgICBmb3IgKHZhciBlbnRyeSBvZiB0aGlzLmJp
bmRpbmdzXy52YWx1ZXMoKSkKLSAgICAgIGVudHJ5LmNsb3NlKCk7Ci0gICAgdGhpcy5iaW5kaW5n
c18uY2xlYXIoKTsKLSAgfTsKLQotICBCaW5kaW5nU2V0LnByb3RvdHlwZS5zZXRDb25uZWN0aW9u
RXJyb3JIYW5kbGVyID0gZnVuY3Rpb24oY2FsbGJhY2spIHsKLSAgICB0aGlzLmVycm9ySGFuZGxl
cl8gPSBjYWxsYmFjazsKLSAgfTsKLQotICBCaW5kaW5nU2V0LnByb3RvdHlwZS5vbkNvbm5lY3Rp
b25FcnJvciA9IGZ1bmN0aW9uKGJpbmRpbmdJZCwgcmVhc29uKSB7Ci0gICAgdGhpcy5iaW5kaW5n
c18uZGVsZXRlKGJpbmRpbmdJZCk7Ci0KLSAgICBpZiAodGhpcy5lcnJvckhhbmRsZXJfKQotICAg
ICAgdGhpcy5lcnJvckhhbmRsZXJfKHJlYXNvbik7Ci0gIH07Ci0KLSAgLy8gLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tCi0KLSAgLy8gT3BlcmF0aW9ucyB1c2VkIHRvIHNldHVwL2NvbmZpZ3VyZSBhbiBhc3Nv
Y2lhdGVkIGludGVyZmFjZSBwb2ludGVyLgotICAvLyBFeHBvc2VkIGFzIHxwdHJ8IGZpZWxkIG9m
IGdlbmVyYXRlZCBhc3NvY2lhdGVkIGludGVyZmFjZSBwb2ludGVyIGNsYXNzZXMuCi0gIC8vIHxh
c3NvY2lhdGVkUHRySW5mb3wgY291bGQgYmUgb21pdHRlZCBhbmQgcGFzc2VkIGludG8gYmluZCgp
IGxhdGVyLgotICAvLwotICAvLyBFeGFtcGxlOgotICAvLyAgICAvLyBJbnRlZ2VyU2VuZGVySW1w
bCBpbXBsZW1lbnRzIG1vam9tLkludGVnZXJTZW5kZXIKLSAgLy8gICAgZnVuY3Rpb24gSW50ZWdl
clNlbmRlckltcGwoKSB7IC4uLiB9Ci0gIC8vICAgIEludGVnZXJTZW5kZXJJbXBsLnByb3RvdHlw
ZS5lY2hvID0gZnVuY3Rpb24oKSB7IC4uLiB9Ci0gIC8vCi0gIC8vICAgIC8vIEludGVnZXJTZW5k
ZXJDb25uZWN0aW9uSW1wbCBpbXBsZW1lbnRzIG1vam9tLkludGVnZXJTZW5kZXJDb25uZWN0aW9u
Ci0gIC8vICAgIGZ1bmN0aW9uIEludGVnZXJTZW5kZXJDb25uZWN0aW9uSW1wbCgpIHsKLSAgLy8g
ICAgICB0aGlzLnNlbmRlckJpbmRpbmdfID0gbnVsbDsKLSAgLy8gICAgfQotICAvLyAgICBJbnRl
Z2VyU2VuZGVyQ29ubmVjdGlvbkltcGwucHJvdG90eXBlLmdldFNlbmRlciA9IGZ1bmN0aW9uKAot
ICAvLyAgICAgICAgYXNzb2NpYXRlZFJlcXVlc3QpIHsKLSAgLy8gICAgICB0aGlzLnNlbmRlckJp
bmRpbmdfID0gbmV3IEFzc29jaWF0ZWRCaW5kaW5nKG1vam9tLkludGVnZXJTZW5kZXIsCi0gIC8v
ICAgICAgICAgIG5ldyBJbnRlZ2VyU2VuZGVySW1wbCgpLAotICAvLyAgICAgICAgICBhc3NvY2lh
dGVkUmVxdWVzdCk7Ci0gIC8vICAgIH0KLSAgLy8KLSAgLy8gICAgdmFyIGludGVnZXJTZW5kZXJD
b25uZWN0aW9uID0gbmV3IG1vam9tLkludGVnZXJTZW5kZXJDb25uZWN0aW9uUHRyKCk7Ci0gIC8v
ICAgIHZhciBpbnRlZ2VyU2VuZGVyQ29ubmVjdGlvbkJpbmRpbmcgPSBuZXcgQmluZGluZygKLSAg
Ly8gICAgICAgIG1vam9tLkludGVnZXJTZW5kZXJDb25uZWN0aW9uLAotICAvLyAgICAgICAgbmV3
IEludGVnZXJTZW5kZXJDb25uZWN0aW9uSW1wbCgpLAotICAvLyAgICAgICAgbW9qby5tYWtlUmVx
dWVzdChpbnRlZ2VyU2VuZGVyQ29ubmVjdGlvbikpOwotICAvLwotICAvLyAgICAvLyBBIGxvY2Fs
bHktY3JlYXRlZCBhc3NvY2lhdGVkIGludGVyZmFjZSBwb2ludGVyIGNhbiBvbmx5IGJlIHVzZWQg
dG8KLSAgLy8gICAgLy8gbWFrZSBjYWxscyB3aGVuIHRoZSBjb3JyZXNwb25kaW5nIGFzc29jaWF0
ZWQgcmVxdWVzdCBpcyBzZW50IG92ZXIKLSAgLy8gICAgLy8gYW5vdGhlciBpbnRlcmZhY2UgKGVp
dGhlciB0aGUgbWFzdGVyIGludGVyZmFjZSBvciBhbm90aGVyCi0gIC8vICAgIC8vIGFzc29jaWF0
ZWQgaW50ZXJmYWNlKS4KLSAgLy8gICAgdmFyIGFzc29jaWF0ZWRJbnRlcmZhY2VQdHJJbmZvID0g
bmV3IEFzc29jaWF0ZWRJbnRlcmZhY2VQdHJJbmZvKCk7Ci0gIC8vICAgIHZhciBhc3NvY2lhdGVk
UmVxdWVzdCA9IG1ha2VSZXF1ZXN0KGludGVyZmFjZVB0ckluZm8pOwotICAvLwotICAvLyAgICBp
bnRlZ2VyU2VuZGVyQ29ubmVjdGlvbi5nZXRTZW5kZXIoYXNzb2NpYXRlZFJlcXVlc3QpOwotICAv
LwotICAvLyAgICAvLyBDcmVhdGUgYW4gYXNzb2NpYXRlZCBpbnRlcmZhY2UgYW5kIGJpbmQgdGhl
IGFzc29jaWF0ZWQgaGFuZGxlLgotICAvLyAgICB2YXIgaW50ZWdlclNlbmRlciA9IG5ldyBtb2pv
bS5Bc3NvY2lhdGVkSW50ZWdlclNlbmRlclB0cigpOwotICAvLyAgICBpbnRlZ2VyU2VuZGVyLnB0
ci5iaW5kKGFzc29jaWF0ZWRJbnRlcmZhY2VQdHJJbmZvKTsKLSAgLy8gICAgaW50ZWdlclNlbmRl
ci5lY2hvKCk7Ci0KLSAgZnVuY3Rpb24gQXNzb2NpYXRlZEludGVyZmFjZVB0ckNvbnRyb2xsZXIo
aW50ZXJmYWNlVHlwZSwgYXNzb2NpYXRlZFB0ckluZm8pIHsKLSAgICB0aGlzLnZlcnNpb24gPSAw
OwotCi0gICAgdGhpcy5pbnRlcmZhY2VUeXBlXyA9IGludGVyZmFjZVR5cGU7Ci0gICAgdGhpcy5p
bnRlcmZhY2VFbmRwb2ludENsaWVudF8gPSBudWxsOwotICAgIHRoaXMucHJveHlfID0gbnVsbDsK
LQotICAgIGlmIChhc3NvY2lhdGVkUHRySW5mbykgewotICAgICAgdGhpcy5iaW5kKGFzc29jaWF0
ZWRQdHJJbmZvKTsKLSAgICB9Ci0gIH0KLQotICBBc3NvY2lhdGVkSW50ZXJmYWNlUHRyQ29udHJv
bGxlci5wcm90b3R5cGUuYmluZCA9IGZ1bmN0aW9uKAotICAgICAgYXNzb2NpYXRlZFB0ckluZm8p
IHsKLSAgICB0aGlzLnJlc2V0KCk7Ci0gICAgdGhpcy52ZXJzaW9uID0gYXNzb2NpYXRlZFB0cklu
Zm8udmVyc2lvbjsKLQotICAgIHRoaXMuaW50ZXJmYWNlRW5kcG9pbnRDbGllbnRfID0gbmV3IGlu
dGVybmFsLkludGVyZmFjZUVuZHBvaW50Q2xpZW50KAotICAgICAgICBhc3NvY2lhdGVkUHRySW5m
by5pbnRlcmZhY2VFbmRwb2ludEhhbmRsZSk7Ci0KLSAgICB0aGlzLmludGVyZmFjZUVuZHBvaW50
Q2xpZW50XyAuc2V0UGF5bG9hZFZhbGlkYXRvcnMoWwotICAgICAgICB0aGlzLmludGVyZmFjZVR5
cGVfLnZhbGlkYXRlUmVzcG9uc2VdKTsKLSAgICB0aGlzLnByb3h5XyA9IG5ldyB0aGlzLmludGVy
ZmFjZVR5cGVfLnByb3h5Q2xhc3MoCi0gICAgICAgIHRoaXMuaW50ZXJmYWNlRW5kcG9pbnRDbGll
bnRfKTsKLSAgfTsKLQotICBBc3NvY2lhdGVkSW50ZXJmYWNlUHRyQ29udHJvbGxlci5wcm90b3R5
cGUuaXNCb3VuZCA9IGZ1bmN0aW9uKCkgewotICAgIHJldHVybiB0aGlzLmludGVyZmFjZUVuZHBv
aW50Q2xpZW50XyAhPT0gbnVsbDsKLSAgfTsKLQotICBBc3NvY2lhdGVkSW50ZXJmYWNlUHRyQ29u
dHJvbGxlci5wcm90b3R5cGUucmVzZXQgPSBmdW5jdGlvbigpIHsKLSAgICB0aGlzLnZlcnNpb24g
PSAwOwotICAgIGlmICh0aGlzLmludGVyZmFjZUVuZHBvaW50Q2xpZW50XykgewotICAgICAgdGhp
cy5pbnRlcmZhY2VFbmRwb2ludENsaWVudF8uY2xvc2UoKTsKLSAgICAgIHRoaXMuaW50ZXJmYWNl
RW5kcG9pbnRDbGllbnRfID0gbnVsbDsKLSAgICB9Ci0gICAgaWYgKHRoaXMucHJveHlfKSB7Ci0g
ICAgICB0aGlzLnByb3h5XyA9IG51bGw7Ci0gICAgfQotICB9OwotCi0gIEFzc29jaWF0ZWRJbnRl
cmZhY2VQdHJDb250cm9sbGVyLnByb3RvdHlwZS5yZXNldFdpdGhSZWFzb24gPSBmdW5jdGlvbigK
LSAgICAgIHJlYXNvbikgewotICAgIGlmICh0aGlzLmlzQm91bmQoKSkgewotICAgICAgdGhpcy5p
bnRlcmZhY2VFbmRwb2ludENsaWVudF8uY2xvc2UocmVhc29uKTsKLSAgICAgIHRoaXMuaW50ZXJm
YWNlRW5kcG9pbnRDbGllbnRfID0gbnVsbDsKLSAgICB9Ci0gICAgdGhpcy5yZXNldCgpOwotICB9
OwotCi0gIC8vIEluZGljYXRlcyB3aGV0aGVyIGFuIGVycm9yIGhhcyBiZWVuIGVuY291bnRlcmVk
LiBJZiB0cnVlLCBtZXRob2QgY2FsbHMKLSAgLy8gb24gdGhpcyBpbnRlcmZhY2Ugd2lsbCBiZSBk
cm9wcGVkIChhbmQgbWF5IGFscmVhZHkgaGF2ZSBiZWVuIGRyb3BwZWQpLgotICBBc3NvY2lhdGVk
SW50ZXJmYWNlUHRyQ29udHJvbGxlci5wcm90b3R5cGUuZ2V0RW5jb3VudGVyZWRFcnJvciA9IGZ1
bmN0aW9uKCkgewotICAgIHJldHVybiB0aGlzLmludGVyZmFjZUVuZHBvaW50Q2xpZW50XyA/Ci0g
ICAgICAgIHRoaXMuaW50ZXJmYWNlRW5kcG9pbnRDbGllbnRfLmdldEVuY291bnRlcmVkRXJyb3Io
KSA6IGZhbHNlOwotICB9OwotCi0gIEFzc29jaWF0ZWRJbnRlcmZhY2VQdHJDb250cm9sbGVyLnBy
b3RvdHlwZS5zZXRDb25uZWN0aW9uRXJyb3JIYW5kbGVyID0KLSAgICAgIGZ1bmN0aW9uKGNhbGxi
YWNrKSB7Ci0gICAgaWYgKCF0aGlzLmlzQm91bmQoKSkgewotICAgICAgdGhyb3cgbmV3IEVycm9y
KCJDYW5ub3Qgc2V0IGNvbm5lY3Rpb24gZXJyb3IgaGFuZGxlciBpZiBub3QgYm91bmQuIik7Ci0g
ICAgfQotCi0gICAgdGhpcy5pbnRlcmZhY2VFbmRwb2ludENsaWVudF8uc2V0Q29ubmVjdGlvbkVy
cm9ySGFuZGxlcihjYWxsYmFjayk7Ci0gIH07Ci0KLSAgQXNzb2NpYXRlZEludGVyZmFjZVB0ckNv
bnRyb2xsZXIucHJvdG90eXBlLnBhc3NJbnRlcmZhY2UgPSBmdW5jdGlvbigpIHsKLSAgICBpZiAo
IXRoaXMuaXNCb3VuZCgpKSB7Ci0gICAgICByZXR1cm4gbmV3IG1vam8uQXNzb2NpYXRlZEludGVy
ZmFjZVB0ckluZm8obnVsbCk7Ci0gICAgfQotCi0gICAgdmFyIHJlc3VsdCA9IG5ldyBtb2pvLkFz
c29jaWF0ZWRJbnRlcmZhY2VQdHJJbmZvKAotICAgICAgICB0aGlzLmludGVyZmFjZUVuZHBvaW50
Q2xpZW50Xy5wYXNzSGFuZGxlKCksIHRoaXMudmVyc2lvbik7Ci0gICAgdGhpcy5yZXNldCgpOwot
ICAgIHJldHVybiByZXN1bHQ7Ci0gIH07Ci0KLSAgQXNzb2NpYXRlZEludGVyZmFjZVB0ckNvbnRy
b2xsZXIucHJvdG90eXBlLmdldFByb3h5ID0gZnVuY3Rpb24oKSB7Ci0gICAgcmV0dXJuIHRoaXMu
cHJveHlfOwotICB9OwotCi0gIEFzc29jaWF0ZWRJbnRlcmZhY2VQdHJDb250cm9sbGVyLnByb3Rv
dHlwZS5xdWVyeVZlcnNpb24gPSBmdW5jdGlvbigpIHsKLSAgICBmdW5jdGlvbiBvblF1ZXJ5VmVy
c2lvbih2ZXJzaW9uKSB7Ci0gICAgICB0aGlzLnZlcnNpb24gPSB2ZXJzaW9uOwotICAgICAgcmV0
dXJuIHZlcnNpb247Ci0gICAgfQotCi0gICAgcmV0dXJuIHRoaXMuaW50ZXJmYWNlRW5kcG9pbnRD
bGllbnRfLnF1ZXJ5VmVyc2lvbigpLnRoZW4oCi0gICAgICBvblF1ZXJ5VmVyc2lvbi5iaW5kKHRo
aXMpKTsKLSAgfTsKLQotICBBc3NvY2lhdGVkSW50ZXJmYWNlUHRyQ29udHJvbGxlci5wcm90b3R5
cGUucmVxdWlyZVZlcnNpb24gPSBmdW5jdGlvbigKLSAgICAgIHZlcnNpb24pIHsKLSAgICBpZiAo
dGhpcy52ZXJzaW9uID49IHZlcnNpb24pIHsKLSAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgdGhp
cy52ZXJzaW9uID0gdmVyc2lvbjsKLSAgICB0aGlzLmludGVyZmFjZUVuZHBvaW50Q2xpZW50Xy5y
ZXF1aXJlVmVyc2lvbih2ZXJzaW9uKTsKLSAgfTsKLQotICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K
LQotICAvLyB8YXNzb2NpYXRlZEludGVyZmFjZVJlcXVlc3R8IGNvdWxkIGJlIG9taXR0ZWQgYW5k
IHBhc3NlZCBpbnRvIGJpbmQoKQotICAvLyBsYXRlci4KLSAgZnVuY3Rpb24gQXNzb2NpYXRlZEJp
bmRpbmcoaW50ZXJmYWNlVHlwZSwgaW1wbCwgYXNzb2NpYXRlZEludGVyZmFjZVJlcXVlc3QpIHsK
LSAgICB0aGlzLmludGVyZmFjZVR5cGVfID0gaW50ZXJmYWNlVHlwZTsKLSAgICB0aGlzLmltcGxf
ID0gaW1wbDsKLSAgICB0aGlzLmludGVyZmFjZUVuZHBvaW50Q2xpZW50XyA9IG51bGw7Ci0gICAg
dGhpcy5zdHViXyA9IG51bGw7Ci0KLSAgICBpZiAoYXNzb2NpYXRlZEludGVyZmFjZVJlcXVlc3Qp
IHsKLSAgICAgIHRoaXMuYmluZChhc3NvY2lhdGVkSW50ZXJmYWNlUmVxdWVzdCk7Ci0gICAgfQot
ICB9Ci0KLSAgQXNzb2NpYXRlZEJpbmRpbmcucHJvdG90eXBlLmlzQm91bmQgPSBmdW5jdGlvbigp
IHsKLSAgICByZXR1cm4gdGhpcy5pbnRlcmZhY2VFbmRwb2ludENsaWVudF8gIT09IG51bGw7Ci0g
IH07Ci0KLSAgQXNzb2NpYXRlZEJpbmRpbmcucHJvdG90eXBlLmJpbmQgPSBmdW5jdGlvbihhc3Nv
Y2lhdGVkSW50ZXJmYWNlUmVxdWVzdCkgewotICAgIHRoaXMuY2xvc2UoKTsKLQotICAgIHRoaXMu
c3R1Yl8gPSBuZXcgdGhpcy5pbnRlcmZhY2VUeXBlXy5zdHViQ2xhc3ModGhpcy5pbXBsXyk7Ci0g
ICAgdGhpcy5pbnRlcmZhY2VFbmRwb2ludENsaWVudF8gPSBuZXcgaW50ZXJuYWwuSW50ZXJmYWNl
RW5kcG9pbnRDbGllbnQoCi0gICAgICAgIGFzc29jaWF0ZWRJbnRlcmZhY2VSZXF1ZXN0LmludGVy
ZmFjZUVuZHBvaW50SGFuZGxlLCB0aGlzLnN0dWJfLAotICAgICAgICB0aGlzLmludGVyZmFjZVR5
cGVfLmtWZXJzaW9uKTsKLQotICAgIHRoaXMuaW50ZXJmYWNlRW5kcG9pbnRDbGllbnRfIC5zZXRQ
YXlsb2FkVmFsaWRhdG9ycyhbCi0gICAgICAgIHRoaXMuaW50ZXJmYWNlVHlwZV8udmFsaWRhdGVS
ZXF1ZXN0XSk7Ci0gIH07Ci0KLQotICBBc3NvY2lhdGVkQmluZGluZy5wcm90b3R5cGUuY2xvc2Ug
PSBmdW5jdGlvbigpIHsKLSAgICBpZiAoIXRoaXMuaXNCb3VuZCgpKSB7Ci0gICAgICByZXR1cm47
Ci0gICAgfQotCi0gICAgaWYgKHRoaXMuaW50ZXJmYWNlRW5kcG9pbnRDbGllbnRfKSB7Ci0gICAg
ICB0aGlzLmludGVyZmFjZUVuZHBvaW50Q2xpZW50Xy5jbG9zZSgpOwotICAgICAgdGhpcy5pbnRl
cmZhY2VFbmRwb2ludENsaWVudF8gPSBudWxsOwotICAgIH0KLQotICAgIHRoaXMuc3R1Yl8gPSBu
dWxsOwotICB9OwotCi0gIEFzc29jaWF0ZWRCaW5kaW5nLnByb3RvdHlwZS5jbG9zZVdpdGhSZWFz
b24gPSBmdW5jdGlvbihyZWFzb24pIHsKLSAgICBpZiAodGhpcy5pbnRlcmZhY2VFbmRwb2ludENs
aWVudF8pIHsKLSAgICAgIHRoaXMuaW50ZXJmYWNlRW5kcG9pbnRDbGllbnRfLmNsb3NlKHJlYXNv
bik7Ci0gICAgICB0aGlzLmludGVyZmFjZUVuZHBvaW50Q2xpZW50XyA9IG51bGw7Ci0gICAgfQot
ICAgIHRoaXMuY2xvc2UoKTsKLSAgfTsKLQotICBBc3NvY2lhdGVkQmluZGluZy5wcm90b3R5cGUu
c2V0Q29ubmVjdGlvbkVycm9ySGFuZGxlciA9IGZ1bmN0aW9uKGNhbGxiYWNrKSB7Ci0gICAgaWYg
KCF0aGlzLmlzQm91bmQoKSkgewotICAgICAgdGhyb3cgbmV3IEVycm9yKCJDYW5ub3Qgc2V0IGNv
bm5lY3Rpb24gZXJyb3IgaGFuZGxlciBpZiBub3QgYm91bmQuIik7Ci0gICAgfQotICAgIHRoaXMu
aW50ZXJmYWNlRW5kcG9pbnRDbGllbnRfLnNldENvbm5lY3Rpb25FcnJvckhhbmRsZXIoY2FsbGJh
Y2spOwotICB9OwotCi0gIEFzc29jaWF0ZWRCaW5kaW5nLnByb3RvdHlwZS51bmJpbmQgPSBmdW5j
dGlvbigpIHsKLSAgICBpZiAoIXRoaXMuaXNCb3VuZCgpKSB7Ci0gICAgICByZXR1cm4gbmV3IG1v
am8uQXNzb2NpYXRlZEludGVyZmFjZVJlcXVlc3QobnVsbCk7Ci0gICAgfQotCi0gICAgdmFyIHJl
c3VsdCA9IG5ldyBtb2pvLkFzc29jaWF0ZWRJbnRlcmZhY2VSZXF1ZXN0KAotICAgICAgICB0aGlz
LmludGVyZmFjZUVuZHBvaW50Q2xpZW50Xy5wYXNzSGFuZGxlKCkpOwotICAgIHRoaXMuY2xvc2Uo
KTsKLSAgICByZXR1cm4gcmVzdWx0OwotICB9OwotCi0gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQot
Ci0gIGZ1bmN0aW9uIEFzc29jaWF0ZWRCaW5kaW5nU2V0KGludGVyZmFjZVR5cGUpIHsKLSAgICBt
b2pvLkJpbmRpbmdTZXQuY2FsbCh0aGlzLCBpbnRlcmZhY2VUeXBlKTsKLSAgICB0aGlzLmJpbmRp
bmdUeXBlXyA9IEFzc29jaWF0ZWRCaW5kaW5nOwotICB9Ci0KLSAgQXNzb2NpYXRlZEJpbmRpbmdT
ZXQucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShCaW5kaW5nU2V0LnByb3RvdHlwZSk7Ci0gIEFz
c29jaWF0ZWRCaW5kaW5nU2V0LnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEFzc29jaWF0ZWRCaW5k
aW5nU2V0OwotCi0gIG1vam8ubWFrZVJlcXVlc3QgPSBtYWtlUmVxdWVzdDsKLSAgbW9qby5Bc3Nv
Y2lhdGVkSW50ZXJmYWNlUHRyQ29udHJvbGxlciA9IEFzc29jaWF0ZWRJbnRlcmZhY2VQdHJDb250
cm9sbGVyOwotICBtb2pvLkFzc29jaWF0ZWRCaW5kaW5nID0gQXNzb2NpYXRlZEJpbmRpbmc7Ci0g
IG1vam8uQXNzb2NpYXRlZEJpbmRpbmdTZXQgPSBBc3NvY2lhdGVkQmluZGluZ1NldDsKLSAgbW9q
by5CaW5kaW5nID0gQmluZGluZzsKLSAgbW9qby5CaW5kaW5nU2V0ID0gQmluZGluZ1NldDsKLSAg
bW9qby5JbnRlcmZhY2VQdHJDb250cm9sbGVyID0gSW50ZXJmYWNlUHRyQ29udHJvbGxlcjsKLX0p
KCk7Ci0vLyBDb3B5cmlnaHQgMjAxNiBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNE
LXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUu
Ci0KLShmdW5jdGlvbigpIHsKLSAgdmFyIGludGVybmFsID0gbW9qby5pbnRlcm5hbDsKLQotICAv
LyBDb25zdGFudHMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQotICB2YXIga0ludGVyZmFjZUlkTmFtZXNwYWNlTWFzayA9IDB4
ODAwMDAwMDA7Ci0gIHZhciBrTWFzdGVySW50ZXJmYWNlSWQgPSAweDAwMDAwMDAwOwotICB2YXIg
a0ludmFsaWRJbnRlcmZhY2VJZCA9IDB4RkZGRkZGRkY7Ci0KLSAgLy8gLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tCi0KLSAgZnVuY3Rpb24gSW50ZXJmYWNlUHRySW5mbyhoYW5kbGUsIHZlcnNpb24pIHsKLSAg
ICB0aGlzLmhhbmRsZSA9IGhhbmRsZTsKLSAgICB0aGlzLnZlcnNpb24gPSB2ZXJzaW9uOwotICB9
Ci0KLSAgSW50ZXJmYWNlUHRySW5mby5wcm90b3R5cGUuaXNWYWxpZCA9IGZ1bmN0aW9uKCkgewot
ICAgIHJldHVybiB0aGlzLmhhbmRsZSBpbnN0YW5jZW9mIE1vam9IYW5kbGU7Ci0gIH07Ci0KLSAg
SW50ZXJmYWNlUHRySW5mby5wcm90b3R5cGUuY2xvc2UgPSBmdW5jdGlvbigpIHsKLSAgICBpZiAo
IXRoaXMuaXNWYWxpZCgpKQotICAgICAgcmV0dXJuOwotCi0gICAgdGhpcy5oYW5kbGUuY2xvc2Uo
KTsKLSAgICB0aGlzLmhhbmRsZSA9IG51bGw7Ci0gICAgdGhpcy52ZXJzaW9uID0gMDsKLSAgfTsK
LQotICBmdW5jdGlvbiBBc3NvY2lhdGVkSW50ZXJmYWNlUHRySW5mbyhpbnRlcmZhY2VFbmRwb2lu
dEhhbmRsZSwgdmVyc2lvbikgewotICAgIHRoaXMuaW50ZXJmYWNlRW5kcG9pbnRIYW5kbGUgPSBp
bnRlcmZhY2VFbmRwb2ludEhhbmRsZTsKLSAgICB0aGlzLnZlcnNpb24gPSB2ZXJzaW9uOwotICB9
Ci0KLSAgQXNzb2NpYXRlZEludGVyZmFjZVB0ckluZm8ucHJvdG90eXBlLmlzVmFsaWQgPSBmdW5j
dGlvbigpIHsKLSAgICByZXR1cm4gdGhpcy5pbnRlcmZhY2VFbmRwb2ludEhhbmRsZS5pc1ZhbGlk
KCk7Ci0gIH07Ci0KLSAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLSAgZnVuY3Rpb24gSW50ZXJm
YWNlUmVxdWVzdChoYW5kbGUpIHsKLSAgICB0aGlzLmhhbmRsZSA9IGhhbmRsZTsKLSAgfQotCi0g
IEludGVyZmFjZVJlcXVlc3QucHJvdG90eXBlLmlzVmFsaWQgPSBmdW5jdGlvbigpIHsKLSAgICBy
ZXR1cm4gdGhpcy5oYW5kbGUgaW5zdGFuY2VvZiBNb2pvSGFuZGxlOwotICB9OwotCi0gIEludGVy
ZmFjZVJlcXVlc3QucHJvdG90eXBlLmNsb3NlID0gZnVuY3Rpb24oKSB7Ci0gICAgaWYgKCF0aGlz
LmlzVmFsaWQoKSkKLSAgICAgIHJldHVybjsKLQotICAgIHRoaXMuaGFuZGxlLmNsb3NlKCk7Ci0g
ICAgdGhpcy5oYW5kbGUgPSBudWxsOwotICB9OwotCi0gIGZ1bmN0aW9uIEFzc29jaWF0ZWRJbnRl
cmZhY2VSZXF1ZXN0KGludGVyZmFjZUVuZHBvaW50SGFuZGxlKSB7Ci0gICAgdGhpcy5pbnRlcmZh
Y2VFbmRwb2ludEhhbmRsZSA9IGludGVyZmFjZUVuZHBvaW50SGFuZGxlOwotICB9Ci0KLSAgQXNz
b2NpYXRlZEludGVyZmFjZVJlcXVlc3QucHJvdG90eXBlLmlzVmFsaWQgPSBmdW5jdGlvbigpIHsK
LSAgICByZXR1cm4gdGhpcy5pbnRlcmZhY2VFbmRwb2ludEhhbmRsZS5pc1ZhbGlkKCk7Ci0gIH07
Ci0KLSAgQXNzb2NpYXRlZEludGVyZmFjZVJlcXVlc3QucHJvdG90eXBlLnJlc2V0V2l0aFJlYXNv
biA9IGZ1bmN0aW9uKHJlYXNvbikgewotICAgIHRoaXMuaW50ZXJmYWNlRW5kcG9pbnRIYW5kbGUu
cmVzZXQocmVhc29uKTsKLSAgfTsKLQotICBmdW5jdGlvbiBpc01hc3RlckludGVyZmFjZUlkKGlu
dGVyZmFjZUlkKSB7Ci0gICAgcmV0dXJuIGludGVyZmFjZUlkID09PSBrTWFzdGVySW50ZXJmYWNl
SWQ7Ci0gIH0KLQotICBmdW5jdGlvbiBpc1ZhbGlkSW50ZXJmYWNlSWQoaW50ZXJmYWNlSWQpIHsK
LSAgICByZXR1cm4gaW50ZXJmYWNlSWQgIT09IGtJbnZhbGlkSW50ZXJmYWNlSWQ7Ci0gIH0KLQot
ICBmdW5jdGlvbiBoYXNJbnRlcmZhY2VJZE5hbWVzcGFjZUJpdFNldChpbnRlcmZhY2VJZCkgewot
ICAgIGlmIChpbnRlcmZhY2VJZCA+PSAyICoga0ludGVyZmFjZUlkTmFtZXNwYWNlTWFzaykgewot
ICAgICAgdGhyb3cgbmV3IEVycm9yKCJJbnRlcmZhY2UgSUQgc2hvdWxkIGJlIGEgMzItYml0IHVu
c2lnbmVkIGludGVnZXIuIik7Ci0gICAgfQotICAgIHJldHVybiBpbnRlcmZhY2VJZCA+PSBrSW50
ZXJmYWNlSWROYW1lc3BhY2VNYXNrOwotICB9Ci0KLSAgbW9qby5JbnRlcmZhY2VQdHJJbmZvID0g
SW50ZXJmYWNlUHRySW5mbzsKLSAgbW9qby5JbnRlcmZhY2VSZXF1ZXN0ID0gSW50ZXJmYWNlUmVx
dWVzdDsKLSAgbW9qby5Bc3NvY2lhdGVkSW50ZXJmYWNlUHRySW5mbyA9IEFzc29jaWF0ZWRJbnRl
cmZhY2VQdHJJbmZvOwotICBtb2pvLkFzc29jaWF0ZWRJbnRlcmZhY2VSZXF1ZXN0ID0gQXNzb2Np
YXRlZEludGVyZmFjZVJlcXVlc3Q7Ci0gIGludGVybmFsLmlzTWFzdGVySW50ZXJmYWNlSWQgPSBp
c01hc3RlckludGVyZmFjZUlkOwotICBpbnRlcm5hbC5pc1ZhbGlkSW50ZXJmYWNlSWQgPSBpc1Zh
bGlkSW50ZXJmYWNlSWQ7Ci0gIGludGVybmFsLmhhc0ludGVyZmFjZUlkTmFtZXNwYWNlQml0U2V0
ID0gaGFzSW50ZXJmYWNlSWROYW1lc3BhY2VCaXRTZXQ7Ci0gIGludGVybmFsLmtJbnZhbGlkSW50
ZXJmYWNlSWQgPSBrSW52YWxpZEludGVyZmFjZUlkOwotICBpbnRlcm5hbC5rTWFzdGVySW50ZXJm
YWNlSWQgPSBrTWFzdGVySW50ZXJmYWNlSWQ7Ci0gIGludGVybmFsLmtJbnRlcmZhY2VJZE5hbWVz
cGFjZU1hc2sgPSBrSW50ZXJmYWNlSWROYW1lc3BhY2VNYXNrOwotfSkoKTsKLS8vIENvcHlyaWdo
dCAyMDE0IFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNl
IG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0
aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLQotKGZ1bmN0aW9uKCkg
ewotICB2YXIgaW50ZXJuYWwgPSBtb2pvLmludGVybmFsOwotCi0gIHZhciBrSG9zdElzTGl0dGxl
RW5kaWFuID0gKGZ1bmN0aW9uICgpIHsKLSAgICB2YXIgZW5kaWFuQXJyYXlCdWZmZXIgPSBuZXcg
QXJyYXlCdWZmZXIoMik7Ci0gICAgdmFyIGVuZGlhblVpbnQ4QXJyYXkgPSBuZXcgVWludDhBcnJh
eShlbmRpYW5BcnJheUJ1ZmZlcik7Ci0gICAgdmFyIGVuZGlhblVpbnQxNkFycmF5ID0gbmV3IFVp
bnQxNkFycmF5KGVuZGlhbkFycmF5QnVmZmVyKTsKLSAgICBlbmRpYW5VaW50MTZBcnJheVswXSA9
IDE7Ci0gICAgcmV0dXJuIGVuZGlhblVpbnQ4QXJyYXlbMF0gPT0gMTsKLSAgfSkoKTsKLQotICB2
YXIga0hpZ2hXb3JkTXVsdGlwbGllciA9IDB4MTAwMDAwMDAwOwotCi0gIGZ1bmN0aW9uIEJ1ZmZl
cihzaXplT3JBcnJheUJ1ZmZlcikgewotICAgIGlmIChzaXplT3JBcnJheUJ1ZmZlciBpbnN0YW5j
ZW9mIEFycmF5QnVmZmVyKQotICAgICAgdGhpcy5hcnJheUJ1ZmZlciA9IHNpemVPckFycmF5QnVm
ZmVyOwotICAgIGVsc2UKLSAgICAgIHRoaXMuYXJyYXlCdWZmZXIgPSBuZXcgQXJyYXlCdWZmZXIo
c2l6ZU9yQXJyYXlCdWZmZXIpOwotCi0gICAgdGhpcy5kYXRhVmlldyA9IG5ldyBEYXRhVmlldyh0
aGlzLmFycmF5QnVmZmVyKTsKLSAgICB0aGlzLm5leHQgPSAwOwotICB9Ci0KLSAgT2JqZWN0LmRl
ZmluZVByb3BlcnR5KEJ1ZmZlci5wcm90b3R5cGUsICJieXRlTGVuZ3RoIiwgewotICAgIGdldDog
ZnVuY3Rpb24oKSB7IHJldHVybiB0aGlzLmFycmF5QnVmZmVyLmJ5dGVMZW5ndGg7IH0KLSAgfSk7
Ci0KLSAgQnVmZmVyLnByb3RvdHlwZS5hbGxvYyA9IGZ1bmN0aW9uKHNpemUpIHsKLSAgICB2YXIg
cG9pbnRlciA9IHRoaXMubmV4dDsKLSAgICB0aGlzLm5leHQgKz0gc2l6ZTsKLSAgICBpZiAodGhp
cy5uZXh0ID4gdGhpcy5ieXRlTGVuZ3RoKSB7Ci0gICAgICB2YXIgbmV3U2l6ZSA9ICgxLjUgKiAo
dGhpcy5ieXRlTGVuZ3RoICsgc2l6ZSkpIHwgMDsKLSAgICAgIHRoaXMuZ3JvdyhuZXdTaXplKTsK
LSAgICB9Ci0gICAgcmV0dXJuIHBvaW50ZXI7Ci0gIH07Ci0KLSAgZnVuY3Rpb24gY29weUFycmF5
QnVmZmVyKGRzdEFycmF5QnVmZmVyLCBzcmNBcnJheUJ1ZmZlcikgewotICAgIChuZXcgVWludDhB
cnJheShkc3RBcnJheUJ1ZmZlcikpLnNldChuZXcgVWludDhBcnJheShzcmNBcnJheUJ1ZmZlcikp
OwotICB9Ci0KLSAgQnVmZmVyLnByb3RvdHlwZS5ncm93ID0gZnVuY3Rpb24oc2l6ZSkgewotICAg
IHZhciBuZXdBcnJheUJ1ZmZlciA9IG5ldyBBcnJheUJ1ZmZlcihzaXplKTsKLSAgICBjb3B5QXJy
YXlCdWZmZXIobmV3QXJyYXlCdWZmZXIsIHRoaXMuYXJyYXlCdWZmZXIpOwotICAgIHRoaXMuYXJy
YXlCdWZmZXIgPSBuZXdBcnJheUJ1ZmZlcjsKLSAgICB0aGlzLmRhdGFWaWV3ID0gbmV3IERhdGFW
aWV3KHRoaXMuYXJyYXlCdWZmZXIpOwotICB9OwotCi0gIEJ1ZmZlci5wcm90b3R5cGUudHJpbSA9
IGZ1bmN0aW9uKCkgewotICAgIHRoaXMuYXJyYXlCdWZmZXIgPSB0aGlzLmFycmF5QnVmZmVyLnNs
aWNlKDAsIHRoaXMubmV4dCk7Ci0gICAgdGhpcy5kYXRhVmlldyA9IG5ldyBEYXRhVmlldyh0aGlz
LmFycmF5QnVmZmVyKTsKLSAgfTsKLQotICBCdWZmZXIucHJvdG90eXBlLmdldFVpbnQ4ID0gZnVu
Y3Rpb24ob2Zmc2V0KSB7Ci0gICAgcmV0dXJuIHRoaXMuZGF0YVZpZXcuZ2V0VWludDgob2Zmc2V0
KTsKLSAgfQotICBCdWZmZXIucHJvdG90eXBlLmdldFVpbnQxNiA9IGZ1bmN0aW9uKG9mZnNldCkg
ewotICAgIHJldHVybiB0aGlzLmRhdGFWaWV3LmdldFVpbnQxNihvZmZzZXQsIGtIb3N0SXNMaXR0
bGVFbmRpYW4pOwotICB9Ci0gIEJ1ZmZlci5wcm90b3R5cGUuZ2V0VWludDMyID0gZnVuY3Rpb24o
b2Zmc2V0KSB7Ci0gICAgcmV0dXJuIHRoaXMuZGF0YVZpZXcuZ2V0VWludDMyKG9mZnNldCwga0hv
c3RJc0xpdHRsZUVuZGlhbik7Ci0gIH0KLSAgQnVmZmVyLnByb3RvdHlwZS5nZXRVaW50NjQgPSBm
dW5jdGlvbihvZmZzZXQpIHsKLSAgICB2YXIgbG8sIGhpOwotICAgIGlmIChrSG9zdElzTGl0dGxl
RW5kaWFuKSB7Ci0gICAgICBsbyA9IHRoaXMuZGF0YVZpZXcuZ2V0VWludDMyKG9mZnNldCwga0hv
c3RJc0xpdHRsZUVuZGlhbik7Ci0gICAgICBoaSA9IHRoaXMuZGF0YVZpZXcuZ2V0VWludDMyKG9m
ZnNldCArIDQsIGtIb3N0SXNMaXR0bGVFbmRpYW4pOwotICAgIH0gZWxzZSB7Ci0gICAgICBoaSA9
IHRoaXMuZGF0YVZpZXcuZ2V0VWludDMyKG9mZnNldCwga0hvc3RJc0xpdHRsZUVuZGlhbik7Ci0g
ICAgICBsbyA9IHRoaXMuZGF0YVZpZXcuZ2V0VWludDMyKG9mZnNldCArIDQsIGtIb3N0SXNMaXR0
bGVFbmRpYW4pOwotICAgIH0KLSAgICByZXR1cm4gbG8gKyBoaSAqIGtIaWdoV29yZE11bHRpcGxp
ZXI7Ci0gIH0KLQotICBCdWZmZXIucHJvdG90eXBlLmdldEludDggPSBmdW5jdGlvbihvZmZzZXQp
IHsKLSAgICByZXR1cm4gdGhpcy5kYXRhVmlldy5nZXRJbnQ4KG9mZnNldCk7Ci0gIH0KLSAgQnVm
ZmVyLnByb3RvdHlwZS5nZXRJbnQxNiA9IGZ1bmN0aW9uKG9mZnNldCkgewotICAgIHJldHVybiB0
aGlzLmRhdGFWaWV3LmdldEludDE2KG9mZnNldCwga0hvc3RJc0xpdHRsZUVuZGlhbik7Ci0gIH0K
LSAgQnVmZmVyLnByb3RvdHlwZS5nZXRJbnQzMiA9IGZ1bmN0aW9uKG9mZnNldCkgewotICAgIHJl
dHVybiB0aGlzLmRhdGFWaWV3LmdldEludDMyKG9mZnNldCwga0hvc3RJc0xpdHRsZUVuZGlhbik7
Ci0gIH0KLSAgQnVmZmVyLnByb3RvdHlwZS5nZXRJbnQ2NCA9IGZ1bmN0aW9uKG9mZnNldCkgewot
ICAgIHZhciBsbywgaGk7Ci0gICAgaWYgKGtIb3N0SXNMaXR0bGVFbmRpYW4pIHsKLSAgICAgIGxv
ID0gdGhpcy5kYXRhVmlldy5nZXRVaW50MzIob2Zmc2V0LCBrSG9zdElzTGl0dGxlRW5kaWFuKTsK
LSAgICAgIGhpID0gdGhpcy5kYXRhVmlldy5nZXRJbnQzMihvZmZzZXQgKyA0LCBrSG9zdElzTGl0
dGxlRW5kaWFuKTsKLSAgICB9IGVsc2UgewotICAgICAgaGkgPSB0aGlzLmRhdGFWaWV3LmdldElu
dDMyKG9mZnNldCwga0hvc3RJc0xpdHRsZUVuZGlhbik7Ci0gICAgICBsbyA9IHRoaXMuZGF0YVZp
ZXcuZ2V0VWludDMyKG9mZnNldCArIDQsIGtIb3N0SXNMaXR0bGVFbmRpYW4pOwotICAgIH0KLSAg
ICByZXR1cm4gbG8gKyBoaSAqIGtIaWdoV29yZE11bHRpcGxpZXI7Ci0gIH0KLQotICBCdWZmZXIu
cHJvdG90eXBlLmdldEZsb2F0MzIgPSBmdW5jdGlvbihvZmZzZXQpIHsKLSAgICByZXR1cm4gdGhp
cy5kYXRhVmlldy5nZXRGbG9hdDMyKG9mZnNldCwga0hvc3RJc0xpdHRsZUVuZGlhbik7Ci0gIH0K
LSAgQnVmZmVyLnByb3RvdHlwZS5nZXRGbG9hdDY0ID0gZnVuY3Rpb24ob2Zmc2V0KSB7Ci0gICAg
cmV0dXJuIHRoaXMuZGF0YVZpZXcuZ2V0RmxvYXQ2NChvZmZzZXQsIGtIb3N0SXNMaXR0bGVFbmRp
YW4pOwotICB9Ci0KLSAgQnVmZmVyLnByb3RvdHlwZS5zZXRVaW50OCA9IGZ1bmN0aW9uKG9mZnNl
dCwgdmFsdWUpIHsKLSAgICB0aGlzLmRhdGFWaWV3LnNldFVpbnQ4KG9mZnNldCwgdmFsdWUpOwot
ICB9Ci0gIEJ1ZmZlci5wcm90b3R5cGUuc2V0VWludDE2ID0gZnVuY3Rpb24ob2Zmc2V0LCB2YWx1
ZSkgewotICAgIHRoaXMuZGF0YVZpZXcuc2V0VWludDE2KG9mZnNldCwgdmFsdWUsIGtIb3N0SXNM
aXR0bGVFbmRpYW4pOwotICB9Ci0gIEJ1ZmZlci5wcm90b3R5cGUuc2V0VWludDMyID0gZnVuY3Rp
b24ob2Zmc2V0LCB2YWx1ZSkgewotICAgIHRoaXMuZGF0YVZpZXcuc2V0VWludDMyKG9mZnNldCwg
dmFsdWUsIGtIb3N0SXNMaXR0bGVFbmRpYW4pOwotICB9Ci0gIEJ1ZmZlci5wcm90b3R5cGUuc2V0
VWludDY0ID0gZnVuY3Rpb24ob2Zmc2V0LCB2YWx1ZSkgewotICAgIHZhciBoaSA9ICh2YWx1ZSAv
IGtIaWdoV29yZE11bHRpcGxpZXIpIHwgMDsKLSAgICBpZiAoa0hvc3RJc0xpdHRsZUVuZGlhbikg
ewotICAgICAgdGhpcy5kYXRhVmlldy5zZXRJbnQzMihvZmZzZXQsIHZhbHVlLCBrSG9zdElzTGl0
dGxlRW5kaWFuKTsKLSAgICAgIHRoaXMuZGF0YVZpZXcuc2V0SW50MzIob2Zmc2V0ICsgNCwgaGks
IGtIb3N0SXNMaXR0bGVFbmRpYW4pOwotICAgIH0gZWxzZSB7Ci0gICAgICB0aGlzLmRhdGFWaWV3
LnNldEludDMyKG9mZnNldCwgaGksIGtIb3N0SXNMaXR0bGVFbmRpYW4pOwotICAgICAgdGhpcy5k
YXRhVmlldy5zZXRJbnQzMihvZmZzZXQgKyA0LCB2YWx1ZSwga0hvc3RJc0xpdHRsZUVuZGlhbik7
Ci0gICAgfQotICB9Ci0KLSAgQnVmZmVyLnByb3RvdHlwZS5zZXRJbnQ4ID0gZnVuY3Rpb24ob2Zm
c2V0LCB2YWx1ZSkgewotICAgIHRoaXMuZGF0YVZpZXcuc2V0SW50OChvZmZzZXQsIHZhbHVlKTsK
LSAgfQotICBCdWZmZXIucHJvdG90eXBlLnNldEludDE2ID0gZnVuY3Rpb24ob2Zmc2V0LCB2YWx1
ZSkgewotICAgIHRoaXMuZGF0YVZpZXcuc2V0SW50MTYob2Zmc2V0LCB2YWx1ZSwga0hvc3RJc0xp
dHRsZUVuZGlhbik7Ci0gIH0KLSAgQnVmZmVyLnByb3RvdHlwZS5zZXRJbnQzMiA9IGZ1bmN0aW9u
KG9mZnNldCwgdmFsdWUpIHsKLSAgICB0aGlzLmRhdGFWaWV3LnNldEludDMyKG9mZnNldCwgdmFs
dWUsIGtIb3N0SXNMaXR0bGVFbmRpYW4pOwotICB9Ci0gIEJ1ZmZlci5wcm90b3R5cGUuc2V0SW50
NjQgPSBmdW5jdGlvbihvZmZzZXQsIHZhbHVlKSB7Ci0gICAgdmFyIGhpID0gTWF0aC5mbG9vcih2
YWx1ZSAvIGtIaWdoV29yZE11bHRpcGxpZXIpOwotICAgIGlmIChrSG9zdElzTGl0dGxlRW5kaWFu
KSB7Ci0gICAgICB0aGlzLmRhdGFWaWV3LnNldEludDMyKG9mZnNldCwgdmFsdWUsIGtIb3N0SXNM
aXR0bGVFbmRpYW4pOwotICAgICAgdGhpcy5kYXRhVmlldy5zZXRJbnQzMihvZmZzZXQgKyA0LCBo
aSwga0hvc3RJc0xpdHRsZUVuZGlhbik7Ci0gICAgfSBlbHNlIHsKLSAgICAgIHRoaXMuZGF0YVZp
ZXcuc2V0SW50MzIob2Zmc2V0LCBoaSwga0hvc3RJc0xpdHRsZUVuZGlhbik7Ci0gICAgICB0aGlz
LmRhdGFWaWV3LnNldEludDMyKG9mZnNldCArIDQsIHZhbHVlLCBrSG9zdElzTGl0dGxlRW5kaWFu
KTsKLSAgICB9Ci0gIH0KLQotICBCdWZmZXIucHJvdG90eXBlLnNldEZsb2F0MzIgPSBmdW5jdGlv
bihvZmZzZXQsIHZhbHVlKSB7Ci0gICAgdGhpcy5kYXRhVmlldy5zZXRGbG9hdDMyKG9mZnNldCwg
dmFsdWUsIGtIb3N0SXNMaXR0bGVFbmRpYW4pOwotICB9Ci0gIEJ1ZmZlci5wcm90b3R5cGUuc2V0
RmxvYXQ2NCA9IGZ1bmN0aW9uKG9mZnNldCwgdmFsdWUpIHsKLSAgICB0aGlzLmRhdGFWaWV3LnNl
dEZsb2F0NjQob2Zmc2V0LCB2YWx1ZSwga0hvc3RJc0xpdHRsZUVuZGlhbik7Ci0gIH0KLQotICBp
bnRlcm5hbC5CdWZmZXIgPSBCdWZmZXI7Ci19KSgpOwotLy8gQ29weXJpZ2h0IDIwMTQgVGhlIENo
cm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3Vy
Y2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0v
LyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotCi0oZnVuY3Rpb24oKSB7Ci0gIHZhciBpbnRl
cm5hbCA9IG1vam8uaW50ZXJuYWw7Ci0KLSAgdmFyIGtFcnJvclVuc2lnbmVkID0gIlBhc3Npbmcg
bmVnYXRpdmUgdmFsdWUgdG8gdW5zaWduZWQiOwotICB2YXIga0Vycm9yQXJyYXkgPSAiUGFzc2lu
ZyBub24gQXJyYXkgZm9yIGFycmF5IHR5cGUiOwotICB2YXIga0Vycm9yU3RyaW5nID0gIlBhc3Np
bmcgbm9uIFN0cmluZyBmb3Igc3RyaW5nIHR5cGUiOwotICB2YXIga0Vycm9yTWFwID0gIlBhc3Np
bmcgbm9uIE1hcCBmb3IgbWFwIHR5cGUiOwotCi0gIC8vIE1lbW9yeSAtLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLSAg
dmFyIGtBbGlnbm1lbnQgPSA4OwotCi0gIGZ1bmN0aW9uIGFsaWduKHNpemUpIHsKLSAgICByZXR1
cm4gc2l6ZSArIChrQWxpZ25tZW50IC0gKHNpemUgJSBrQWxpZ25tZW50KSkgJSBrQWxpZ25tZW50
OwotICB9Ci0KLSAgZnVuY3Rpb24gaXNBbGlnbmVkKG9mZnNldCkgewotICAgIHJldHVybiBvZmZz
ZXQgPj0gMCAmJiAob2Zmc2V0ICUga0FsaWdubWVudCkgPT09IDA7Ci0gIH0KLQotICAvLyBDb25z
dGFudHMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLQotCi0gIHZhciBrQXJyYXlIZWFkZXJTaXplID0gODsKLSAgdmFyIGtTdHJ1
Y3RIZWFkZXJTaXplID0gODsKLSAgdmFyIGtNZXNzYWdlVjBIZWFkZXJTaXplID0gMjQ7Ci0gIHZh
ciBrTWVzc2FnZVYxSGVhZGVyU2l6ZSA9IDMyOwotICB2YXIga01lc3NhZ2VWMkhlYWRlclNpemUg
PSA0ODsKLSAgdmFyIGtNYXBTdHJ1Y3RQYXlsb2FkU2l6ZSA9IDE2OwotCi0gIHZhciBrU3RydWN0
SGVhZGVyTnVtQnl0ZXNPZmZzZXQgPSAwOwotICB2YXIga1N0cnVjdEhlYWRlclZlcnNpb25PZmZz
ZXQgPSA0OwotCi0gIHZhciBrRW5jb2RlZEludmFsaWRIYW5kbGVWYWx1ZSA9IDB4RkZGRkZGRkY7
Ci0KLSAgLy8gRGVjb2RlciAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotICBmdW5jdGlvbiBEZWNvZGVyKGJ1ZmZlciwg
aGFuZGxlcywgYXNzb2NpYXRlZEVuZHBvaW50SGFuZGxlcywgYmFzZSkgewotICAgIHRoaXMuYnVm
ZmVyID0gYnVmZmVyOwotICAgIHRoaXMuaGFuZGxlcyA9IGhhbmRsZXM7Ci0gICAgdGhpcy5hc3Nv
Y2lhdGVkRW5kcG9pbnRIYW5kbGVzID0gYXNzb2NpYXRlZEVuZHBvaW50SGFuZGxlczsKLSAgICB0
aGlzLmJhc2UgPSBiYXNlOwotICAgIHRoaXMubmV4dCA9IGJhc2U7Ci0gIH0KLQotICBEZWNvZGVy
LnByb3RvdHlwZS5hbGlnbiA9IGZ1bmN0aW9uKCkgewotICAgIHRoaXMubmV4dCA9IGFsaWduKHRo
aXMubmV4dCk7Ci0gIH07Ci0KLSAgRGVjb2Rlci5wcm90b3R5cGUuc2tpcCA9IGZ1bmN0aW9uKG9m
ZnNldCkgewotICAgIHRoaXMubmV4dCArPSBvZmZzZXQ7Ci0gIH07Ci0KLSAgRGVjb2Rlci5wcm90
b3R5cGUucmVhZEludDggPSBmdW5jdGlvbigpIHsKLSAgICB2YXIgcmVzdWx0ID0gdGhpcy5idWZm
ZXIuZ2V0SW50OCh0aGlzLm5leHQpOwotICAgIHRoaXMubmV4dCArPSAxOwotICAgIHJldHVybiBy
ZXN1bHQ7Ci0gIH07Ci0KLSAgRGVjb2Rlci5wcm90b3R5cGUucmVhZFVpbnQ4ID0gZnVuY3Rpb24o
KSB7Ci0gICAgdmFyIHJlc3VsdCA9IHRoaXMuYnVmZmVyLmdldFVpbnQ4KHRoaXMubmV4dCk7Ci0g
ICAgdGhpcy5uZXh0ICs9IDE7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLSAgfTsKLQotICBEZWNvZGVy
LnByb3RvdHlwZS5yZWFkSW50MTYgPSBmdW5jdGlvbigpIHsKLSAgICB2YXIgcmVzdWx0ID0gdGhp
cy5idWZmZXIuZ2V0SW50MTYodGhpcy5uZXh0KTsKLSAgICB0aGlzLm5leHQgKz0gMjsKLSAgICBy
ZXR1cm4gcmVzdWx0OwotICB9OwotCi0gIERlY29kZXIucHJvdG90eXBlLnJlYWRVaW50MTYgPSBm
dW5jdGlvbigpIHsKLSAgICB2YXIgcmVzdWx0ID0gdGhpcy5idWZmZXIuZ2V0VWludDE2KHRoaXMu
bmV4dCk7Ci0gICAgdGhpcy5uZXh0ICs9IDI7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLSAgfTsKLQot
ICBEZWNvZGVyLnByb3RvdHlwZS5yZWFkSW50MzIgPSBmdW5jdGlvbigpIHsKLSAgICB2YXIgcmVz
dWx0ID0gdGhpcy5idWZmZXIuZ2V0SW50MzIodGhpcy5uZXh0KTsKLSAgICB0aGlzLm5leHQgKz0g
NDsKLSAgICByZXR1cm4gcmVzdWx0OwotICB9OwotCi0gIERlY29kZXIucHJvdG90eXBlLnJlYWRV
aW50MzIgPSBmdW5jdGlvbigpIHsKLSAgICB2YXIgcmVzdWx0ID0gdGhpcy5idWZmZXIuZ2V0VWlu
dDMyKHRoaXMubmV4dCk7Ci0gICAgdGhpcy5uZXh0ICs9IDQ7Ci0gICAgcmV0dXJuIHJlc3VsdDsK
LSAgfTsKLQotICBEZWNvZGVyLnByb3RvdHlwZS5yZWFkSW50NjQgPSBmdW5jdGlvbigpIHsKLSAg
ICB2YXIgcmVzdWx0ID0gdGhpcy5idWZmZXIuZ2V0SW50NjQodGhpcy5uZXh0KTsKLSAgICB0aGlz
Lm5leHQgKz0gODsKLSAgICByZXR1cm4gcmVzdWx0OwotICB9OwotCi0gIERlY29kZXIucHJvdG90
eXBlLnJlYWRVaW50NjQgPSBmdW5jdGlvbigpIHsKLSAgICB2YXIgcmVzdWx0ID0gdGhpcy5idWZm
ZXIuZ2V0VWludDY0KHRoaXMubmV4dCk7Ci0gICAgdGhpcy5uZXh0ICs9IDg7Ci0gICAgcmV0dXJu
IHJlc3VsdDsKLSAgfTsKLQotICBEZWNvZGVyLnByb3RvdHlwZS5yZWFkRmxvYXQgPSBmdW5jdGlv
bigpIHsKLSAgICB2YXIgcmVzdWx0ID0gdGhpcy5idWZmZXIuZ2V0RmxvYXQzMih0aGlzLm5leHQp
OwotICAgIHRoaXMubmV4dCArPSA0OwotICAgIHJldHVybiByZXN1bHQ7Ci0gIH07Ci0KLSAgRGVj
b2Rlci5wcm90b3R5cGUucmVhZERvdWJsZSA9IGZ1bmN0aW9uKCkgewotICAgIHZhciByZXN1bHQg
PSB0aGlzLmJ1ZmZlci5nZXRGbG9hdDY0KHRoaXMubmV4dCk7Ci0gICAgdGhpcy5uZXh0ICs9IDg7
Ci0gICAgcmV0dXJuIHJlc3VsdDsKLSAgfTsKLQotICBEZWNvZGVyLnByb3RvdHlwZS5kZWNvZGVQ
b2ludGVyID0gZnVuY3Rpb24oKSB7Ci0gICAgLy8gVE9ETyhhYmFydGgpOiBUbyBjb3JyZWN0bHkg
ZGVjb2RlIGEgcG9pbnRlciwgd2UgbmVlZCB0byBrbm93IHRoZSByZWFsCi0gICAgLy8gYmFzZSBh
ZGRyZXNzIG9mIHRoZSBhcnJheSBidWZmZXIuCi0gICAgdmFyIG9mZnNldFBvaW50ZXIgPSB0aGlz
Lm5leHQ7Ci0gICAgdmFyIG9mZnNldCA9IHRoaXMucmVhZFVpbnQ2NCgpOwotICAgIGlmICghb2Zm
c2V0KQotICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIG9mZnNldFBvaW50ZXIgKyBvZmZzZXQ7
Ci0gIH07Ci0KLSAgRGVjb2Rlci5wcm90b3R5cGUuZGVjb2RlQW5kQ3JlYXRlRGVjb2RlciA9IGZ1
bmN0aW9uKHBvaW50ZXIpIHsKLSAgICByZXR1cm4gbmV3IERlY29kZXIodGhpcy5idWZmZXIsIHRo
aXMuaGFuZGxlcywKLSAgICAgICAgdGhpcy5hc3NvY2lhdGVkRW5kcG9pbnRIYW5kbGVzLCBwb2lu
dGVyKTsKLSAgfTsKLQotICBEZWNvZGVyLnByb3RvdHlwZS5kZWNvZGVIYW5kbGUgPSBmdW5jdGlv
bigpIHsKLSAgICByZXR1cm4gdGhpcy5oYW5kbGVzW3RoaXMucmVhZFVpbnQzMigpXSB8fCBudWxs
OwotICB9OwotCi0gIERlY29kZXIucHJvdG90eXBlLmRlY29kZUFzc29jaWF0ZWRFbmRwb2ludEhh
bmRsZSA9IGZ1bmN0aW9uKCkgewotICAgIHJldHVybiB0aGlzLmFzc29jaWF0ZWRFbmRwb2ludEhh
bmRsZXNbdGhpcy5yZWFkVWludDMyKCldIHx8IG51bGw7Ci0gIH07Ci0KLSAgRGVjb2Rlci5wcm90
b3R5cGUuZGVjb2RlU3RyaW5nID0gZnVuY3Rpb24oKSB7Ci0gICAgdmFyIG51bWJlck9mQnl0ZXMg
PSB0aGlzLnJlYWRVaW50MzIoKTsKLSAgICB2YXIgbnVtYmVyT2ZFbGVtZW50cyA9IHRoaXMucmVh
ZFVpbnQzMigpOwotICAgIHZhciBiYXNlID0gdGhpcy5uZXh0OwotICAgIHRoaXMubmV4dCArPSBu
dW1iZXJPZkVsZW1lbnRzOwotICAgIHJldHVybiBpbnRlcm5hbC5kZWNvZGVVdGY4U3RyaW5nKAot
ICAgICAgICBuZXcgVWludDhBcnJheSh0aGlzLmJ1ZmZlci5hcnJheUJ1ZmZlciwgYmFzZSwgbnVt
YmVyT2ZFbGVtZW50cykpOwotICB9OwotCi0gIERlY29kZXIucHJvdG90eXBlLmRlY29kZUFycmF5
ID0gZnVuY3Rpb24oY2xzKSB7Ci0gICAgdmFyIG51bWJlck9mQnl0ZXMgPSB0aGlzLnJlYWRVaW50
MzIoKTsKLSAgICB2YXIgbnVtYmVyT2ZFbGVtZW50cyA9IHRoaXMucmVhZFVpbnQzMigpOwotICAg
IHZhciB2YWwgPSBuZXcgQXJyYXkobnVtYmVyT2ZFbGVtZW50cyk7Ci0gICAgaWYgKGNscyA9PT0g
UGFja2VkQm9vbCkgewotICAgICAgdmFyIGJ5dGU7Ci0gICAgICBmb3IgKHZhciBpID0gMDsgaSA8
IG51bWJlck9mRWxlbWVudHM7ICsraSkgewotICAgICAgICBpZiAoaSAlIDggPT09IDApCi0gICAg
ICAgICAgYnl0ZSA9IHRoaXMucmVhZFVpbnQ4KCk7Ci0gICAgICAgIHZhbFtpXSA9IChieXRlICYg
KDEgPDwgaSAlIDgpKSA/IHRydWUgOiBmYWxzZTsKLSAgICAgIH0KLSAgICB9IGVsc2UgewotICAg
ICAgZm9yICh2YXIgaSA9IDA7IGkgPCBudW1iZXJPZkVsZW1lbnRzOyArK2kpIHsKLSAgICAgICAg
dmFsW2ldID0gY2xzLmRlY29kZSh0aGlzKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIHZh
bDsKLSAgfTsKLQotICBEZWNvZGVyLnByb3RvdHlwZS5kZWNvZGVTdHJ1Y3QgPSBmdW5jdGlvbihj
bHMpIHsKLSAgICByZXR1cm4gY2xzLmRlY29kZSh0aGlzKTsKLSAgfTsKLQotICBEZWNvZGVyLnBy
b3RvdHlwZS5kZWNvZGVTdHJ1Y3RQb2ludGVyID0gZnVuY3Rpb24oY2xzKSB7Ci0gICAgdmFyIHBv
aW50ZXIgPSB0aGlzLmRlY29kZVBvaW50ZXIoKTsKLSAgICBpZiAoIXBvaW50ZXIpIHsKLSAgICAg
IHJldHVybiBudWxsOwotICAgIH0KLSAgICByZXR1cm4gY2xzLmRlY29kZSh0aGlzLmRlY29kZUFu
ZENyZWF0ZURlY29kZXIocG9pbnRlcikpOwotICB9OwotCi0gIERlY29kZXIucHJvdG90eXBlLmRl
Y29kZUFycmF5UG9pbnRlciA9IGZ1bmN0aW9uKGNscykgewotICAgIHZhciBwb2ludGVyID0gdGhp
cy5kZWNvZGVQb2ludGVyKCk7Ci0gICAgaWYgKCFwb2ludGVyKSB7Ci0gICAgICByZXR1cm4gbnVs
bDsKLSAgICB9Ci0gICAgcmV0dXJuIHRoaXMuZGVjb2RlQW5kQ3JlYXRlRGVjb2Rlcihwb2ludGVy
KS5kZWNvZGVBcnJheShjbHMpOwotICB9OwotCi0gIERlY29kZXIucHJvdG90eXBlLmRlY29kZVN0
cmluZ1BvaW50ZXIgPSBmdW5jdGlvbigpIHsKLSAgICB2YXIgcG9pbnRlciA9IHRoaXMuZGVjb2Rl
UG9pbnRlcigpOwotICAgIGlmICghcG9pbnRlcikgewotICAgICAgcmV0dXJuIG51bGw7Ci0gICAg
fQotICAgIHJldHVybiB0aGlzLmRlY29kZUFuZENyZWF0ZURlY29kZXIocG9pbnRlcikuZGVjb2Rl
U3RyaW5nKCk7Ci0gIH07Ci0KLSAgRGVjb2Rlci5wcm90b3R5cGUuZGVjb2RlTWFwID0gZnVuY3Rp
b24oa2V5Q2xhc3MsIHZhbHVlQ2xhc3MpIHsKLSAgICB0aGlzLnNraXAoNCk7IC8vIG51bWJlck9m
Qnl0ZXMKLSAgICB0aGlzLnNraXAoNCk7IC8vIHZlcnNpb24KLSAgICB2YXIga2V5cyA9IHRoaXMu
ZGVjb2RlQXJyYXlQb2ludGVyKGtleUNsYXNzKTsKLSAgICB2YXIgdmFsdWVzID0gdGhpcy5kZWNv
ZGVBcnJheVBvaW50ZXIodmFsdWVDbGFzcyk7Ci0gICAgdmFyIHZhbCA9IG5ldyBNYXAoKTsKLSAg
ICBmb3IgKHZhciBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspCi0gICAgICB2YWwuc2V0KGtl
eXNbaV0sIHZhbHVlc1tpXSk7Ci0gICAgcmV0dXJuIHZhbDsKLSAgfTsKLQotICBEZWNvZGVyLnBy
b3RvdHlwZS5kZWNvZGVNYXBQb2ludGVyID0gZnVuY3Rpb24oa2V5Q2xhc3MsIHZhbHVlQ2xhc3Mp
IHsKLSAgICB2YXIgcG9pbnRlciA9IHRoaXMuZGVjb2RlUG9pbnRlcigpOwotICAgIGlmICghcG9p
bnRlcikgewotICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfQotICAgIHZhciBkZWNvZGVyID0gdGhp
cy5kZWNvZGVBbmRDcmVhdGVEZWNvZGVyKHBvaW50ZXIpOwotICAgIHJldHVybiBkZWNvZGVyLmRl
Y29kZU1hcChrZXlDbGFzcywgdmFsdWVDbGFzcyk7Ci0gIH07Ci0KLSAgLy8gRW5jb2RlciAtLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0KLQotICBmdW5jdGlvbiBFbmNvZGVyKGJ1ZmZlciwgaGFuZGxlcywgYXNzb2NpYXRlZEVu
ZHBvaW50SGFuZGxlcywgYmFzZSkgewotICAgIHRoaXMuYnVmZmVyID0gYnVmZmVyOwotICAgIHRo
aXMuaGFuZGxlcyA9IGhhbmRsZXM7Ci0gICAgdGhpcy5hc3NvY2lhdGVkRW5kcG9pbnRIYW5kbGVz
ID0gYXNzb2NpYXRlZEVuZHBvaW50SGFuZGxlczsKLSAgICB0aGlzLmJhc2UgPSBiYXNlOwotICAg
IHRoaXMubmV4dCA9IGJhc2U7Ci0gIH0KLQotICBFbmNvZGVyLnByb3RvdHlwZS5hbGlnbiA9IGZ1
bmN0aW9uKCkgewotICAgIHRoaXMubmV4dCA9IGFsaWduKHRoaXMubmV4dCk7Ci0gIH07Ci0KLSAg
RW5jb2Rlci5wcm90b3R5cGUuc2tpcCA9IGZ1bmN0aW9uKG9mZnNldCkgewotICAgIHRoaXMubmV4
dCArPSBvZmZzZXQ7Ci0gIH07Ci0KLSAgRW5jb2Rlci5wcm90b3R5cGUud3JpdGVJbnQ4ID0gZnVu
Y3Rpb24odmFsKSB7Ci0gICAgdGhpcy5idWZmZXIuc2V0SW50OCh0aGlzLm5leHQsIHZhbCk7Ci0g
ICAgdGhpcy5uZXh0ICs9IDE7Ci0gIH07Ci0KLSAgRW5jb2Rlci5wcm90b3R5cGUud3JpdGVVaW50
OCA9IGZ1bmN0aW9uKHZhbCkgewotICAgIGlmICh2YWwgPCAwKSB7Ci0gICAgICB0aHJvdyBuZXcg
RXJyb3Ioa0Vycm9yVW5zaWduZWQpOwotICAgIH0KLSAgICB0aGlzLmJ1ZmZlci5zZXRVaW50OCh0
aGlzLm5leHQsIHZhbCk7Ci0gICAgdGhpcy5uZXh0ICs9IDE7Ci0gIH07Ci0KLSAgRW5jb2Rlci5w
cm90b3R5cGUud3JpdGVJbnQxNiA9IGZ1bmN0aW9uKHZhbCkgewotICAgIHRoaXMuYnVmZmVyLnNl
dEludDE2KHRoaXMubmV4dCwgdmFsKTsKLSAgICB0aGlzLm5leHQgKz0gMjsKLSAgfTsKLQotICBF
bmNvZGVyLnByb3RvdHlwZS53cml0ZVVpbnQxNiA9IGZ1bmN0aW9uKHZhbCkgewotICAgIGlmICh2
YWwgPCAwKSB7Ci0gICAgICB0aHJvdyBuZXcgRXJyb3Ioa0Vycm9yVW5zaWduZWQpOwotICAgIH0K
LSAgICB0aGlzLmJ1ZmZlci5zZXRVaW50MTYodGhpcy5uZXh0LCB2YWwpOwotICAgIHRoaXMubmV4
dCArPSAyOwotICB9OwotCi0gIEVuY29kZXIucHJvdG90eXBlLndyaXRlSW50MzIgPSBmdW5jdGlv
bih2YWwpIHsKLSAgICB0aGlzLmJ1ZmZlci5zZXRJbnQzMih0aGlzLm5leHQsIHZhbCk7Ci0gICAg
dGhpcy5uZXh0ICs9IDQ7Ci0gIH07Ci0KLSAgRW5jb2Rlci5wcm90b3R5cGUud3JpdGVVaW50MzIg
PSBmdW5jdGlvbih2YWwpIHsKLSAgICBpZiAodmFsIDwgMCkgewotICAgICAgdGhyb3cgbmV3IEVy
cm9yKGtFcnJvclVuc2lnbmVkKTsKLSAgICB9Ci0gICAgdGhpcy5idWZmZXIuc2V0VWludDMyKHRo
aXMubmV4dCwgdmFsKTsKLSAgICB0aGlzLm5leHQgKz0gNDsKLSAgfTsKLQotICBFbmNvZGVyLnBy
b3RvdHlwZS53cml0ZUludDY0ID0gZnVuY3Rpb24odmFsKSB7Ci0gICAgdGhpcy5idWZmZXIuc2V0
SW50NjQodGhpcy5uZXh0LCB2YWwpOwotICAgIHRoaXMubmV4dCArPSA4OwotICB9OwotCi0gIEVu
Y29kZXIucHJvdG90eXBlLndyaXRlVWludDY0ID0gZnVuY3Rpb24odmFsKSB7Ci0gICAgaWYgKHZh
bCA8IDApIHsKLSAgICAgIHRocm93IG5ldyBFcnJvcihrRXJyb3JVbnNpZ25lZCk7Ci0gICAgfQot
ICAgIHRoaXMuYnVmZmVyLnNldFVpbnQ2NCh0aGlzLm5leHQsIHZhbCk7Ci0gICAgdGhpcy5uZXh0
ICs9IDg7Ci0gIH07Ci0KLSAgRW5jb2Rlci5wcm90b3R5cGUud3JpdGVGbG9hdCA9IGZ1bmN0aW9u
KHZhbCkgewotICAgIHRoaXMuYnVmZmVyLnNldEZsb2F0MzIodGhpcy5uZXh0LCB2YWwpOwotICAg
IHRoaXMubmV4dCArPSA0OwotICB9OwotCi0gIEVuY29kZXIucHJvdG90eXBlLndyaXRlRG91Ymxl
ID0gZnVuY3Rpb24odmFsKSB7Ci0gICAgdGhpcy5idWZmZXIuc2V0RmxvYXQ2NCh0aGlzLm5leHQs
IHZhbCk7Ci0gICAgdGhpcy5uZXh0ICs9IDg7Ci0gIH07Ci0KLSAgRW5jb2Rlci5wcm90b3R5cGUu
ZW5jb2RlUG9pbnRlciA9IGZ1bmN0aW9uKHBvaW50ZXIpIHsKLSAgICBpZiAoIXBvaW50ZXIpCi0g
ICAgICByZXR1cm4gdGhpcy53cml0ZVVpbnQ2NCgwKTsKLSAgICAvLyBUT0RPKGFiYXJ0aCk6IFRv
IGNvcnJlY3RseSBlbmNvZGUgYSBwb2ludGVyLCB3ZSBuZWVkIHRvIGtub3cgdGhlIHJlYWwKLSAg
ICAvLyBiYXNlIGFkZHJlc3Mgb2YgdGhlIGFycmF5IGJ1ZmZlci4KLSAgICB2YXIgb2Zmc2V0ID0g
cG9pbnRlciAtIHRoaXMubmV4dDsKLSAgICB0aGlzLndyaXRlVWludDY0KG9mZnNldCk7Ci0gIH07
Ci0KLSAgRW5jb2Rlci5wcm90b3R5cGUuY3JlYXRlQW5kRW5jb2RlRW5jb2RlciA9IGZ1bmN0aW9u
KHNpemUpIHsKLSAgICB2YXIgcG9pbnRlciA9IHRoaXMuYnVmZmVyLmFsbG9jKGFsaWduKHNpemUp
KTsKLSAgICB0aGlzLmVuY29kZVBvaW50ZXIocG9pbnRlcik7Ci0gICAgcmV0dXJuIG5ldyBFbmNv
ZGVyKHRoaXMuYnVmZmVyLCB0aGlzLmhhbmRsZXMsCi0gICAgICAgIHRoaXMuYXNzb2NpYXRlZEVu
ZHBvaW50SGFuZGxlcywgcG9pbnRlcik7Ci0gIH07Ci0KLSAgRW5jb2Rlci5wcm90b3R5cGUuZW5j
b2RlSGFuZGxlID0gZnVuY3Rpb24oaGFuZGxlKSB7Ci0gICAgaWYgKGhhbmRsZSkgewotICAgICAg
dGhpcy5oYW5kbGVzLnB1c2goaGFuZGxlKTsKLSAgICAgIHRoaXMud3JpdGVVaW50MzIodGhpcy5o
YW5kbGVzLmxlbmd0aCAtIDEpOwotICAgIH0gZWxzZSB7Ci0gICAgICB0aGlzLndyaXRlVWludDMy
KGtFbmNvZGVkSW52YWxpZEhhbmRsZVZhbHVlKTsKLSAgICB9Ci0gIH07Ci0KLSAgRW5jb2Rlci5w
cm90b3R5cGUuZW5jb2RlQXNzb2NpYXRlZEVuZHBvaW50SGFuZGxlID0gZnVuY3Rpb24oZW5kcG9p
bnRIYW5kbGUpIHsKLSAgICBpZiAoZW5kcG9pbnRIYW5kbGUpIHsKLSAgICAgIHRoaXMuYXNzb2Np
YXRlZEVuZHBvaW50SGFuZGxlcy5wdXNoKGVuZHBvaW50SGFuZGxlKTsKLSAgICAgIHRoaXMud3Jp
dGVVaW50MzIodGhpcy5hc3NvY2lhdGVkRW5kcG9pbnRIYW5kbGVzLmxlbmd0aCAtIDEpOwotICAg
IH0gZWxzZSB7Ci0gICAgICB0aGlzLndyaXRlVWludDMyKGtFbmNvZGVkSW52YWxpZEhhbmRsZVZh
bHVlKTsKLSAgICB9Ci0gIH07Ci0KLSAgRW5jb2Rlci5wcm90b3R5cGUuZW5jb2RlU3RyaW5nID0g
ZnVuY3Rpb24odmFsKSB7Ci0gICAgdmFyIGJhc2UgPSB0aGlzLm5leHQgKyBrQXJyYXlIZWFkZXJT
aXplOwotICAgIHZhciBudW1iZXJPZkVsZW1lbnRzID0gaW50ZXJuYWwuZW5jb2RlVXRmOFN0cmlu
ZygKLSAgICAgICAgdmFsLCBuZXcgVWludDhBcnJheSh0aGlzLmJ1ZmZlci5hcnJheUJ1ZmZlciwg
YmFzZSkpOwotICAgIHZhciBudW1iZXJPZkJ5dGVzID0ga0FycmF5SGVhZGVyU2l6ZSArIG51bWJl
ck9mRWxlbWVudHM7Ci0gICAgdGhpcy53cml0ZVVpbnQzMihudW1iZXJPZkJ5dGVzKTsKLSAgICB0
aGlzLndyaXRlVWludDMyKG51bWJlck9mRWxlbWVudHMpOwotICAgIHRoaXMubmV4dCArPSBudW1i
ZXJPZkVsZW1lbnRzOwotICB9OwotCi0gIEVuY29kZXIucHJvdG90eXBlLmVuY29kZUFycmF5ID0K
LSAgICAgIGZ1bmN0aW9uKGNscywgdmFsLCBudW1iZXJPZkVsZW1lbnRzLCBlbmNvZGVkU2l6ZSkg
ewotICAgIGlmIChudW1iZXJPZkVsZW1lbnRzID09PSB1bmRlZmluZWQpCi0gICAgICBudW1iZXJP
ZkVsZW1lbnRzID0gdmFsLmxlbmd0aDsKLSAgICBpZiAoZW5jb2RlZFNpemUgPT09IHVuZGVmaW5l
ZCkKLSAgICAgIGVuY29kZWRTaXplID0ga0FycmF5SGVhZGVyU2l6ZSArIGNscy5lbmNvZGVkU2l6
ZSAqIG51bWJlck9mRWxlbWVudHM7Ci0KLSAgICB0aGlzLndyaXRlVWludDMyKGVuY29kZWRTaXpl
KTsKLSAgICB0aGlzLndyaXRlVWludDMyKG51bWJlck9mRWxlbWVudHMpOwotCi0gICAgaWYgKGNs
cyA9PT0gUGFja2VkQm9vbCkgewotICAgICAgdmFyIGJ5dGUgPSAwOwotICAgICAgZm9yIChpID0g
MDsgaSA8IG51bWJlck9mRWxlbWVudHM7ICsraSkgewotICAgICAgICBpZiAodmFsW2ldKQotICAg
ICAgICAgIGJ5dGUgfD0gKDEgPDwgaSAlIDgpOwotICAgICAgICBpZiAoaSAlIDggPT09IDcgfHwg
aSA9PSBudW1iZXJPZkVsZW1lbnRzIC0gMSkgewotICAgICAgICAgIFVpbnQ4LmVuY29kZSh0aGlz
LCBieXRlKTsKLSAgICAgICAgICBieXRlID0gMDsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0g
ZWxzZSB7Ci0gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG51bWJlck9mRWxlbWVudHM7ICsraSkK
LSAgICAgICAgY2xzLmVuY29kZSh0aGlzLCB2YWxbaV0pOwotICAgIH0KLSAgfTsKLQotICBFbmNv
ZGVyLnByb3RvdHlwZS5lbmNvZGVTdHJ1Y3QgPSBmdW5jdGlvbihjbHMsIHZhbCkgewotICAgIHJl
dHVybiBjbHMuZW5jb2RlKHRoaXMsIHZhbCk7Ci0gIH07Ci0KLSAgRW5jb2Rlci5wcm90b3R5cGUu
ZW5jb2RlU3RydWN0UG9pbnRlciA9IGZ1bmN0aW9uKGNscywgdmFsKSB7Ci0gICAgaWYgKHZhbCA9
PSBudWxsKSB7Ci0gICAgICAvLyBBbHNvIGhhbmRsZXMgdW5kZWZpbmVkLCBzaW5jZSB1bmRlZmlu
ZWQgPT0gbnVsbC4KLSAgICAgIHRoaXMuZW5jb2RlUG9pbnRlcih2YWwpOwotICAgICAgcmV0dXJu
OwotICAgIH0KLSAgICB2YXIgZW5jb2RlciA9IHRoaXMuY3JlYXRlQW5kRW5jb2RlRW5jb2Rlcihj
bHMuZW5jb2RlZFNpemUpOwotICAgIGNscy5lbmNvZGUoZW5jb2RlciwgdmFsKTsKLSAgfTsKLQot
ICBFbmNvZGVyLnByb3RvdHlwZS5lbmNvZGVBcnJheVBvaW50ZXIgPSBmdW5jdGlvbihjbHMsIHZh
bCkgewotICAgIGlmICh2YWwgPT0gbnVsbCkgewotICAgICAgLy8gQWxzbyBoYW5kbGVzIHVuZGVm
aW5lZCwgc2luY2UgdW5kZWZpbmVkID09IG51bGwuCi0gICAgICB0aGlzLmVuY29kZVBvaW50ZXIo
dmFsKTsKLSAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICB2YXIgbnVtYmVyT2ZFbGVtZW50cyA9
IHZhbC5sZW5ndGg7Ci0gICAgaWYgKCFOdW1iZXIuaXNTYWZlSW50ZWdlcihudW1iZXJPZkVsZW1l
bnRzKSB8fCBudW1iZXJPZkVsZW1lbnRzIDwgMCkKLSAgICAgIHRocm93IG5ldyBFcnJvcihrRXJy
b3JBcnJheSk7Ci0KLSAgICB2YXIgZW5jb2RlZFNpemUgPSBrQXJyYXlIZWFkZXJTaXplICsgKChj
bHMgPT09IFBhY2tlZEJvb2wpID8KLSAgICAgICAgTWF0aC5jZWlsKG51bWJlck9mRWxlbWVudHMg
LyA4KSA6IGNscy5lbmNvZGVkU2l6ZSAqIG51bWJlck9mRWxlbWVudHMpOwotICAgIHZhciBlbmNv
ZGVyID0gdGhpcy5jcmVhdGVBbmRFbmNvZGVFbmNvZGVyKGVuY29kZWRTaXplKTsKLSAgICBlbmNv
ZGVyLmVuY29kZUFycmF5KGNscywgdmFsLCBudW1iZXJPZkVsZW1lbnRzLCBlbmNvZGVkU2l6ZSk7
Ci0gIH07Ci0KLSAgRW5jb2Rlci5wcm90b3R5cGUuZW5jb2RlU3RyaW5nUG9pbnRlciA9IGZ1bmN0
aW9uKHZhbCkgewotICAgIGlmICh2YWwgPT0gbnVsbCkgewotICAgICAgLy8gQWxzbyBoYW5kbGVz
IHVuZGVmaW5lZCwgc2luY2UgdW5kZWZpbmVkID09IG51bGwuCi0gICAgICB0aGlzLmVuY29kZVBv
aW50ZXIodmFsKTsKLSAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgLy8gT25seSBhY2NlcHRzIHN0
cmluZyBwcmltaXZpdGVzLCBub3QgU3RyaW5nIE9iamVjdHMgbGlrZSBuZXcgU3RyaW5nKCJmb28i
KQotICAgIGlmICh0eXBlb2YodmFsKSAhPT0gInN0cmluZyIpIHsKLSAgICAgIHRocm93IG5ldyBF
cnJvcihrRXJyb3JTdHJpbmcpOwotICAgIH0KLSAgICB2YXIgZW5jb2RlZFNpemUgPSBrQXJyYXlI
ZWFkZXJTaXplICsgaW50ZXJuYWwudXRmOExlbmd0aCh2YWwpOwotICAgIHZhciBlbmNvZGVyID0g
dGhpcy5jcmVhdGVBbmRFbmNvZGVFbmNvZGVyKGVuY29kZWRTaXplKTsKLSAgICBlbmNvZGVyLmVu
Y29kZVN0cmluZyh2YWwpOwotICB9OwotCi0gIEVuY29kZXIucHJvdG90eXBlLmVuY29kZU1hcCA9
IGZ1bmN0aW9uKGtleUNsYXNzLCB2YWx1ZUNsYXNzLCB2YWwpIHsKLSAgICB2YXIga2V5cyA9IG5l
dyBBcnJheSh2YWwuc2l6ZSk7Ci0gICAgdmFyIHZhbHVlcyA9IG5ldyBBcnJheSh2YWwuc2l6ZSk7
Ci0gICAgdmFyIGkgPSAwOwotICAgIHZhbC5mb3JFYWNoKGZ1bmN0aW9uKHZhbHVlLCBrZXkpIHsK
LSAgICAgIHZhbHVlc1tpXSA9IHZhbHVlOwotICAgICAga2V5c1tpKytdID0ga2V5OwotICAgIH0p
OwotICAgIHRoaXMud3JpdGVVaW50MzIoa1N0cnVjdEhlYWRlclNpemUgKyBrTWFwU3RydWN0UGF5
bG9hZFNpemUpOwotICAgIHRoaXMud3JpdGVVaW50MzIoMCk7ICAvLyB2ZXJzaW9uCi0gICAgdGhp
cy5lbmNvZGVBcnJheVBvaW50ZXIoa2V5Q2xhc3MsIGtleXMpOwotICAgIHRoaXMuZW5jb2RlQXJy
YXlQb2ludGVyKHZhbHVlQ2xhc3MsIHZhbHVlcyk7Ci0gIH0KLQotICBFbmNvZGVyLnByb3RvdHlw
ZS5lbmNvZGVNYXBQb2ludGVyID0gZnVuY3Rpb24oa2V5Q2xhc3MsIHZhbHVlQ2xhc3MsIHZhbCkg
ewotICAgIGlmICh2YWwgPT0gbnVsbCkgewotICAgICAgLy8gQWxzbyBoYW5kbGVzIHVuZGVmaW5l
ZCwgc2luY2UgdW5kZWZpbmVkID09IG51bGwuCi0gICAgICB0aGlzLmVuY29kZVBvaW50ZXIodmFs
KTsKLSAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYgKCEodmFsIGluc3RhbmNlb2YgTWFwKSkg
ewotICAgICAgdGhyb3cgbmV3IEVycm9yKGtFcnJvck1hcCk7Ci0gICAgfQotICAgIHZhciBlbmNv
ZGVkU2l6ZSA9IGtTdHJ1Y3RIZWFkZXJTaXplICsga01hcFN0cnVjdFBheWxvYWRTaXplOwotICAg
IHZhciBlbmNvZGVyID0gdGhpcy5jcmVhdGVBbmRFbmNvZGVFbmNvZGVyKGVuY29kZWRTaXplKTsK
LSAgICBlbmNvZGVyLmVuY29kZU1hcChrZXlDbGFzcywgdmFsdWVDbGFzcywgdmFsKTsKLSAgfTsK
LQotICAvLyBNZXNzYWdlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0gIHZhciBrTWVzc2FnZUludGVyZmFjZUlkT2Zm
c2V0ID0ga1N0cnVjdEhlYWRlclNpemU7Ci0gIHZhciBrTWVzc2FnZU5hbWVPZmZzZXQgPSBrTWVz
c2FnZUludGVyZmFjZUlkT2Zmc2V0ICsgNDsKLSAgdmFyIGtNZXNzYWdlRmxhZ3NPZmZzZXQgPSBr
TWVzc2FnZU5hbWVPZmZzZXQgKyA0OwotICB2YXIga01lc3NhZ2VSZXF1ZXN0SURPZmZzZXQgPSBr
TWVzc2FnZUZsYWdzT2Zmc2V0ICsgODsKLSAgdmFyIGtNZXNzYWdlUGF5bG9hZEludGVyZmFjZUlk
c1BvaW50ZXJPZmZzZXQgPSBrTWVzc2FnZVYySGVhZGVyU2l6ZSAtIDg7Ci0KLSAgdmFyIGtNZXNz
YWdlRXhwZWN0c1Jlc3BvbnNlID0gMSA8PCAwOwotICB2YXIga01lc3NhZ2VJc1Jlc3BvbnNlICAg
ICAgPSAxIDw8IDE7Ci0KLSAgZnVuY3Rpb24gTWVzc2FnZShidWZmZXIsIGhhbmRsZXMsIGFzc29j
aWF0ZWRFbmRwb2ludEhhbmRsZXMpIHsKLSAgICBpZiAoYXNzb2NpYXRlZEVuZHBvaW50SGFuZGxl
cyA9PT0gdW5kZWZpbmVkKSB7Ci0gICAgICBhc3NvY2lhdGVkRW5kcG9pbnRIYW5kbGVzID0gW107
Ci0gICAgfQotCi0gICAgdGhpcy5idWZmZXIgPSBidWZmZXI7Ci0gICAgdGhpcy5oYW5kbGVzID0g
aGFuZGxlczsKLSAgICB0aGlzLmFzc29jaWF0ZWRFbmRwb2ludEhhbmRsZXMgPSBhc3NvY2lhdGVk
RW5kcG9pbnRIYW5kbGVzOwotICB9Ci0KLSAgTWVzc2FnZS5wcm90b3R5cGUuZ2V0SGVhZGVyTnVt
Qnl0ZXMgPSBmdW5jdGlvbigpIHsKLSAgICByZXR1cm4gdGhpcy5idWZmZXIuZ2V0VWludDMyKGtT
dHJ1Y3RIZWFkZXJOdW1CeXRlc09mZnNldCk7Ci0gIH07Ci0KLSAgTWVzc2FnZS5wcm90b3R5cGUu
Z2V0SGVhZGVyVmVyc2lvbiA9IGZ1bmN0aW9uKCkgewotICAgIHJldHVybiB0aGlzLmJ1ZmZlci5n
ZXRVaW50MzIoa1N0cnVjdEhlYWRlclZlcnNpb25PZmZzZXQpOwotICB9OwotCi0gIE1lc3NhZ2Uu
cHJvdG90eXBlLmdldE5hbWUgPSBmdW5jdGlvbigpIHsKLSAgICByZXR1cm4gdGhpcy5idWZmZXIu
Z2V0VWludDMyKGtNZXNzYWdlTmFtZU9mZnNldCk7Ci0gIH07Ci0KLSAgTWVzc2FnZS5wcm90b3R5
cGUuZ2V0RmxhZ3MgPSBmdW5jdGlvbigpIHsKLSAgICByZXR1cm4gdGhpcy5idWZmZXIuZ2V0VWlu
dDMyKGtNZXNzYWdlRmxhZ3NPZmZzZXQpOwotICB9OwotCi0gIE1lc3NhZ2UucHJvdG90eXBlLmdl
dEludGVyZmFjZUlkID0gZnVuY3Rpb24oKSB7Ci0gICAgcmV0dXJuIHRoaXMuYnVmZmVyLmdldFVp
bnQzMihrTWVzc2FnZUludGVyZmFjZUlkT2Zmc2V0KTsKLSAgfTsKLQotICBNZXNzYWdlLnByb3Rv
dHlwZS5nZXRQYXlsb2FkSW50ZXJmYWNlSWRzID0gZnVuY3Rpb24oKSB7Ci0gICAgaWYgKHRoaXMu
Z2V0SGVhZGVyVmVyc2lvbigpIDwgMikgewotICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfQotCi0g
ICAgdmFyIGRlY29kZXIgPSBuZXcgRGVjb2Rlcih0aGlzLmJ1ZmZlciwgdGhpcy5oYW5kbGVzLAot
ICAgICAgICB0aGlzLmFzc29jaWF0ZWRFbmRwb2ludEhhbmRsZXMsCi0gICAgICAgIGtNZXNzYWdl
UGF5bG9hZEludGVyZmFjZUlkc1BvaW50ZXJPZmZzZXQpOwotICAgIHZhciBwYXlsb2FkSW50ZXJm
YWNlSWRzID0gZGVjb2Rlci5kZWNvZGVBcnJheVBvaW50ZXIoVWludDMyKTsKLSAgICByZXR1cm4g
cGF5bG9hZEludGVyZmFjZUlkczsKLSAgfTsKLQotICBNZXNzYWdlLnByb3RvdHlwZS5pc1Jlc3Bv
bnNlID0gZnVuY3Rpb24oKSB7Ci0gICAgcmV0dXJuICh0aGlzLmdldEZsYWdzKCkgJiBrTWVzc2Fn
ZUlzUmVzcG9uc2UpICE9IDA7Ci0gIH07Ci0KLSAgTWVzc2FnZS5wcm90b3R5cGUuZXhwZWN0c1Jl
c3BvbnNlID0gZnVuY3Rpb24oKSB7Ci0gICAgcmV0dXJuICh0aGlzLmdldEZsYWdzKCkgJiBrTWVz
c2FnZUV4cGVjdHNSZXNwb25zZSkgIT0gMDsKLSAgfTsKLQotICBNZXNzYWdlLnByb3RvdHlwZS5z
ZXRSZXF1ZXN0SUQgPSBmdW5jdGlvbihyZXF1ZXN0SUQpIHsKLSAgICAvLyBUT0RPKGRhcmluKTog
VmVyaWZ5IHRoYXQgc3BhY2Ugd2FzIHJlc2VydmVkIGZvciB0aGlzIGZpZWxkIQotICAgIHRoaXMu
YnVmZmVyLnNldFVpbnQ2NChrTWVzc2FnZVJlcXVlc3RJRE9mZnNldCwgcmVxdWVzdElEKTsKLSAg
fTsKLQotICBNZXNzYWdlLnByb3RvdHlwZS5zZXRJbnRlcmZhY2VJZCA9IGZ1bmN0aW9uKGludGVy
ZmFjZUlkKSB7Ci0gICAgdGhpcy5idWZmZXIuc2V0VWludDMyKGtNZXNzYWdlSW50ZXJmYWNlSWRP
ZmZzZXQsIGludGVyZmFjZUlkKTsKLSAgfTsKLQotICBNZXNzYWdlLnByb3RvdHlwZS5zZXRQYXls
b2FkSW50ZXJmYWNlSWRzXyA9IGZ1bmN0aW9uKHBheWxvYWRJbnRlcmZhY2VJZHMpIHsKLSAgICBp
ZiAodGhpcy5nZXRIZWFkZXJWZXJzaW9uKCkgPCAyKSB7Ci0gICAgICB0aHJvdyBuZXcgRXJyb3Io
Ci0gICAgICAgICAgIlZlcnNpb24gb2YgbWVzc2FnZSBkb2VzIG5vdCBzdXBwb3J0IHBheWxvYWQg
aW50ZXJmYWNlIGlkcyIpOwotICAgIH0KLQotICAgIHZhciBkZWNvZGVyID0gbmV3IERlY29kZXIo
dGhpcy5idWZmZXIsIHRoaXMuaGFuZGxlcywKLSAgICAgICAgdGhpcy5hc3NvY2lhdGVkRW5kcG9p
bnRIYW5kbGVzLAotICAgICAgICBrTWVzc2FnZVBheWxvYWRJbnRlcmZhY2VJZHNQb2ludGVyT2Zm
c2V0KTsKLSAgICB2YXIgcGF5bG9hZEludGVyZmFjZUlkc09mZnNldCA9IGRlY29kZXIuZGVjb2Rl
UG9pbnRlcigpOwotICAgIHZhciBlbmNvZGVyID0gbmV3IEVuY29kZXIodGhpcy5idWZmZXIsIHRo
aXMuaGFuZGxlcywKLSAgICAgICAgdGhpcy5hc3NvY2lhdGVkRW5kcG9pbnRIYW5kbGVzLAotICAg
ICAgICBwYXlsb2FkSW50ZXJmYWNlSWRzT2Zmc2V0KTsKLSAgICBlbmNvZGVyLmVuY29kZUFycmF5
KFVpbnQzMiwgcGF5bG9hZEludGVyZmFjZUlkcyk7Ci0gIH07Ci0KLSAgTWVzc2FnZS5wcm90b3R5
cGUuc2VyaWFsaXplQXNzb2NpYXRlZEVuZHBvaW50SGFuZGxlcyA9IGZ1bmN0aW9uKAotICAgICAg
YXNzb2NpYXRlZEdyb3VwQ29udHJvbGxlcikgewotICAgIGlmICh0aGlzLmFzc29jaWF0ZWRFbmRw
b2ludEhhbmRsZXMubGVuZ3RoID4gMCkgewotICAgICAgaWYgKHRoaXMuZ2V0SGVhZGVyVmVyc2lv
bigpIDwgMikgewotICAgICAgICB0aHJvdyBuZXcgRXJyb3IoCi0gICAgICAgICAgICAiVmVyc2lv
biBvZiBtZXNzYWdlIGRvZXMgbm90IHN1cHBvcnQgYXNzb2NpYXRlZCBlbmRwb2ludCBoYW5kbGVz
Iik7Ci0gICAgICB9Ci0KLSAgICAgIHZhciBkYXRhID0gW107Ci0gICAgICBmb3IgKHZhciBpID0g
MDsgaSA8IHRoaXMuYXNzb2NpYXRlZEVuZHBvaW50SGFuZGxlcy5sZW5ndGg7IGkrKykgewotICAg
ICAgICB2YXIgaGFuZGxlID0gdGhpcy5hc3NvY2lhdGVkRW5kcG9pbnRIYW5kbGVzW2ldOwotICAg
ICAgICBkYXRhLnB1c2goYXNzb2NpYXRlZEdyb3VwQ29udHJvbGxlci5hc3NvY2lhdGVJbnRlcmZh
Y2UoaGFuZGxlKSk7Ci0gICAgICB9Ci0gICAgICB0aGlzLmFzc29jaWF0ZWRFbmRwb2ludEhhbmRs
ZXMgPSBbXTsKLSAgICAgIHRoaXMuc2V0UGF5bG9hZEludGVyZmFjZUlkc18oZGF0YSk7Ci0gICAg
fQotICB9OwotCi0gIE1lc3NhZ2UucHJvdG90eXBlLmRlc2VyaWFsaXplQXNzb2NpYXRlZEVuZHBv
aW50SGFuZGxlcyA9IGZ1bmN0aW9uKAotICAgICAgYXNzb2NpYXRlZEdyb3VwQ29udHJvbGxlcikg
ewotICAgIGlmICh0aGlzLmdldEhlYWRlclZlcnNpb24oKSA8IDIpIHsKLSAgICAgIHJldHVybiB0
cnVlOwotICAgIH0KLQotICAgIHRoaXMuYXNzb2NpYXRlZEVuZHBvaW50SGFuZGxlcyA9IFtdOwot
ICAgIHZhciBpZHMgPSB0aGlzLmdldFBheWxvYWRJbnRlcmZhY2VJZHMoKTsKLQotICAgIHZhciBy
ZXN1bHQgPSB0cnVlOwotICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaWRzLmxlbmd0aDsgaSsrKSB7
Ci0gICAgICB2YXIgaGFuZGxlID0gYXNzb2NpYXRlZEdyb3VwQ29udHJvbGxlci5jcmVhdGVMb2Nh
bEVuZHBvaW50SGFuZGxlKGlkc1tpXSk7Ci0gICAgICBpZiAoaW50ZXJuYWwuaXNWYWxpZEludGVy
ZmFjZUlkKGlkc1tpXSkgJiYgIWhhbmRsZS5pc1ZhbGlkKCkpIHsKLSAgICAgICAgLy8gfGlkc1tp
XXwgaXRzZWxmIGlzIHZhbGlkIGJ1dCBoYW5kbGUgY3JlYXRpb24gZmFpbGVkLiBJbiB0aGF0IGNh
c2UsCi0gICAgICAgIC8vIG1hcmsgZGVzZXJpYWxpemF0aW9uIGFzIGZhaWxlZCBidXQgY29udGlu
dWUgdG8gZGVzZXJpYWxpemUgdGhlCi0gICAgICAgIC8vIHJlc3Qgb2YgaGFuZGxlcy4KLSAgICAg
ICAgcmVzdWx0ID0gZmFsc2U7Ci0gICAgICB9Ci0gICAgICB0aGlzLmFzc29jaWF0ZWRFbmRwb2lu
dEhhbmRsZXMucHVzaChoYW5kbGUpOwotICAgICAgaWRzW2ldID0gaW50ZXJuYWwua0ludmFsaWRJ
bnRlcmZhY2VJZDsKLSAgICB9Ci0KLSAgICB0aGlzLnNldFBheWxvYWRJbnRlcmZhY2VJZHNfKGlk
cyk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLSAgfTsKLQotCi0gIC8vIE1lc3NhZ2VWMEJ1aWxkZXIg
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
Ci0KLSAgZnVuY3Rpb24gTWVzc2FnZVYwQnVpbGRlcihtZXNzYWdlTmFtZSwgcGF5bG9hZFNpemUp
IHsKLSAgICAvLyBDdXJyZW50bHksIHdlIGRvbid0IGNvbXB1dGUgdGhlIHBheWxvYWQgc2l6ZSBj
b3JyZWN0bHkgYWhlYWQgb2YgdGltZS4KLSAgICAvLyBJbnN0ZWFkLCB3ZSByZXNpemUgdGhlIGJ1
ZmZlciBhdCB0aGUgZW5kLgotICAgIHZhciBudW1iZXJPZkJ5dGVzID0ga01lc3NhZ2VWMEhlYWRl
clNpemUgKyBwYXlsb2FkU2l6ZTsKLSAgICB0aGlzLmJ1ZmZlciA9IG5ldyBpbnRlcm5hbC5CdWZm
ZXIobnVtYmVyT2ZCeXRlcyk7Ci0gICAgdGhpcy5oYW5kbGVzID0gW107Ci0gICAgdmFyIGVuY29k
ZXIgPSB0aGlzLmNyZWF0ZUVuY29kZXIoa01lc3NhZ2VWMEhlYWRlclNpemUpOwotICAgIGVuY29k
ZXIud3JpdGVVaW50MzIoa01lc3NhZ2VWMEhlYWRlclNpemUpOwotICAgIGVuY29kZXIud3JpdGVV
aW50MzIoMCk7ICAvLyB2ZXJzaW9uLgotICAgIGVuY29kZXIud3JpdGVVaW50MzIoMCk7ICAvLyBp
bnRlcmZhY2UgSUQuCi0gICAgZW5jb2Rlci53cml0ZVVpbnQzMihtZXNzYWdlTmFtZSk7Ci0gICAg
ZW5jb2Rlci53cml0ZVVpbnQzMigwKTsgIC8vIGZsYWdzLgotICAgIGVuY29kZXIud3JpdGVVaW50
MzIoMCk7ICAvLyBwYWRkaW5nLgotICB9Ci0KLSAgTWVzc2FnZVYwQnVpbGRlci5wcm90b3R5cGUu
Y3JlYXRlRW5jb2RlciA9IGZ1bmN0aW9uKHNpemUpIHsKLSAgICB2YXIgcG9pbnRlciA9IHRoaXMu
YnVmZmVyLmFsbG9jKHNpemUpOwotICAgIHJldHVybiBuZXcgRW5jb2Rlcih0aGlzLmJ1ZmZlciwg
dGhpcy5oYW5kbGVzLCBbXSwgcG9pbnRlcik7Ci0gIH07Ci0KLSAgTWVzc2FnZVYwQnVpbGRlci5w
cm90b3R5cGUuZW5jb2RlU3RydWN0ID0gZnVuY3Rpb24oY2xzLCB2YWwpIHsKLSAgICBjbHMuZW5j
b2RlKHRoaXMuY3JlYXRlRW5jb2RlcihjbHMuZW5jb2RlZFNpemUpLCB2YWwpOwotICB9OwotCi0g
IE1lc3NhZ2VWMEJ1aWxkZXIucHJvdG90eXBlLmZpbmlzaCA9IGZ1bmN0aW9uKCkgewotICAgIC8v
IFRPRE8oYWJhcnRoKTogUmF0aGVyIHRoYW4gcmVzaXppbmcgdGhlIGJ1ZmZlciBhdCB0aGUgZW5k
LCB3ZSBjb3VsZAotICAgIC8vIGNvbXB1dGUgdGhlIHNpemUgd2UgbmVlZCBhaGVhZCBvZiB0aW1l
LCBsaWtlIHdlIGRvIGluIEMrKy4KLSAgICB0aGlzLmJ1ZmZlci50cmltKCk7Ci0gICAgdmFyIG1l
c3NhZ2UgPSBuZXcgTWVzc2FnZSh0aGlzLmJ1ZmZlciwgdGhpcy5oYW5kbGVzKTsKLSAgICB0aGlz
LmJ1ZmZlciA9IG51bGw7Ci0gICAgdGhpcy5oYW5kbGVzID0gbnVsbDsKLSAgICB0aGlzLmVuY29k
ZXIgPSBudWxsOwotICAgIHJldHVybiBtZXNzYWdlOwotICB9OwotCi0gIC8vIE1lc3NhZ2VWMUJ1
aWxkZXIgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQot
ICBmdW5jdGlvbiBNZXNzYWdlVjFCdWlsZGVyKG1lc3NhZ2VOYW1lLCBwYXlsb2FkU2l6ZSwgZmxh
Z3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0SUQpIHsK
LSAgICAvLyBDdXJyZW50bHksIHdlIGRvbid0IGNvbXB1dGUgdGhlIHBheWxvYWQgc2l6ZSBjb3Jy
ZWN0bHkgYWhlYWQgb2YgdGltZS4KLSAgICAvLyBJbnN0ZWFkLCB3ZSByZXNpemUgdGhlIGJ1ZmZl
ciBhdCB0aGUgZW5kLgotICAgIHZhciBudW1iZXJPZkJ5dGVzID0ga01lc3NhZ2VWMUhlYWRlclNp
emUgKyBwYXlsb2FkU2l6ZTsKLSAgICB0aGlzLmJ1ZmZlciA9IG5ldyBpbnRlcm5hbC5CdWZmZXIo
bnVtYmVyT2ZCeXRlcyk7Ci0gICAgdGhpcy5oYW5kbGVzID0gW107Ci0gICAgdmFyIGVuY29kZXIg
PSB0aGlzLmNyZWF0ZUVuY29kZXIoa01lc3NhZ2VWMUhlYWRlclNpemUpOwotICAgIGVuY29kZXIu
d3JpdGVVaW50MzIoa01lc3NhZ2VWMUhlYWRlclNpemUpOwotICAgIGVuY29kZXIud3JpdGVVaW50
MzIoMSk7ICAvLyB2ZXJzaW9uLgotICAgIGVuY29kZXIud3JpdGVVaW50MzIoMCk7ICAvLyBpbnRl
cmZhY2UgSUQuCi0gICAgZW5jb2Rlci53cml0ZVVpbnQzMihtZXNzYWdlTmFtZSk7Ci0gICAgZW5j
b2Rlci53cml0ZVVpbnQzMihmbGFncyk7Ci0gICAgZW5jb2Rlci53cml0ZVVpbnQzMigwKTsgIC8v
IHBhZGRpbmcuCi0gICAgZW5jb2Rlci53cml0ZVVpbnQ2NChyZXF1ZXN0SUQpOwotICB9Ci0KLSAg
TWVzc2FnZVYxQnVpbGRlci5wcm90b3R5cGUgPQotICAgICAgT2JqZWN0LmNyZWF0ZShNZXNzYWdl
VjBCdWlsZGVyLnByb3RvdHlwZSk7Ci0KLSAgTWVzc2FnZVYxQnVpbGRlci5wcm90b3R5cGUuY29u
c3RydWN0b3IgPQotICAgICAgTWVzc2FnZVYxQnVpbGRlcjsKLQotICAvLyBNZXNzYWdlVjIgLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotICBmdW5jdGlv
biBNZXNzYWdlVjJCdWlsZGVyKG1lc3NhZ2VOYW1lLCBwYXlsb2FkU2l6ZSwgZmxhZ3MsIHJlcXVl
c3RJRCkgewotICAgIC8vIEN1cnJlbnRseSwgd2UgZG9uJ3QgY29tcHV0ZSB0aGUgcGF5bG9hZCBz
aXplIGNvcnJlY3RseSBhaGVhZCBvZiB0aW1lLgotICAgIC8vIEluc3RlYWQsIHdlIHJlc2l6ZSB0
aGUgYnVmZmVyIGF0IHRoZSBlbmQuCi0gICAgdmFyIG51bWJlck9mQnl0ZXMgPSBrTWVzc2FnZVYy
SGVhZGVyU2l6ZSArIHBheWxvYWRTaXplOwotICAgIHRoaXMuYnVmZmVyID0gbmV3IGludGVybmFs
LkJ1ZmZlcihudW1iZXJPZkJ5dGVzKTsKLSAgICB0aGlzLmhhbmRsZXMgPSBbXTsKLQotICAgIHRo
aXMucGF5bG9hZCA9IG51bGw7Ci0gICAgdGhpcy5hc3NvY2lhdGVkRW5kcG9pbnRIYW5kbGVzID0g
W107Ci0KLSAgICB0aGlzLmVuY29kZXIgPSB0aGlzLmNyZWF0ZUVuY29kZXIoa01lc3NhZ2VWMkhl
YWRlclNpemUpOwotICAgIHRoaXMuZW5jb2Rlci53cml0ZVVpbnQzMihrTWVzc2FnZVYySGVhZGVy
U2l6ZSk7Ci0gICAgdGhpcy5lbmNvZGVyLndyaXRlVWludDMyKDIpOyAgLy8gdmVyc2lvbi4KLSAg
ICAvLyBHZXRzIHNldCB0byBhbiBhcHByb3ByaWF0ZSBpbnRlcmZhY2VJZCBmb3IgdGhlIGVuZHBv
aW50IGJ5IHRoZSBSb3V0ZXIuCi0gICAgdGhpcy5lbmNvZGVyLndyaXRlVWludDMyKDApOyAgLy8g
aW50ZXJmYWNlIElELgotICAgIHRoaXMuZW5jb2Rlci53cml0ZVVpbnQzMihtZXNzYWdlTmFtZSk7
Ci0gICAgdGhpcy5lbmNvZGVyLndyaXRlVWludDMyKGZsYWdzKTsKLSAgICB0aGlzLmVuY29kZXIu
d3JpdGVVaW50MzIoMCk7ICAvLyBwYWRkaW5nLgotICAgIHRoaXMuZW5jb2Rlci53cml0ZVVpbnQ2
NChyZXF1ZXN0SUQpOwotICB9Ci0KLSAgTWVzc2FnZVYyQnVpbGRlci5wcm90b3R5cGUuY3JlYXRl
RW5jb2RlciA9IGZ1bmN0aW9uKHNpemUpIHsKLSAgICB2YXIgcG9pbnRlciA9IHRoaXMuYnVmZmVy
LmFsbG9jKHNpemUpOwotICAgIHJldHVybiBuZXcgRW5jb2Rlcih0aGlzLmJ1ZmZlciwgdGhpcy5o
YW5kbGVzLAotICAgICAgICB0aGlzLmFzc29jaWF0ZWRFbmRwb2ludEhhbmRsZXMsIHBvaW50ZXIp
OwotICB9OwotCi0gIE1lc3NhZ2VWMkJ1aWxkZXIucHJvdG90eXBlLnNldFBheWxvYWQgPSBmdW5j
dGlvbihjbHMsIHZhbCkgewotICAgIHRoaXMucGF5bG9hZCA9IHtjbHM6IGNscywgdmFsOiB2YWx9
OwotICB9OwotCi0gIE1lc3NhZ2VWMkJ1aWxkZXIucHJvdG90eXBlLmZpbmlzaCA9IGZ1bmN0aW9u
KCkgewotICAgIGlmICghdGhpcy5wYXlsb2FkKSB7Ci0gICAgICB0aHJvdyBuZXcgRXJyb3IoIlBh
eWxvYWQgbmVlZHMgdG8gYmUgc2V0IGJlZm9yZSBjYWxsaW5nIGZpbmlzaCIpOwotICAgIH0KLQot
ICAgIHRoaXMuZW5jb2Rlci5lbmNvZGVTdHJ1Y3RQb2ludGVyKHRoaXMucGF5bG9hZC5jbHMsIHRo
aXMucGF5bG9hZC52YWwpOwotICAgIHRoaXMuZW5jb2Rlci5lbmNvZGVBcnJheVBvaW50ZXIoVWlu
dDMyLAotICAgICAgICBuZXcgQXJyYXkodGhpcy5hc3NvY2lhdGVkRW5kcG9pbnRIYW5kbGVzLmxl
bmd0aCkpOwotCi0gICAgdGhpcy5idWZmZXIudHJpbSgpOwotICAgIHZhciBtZXNzYWdlID0gbmV3
IE1lc3NhZ2UodGhpcy5idWZmZXIsIHRoaXMuaGFuZGxlcywKLSAgICAgICAgdGhpcy5hc3NvY2lh
dGVkRW5kcG9pbnRIYW5kbGVzKTsKLSAgICB0aGlzLmJ1ZmZlciA9IG51bGw7Ci0gICAgdGhpcy5o
YW5kbGVzID0gbnVsbDsKLSAgICB0aGlzLmVuY29kZXIgPSBudWxsOwotICAgIHRoaXMucGF5bG9h
ZCA9IG51bGw7Ci0gICAgdGhpcy5hc3NvY2lhdGVkRW5kcG9pbnRIYW5kbGVzID0gbnVsbDsKLQot
ICAgIHJldHVybiBtZXNzYWdlOwotICB9OwotCi0gIC8vIE1lc3NhZ2VSZWFkZXIgLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLSAg
ZnVuY3Rpb24gTWVzc2FnZVJlYWRlcihtZXNzYWdlKSB7Ci0gICAgdGhpcy5kZWNvZGVyID0gbmV3
IERlY29kZXIobWVzc2FnZS5idWZmZXIsIG1lc3NhZ2UuaGFuZGxlcywKLSAgICAgICAgbWVzc2Fn
ZS5hc3NvY2lhdGVkRW5kcG9pbnRIYW5kbGVzLCAwKTsKLSAgICB2YXIgbWVzc2FnZUhlYWRlclNp
emUgPSB0aGlzLmRlY29kZXIucmVhZFVpbnQzMigpOwotICAgIHRoaXMucGF5bG9hZFNpemUgPSBt
ZXNzYWdlLmJ1ZmZlci5ieXRlTGVuZ3RoIC0gbWVzc2FnZUhlYWRlclNpemU7Ci0gICAgdmFyIHZl
cnNpb24gPSB0aGlzLmRlY29kZXIucmVhZFVpbnQzMigpOwotICAgIHZhciBpbnRlcmZhY2VfaWQg
PSB0aGlzLmRlY29kZXIucmVhZFVpbnQzMigpOwotICAgIHRoaXMubWVzc2FnZU5hbWUgPSB0aGlz
LmRlY29kZXIucmVhZFVpbnQzMigpOwotICAgIHRoaXMuZmxhZ3MgPSB0aGlzLmRlY29kZXIucmVh
ZFVpbnQzMigpOwotICAgIC8vIFNraXAgdGhlIHBhZGRpbmcuCi0gICAgdGhpcy5kZWNvZGVyLnNr
aXAoNCk7Ci0gICAgaWYgKHZlcnNpb24gPj0gMSkKLSAgICAgIHRoaXMucmVxdWVzdElEID0gdGhp
cy5kZWNvZGVyLnJlYWRVaW50NjQoKTsKLSAgICB0aGlzLmRlY29kZXIuc2tpcChtZXNzYWdlSGVh
ZGVyU2l6ZSAtIHRoaXMuZGVjb2Rlci5uZXh0KTsKLSAgfQotCi0gIE1lc3NhZ2VSZWFkZXIucHJv
dG90eXBlLmRlY29kZVN0cnVjdCA9IGZ1bmN0aW9uKGNscykgewotICAgIHJldHVybiBjbHMuZGVj
b2RlKHRoaXMuZGVjb2Rlcik7Ci0gIH07Ci0KLSAgLy8gQnVpbHQtaW4gdHlwZXMgLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotICAv
LyBUaGlzIHR5cGUgaXMgb25seSB1c2VkIHdpdGggQXJyYXlPZihQYWNrZWRCb29sKS4KLSAgZnVu
Y3Rpb24gUGFja2VkQm9vbCgpIHsKLSAgfQotCi0gIGZ1bmN0aW9uIEludDgoKSB7Ci0gIH0KLQot
ICBJbnQ4LmVuY29kZWRTaXplID0gMTsKLQotICBJbnQ4LmRlY29kZSA9IGZ1bmN0aW9uKGRlY29k
ZXIpIHsKLSAgICByZXR1cm4gZGVjb2Rlci5yZWFkSW50OCgpOwotICB9OwotCi0gIEludDguZW5j
b2RlID0gZnVuY3Rpb24oZW5jb2RlciwgdmFsKSB7Ci0gICAgZW5jb2Rlci53cml0ZUludDgodmFs
KTsKLSAgfTsKLQotICBVaW50OC5lbmNvZGUgPSBmdW5jdGlvbihlbmNvZGVyLCB2YWwpIHsKLSAg
ICBlbmNvZGVyLndyaXRlVWludDgodmFsKTsKLSAgfTsKLQotICBmdW5jdGlvbiBVaW50OCgpIHsK
LSAgfQotCi0gIFVpbnQ4LmVuY29kZWRTaXplID0gMTsKLQotICBVaW50OC5kZWNvZGUgPSBmdW5j
dGlvbihkZWNvZGVyKSB7Ci0gICAgcmV0dXJuIGRlY29kZXIucmVhZFVpbnQ4KCk7Ci0gIH07Ci0K
LSAgVWludDguZW5jb2RlID0gZnVuY3Rpb24oZW5jb2RlciwgdmFsKSB7Ci0gICAgZW5jb2Rlci53
cml0ZVVpbnQ4KHZhbCk7Ci0gIH07Ci0KLSAgZnVuY3Rpb24gSW50MTYoKSB7Ci0gIH0KLQotICBJ
bnQxNi5lbmNvZGVkU2l6ZSA9IDI7Ci0KLSAgSW50MTYuZGVjb2RlID0gZnVuY3Rpb24oZGVjb2Rl
cikgewotICAgIHJldHVybiBkZWNvZGVyLnJlYWRJbnQxNigpOwotICB9OwotCi0gIEludDE2LmVu
Y29kZSA9IGZ1bmN0aW9uKGVuY29kZXIsIHZhbCkgewotICAgIGVuY29kZXIud3JpdGVJbnQxNih2
YWwpOwotICB9OwotCi0gIGZ1bmN0aW9uIFVpbnQxNigpIHsKLSAgfQotCi0gIFVpbnQxNi5lbmNv
ZGVkU2l6ZSA9IDI7Ci0KLSAgVWludDE2LmRlY29kZSA9IGZ1bmN0aW9uKGRlY29kZXIpIHsKLSAg
ICByZXR1cm4gZGVjb2Rlci5yZWFkVWludDE2KCk7Ci0gIH07Ci0KLSAgVWludDE2LmVuY29kZSA9
IGZ1bmN0aW9uKGVuY29kZXIsIHZhbCkgewotICAgIGVuY29kZXIud3JpdGVVaW50MTYodmFsKTsK
LSAgfTsKLQotICBmdW5jdGlvbiBJbnQzMigpIHsKLSAgfQotCi0gIEludDMyLmVuY29kZWRTaXpl
ID0gNDsKLQotICBJbnQzMi5kZWNvZGUgPSBmdW5jdGlvbihkZWNvZGVyKSB7Ci0gICAgcmV0dXJu
IGRlY29kZXIucmVhZEludDMyKCk7Ci0gIH07Ci0KLSAgSW50MzIuZW5jb2RlID0gZnVuY3Rpb24o
ZW5jb2RlciwgdmFsKSB7Ci0gICAgZW5jb2Rlci53cml0ZUludDMyKHZhbCk7Ci0gIH07Ci0KLSAg
ZnVuY3Rpb24gVWludDMyKCkgewotICB9Ci0KLSAgVWludDMyLmVuY29kZWRTaXplID0gNDsKLQot
ICBVaW50MzIuZGVjb2RlID0gZnVuY3Rpb24oZGVjb2RlcikgewotICAgIHJldHVybiBkZWNvZGVy
LnJlYWRVaW50MzIoKTsKLSAgfTsKLQotICBVaW50MzIuZW5jb2RlID0gZnVuY3Rpb24oZW5jb2Rl
ciwgdmFsKSB7Ci0gICAgZW5jb2Rlci53cml0ZVVpbnQzMih2YWwpOwotICB9OwotCi0gIGZ1bmN0
aW9uIEludDY0KCkgewotICB9Ci0KLSAgSW50NjQuZW5jb2RlZFNpemUgPSA4OwotCi0gIEludDY0
LmRlY29kZSA9IGZ1bmN0aW9uKGRlY29kZXIpIHsKLSAgICByZXR1cm4gZGVjb2Rlci5yZWFkSW50
NjQoKTsKLSAgfTsKLQotICBJbnQ2NC5lbmNvZGUgPSBmdW5jdGlvbihlbmNvZGVyLCB2YWwpIHsK
LSAgICBlbmNvZGVyLndyaXRlSW50NjQodmFsKTsKLSAgfTsKLQotICBmdW5jdGlvbiBVaW50NjQo
KSB7Ci0gIH0KLQotICBVaW50NjQuZW5jb2RlZFNpemUgPSA4OwotCi0gIFVpbnQ2NC5kZWNvZGUg
PSBmdW5jdGlvbihkZWNvZGVyKSB7Ci0gICAgcmV0dXJuIGRlY29kZXIucmVhZFVpbnQ2NCgpOwot
ICB9OwotCi0gIFVpbnQ2NC5lbmNvZGUgPSBmdW5jdGlvbihlbmNvZGVyLCB2YWwpIHsKLSAgICBl
bmNvZGVyLndyaXRlVWludDY0KHZhbCk7Ci0gIH07Ci0KLSAgZnVuY3Rpb24gU3RyaW5nKCkgewot
ICB9OwotCi0gIFN0cmluZy5lbmNvZGVkU2l6ZSA9IDg7Ci0KLSAgU3RyaW5nLmRlY29kZSA9IGZ1
bmN0aW9uKGRlY29kZXIpIHsKLSAgICByZXR1cm4gZGVjb2Rlci5kZWNvZGVTdHJpbmdQb2ludGVy
KCk7Ci0gIH07Ci0KLSAgU3RyaW5nLmVuY29kZSA9IGZ1bmN0aW9uKGVuY29kZXIsIHZhbCkgewot
ICAgIGVuY29kZXIuZW5jb2RlU3RyaW5nUG9pbnRlcih2YWwpOwotICB9OwotCi0gIGZ1bmN0aW9u
IE51bGxhYmxlU3RyaW5nKCkgewotICB9Ci0KLSAgTnVsbGFibGVTdHJpbmcuZW5jb2RlZFNpemUg
PSBTdHJpbmcuZW5jb2RlZFNpemU7Ci0KLSAgTnVsbGFibGVTdHJpbmcuZGVjb2RlID0gU3RyaW5n
LmRlY29kZTsKLQotICBOdWxsYWJsZVN0cmluZy5lbmNvZGUgPSBTdHJpbmcuZW5jb2RlOwotCi0g
IGZ1bmN0aW9uIEZsb2F0KCkgewotICB9Ci0KLSAgRmxvYXQuZW5jb2RlZFNpemUgPSA0OwotCi0g
IEZsb2F0LmRlY29kZSA9IGZ1bmN0aW9uKGRlY29kZXIpIHsKLSAgICByZXR1cm4gZGVjb2Rlci5y
ZWFkRmxvYXQoKTsKLSAgfTsKLQotICBGbG9hdC5lbmNvZGUgPSBmdW5jdGlvbihlbmNvZGVyLCB2
YWwpIHsKLSAgICBlbmNvZGVyLndyaXRlRmxvYXQodmFsKTsKLSAgfTsKLQotICBmdW5jdGlvbiBE
b3VibGUoKSB7Ci0gIH0KLQotICBEb3VibGUuZW5jb2RlZFNpemUgPSA4OwotCi0gIERvdWJsZS5k
ZWNvZGUgPSBmdW5jdGlvbihkZWNvZGVyKSB7Ci0gICAgcmV0dXJuIGRlY29kZXIucmVhZERvdWJs
ZSgpOwotICB9OwotCi0gIERvdWJsZS5lbmNvZGUgPSBmdW5jdGlvbihlbmNvZGVyLCB2YWwpIHsK
LSAgICBlbmNvZGVyLndyaXRlRG91YmxlKHZhbCk7Ci0gIH07Ci0KLSAgZnVuY3Rpb24gRW51bShj
bHMpIHsKLSAgICB0aGlzLmNscyA9IGNsczsKLSAgfQotCi0gIEVudW0ucHJvdG90eXBlLmVuY29k
ZWRTaXplID0gNDsKLQotICBFbnVtLnByb3RvdHlwZS5kZWNvZGUgPSBmdW5jdGlvbihkZWNvZGVy
KSB7Ci0gICAgcmV0dXJuIGRlY29kZXIucmVhZEludDMyKCk7Ci0gIH07Ci0KLSAgRW51bS5wcm90
b3R5cGUuZW5jb2RlID0gZnVuY3Rpb24oZW5jb2RlciwgdmFsKSB7Ci0gICAgZW5jb2Rlci53cml0
ZUludDMyKHZhbCk7Ci0gIH07Ci0KLSAgZnVuY3Rpb24gUG9pbnRlclRvKGNscykgewotICAgIHRo
aXMuY2xzID0gY2xzOwotICB9Ci0KLSAgUG9pbnRlclRvLnByb3RvdHlwZS5lbmNvZGVkU2l6ZSA9
IDg7Ci0KLSAgUG9pbnRlclRvLnByb3RvdHlwZS5kZWNvZGUgPSBmdW5jdGlvbihkZWNvZGVyKSB7
Ci0gICAgdmFyIHBvaW50ZXIgPSBkZWNvZGVyLmRlY29kZVBvaW50ZXIoKTsKLSAgICBpZiAoIXBv
aW50ZXIpIHsKLSAgICAgIHJldHVybiBudWxsOwotICAgIH0KLSAgICByZXR1cm4gdGhpcy5jbHMu
ZGVjb2RlKGRlY29kZXIuZGVjb2RlQW5kQ3JlYXRlRGVjb2Rlcihwb2ludGVyKSk7Ci0gIH07Ci0K
LSAgUG9pbnRlclRvLnByb3RvdHlwZS5lbmNvZGUgPSBmdW5jdGlvbihlbmNvZGVyLCB2YWwpIHsK
LSAgICBpZiAoIXZhbCkgewotICAgICAgZW5jb2Rlci5lbmNvZGVQb2ludGVyKHZhbCk7Ci0gICAg
ICByZXR1cm47Ci0gICAgfQotICAgIHZhciBvYmplY3RFbmNvZGVyID0gZW5jb2Rlci5jcmVhdGVB
bmRFbmNvZGVFbmNvZGVyKHRoaXMuY2xzLmVuY29kZWRTaXplKTsKLSAgICB0aGlzLmNscy5lbmNv
ZGUob2JqZWN0RW5jb2RlciwgdmFsKTsKLSAgfTsKLQotICBmdW5jdGlvbiBOdWxsYWJsZVBvaW50
ZXJUbyhjbHMpIHsKLSAgICBQb2ludGVyVG8uY2FsbCh0aGlzLCBjbHMpOwotICB9Ci0KLSAgTnVs
bGFibGVQb2ludGVyVG8ucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShQb2ludGVyVG8ucHJvdG90
eXBlKTsKLQotICBmdW5jdGlvbiBBcnJheU9mKGNscywgbGVuZ3RoKSB7Ci0gICAgdGhpcy5jbHMg
PSBjbHM7Ci0gICAgdGhpcy5sZW5ndGggPSBsZW5ndGggfHwgMDsKLSAgfQotCi0gIEFycmF5T2Yu
cHJvdG90eXBlLmVuY29kZWRTaXplID0gODsKLQotICBBcnJheU9mLnByb3RvdHlwZS5kaW1lbnNp
b25zID0gZnVuY3Rpb24oKSB7Ci0gICAgcmV0dXJuIFt0aGlzLmxlbmd0aF0uY29uY2F0KAotICAg
ICAgKHRoaXMuY2xzIGluc3RhbmNlb2YgQXJyYXlPZikgPyB0aGlzLmNscy5kaW1lbnNpb25zKCkg
OiBbXSk7Ci0gIH0KLQotICBBcnJheU9mLnByb3RvdHlwZS5kZWNvZGUgPSBmdW5jdGlvbihkZWNv
ZGVyKSB7Ci0gICAgcmV0dXJuIGRlY29kZXIuZGVjb2RlQXJyYXlQb2ludGVyKHRoaXMuY2xzKTsK
LSAgfTsKLQotICBBcnJheU9mLnByb3RvdHlwZS5lbmNvZGUgPSBmdW5jdGlvbihlbmNvZGVyLCB2
YWwpIHsKLSAgICBlbmNvZGVyLmVuY29kZUFycmF5UG9pbnRlcih0aGlzLmNscywgdmFsKTsKLSAg
fTsKLQotICBmdW5jdGlvbiBOdWxsYWJsZUFycmF5T2YoY2xzKSB7Ci0gICAgQXJyYXlPZi5jYWxs
KHRoaXMsIGNscyk7Ci0gIH0KLQotICBOdWxsYWJsZUFycmF5T2YucHJvdG90eXBlID0gT2JqZWN0
LmNyZWF0ZShBcnJheU9mLnByb3RvdHlwZSk7Ci0KLSAgZnVuY3Rpb24gSGFuZGxlKCkgewotICB9
Ci0KLSAgSGFuZGxlLmVuY29kZWRTaXplID0gNDsKLQotICBIYW5kbGUuZGVjb2RlID0gZnVuY3Rp
b24oZGVjb2RlcikgewotICAgIHJldHVybiBkZWNvZGVyLmRlY29kZUhhbmRsZSgpOwotICB9Owot
Ci0gIEhhbmRsZS5lbmNvZGUgPSBmdW5jdGlvbihlbmNvZGVyLCB2YWwpIHsKLSAgICBlbmNvZGVy
LmVuY29kZUhhbmRsZSh2YWwpOwotICB9OwotCi0gIGZ1bmN0aW9uIE51bGxhYmxlSGFuZGxlKCkg
ewotICB9Ci0KLSAgTnVsbGFibGVIYW5kbGUuZW5jb2RlZFNpemUgPSBIYW5kbGUuZW5jb2RlZFNp
emU7Ci0KLSAgTnVsbGFibGVIYW5kbGUuZGVjb2RlID0gSGFuZGxlLmRlY29kZTsKLQotICBOdWxs
YWJsZUhhbmRsZS5lbmNvZGUgPSBIYW5kbGUuZW5jb2RlOwotCi0gIGZ1bmN0aW9uIEludGVyZmFj
ZShjbHMpIHsKLSAgICB0aGlzLmNscyA9IGNsczsKLSAgfQotCi0gIEludGVyZmFjZS5wcm90b3R5
cGUuZW5jb2RlZFNpemUgPSA4OwotCi0gIEludGVyZmFjZS5wcm90b3R5cGUuZGVjb2RlID0gZnVu
Y3Rpb24oZGVjb2RlcikgewotICAgIHZhciBpbnRlcmZhY2VQdHJJbmZvID0gbmV3IG1vam8uSW50
ZXJmYWNlUHRySW5mbygKLSAgICAgICAgZGVjb2Rlci5kZWNvZGVIYW5kbGUoKSwgZGVjb2Rlci5y
ZWFkVWludDMyKCkpOwotICAgIHZhciBpbnRlcmZhY2VQdHIgPSBuZXcgdGhpcy5jbHMoKTsKLSAg
ICBpbnRlcmZhY2VQdHIucHRyLmJpbmQoaW50ZXJmYWNlUHRySW5mbyk7Ci0gICAgcmV0dXJuIGlu
dGVyZmFjZVB0cjsKLSAgfTsKLQotICBJbnRlcmZhY2UucHJvdG90eXBlLmVuY29kZSA9IGZ1bmN0
aW9uKGVuY29kZXIsIHZhbCkgewotICAgIHZhciBpbnRlcmZhY2VQdHJJbmZvID0KLSAgICAgICAg
dmFsID8gdmFsLnB0ci5wYXNzSW50ZXJmYWNlKCkgOiBuZXcgbW9qby5JbnRlcmZhY2VQdHJJbmZv
KG51bGwsIDApOwotICAgIGVuY29kZXIuZW5jb2RlSGFuZGxlKGludGVyZmFjZVB0ckluZm8uaGFu
ZGxlKTsKLSAgICBlbmNvZGVyLndyaXRlVWludDMyKGludGVyZmFjZVB0ckluZm8udmVyc2lvbik7
Ci0gIH07Ci0KLSAgZnVuY3Rpb24gTnVsbGFibGVJbnRlcmZhY2UoY2xzKSB7Ci0gICAgSW50ZXJm
YWNlLmNhbGwodGhpcywgY2xzKTsKLSAgfQotCi0gIE51bGxhYmxlSW50ZXJmYWNlLnByb3RvdHlw
ZSA9IE9iamVjdC5jcmVhdGUoSW50ZXJmYWNlLnByb3RvdHlwZSk7Ci0KLSAgZnVuY3Rpb24gQXNz
b2NpYXRlZEludGVyZmFjZVB0ckluZm8oKSB7Ci0gIH0KLQotICBBc3NvY2lhdGVkSW50ZXJmYWNl
UHRySW5mby5wcm90b3R5cGUuZW5jb2RlZFNpemUgPSA4OwotCi0gIEFzc29jaWF0ZWRJbnRlcmZh
Y2VQdHJJbmZvLmRlY29kZSA9IGZ1bmN0aW9uKGRlY29kZXIpIHsKLSAgICByZXR1cm4gbmV3IG1v
am8uQXNzb2NpYXRlZEludGVyZmFjZVB0ckluZm8oCi0gICAgICBkZWNvZGVyLmRlY29kZUFzc29j
aWF0ZWRFbmRwb2ludEhhbmRsZSgpLCBkZWNvZGVyLnJlYWRVaW50MzIoKSk7Ci0gIH07Ci0KLSAg
QXNzb2NpYXRlZEludGVyZmFjZVB0ckluZm8uZW5jb2RlID0gZnVuY3Rpb24oZW5jb2RlciwgdmFs
KSB7Ci0gICAgdmFyIGFzc29jaWF0ZWRpbnRlcmZhY2VQdHJJbmZvID0KLSAgICAgICAgdmFsID8g
dmFsIDogbmV3IG1vam8uQXNzb2NpYXRlZEludGVyZmFjZVB0ckluZm8obnVsbCwgMCk7Ci0gICAg
ZW5jb2Rlci5lbmNvZGVBc3NvY2lhdGVkRW5kcG9pbnRIYW5kbGUoCi0gICAgICAgIGFzc29jaWF0
ZWRpbnRlcmZhY2VQdHJJbmZvLmludGVyZmFjZUVuZHBvaW50SGFuZGxlKTsKLSAgICBlbmNvZGVy
LndyaXRlVWludDMyKGFzc29jaWF0ZWRpbnRlcmZhY2VQdHJJbmZvLnZlcnNpb24pOwotICB9Owot
Ci0gIGZ1bmN0aW9uIE51bGxhYmxlQXNzb2NpYXRlZEludGVyZmFjZVB0ckluZm8oKSB7Ci0gIH0K
LQotICBOdWxsYWJsZUFzc29jaWF0ZWRJbnRlcmZhY2VQdHJJbmZvLmVuY29kZWRTaXplID0KLSAg
ICAgIEFzc29jaWF0ZWRJbnRlcmZhY2VQdHJJbmZvLmVuY29kZWRTaXplOwotCi0gIE51bGxhYmxl
QXNzb2NpYXRlZEludGVyZmFjZVB0ckluZm8uZGVjb2RlID0KLSAgICAgIEFzc29jaWF0ZWRJbnRl
cmZhY2VQdHJJbmZvLmRlY29kZTsKLQotICBOdWxsYWJsZUFzc29jaWF0ZWRJbnRlcmZhY2VQdHJJ
bmZvLmVuY29kZSA9Ci0gICAgICBBc3NvY2lhdGVkSW50ZXJmYWNlUHRySW5mby5lbmNvZGU7Ci0K
LSAgZnVuY3Rpb24gSW50ZXJmYWNlUmVxdWVzdCgpIHsKLSAgfQotCi0gIEludGVyZmFjZVJlcXVl
c3QuZW5jb2RlZFNpemUgPSA0OwotCi0gIEludGVyZmFjZVJlcXVlc3QuZGVjb2RlID0gZnVuY3Rp
b24oZGVjb2RlcikgewotICAgIHJldHVybiBuZXcgbW9qby5JbnRlcmZhY2VSZXF1ZXN0KGRlY29k
ZXIuZGVjb2RlSGFuZGxlKCkpOwotICB9OwotCi0gIEludGVyZmFjZVJlcXVlc3QuZW5jb2RlID0g
ZnVuY3Rpb24oZW5jb2RlciwgdmFsKSB7Ci0gICAgZW5jb2Rlci5lbmNvZGVIYW5kbGUodmFsID8g
dmFsLmhhbmRsZSA6IG51bGwpOwotICB9OwotCi0gIGZ1bmN0aW9uIE51bGxhYmxlSW50ZXJmYWNl
UmVxdWVzdCgpIHsKLSAgfQotCi0gIE51bGxhYmxlSW50ZXJmYWNlUmVxdWVzdC5lbmNvZGVkU2l6
ZSA9IEludGVyZmFjZVJlcXVlc3QuZW5jb2RlZFNpemU7Ci0KLSAgTnVsbGFibGVJbnRlcmZhY2VS
ZXF1ZXN0LmRlY29kZSA9IEludGVyZmFjZVJlcXVlc3QuZGVjb2RlOwotCi0gIE51bGxhYmxlSW50
ZXJmYWNlUmVxdWVzdC5lbmNvZGUgPSBJbnRlcmZhY2VSZXF1ZXN0LmVuY29kZTsKLQotICBmdW5j
dGlvbiBBc3NvY2lhdGVkSW50ZXJmYWNlUmVxdWVzdCgpIHsKLSAgfQotCi0gIEFzc29jaWF0ZWRJ
bnRlcmZhY2VSZXF1ZXN0LmRlY29kZSA9IGZ1bmN0aW9uKGRlY29kZXIpIHsKLSAgICB2YXIgaGFu
ZGxlID0gZGVjb2Rlci5kZWNvZGVBc3NvY2lhdGVkRW5kcG9pbnRIYW5kbGUoKTsKLSAgICByZXR1
cm4gbmV3IG1vam8uQXNzb2NpYXRlZEludGVyZmFjZVJlcXVlc3QoaGFuZGxlKTsKLSAgfTsKLQot
ICBBc3NvY2lhdGVkSW50ZXJmYWNlUmVxdWVzdC5lbmNvZGUgPSBmdW5jdGlvbihlbmNvZGVyLCB2
YWwpIHsKLSAgICBlbmNvZGVyLmVuY29kZUFzc29jaWF0ZWRFbmRwb2ludEhhbmRsZSgKLSAgICAg
ICAgdmFsID8gdmFsLmludGVyZmFjZUVuZHBvaW50SGFuZGxlIDogbnVsbCk7Ci0gIH07Ci0KLSAg
QXNzb2NpYXRlZEludGVyZmFjZVJlcXVlc3QuZW5jb2RlZFNpemUgPSA0OwotCi0gIGZ1bmN0aW9u
IE51bGxhYmxlQXNzb2NpYXRlZEludGVyZmFjZVJlcXVlc3QoKSB7Ci0gIH0KLQotICBOdWxsYWJs
ZUFzc29jaWF0ZWRJbnRlcmZhY2VSZXF1ZXN0LmVuY29kZWRTaXplID0KLSAgICAgIEFzc29jaWF0
ZWRJbnRlcmZhY2VSZXF1ZXN0LmVuY29kZWRTaXplOwotCi0gIE51bGxhYmxlQXNzb2NpYXRlZElu
dGVyZmFjZVJlcXVlc3QuZGVjb2RlID0KLSAgICAgIEFzc29jaWF0ZWRJbnRlcmZhY2VSZXF1ZXN0
LmRlY29kZTsKLQotICBOdWxsYWJsZUFzc29jaWF0ZWRJbnRlcmZhY2VSZXF1ZXN0LmVuY29kZSA9
Ci0gICAgICBBc3NvY2lhdGVkSW50ZXJmYWNlUmVxdWVzdC5lbmNvZGU7Ci0KLSAgZnVuY3Rpb24g
TWFwT2Yoa2V5Q2xhc3MsIHZhbHVlQ2xhc3MpIHsKLSAgICB0aGlzLmtleUNsYXNzID0ga2V5Q2xh
c3M7Ci0gICAgdGhpcy52YWx1ZUNsYXNzID0gdmFsdWVDbGFzczsKLSAgfQotCi0gIE1hcE9mLnBy
b3RvdHlwZS5lbmNvZGVkU2l6ZSA9IDg7Ci0KLSAgTWFwT2YucHJvdG90eXBlLmRlY29kZSA9IGZ1
bmN0aW9uKGRlY29kZXIpIHsKLSAgICByZXR1cm4gZGVjb2Rlci5kZWNvZGVNYXBQb2ludGVyKHRo
aXMua2V5Q2xhc3MsIHRoaXMudmFsdWVDbGFzcyk7Ci0gIH07Ci0KLSAgTWFwT2YucHJvdG90eXBl
LmVuY29kZSA9IGZ1bmN0aW9uKGVuY29kZXIsIHZhbCkgewotICAgIGVuY29kZXIuZW5jb2RlTWFw
UG9pbnRlcih0aGlzLmtleUNsYXNzLCB0aGlzLnZhbHVlQ2xhc3MsIHZhbCk7Ci0gIH07Ci0KLSAg
ZnVuY3Rpb24gTnVsbGFibGVNYXBPZihrZXlDbGFzcywgdmFsdWVDbGFzcykgewotICAgIE1hcE9m
LmNhbGwodGhpcywga2V5Q2xhc3MsIHZhbHVlQ2xhc3MpOwotICB9Ci0KLSAgTnVsbGFibGVNYXBP
Zi5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKE1hcE9mLnByb3RvdHlwZSk7Ci0KLSAgaW50ZXJu
YWwuYWxpZ24gPSBhbGlnbjsKLSAgaW50ZXJuYWwuaXNBbGlnbmVkID0gaXNBbGlnbmVkOwotICBp
bnRlcm5hbC5NZXNzYWdlID0gTWVzc2FnZTsKLSAgaW50ZXJuYWwuTWVzc2FnZVYwQnVpbGRlciA9
IE1lc3NhZ2VWMEJ1aWxkZXI7Ci0gIGludGVybmFsLk1lc3NhZ2VWMUJ1aWxkZXIgPSBNZXNzYWdl
VjFCdWlsZGVyOwotICBpbnRlcm5hbC5NZXNzYWdlVjJCdWlsZGVyID0gTWVzc2FnZVYyQnVpbGRl
cjsKLSAgaW50ZXJuYWwuTWVzc2FnZVJlYWRlciA9IE1lc3NhZ2VSZWFkZXI7Ci0gIGludGVybmFs
LmtBcnJheUhlYWRlclNpemUgPSBrQXJyYXlIZWFkZXJTaXplOwotICBpbnRlcm5hbC5rTWFwU3Ry
dWN0UGF5bG9hZFNpemUgPSBrTWFwU3RydWN0UGF5bG9hZFNpemU7Ci0gIGludGVybmFsLmtTdHJ1
Y3RIZWFkZXJTaXplID0ga1N0cnVjdEhlYWRlclNpemU7Ci0gIGludGVybmFsLmtFbmNvZGVkSW52
YWxpZEhhbmRsZVZhbHVlID0ga0VuY29kZWRJbnZhbGlkSGFuZGxlVmFsdWU7Ci0gIGludGVybmFs
LmtNZXNzYWdlVjBIZWFkZXJTaXplID0ga01lc3NhZ2VWMEhlYWRlclNpemU7Ci0gIGludGVybmFs
LmtNZXNzYWdlVjFIZWFkZXJTaXplID0ga01lc3NhZ2VWMUhlYWRlclNpemU7Ci0gIGludGVybmFs
LmtNZXNzYWdlVjJIZWFkZXJTaXplID0ga01lc3NhZ2VWMkhlYWRlclNpemU7Ci0gIGludGVybmFs
LmtNZXNzYWdlUGF5bG9hZEludGVyZmFjZUlkc1BvaW50ZXJPZmZzZXQgPQotICAgICAga01lc3Nh
Z2VQYXlsb2FkSW50ZXJmYWNlSWRzUG9pbnRlck9mZnNldDsKLSAgaW50ZXJuYWwua01lc3NhZ2VF
eHBlY3RzUmVzcG9uc2UgPSBrTWVzc2FnZUV4cGVjdHNSZXNwb25zZTsKLSAgaW50ZXJuYWwua01l
c3NhZ2VJc1Jlc3BvbnNlID0ga01lc3NhZ2VJc1Jlc3BvbnNlOwotICBpbnRlcm5hbC5JbnQ4ID0g
SW50ODsKLSAgaW50ZXJuYWwuVWludDggPSBVaW50ODsKLSAgaW50ZXJuYWwuSW50MTYgPSBJbnQx
NjsKLSAgaW50ZXJuYWwuVWludDE2ID0gVWludDE2OwotICBpbnRlcm5hbC5JbnQzMiA9IEludDMy
OwotICBpbnRlcm5hbC5VaW50MzIgPSBVaW50MzI7Ci0gIGludGVybmFsLkludDY0ID0gSW50NjQ7
Ci0gIGludGVybmFsLlVpbnQ2NCA9IFVpbnQ2NDsKLSAgaW50ZXJuYWwuRmxvYXQgPSBGbG9hdDsK
LSAgaW50ZXJuYWwuRG91YmxlID0gRG91YmxlOwotICBpbnRlcm5hbC5TdHJpbmcgPSBTdHJpbmc7
Ci0gIGludGVybmFsLkVudW0gPSBFbnVtOwotICBpbnRlcm5hbC5OdWxsYWJsZVN0cmluZyA9IE51
bGxhYmxlU3RyaW5nOwotICBpbnRlcm5hbC5Qb2ludGVyVG8gPSBQb2ludGVyVG87Ci0gIGludGVy
bmFsLk51bGxhYmxlUG9pbnRlclRvID0gTnVsbGFibGVQb2ludGVyVG87Ci0gIGludGVybmFsLkFy
cmF5T2YgPSBBcnJheU9mOwotICBpbnRlcm5hbC5OdWxsYWJsZUFycmF5T2YgPSBOdWxsYWJsZUFy
cmF5T2Y7Ci0gIGludGVybmFsLlBhY2tlZEJvb2wgPSBQYWNrZWRCb29sOwotICBpbnRlcm5hbC5I
YW5kbGUgPSBIYW5kbGU7Ci0gIGludGVybmFsLk51bGxhYmxlSGFuZGxlID0gTnVsbGFibGVIYW5k
bGU7Ci0gIGludGVybmFsLkludGVyZmFjZSA9IEludGVyZmFjZTsKLSAgaW50ZXJuYWwuTnVsbGFi
bGVJbnRlcmZhY2UgPSBOdWxsYWJsZUludGVyZmFjZTsKLSAgaW50ZXJuYWwuSW50ZXJmYWNlUmVx
dWVzdCA9IEludGVyZmFjZVJlcXVlc3Q7Ci0gIGludGVybmFsLk51bGxhYmxlSW50ZXJmYWNlUmVx
dWVzdCA9IE51bGxhYmxlSW50ZXJmYWNlUmVxdWVzdDsKLSAgaW50ZXJuYWwuQXNzb2NpYXRlZElu
dGVyZmFjZVB0ckluZm8gPSBBc3NvY2lhdGVkSW50ZXJmYWNlUHRySW5mbzsKLSAgaW50ZXJuYWwu
TnVsbGFibGVBc3NvY2lhdGVkSW50ZXJmYWNlUHRySW5mbyA9Ci0gICAgICBOdWxsYWJsZUFzc29j
aWF0ZWRJbnRlcmZhY2VQdHJJbmZvOwotICBpbnRlcm5hbC5Bc3NvY2lhdGVkSW50ZXJmYWNlUmVx
dWVzdCA9IEFzc29jaWF0ZWRJbnRlcmZhY2VSZXF1ZXN0OwotICBpbnRlcm5hbC5OdWxsYWJsZUFz
c29jaWF0ZWRJbnRlcmZhY2VSZXF1ZXN0ID0KLSAgICAgIE51bGxhYmxlQXNzb2NpYXRlZEludGVy
ZmFjZVJlcXVlc3Q7Ci0gIGludGVybmFsLk1hcE9mID0gTWFwT2Y7Ci0gIGludGVybmFsLk51bGxh
YmxlTWFwT2YgPSBOdWxsYWJsZU1hcE9mOwotfSkoKTsKLS8vIENvcHlyaWdodCAyMDE0IFRoZSBD
aHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291
cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQot
Ly8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLQotKGZ1bmN0aW9uKCkgewotICB2YXIgaW50
ZXJuYWwgPSBtb2pvLmludGVybmFsOwotCi0gIGZ1bmN0aW9uIENvbm5lY3RvcihoYW5kbGUpIHsK
LSAgICBpZiAoIShoYW5kbGUgaW5zdGFuY2VvZiBNb2pvSGFuZGxlKSkKLSAgICAgIHRocm93IG5l
dyBFcnJvcigiQ29ubmVjdG9yOiBub3QgYSBoYW5kbGUgIiArIGhhbmRsZSk7Ci0gICAgdGhpcy5o
YW5kbGVfID0gaGFuZGxlOwotICAgIHRoaXMuZHJvcFdyaXRlc18gPSBmYWxzZTsKLSAgICB0aGlz
LmVycm9yXyA9IGZhbHNlOwotICAgIHRoaXMuaW5jb21pbmdSZWNlaXZlcl8gPSBudWxsOwotICAg
IHRoaXMucmVhZFdhdGNoZXJfID0gbnVsbDsKLSAgICB0aGlzLmVycm9ySGFuZGxlcl8gPSBudWxs
OwotICAgIHRoaXMucGF1c2VkXyA9IGZhbHNlOwotCi0gICAgdGhpcy53YWl0VG9SZWFkTW9yZSgp
OwotICB9Ci0KLSAgQ29ubmVjdG9yLnByb3RvdHlwZS5jbG9zZSA9IGZ1bmN0aW9uKCkgewotICAg
IHRoaXMuY2FuY2VsV2FpdCgpOwotICAgIGlmICh0aGlzLmhhbmRsZV8gIT0gbnVsbCkgewotICAg
ICAgdGhpcy5oYW5kbGVfLmNsb3NlKCk7Ci0gICAgICB0aGlzLmhhbmRsZV8gPSBudWxsOwotICAg
IH0KLSAgfTsKLQotICBDb25uZWN0b3IucHJvdG90eXBlLnBhdXNlSW5jb21pbmdNZXRob2RDYWxs
UHJvY2Vzc2luZyA9IGZ1bmN0aW9uKCkgewotICAgIGlmICh0aGlzLnBhdXNlZF8pIHsKLSAgICAg
IHJldHVybjsKLSAgICB9Ci0gICAgdGhpcy5wYXVzZWRfPSB0cnVlOwotICAgIHRoaXMuY2FuY2Vs
V2FpdCgpOwotICB9OwotCi0gIENvbm5lY3Rvci5wcm90b3R5cGUucmVzdW1lSW5jb21pbmdNZXRo
b2RDYWxsUHJvY2Vzc2luZyA9IGZ1bmN0aW9uKCkgewotICAgIGlmICghdGhpcy5wYXVzZWRfKSB7
Ci0gICAgICByZXR1cm47Ci0gICAgfQotICAgIHRoaXMucGF1c2VkXz0gZmFsc2U7Ci0gICAgdGhp
cy53YWl0VG9SZWFkTW9yZSgpOwotICB9OwotCi0gIENvbm5lY3Rvci5wcm90b3R5cGUuYWNjZXB0
ID0gZnVuY3Rpb24obWVzc2FnZSkgewotICAgIGlmICh0aGlzLmVycm9yXykKLSAgICAgIHJldHVy
biBmYWxzZTsKLQotICAgIGlmICh0aGlzLmRyb3BXcml0ZXNfKQotICAgICAgcmV0dXJuIHRydWU7
Ci0KLSAgICB2YXIgcmVzdWx0ID0gdGhpcy5oYW5kbGVfLndyaXRlTWVzc2FnZSgKLSAgICAgICAg
bmV3IFVpbnQ4QXJyYXkobWVzc2FnZS5idWZmZXIuYXJyYXlCdWZmZXIpLCBtZXNzYWdlLmhhbmRs
ZXMpOwotICAgIHN3aXRjaCAocmVzdWx0KSB7Ci0gICAgICBjYXNlIE1vam8uUkVTVUxUX09LOgot
ICAgICAgICAvLyBUaGUgaGFuZGxlcyB3ZXJlIHN1Y2Nlc3NmdWxseSB0cmFuc2ZlcnJlZCwgc28g
d2UgZG9uJ3Qgb3duIHRoZW0KLSAgICAgICAgLy8gYW55bW9yZS4KLSAgICAgICAgbWVzc2FnZS5o
YW5kbGVzID0gW107Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBNb2pvLlJFU1VMVF9GQUlM
RURfUFJFQ09ORElUSU9OOgotICAgICAgICAvLyBUaGVyZSdzIG5vIHBvaW50IGluIGNvbnRpbnVp
bmcgdG8gd3JpdGUgdG8gdGhpcyBwaXBlIHNpbmNlIHRoZSBvdGhlcgotICAgICAgICAvLyBlbmQg
aXMgZ29uZS4gQXZvaWQgd3JpdGluZyBhbnkgZnV0dXJlIG1lc3NhZ2VzLiBIaWRlIHdyaXRlIGZh
aWx1cmVzCi0gICAgICAgIC8vIGZyb20gdGhlIGNhbGxlciBzaW5jZSB3ZSdkIGxpa2UgdGhlbSB0
byBjb250aW51ZSBjb25zdW1pbmcgYW55Ci0gICAgICAgIC8vIGJhY2tsb2cgb2YgaW5jb21pbmcg
bWVzc2FnZXMgYmVmb3JlIHJlZ2FyZGluZyB0aGUgbWVzc2FnZSBwaXBlIGFzCi0gICAgICAgIC8v
IGNsb3NlZC4KLSAgICAgICAgdGhpcy5kcm9wV3JpdGVzXyA9IHRydWU7Ci0gICAgICAgIGJyZWFr
OwotICAgICAgZGVmYXVsdDoKLSAgICAgICAgLy8gVGhpcyBwYXJ0aWN1bGFyIHdyaXRlIHdhcyBy
ZWplY3RlZCwgcHJlc3VtYWJseSBiZWNhdXNlIG9mIGJhZCBpbnB1dC4KLSAgICAgICAgLy8gVGhl
IHBpcGUgaXMgbm90IG5lY2Vzc2FyaWx5IGluIGEgYmFkIHN0YXRlLgotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgfQotICAgIHJldHVybiB0cnVlOwotICB9OwotCi0gIENvbm5lY3Rvci5wcm90
b3R5cGUuc2V0SW5jb21pbmdSZWNlaXZlciA9IGZ1bmN0aW9uKHJlY2VpdmVyKSB7Ci0gICAgdGhp
cy5pbmNvbWluZ1JlY2VpdmVyXyA9IHJlY2VpdmVyOwotICB9OwotCi0gIENvbm5lY3Rvci5wcm90
b3R5cGUuc2V0RXJyb3JIYW5kbGVyID0gZnVuY3Rpb24oaGFuZGxlcikgewotICAgIHRoaXMuZXJy
b3JIYW5kbGVyXyA9IGhhbmRsZXI7Ci0gIH07Ci0KLSAgQ29ubmVjdG9yLnByb3RvdHlwZS5yZWFk
TW9yZV8gPSBmdW5jdGlvbihyZXN1bHQpIHsKLSAgICBmb3IgKDs7KSB7Ci0gICAgICBpZiAodGhp
cy5wYXVzZWRfKSB7Ci0gICAgICAgIHJldHVybjsKLSAgICAgIH0KLQotICAgICAgdmFyIHJlYWQg
PSB0aGlzLmhhbmRsZV8ucmVhZE1lc3NhZ2UoKTsKLSAgICAgIGlmICh0aGlzLmhhbmRsZV8gPT0g
bnVsbCkgLy8gVGhlIGNvbm5lY3RvciBoYXMgYmVlbiBjbG9zZWQuCi0gICAgICAgIHJldHVybjsK
LSAgICAgIGlmIChyZWFkLnJlc3VsdCA9PSBNb2pvLlJFU1VMVF9TSE9VTERfV0FJVCkKLSAgICAg
ICAgcmV0dXJuOwotICAgICAgaWYgKHJlYWQucmVzdWx0ICE9IE1vam8uUkVTVUxUX09LKSB7Ci0g
ICAgICAgIHRoaXMuaGFuZGxlRXJyb3IocmVhZC5yZXN1bHQgIT09IE1vam8uUkVTVUxUX0ZBSUxF
RF9QUkVDT05ESVRJT04sCi0gICAgICAgICAgICBmYWxzZSk7Ci0gICAgICAgIHJldHVybjsKLSAg
ICAgIH0KLSAgICAgIHZhciBtZXNzYWdlQnVmZmVyID0gbmV3IGludGVybmFsLkJ1ZmZlcihyZWFk
LmJ1ZmZlcik7Ci0gICAgICB2YXIgbWVzc2FnZSA9IG5ldyBpbnRlcm5hbC5NZXNzYWdlKG1lc3Nh
Z2VCdWZmZXIsIHJlYWQuaGFuZGxlcyk7Ci0gICAgICB2YXIgcmVjZWl2ZXJSZXN1bHQgPSB0aGlz
LmluY29taW5nUmVjZWl2ZXJfICYmCi0gICAgICAgICAgdGhpcy5pbmNvbWluZ1JlY2VpdmVyXy5h
Y2NlcHQobWVzc2FnZSk7Ci0KLSAgICAgIC8vIERpc3BhdGNoaW5nIHRoZSBtZXNzYWdlIG1heSBo
YXZlIGNsb3NlZCB0aGUgY29ubmVjdG9yLgotICAgICAgaWYgKHRoaXMuaGFuZGxlXyA9PSBudWxs
KQotICAgICAgICByZXR1cm47Ci0KLSAgICAgIC8vIEhhbmRsZSBpbnZhbGlkIGluY29taW5nIG1l
c3NhZ2UuCi0gICAgICBpZiAoIWludGVybmFsLmlzVGVzdGluZ01vZGUoKSAmJiAhcmVjZWl2ZXJS
ZXN1bHQpIHsKLSAgICAgICAgLy8gVE9ETyh5enNoZW4pOiBDb25zaWRlciBub3RpZnlpbmcgdGhl
IGVtYmVkZGVyLgotICAgICAgICB0aGlzLmhhbmRsZUVycm9yKHRydWUsIGZhbHNlKTsKLSAgICAg
IH0KLSAgICB9Ci0gIH07Ci0KLSAgQ29ubmVjdG9yLnByb3RvdHlwZS5jYW5jZWxXYWl0ID0gZnVu
Y3Rpb24oKSB7Ci0gICAgaWYgKHRoaXMucmVhZFdhdGNoZXJfKSB7Ci0gICAgICB0aGlzLnJlYWRX
YXRjaGVyXy5jYW5jZWwoKTsKLSAgICAgIHRoaXMucmVhZFdhdGNoZXJfID0gbnVsbDsKLSAgICB9
Ci0gIH07Ci0KLSAgQ29ubmVjdG9yLnByb3RvdHlwZS53YWl0VG9SZWFkTW9yZSA9IGZ1bmN0aW9u
KCkgewotICAgIGlmICh0aGlzLmhhbmRsZV8pIHsKLSAgICAgIHRoaXMucmVhZFdhdGNoZXJfID0g
dGhpcy5oYW5kbGVfLndhdGNoKHtyZWFkYWJsZTogdHJ1ZX0sCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJlYWRNb3JlXy5iaW5kKHRoaXMpKTsKLSAg
ICB9Ci0gIH07Ci0KLSAgQ29ubmVjdG9yLnByb3RvdHlwZS5oYW5kbGVFcnJvciA9IGZ1bmN0aW9u
KGZvcmNlUGlwZVJlc2V0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZm9yY2VBc3luY0hhbmRsZXIpIHsKLSAgICBpZiAodGhpcy5lcnJvcl8gfHwgdGhpcy5o
YW5kbGVfID09PSBudWxsKSB7Ci0gICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKHRoaXMu
cGF1c2VkXykgewotICAgICAgLy8gRW5mb3JjZSBjYWxsaW5nIHRoZSBlcnJvciBoYW5kbGVyIGFz
eW5jaHJvbm91c2x5IGlmIHRoZSB1c2VyIGhhcwotICAgICAgLy8gcGF1c2VkIHJlY2VpdmluZyBt
ZXNzYWdlcy4gV2UgbmVlZCB0byB3YWl0IHVudGlsIHRoZSB1c2VyIHN0YXJ0cwotICAgICAgLy8g
cmVjZWl2aW5nIG1lc3NhZ2VzIGFnYWluLgotICAgICAgZm9yY2VBc3luY0hhbmRsZXIgPSB0cnVl
OwotICAgIH0KLQotICAgIGlmICghZm9yY2VQaXBlUmVzZXQgJiYgZm9yY2VBc3luY0hhbmRsZXIp
IHsKLSAgICAgIGZvcmNlUGlwZVJlc2V0ID0gdHJ1ZTsKLSAgICB9Ci0KLSAgICB0aGlzLmNhbmNl
bFdhaXQoKTsKLSAgICBpZiAoZm9yY2VQaXBlUmVzZXQpIHsKLSAgICAgIHRoaXMuaGFuZGxlXy5j
bG9zZSgpOwotICAgICAgdmFyIGR1bW15UGlwZSA9IE1vam8uY3JlYXRlTWVzc2FnZVBpcGUoKTsK
LSAgICAgIHRoaXMuaGFuZGxlXyA9IGR1bW15UGlwZS5oYW5kbGUwOwotICAgIH0KLQotICAgIGlm
IChmb3JjZUFzeW5jSGFuZGxlcikgewotICAgICAgaWYgKCF0aGlzLnBhdXNlZF8pIHsKLSAgICAg
ICAgdGhpcy53YWl0VG9SZWFkTW9yZSgpOwotICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICB0
aGlzLmVycm9yXyA9IHRydWU7Ci0gICAgICBpZiAodGhpcy5lcnJvckhhbmRsZXJfKSB7Ci0gICAg
ICAgIHRoaXMuZXJyb3JIYW5kbGVyXy5vbkVycm9yKCk7Ci0gICAgICB9Ci0gICAgfQotICB9Owot
Ci0gIGludGVybmFsLkNvbm5lY3RvciA9IENvbm5lY3RvcjsKLX0pKCk7Ci0vLyBDb3B5cmlnaHQg
MjAxNyBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBv
ZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhh
dCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLShmdW5jdGlvbigpIHsK
LSAgdmFyIGludGVybmFsID0gbW9qby5pbnRlcm5hbDsKLQotICBmdW5jdGlvbiB2YWxpZGF0ZUNv
bnRyb2xSZXF1ZXN0V2l0aFJlc3BvbnNlKG1lc3NhZ2UpIHsKLSAgICB2YXIgbWVzc2FnZVZhbGlk
YXRvciA9IG5ldyBpbnRlcm5hbC5WYWxpZGF0b3IobWVzc2FnZSk7Ci0gICAgdmFyIGVycm9yID0g
bWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZU1lc3NhZ2VJc1JlcXVlc3RFeHBlY3RpbmdSZXNwb25z
ZSgpOwotICAgIGlmIChlcnJvciAhPT0gaW50ZXJuYWwudmFsaWRhdGlvbkVycm9yLk5PTkUpIHsK
LSAgICAgIHRocm93IGVycm9yOwotICAgIH0KLQotICAgIGlmIChtZXNzYWdlLmdldE5hbWUoKSAh
PSBtb2pvLmludGVyZmFjZUNvbnRyb2wua1J1bk1lc3NhZ2VJZCkgewotICAgICAgdGhyb3cgbmV3
IEVycm9yKCJDb250cm9sIG1lc3NhZ2UgbmFtZSBpcyBub3Qga1J1bk1lc3NhZ2VJZCIpOwotICAg
IH0KLQotICAgIC8vIFZhbGlkYXRlIHBheWxvYWQuCi0gICAgZXJyb3IgPSBtb2pvLmludGVyZmFj
ZUNvbnRyb2wuUnVuTWVzc2FnZVBhcmFtcy52YWxpZGF0ZShtZXNzYWdlVmFsaWRhdG9yLAotICAg
ICAgICBtZXNzYWdlLmdldEhlYWRlck51bUJ5dGVzKCkpOwotICAgIGlmIChlcnJvciAhPSBpbnRl
cm5hbC52YWxpZGF0aW9uRXJyb3IuTk9ORSkgewotICAgICAgdGhyb3cgZXJyb3I7Ci0gICAgfQot
ICB9Ci0KLSAgZnVuY3Rpb24gdmFsaWRhdGVDb250cm9sUmVxdWVzdFdpdGhvdXRSZXNwb25zZSht
ZXNzYWdlKSB7Ci0gICAgdmFyIG1lc3NhZ2VWYWxpZGF0b3IgPSBuZXcgaW50ZXJuYWwuVmFsaWRh
dG9yKG1lc3NhZ2UpOwotICAgIHZhciBlcnJvciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVN
ZXNzYWdlSXNSZXF1ZXN0V2l0aG91dFJlc3BvbnNlKCk7Ci0gICAgaWYgKGVycm9yICE9IGludGVy
bmFsLnZhbGlkYXRpb25FcnJvci5OT05FKSB7Ci0gICAgICB0aHJvdyBlcnJvcjsKLSAgICB9Ci0K
LSAgICBpZiAobWVzc2FnZS5nZXROYW1lKCkgIT0gbW9qby5pbnRlcmZhY2VDb250cm9sLmtSdW5P
ckNsb3NlUGlwZU1lc3NhZ2VJZCkgewotICAgICAgdGhyb3cgbmV3IEVycm9yKCJDb250cm9sIG1l
c3NhZ2UgbmFtZSBpcyBub3Qga1J1bk9yQ2xvc2VQaXBlTWVzc2FnZUlkIik7Ci0gICAgfQotCi0g
ICAgLy8gVmFsaWRhdGUgcGF5bG9hZC4KLSAgICBlcnJvciA9IG1vam8uaW50ZXJmYWNlQ29udHJv
bC5SdW5PckNsb3NlUGlwZU1lc3NhZ2VQYXJhbXMudmFsaWRhdGUoCi0gICAgICAgIG1lc3NhZ2VW
YWxpZGF0b3IsIG1lc3NhZ2UuZ2V0SGVhZGVyTnVtQnl0ZXMoKSk7Ci0gICAgaWYgKGVycm9yICE9
IGludGVybmFsLnZhbGlkYXRpb25FcnJvci5OT05FKSB7Ci0gICAgICB0aHJvdyBlcnJvcjsKLSAg
ICB9Ci0gIH0KLQotICBmdW5jdGlvbiBydW5PckNsb3NlUGlwZShtZXNzYWdlLCBpbnRlcmZhY2VW
ZXJzaW9uKSB7Ci0gICAgdmFyIHJlYWRlciA9IG5ldyBpbnRlcm5hbC5NZXNzYWdlUmVhZGVyKG1l
c3NhZ2UpOwotICAgIHZhciBydW5PckNsb3NlUGlwZU1lc3NhZ2VQYXJhbXMgPSByZWFkZXIuZGVj
b2RlU3RydWN0KAotICAgICAgICBtb2pvLmludGVyZmFjZUNvbnRyb2wuUnVuT3JDbG9zZVBpcGVN
ZXNzYWdlUGFyYW1zKTsKLSAgICByZXR1cm4gaW50ZXJmYWNlVmVyc2lvbiA+PQotICAgICAgICBy
dW5PckNsb3NlUGlwZU1lc3NhZ2VQYXJhbXMuaW5wdXQucmVxdWlyZVZlcnNpb24udmVyc2lvbjsK
LSAgfQotCi0gIGZ1bmN0aW9uIHJ1bihtZXNzYWdlLCByZXNwb25kZXIsIGludGVyZmFjZVZlcnNp
b24pIHsKLSAgICB2YXIgcmVhZGVyID0gbmV3IGludGVybmFsLk1lc3NhZ2VSZWFkZXIobWVzc2Fn
ZSk7Ci0gICAgdmFyIHJ1bk1lc3NhZ2VQYXJhbXMgPQotICAgICAgICByZWFkZXIuZGVjb2RlU3Ry
dWN0KG1vam8uaW50ZXJmYWNlQ29udHJvbC5SdW5NZXNzYWdlUGFyYW1zKTsKLSAgICB2YXIgcnVu
T3V0cHV0ID0gbnVsbDsKLQotICAgIGlmIChydW5NZXNzYWdlUGFyYW1zLmlucHV0LnF1ZXJ5VmVy
c2lvbikgewotICAgICAgcnVuT3V0cHV0ID0gbmV3IG1vam8uaW50ZXJmYWNlQ29udHJvbC5SdW5P
dXRwdXQoKTsKLSAgICAgIHJ1bk91dHB1dC5xdWVyeVZlcnNpb25SZXN1bHQgPSBuZXcKLSAgICAg
ICAgICBtb2pvLmludGVyZmFjZUNvbnRyb2wuUXVlcnlWZXJzaW9uUmVzdWx0KAotICAgICAgICAg
ICAgICB7J3ZlcnNpb24nOiBpbnRlcmZhY2VWZXJzaW9ufSk7Ci0gICAgfQotCi0gICAgdmFyIHJ1
blJlc3BvbnNlTWVzc2FnZVBhcmFtcyA9IG5ldwotICAgICAgICBtb2pvLmludGVyZmFjZUNvbnRy
b2wuUnVuUmVzcG9uc2VNZXNzYWdlUGFyYW1zKCk7Ci0gICAgcnVuUmVzcG9uc2VNZXNzYWdlUGFy
YW1zLm91dHB1dCA9IHJ1bk91dHB1dDsKLQotICAgIHZhciBtZXNzYWdlTmFtZSA9IG1vam8uaW50
ZXJmYWNlQ29udHJvbC5rUnVuTWVzc2FnZUlkOwotICAgIHZhciBwYXlsb2FkU2l6ZSA9Ci0gICAg
ICAgIG1vam8uaW50ZXJmYWNlQ29udHJvbC5SdW5SZXNwb25zZU1lc3NhZ2VQYXJhbXMuZW5jb2Rl
ZFNpemU7Ci0gICAgdmFyIHJlcXVlc3RJRCA9IHJlYWRlci5yZXF1ZXN0SUQ7Ci0gICAgdmFyIGJ1
aWxkZXIgPSBuZXcgaW50ZXJuYWwuTWVzc2FnZVYxQnVpbGRlcihtZXNzYWdlTmFtZSwKLSAgICAg
ICAgcGF5bG9hZFNpemUsIGludGVybmFsLmtNZXNzYWdlSXNSZXNwb25zZSwgcmVxdWVzdElEKTsK
LSAgICBidWlsZGVyLmVuY29kZVN0cnVjdChtb2pvLmludGVyZmFjZUNvbnRyb2wuUnVuUmVzcG9u
c2VNZXNzYWdlUGFyYW1zLAotICAgICAgICAgICAgICAgICAgICAgICAgIHJ1blJlc3BvbnNlTWVz
c2FnZVBhcmFtcyk7Ci0gICAgcmVzcG9uZGVyLmFjY2VwdChidWlsZGVyLmZpbmlzaCgpKTsKLSAg
ICByZXR1cm4gdHJ1ZTsKLSAgfQotCi0gIGZ1bmN0aW9uIGlzSW50ZXJmYWNlQ29udHJvbE1lc3Nh
Z2UobWVzc2FnZSkgewotICAgIHJldHVybiBtZXNzYWdlLmdldE5hbWUoKSA9PSBtb2pvLmludGVy
ZmFjZUNvbnRyb2wua1J1bk1lc3NhZ2VJZCB8fAotICAgICAgICAgICBtZXNzYWdlLmdldE5hbWUo
KSA9PSBtb2pvLmludGVyZmFjZUNvbnRyb2wua1J1bk9yQ2xvc2VQaXBlTWVzc2FnZUlkOwotICB9
Ci0KLSAgZnVuY3Rpb24gQ29udHJvbE1lc3NhZ2VIYW5kbGVyKGludGVyZmFjZVZlcnNpb24pIHsK
LSAgICB0aGlzLmludGVyZmFjZVZlcnNpb25fID0gaW50ZXJmYWNlVmVyc2lvbjsKLSAgfQotCi0g
IENvbnRyb2xNZXNzYWdlSGFuZGxlci5wcm90b3R5cGUuYWNjZXB0ID0gZnVuY3Rpb24obWVzc2Fn
ZSkgewotICAgIHZhbGlkYXRlQ29udHJvbFJlcXVlc3RXaXRob3V0UmVzcG9uc2UobWVzc2FnZSk7
Ci0gICAgcmV0dXJuIHJ1bk9yQ2xvc2VQaXBlKG1lc3NhZ2UsIHRoaXMuaW50ZXJmYWNlVmVyc2lv
bl8pOwotICB9OwotCi0gIENvbnRyb2xNZXNzYWdlSGFuZGxlci5wcm90b3R5cGUuYWNjZXB0V2l0
aFJlc3BvbmRlciA9IGZ1bmN0aW9uKG1lc3NhZ2UsCi0gICAgICByZXNwb25kZXIpIHsKLSAgICB2
YWxpZGF0ZUNvbnRyb2xSZXF1ZXN0V2l0aFJlc3BvbnNlKG1lc3NhZ2UpOwotICAgIHJldHVybiBy
dW4obWVzc2FnZSwgcmVzcG9uZGVyLCB0aGlzLmludGVyZmFjZVZlcnNpb25fKTsKLSAgfTsKLQot
ICBpbnRlcm5hbC5Db250cm9sTWVzc2FnZUhhbmRsZXIgPSBDb250cm9sTWVzc2FnZUhhbmRsZXI7
Ci0gIGludGVybmFsLmlzSW50ZXJmYWNlQ29udHJvbE1lc3NhZ2UgPSBpc0ludGVyZmFjZUNvbnRy
b2xNZXNzYWdlOwotfSkoKTsKLS8vIENvcHlyaWdodCAyMDE3IFRoZSBDaHJvbWl1bSBBdXRob3Jz
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292
ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhl
IExJQ0VOU0UgZmlsZS4KLQotKGZ1bmN0aW9uKCkgewotICB2YXIgaW50ZXJuYWwgPSBtb2pvLmlu
dGVybmFsOwotCi0gIGZ1bmN0aW9uIGNvbnN0cnVjdFJ1bk9yQ2xvc2VQaXBlTWVzc2FnZShydW5P
ckNsb3NlUGlwZUlucHV0KSB7Ci0gICAgdmFyIHJ1bk9yQ2xvc2VQaXBlTWVzc2FnZVBhcmFtcyA9
IG5ldwotICAgICAgICBtb2pvLmludGVyZmFjZUNvbnRyb2wuUnVuT3JDbG9zZVBpcGVNZXNzYWdl
UGFyYW1zKCk7Ci0gICAgcnVuT3JDbG9zZVBpcGVNZXNzYWdlUGFyYW1zLmlucHV0ID0gcnVuT3JD
bG9zZVBpcGVJbnB1dDsKLQotICAgIHZhciBtZXNzYWdlTmFtZSA9IG1vam8uaW50ZXJmYWNlQ29u
dHJvbC5rUnVuT3JDbG9zZVBpcGVNZXNzYWdlSWQ7Ci0gICAgdmFyIHBheWxvYWRTaXplID0KLSAg
ICAgICAgbW9qby5pbnRlcmZhY2VDb250cm9sLlJ1bk9yQ2xvc2VQaXBlTWVzc2FnZVBhcmFtcy5l
bmNvZGVkU2l6ZTsKLSAgICB2YXIgYnVpbGRlciA9IG5ldyBpbnRlcm5hbC5NZXNzYWdlVjBCdWls
ZGVyKG1lc3NhZ2VOYW1lLCBwYXlsb2FkU2l6ZSk7Ci0gICAgYnVpbGRlci5lbmNvZGVTdHJ1Y3Qo
bW9qby5pbnRlcmZhY2VDb250cm9sLlJ1bk9yQ2xvc2VQaXBlTWVzc2FnZVBhcmFtcywKLSAgICAg
ICAgICAgICAgICAgICAgICAgICBydW5PckNsb3NlUGlwZU1lc3NhZ2VQYXJhbXMpOwotICAgIHZh
ciBtZXNzYWdlID0gYnVpbGRlci5maW5pc2goKTsKLSAgICByZXR1cm4gbWVzc2FnZTsKLSAgfQot
Ci0gIGZ1bmN0aW9uIHZhbGlkYXRlQ29udHJvbFJlc3BvbnNlKG1lc3NhZ2UpIHsKLSAgICB2YXIg
bWVzc2FnZVZhbGlkYXRvciA9IG5ldyBpbnRlcm5hbC5WYWxpZGF0b3IobWVzc2FnZSk7Ci0gICAg
dmFyIGVycm9yID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZU1lc3NhZ2VJc1Jlc3BvbnNlKCk7
Ci0gICAgaWYgKGVycm9yICE9IGludGVybmFsLnZhbGlkYXRpb25FcnJvci5OT05FKSB7Ci0gICAg
ICB0aHJvdyBlcnJvcjsKLSAgICB9Ci0KLSAgICBpZiAobWVzc2FnZS5nZXROYW1lKCkgIT0gbW9q
by5pbnRlcmZhY2VDb250cm9sLmtSdW5NZXNzYWdlSWQpIHsKLSAgICAgIHRocm93IG5ldyBFcnJv
cigiQ29udHJvbCBtZXNzYWdlIG5hbWUgaXMgbm90IGtSdW5NZXNzYWdlSWQiKTsKLSAgICB9Ci0K
LSAgICAvLyBWYWxpZGF0ZSBwYXlsb2FkLgotICAgIGVycm9yID0gbW9qby5pbnRlcmZhY2VDb250
cm9sLlJ1blJlc3BvbnNlTWVzc2FnZVBhcmFtcy52YWxpZGF0ZSgKLSAgICAgICAgbWVzc2FnZVZh
bGlkYXRvciwgbWVzc2FnZS5nZXRIZWFkZXJOdW1CeXRlcygpKTsKLSAgICBpZiAoZXJyb3IgIT0g
aW50ZXJuYWwudmFsaWRhdGlvbkVycm9yLk5PTkUpIHsKLSAgICAgIHRocm93IGVycm9yOwotICAg
IH0KLSAgfQotCi0gIGZ1bmN0aW9uIGFjY2VwdFJ1blJlc3BvbnNlKG1lc3NhZ2UpIHsKLSAgICB2
YWxpZGF0ZUNvbnRyb2xSZXNwb25zZShtZXNzYWdlKTsKLQotICAgIHZhciByZWFkZXIgPSBuZXcg
aW50ZXJuYWwuTWVzc2FnZVJlYWRlcihtZXNzYWdlKTsKLSAgICB2YXIgcnVuUmVzcG9uc2VNZXNz
YWdlUGFyYW1zID0gcmVhZGVyLmRlY29kZVN0cnVjdCgKLSAgICAgICAgbW9qby5pbnRlcmZhY2VD
b250cm9sLlJ1blJlc3BvbnNlTWVzc2FnZVBhcmFtcyk7Ci0KLSAgICByZXR1cm4gUHJvbWlzZS5y
ZXNvbHZlKHJ1blJlc3BvbnNlTWVzc2FnZVBhcmFtcyk7Ci0gIH0KLQotIC8qKgotICAqIFNlbmRz
IHRoZSBnaXZlbiBydW4gbWVzc2FnZSB0aHJvdWdoIHRoZSByZWNlaXZlci4KLSAgKiBBY2NlcHRz
IHRoZSByZXNwb25zZSBtZXNzYWdlIGZyb20gdGhlIHJlY2VpdmVyIGFuZCBkZWNvZGVzIHRoZSBt
ZXNzYWdlCi0gICogc3RydWN0IHRvIFJ1blJlc3BvbnNlTWVzc2FnZVBhcmFtcy4KLSAgKgotICAq
IEBwYXJhbSAge1JvdXRlcn0gcmVjZWl2ZXIuCi0gICogQHBhcmFtICB7UnVuTWVzc2FnZVBhcmFt
c30gcnVuTWVzc2FnZVBhcmFtcyB0byBiZSBzZW50IHZpYSBhIG1lc3NhZ2UuCi0gICogQHJldHVy
biB7UHJvbWlzZX0gdGhhdCByZXNvbHZlcyB0byBhIFJ1blJlc3BvbnNlTWVzc2FnZVBhcmFtcy4K
LSAgKi8KLSAgZnVuY3Rpb24gc2VuZFJ1bk1lc3NhZ2UocmVjZWl2ZXIsIHJ1bk1lc3NhZ2VQYXJh
bXMpIHsKLSAgICB2YXIgbWVzc2FnZU5hbWUgPSBtb2pvLmludGVyZmFjZUNvbnRyb2wua1J1bk1l
c3NhZ2VJZDsKLSAgICB2YXIgcGF5bG9hZFNpemUgPSBtb2pvLmludGVyZmFjZUNvbnRyb2wuUnVu
TWVzc2FnZVBhcmFtcy5lbmNvZGVkU2l6ZTsKLSAgICAvLyB8cmVxdWVzdElEfCBpcyBzZXQgdG8g
MCwgYnV0IGlzIGxhdGVyIHByb3Blcmx5IHNldCBieSBSb3V0ZXIuCi0gICAgdmFyIGJ1aWxkZXIg
PSBuZXcgaW50ZXJuYWwuTWVzc2FnZVYxQnVpbGRlcihtZXNzYWdlTmFtZSwKLSAgICAgICAgcGF5
bG9hZFNpemUsIGludGVybmFsLmtNZXNzYWdlRXhwZWN0c1Jlc3BvbnNlLCAwKTsKLSAgICBidWls
ZGVyLmVuY29kZVN0cnVjdChtb2pvLmludGVyZmFjZUNvbnRyb2wuUnVuTWVzc2FnZVBhcmFtcywK
LSAgICAgICAgICAgICAgICAgICAgICAgICBydW5NZXNzYWdlUGFyYW1zKTsKLSAgICB2YXIgbWVz
c2FnZSA9IGJ1aWxkZXIuZmluaXNoKCk7Ci0KLSAgICByZXR1cm4gcmVjZWl2ZXIuYWNjZXB0QW5k
RXhwZWN0UmVzcG9uc2UobWVzc2FnZSkudGhlbihhY2NlcHRSdW5SZXNwb25zZSk7Ci0gIH0KLQot
ICBmdW5jdGlvbiBDb250cm9sTWVzc2FnZVByb3h5KHJlY2VpdmVyKSB7Ci0gICAgdGhpcy5yZWNl
aXZlcl8gPSByZWNlaXZlcjsKLSAgfQotCi0gIENvbnRyb2xNZXNzYWdlUHJveHkucHJvdG90eXBl
LnF1ZXJ5VmVyc2lvbiA9IGZ1bmN0aW9uKCkgewotICAgIHZhciBydW5NZXNzYWdlUGFyYW1zID0g
bmV3IG1vam8uaW50ZXJmYWNlQ29udHJvbC5SdW5NZXNzYWdlUGFyYW1zKCk7Ci0gICAgcnVuTWVz
c2FnZVBhcmFtcy5pbnB1dCA9IG5ldyBtb2pvLmludGVyZmFjZUNvbnRyb2wuUnVuSW5wdXQoKTsK
LSAgICBydW5NZXNzYWdlUGFyYW1zLmlucHV0LnF1ZXJ5VmVyc2lvbiA9Ci0gICAgICAgIG5ldyBt
b2pvLmludGVyZmFjZUNvbnRyb2wuUXVlcnlWZXJzaW9uKCk7Ci0KLSAgICByZXR1cm4gc2VuZFJ1
bk1lc3NhZ2UodGhpcy5yZWNlaXZlcl8sIHJ1bk1lc3NhZ2VQYXJhbXMpLnRoZW4oZnVuY3Rpb24o
Ci0gICAgICAgIHJ1blJlc3BvbnNlTWVzc2FnZVBhcmFtcykgewotICAgICAgcmV0dXJuIHJ1blJl
c3BvbnNlTWVzc2FnZVBhcmFtcy5vdXRwdXQucXVlcnlWZXJzaW9uUmVzdWx0LnZlcnNpb247Ci0g
ICAgfSk7Ci0gIH07Ci0KLSAgQ29udHJvbE1lc3NhZ2VQcm94eS5wcm90b3R5cGUucmVxdWlyZVZl
cnNpb24gPSBmdW5jdGlvbih2ZXJzaW9uKSB7Ci0gICAgdmFyIHJ1bk9yQ2xvc2VQaXBlSW5wdXQg
PSBuZXcgbW9qby5pbnRlcmZhY2VDb250cm9sLlJ1bk9yQ2xvc2VQaXBlSW5wdXQoKTsKLSAgICBy
dW5PckNsb3NlUGlwZUlucHV0LnJlcXVpcmVWZXJzaW9uID0KLSAgICAgICAgbmV3IG1vam8uaW50
ZXJmYWNlQ29udHJvbC5SZXF1aXJlVmVyc2lvbih7J3ZlcnNpb24nOiB2ZXJzaW9ufSk7Ci0gICAg
dmFyIG1lc3NhZ2UgPSBjb25zdHJ1Y3RSdW5PckNsb3NlUGlwZU1lc3NhZ2UocnVuT3JDbG9zZVBp
cGVJbnB1dCk7Ci0gICAgdGhpcy5yZWNlaXZlcl8uYWNjZXB0KG1lc3NhZ2UpOwotICB9OwotCi0g
IGludGVybmFsLkNvbnRyb2xNZXNzYWdlUHJveHkgPSBDb250cm9sTWVzc2FnZVByb3h5OwotfSko
KTsKLS8vIENvcHlyaWdodCAyMDE3IFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qt
c3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4K
LQotKGZ1bmN0aW9uKCkgewotICB2YXIgaW50ZXJuYWwgPSBtb2pvLmludGVybmFsOwotCi0gIGZ1
bmN0aW9uIEludGVyZmFjZUVuZHBvaW50Q2xpZW50KGludGVyZmFjZUVuZHBvaW50SGFuZGxlLCBy
ZWNlaXZlciwKLSAgICAgIGludGVyZmFjZVZlcnNpb24pIHsKLSAgICB0aGlzLmNvbnRyb2xsZXJf
ID0gbnVsbDsKLSAgICB0aGlzLmVuY291bnRlcmVkRXJyb3JfID0gZmFsc2U7Ci0gICAgdGhpcy5o
YW5kbGVfID0gaW50ZXJmYWNlRW5kcG9pbnRIYW5kbGU7Ci0gICAgdGhpcy5pbmNvbWluZ1JlY2Vp
dmVyXyA9IHJlY2VpdmVyOwotCi0gICAgaWYgKGludGVyZmFjZVZlcnNpb24gIT09IHVuZGVmaW5l
ZCkgewotICAgICAgdGhpcy5jb250cm9sTWVzc2FnZUhhbmRsZXJfID0gbmV3IGludGVybmFsLkNv
bnRyb2xNZXNzYWdlSGFuZGxlcigKLSAgICAgICAgICBpbnRlcmZhY2VWZXJzaW9uKTsKLSAgICB9
IGVsc2UgewotICAgICAgdGhpcy5jb250cm9sTWVzc2FnZVByb3h5XyA9IG5ldyBpbnRlcm5hbC5D
b250cm9sTWVzc2FnZVByb3h5KHRoaXMpOwotICAgIH0KLQotICAgIHRoaXMubmV4dFJlcXVlc3RJ
RF8gPSAwOwotICAgIHRoaXMuY29tcGxldGVyc18gPSBuZXcgTWFwKCk7Ci0gICAgdGhpcy5wYXls
b2FkVmFsaWRhdG9yc18gPSBbXTsKLSAgICB0aGlzLmNvbm5lY3Rpb25FcnJvckhhbmRsZXJfID0g
bnVsbDsKLQotICAgIGlmIChpbnRlcmZhY2VFbmRwb2ludEhhbmRsZS5wZW5kaW5nQXNzb2NpYXRp
b24oKSkgewotICAgICAgaW50ZXJmYWNlRW5kcG9pbnRIYW5kbGUuc2V0QXNzb2NpYXRpb25FdmVu
dEhhbmRsZXIoCi0gICAgICAgICAgdGhpcy5vbkFzc29jaWF0aW9uRXZlbnQuYmluZCh0aGlzKSk7
Ci0gICAgfSBlbHNlIHsKLSAgICAgIHRoaXMuaW5pdENvbnRyb2xsZXJJZk5lY2Vzc2FyeV8oKTsK
LSAgICB9Ci0gIH0KLQotICBJbnRlcmZhY2VFbmRwb2ludENsaWVudC5wcm90b3R5cGUuaW5pdENv
bnRyb2xsZXJJZk5lY2Vzc2FyeV8gPSBmdW5jdGlvbigpIHsKLSAgICBpZiAodGhpcy5jb250cm9s
bGVyXyB8fCB0aGlzLmhhbmRsZV8ucGVuZGluZ0Fzc29jaWF0aW9uKCkpIHsKLSAgICAgIHJldHVy
bjsKLSAgICB9Ci0KLSAgICB0aGlzLmNvbnRyb2xsZXJfID0gdGhpcy5oYW5kbGVfLmdyb3VwQ29u
dHJvbGxlcigpLmF0dGFjaEVuZHBvaW50Q2xpZW50KAotICAgICAgICB0aGlzLmhhbmRsZV8sIHRo
aXMpOwotICB9OwotCi0gIEludGVyZmFjZUVuZHBvaW50Q2xpZW50LnByb3RvdHlwZS5vbkFzc29j
aWF0aW9uRXZlbnQgPSBmdW5jdGlvbigKLSAgICAgIGFzc29jaWF0aW9uRXZlbnQpIHsKLSAgICBp
ZiAoYXNzb2NpYXRpb25FdmVudCA9PT0gaW50ZXJuYWwuQXNzb2NpYXRpb25FdmVudC5BU1NPQ0lB
VEVEKSB7Ci0gICAgICB0aGlzLmluaXRDb250cm9sbGVySWZOZWNlc3NhcnlfKCk7Ci0gICAgfSBl
bHNlIGlmIChhc3NvY2lhdGlvbkV2ZW50ID09PQotICAgICAgICAgIGludGVybmFsLkFzc29jaWF0
aW9uRXZlbnQuUEVFUl9DTE9TRURfQkVGT1JFX0FTU09DSUFUSU9OKSB7Ci0gICAgICBzZXRUaW1l
b3V0KHRoaXMubm90aWZ5RXJyb3IuYmluZCh0aGlzLCB0aGlzLmhhbmRsZV8uZGlzY29ubmVjdFJl
YXNvbigpKSwKLSAgICAgICAgICAgICAgICAgMCk7Ci0gICAgfQotICB9OwotCi0gIEludGVyZmFj
ZUVuZHBvaW50Q2xpZW50LnByb3RvdHlwZS5wYXNzSGFuZGxlID0gZnVuY3Rpb24oKSB7Ci0gICAg
aWYgKCF0aGlzLmhhbmRsZV8uaXNWYWxpZCgpKSB7Ci0gICAgICByZXR1cm4gbmV3IGludGVybmFs
LkludGVyZmFjZUVuZHBvaW50SGFuZGxlKCk7Ci0gICAgfQotCi0gICAgLy8gVXNlZCB0byBjbGVh
ciB0aGUgcHJldmlvdXNseSBzZXQgY2FsbGJhY2suCi0gICAgdGhpcy5oYW5kbGVfLnNldEFzc29j
aWF0aW9uRXZlbnRIYW5kbGVyKHVuZGVmaW5lZCk7Ci0KLSAgICBpZiAodGhpcy5jb250cm9sbGVy
XykgewotICAgICAgdGhpcy5jb250cm9sbGVyXyA9IG51bGw7Ci0gICAgICB0aGlzLmhhbmRsZV8u
Z3JvdXBDb250cm9sbGVyKCkuZGV0YWNoRW5kcG9pbnRDbGllbnQodGhpcy5oYW5kbGVfKTsKLSAg
ICB9Ci0gICAgdmFyIGhhbmRsZSA9IHRoaXMuaGFuZGxlXzsKLSAgICB0aGlzLmhhbmRsZV8gPSBu
dWxsOwotICAgIHJldHVybiBoYW5kbGU7Ci0gIH07Ci0KLSAgSW50ZXJmYWNlRW5kcG9pbnRDbGll
bnQucHJvdG90eXBlLmNsb3NlID0gZnVuY3Rpb24ocmVhc29uKSB7Ci0gICAgdmFyIGhhbmRsZSA9
IHRoaXMucGFzc0hhbmRsZSgpOwotICAgIGhhbmRsZS5yZXNldChyZWFzb24pOwotICB9OwotCi0g
IEludGVyZmFjZUVuZHBvaW50Q2xpZW50LnByb3RvdHlwZS5hY2NlcHQgPSBmdW5jdGlvbihtZXNz
YWdlKSB7Ci0gICAgaWYgKG1lc3NhZ2UuYXNzb2NpYXRlZEVuZHBvaW50SGFuZGxlcy5sZW5ndGgg
PiAwKSB7Ci0gICAgICBtZXNzYWdlLnNlcmlhbGl6ZUFzc29jaWF0ZWRFbmRwb2ludEhhbmRsZXMo
Ci0gICAgICAgICAgdGhpcy5oYW5kbGVfLmdyb3VwQ29udHJvbGxlcigpKTsKLSAgICB9Ci0KLSAg
ICBpZiAodGhpcy5lbmNvdW50ZXJlZEVycm9yXykgewotICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IH0KLQotICAgIHRoaXMuaW5pdENvbnRyb2xsZXJJZk5lY2Vzc2FyeV8oKTsKLSAgICByZXR1cm4g
dGhpcy5jb250cm9sbGVyXy5zZW5kTWVzc2FnZShtZXNzYWdlKTsKLSAgfTsKLQotICBJbnRlcmZh
Y2VFbmRwb2ludENsaWVudC5wcm90b3R5cGUuYWNjZXB0QW5kRXhwZWN0UmVzcG9uc2UgPSBmdW5j
dGlvbigKLSAgICAgIG1lc3NhZ2UpIHsKLSAgICBpZiAobWVzc2FnZS5hc3NvY2lhdGVkRW5kcG9p
bnRIYW5kbGVzLmxlbmd0aCA+IDApIHsKLSAgICAgIG1lc3NhZ2Uuc2VyaWFsaXplQXNzb2NpYXRl
ZEVuZHBvaW50SGFuZGxlcygKLSAgICAgICAgICB0aGlzLmhhbmRsZV8uZ3JvdXBDb250cm9sbGVy
KCkpOwotICAgIH0KLQotICAgIGlmICh0aGlzLmVuY291bnRlcmVkRXJyb3JfKSB7Ci0gICAgICBy
ZXR1cm4gUHJvbWlzZS5yZWplY3QoKTsKLSAgICB9Ci0KLSAgICB0aGlzLmluaXRDb250cm9sbGVy
SWZOZWNlc3NhcnlfKCk7Ci0KLSAgICAvLyBSZXNlcnZlIDAgaW4gY2FzZSB3ZSB3YW50IGl0IHRv
IGNvbnZleSBzcGVjaWFsIG1lYW5pbmcgaW4gdGhlIGZ1dHVyZS4KLSAgICB2YXIgcmVxdWVzdElE
ID0gdGhpcy5uZXh0UmVxdWVzdElEXysrOwotICAgIGlmIChyZXF1ZXN0SUQgPT09IDApCi0gICAg
ICByZXF1ZXN0SUQgPSB0aGlzLm5leHRSZXF1ZXN0SURfKys7Ci0KLSAgICBtZXNzYWdlLnNldFJl
cXVlc3RJRChyZXF1ZXN0SUQpOwotICAgIHZhciByZXN1bHQgPSB0aGlzLmNvbnRyb2xsZXJfLnNl
bmRNZXNzYWdlKG1lc3NhZ2UpOwotICAgIGlmICghcmVzdWx0KQotICAgICAgcmV0dXJuIFByb21p
c2UucmVqZWN0KEVycm9yKCJDb25uZWN0aW9uIGVycm9yIikpOwotCi0gICAgdmFyIGNvbXBsZXRl
ciA9IHt9OwotICAgIHRoaXMuY29tcGxldGVyc18uc2V0KHJlcXVlc3RJRCwgY29tcGxldGVyKTsK
LSAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7Ci0gICAg
ICBjb21wbGV0ZXIucmVzb2x2ZSA9IHJlc29sdmU7Ci0gICAgICBjb21wbGV0ZXIucmVqZWN0ID0g
cmVqZWN0OwotICAgIH0pOwotICB9OwotCi0gIEludGVyZmFjZUVuZHBvaW50Q2xpZW50LnByb3Rv
dHlwZS5zZXRQYXlsb2FkVmFsaWRhdG9ycyA9IGZ1bmN0aW9uKAotICAgICAgcGF5bG9hZFZhbGlk
YXRvcnMpIHsKLSAgICB0aGlzLnBheWxvYWRWYWxpZGF0b3JzXyA9IHBheWxvYWRWYWxpZGF0b3Jz
OwotICB9OwotCi0gIEludGVyZmFjZUVuZHBvaW50Q2xpZW50LnByb3RvdHlwZS5zZXRJbmNvbWlu
Z1JlY2VpdmVyID0gZnVuY3Rpb24ocmVjZWl2ZXIpIHsKLSAgICB0aGlzLmluY29taW5nUmVjZWl2
ZXJfID0gcmVjZWl2ZXI7Ci0gIH07Ci0KLSAgSW50ZXJmYWNlRW5kcG9pbnRDbGllbnQucHJvdG90
eXBlLnNldENvbm5lY3Rpb25FcnJvckhhbmRsZXIgPSBmdW5jdGlvbigKLSAgICAgIGhhbmRsZXIp
IHsKLSAgICB0aGlzLmNvbm5lY3Rpb25FcnJvckhhbmRsZXJfID0gaGFuZGxlcjsKLSAgfTsKLQot
ICBJbnRlcmZhY2VFbmRwb2ludENsaWVudC5wcm90b3R5cGUuaGFuZGxlSW5jb21pbmdNZXNzYWdl
ID0gZnVuY3Rpb24obWVzc2FnZSwKLSAgICAgIG1lc3NhZ2VWYWxpZGF0b3IpIHsKLSAgICB2YXIg
bm9FcnJvciA9IGludGVybmFsLnZhbGlkYXRpb25FcnJvci5OT05FOwotICAgIHZhciBlcnIgPSBu
b0Vycm9yOwotICAgIGZvciAodmFyIGkgPSAwOyBlcnIgPT09IG5vRXJyb3IgJiYgaSA8IHRoaXMu
cGF5bG9hZFZhbGlkYXRvcnNfLmxlbmd0aDsgKytpKQotICAgICAgZXJyID0gdGhpcy5wYXlsb2Fk
VmFsaWRhdG9yc19baV0obWVzc2FnZVZhbGlkYXRvcik7Ci0KLSAgICBpZiAoZXJyID09IG5vRXJy
b3IpIHsKLSAgICAgIHJldHVybiB0aGlzLmhhbmRsZVZhbGlkSW5jb21pbmdNZXNzYWdlXyhtZXNz
YWdlKTsKLSAgICB9IGVsc2UgewotICAgICAgaW50ZXJuYWwucmVwb3J0VmFsaWRhdGlvbkVycm9y
KGVycik7Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICB9OwotCi0gIEludGVyZmFjZUVu
ZHBvaW50Q2xpZW50LnByb3RvdHlwZS5oYW5kbGVWYWxpZEluY29taW5nTWVzc2FnZV8gPSBmdW5j
dGlvbigKLSAgICAgIG1lc3NhZ2UpIHsKLSAgICBpZiAoaW50ZXJuYWwuaXNUZXN0aW5nTW9kZSgp
KSB7Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBpZiAodGhpcy5lbmNvdW50ZXJl
ZEVycm9yXykgewotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIHZhciBvayA9IGZh
bHNlOwotCi0gICAgaWYgKG1lc3NhZ2UuZXhwZWN0c1Jlc3BvbnNlKCkpIHsKLSAgICAgIGlmIChp
bnRlcm5hbC5pc0ludGVyZmFjZUNvbnRyb2xNZXNzYWdlKG1lc3NhZ2UpICYmCi0gICAgICAgICAg
dGhpcy5jb250cm9sTWVzc2FnZUhhbmRsZXJfKSB7Ci0gICAgICAgIG9rID0gdGhpcy5jb250cm9s
TWVzc2FnZUhhbmRsZXJfLmFjY2VwdFdpdGhSZXNwb25kZXIobWVzc2FnZSwgdGhpcyk7Ci0gICAg
ICB9IGVsc2UgaWYgKHRoaXMuaW5jb21pbmdSZWNlaXZlcl8pIHsKLSAgICAgICAgb2sgPSB0aGlz
LmluY29taW5nUmVjZWl2ZXJfLmFjY2VwdFdpdGhSZXNwb25kZXIobWVzc2FnZSwgdGhpcyk7Ci0g
ICAgICB9Ci0gICAgfSBlbHNlIGlmIChtZXNzYWdlLmlzUmVzcG9uc2UoKSkgewotICAgICAgdmFy
IHJlYWRlciA9IG5ldyBpbnRlcm5hbC5NZXNzYWdlUmVhZGVyKG1lc3NhZ2UpOwotICAgICAgdmFy
IHJlcXVlc3RJRCA9IHJlYWRlci5yZXF1ZXN0SUQ7Ci0gICAgICB2YXIgY29tcGxldGVyID0gdGhp
cy5jb21wbGV0ZXJzXy5nZXQocmVxdWVzdElEKTsKLSAgICAgIGlmIChjb21wbGV0ZXIpIHsKLSAg
ICAgICAgdGhpcy5jb21wbGV0ZXJzXy5kZWxldGUocmVxdWVzdElEKTsKLSAgICAgICAgY29tcGxl
dGVyLnJlc29sdmUobWVzc2FnZSk7Ci0gICAgICAgIG9rID0gdHJ1ZTsKLSAgICAgIH0gZWxzZSB7
Ci0gICAgICAgIGNvbnNvbGUubG9nKCJVbmV4cGVjdGVkIHJlc3BvbnNlIHdpdGggcmVxdWVzdCBJ
RDogIiArIHJlcXVlc3RJRCk7Ci0gICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgIGlmIChpbnRl
cm5hbC5pc0ludGVyZmFjZUNvbnRyb2xNZXNzYWdlKG1lc3NhZ2UpICYmCi0gICAgICAgICAgdGhp
cy5jb250cm9sTWVzc2FnZUhhbmRsZXJfKSB7Ci0gICAgICAgIG9rID0gdGhpcy5jb250cm9sTWVz
c2FnZUhhbmRsZXJfLmFjY2VwdChtZXNzYWdlKTsKLSAgICAgIH0gZWxzZSBpZiAodGhpcy5pbmNv
bWluZ1JlY2VpdmVyXykgewotICAgICAgICBvayA9IHRoaXMuaW5jb21pbmdSZWNlaXZlcl8uYWNj
ZXB0KG1lc3NhZ2UpOwotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gb2s7Ci0gIH07Ci0KLSAg
SW50ZXJmYWNlRW5kcG9pbnRDbGllbnQucHJvdG90eXBlLm5vdGlmeUVycm9yID0gZnVuY3Rpb24o
cmVhc29uKSB7Ci0gICAgaWYgKHRoaXMuZW5jb3VudGVyZWRFcnJvcl8pIHsKLSAgICAgIHJldHVy
bjsKLSAgICB9Ci0gICAgdGhpcy5lbmNvdW50ZXJlZEVycm9yXyA9IHRydWU7Ci0KLSAgICB0aGlz
LmNvbXBsZXRlcnNfLmZvckVhY2goZnVuY3Rpb24odmFsdWUpIHsKLSAgICAgIHZhbHVlLnJlamVj
dCgpOwotICAgIH0pOwotICAgIHRoaXMuY29tcGxldGVyc18uY2xlYXIoKTsgIC8vIERyb3AgYW55
IHJlc3BvbmRlcnMuCi0KLSAgICBpZiAodGhpcy5jb25uZWN0aW9uRXJyb3JIYW5kbGVyXykgewot
ICAgICAgdGhpcy5jb25uZWN0aW9uRXJyb3JIYW5kbGVyXyhyZWFzb24pOwotICAgIH0KLSAgfTsK
LQotICBJbnRlcmZhY2VFbmRwb2ludENsaWVudC5wcm90b3R5cGUucXVlcnlWZXJzaW9uID0gZnVu
Y3Rpb24oKSB7Ci0gICAgcmV0dXJuIHRoaXMuY29udHJvbE1lc3NhZ2VQcm94eV8ucXVlcnlWZXJz
aW9uKCk7Ci0gIH07Ci0KLSAgSW50ZXJmYWNlRW5kcG9pbnRDbGllbnQucHJvdG90eXBlLnJlcXVp
cmVWZXJzaW9uID0gZnVuY3Rpb24odmVyc2lvbikgewotICAgIHRoaXMuY29udHJvbE1lc3NhZ2VQ
cm94eV8ucmVxdWlyZVZlcnNpb24odmVyc2lvbik7Ci0gIH07Ci0KLSAgSW50ZXJmYWNlRW5kcG9p
bnRDbGllbnQucHJvdG90eXBlLmdldEVuY291bnRlcmVkRXJyb3IgPSBmdW5jdGlvbigpIHsKLSAg
ICByZXR1cm4gdGhpcy5lbmNvdW50ZXJlZEVycm9yXzsKLSAgfTsKLQotICBpbnRlcm5hbC5JbnRl
cmZhY2VFbmRwb2ludENsaWVudCA9IEludGVyZmFjZUVuZHBvaW50Q2xpZW50OwotfSkoKTsKLS8v
IENvcHlyaWdodCAyMDE3IFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUg
bGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLQotKGZ1
bmN0aW9uKCkgewotICB2YXIgaW50ZXJuYWwgPSBtb2pvLmludGVybmFsOwotCi0gIHZhciBBc3Nv
Y2lhdGlvbkV2ZW50ID0gewotICAgIC8vIFRoZSBpbnRlcmZhY2UgaGFzIGJlZW4gYXNzb2NpYXRl
ZCB3aXRoIGEgbWVzc2FnZSBwaXBlLgotICAgIEFTU09DSUFURUQ6ICdhc3NvY2lhdGVkJywKLSAg
ICAvLyBUaGUgcGVlciBvZiB0aGlzIG9iamVjdCBoYXMgYmVlbiBjbG9zZWQgYmVmb3JlIGFzc29j
aWF0aW9uLgotICAgIFBFRVJfQ0xPU0VEX0JFRk9SRV9BU1NPQ0lBVElPTjogJ3BlZXJfY2xvc2Vk
X2JlZm9yZV9hc3NvY2lhdGlvbicKLSAgfTsKLQotICBmdW5jdGlvbiBTdGF0ZShpbnRlcmZhY2VJ
ZCwgYXNzb2NpYXRlZEdyb3VwQ29udHJvbGxlcikgewotICAgIGlmIChpbnRlcmZhY2VJZCA9PT0g
dW5kZWZpbmVkKSB7Ci0gICAgICBpbnRlcmZhY2VJZCA9IGludGVybmFsLmtJbnZhbGlkSW50ZXJm
YWNlSWQ7Ci0gICAgfQotCi0gICAgdGhpcy5pbnRlcmZhY2VJZCA9IGludGVyZmFjZUlkOwotICAg
IHRoaXMuYXNzb2NpYXRlZEdyb3VwQ29udHJvbGxlciA9IGFzc29jaWF0ZWRHcm91cENvbnRyb2xs
ZXI7Ci0gICAgdGhpcy5wZW5kaW5nQXNzb2NpYXRpb24gPSBmYWxzZTsKLSAgICB0aGlzLmRpc2Nv
bm5lY3RSZWFzb24gPSBudWxsOwotICAgIHRoaXMucGVlclN0YXRlXyA9IG51bGw7Ci0gICAgdGhp
cy5hc3NvY2lhdGlvbkV2ZW50SGFuZGxlcl8gPSBudWxsOwotICB9Ci0KLSAgU3RhdGUucHJvdG90
eXBlLmluaXRQZW5kaW5nU3RhdGUgPSBmdW5jdGlvbihwZWVyKSB7Ci0gICAgdGhpcy5wZW5kaW5n
QXNzb2NpYXRpb24gPSB0cnVlOwotICAgIHRoaXMucGVlclN0YXRlXyA9IHBlZXI7Ci0gIH07Ci0K
LSAgU3RhdGUucHJvdG90eXBlLmlzVmFsaWQgPSBmdW5jdGlvbigpIHsKLSAgICByZXR1cm4gdGhp
cy5wZW5kaW5nQXNzb2NpYXRpb24gfHwKLSAgICAgICAgaW50ZXJuYWwuaXNWYWxpZEludGVyZmFj
ZUlkKHRoaXMuaW50ZXJmYWNlSWQpOwotICB9OwotCi0gIFN0YXRlLnByb3RvdHlwZS5jbG9zZSA9
IGZ1bmN0aW9uKGRpc2Nvbm5lY3RSZWFzb24pIHsKLSAgICB2YXIgY2FjaGVkR3JvdXBDb250cm9s
bGVyOwotICAgIHZhciBjYWNoZWRQZWVyU3RhdGU7Ci0gICAgdmFyIGNhY2hlZElkID0gaW50ZXJu
YWwua0ludmFsaWRJbnRlcmZhY2VJZDsKLQotICAgIGlmICghdGhpcy5wZW5kaW5nQXNzb2NpYXRp
b24pIHsKLSAgICAgIGlmIChpbnRlcm5hbC5pc1ZhbGlkSW50ZXJmYWNlSWQodGhpcy5pbnRlcmZh
Y2VJZCkpIHsKLSAgICAgICAgY2FjaGVkR3JvdXBDb250cm9sbGVyID0gdGhpcy5hc3NvY2lhdGVk
R3JvdXBDb250cm9sbGVyOwotICAgICAgICB0aGlzLmFzc29jaWF0ZWRHcm91cENvbnRyb2xsZXIg
PSBudWxsOwotICAgICAgICBjYWNoZWRJZCA9IHRoaXMuaW50ZXJmYWNlSWQ7Ci0gICAgICAgIHRo
aXMuaW50ZXJmYWNlSWQgPSBpbnRlcm5hbC5rSW52YWxpZEludGVyZmFjZUlkOwotICAgICAgfQot
ICAgIH0gZWxzZSB7Ci0gICAgICB0aGlzLnBlbmRpbmdBc3NvY2lhdGlvbiA9IGZhbHNlOwotICAg
ICAgY2FjaGVkUGVlclN0YXRlID0gdGhpcy5wZWVyU3RhdGVfOwotICAgICAgdGhpcy5wZWVyU3Rh
dGVfID0gbnVsbDsKLSAgICB9Ci0KLSAgICBpZiAoY2FjaGVkR3JvdXBDb250cm9sbGVyKSB7Ci0g
ICAgICBjYWNoZWRHcm91cENvbnRyb2xsZXIuY2xvc2VFbmRwb2ludEhhbmRsZShjYWNoZWRJZCwK
LSAgICAgICAgICBkaXNjb25uZWN0UmVhc29uKTsKLSAgICB9IGVsc2UgaWYgKGNhY2hlZFBlZXJT
dGF0ZSkgewotICAgICAgY2FjaGVkUGVlclN0YXRlLm9uUGVlckNsb3NlZEJlZm9yZUFzc29jaWF0
aW9uKGRpc2Nvbm5lY3RSZWFzb24pOwotICAgIH0KLSAgfTsKLQotICBTdGF0ZS5wcm90b3R5cGUu
cnVuQXNzb2NpYXRpb25FdmVudEhhbmRsZXIgPSBmdW5jdGlvbihhc3NvY2lhdGlvbkV2ZW50KSB7
Ci0gICAgaWYgKHRoaXMuYXNzb2NpYXRpb25FdmVudEhhbmRsZXJfKSB7Ci0gICAgICB2YXIgaGFu
ZGxlciA9IHRoaXMuYXNzb2NpYXRpb25FdmVudEhhbmRsZXJfOwotICAgICAgdGhpcy5hc3NvY2lh
dGlvbkV2ZW50SGFuZGxlcl8gPSBudWxsOwotICAgICAgaGFuZGxlcihhc3NvY2lhdGlvbkV2ZW50
KTsKLSAgICB9Ci0gIH07Ci0KLSAgU3RhdGUucHJvdG90eXBlLnNldEFzc29jaWF0aW9uRXZlbnRI
YW5kbGVyID0gZnVuY3Rpb24oaGFuZGxlcikgewotICAgIGlmICghdGhpcy5wZW5kaW5nQXNzb2Np
YXRpb24gJiYKLSAgICAgICAgIWludGVybmFsLmlzVmFsaWRJbnRlcmZhY2VJZCh0aGlzLmludGVy
ZmFjZUlkKSkgewotICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmICghaGFuZGxlcikgewot
ICAgICAgdGhpcy5hc3NvY2lhdGlvbkV2ZW50SGFuZGxlcl8gPSBudWxsOwotICAgICAgcmV0dXJu
OwotICAgIH0KLQotICAgIHRoaXMuYXNzb2NpYXRpb25FdmVudEhhbmRsZXJfID0gaGFuZGxlcjsK
LSAgICBpZiAoIXRoaXMucGVuZGluZ0Fzc29jaWF0aW9uKSB7Ci0gICAgICBzZXRUaW1lb3V0KHRo
aXMucnVuQXNzb2NpYXRpb25FdmVudEhhbmRsZXIuYmluZCh0aGlzLAotICAgICAgICAgIEFzc29j
aWF0aW9uRXZlbnQuQVNTT0NJQVRFRCksIDApOwotICAgIH0gZWxzZSBpZiAoIXRoaXMucGVlclN0
YXRlXykgewotICAgICAgc2V0VGltZW91dCh0aGlzLnJ1bkFzc29jaWF0aW9uRXZlbnRIYW5kbGVy
LmJpbmQodGhpcywKLSAgICAgICAgICBBc3NvY2lhdGlvbkV2ZW50LlBFRVJfQ0xPU0VEX0JFRk9S
RV9BU1NPQ0lBVElPTiksIDApOwotICAgIH0KLSAgfTsKLQotICBTdGF0ZS5wcm90b3R5cGUubm90
aWZ5QXNzb2NpYXRpb24gPSBmdW5jdGlvbihpbnRlcmZhY2VJZCwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGVlckdyb3VwQ29udHJvbGxlcikgewotICAg
IHZhciBjYWNoZWRQZWVyU3RhdGUgPSB0aGlzLnBlZXJTdGF0ZV87Ci0gICAgdGhpcy5wZWVyU3Rh
dGVfID0gbnVsbDsKLQotICAgIHRoaXMucGVuZGluZ0Fzc29jaWF0aW9uID0gZmFsc2U7Ci0KLSAg
ICBpZiAoY2FjaGVkUGVlclN0YXRlKSB7Ci0gICAgICBjYWNoZWRQZWVyU3RhdGUub25Bc3NvY2lh
dGVkKGludGVyZmFjZUlkLCBwZWVyR3JvdXBDb250cm9sbGVyKTsKLSAgICAgIHJldHVybiB0cnVl
OwotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci0gIH07Ci0KLSAgU3RhdGUucHJvdG90eXBlLm9u
QXNzb2NpYXRlZCA9IGZ1bmN0aW9uKGludGVyZmFjZUlkLAotICAgICAgYXNzb2NpYXRlZEdyb3Vw
Q29udHJvbGxlcikgewotICAgIGlmICghdGhpcy5wZW5kaW5nQXNzb2NpYXRpb24pIHsKLSAgICAg
IHJldHVybjsKLSAgICB9Ci0KLSAgICB0aGlzLnBlbmRpbmdBc3NvY2lhdGlvbiA9IGZhbHNlOwot
ICAgIHRoaXMucGVlclN0YXRlXyA9IG51bGw7Ci0gICAgdGhpcy5pbnRlcmZhY2VJZCA9IGludGVy
ZmFjZUlkOwotICAgIHRoaXMuYXNzb2NpYXRlZEdyb3VwQ29udHJvbGxlciA9IGFzc29jaWF0ZWRH
cm91cENvbnRyb2xsZXI7Ci0gICAgdGhpcy5ydW5Bc3NvY2lhdGlvbkV2ZW50SGFuZGxlcihBc3Nv
Y2lhdGlvbkV2ZW50LkFTU09DSUFURUQpOwotICB9OwotCi0gIFN0YXRlLnByb3RvdHlwZS5vblBl
ZXJDbG9zZWRCZWZvcmVBc3NvY2lhdGlvbiA9IGZ1bmN0aW9uKGRpc2Nvbm5lY3RSZWFzb24pIHsK
LSAgICBpZiAoIXRoaXMucGVuZGluZ0Fzc29jaWF0aW9uKSB7Ci0gICAgICByZXR1cm47Ci0gICAg
fQotCi0gICAgdGhpcy5wZWVyU3RhdGVfID0gbnVsbDsKLSAgICB0aGlzLmRpc2Nvbm5lY3RSZWFz
b24gPSBkaXNjb25uZWN0UmVhc29uOwotCi0gICAgdGhpcy5ydW5Bc3NvY2lhdGlvbkV2ZW50SGFu
ZGxlcigKLSAgICAgICAgQXNzb2NpYXRpb25FdmVudC5QRUVSX0NMT1NFRF9CRUZPUkVfQVNTT0NJ
QVRJT04pOwotICB9OwotCi0gIGZ1bmN0aW9uIGNyZWF0ZVBhaXJQZW5kaW5nQXNzb2NpYXRpb24o
KSB7Ci0gICAgdmFyIGhhbmRsZTAgPSBuZXcgSW50ZXJmYWNlRW5kcG9pbnRIYW5kbGUoKTsKLSAg
ICB2YXIgaGFuZGxlMSA9IG5ldyBJbnRlcmZhY2VFbmRwb2ludEhhbmRsZSgpOwotICAgIGhhbmRs
ZTAuc3RhdGVfLmluaXRQZW5kaW5nU3RhdGUoaGFuZGxlMS5zdGF0ZV8pOwotICAgIGhhbmRsZTEu
c3RhdGVfLmluaXRQZW5kaW5nU3RhdGUoaGFuZGxlMC5zdGF0ZV8pOwotICAgIHJldHVybiB7aGFu
ZGxlMDogaGFuZGxlMCwgaGFuZGxlMTogaGFuZGxlMX07Ci0gIH0KLQotICBmdW5jdGlvbiBJbnRl
cmZhY2VFbmRwb2ludEhhbmRsZShpbnRlcmZhY2VJZCwgYXNzb2NpYXRlZEdyb3VwQ29udHJvbGxl
cikgewotICAgIHRoaXMuc3RhdGVfID0gbmV3IFN0YXRlKGludGVyZmFjZUlkLCBhc3NvY2lhdGVk
R3JvdXBDb250cm9sbGVyKTsKLSAgfQotCi0gIEludGVyZmFjZUVuZHBvaW50SGFuZGxlLnByb3Rv
dHlwZS5pc1ZhbGlkID0gZnVuY3Rpb24oKSB7Ci0gICAgcmV0dXJuIHRoaXMuc3RhdGVfLmlzVmFs
aWQoKTsKLSAgfTsKLQotICBJbnRlcmZhY2VFbmRwb2ludEhhbmRsZS5wcm90b3R5cGUucGVuZGlu
Z0Fzc29jaWF0aW9uID0gZnVuY3Rpb24oKSB7Ci0gICAgcmV0dXJuIHRoaXMuc3RhdGVfLnBlbmRp
bmdBc3NvY2lhdGlvbjsKLSAgfTsKLQotICBJbnRlcmZhY2VFbmRwb2ludEhhbmRsZS5wcm90b3R5
cGUuaWQgPSBmdW5jdGlvbigpIHsKLSAgICByZXR1cm4gdGhpcy5zdGF0ZV8uaW50ZXJmYWNlSWQ7
Ci0gIH07Ci0KLSAgSW50ZXJmYWNlRW5kcG9pbnRIYW5kbGUucHJvdG90eXBlLmdyb3VwQ29udHJv
bGxlciA9IGZ1bmN0aW9uKCkgewotICAgIHJldHVybiB0aGlzLnN0YXRlXy5hc3NvY2lhdGVkR3Jv
dXBDb250cm9sbGVyOwotICB9OwotCi0gIEludGVyZmFjZUVuZHBvaW50SGFuZGxlLnByb3RvdHlw
ZS5kaXNjb25uZWN0UmVhc29uID0gZnVuY3Rpb24oKSB7Ci0gICAgcmV0dXJuIHRoaXMuc3RhdGVf
LmRpc2Nvbm5lY3RSZWFzb247Ci0gIH07Ci0KLSAgSW50ZXJmYWNlRW5kcG9pbnRIYW5kbGUucHJv
dG90eXBlLnNldEFzc29jaWF0aW9uRXZlbnRIYW5kbGVyID0gZnVuY3Rpb24oCi0gICAgICBoYW5k
bGVyKSB7Ci0gICAgdGhpcy5zdGF0ZV8uc2V0QXNzb2NpYXRpb25FdmVudEhhbmRsZXIoaGFuZGxl
cik7Ci0gIH07Ci0KLSAgSW50ZXJmYWNlRW5kcG9pbnRIYW5kbGUucHJvdG90eXBlLm5vdGlmeUFz
c29jaWF0aW9uID0gZnVuY3Rpb24oaW50ZXJmYWNlSWQsCi0gICAgICBwZWVyR3JvdXBDb250cm9s
bGVyKSB7Ci0gICAgcmV0dXJuIHRoaXMuc3RhdGVfLm5vdGlmeUFzc29jaWF0aW9uKGludGVyZmFj
ZUlkLCBwZWVyR3JvdXBDb250cm9sbGVyKTsKLSAgfTsKLQotICBJbnRlcmZhY2VFbmRwb2ludEhh
bmRsZS5wcm90b3R5cGUucmVzZXQgPSBmdW5jdGlvbihyZWFzb24pIHsKLSAgICB0aGlzLnN0YXRl
Xy5jbG9zZShyZWFzb24pOwotICAgIHRoaXMuc3RhdGVfID0gbmV3IFN0YXRlKCk7Ci0gIH07Ci0K
LSAgaW50ZXJuYWwuQXNzb2NpYXRpb25FdmVudCA9IEFzc29jaWF0aW9uRXZlbnQ7Ci0gIGludGVy
bmFsLkludGVyZmFjZUVuZHBvaW50SGFuZGxlID0gSW50ZXJmYWNlRW5kcG9pbnRIYW5kbGU7Ci0g
IGludGVybmFsLmNyZWF0ZVBhaXJQZW5kaW5nQXNzb2NpYXRpb24gPSBjcmVhdGVQYWlyUGVuZGlu
Z0Fzc29jaWF0aW9uOwotfSkoKTsKLS8vIENvcHlyaWdodCAyMDE3IFRoZSBDaHJvbWl1bSBBdXRo
b3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMg
Z292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4g
dGhlIExJQ0VOU0UgZmlsZS4KLQotKGZ1bmN0aW9uKCkgewotICB2YXIgaW50ZXJuYWwgPSBtb2pv
LmludGVybmFsOwotCi0gIGZ1bmN0aW9uIHZhbGlkYXRlQ29udHJvbFJlcXVlc3RXaXRob3V0UmVz
cG9uc2UobWVzc2FnZSkgewotICAgIHZhciBtZXNzYWdlVmFsaWRhdG9yID0gbmV3IGludGVybmFs
LlZhbGlkYXRvcihtZXNzYWdlKTsKLSAgICB2YXIgZXJyb3IgPSBtZXNzYWdlVmFsaWRhdG9yLnZh
bGlkYXRlTWVzc2FnZUlzUmVxdWVzdFdpdGhvdXRSZXNwb25zZSgpOwotICAgIGlmIChlcnJvciAh
PSBpbnRlcm5hbC52YWxpZGF0aW9uRXJyb3IuTk9ORSkgewotICAgICAgdGhyb3cgZXJyb3I7Ci0g
ICAgfQotCi0gICAgaWYgKG1lc3NhZ2UuZ2V0TmFtZSgpICE9IG1vam8ucGlwZUNvbnRyb2wua1J1
bk9yQ2xvc2VQaXBlTWVzc2FnZUlkKSB7Ci0gICAgICB0aHJvdyBuZXcgRXJyb3IoIkNvbnRyb2wg
bWVzc2FnZSBuYW1lIGlzIG5vdCBrUnVuT3JDbG9zZVBpcGVNZXNzYWdlSWQiKTsKLSAgICB9Ci0K
LSAgICAvLyBWYWxpZGF0ZSBwYXlsb2FkLgotICAgIGVycm9yID0gbW9qby5waXBlQ29udHJvbC5S
dW5PckNsb3NlUGlwZU1lc3NhZ2VQYXJhbXMudmFsaWRhdGUoCi0gICAgICAgIG1lc3NhZ2VWYWxp
ZGF0b3IsIG1lc3NhZ2UuZ2V0SGVhZGVyTnVtQnl0ZXMoKSk7Ci0gICAgaWYgKGVycm9yICE9IGlu
dGVybmFsLnZhbGlkYXRpb25FcnJvci5OT05FKSB7Ci0gICAgICB0aHJvdyBlcnJvcjsKLSAgICB9
Ci0gIH0KLQotICBmdW5jdGlvbiBydW5PckNsb3NlUGlwZShtZXNzYWdlLCBkZWxlZ2F0ZSkgewot
ICAgIHZhciByZWFkZXIgPSBuZXcgaW50ZXJuYWwuTWVzc2FnZVJlYWRlcihtZXNzYWdlKTsKLSAg
ICB2YXIgcnVuT3JDbG9zZVBpcGVNZXNzYWdlUGFyYW1zID0gcmVhZGVyLmRlY29kZVN0cnVjdCgK
LSAgICAgICAgbW9qby5waXBlQ29udHJvbC5SdW5PckNsb3NlUGlwZU1lc3NhZ2VQYXJhbXMpOwot
ICAgIHZhciBldmVudCA9IHJ1bk9yQ2xvc2VQaXBlTWVzc2FnZVBhcmFtcy5pbnB1dAotICAgICAg
ICAucGVlckFzc29jaWF0ZWRFbmRwb2ludENsb3NlZEV2ZW50OwotICAgIHJldHVybiBkZWxlZ2F0
ZS5vblBlZXJBc3NvY2lhdGVkRW5kcG9pbnRDbG9zZWQoZXZlbnQuaWQsCi0gICAgICAgIGV2ZW50
LmRpc2Nvbm5lY3RSZWFzb24pOwotICB9Ci0KLSAgZnVuY3Rpb24gaXNQaXBlQ29udHJvbE1lc3Nh
Z2UobWVzc2FnZSkgewotICAgIHJldHVybiAhaW50ZXJuYWwuaXNWYWxpZEludGVyZmFjZUlkKG1l
c3NhZ2UuZ2V0SW50ZXJmYWNlSWQoKSk7Ci0gIH0KLQotICBmdW5jdGlvbiBQaXBlQ29udHJvbE1l
c3NhZ2VIYW5kbGVyKGRlbGVnYXRlKSB7Ci0gICAgdGhpcy5kZWxlZ2F0ZV8gPSBkZWxlZ2F0ZTsK
LSAgfQotCi0gIFBpcGVDb250cm9sTWVzc2FnZUhhbmRsZXIucHJvdG90eXBlLmFjY2VwdCA9IGZ1
bmN0aW9uKG1lc3NhZ2UpIHsKLSAgICB2YWxpZGF0ZUNvbnRyb2xSZXF1ZXN0V2l0aG91dFJlc3Bv
bnNlKG1lc3NhZ2UpOwotICAgIHJldHVybiBydW5PckNsb3NlUGlwZShtZXNzYWdlLCB0aGlzLmRl
bGVnYXRlXyk7Ci0gIH07Ci0KLSAgaW50ZXJuYWwuUGlwZUNvbnRyb2xNZXNzYWdlSGFuZGxlciA9
IFBpcGVDb250cm9sTWVzc2FnZUhhbmRsZXI7Ci0gIGludGVybmFsLmlzUGlwZUNvbnRyb2xNZXNz
YWdlID0gaXNQaXBlQ29udHJvbE1lc3NhZ2U7Ci19KSgpOwotLy8gQ29weXJpZ2h0IDIwMTcgVGhl
IENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBz
b3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJl
Ci0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotCi0oZnVuY3Rpb24oKSB7Ci0gIHZhciBp
bnRlcm5hbCA9IG1vam8uaW50ZXJuYWw7Ci0KLSAgZnVuY3Rpb24gY29uc3RydWN0UnVuT3JDbG9z
ZVBpcGVNZXNzYWdlKHJ1bk9yQ2xvc2VQaXBlSW5wdXQpIHsKLSAgICB2YXIgcnVuT3JDbG9zZVBp
cGVNZXNzYWdlUGFyYW1zID0gbmV3Ci0gICAgICAgIG1vam8ucGlwZUNvbnRyb2wuUnVuT3JDbG9z
ZVBpcGVNZXNzYWdlUGFyYW1zKCk7Ci0gICAgcnVuT3JDbG9zZVBpcGVNZXNzYWdlUGFyYW1zLmlu
cHV0ID0gcnVuT3JDbG9zZVBpcGVJbnB1dDsKLQotICAgIHZhciBtZXNzYWdlTmFtZSA9IG1vam8u
cGlwZUNvbnRyb2wua1J1bk9yQ2xvc2VQaXBlTWVzc2FnZUlkOwotICAgIHZhciBwYXlsb2FkU2l6
ZSA9Ci0gICAgICAgIG1vam8ucGlwZUNvbnRyb2wuUnVuT3JDbG9zZVBpcGVNZXNzYWdlUGFyYW1z
LmVuY29kZWRTaXplOwotCi0gICAgdmFyIGJ1aWxkZXIgPSBuZXcgaW50ZXJuYWwuTWVzc2FnZVYw
QnVpbGRlcihtZXNzYWdlTmFtZSwgcGF5bG9hZFNpemUpOwotICAgIGJ1aWxkZXIuZW5jb2RlU3Ry
dWN0KG1vam8ucGlwZUNvbnRyb2wuUnVuT3JDbG9zZVBpcGVNZXNzYWdlUGFyYW1zLAotICAgICAg
ICAgICAgICAgICAgICAgICAgIHJ1bk9yQ2xvc2VQaXBlTWVzc2FnZVBhcmFtcyk7Ci0gICAgdmFy
IG1lc3NhZ2UgPSBidWlsZGVyLmZpbmlzaCgpOwotICAgIG1lc3NhZ2Uuc2V0SW50ZXJmYWNlSWQo
aW50ZXJuYWwua0ludmFsaWRJbnRlcmZhY2VJZCk7Ci0gICAgcmV0dXJuIG1lc3NhZ2U7Ci0gIH0K
LQotICBmdW5jdGlvbiBQaXBlQ29udHJvbE1lc3NhZ2VQcm94eShyZWNlaXZlcikgewotICAgIHRo
aXMucmVjZWl2ZXJfID0gcmVjZWl2ZXI7Ci0gIH0KLQotICBQaXBlQ29udHJvbE1lc3NhZ2VQcm94
eS5wcm90b3R5cGUubm90aWZ5UGVlckVuZHBvaW50Q2xvc2VkID0gZnVuY3Rpb24oCi0gICAgICBp
bnRlcmZhY2VJZCwgcmVhc29uKSB7Ci0gICAgdmFyIG1lc3NhZ2UgPSB0aGlzLmNvbnN0cnVjdFBl
ZXJFbmRwb2ludENsb3NlZE1lc3NhZ2UoaW50ZXJmYWNlSWQsIHJlYXNvbik7Ci0gICAgdGhpcy5y
ZWNlaXZlcl8uYWNjZXB0KG1lc3NhZ2UpOwotICB9OwotCi0gIFBpcGVDb250cm9sTWVzc2FnZVBy
b3h5LnByb3RvdHlwZS5jb25zdHJ1Y3RQZWVyRW5kcG9pbnRDbG9zZWRNZXNzYWdlID0KLSAgICAg
IGZ1bmN0aW9uKGludGVyZmFjZUlkLCByZWFzb24pIHsKLSAgICB2YXIgZXZlbnQgPSBuZXcgbW9q
by5waXBlQ29udHJvbC5QZWVyQXNzb2NpYXRlZEVuZHBvaW50Q2xvc2VkRXZlbnQoKTsKLSAgICBl
dmVudC5pZCA9IGludGVyZmFjZUlkOwotICAgIGlmIChyZWFzb24pIHsKLSAgICAgIGV2ZW50LmRp
c2Nvbm5lY3RSZWFzb24gPSBuZXcgbW9qby5waXBlQ29udHJvbC5EaXNjb25uZWN0UmVhc29uKHsK
LSAgICAgICAgICBjdXN0b21SZWFzb246IHJlYXNvbi5jdXN0b21SZWFzb24sCi0gICAgICAgICAg
ZGVzY3JpcHRpb246IHJlYXNvbi5kZXNjcmlwdGlvbn0pOwotICAgIH0KLSAgICB2YXIgcnVuT3JD
bG9zZVBpcGVJbnB1dCA9IG5ldyBtb2pvLnBpcGVDb250cm9sLlJ1bk9yQ2xvc2VQaXBlSW5wdXQo
KTsKLSAgICBydW5PckNsb3NlUGlwZUlucHV0LnBlZXJBc3NvY2lhdGVkRW5kcG9pbnRDbG9zZWRF
dmVudCA9IGV2ZW50OwotICAgIHJldHVybiBjb25zdHJ1Y3RSdW5PckNsb3NlUGlwZU1lc3NhZ2Uo
cnVuT3JDbG9zZVBpcGVJbnB1dCk7Ci0gIH07Ci0KLSAgaW50ZXJuYWwuUGlwZUNvbnRyb2xNZXNz
YWdlUHJveHkgPSBQaXBlQ29udHJvbE1lc3NhZ2VQcm94eTsKLX0pKCk7Ci0vLyBDb3B5cmlnaHQg
MjAxNCBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBv
ZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhh
dCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLShmdW5jdGlvbigpIHsK
LSAgdmFyIGludGVybmFsID0gbW9qby5pbnRlcm5hbDsKLQotICAvKioKLSAgICogVGhlIHN0YXRl
IG9mIHxlbmRwb2ludHwuIElmIGJvdGggdGhlIGVuZHBvaW50IGFuZCBpdHMgcGVlciBoYXZlIGJl
ZW4KLSAgICogY2xvc2VkLCByZW1vdmVzIGl0IGZyb20gfGVuZHBvaW50c198LgotICAgKiBAZW51
bSB7c3RyaW5nfQotICAgKi8KLSAgdmFyIEVuZHBvaW50U3RhdGVVcGRhdGVUeXBlID0gewotICAg
IEVORFBPSU5UX0NMT1NFRDogJ2VuZHBvaW50X2Nsb3NlZCcsCi0gICAgUEVFUl9FTkRQT0lOVF9D
TE9TRUQ6ICdwZWVyX2VuZHBvaW50X2Nsb3NlZCcKLSAgfTsKLQotICBmdW5jdGlvbiBjaGVjayhj
b25kaXRpb24sIG91dHB1dCkgewotICAgIGlmICghY29uZGl0aW9uKSB7Ci0gICAgICAvLyB0ZXN0
aGFybmVzcy5qcyBkb2VzIG5vdCByZXRocm93IGVycm9ycyBzbyB0aGUgZXJyb3Igc3RhY2sgbmVl
ZHMgdG8gYmUKLSAgICAgIC8vIGluY2x1ZGVkIGFzIGEgc3RyaW5nIGluIHRoZSBlcnJvciB3ZSB0
aHJvdyBmb3IgZGVidWdnaW5nIGxheW91dCB0ZXN0cy4KLSAgICAgIHRocm93IG5ldyBFcnJvcigo
bmV3IEVycm9yKCkpLnN0YWNrKTsKLSAgICB9Ci0gIH0KLQotICBmdW5jdGlvbiBJbnRlcmZhY2VF
bmRwb2ludChyb3V0ZXIsIGludGVyZmFjZUlkKSB7Ci0gICAgdGhpcy5yb3V0ZXJfID0gcm91dGVy
OwotICAgIHRoaXMuaWQgPSBpbnRlcmZhY2VJZDsKLSAgICB0aGlzLmNsb3NlZCA9IGZhbHNlOwot
ICAgIHRoaXMucGVlckNsb3NlZCA9IGZhbHNlOwotICAgIHRoaXMuaGFuZGxlQ3JlYXRlZCA9IGZh
bHNlOwotICAgIHRoaXMuZGlzY29ubmVjdFJlYXNvbiA9IG51bGw7Ci0gICAgdGhpcy5jbGllbnQg
PSBudWxsOwotICB9Ci0KLSAgSW50ZXJmYWNlRW5kcG9pbnQucHJvdG90eXBlLnNlbmRNZXNzYWdl
ID0gZnVuY3Rpb24obWVzc2FnZSkgewotICAgIG1lc3NhZ2Uuc2V0SW50ZXJmYWNlSWQodGhpcy5p
ZCk7Ci0gICAgcmV0dXJuIHRoaXMucm91dGVyXy5jb25uZWN0b3JfLmFjY2VwdChtZXNzYWdlKTsK
LSAgfTsKLQotICBmdW5jdGlvbiBSb3V0ZXIoaGFuZGxlLCBzZXRJbnRlcmZhY2VJZE5hbWVzcGFj
ZUJpdCkgewotICAgIGlmICghKGhhbmRsZSBpbnN0YW5jZW9mIE1vam9IYW5kbGUpKSB7Ci0gICAg
ICB0aHJvdyBuZXcgRXJyb3IoIlJvdXRlciBjb25zdHJ1Y3RvcjogTm90IGEgaGFuZGxlIik7Ci0g
ICAgfQotICAgIGlmIChzZXRJbnRlcmZhY2VJZE5hbWVzcGFjZUJpdCA9PT0gdW5kZWZpbmVkKSB7
Ci0gICAgICBzZXRJbnRlcmZhY2VJZE5hbWVzcGFjZUJpdCA9IGZhbHNlOwotICAgIH0KLQotICAg
IHRoaXMuY29ubmVjdG9yXyA9IG5ldyBpbnRlcm5hbC5Db25uZWN0b3IoaGFuZGxlKTsKLQotICAg
IHRoaXMuY29ubmVjdG9yXy5zZXRJbmNvbWluZ1JlY2VpdmVyKHsKLSAgICAgICAgYWNjZXB0OiB0
aGlzLmFjY2VwdC5iaW5kKHRoaXMpLAotICAgIH0pOwotICAgIHRoaXMuY29ubmVjdG9yXy5zZXRF
cnJvckhhbmRsZXIoewotICAgICAgICBvbkVycm9yOiB0aGlzLm9uUGlwZUNvbm5lY3Rpb25FcnJv
ci5iaW5kKHRoaXMpLAotICAgIH0pOwotCi0gICAgdGhpcy5zZXRJbnRlcmZhY2VJZE5hbWVzcGFj
ZUJpdF8gPSBzZXRJbnRlcmZhY2VJZE5hbWVzcGFjZUJpdDsKLSAgICAvLyB8Y2FjaGVkTWVzc2Fn
ZURhdGF8IGNhY2hlcyBpbmZvbWF0aW9uIGFib3V0IGEgbWVzc2FnZSwgc28gaXQgY2FuIGJlCi0g
ICAgLy8gcHJvY2Vzc2VkIGxhdGVyIGlmIGEgY2xpZW50IGlzIG5vdCB5ZXQgYXR0YWNoZWQgdG8g
dGhlIHRhcmdldCBlbmRwb2ludC4KLSAgICB0aGlzLmNhY2hlZE1lc3NhZ2VEYXRhID0gbnVsbDsK
LSAgICB0aGlzLmNvbnRyb2xNZXNzYWdlSGFuZGxlcl8gPSBuZXcgaW50ZXJuYWwuUGlwZUNvbnRy
b2xNZXNzYWdlSGFuZGxlcih0aGlzKTsKLSAgICB0aGlzLmNvbnRyb2xNZXNzYWdlUHJveHlfID0K
LSAgICAgICAgbmV3IGludGVybmFsLlBpcGVDb250cm9sTWVzc2FnZVByb3h5KHRoaXMuY29ubmVj
dG9yXyk7Ci0gICAgdGhpcy5uZXh0SW50ZXJmYWNlSWRWYWx1ZV8gPSAxOwotICAgIHRoaXMuZW5j
b3VudGVyZWRFcnJvcl8gPSBmYWxzZTsKLSAgICB0aGlzLmVuZHBvaW50c18gPSBuZXcgTWFwKCk7
Ci0gIH0KLQotICBSb3V0ZXIucHJvdG90eXBlLmFzc29jaWF0ZUludGVyZmFjZSA9IGZ1bmN0aW9u
KGhhbmRsZVRvU2VuZCkgewotICAgIGlmICghaGFuZGxlVG9TZW5kLnBlbmRpbmdBc3NvY2lhdGlv
bigpKSB7Ci0gICAgICByZXR1cm4gaW50ZXJuYWwua0ludmFsaWRJbnRlcmZhY2VJZDsKLSAgICB9
Ci0KLSAgICB2YXIgaWQgPSAwOwotICAgIGRvIHsKLSAgICAgIGlmICh0aGlzLm5leHRJbnRlcmZh
Y2VJZFZhbHVlXyA+PSBpbnRlcm5hbC5rSW50ZXJmYWNlSWROYW1lc3BhY2VNYXNrKSB7Ci0gICAg
ICAgIHRoaXMubmV4dEludGVyZmFjZUlkVmFsdWVfID0gMTsKLSAgICAgIH0KLSAgICAgIGlkID0g
dGhpcy5uZXh0SW50ZXJmYWNlSWRWYWx1ZV8rKzsKLSAgICAgIGlmICh0aGlzLnNldEludGVyZmFj
ZUlkTmFtZXNwYWNlQml0XykgewotICAgICAgICBpZCArPSBpbnRlcm5hbC5rSW50ZXJmYWNlSWRO
YW1lc3BhY2VNYXNrOwotICAgICAgfQotICAgIH0gd2hpbGUgKHRoaXMuZW5kcG9pbnRzXy5oYXMo
aWQpKTsKLQotICAgIHZhciBlbmRwb2ludCA9IG5ldyBJbnRlcmZhY2VFbmRwb2ludCh0aGlzLCBp
ZCk7Ci0gICAgdGhpcy5lbmRwb2ludHNfLnNldChpZCwgZW5kcG9pbnQpOwotICAgIGlmICh0aGlz
LmVuY291bnRlcmVkRXJyb3JfKSB7Ci0gICAgICB0aGlzLnVwZGF0ZUVuZHBvaW50U3RhdGVNYXlS
ZW1vdmUoZW5kcG9pbnQsCi0gICAgICAgICAgRW5kcG9pbnRTdGF0ZVVwZGF0ZVR5cGUuUEVFUl9F
TkRQT0lOVF9DTE9TRUQpOwotICAgIH0KLSAgICBlbmRwb2ludC5oYW5kbGVDcmVhdGVkID0gdHJ1
ZTsKLQotICAgIGlmICghaGFuZGxlVG9TZW5kLm5vdGlmeUFzc29jaWF0aW9uKGlkLCB0aGlzKSkg
ewotICAgICAgLy8gVGhlIHBlZXIgaGFuZGxlIG9mIHxoYW5kbGVUb1NlbmR8LCB3aGljaCBpcyBz
dXBwb3NlZCB0byBqb2luIHRoaXMKLSAgICAgIC8vIGFzc29jaWF0ZWQgZ3JvdXAsIGhhcyBiZWVu
IGNsb3NlZC4KLSAgICAgIHRoaXMudXBkYXRlRW5kcG9pbnRTdGF0ZU1heVJlbW92ZShlbmRwb2lu
dCwKLSAgICAgICAgICBFbmRwb2ludFN0YXRlVXBkYXRlVHlwZS5FTkRQT0lOVF9DTE9TRUQpOwot
Ci0gICAgICBwaXBlQ29udHJvbE1lc3NhZ2Vwcm94eS5ub3RpZnlQZWVyRW5kcG9pbnRDbG9zZWQo
aWQsCi0gICAgICAgICAgaGFuZGxlVG9TZW5kLmRpc2Nvbm5lY3RSZWFzb24oKSk7Ci0gICAgfQot
Ci0gICAgcmV0dXJuIGlkOwotICB9OwotCi0gIFJvdXRlci5wcm90b3R5cGUuYXR0YWNoRW5kcG9p
bnRDbGllbnQgPSBmdW5jdGlvbigKLSAgICAgIGludGVyZmFjZUVuZHBvaW50SGFuZGxlLCBpbnRl
cmZhY2VFbmRwb2ludENsaWVudCkgewotICAgIGNoZWNrKGludGVybmFsLmlzVmFsaWRJbnRlcmZh
Y2VJZChpbnRlcmZhY2VFbmRwb2ludEhhbmRsZS5pZCgpKSk7Ci0gICAgY2hlY2soaW50ZXJmYWNl
RW5kcG9pbnRDbGllbnQpOwotCi0gICAgdmFyIGVuZHBvaW50ID0gdGhpcy5lbmRwb2ludHNfLmdl
dChpbnRlcmZhY2VFbmRwb2ludEhhbmRsZS5pZCgpKTsKLSAgICBjaGVjayhlbmRwb2ludCk7Ci0g
ICAgY2hlY2soIWVuZHBvaW50LmNsaWVudCk7Ci0gICAgY2hlY2soIWVuZHBvaW50LmNsb3NlZCk7
Ci0gICAgZW5kcG9pbnQuY2xpZW50ID0gaW50ZXJmYWNlRW5kcG9pbnRDbGllbnQ7Ci0KLSAgICBp
ZiAoZW5kcG9pbnQucGVlckNsb3NlZCkgewotICAgICAgc2V0VGltZW91dChlbmRwb2ludC5jbGll
bnQubm90aWZ5RXJyb3IuYmluZChlbmRwb2ludC5jbGllbnQpLCAwKTsKLSAgICB9Ci0KLSAgICBp
ZiAodGhpcy5jYWNoZWRNZXNzYWdlRGF0YSAmJiBpbnRlcmZhY2VFbmRwb2ludEhhbmRsZS5pZCgp
ID09PQotICAgICAgICB0aGlzLmNhY2hlZE1lc3NhZ2VEYXRhLm1lc3NhZ2UuZ2V0SW50ZXJmYWNl
SWQoKSkgewotICAgICAgc2V0VGltZW91dCgoZnVuY3Rpb24oKSB7Ci0gICAgICAgIGlmICghdGhp
cy5jYWNoZWRNZXNzYWdlRGF0YSkgewotICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0g
ICAgICAgIHZhciB0YXJnZXRFbmRwb2ludCA9IHRoaXMuZW5kcG9pbnRzXy5nZXQoCi0gICAgICAg
ICAgICB0aGlzLmNhY2hlZE1lc3NhZ2VEYXRhLm1lc3NhZ2UuZ2V0SW50ZXJmYWNlSWQoKSk7Ci0g
ICAgICAgIC8vIENoZWNrIHRoYXQgdGhlIHRhcmdldCBlbmRwb2ludCdzIGNsaWVudCBzdGlsbCBl
eGlzdHMuCi0gICAgICAgIGlmICh0YXJnZXRFbmRwb2ludCAmJiB0YXJnZXRFbmRwb2ludC5jbGll
bnQpIHsKLSAgICAgICAgICB2YXIgbWVzc2FnZSA9IHRoaXMuY2FjaGVkTWVzc2FnZURhdGEubWVz
c2FnZTsKLSAgICAgICAgICB2YXIgbWVzc2FnZVZhbGlkYXRvciA9IHRoaXMuY2FjaGVkTWVzc2Fn
ZURhdGEubWVzc2FnZVZhbGlkYXRvcjsKLSAgICAgICAgICB0aGlzLmNhY2hlZE1lc3NhZ2VEYXRh
ID0gbnVsbDsKLSAgICAgICAgICB0aGlzLmNvbm5lY3Rvcl8ucmVzdW1lSW5jb21pbmdNZXRob2RD
YWxsUHJvY2Vzc2luZygpOwotICAgICAgICAgIHZhciBvayA9IGVuZHBvaW50LmNsaWVudC5oYW5k
bGVJbmNvbWluZ01lc3NhZ2UobWVzc2FnZSwKLSAgICAgICAgICAgICAgbWVzc2FnZVZhbGlkYXRv
cik7Ci0KLSAgICAgICAgICAvLyBIYW5kbGUgaW52YWxpZCBjYWNoZWQgaW5jb21pbmcgbWVzc2Fn
ZS4KLSAgICAgICAgICBpZiAoIWludGVybmFsLmlzVGVzdGluZ01vZGUoKSAmJiAhb2spIHsKLSAg
ICAgICAgICAgIHRoaXMuY29ubmVjdG9yXy5oYW5kbGVFcnJvcih0cnVlLCB0cnVlKTsKLSAgICAg
ICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0pLmJpbmQodGhpcyksIDApOwotICAgIH0KLQotICAg
IHJldHVybiBlbmRwb2ludDsKLSAgfTsKLQotICBSb3V0ZXIucHJvdG90eXBlLmRldGFjaEVuZHBv
aW50Q2xpZW50ID0gZnVuY3Rpb24oCi0gICAgICBpbnRlcmZhY2VFbmRwb2ludEhhbmRsZSkgewot
ICAgIGNoZWNrKGludGVybmFsLmlzVmFsaWRJbnRlcmZhY2VJZChpbnRlcmZhY2VFbmRwb2ludEhh
bmRsZS5pZCgpKSk7Ci0gICAgdmFyIGVuZHBvaW50ID0gdGhpcy5lbmRwb2ludHNfLmdldChpbnRl
cmZhY2VFbmRwb2ludEhhbmRsZS5pZCgpKTsKLSAgICBjaGVjayhlbmRwb2ludCk7Ci0gICAgY2hl
Y2soZW5kcG9pbnQuY2xpZW50KTsKLSAgICBjaGVjayghZW5kcG9pbnQuY2xvc2VkKTsKLQotICAg
IGVuZHBvaW50LmNsaWVudCA9IG51bGw7Ci0gIH07Ci0KLSAgUm91dGVyLnByb3RvdHlwZS5jcmVh
dGVMb2NhbEVuZHBvaW50SGFuZGxlID0gZnVuY3Rpb24oCi0gICAgICBpbnRlcmZhY2VJZCkgewot
ICAgIGlmICghaW50ZXJuYWwuaXNWYWxpZEludGVyZmFjZUlkKGludGVyZmFjZUlkKSkgewotICAg
ICAgcmV0dXJuIG5ldyBpbnRlcm5hbC5JbnRlcmZhY2VFbmRwb2ludEhhbmRsZSgpOwotICAgIH0K
LQotICAgIC8vIFVubGVzcyBpdCBpcyB0aGUgbWFzdGVyIElELCB8aW50ZXJmYWNlSWR8IGlzIGZy
b20gdGhlIHJlbW90ZSBzaWRlIGFuZAotICAgIC8vIHRoZXJlZm9yZSBpdHMgbmFtZXNwYWNlIGJp
dCBpcyBzdXBwb3NlZCB0byBiZSBkaWZmZXJlbnQgdGhhbiB0aGUgdmFsdWUKLSAgICAvLyB0aGF0
IHRoaXMgcm91dGVyIHdvdWxkIHVzZS4KLSAgICBpZiAoIWludGVybmFsLmlzTWFzdGVySW50ZXJm
YWNlSWQoaW50ZXJmYWNlSWQpICYmCi0gICAgICAgIHRoaXMuc2V0SW50ZXJmYWNlSWROYW1lc3Bh
Y2VCaXRfID09PQotICAgICAgICAgICAgaW50ZXJuYWwuaGFzSW50ZXJmYWNlSWROYW1lc3BhY2VC
aXRTZXQoaW50ZXJmYWNlSWQpKSB7Ci0gICAgICByZXR1cm4gbmV3IGludGVybmFsLkludGVyZmFj
ZUVuZHBvaW50SGFuZGxlKCk7Ci0gICAgfQotCi0gICAgdmFyIGVuZHBvaW50ID0gdGhpcy5lbmRw
b2ludHNfLmdldChpbnRlcmZhY2VJZCk7Ci0KLSAgICBpZiAoIWVuZHBvaW50KSB7Ci0gICAgICBl
bmRwb2ludCA9IG5ldyBJbnRlcmZhY2VFbmRwb2ludCh0aGlzLCBpbnRlcmZhY2VJZCk7Ci0gICAg
ICB0aGlzLmVuZHBvaW50c18uc2V0KGludGVyZmFjZUlkLCBlbmRwb2ludCk7Ci0KLSAgICAgIGNo
ZWNrKCFlbmRwb2ludC5oYW5kbGVDcmVhdGVkKTsKLQotICAgICAgaWYgKHRoaXMuZW5jb3VudGVy
ZWRFcnJvcl8pIHsKLSAgICAgICAgdGhpcy51cGRhdGVFbmRwb2ludFN0YXRlTWF5UmVtb3ZlKGVu
ZHBvaW50LAotICAgICAgICAgICAgRW5kcG9pbnRTdGF0ZVVwZGF0ZVR5cGUuUEVFUl9FTkRQT0lO
VF9DTE9TRUQpOwotICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICAvLyBJZiB0aGUgZW5kcG9p
bnQgYWxyZWFkeSBleGlzdCwgaXQgaXMgYmVjYXVzZSB3ZSBoYXZlIHJlY2VpdmVkIGEKLSAgICAg
IC8vIG5vdGlmaWNhdGlvbiB0aGF0IHRoZSBwZWVyIGVuZHBvaW50IGhhcyBjbG9zZWQuCi0gICAg
ICBjaGVjayghZW5kcG9pbnQuY2xvc2VkKTsKLSAgICAgIGNoZWNrKGVuZHBvaW50LnBlZXJDbG9z
ZWQpOwotCi0gICAgICBpZiAoZW5kcG9pbnQuaGFuZGxlQ3JlYXRlZCkgewotICAgICAgICByZXR1
cm4gbmV3IGludGVybmFsLkludGVyZmFjZUVuZHBvaW50SGFuZGxlKCk7Ci0gICAgICB9Ci0gICAg
fQotCi0gICAgZW5kcG9pbnQuaGFuZGxlQ3JlYXRlZCA9IHRydWU7Ci0gICAgcmV0dXJuIG5ldyBp
bnRlcm5hbC5JbnRlcmZhY2VFbmRwb2ludEhhbmRsZShpbnRlcmZhY2VJZCwgdGhpcyk7Ci0gIH07
Ci0KLSAgUm91dGVyLnByb3RvdHlwZS5hY2NlcHQgPSBmdW5jdGlvbihtZXNzYWdlKSB7Ci0gICAg
dmFyIG1lc3NhZ2VWYWxpZGF0b3IgPSBuZXcgaW50ZXJuYWwuVmFsaWRhdG9yKG1lc3NhZ2UpOwot
ICAgIHZhciBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlTWVzc2FnZUhlYWRlcigpOwot
Ci0gICAgdmFyIG9rID0gZmFsc2U7Ci0gICAgaWYgKGVyciAhPT0gaW50ZXJuYWwudmFsaWRhdGlv
bkVycm9yLk5PTkUpIHsKLSAgICAgIGludGVybmFsLnJlcG9ydFZhbGlkYXRpb25FcnJvcihlcnIp
OwotICAgIH0gZWxzZSBpZiAobWVzc2FnZS5kZXNlcmlhbGl6ZUFzc29jaWF0ZWRFbmRwb2ludEhh
bmRsZXModGhpcykpIHsKLSAgICAgIGlmIChpbnRlcm5hbC5pc1BpcGVDb250cm9sTWVzc2FnZSht
ZXNzYWdlKSkgewotICAgICAgICBvayA9IHRoaXMuY29udHJvbE1lc3NhZ2VIYW5kbGVyXy5hY2Nl
cHQobWVzc2FnZSk7Ci0gICAgICB9IGVsc2UgewotICAgICAgICB2YXIgaW50ZXJmYWNlSWQgPSBt
ZXNzYWdlLmdldEludGVyZmFjZUlkKCk7Ci0gICAgICAgIHZhciBlbmRwb2ludCA9IHRoaXMuZW5k
cG9pbnRzXy5nZXQoaW50ZXJmYWNlSWQpOwotICAgICAgICBpZiAoIWVuZHBvaW50IHx8IGVuZHBv
aW50LmNsb3NlZCkgewotICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0KLSAgICAg
ICAgaWYgKCFlbmRwb2ludC5jbGllbnQpIHsKLSAgICAgICAgICAvLyBXZSBuZWVkIHRvIHdhaXQg
dW50aWwgYSBjbGllbnQgaXMgYXR0YWNoZWQgaW4gb3JkZXIgdG8gZGlzcGF0Y2gKLSAgICAgICAg
ICAvLyBmdXJ0aGVyIG1lc3NhZ2VzLgotICAgICAgICAgIHRoaXMuY2FjaGVkTWVzc2FnZURhdGEg
PSB7bWVzc2FnZTogbWVzc2FnZSwKLSAgICAgICAgICAgICAgbWVzc2FnZVZhbGlkYXRvcjogbWVz
c2FnZVZhbGlkYXRvcn07Ci0gICAgICAgICAgdGhpcy5jb25uZWN0b3JfLnBhdXNlSW5jb21pbmdN
ZXRob2RDYWxsUHJvY2Vzc2luZygpOwotICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9
Ci0gICAgICAgIG9rID0gZW5kcG9pbnQuY2xpZW50LmhhbmRsZUluY29taW5nTWVzc2FnZShtZXNz
YWdlLCBtZXNzYWdlVmFsaWRhdG9yKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIG9rOwot
ICB9OwotCi0gIFJvdXRlci5wcm90b3R5cGUuY2xvc2UgPSBmdW5jdGlvbigpIHsKLSAgICB0aGlz
LmNvbm5lY3Rvcl8uY2xvc2UoKTsKLSAgICAvLyBDbG9zaW5nIHRoZSBtZXNzYWdlIHBpcGUgd29u
J3QgdHJpZ2dlciBjb25uZWN0aW9uIGVycm9yIGhhbmRsZXIuCi0gICAgLy8gRXhwbGljaXRseSBj
YWxsIG9uUGlwZUNvbm5lY3Rpb25FcnJvcigpIHNvIHRoYXQgYXNzb2NpYXRlZCBlbmRwb2ludHMK
LSAgICAvLyB3aWxsIGdldCBub3RpZmllZC4KLSAgICB0aGlzLm9uUGlwZUNvbm5lY3Rpb25FcnJv
cigpOwotICB9OwotCi0gIFJvdXRlci5wcm90b3R5cGUub25QZWVyQXNzb2NpYXRlZEVuZHBvaW50
Q2xvc2VkID0gZnVuY3Rpb24oaW50ZXJmYWNlSWQsCi0gICAgICByZWFzb24pIHsKLSAgICB2YXIg
ZW5kcG9pbnQgPSB0aGlzLmVuZHBvaW50c18uZ2V0KGludGVyZmFjZUlkKTsKLSAgICBpZiAoIWVu
ZHBvaW50KSB7Ci0gICAgICBlbmRwb2ludCA9IG5ldyBJbnRlcmZhY2VFbmRwb2ludCh0aGlzLCBp
bnRlcmZhY2VJZCk7Ci0gICAgICB0aGlzLmVuZHBvaW50c18uc2V0KGludGVyZmFjZUlkLCBlbmRw
b2ludCk7Ci0gICAgfQotCi0gICAgaWYgKHJlYXNvbikgewotICAgICAgZW5kcG9pbnQuZGlzY29u
bmVjdFJlYXNvbiA9IHJlYXNvbjsKLSAgICB9Ci0KLSAgICBpZiAoIWVuZHBvaW50LnBlZXJDbG9z
ZWQpIHsKLSAgICAgIGlmIChlbmRwb2ludC5jbGllbnQpIHsKLSAgICAgICAgc2V0VGltZW91dChl
bmRwb2ludC5jbGllbnQubm90aWZ5RXJyb3IuYmluZChlbmRwb2ludC5jbGllbnQsIHJlYXNvbiks
Ci0gICAgICAgICAgICAgICAgICAgMCk7Ci0gICAgICB9Ci0gICAgICB0aGlzLnVwZGF0ZUVuZHBv
aW50U3RhdGVNYXlSZW1vdmUoZW5kcG9pbnQsCi0gICAgICAgICAgRW5kcG9pbnRTdGF0ZVVwZGF0
ZVR5cGUuUEVFUl9FTkRQT0lOVF9DTE9TRUQpOwotICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKLSAg
fTsKLQotICBSb3V0ZXIucHJvdG90eXBlLm9uUGlwZUNvbm5lY3Rpb25FcnJvciA9IGZ1bmN0aW9u
KCkgewotICAgIHRoaXMuZW5jb3VudGVyZWRFcnJvcl8gPSB0cnVlOwotCi0gICAgZm9yICh2YXIg
ZW5kcG9pbnQgb2YgdGhpcy5lbmRwb2ludHNfLnZhbHVlcygpKSB7Ci0gICAgICBpZiAoZW5kcG9p
bnQuY2xpZW50KSB7Ci0gICAgICAgIHNldFRpbWVvdXQoCi0gICAgICAgICAgICBlbmRwb2ludC5j
bGllbnQubm90aWZ5RXJyb3IuYmluZCgKLSAgICAgICAgICAgICAgICBlbmRwb2ludC5jbGllbnQs
IGVuZHBvaW50LmRpc2Nvbm5lY3RSZWFzb24pLAotICAgICAgICAgICAgMCk7Ci0gICAgICB9Ci0g
ICAgICB0aGlzLnVwZGF0ZUVuZHBvaW50U3RhdGVNYXlSZW1vdmUoZW5kcG9pbnQsCi0gICAgICAg
ICAgRW5kcG9pbnRTdGF0ZVVwZGF0ZVR5cGUuUEVFUl9FTkRQT0lOVF9DTE9TRUQpOwotICAgIH0K
LSAgfTsKLQotICBSb3V0ZXIucHJvdG90eXBlLmNsb3NlRW5kcG9pbnRIYW5kbGUgPSBmdW5jdGlv
bihpbnRlcmZhY2VJZCwgcmVhc29uKSB7Ci0gICAgaWYgKCFpbnRlcm5hbC5pc1ZhbGlkSW50ZXJm
YWNlSWQoaW50ZXJmYWNlSWQpKSB7Ci0gICAgICByZXR1cm47Ci0gICAgfQotICAgIHZhciBlbmRw
b2ludCA9IHRoaXMuZW5kcG9pbnRzXy5nZXQoaW50ZXJmYWNlSWQpOwotICAgIGNoZWNrKGVuZHBv
aW50KTsKLSAgICBjaGVjayghZW5kcG9pbnQuY2xpZW50KTsKLSAgICBjaGVjayghZW5kcG9pbnQu
Y2xvc2VkKTsKLQotICAgIHRoaXMudXBkYXRlRW5kcG9pbnRTdGF0ZU1heVJlbW92ZShlbmRwb2lu
dCwKLSAgICAgICAgRW5kcG9pbnRTdGF0ZVVwZGF0ZVR5cGUuRU5EUE9JTlRfQ0xPU0VEKTsKLQot
ICAgIGlmICghaW50ZXJuYWwuaXNNYXN0ZXJJbnRlcmZhY2VJZChpbnRlcmZhY2VJZCkgfHwgcmVh
c29uKSB7Ci0gICAgICB0aGlzLmNvbnRyb2xNZXNzYWdlUHJveHlfLm5vdGlmeVBlZXJFbmRwb2lu
dENsb3NlZChpbnRlcmZhY2VJZCwgcmVhc29uKTsKLSAgICB9Ci0KLSAgICBpZiAodGhpcy5jYWNo
ZWRNZXNzYWdlRGF0YSAmJiBpbnRlcmZhY2VJZCA9PT0KLSAgICAgICAgdGhpcy5jYWNoZWRNZXNz
YWdlRGF0YS5tZXNzYWdlLmdldEludGVyZmFjZUlkKCkpIHsKLSAgICAgIHRoaXMuY2FjaGVkTWVz
c2FnZURhdGEgPSBudWxsOwotICAgICAgdGhpcy5jb25uZWN0b3JfLnJlc3VtZUluY29taW5nTWV0
aG9kQ2FsbFByb2Nlc3NpbmcoKTsKLSAgICB9Ci0gIH07Ci0KLSAgUm91dGVyLnByb3RvdHlwZS51
cGRhdGVFbmRwb2ludFN0YXRlTWF5UmVtb3ZlID0gZnVuY3Rpb24oZW5kcG9pbnQsCi0gICAgICBl
bmRwb2ludFN0YXRlVXBkYXRlVHlwZSkgewotICAgIGlmIChlbmRwb2ludFN0YXRlVXBkYXRlVHlw
ZSA9PT0gRW5kcG9pbnRTdGF0ZVVwZGF0ZVR5cGUuRU5EUE9JTlRfQ0xPU0VEKSB7Ci0gICAgICBl
bmRwb2ludC5jbG9zZWQgPSB0cnVlOwotICAgIH0gZWxzZSB7Ci0gICAgICBlbmRwb2ludC5wZWVy
Q2xvc2VkID0gdHJ1ZTsKLSAgICB9Ci0gICAgaWYgKGVuZHBvaW50LmNsb3NlZCAmJiBlbmRwb2lu
dC5wZWVyQ2xvc2VkKSB7Ci0gICAgICB0aGlzLmVuZHBvaW50c18uZGVsZXRlKGVuZHBvaW50Lmlk
KTsKLSAgICB9Ci0gIH07Ci0KLSAgaW50ZXJuYWwuUm91dGVyID0gUm91dGVyOwotfSkoKTsKLS8v
IENvcHlyaWdodCAyMDE0IFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUg
bGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLQotLyoq
Ci0gKiBEZWZpbmVzIGZ1bmN0aW9ucyBmb3IgdHJhbnNsYXRpbmcgYmV0d2VlbiBKYXZhU2NyaXB0
IHN0cmluZ3MgYW5kIFVURjggc3RyaW5ncwotICogc3RvcmVkIGluIEFycmF5QnVmZmVycy4gVGhl
cmUgaXMgbXVjaCByb29tIGZvciBvcHRpbWl6YXRpb24gaW4gdGhpcyBjb2RlIGlmCi0gKiBpdCBw
cm92ZXMgbmVjZXNzYXJ5LgotICovCi0oZnVuY3Rpb24oKSB7Ci0gIHZhciBpbnRlcm5hbCA9IG1v
am8uaW50ZXJuYWw7Ci0gIHZhciB0ZXh0RGVjb2RlciA9IG5ldyBUZXh0RGVjb2RlcigndXRmLTgn
KTsKLSAgdmFyIHRleHRFbmNvZGVyID0gbmV3IFRleHRFbmNvZGVyKCd1dGYtOCcpOwotCi0gIC8q
KgotICAgKiBEZWNvZGVzIHRoZSBVVEY4IHN0cmluZyBmcm9tIHRoZSBnaXZlbiBidWZmZXIuCi0g
ICAqIEBwYXJhbSB7QXJyYXlCdWZmZXJWaWV3fSBidWZmZXIgVGhlIGJ1ZmZlciBjb250YWluaW5n
IFVURjggc3RyaW5nIGRhdGEuCi0gICAqIEByZXR1cm4ge3N0cmluZ30gVGhlIGNvcnJlc3BvbmRp
bmcgSmF2YVNjcmlwdCBzdHJpbmcuCi0gICAqLwotICBmdW5jdGlvbiBkZWNvZGVVdGY4U3RyaW5n
KGJ1ZmZlcikgewotICAgIHJldHVybiB0ZXh0RGVjb2Rlci5kZWNvZGUoYnVmZmVyKTsKLSAgfQot
Ci0gIC8qKgotICAgKiBFbmNvZGVzIHRoZSBnaXZlbiBKYXZhU2NyaXB0IHN0cmluZyBpbnRvIFVU
RjguCi0gICAqIEBwYXJhbSB7c3RyaW5nfSBzdHIgVGhlIHN0cmluZyB0byBlbmNvZGUuCi0gICAq
IEBwYXJhbSB7QXJyYXlCdWZmZXJWaWV3fSBvdXRwdXRCdWZmZXIgVGhlIGJ1ZmZlciB0byBjb250
YWluIHRoZSByZXN1bHQuCi0gICAqIFNob3VsZCBiZSBwcmUtYWxsb2NhdGVkIHRvIGhvbGQgZW5v
dWdoIHNwYWNlLiBVc2UgfHV0ZjhMZW5ndGh8IHRvIGRldGVybWluZQotICAgKiBob3cgbXVjaCBz
cGFjZSBpcyByZXF1aXJlZC4KLSAgICogQHJldHVybiB7bnVtYmVyfSBUaGUgbnVtYmVyIG9mIGJ5
dGVzIHdyaXR0ZW4gdG8gfG91dHB1dEJ1ZmZlcnwuCi0gICAqLwotICBmdW5jdGlvbiBlbmNvZGVV
dGY4U3RyaW5nKHN0ciwgb3V0cHV0QnVmZmVyKSB7Ci0gICAgY29uc3QgdXRmOEJ1ZmZlciA9IHRl
eHRFbmNvZGVyLmVuY29kZShzdHIpOwotICAgIGlmIChvdXRwdXRCdWZmZXIubGVuZ3RoIDwgdXRm
OEJ1ZmZlci5sZW5ndGgpCi0gICAgICB0aHJvdyBuZXcgRXJyb3IoIkJ1ZmZlciB0b28gc21hbGwg
Zm9yIGVuY29kZVV0ZjhTdHJpbmciKTsKLSAgICBvdXRwdXRCdWZmZXIuc2V0KHV0ZjhCdWZmZXIp
OwotICAgIHJldHVybiB1dGY4QnVmZmVyLmxlbmd0aDsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1
cm5zIHRoZSBudW1iZXIgb2YgYnl0ZXMgdGhhdCBhIFVURjggZW5jb2Rpbmcgb2YgdGhlIEphdmFT
Y3JpcHQgc3RyaW5nCi0gICAqIHxzdHJ8IHdvdWxkIG9jY3VweS4KLSAgICovCi0gIGZ1bmN0aW9u
IHV0ZjhMZW5ndGgoc3RyKSB7Ci0gICAgcmV0dXJuIHRleHRFbmNvZGVyLmVuY29kZShzdHIpLmxl
bmd0aDsKLSAgfQotCi0gIGludGVybmFsLmRlY29kZVV0ZjhTdHJpbmcgPSBkZWNvZGVVdGY4U3Ry
aW5nOwotICBpbnRlcm5hbC5lbmNvZGVVdGY4U3RyaW5nID0gZW5jb2RlVXRmOFN0cmluZzsKLSAg
aW50ZXJuYWwudXRmOExlbmd0aCA9IHV0ZjhMZW5ndGg7Ci19KSgpOwotLy8gQ29weXJpZ2h0IDIw
MTQgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2Yg
dGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQg
Y2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotCi0oZnVuY3Rpb24oKSB7Ci0g
IHZhciBpbnRlcm5hbCA9IG1vam8uaW50ZXJuYWw7Ci0KLSAgdmFyIHZhbGlkYXRpb25FcnJvciA9
IHsKLSAgICBOT05FOiAnVkFMSURBVElPTl9FUlJPUl9OT05FJywKLSAgICBNSVNBTElHTkVEX09C
SkVDVDogJ1ZBTElEQVRJT05fRVJST1JfTUlTQUxJR05FRF9PQkpFQ1QnLAotICAgIElMTEVHQUxf
TUVNT1JZX1JBTkdFOiAnVkFMSURBVElPTl9FUlJPUl9JTExFR0FMX01FTU9SWV9SQU5HRScsCi0g
ICAgVU5FWFBFQ1RFRF9TVFJVQ1RfSEVBREVSOiAnVkFMSURBVElPTl9FUlJPUl9VTkVYUEVDVEVE
X1NUUlVDVF9IRUFERVInLAotICAgIFVORVhQRUNURURfQVJSQVlfSEVBREVSOiAnVkFMSURBVElP
Tl9FUlJPUl9VTkVYUEVDVEVEX0FSUkFZX0hFQURFUicsCi0gICAgSUxMRUdBTF9IQU5ETEU6ICdW
QUxJREFUSU9OX0VSUk9SX0lMTEVHQUxfSEFORExFJywKLSAgICBVTkVYUEVDVEVEX0lOVkFMSURf
SEFORExFOiAnVkFMSURBVElPTl9FUlJPUl9VTkVYUEVDVEVEX0lOVkFMSURfSEFORExFJywKLSAg
ICBJTExFR0FMX1BPSU5URVI6ICdWQUxJREFUSU9OX0VSUk9SX0lMTEVHQUxfUE9JTlRFUicsCi0g
ICAgVU5FWFBFQ1RFRF9OVUxMX1BPSU5URVI6ICdWQUxJREFUSU9OX0VSUk9SX1VORVhQRUNURURf
TlVMTF9QT0lOVEVSJywKLSAgICBJTExFR0FMX0lOVEVSRkFDRV9JRDogJ1ZBTElEQVRJT05fRVJS
T1JfSUxMRUdBTF9JTlRFUkZBQ0VfSUQnLAotICAgIFVORVhQRUNURURfSU5WQUxJRF9JTlRFUkZB
Q0VfSUQ6Ci0gICAgICAgICdWQUxJREFUSU9OX0VSUk9SX1VORVhQRUNURURfSU5WQUxJRF9JTlRF
UkZBQ0VfSUQnLAotICAgIE1FU1NBR0VfSEVBREVSX0lOVkFMSURfRkxBR1M6Ci0gICAgICAgICdW
QUxJREFUSU9OX0VSUk9SX01FU1NBR0VfSEVBREVSX0lOVkFMSURfRkxBR1MnLAotICAgIE1FU1NB
R0VfSEVBREVSX01JU1NJTkdfUkVRVUVTVF9JRDoKLSAgICAgICAgJ1ZBTElEQVRJT05fRVJST1Jf
TUVTU0FHRV9IRUFERVJfTUlTU0lOR19SRVFVRVNUX0lEJywKLSAgICBESUZGRVJFTlRfU0laRURf
QVJSQVlTX0lOX01BUDoKLSAgICAgICAgJ1ZBTElEQVRJT05fRVJST1JfRElGRkVSRU5UX1NJWkVE
X0FSUkFZU19JTl9NQVAnLAotICAgIElOVkFMSURfVU5JT05fU0laRTogJ1ZBTElEQVRJT05fRVJS
T1JfSU5WQUxJRF9VTklPTl9TSVpFJywKLSAgICBVTkVYUEVDVEVEX05VTExfVU5JT046ICdWQUxJ
REFUSU9OX0VSUk9SX1VORVhQRUNURURfTlVMTF9VTklPTicsCi0gICAgVU5LTk9XTl9FTlVNX1ZB
TFVFOiAnVkFMSURBVElPTl9FUlJPUl9VTktOT1dOX0VOVU1fVkFMVUUnLAotICB9OwotCi0gIHZh
ciBOVUxMX01PSk9fUE9JTlRFUiA9ICJOVUxMX01PSk9fUE9JTlRFUiI7Ci0gIHZhciBnVmFsaWRh
dGlvbkVycm9yT2JzZXJ2ZXIgPSBudWxsOwotCi0gIGZ1bmN0aW9uIHJlcG9ydFZhbGlkYXRpb25F
cnJvcihlcnJvcikgewotICAgIGlmIChnVmFsaWRhdGlvbkVycm9yT2JzZXJ2ZXIpIHsKLSAgICAg
IGdWYWxpZGF0aW9uRXJyb3JPYnNlcnZlci5sYXN0RXJyb3IgPSBlcnJvcjsKLSAgICB9IGVsc2Ug
ewotICAgICAgY29uc29sZS53YXJuKCdJbnZhbGlkIG1lc3NhZ2U6ICcgKyBlcnJvcik7Ci0gICAg
fQotICB9Ci0KLSAgdmFyIFZhbGlkYXRpb25FcnJvck9ic2VydmVyRm9yVGVzdGluZyA9IChmdW5j
dGlvbigpIHsKLSAgICBmdW5jdGlvbiBPYnNlcnZlcigpIHsKLSAgICAgIHRoaXMubGFzdEVycm9y
ID0gdmFsaWRhdGlvbkVycm9yLk5PTkU7Ci0gICAgfQotCi0gICAgT2JzZXJ2ZXIucHJvdG90eXBl
LnJlc2V0ID0gZnVuY3Rpb24oKSB7Ci0gICAgICB0aGlzLmxhc3RFcnJvciA9IHZhbGlkYXRpb25F
cnJvci5OT05FOwotICAgIH07Ci0KLSAgICByZXR1cm4gewotICAgICAgZ2V0SW5zdGFuY2U6IGZ1
bmN0aW9uKCkgewotICAgICAgICBpZiAoIWdWYWxpZGF0aW9uRXJyb3JPYnNlcnZlcikgewotICAg
ICAgICAgIGdWYWxpZGF0aW9uRXJyb3JPYnNlcnZlciA9IG5ldyBPYnNlcnZlcigpOwotICAgICAg
ICB9Ci0gICAgICAgIHJldHVybiBnVmFsaWRhdGlvbkVycm9yT2JzZXJ2ZXI7Ci0gICAgICB9Ci0g
ICAgfTsKLSAgfSkoKTsKLQotICBmdW5jdGlvbiBpc1Rlc3RpbmdNb2RlKCkgewotICAgIHJldHVy
biBCb29sZWFuKGdWYWxpZGF0aW9uRXJyb3JPYnNlcnZlcik7Ci0gIH0KLQotICBmdW5jdGlvbiBj
bGVhclRlc3RpbmdNb2RlKCkgewotICAgIGdWYWxpZGF0aW9uRXJyb3JPYnNlcnZlciA9IG51bGw7
Ci0gIH0KLQotICBmdW5jdGlvbiBpc0VudW1DbGFzcyhjbHMpIHsKLSAgICByZXR1cm4gY2xzIGlu
c3RhbmNlb2YgaW50ZXJuYWwuRW51bTsKLSAgfQotCi0gIGZ1bmN0aW9uIGlzU3RyaW5nQ2xhc3Mo
Y2xzKSB7Ci0gICAgcmV0dXJuIGNscyA9PT0gaW50ZXJuYWwuU3RyaW5nIHx8IGNscyA9PT0gaW50
ZXJuYWwuTnVsbGFibGVTdHJpbmc7Ci0gIH0KLQotICBmdW5jdGlvbiBpc0hhbmRsZUNsYXNzKGNs
cykgewotICAgIHJldHVybiBjbHMgPT09IGludGVybmFsLkhhbmRsZSB8fCBjbHMgPT09IGludGVy
bmFsLk51bGxhYmxlSGFuZGxlOwotICB9Ci0KLSAgZnVuY3Rpb24gaXNJbnRlcmZhY2VDbGFzcyhj
bHMpIHsKLSAgICByZXR1cm4gY2xzIGluc3RhbmNlb2YgaW50ZXJuYWwuSW50ZXJmYWNlOwotICB9
Ci0KLSAgZnVuY3Rpb24gaXNJbnRlcmZhY2VSZXF1ZXN0Q2xhc3MoY2xzKSB7Ci0gICAgcmV0dXJu
IGNscyA9PT0gaW50ZXJuYWwuSW50ZXJmYWNlUmVxdWVzdCB8fAotICAgICAgICBjbHMgPT09IGlu
dGVybmFsLk51bGxhYmxlSW50ZXJmYWNlUmVxdWVzdDsKLSAgfQotCi0gIGZ1bmN0aW9uIGlzQXNz
b2NpYXRlZEludGVyZmFjZUNsYXNzKGNscykgewotICAgIHJldHVybiBjbHMgPT09IGludGVybmFs
LkFzc29jaWF0ZWRJbnRlcmZhY2VQdHJJbmZvIHx8Ci0gICAgICAgIGNscyA9PT0gaW50ZXJuYWwu
TnVsbGFibGVBc3NvY2lhdGVkSW50ZXJmYWNlUHRySW5mbzsKLSAgfQotCi0gIGZ1bmN0aW9uIGlz
QXNzb2NpYXRlZEludGVyZmFjZVJlcXVlc3RDbGFzcyhjbHMpIHsKLSAgICByZXR1cm4gY2xzID09
PSBpbnRlcm5hbC5Bc3NvY2lhdGVkSW50ZXJmYWNlUmVxdWVzdCB8fAotICAgICAgICBjbHMgPT09
IGludGVybmFsLk51bGxhYmxlQXNzb2NpYXRlZEludGVyZmFjZVJlcXVlc3Q7Ci0gIH0KLQotICBm
dW5jdGlvbiBpc051bGxhYmxlKHR5cGUpIHsKLSAgICByZXR1cm4gdHlwZSA9PT0gaW50ZXJuYWwu
TnVsbGFibGVTdHJpbmcgfHwKLSAgICAgICAgdHlwZSA9PT0gaW50ZXJuYWwuTnVsbGFibGVIYW5k
bGUgfHwKLSAgICAgICAgdHlwZSA9PT0gaW50ZXJuYWwuTnVsbGFibGVBc3NvY2lhdGVkSW50ZXJm
YWNlUHRySW5mbyB8fAotICAgICAgICB0eXBlID09PSBpbnRlcm5hbC5OdWxsYWJsZUFzc29jaWF0
ZWRJbnRlcmZhY2VSZXF1ZXN0IHx8Ci0gICAgICAgIHR5cGUgPT09IGludGVybmFsLk51bGxhYmxl
SW50ZXJmYWNlIHx8Ci0gICAgICAgIHR5cGUgPT09IGludGVybmFsLk51bGxhYmxlSW50ZXJmYWNl
UmVxdWVzdCB8fAotICAgICAgICB0eXBlIGluc3RhbmNlb2YgaW50ZXJuYWwuTnVsbGFibGVBcnJh
eU9mIHx8Ci0gICAgICAgIHR5cGUgaW5zdGFuY2VvZiBpbnRlcm5hbC5OdWxsYWJsZVBvaW50ZXJU
bzsKLSAgfQotCi0gIGZ1bmN0aW9uIFZhbGlkYXRvcihtZXNzYWdlKSB7Ci0gICAgdGhpcy5tZXNz
YWdlID0gbWVzc2FnZTsKLSAgICB0aGlzLm9mZnNldCA9IDA7Ci0gICAgdGhpcy5oYW5kbGVJbmRl
eCA9IDA7Ci0gICAgdGhpcy5hc3NvY2lhdGVkRW5kcG9pbnRIYW5kbGVJbmRleCA9IDA7Ci0gICAg
dGhpcy5wYXlsb2FkSW50ZXJmYWNlSWRzID0gbnVsbDsKLSAgICB0aGlzLm9mZnNldExpbWl0ID0g
dGhpcy5tZXNzYWdlLmJ1ZmZlci5ieXRlTGVuZ3RoOwotICB9Ci0KLSAgT2JqZWN0LmRlZmluZVBy
b3BlcnR5KFZhbGlkYXRvci5wcm90b3R5cGUsICJoYW5kbGVJbmRleExpbWl0IiwgewotICAgIGdl
dDogZnVuY3Rpb24oKSB7IHJldHVybiB0aGlzLm1lc3NhZ2UuaGFuZGxlcy5sZW5ndGg7IH0KLSAg
fSk7Ci0KLSAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFZhbGlkYXRvci5wcm90b3R5cGUsICJhc3Nv
Y2lhdGVkSGFuZGxlSW5kZXhMaW1pdCIsIHsKLSAgICBnZXQ6IGZ1bmN0aW9uKCkgewotICAgICAg
cmV0dXJuIHRoaXMucGF5bG9hZEludGVyZmFjZUlkcyA/IHRoaXMucGF5bG9hZEludGVyZmFjZUlk
cy5sZW5ndGggOiAwOwotICAgIH0KLSAgfSk7Ci0KLSAgLy8gVHJ1ZSBpZiB3ZSBjYW4gc2FmZWx5
IGFsbG9jYXRlIGEgYmxvY2sgb2YgYnl0ZXMgZnJvbSBzdGFydCB0bwotICAvLyB0byBzdGFydCAr
IG51bUJ5dGVzLgotICBWYWxpZGF0b3IucHJvdG90eXBlLmlzVmFsaWRSYW5nZSA9IGZ1bmN0aW9u
KHN0YXJ0LCBudW1CeXRlcykgewotICAgIC8vIE9ubHkgcG9zaXRpdmUgSmF2YVNjcmlwdCBpbnRl
Z2VycyB0aGF0IGFyZSBsZXNzIHRoYW4gMl41MwotICAgIC8vIChOdW1iZXIuTUFYX1NBRkVfSU5U
RUdFUikgY2FuIGJlIHJlcHJlc2VudGVkIGV4YWN0bHkuCi0gICAgaWYgKHN0YXJ0IDwgdGhpcy5v
ZmZzZXQgfHwgbnVtQnl0ZXMgPD0gMCB8fAotICAgICAgICAhTnVtYmVyLmlzU2FmZUludGVnZXIo
c3RhcnQpIHx8Ci0gICAgICAgICFOdW1iZXIuaXNTYWZlSW50ZWdlcihudW1CeXRlcykpCi0gICAg
ICByZXR1cm4gZmFsc2U7Ci0KLSAgICB2YXIgbmV3T2Zmc2V0ID0gc3RhcnQgKyBudW1CeXRlczsK
LSAgICBpZiAoIU51bWJlci5pc1NhZmVJbnRlZ2VyKG5ld09mZnNldCkgfHwgbmV3T2Zmc2V0ID4g
dGhpcy5vZmZzZXRMaW1pdCkKLSAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHJldHVybiB0cnVl
OwotICB9OwotCi0gIFZhbGlkYXRvci5wcm90b3R5cGUuY2xhaW1SYW5nZSA9IGZ1bmN0aW9uKHN0
YXJ0LCBudW1CeXRlcykgewotICAgIGlmICh0aGlzLmlzVmFsaWRSYW5nZShzdGFydCwgbnVtQnl0
ZXMpKSB7Ci0gICAgICB0aGlzLm9mZnNldCA9IHN0YXJ0ICsgbnVtQnl0ZXM7Ci0gICAgICByZXR1
cm4gdHJ1ZTsKLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9OwotCi0gIFZhbGlkYXRvci5w
cm90b3R5cGUuY2xhaW1IYW5kbGUgPSBmdW5jdGlvbihpbmRleCkgewotICAgIGlmIChpbmRleCA9
PT0gaW50ZXJuYWwua0VuY29kZWRJbnZhbGlkSGFuZGxlVmFsdWUpCi0gICAgICByZXR1cm4gdHJ1
ZTsKLQotICAgIGlmIChpbmRleCA8IHRoaXMuaGFuZGxlSW5kZXggfHwgaW5kZXggPj0gdGhpcy5o
YW5kbGVJbmRleExpbWl0KQotICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgLy8gVGhpcyBpcyBz
YWZlIGJlY2F1c2UgaGFuZGxlIGluZGljZXMgYXJlIHVpbnQzMi4KLSAgICB0aGlzLmhhbmRsZUlu
ZGV4ID0gaW5kZXggKyAxOwotICAgIHJldHVybiB0cnVlOwotICB9OwotCi0gIFZhbGlkYXRvci5w
cm90b3R5cGUuY2xhaW1Bc3NvY2lhdGVkRW5kcG9pbnRIYW5kbGUgPSBmdW5jdGlvbihpbmRleCkg
ewotICAgIGlmIChpbmRleCA9PT0gaW50ZXJuYWwua0VuY29kZWRJbnZhbGlkSGFuZGxlVmFsdWUp
IHsKLSAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIGlmIChpbmRleCA8IHRoaXMuYXNz
b2NpYXRlZEVuZHBvaW50SGFuZGxlSW5kZXggfHwKLSAgICAgICAgaW5kZXggPj0gdGhpcy5hc3Nv
Y2lhdGVkSGFuZGxlSW5kZXhMaW1pdCkgewotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQot
ICAgIC8vIFRoaXMgaXMgc2FmZSBiZWNhdXNlIGhhbmRsZSBpbmRpY2VzIGFyZSB1aW50MzIuCi0g
ICAgdGhpcy5hc3NvY2lhdGVkRW5kcG9pbnRIYW5kbGVJbmRleCA9IGluZGV4ICsgMTsKLSAgICBy
ZXR1cm4gdHJ1ZTsKLSAgfTsKLQotICBWYWxpZGF0b3IucHJvdG90eXBlLnZhbGlkYXRlRW51bSA9
IGZ1bmN0aW9uKG9mZnNldCwgZW51bUNsYXNzKSB7Ci0gICAgLy8gTm90ZTogQXNzdW1lcyB0aGF0
IGVudW1zIGFyZSBhbHdheXMgMzIgYml0cyEgQnV0IHRoaXMgbWF0Y2hlcwotICAgIC8vIG1vam9t
OjpnZW5lcmF0ZTo6cGFjazo6UGFja2VkRmllbGQ6OkdldFNpemVGb3JLaW5kLCBzbyBpdCBzaG91
bGQgYmUgb2theS4KLSAgICB2YXIgdmFsdWUgPSB0aGlzLm1lc3NhZ2UuYnVmZmVyLmdldEludDMy
KG9mZnNldCk7Ci0gICAgcmV0dXJuIGVudW1DbGFzcy52YWxpZGF0ZSh2YWx1ZSk7Ci0gIH0KLQot
ICBWYWxpZGF0b3IucHJvdG90eXBlLnZhbGlkYXRlSGFuZGxlID0gZnVuY3Rpb24ob2Zmc2V0LCBu
dWxsYWJsZSkgewotICAgIHZhciBpbmRleCA9IHRoaXMubWVzc2FnZS5idWZmZXIuZ2V0VWludDMy
KG9mZnNldCk7Ci0KLSAgICBpZiAoaW5kZXggPT09IGludGVybmFsLmtFbmNvZGVkSW52YWxpZEhh
bmRsZVZhbHVlKQotICAgICAgcmV0dXJuIG51bGxhYmxlID8KLSAgICAgICAgICB2YWxpZGF0aW9u
RXJyb3IuTk9ORSA6IHZhbGlkYXRpb25FcnJvci5VTkVYUEVDVEVEX0lOVkFMSURfSEFORExFOwot
Ci0gICAgaWYgKCF0aGlzLmNsYWltSGFuZGxlKGluZGV4KSkKLSAgICAgIHJldHVybiB2YWxpZGF0
aW9uRXJyb3IuSUxMRUdBTF9IQU5ETEU7Ci0KLSAgICByZXR1cm4gdmFsaWRhdGlvbkVycm9yLk5P
TkU7Ci0gIH07Ci0KLSAgVmFsaWRhdG9yLnByb3RvdHlwZS52YWxpZGF0ZUFzc29jaWF0ZWRFbmRw
b2ludEhhbmRsZSA9IGZ1bmN0aW9uKG9mZnNldCwKLSAgICAgIG51bGxhYmxlKSB7Ci0gICAgdmFy
IGluZGV4ID0gdGhpcy5tZXNzYWdlLmJ1ZmZlci5nZXRVaW50MzIob2Zmc2V0KTsKLQotICAgIGlm
IChpbmRleCA9PT0gaW50ZXJuYWwua0VuY29kZWRJbnZhbGlkSGFuZGxlVmFsdWUpIHsKLSAgICAg
IHJldHVybiBudWxsYWJsZSA/IHZhbGlkYXRpb25FcnJvci5OT05FIDoKLSAgICAgICAgICB2YWxp
ZGF0aW9uRXJyb3IuVU5FWFBFQ1RFRF9JTlZBTElEX0lOVEVSRkFDRV9JRDsKLSAgICB9Ci0KLSAg
ICBpZiAoIXRoaXMuY2xhaW1Bc3NvY2lhdGVkRW5kcG9pbnRIYW5kbGUoaW5kZXgpKSB7Ci0gICAg
ICByZXR1cm4gdmFsaWRhdGlvbkVycm9yLklMTEVHQUxfSU5URVJGQUNFX0lEOwotICAgIH0KLQot
ICAgIHJldHVybiB2YWxpZGF0aW9uRXJyb3IuTk9ORTsKLSAgfTsKLQotICBWYWxpZGF0b3IucHJv
dG90eXBlLnZhbGlkYXRlSW50ZXJmYWNlID0gZnVuY3Rpb24ob2Zmc2V0LCBudWxsYWJsZSkgewot
ICAgIHJldHVybiB0aGlzLnZhbGlkYXRlSGFuZGxlKG9mZnNldCwgbnVsbGFibGUpOwotICB9Owot
Ci0gIFZhbGlkYXRvci5wcm90b3R5cGUudmFsaWRhdGVJbnRlcmZhY2VSZXF1ZXN0ID0gZnVuY3Rp
b24ob2Zmc2V0LCBudWxsYWJsZSkgewotICAgIHJldHVybiB0aGlzLnZhbGlkYXRlSGFuZGxlKG9m
ZnNldCwgbnVsbGFibGUpOwotICB9OwotCi0gIFZhbGlkYXRvci5wcm90b3R5cGUudmFsaWRhdGVB
c3NvY2lhdGVkSW50ZXJmYWNlID0gZnVuY3Rpb24ob2Zmc2V0LAotICAgICAgbnVsbGFibGUpIHsK
LSAgICByZXR1cm4gdGhpcy52YWxpZGF0ZUFzc29jaWF0ZWRFbmRwb2ludEhhbmRsZShvZmZzZXQs
IG51bGxhYmxlKTsKLSAgfTsKLQotICBWYWxpZGF0b3IucHJvdG90eXBlLnZhbGlkYXRlQXNzb2Np
YXRlZEludGVyZmFjZVJlcXVlc3QgPSBmdW5jdGlvbigKLSAgICAgIG9mZnNldCwgbnVsbGFibGUp
IHsKLSAgICByZXR1cm4gdGhpcy52YWxpZGF0ZUFzc29jaWF0ZWRFbmRwb2ludEhhbmRsZShvZmZz
ZXQsIG51bGxhYmxlKTsKLSAgfTsKLQotICBWYWxpZGF0b3IucHJvdG90eXBlLnZhbGlkYXRlU3Ry
dWN0SGVhZGVyID0gZnVuY3Rpb24ob2Zmc2V0LCBtaW5OdW1CeXRlcykgewotICAgIGlmICghaW50
ZXJuYWwuaXNBbGlnbmVkKG9mZnNldCkpCi0gICAgICByZXR1cm4gdmFsaWRhdGlvbkVycm9yLk1J
U0FMSUdORURfT0JKRUNUOwotCi0gICAgaWYgKCF0aGlzLmlzVmFsaWRSYW5nZShvZmZzZXQsIGlu
dGVybmFsLmtTdHJ1Y3RIZWFkZXJTaXplKSkKLSAgICAgIHJldHVybiB2YWxpZGF0aW9uRXJyb3Iu
SUxMRUdBTF9NRU1PUllfUkFOR0U7Ci0KLSAgICB2YXIgbnVtQnl0ZXMgPSB0aGlzLm1lc3NhZ2Uu
YnVmZmVyLmdldFVpbnQzMihvZmZzZXQpOwotCi0gICAgaWYgKG51bUJ5dGVzIDwgbWluTnVtQnl0
ZXMpCi0gICAgICByZXR1cm4gdmFsaWRhdGlvbkVycm9yLlVORVhQRUNURURfU1RSVUNUX0hFQURF
UjsKLQotICAgIGlmICghdGhpcy5jbGFpbVJhbmdlKG9mZnNldCwgbnVtQnl0ZXMpKQotICAgICAg
cmV0dXJuIHZhbGlkYXRpb25FcnJvci5JTExFR0FMX01FTU9SWV9SQU5HRTsKLQotICAgIHJldHVy
biB2YWxpZGF0aW9uRXJyb3IuTk9ORTsKLSAgfTsKLQotICBWYWxpZGF0b3IucHJvdG90eXBlLnZh
bGlkYXRlU3RydWN0VmVyc2lvbiA9IGZ1bmN0aW9uKG9mZnNldCwgdmVyc2lvblNpemVzKSB7Ci0g
ICAgdmFyIG51bUJ5dGVzID0gdGhpcy5tZXNzYWdlLmJ1ZmZlci5nZXRVaW50MzIob2Zmc2V0KTsK
LSAgICB2YXIgdmVyc2lvbiA9IHRoaXMubWVzc2FnZS5idWZmZXIuZ2V0VWludDMyKG9mZnNldCAr
IDQpOwotCi0gICAgaWYgKHZlcnNpb24gPD0gdmVyc2lvblNpemVzW3ZlcnNpb25TaXplcy5sZW5n
dGggLSAxXS52ZXJzaW9uKSB7Ci0gICAgICAvLyBTY2FuIGluIHJldmVyc2Ugb3JkZXIgdG8gb3B0
aW1pemUgZm9yIG1vcmUgcmVjZW50IHZlcnNpb25TaXplcy4KLSAgICAgIGZvciAodmFyIGkgPSB2
ZXJzaW9uU2l6ZXMubGVuZ3RoIC0gMTsgaSA+PSAwOyAtLWkpIHsKLSAgICAgICAgaWYgKHZlcnNp
b24gPj0gdmVyc2lvblNpemVzW2ldLnZlcnNpb24pIHsKLSAgICAgICAgICBpZiAobnVtQnl0ZXMg
PT0gdmVyc2lvblNpemVzW2ldLm51bUJ5dGVzKQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgcmV0dXJuIHZhbGlkYXRpb25FcnJvci5VTkVYUEVDVEVEX1NUUlVDVF9IRUFERVI7Ci0gICAg
ICAgIH0KLSAgICAgIH0KLSAgICB9IGVsc2UgaWYgKG51bUJ5dGVzIDwgdmVyc2lvblNpemVzW3Zl
cnNpb25TaXplcy5sZW5ndGgtMV0ubnVtQnl0ZXMpIHsKLSAgICAgIHJldHVybiB2YWxpZGF0aW9u
RXJyb3IuVU5FWFBFQ1RFRF9TVFJVQ1RfSEVBREVSOwotICAgIH0KLQotICAgIHJldHVybiB2YWxp
ZGF0aW9uRXJyb3IuTk9ORTsKLSAgfTsKLQotICBWYWxpZGF0b3IucHJvdG90eXBlLmlzRmllbGRJ
blN0cnVjdFZlcnNpb24gPSBmdW5jdGlvbihvZmZzZXQsIGZpZWxkVmVyc2lvbikgewotICAgIHZh
ciBzdHJ1Y3RWZXJzaW9uID0gdGhpcy5tZXNzYWdlLmJ1ZmZlci5nZXRVaW50MzIob2Zmc2V0ICsg
NCk7Ci0gICAgcmV0dXJuIGZpZWxkVmVyc2lvbiA8PSBzdHJ1Y3RWZXJzaW9uOwotICB9OwotCi0g
IFZhbGlkYXRvci5wcm90b3R5cGUudmFsaWRhdGVNZXNzYWdlSGVhZGVyID0gZnVuY3Rpb24oKSB7
Ci0gICAgdmFyIGVyciA9IHRoaXMudmFsaWRhdGVTdHJ1Y3RIZWFkZXIoMCwgaW50ZXJuYWwua01l
c3NhZ2VWMEhlYWRlclNpemUpOwotICAgIGlmIChlcnIgIT0gdmFsaWRhdGlvbkVycm9yLk5PTkUp
IHsKLSAgICAgIHJldHVybiBlcnI7Ci0gICAgfQotCi0gICAgdmFyIG51bUJ5dGVzID0gdGhpcy5t
ZXNzYWdlLmdldEhlYWRlck51bUJ5dGVzKCk7Ci0gICAgdmFyIHZlcnNpb24gPSB0aGlzLm1lc3Nh
Z2UuZ2V0SGVhZGVyVmVyc2lvbigpOwotCi0gICAgdmFyIHZhbGlkVmVyc2lvbkFuZE51bUJ5dGVz
ID0KLSAgICAgICAgKHZlcnNpb24gPT0gMCAmJiBudW1CeXRlcyA9PSBpbnRlcm5hbC5rTWVzc2Fn
ZVYwSGVhZGVyU2l6ZSkgfHwKLSAgICAgICAgKHZlcnNpb24gPT0gMSAmJiBudW1CeXRlcyA9PSBp
bnRlcm5hbC5rTWVzc2FnZVYxSGVhZGVyU2l6ZSkgfHwKLSAgICAgICAgKHZlcnNpb24gPT0gMiAm
JiBudW1CeXRlcyA9PSBpbnRlcm5hbC5rTWVzc2FnZVYySGVhZGVyU2l6ZSkgfHwKLSAgICAgICAg
KHZlcnNpb24gPiAyICYmIG51bUJ5dGVzID49IGludGVybmFsLmtNZXNzYWdlVjJIZWFkZXJTaXpl
KTsKLQotICAgIGlmICghdmFsaWRWZXJzaW9uQW5kTnVtQnl0ZXMpIHsKLSAgICAgIHJldHVybiB2
YWxpZGF0aW9uRXJyb3IuVU5FWFBFQ1RFRF9TVFJVQ1RfSEVBREVSOwotICAgIH0KLQotICAgIHZh
ciBleHBlY3RzUmVzcG9uc2UgPSB0aGlzLm1lc3NhZ2UuZXhwZWN0c1Jlc3BvbnNlKCk7Ci0gICAg
dmFyIGlzUmVzcG9uc2UgPSB0aGlzLm1lc3NhZ2UuaXNSZXNwb25zZSgpOwotCi0gICAgaWYgKHZl
cnNpb24gPT0gMCAmJiAoZXhwZWN0c1Jlc3BvbnNlIHx8IGlzUmVzcG9uc2UpKSB7Ci0gICAgICBy
ZXR1cm4gdmFsaWRhdGlvbkVycm9yLk1FU1NBR0VfSEVBREVSX01JU1NJTkdfUkVRVUVTVF9JRDsK
LSAgICB9Ci0KLSAgICBpZiAoaXNSZXNwb25zZSAmJiBleHBlY3RzUmVzcG9uc2UpIHsKLSAgICAg
IHJldHVybiB2YWxpZGF0aW9uRXJyb3IuTUVTU0FHRV9IRUFERVJfSU5WQUxJRF9GTEFHUzsKLSAg
ICB9Ci0KLSAgICBpZiAodmVyc2lvbiA8IDIpIHsKLSAgICAgIHJldHVybiB2YWxpZGF0aW9uRXJy
b3IuTk9ORTsKLSAgICB9Ci0KLSAgICB2YXIgZXJyID0gdGhpcy52YWxpZGF0ZUFycmF5UG9pbnRl
cigKLSAgICAgICAgaW50ZXJuYWwua01lc3NhZ2VQYXlsb2FkSW50ZXJmYWNlSWRzUG9pbnRlck9m
ZnNldCwKLSAgICAgICAgaW50ZXJuYWwuVWludDMyLmVuY29kZWRTaXplLCBpbnRlcm5hbC5VaW50
MzIsIHRydWUsIFswXSwgMCk7Ci0KLSAgICBpZiAoZXJyICE9IHZhbGlkYXRpb25FcnJvci5OT05F
KSB7Ci0gICAgICByZXR1cm4gZXJyOwotICAgIH0KLQotICAgIHRoaXMucGF5bG9hZEludGVyZmFj
ZUlkcyA9IHRoaXMubWVzc2FnZS5nZXRQYXlsb2FkSW50ZXJmYWNlSWRzKCk7Ci0gICAgaWYgKHRo
aXMucGF5bG9hZEludGVyZmFjZUlkcykgewotICAgICAgZm9yICh2YXIgaW50ZXJmYWNlSWQgb2Yg
dGhpcy5wYXlsb2FkSW50ZXJmYWNlSWRzKSB7Ci0gICAgICAgIGlmICghaW50ZXJuYWwuaXNWYWxp
ZEludGVyZmFjZUlkKGludGVyZmFjZUlkKSB8fAotICAgICAgICAgICAgaW50ZXJuYWwuaXNNYXN0
ZXJJbnRlcmZhY2VJZChpbnRlcmZhY2VJZCkpIHsKLSAgICAgICAgICByZXR1cm4gdmFsaWRhdGlv
bkVycm9yLklMTEVHQUxfSU5URVJGQUNFX0lEOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQot
Ci0gICAgLy8gU2V0IG9mZnNldCB0byB0aGUgc3RhcnQgb2YgdGhlIHBheWxvYWQgYW5kIG9mZnNl
dExpbWl0IHRvIHRoZSBzdGFydCBvZgotICAgIC8vIHRoZSBwYXlsb2FkIGludGVyZmFjZSBJZHMg
c28gdGhhdCBwYXlsb2FkIGNhbiBiZSB2YWxpZGF0ZWQgdXNpbmcgdGhlCi0gICAgLy8gc2FtZSBt
ZXNzYWdlVmFsaWRhdG9yLgotICAgIHRoaXMub2Zmc2V0ID0gdGhpcy5tZXNzYWdlLmdldEhlYWRl
ck51bUJ5dGVzKCk7Ci0gICAgdGhpcy5vZmZzZXRMaW1pdCA9IHRoaXMuZGVjb2RlUG9pbnRlcigK
LSAgICAgICAgaW50ZXJuYWwua01lc3NhZ2VQYXlsb2FkSW50ZXJmYWNlSWRzUG9pbnRlck9mZnNl
dCk7Ci0KLSAgICByZXR1cm4gdmFsaWRhdGlvbkVycm9yLk5PTkU7Ci0gIH07Ci0KLSAgVmFsaWRh
dG9yLnByb3RvdHlwZS52YWxpZGF0ZU1lc3NhZ2VJc1JlcXVlc3RXaXRob3V0UmVzcG9uc2UgPSBm
dW5jdGlvbigpIHsKLSAgICBpZiAodGhpcy5tZXNzYWdlLmlzUmVzcG9uc2UoKSB8fCB0aGlzLm1l
c3NhZ2UuZXhwZWN0c1Jlc3BvbnNlKCkpIHsKLSAgICAgIHJldHVybiB2YWxpZGF0aW9uRXJyb3Iu
TUVTU0FHRV9IRUFERVJfSU5WQUxJRF9GTEFHUzsKLSAgICB9Ci0gICAgcmV0dXJuIHZhbGlkYXRp
b25FcnJvci5OT05FOwotICB9OwotCi0gIFZhbGlkYXRvci5wcm90b3R5cGUudmFsaWRhdGVNZXNz
YWdlSXNSZXF1ZXN0RXhwZWN0aW5nUmVzcG9uc2UgPSBmdW5jdGlvbigpIHsKLSAgICBpZiAodGhp
cy5tZXNzYWdlLmlzUmVzcG9uc2UoKSB8fCAhdGhpcy5tZXNzYWdlLmV4cGVjdHNSZXNwb25zZSgp
KSB7Ci0gICAgICByZXR1cm4gdmFsaWRhdGlvbkVycm9yLk1FU1NBR0VfSEVBREVSX0lOVkFMSURf
RkxBR1M7Ci0gICAgfQotICAgIHJldHVybiB2YWxpZGF0aW9uRXJyb3IuTk9ORTsKLSAgfTsKLQot
ICBWYWxpZGF0b3IucHJvdG90eXBlLnZhbGlkYXRlTWVzc2FnZUlzUmVzcG9uc2UgPSBmdW5jdGlv
bigpIHsKLSAgICBpZiAodGhpcy5tZXNzYWdlLmV4cGVjdHNSZXNwb25zZSgpIHx8ICF0aGlzLm1l
c3NhZ2UuaXNSZXNwb25zZSgpKSB7Ci0gICAgICByZXR1cm4gdmFsaWRhdGlvbkVycm9yLk1FU1NB
R0VfSEVBREVSX0lOVkFMSURfRkxBR1M7Ci0gICAgfQotICAgIHJldHVybiB2YWxpZGF0aW9uRXJy
b3IuTk9ORTsKLSAgfTsKLQotICAvLyBSZXR1cm5zIHRoZSBtZXNzYWdlLmJ1ZmZlciByZWxhdGl2
ZSBvZmZzZXQgdGhpcyBwb2ludGVyICJwb2ludHMgdG8iLAotICAvLyBOVUxMX01PSk9fUE9JTlRF
UiBpZiB0aGUgcG9pbnRlciByZXByZXNlbnRzIGEgbnVsbCwgb3IgSlMgbnVsbCBpZiB0aGUKLSAg
Ly8gcG9pbnRlcidzIHZhbHVlIGlzIG5vdCB2YWxpZC4KLSAgVmFsaWRhdG9yLnByb3RvdHlwZS5k
ZWNvZGVQb2ludGVyID0gZnVuY3Rpb24ob2Zmc2V0KSB7Ci0gICAgdmFyIHBvaW50ZXJWYWx1ZSA9
IHRoaXMubWVzc2FnZS5idWZmZXIuZ2V0VWludDY0KG9mZnNldCk7Ci0gICAgaWYgKHBvaW50ZXJW
YWx1ZSA9PT0gMCkKLSAgICAgIHJldHVybiBOVUxMX01PSk9fUE9JTlRFUjsKLSAgICB2YXIgYnVm
ZmVyT2Zmc2V0ID0gb2Zmc2V0ICsgcG9pbnRlclZhbHVlOwotICAgIHJldHVybiBOdW1iZXIuaXNT
YWZlSW50ZWdlcihidWZmZXJPZmZzZXQpID8gYnVmZmVyT2Zmc2V0IDogbnVsbDsKLSAgfTsKLQot
ICBWYWxpZGF0b3IucHJvdG90eXBlLmRlY29kZVVuaW9uU2l6ZSA9IGZ1bmN0aW9uKG9mZnNldCkg
ewotICAgIHJldHVybiB0aGlzLm1lc3NhZ2UuYnVmZmVyLmdldFVpbnQzMihvZmZzZXQpOwotICB9
OwotCi0gIFZhbGlkYXRvci5wcm90b3R5cGUuZGVjb2RlVW5pb25UYWcgPSBmdW5jdGlvbihvZmZz
ZXQpIHsKLSAgICByZXR1cm4gdGhpcy5tZXNzYWdlLmJ1ZmZlci5nZXRVaW50MzIob2Zmc2V0ICsg
NCk7Ci0gIH07Ci0KLSAgVmFsaWRhdG9yLnByb3RvdHlwZS52YWxpZGF0ZUFycmF5UG9pbnRlciA9
IGZ1bmN0aW9uKAotICAgICAgb2Zmc2V0LCBlbGVtZW50U2l6ZSwgZWxlbWVudFR5cGUsIG51bGxh
YmxlLCBleHBlY3RlZERpbWVuc2lvblNpemVzLAotICAgICAgY3VycmVudERpbWVuc2lvbikgewot
ICAgIHZhciBhcnJheU9mZnNldCA9IHRoaXMuZGVjb2RlUG9pbnRlcihvZmZzZXQpOwotICAgIGlm
IChhcnJheU9mZnNldCA9PT0gbnVsbCkKLSAgICAgIHJldHVybiB2YWxpZGF0aW9uRXJyb3IuSUxM
RUdBTF9QT0lOVEVSOwotCi0gICAgaWYgKGFycmF5T2Zmc2V0ID09PSBOVUxMX01PSk9fUE9JTlRF
UikKLSAgICAgIHJldHVybiBudWxsYWJsZSA/Ci0gICAgICAgICAgdmFsaWRhdGlvbkVycm9yLk5P
TkUgOiB2YWxpZGF0aW9uRXJyb3IuVU5FWFBFQ1RFRF9OVUxMX1BPSU5URVI7Ci0KLSAgICByZXR1
cm4gdGhpcy52YWxpZGF0ZUFycmF5KGFycmF5T2Zmc2V0LCBlbGVtZW50U2l6ZSwgZWxlbWVudFR5
cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBlY3RlZERpbWVuc2lvblNpemVz
LCBjdXJyZW50RGltZW5zaW9uKTsKLSAgfTsKLQotICBWYWxpZGF0b3IucHJvdG90eXBlLnZhbGlk
YXRlU3RydWN0UG9pbnRlciA9IGZ1bmN0aW9uKAotICAgICAgb2Zmc2V0LCBzdHJ1Y3RDbGFzcywg
bnVsbGFibGUpIHsKLSAgICB2YXIgc3RydWN0T2Zmc2V0ID0gdGhpcy5kZWNvZGVQb2ludGVyKG9m
ZnNldCk7Ci0gICAgaWYgKHN0cnVjdE9mZnNldCA9PT0gbnVsbCkKLSAgICAgIHJldHVybiB2YWxp
ZGF0aW9uRXJyb3IuSUxMRUdBTF9QT0lOVEVSOwotCi0gICAgaWYgKHN0cnVjdE9mZnNldCA9PT0g
TlVMTF9NT0pPX1BPSU5URVIpCi0gICAgICByZXR1cm4gbnVsbGFibGUgPwotICAgICAgICAgIHZh
bGlkYXRpb25FcnJvci5OT05FIDogdmFsaWRhdGlvbkVycm9yLlVORVhQRUNURURfTlVMTF9QT0lO
VEVSOwotCi0gICAgcmV0dXJuIHN0cnVjdENsYXNzLnZhbGlkYXRlKHRoaXMsIHN0cnVjdE9mZnNl
dCk7Ci0gIH07Ci0KLSAgVmFsaWRhdG9yLnByb3RvdHlwZS52YWxpZGF0ZVVuaW9uID0gZnVuY3Rp
b24oCi0gICAgICBvZmZzZXQsIHVuaW9uQ2xhc3MsIG51bGxhYmxlKSB7Ci0gICAgdmFyIHNpemUg
PSB0aGlzLm1lc3NhZ2UuYnVmZmVyLmdldFVpbnQzMihvZmZzZXQpOwotICAgIGlmIChzaXplID09
IDApIHsKLSAgICAgIHJldHVybiBudWxsYWJsZSA/Ci0gICAgICAgICAgdmFsaWRhdGlvbkVycm9y
Lk5PTkUgOiB2YWxpZGF0aW9uRXJyb3IuVU5FWFBFQ1RFRF9OVUxMX1VOSU9OOwotICAgIH0KLQot
ICAgIHJldHVybiB1bmlvbkNsYXNzLnZhbGlkYXRlKHRoaXMsIG9mZnNldCk7Ci0gIH07Ci0KLSAg
VmFsaWRhdG9yLnByb3RvdHlwZS52YWxpZGF0ZU5lc3RlZFVuaW9uID0gZnVuY3Rpb24oCi0gICAg
ICBvZmZzZXQsIHVuaW9uQ2xhc3MsIG51bGxhYmxlKSB7Ci0gICAgdmFyIHVuaW9uT2Zmc2V0ID0g
dGhpcy5kZWNvZGVQb2ludGVyKG9mZnNldCk7Ci0gICAgaWYgKHVuaW9uT2Zmc2V0ID09PSBudWxs
KQotICAgICAgcmV0dXJuIHZhbGlkYXRpb25FcnJvci5JTExFR0FMX1BPSU5URVI7Ci0KLSAgICBp
ZiAodW5pb25PZmZzZXQgPT09IE5VTExfTU9KT19QT0lOVEVSKQotICAgICAgcmV0dXJuIG51bGxh
YmxlID8KLSAgICAgICAgICB2YWxpZGF0aW9uRXJyb3IuTk9ORSA6IHZhbGlkYXRpb25FcnJvci5V
TkVYUEVDVEVEX05VTExfVU5JT047Ci0KLSAgICByZXR1cm4gdGhpcy52YWxpZGF0ZVVuaW9uKHVu
aW9uT2Zmc2V0LCB1bmlvbkNsYXNzLCBudWxsYWJsZSk7Ci0gIH07Ci0KLSAgLy8gVGhpcyBtZXRo
b2QgYXNzdW1lcyB0aGF0IHRoZSBhcnJheSBhdCBhcnJheVBvaW50ZXJPZmZzZXQgaGFzCi0gIC8v
IGJlZW4gdmFsaWRhdGVkLgotCi0gIFZhbGlkYXRvci5wcm90b3R5cGUuYXJyYXlMZW5ndGggPSBm
dW5jdGlvbihhcnJheVBvaW50ZXJPZmZzZXQpIHsKLSAgICB2YXIgYXJyYXlPZmZzZXQgPSB0aGlz
LmRlY29kZVBvaW50ZXIoYXJyYXlQb2ludGVyT2Zmc2V0KTsKLSAgICByZXR1cm4gdGhpcy5tZXNz
YWdlLmJ1ZmZlci5nZXRVaW50MzIoYXJyYXlPZmZzZXQgKyA0KTsKLSAgfTsKLQotICBWYWxpZGF0
b3IucHJvdG90eXBlLnZhbGlkYXRlTWFwUG9pbnRlciA9IGZ1bmN0aW9uKAotICAgICAgb2Zmc2V0
LCBtYXBJc051bGxhYmxlLCBrZXlDbGFzcywgdmFsdWVDbGFzcywgdmFsdWVJc051bGxhYmxlKSB7
Ci0gICAgLy8gVmFsaWRhdGUgdGhlIGltcGxpY2l0IG1hcCBzdHJ1Y3Q6Ci0gICAgLy8gc3RydWN0
IHthcnJheTxrZXlDbGFzcz4ga2V5czsgYXJyYXk8dmFsdWVDbGFzcz4gdmFsdWVzfTsKLSAgICB2
YXIgc3RydWN0T2Zmc2V0ID0gdGhpcy5kZWNvZGVQb2ludGVyKG9mZnNldCk7Ci0gICAgaWYgKHN0
cnVjdE9mZnNldCA9PT0gbnVsbCkKLSAgICAgIHJldHVybiB2YWxpZGF0aW9uRXJyb3IuSUxMRUdB
TF9QT0lOVEVSOwotCi0gICAgaWYgKHN0cnVjdE9mZnNldCA9PT0gTlVMTF9NT0pPX1BPSU5URVIp
Ci0gICAgICByZXR1cm4gbWFwSXNOdWxsYWJsZSA/Ci0gICAgICAgICAgdmFsaWRhdGlvbkVycm9y
Lk5PTkUgOiB2YWxpZGF0aW9uRXJyb3IuVU5FWFBFQ1RFRF9OVUxMX1BPSU5URVI7Ci0KLSAgICB2
YXIgbWFwRW5jb2RlZFNpemUgPSBpbnRlcm5hbC5rU3RydWN0SGVhZGVyU2l6ZSArCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgaW50ZXJuYWwua01hcFN0cnVjdFBheWxvYWRTaXplOwotICAgIHZh
ciBlcnIgPSB0aGlzLnZhbGlkYXRlU3RydWN0SGVhZGVyKHN0cnVjdE9mZnNldCwgbWFwRW5jb2Rl
ZFNpemUpOwotICAgIGlmIChlcnIgIT09IHZhbGlkYXRpb25FcnJvci5OT05FKQotICAgICAgICBy
ZXR1cm4gZXJyOwotCi0gICAgLy8gVmFsaWRhdGUgdGhlIGtleXMgYXJyYXkuCi0gICAgdmFyIGtl
eXNBcnJheVBvaW50ZXJPZmZzZXQgPSBzdHJ1Y3RPZmZzZXQgKyBpbnRlcm5hbC5rU3RydWN0SGVh
ZGVyU2l6ZTsKLSAgICBlcnIgPSB0aGlzLnZhbGlkYXRlQXJyYXlQb2ludGVyKAotICAgICAgICBr
ZXlzQXJyYXlQb2ludGVyT2Zmc2V0LCBrZXlDbGFzcy5lbmNvZGVkU2l6ZSwga2V5Q2xhc3MsIGZh
bHNlLCBbMF0sIDApOwotICAgIGlmIChlcnIgIT09IHZhbGlkYXRpb25FcnJvci5OT05FKQotICAg
ICAgICByZXR1cm4gZXJyOwotCi0gICAgLy8gVmFsaWRhdGUgdGhlIHZhbHVlcyBhcnJheS4KLSAg
ICB2YXIgdmFsdWVzQXJyYXlQb2ludGVyT2Zmc2V0ID0ga2V5c0FycmF5UG9pbnRlck9mZnNldCAr
IDg7Ci0gICAgdmFyIHZhbHVlc0FycmF5RGltZW5zaW9ucyA9IFswXTsgLy8gVmFsaWRhdGUgdGhl
IGFjdHVhbCBsZW5ndGggYmVsb3cuCi0gICAgaWYgKHZhbHVlQ2xhc3MgaW5zdGFuY2VvZiBpbnRl
cm5hbC5BcnJheU9mKQotICAgICAgdmFsdWVzQXJyYXlEaW1lbnNpb25zID0KLSAgICAgICAgICB2
YWx1ZXNBcnJheURpbWVuc2lvbnMuY29uY2F0KHZhbHVlQ2xhc3MuZGltZW5zaW9ucygpKTsKLSAg
ICB2YXIgZXJyID0gdGhpcy52YWxpZGF0ZUFycmF5UG9pbnRlcih2YWx1ZXNBcnJheVBvaW50ZXJP
ZmZzZXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVDbGFz
cy5lbmNvZGVkU2l6ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2
YWx1ZUNsYXNzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVl
SXNOdWxsYWJsZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1
ZXNBcnJheURpbWVuc2lvbnMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgMCk7Ci0gICAgaWYgKGVyciAhPT0gdmFsaWRhdGlvbkVycm9yLk5PTkUpCi0gICAgICAgIHJl
dHVybiBlcnI7Ci0KLSAgICAvLyBWYWxpZGF0ZSB0aGUgbGVuZ3RocyBvZiB0aGUga2V5cyBhbmQg
dmFsdWVzIGFycmF5cy4KLSAgICB2YXIga2V5c0FycmF5TGVuZ3RoID0gdGhpcy5hcnJheUxlbmd0
aChrZXlzQXJyYXlQb2ludGVyT2Zmc2V0KTsKLSAgICB2YXIgdmFsdWVzQXJyYXlMZW5ndGggPSB0
aGlzLmFycmF5TGVuZ3RoKHZhbHVlc0FycmF5UG9pbnRlck9mZnNldCk7Ci0gICAgaWYgKGtleXNB
cnJheUxlbmd0aCAhPSB2YWx1ZXNBcnJheUxlbmd0aCkKLSAgICAgIHJldHVybiB2YWxpZGF0aW9u
RXJyb3IuRElGRkVSRU5UX1NJWkVEX0FSUkFZU19JTl9NQVA7Ci0KLSAgICByZXR1cm4gdmFsaWRh
dGlvbkVycm9yLk5PTkU7Ci0gIH07Ci0KLSAgVmFsaWRhdG9yLnByb3RvdHlwZS52YWxpZGF0ZVN0
cmluZ1BvaW50ZXIgPSBmdW5jdGlvbihvZmZzZXQsIG51bGxhYmxlKSB7Ci0gICAgcmV0dXJuIHRo
aXMudmFsaWRhdGVBcnJheVBvaW50ZXIoCi0gICAgICAgIG9mZnNldCwgaW50ZXJuYWwuVWludDgu
ZW5jb2RlZFNpemUsIGludGVybmFsLlVpbnQ4LCBudWxsYWJsZSwgWzBdLCAwKTsKLSAgfTsKLQot
ICAvLyBTaW1pbGFyIHRvIEFycmF5X0RhdGE8VD46OlZhbGlkYXRlKCkKLSAgLy8gbW9qby9wdWJs
aWMvY3BwL2JpbmRpbmdzL2xpYi9hcnJheV9pbnRlcm5hbC5oCi0KLSAgVmFsaWRhdG9yLnByb3Rv
dHlwZS52YWxpZGF0ZUFycmF5ID0KLSAgICAgIGZ1bmN0aW9uIChvZmZzZXQsIGVsZW1lbnRTaXpl
LCBlbGVtZW50VHlwZSwgZXhwZWN0ZWREaW1lbnNpb25TaXplcywKLSAgICAgICAgICAgICAgICBj
dXJyZW50RGltZW5zaW9uKSB7Ci0gICAgaWYgKCFpbnRlcm5hbC5pc0FsaWduZWQob2Zmc2V0KSkK
LSAgICAgIHJldHVybiB2YWxpZGF0aW9uRXJyb3IuTUlTQUxJR05FRF9PQkpFQ1Q7Ci0KLSAgICBp
ZiAoIXRoaXMuaXNWYWxpZFJhbmdlKG9mZnNldCwgaW50ZXJuYWwua0FycmF5SGVhZGVyU2l6ZSkp
Ci0gICAgICByZXR1cm4gdmFsaWRhdGlvbkVycm9yLklMTEVHQUxfTUVNT1JZX1JBTkdFOwotCi0g
ICAgdmFyIG51bUJ5dGVzID0gdGhpcy5tZXNzYWdlLmJ1ZmZlci5nZXRVaW50MzIob2Zmc2V0KTsK
LSAgICB2YXIgbnVtRWxlbWVudHMgPSB0aGlzLm1lc3NhZ2UuYnVmZmVyLmdldFVpbnQzMihvZmZz
ZXQgKyA0KTsKLQotICAgIC8vIE5vdGU6IHRoaXMgY29tcHV0YXRpb24gaXMgInNhZmUiIGJlY2F1
c2UgZWxlbWVudFNpemUgPD0gOCBhbmQKLSAgICAvLyBudW1FbGVtZW50cyBpcyBhIHVpbnQzMi4K
LSAgICB2YXIgZWxlbWVudHNUb3RhbFNpemUgPSAoZWxlbWVudFR5cGUgPT09IGludGVybmFsLlBh
Y2tlZEJvb2wpID8KLSAgICAgICAgTWF0aC5jZWlsKG51bUVsZW1lbnRzIC8gOCkgOiAoZWxlbWVu
dFNpemUgKiBudW1FbGVtZW50cyk7Ci0KLSAgICBpZiAobnVtQnl0ZXMgPCBpbnRlcm5hbC5rQXJy
YXlIZWFkZXJTaXplICsgZWxlbWVudHNUb3RhbFNpemUpCi0gICAgICByZXR1cm4gdmFsaWRhdGlv
bkVycm9yLlVORVhQRUNURURfQVJSQVlfSEVBREVSOwotCi0gICAgaWYgKGV4cGVjdGVkRGltZW5z
aW9uU2l6ZXNbY3VycmVudERpbWVuc2lvbl0gIT0gMCAmJgotICAgICAgICBudW1FbGVtZW50cyAh
PSBleHBlY3RlZERpbWVuc2lvblNpemVzW2N1cnJlbnREaW1lbnNpb25dKSB7Ci0gICAgICByZXR1
cm4gdmFsaWRhdGlvbkVycm9yLlVORVhQRUNURURfQVJSQVlfSEVBREVSOwotICAgIH0KLQotICAg
IGlmICghdGhpcy5jbGFpbVJhbmdlKG9mZnNldCwgbnVtQnl0ZXMpKQotICAgICAgcmV0dXJuIHZh
bGlkYXRpb25FcnJvci5JTExFR0FMX01FTU9SWV9SQU5HRTsKLQotICAgIC8vIFZhbGlkYXRlIHRo
ZSBhcnJheSdzIGVsZW1lbnRzIGlmIHRoZXkgYXJlIHBvaW50ZXJzIG9yIGhhbmRsZXMuCi0KLSAg
ICB2YXIgZWxlbWVudHNPZmZzZXQgPSBvZmZzZXQgKyBpbnRlcm5hbC5rQXJyYXlIZWFkZXJTaXpl
OwotICAgIHZhciBudWxsYWJsZSA9IGlzTnVsbGFibGUoZWxlbWVudFR5cGUpOwotCi0gICAgaWYg
KGlzSGFuZGxlQ2xhc3MoZWxlbWVudFR5cGUpKQotICAgICAgcmV0dXJuIHRoaXMudmFsaWRhdGVI
YW5kbGVFbGVtZW50cyhlbGVtZW50c09mZnNldCwgbnVtRWxlbWVudHMsIG51bGxhYmxlKTsKLSAg
ICBpZiAoaXNJbnRlcmZhY2VDbGFzcyhlbGVtZW50VHlwZSkpCi0gICAgICByZXR1cm4gdGhpcy52
YWxpZGF0ZUludGVyZmFjZUVsZW1lbnRzKAotICAgICAgICAgIGVsZW1lbnRzT2Zmc2V0LCBudW1F
bGVtZW50cywgbnVsbGFibGUpOwotICAgIGlmIChpc0ludGVyZmFjZVJlcXVlc3RDbGFzcyhlbGVt
ZW50VHlwZSkpCi0gICAgICByZXR1cm4gdGhpcy52YWxpZGF0ZUludGVyZmFjZVJlcXVlc3RFbGVt
ZW50cygKLSAgICAgICAgICBlbGVtZW50c09mZnNldCwgbnVtRWxlbWVudHMsIG51bGxhYmxlKTsK
LSAgICBpZiAoaXNBc3NvY2lhdGVkSW50ZXJmYWNlQ2xhc3MoZWxlbWVudFR5cGUpKQotICAgICAg
cmV0dXJuIHRoaXMudmFsaWRhdGVBc3NvY2lhdGVkSW50ZXJmYWNlRWxlbWVudHMoCi0gICAgICAg
ICAgZWxlbWVudHNPZmZzZXQsIG51bUVsZW1lbnRzLCBudWxsYWJsZSk7Ci0gICAgaWYgKGlzQXNz
b2NpYXRlZEludGVyZmFjZVJlcXVlc3RDbGFzcyhlbGVtZW50VHlwZSkpCi0gICAgICByZXR1cm4g
dGhpcy52YWxpZGF0ZUFzc29jaWF0ZWRJbnRlcmZhY2VSZXF1ZXN0RWxlbWVudHMoCi0gICAgICAg
ICAgZWxlbWVudHNPZmZzZXQsIG51bUVsZW1lbnRzLCBudWxsYWJsZSk7Ci0gICAgaWYgKGlzU3Ry
aW5nQ2xhc3MoZWxlbWVudFR5cGUpKQotICAgICAgcmV0dXJuIHRoaXMudmFsaWRhdGVBcnJheUVs
ZW1lbnRzKAotICAgICAgICAgIGVsZW1lbnRzT2Zmc2V0LCBudW1FbGVtZW50cywgaW50ZXJuYWwu
VWludDgsIG51bGxhYmxlLCBbMF0sIDApOwotICAgIGlmIChlbGVtZW50VHlwZSBpbnN0YW5jZW9m
IGludGVybmFsLlBvaW50ZXJUbykKLSAgICAgIHJldHVybiB0aGlzLnZhbGlkYXRlU3RydWN0RWxl
bWVudHMoCi0gICAgICAgICAgZWxlbWVudHNPZmZzZXQsIG51bUVsZW1lbnRzLCBlbGVtZW50VHlw
ZS5jbHMsIG51bGxhYmxlKTsKLSAgICBpZiAoZWxlbWVudFR5cGUgaW5zdGFuY2VvZiBpbnRlcm5h
bC5BcnJheU9mKQotICAgICAgcmV0dXJuIHRoaXMudmFsaWRhdGVBcnJheUVsZW1lbnRzKAotICAg
ICAgICAgIGVsZW1lbnRzT2Zmc2V0LCBudW1FbGVtZW50cywgZWxlbWVudFR5cGUuY2xzLCBudWxs
YWJsZSwKLSAgICAgICAgICBleHBlY3RlZERpbWVuc2lvblNpemVzLCBjdXJyZW50RGltZW5zaW9u
ICsgMSk7Ci0gICAgaWYgKGlzRW51bUNsYXNzKGVsZW1lbnRUeXBlKSkKLSAgICAgIHJldHVybiB0
aGlzLnZhbGlkYXRlRW51bUVsZW1lbnRzKGVsZW1lbnRzT2Zmc2V0LCBudW1FbGVtZW50cywKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnRUeXBlLmNscyk7Ci0K
LSAgICByZXR1cm4gdmFsaWRhdGlvbkVycm9yLk5PTkU7Ci0gIH07Ci0KLSAgLy8gTm90ZTogdGhl
IHxvZmZzZXQgKyBpICogZWxlbWVudFNpemV8IGNvbXB1dGF0aW9uIGluIHRoZSB2YWxpZGF0ZUZv
b0VsZW1lbnRzCi0gIC8vIG1ldGhvZHMgYmVsb3cgaXMgInNhZmUiIGJlY2F1c2UgZWxlbWVudFNp
emUgPD0gOCwgb2Zmc2V0IGFuZAotICAvLyBudW1FbGVtZW50cyBhcmUgdWludDMyLCBhbmQgMCA8
PSBpIDwgbnVtRWxlbWVudHMuCi0KLSAgVmFsaWRhdG9yLnByb3RvdHlwZS52YWxpZGF0ZUhhbmRs
ZUVsZW1lbnRzID0KLSAgICAgIGZ1bmN0aW9uKG9mZnNldCwgbnVtRWxlbWVudHMsIG51bGxhYmxl
KSB7Ci0gICAgdmFyIGVsZW1lbnRTaXplID0gaW50ZXJuYWwuSGFuZGxlLmVuY29kZWRTaXplOwot
ICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbnVtRWxlbWVudHM7IGkrKykgewotICAgICAgdmFyIGVs
ZW1lbnRPZmZzZXQgPSBvZmZzZXQgKyBpICogZWxlbWVudFNpemU7Ci0gICAgICB2YXIgZXJyID0g
dGhpcy52YWxpZGF0ZUhhbmRsZShlbGVtZW50T2Zmc2V0LCBudWxsYWJsZSk7Ci0gICAgICBpZiAo
ZXJyICE9IHZhbGlkYXRpb25FcnJvci5OT05FKQotICAgICAgICByZXR1cm4gZXJyOwotICAgIH0K
LSAgICByZXR1cm4gdmFsaWRhdGlvbkVycm9yLk5PTkU7Ci0gIH07Ci0KLSAgVmFsaWRhdG9yLnBy
b3RvdHlwZS52YWxpZGF0ZUludGVyZmFjZUVsZW1lbnRzID0KLSAgICAgIGZ1bmN0aW9uKG9mZnNl
dCwgbnVtRWxlbWVudHMsIG51bGxhYmxlKSB7Ci0gICAgdmFyIGVsZW1lbnRTaXplID0gaW50ZXJu
YWwuSW50ZXJmYWNlLnByb3RvdHlwZS5lbmNvZGVkU2l6ZTsKLSAgICBmb3IgKHZhciBpID0gMDsg
aSA8IG51bUVsZW1lbnRzOyBpKyspIHsKLSAgICAgIHZhciBlbGVtZW50T2Zmc2V0ID0gb2Zmc2V0
ICsgaSAqIGVsZW1lbnRTaXplOwotICAgICAgdmFyIGVyciA9IHRoaXMudmFsaWRhdGVJbnRlcmZh
Y2UoZWxlbWVudE9mZnNldCwgbnVsbGFibGUpOwotICAgICAgaWYgKGVyciAhPSB2YWxpZGF0aW9u
RXJyb3IuTk9ORSkKLSAgICAgICAgcmV0dXJuIGVycjsKLSAgICB9Ci0gICAgcmV0dXJuIHZhbGlk
YXRpb25FcnJvci5OT05FOwotICB9OwotCi0gIFZhbGlkYXRvci5wcm90b3R5cGUudmFsaWRhdGVJ
bnRlcmZhY2VSZXF1ZXN0RWxlbWVudHMgPQotICAgICAgZnVuY3Rpb24ob2Zmc2V0LCBudW1FbGVt
ZW50cywgbnVsbGFibGUpIHsKLSAgICB2YXIgZWxlbWVudFNpemUgPSBpbnRlcm5hbC5JbnRlcmZh
Y2VSZXF1ZXN0LmVuY29kZWRTaXplOwotICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbnVtRWxlbWVu
dHM7IGkrKykgewotICAgICAgdmFyIGVsZW1lbnRPZmZzZXQgPSBvZmZzZXQgKyBpICogZWxlbWVu
dFNpemU7Ci0gICAgICB2YXIgZXJyID0gdGhpcy52YWxpZGF0ZUludGVyZmFjZVJlcXVlc3QoZWxl
bWVudE9mZnNldCwgbnVsbGFibGUpOwotICAgICAgaWYgKGVyciAhPSB2YWxpZGF0aW9uRXJyb3Iu
Tk9ORSkKLSAgICAgICAgcmV0dXJuIGVycjsKLSAgICB9Ci0gICAgcmV0dXJuIHZhbGlkYXRpb25F
cnJvci5OT05FOwotICB9OwotCi0gIFZhbGlkYXRvci5wcm90b3R5cGUudmFsaWRhdGVBc3NvY2lh
dGVkSW50ZXJmYWNlRWxlbWVudHMgPQotICAgICAgZnVuY3Rpb24ob2Zmc2V0LCBudW1FbGVtZW50
cywgbnVsbGFibGUpIHsKLSAgICB2YXIgZWxlbWVudFNpemUgPSBpbnRlcm5hbC5Bc3NvY2lhdGVk
SW50ZXJmYWNlUHRySW5mby5wcm90b3R5cGUuZW5jb2RlZFNpemU7Ci0gICAgZm9yICh2YXIgaSA9
IDA7IGkgPCBudW1FbGVtZW50czsgaSsrKSB7Ci0gICAgICB2YXIgZWxlbWVudE9mZnNldCA9IG9m
ZnNldCArIGkgKiBlbGVtZW50U2l6ZTsKLSAgICAgIHZhciBlcnIgPSB0aGlzLnZhbGlkYXRlQXNz
b2NpYXRlZEludGVyZmFjZShlbGVtZW50T2Zmc2V0LCBudWxsYWJsZSk7Ci0gICAgICBpZiAoZXJy
ICE9IHZhbGlkYXRpb25FcnJvci5OT05FKSB7Ci0gICAgICAgIHJldHVybiBlcnI7Ci0gICAgICB9
Ci0gICAgfQotICAgIHJldHVybiB2YWxpZGF0aW9uRXJyb3IuTk9ORTsKLSAgfTsKLQotICBWYWxp
ZGF0b3IucHJvdG90eXBlLnZhbGlkYXRlQXNzb2NpYXRlZEludGVyZmFjZVJlcXVlc3RFbGVtZW50
cyA9Ci0gICAgICBmdW5jdGlvbihvZmZzZXQsIG51bUVsZW1lbnRzLCBudWxsYWJsZSkgewotICAg
IHZhciBlbGVtZW50U2l6ZSA9IGludGVybmFsLkFzc29jaWF0ZWRJbnRlcmZhY2VSZXF1ZXN0LmVu
Y29kZWRTaXplOwotICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbnVtRWxlbWVudHM7IGkrKykgewot
ICAgICAgdmFyIGVsZW1lbnRPZmZzZXQgPSBvZmZzZXQgKyBpICogZWxlbWVudFNpemU7Ci0gICAg
ICB2YXIgZXJyID0gdGhpcy52YWxpZGF0ZUFzc29jaWF0ZWRJbnRlcmZhY2VSZXF1ZXN0KGVsZW1l
bnRPZmZzZXQsCi0gICAgICAgICAgbnVsbGFibGUpOwotICAgICAgaWYgKGVyciAhPSB2YWxpZGF0
aW9uRXJyb3IuTk9ORSkgewotICAgICAgICByZXR1cm4gZXJyOwotICAgICAgfQotICAgIH0KLSAg
ICByZXR1cm4gdmFsaWRhdGlvbkVycm9yLk5PTkU7Ci0gIH07Ci0KLSAgLy8gVGhlIGVsZW1lbnRD
bGFzcyBwYXJhbWV0ZXIgaXMgdGhlIGVsZW1lbnQgdHlwZSBvZiB0aGUgZWxlbWVudCBhcnJheXMu
Ci0gIFZhbGlkYXRvci5wcm90b3R5cGUudmFsaWRhdGVBcnJheUVsZW1lbnRzID0KLSAgICAgIGZ1
bmN0aW9uKG9mZnNldCwgbnVtRWxlbWVudHMsIGVsZW1lbnRDbGFzcywgbnVsbGFibGUsCi0gICAg
ICAgICAgICAgICBleHBlY3RlZERpbWVuc2lvblNpemVzLCBjdXJyZW50RGltZW5zaW9uKSB7Ci0g
ICAgdmFyIGVsZW1lbnRTaXplID0gaW50ZXJuYWwuUG9pbnRlclRvLnByb3RvdHlwZS5lbmNvZGVk
U2l6ZTsKLSAgICBmb3IgKHZhciBpID0gMDsgaSA8IG51bUVsZW1lbnRzOyBpKyspIHsKLSAgICAg
IHZhciBlbGVtZW50T2Zmc2V0ID0gb2Zmc2V0ICsgaSAqIGVsZW1lbnRTaXplOwotICAgICAgdmFy
IGVyciA9IHRoaXMudmFsaWRhdGVBcnJheVBvaW50ZXIoCi0gICAgICAgICAgZWxlbWVudE9mZnNl
dCwgZWxlbWVudENsYXNzLmVuY29kZWRTaXplLCBlbGVtZW50Q2xhc3MsIG51bGxhYmxlLAotICAg
ICAgICAgIGV4cGVjdGVkRGltZW5zaW9uU2l6ZXMsIGN1cnJlbnREaW1lbnNpb24pOwotICAgICAg
aWYgKGVyciAhPSB2YWxpZGF0aW9uRXJyb3IuTk9ORSkKLSAgICAgICAgcmV0dXJuIGVycjsKLSAg
ICB9Ci0gICAgcmV0dXJuIHZhbGlkYXRpb25FcnJvci5OT05FOwotICB9OwotCi0gIFZhbGlkYXRv
ci5wcm90b3R5cGUudmFsaWRhdGVTdHJ1Y3RFbGVtZW50cyA9Ci0gICAgICBmdW5jdGlvbihvZmZz
ZXQsIG51bUVsZW1lbnRzLCBzdHJ1Y3RDbGFzcywgbnVsbGFibGUpIHsKLSAgICB2YXIgZWxlbWVu
dFNpemUgPSBpbnRlcm5hbC5Qb2ludGVyVG8ucHJvdG90eXBlLmVuY29kZWRTaXplOwotICAgIGZv
ciAodmFyIGkgPSAwOyBpIDwgbnVtRWxlbWVudHM7IGkrKykgewotICAgICAgdmFyIGVsZW1lbnRP
ZmZzZXQgPSBvZmZzZXQgKyBpICogZWxlbWVudFNpemU7Ci0gICAgICB2YXIgZXJyID0KLSAgICAg
ICAgICB0aGlzLnZhbGlkYXRlU3RydWN0UG9pbnRlcihlbGVtZW50T2Zmc2V0LCBzdHJ1Y3RDbGFz
cywgbnVsbGFibGUpOwotICAgICAgaWYgKGVyciAhPSB2YWxpZGF0aW9uRXJyb3IuTk9ORSkKLSAg
ICAgICAgcmV0dXJuIGVycjsKLSAgICB9Ci0gICAgcmV0dXJuIHZhbGlkYXRpb25FcnJvci5OT05F
OwotICB9OwotCi0gIFZhbGlkYXRvci5wcm90b3R5cGUudmFsaWRhdGVFbnVtRWxlbWVudHMgPQot
ICAgICAgZnVuY3Rpb24ob2Zmc2V0LCBudW1FbGVtZW50cywgZW51bUNsYXNzKSB7Ci0gICAgdmFy
IGVsZW1lbnRTaXplID0gaW50ZXJuYWwuRW51bS5wcm90b3R5cGUuZW5jb2RlZFNpemU7Ci0gICAg
Zm9yICh2YXIgaSA9IDA7IGkgPCBudW1FbGVtZW50czsgaSsrKSB7Ci0gICAgICB2YXIgZWxlbWVu
dE9mZnNldCA9IG9mZnNldCArIGkgKiBlbGVtZW50U2l6ZTsKLSAgICAgIHZhciBlcnIgPSB0aGlz
LnZhbGlkYXRlRW51bShlbGVtZW50T2Zmc2V0LCBlbnVtQ2xhc3MpOwotICAgICAgaWYgKGVyciAh
PSB2YWxpZGF0aW9uRXJyb3IuTk9ORSkKLSAgICAgICAgcmV0dXJuIGVycjsKLSAgICB9Ci0gICAg
cmV0dXJuIHZhbGlkYXRpb25FcnJvci5OT05FOwotICB9OwotCi0gIGludGVybmFsLnZhbGlkYXRp
b25FcnJvciA9IHZhbGlkYXRpb25FcnJvcjsKLSAgaW50ZXJuYWwuVmFsaWRhdG9yID0gVmFsaWRh
dG9yOwotICBpbnRlcm5hbC5WYWxpZGF0aW9uRXJyb3JPYnNlcnZlckZvclRlc3RpbmcgPQotICAg
ICAgVmFsaWRhdGlvbkVycm9yT2JzZXJ2ZXJGb3JUZXN0aW5nOwotICBpbnRlcm5hbC5yZXBvcnRW
YWxpZGF0aW9uRXJyb3IgPSByZXBvcnRWYWxpZGF0aW9uRXJyb3I7Ci0gIGludGVybmFsLmlzVGVz
dGluZ01vZGUgPSBpc1Rlc3RpbmdNb2RlOwotICBpbnRlcm5hbC5jbGVhclRlc3RpbmdNb2RlID0g
Y2xlYXJUZXN0aW5nTW9kZTsKLX0pKCk7Ci0vLyBDb3B5cmlnaHQgMjAxNCBUaGUgQ2hyb21pdW0g
QXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2Rl
IGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5k
IGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLSd1c2Ugc3RyaWN0JzsKLQotKGZ1bmN0aW9uKCkgewot
ICB2YXIgbW9qb21JZCA9ICdtb2pvL3B1YmxpYy9pbnRlcmZhY2VzL2JpbmRpbmdzL2ludGVyZmFj
ZV9jb250cm9sX21lc3NhZ2VzLm1vam9tJzsKLSAgaWYgKG1vam8uaW50ZXJuYWwuaXNNb2pvbUxv
YWRlZChtb2pvbUlkKSkgewotICAgIGNvbnNvbGUud2FybignVGhlIGZvbGxvd2luZyBtb2pvbSBp
cyBsb2FkZWQgbXVsdGlwbGUgdGltZXM6ICcgKyBtb2pvbUlkKTsKLSAgICByZXR1cm47Ci0gIH0K
LSAgbW9qby5pbnRlcm5hbC5tYXJrTW9qb21Mb2FkZWQobW9qb21JZCk7Ci0gIHZhciBiaW5kaW5n
cyA9IG1vam87Ci0gIHZhciBhc3NvY2lhdGVkQmluZGluZ3MgPSBtb2pvOwotICB2YXIgY29kZWMg
PSBtb2pvLmludGVybmFsOwotICB2YXIgdmFsaWRhdG9yID0gbW9qby5pbnRlcm5hbDsKLQotICB2
YXIgZXhwb3J0cyA9IG1vam8uaW50ZXJuYWwuZXhwb3NlTmFtZXNwYWNlKCdtb2pvLmludGVyZmFj
ZUNvbnRyb2wnKTsKLQotCi0gIHZhciBrUnVuTWVzc2FnZUlkID0gMHhGRkZGRkZGRjsKLSAgdmFy
IGtSdW5PckNsb3NlUGlwZU1lc3NhZ2VJZCA9IDB4RkZGRkZGRkU7Ci0KLSAgZnVuY3Rpb24gUnVu
TWVzc2FnZVBhcmFtcyh2YWx1ZXMpIHsKLSAgICB0aGlzLmluaXREZWZhdWx0c18oKTsKLSAgICB0
aGlzLmluaXRGaWVsZHNfKHZhbHVlcyk7Ci0gIH0KLQotCi0gIFJ1bk1lc3NhZ2VQYXJhbXMucHJv
dG90eXBlLmluaXREZWZhdWx0c18gPSBmdW5jdGlvbigpIHsKLSAgICB0aGlzLmlucHV0ID0gbnVs
bDsKLSAgfTsKLSAgUnVuTWVzc2FnZVBhcmFtcy5wcm90b3R5cGUuaW5pdEZpZWxkc18gPSBmdW5j
dGlvbihmaWVsZHMpIHsKLSAgICBmb3IodmFyIGZpZWxkIGluIGZpZWxkcykgewotICAgICAgICBp
ZiAodGhpcy5oYXNPd25Qcm9wZXJ0eShmaWVsZCkpCi0gICAgICAgICAgdGhpc1tmaWVsZF0gPSBm
aWVsZHNbZmllbGRdOwotICAgIH0KLSAgfTsKLQotICBSdW5NZXNzYWdlUGFyYW1zLnZhbGlkYXRl
ID0gZnVuY3Rpb24obWVzc2FnZVZhbGlkYXRvciwgb2Zmc2V0KSB7Ci0gICAgdmFyIGVycjsKLSAg
ICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0SGVhZGVyKG9mZnNldCwgY29k
ZWMua1N0cnVjdEhlYWRlclNpemUpOwotICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0
aW9uRXJyb3IuTk9ORSkKLSAgICAgICAgcmV0dXJuIGVycjsKLQotICAgIHZhciBrVmVyc2lvblNp
emVzID0gWwotICAgICAge3ZlcnNpb246IDAsIG51bUJ5dGVzOiAyNH0KLSAgICBdOwotICAgIGVy
ciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RWZXJzaW9uKG9mZnNldCwga1ZlcnNp
b25TaXplcyk7Ci0gICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05F
KQotICAgICAgICByZXR1cm4gZXJyOwotCi0KLSAgICAvLyB2YWxpZGF0ZSBSdW5NZXNzYWdlUGFy
YW1zLmlucHV0Ci0gICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVVuaW9uKG9mZnNl
dCArIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgMCwgUnVuSW5wdXQsIGZhbHNlKTsKLSAgICBp
ZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCi0gICAgICAgIHJldHVy
biBlcnI7Ci0KLSAgICByZXR1cm4gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FOwotICB9
OwotCi0gIFJ1bk1lc3NhZ2VQYXJhbXMuZW5jb2RlZFNpemUgPSBjb2RlYy5rU3RydWN0SGVhZGVy
U2l6ZSArIDE2OwotCi0gIFJ1bk1lc3NhZ2VQYXJhbXMuZGVjb2RlID0gZnVuY3Rpb24oZGVjb2Rl
cikgewotICAgIHZhciBwYWNrZWQ7Ci0gICAgdmFyIHZhbCA9IG5ldyBSdW5NZXNzYWdlUGFyYW1z
KCk7Ci0gICAgdmFyIG51bWJlck9mQnl0ZXMgPSBkZWNvZGVyLnJlYWRVaW50MzIoKTsKLSAgICB2
YXIgdmVyc2lvbiA9IGRlY29kZXIucmVhZFVpbnQzMigpOwotICAgIHZhbC5pbnB1dCA9IGRlY29k
ZXIuZGVjb2RlU3RydWN0KFJ1bklucHV0KTsKLSAgICByZXR1cm4gdmFsOwotICB9OwotCi0gIFJ1
bk1lc3NhZ2VQYXJhbXMuZW5jb2RlID0gZnVuY3Rpb24oZW5jb2RlciwgdmFsKSB7Ci0gICAgdmFy
IHBhY2tlZDsKLSAgICBlbmNvZGVyLndyaXRlVWludDMyKFJ1bk1lc3NhZ2VQYXJhbXMuZW5jb2Rl
ZFNpemUpOwotICAgIGVuY29kZXIud3JpdGVVaW50MzIoMCk7Ci0gICAgZW5jb2Rlci5lbmNvZGVT
dHJ1Y3QoUnVuSW5wdXQsIHZhbC5pbnB1dCk7Ci0gIH07Ci0gIGZ1bmN0aW9uIFJ1blJlc3BvbnNl
TWVzc2FnZVBhcmFtcyh2YWx1ZXMpIHsKLSAgICB0aGlzLmluaXREZWZhdWx0c18oKTsKLSAgICB0
aGlzLmluaXRGaWVsZHNfKHZhbHVlcyk7Ci0gIH0KLQotCi0gIFJ1blJlc3BvbnNlTWVzc2FnZVBh
cmFtcy5wcm90b3R5cGUuaW5pdERlZmF1bHRzXyA9IGZ1bmN0aW9uKCkgewotICAgIHRoaXMub3V0
cHV0ID0gbnVsbDsKLSAgfTsKLSAgUnVuUmVzcG9uc2VNZXNzYWdlUGFyYW1zLnByb3RvdHlwZS5p
bml0RmllbGRzXyA9IGZ1bmN0aW9uKGZpZWxkcykgewotICAgIGZvcih2YXIgZmllbGQgaW4gZmll
bGRzKSB7Ci0gICAgICAgIGlmICh0aGlzLmhhc093blByb3BlcnR5KGZpZWxkKSkKLSAgICAgICAg
ICB0aGlzW2ZpZWxkXSA9IGZpZWxkc1tmaWVsZF07Ci0gICAgfQotICB9OwotCi0gIFJ1blJlc3Bv
bnNlTWVzc2FnZVBhcmFtcy52YWxpZGF0ZSA9IGZ1bmN0aW9uKG1lc3NhZ2VWYWxpZGF0b3IsIG9m
ZnNldCkgewotICAgIHZhciBlcnI7Ci0gICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0
ZVN0cnVjdEhlYWRlcihvZmZzZXQsIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplKTsKLSAgICBpZiAo
ZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCi0gICAgICAgIHJldHVybiBl
cnI7Ci0KLSAgICB2YXIga1ZlcnNpb25TaXplcyA9IFsKLSAgICAgIHt2ZXJzaW9uOiAwLCBudW1C
eXRlczogMjR9Ci0gICAgXTsKLSAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3Ry
dWN0VmVyc2lvbihvZmZzZXQsIGtWZXJzaW9uU2l6ZXMpOwotICAgIGlmIChlcnIgIT09IHZhbGlk
YXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKLSAgICAgICAgcmV0dXJuIGVycjsKLQotCi0gICAg
Ly8gdmFsaWRhdGUgUnVuUmVzcG9uc2VNZXNzYWdlUGFyYW1zLm91dHB1dAotICAgIGVyciA9IG1l
c3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVVbmlvbihvZmZzZXQgKyBjb2RlYy5rU3RydWN0SGVhZGVy
U2l6ZSArIDAsIFJ1bk91dHB1dCwgdHJ1ZSk7Ci0gICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZh
bGlkYXRpb25FcnJvci5OT05FKQotICAgICAgICByZXR1cm4gZXJyOwotCi0gICAgcmV0dXJuIHZh
bGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORTsKLSAgfTsKLQotICBSdW5SZXNwb25zZU1lc3Nh
Z2VQYXJhbXMuZW5jb2RlZFNpemUgPSBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDE2OwotCi0g
IFJ1blJlc3BvbnNlTWVzc2FnZVBhcmFtcy5kZWNvZGUgPSBmdW5jdGlvbihkZWNvZGVyKSB7Ci0g
ICAgdmFyIHBhY2tlZDsKLSAgICB2YXIgdmFsID0gbmV3IFJ1blJlc3BvbnNlTWVzc2FnZVBhcmFt
cygpOwotICAgIHZhciBudW1iZXJPZkJ5dGVzID0gZGVjb2Rlci5yZWFkVWludDMyKCk7Ci0gICAg
dmFyIHZlcnNpb24gPSBkZWNvZGVyLnJlYWRVaW50MzIoKTsKLSAgICB2YWwub3V0cHV0ID0gZGVj
b2Rlci5kZWNvZGVTdHJ1Y3QoUnVuT3V0cHV0KTsKLSAgICByZXR1cm4gdmFsOwotICB9OwotCi0g
IFJ1blJlc3BvbnNlTWVzc2FnZVBhcmFtcy5lbmNvZGUgPSBmdW5jdGlvbihlbmNvZGVyLCB2YWwp
IHsKLSAgICB2YXIgcGFja2VkOwotICAgIGVuY29kZXIud3JpdGVVaW50MzIoUnVuUmVzcG9uc2VN
ZXNzYWdlUGFyYW1zLmVuY29kZWRTaXplKTsKLSAgICBlbmNvZGVyLndyaXRlVWludDMyKDApOwot
ICAgIGVuY29kZXIuZW5jb2RlU3RydWN0KFJ1bk91dHB1dCwgdmFsLm91dHB1dCk7Ci0gIH07Ci0g
IGZ1bmN0aW9uIFF1ZXJ5VmVyc2lvbih2YWx1ZXMpIHsKLSAgICB0aGlzLmluaXREZWZhdWx0c18o
KTsKLSAgICB0aGlzLmluaXRGaWVsZHNfKHZhbHVlcyk7Ci0gIH0KLQotCi0gIFF1ZXJ5VmVyc2lv
bi5wcm90b3R5cGUuaW5pdERlZmF1bHRzXyA9IGZ1bmN0aW9uKCkgewotICB9OwotICBRdWVyeVZl
cnNpb24ucHJvdG90eXBlLmluaXRGaWVsZHNfID0gZnVuY3Rpb24oZmllbGRzKSB7Ci0gICAgZm9y
KHZhciBmaWVsZCBpbiBmaWVsZHMpIHsKLSAgICAgICAgaWYgKHRoaXMuaGFzT3duUHJvcGVydHko
ZmllbGQpKQotICAgICAgICAgIHRoaXNbZmllbGRdID0gZmllbGRzW2ZpZWxkXTsKLSAgICB9Ci0g
IH07Ci0KLSAgUXVlcnlWZXJzaW9uLnZhbGlkYXRlID0gZnVuY3Rpb24obWVzc2FnZVZhbGlkYXRv
ciwgb2Zmc2V0KSB7Ci0gICAgdmFyIGVycjsKLSAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZh
bGlkYXRlU3RydWN0SGVhZGVyKG9mZnNldCwgY29kZWMua1N0cnVjdEhlYWRlclNpemUpOwotICAg
IGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKLSAgICAgICAgcmV0
dXJuIGVycjsKLQotICAgIHZhciBrVmVyc2lvblNpemVzID0gWwotICAgICAge3ZlcnNpb246IDAs
IG51bUJ5dGVzOiA4fQotICAgIF07Ci0gICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0
ZVN0cnVjdFZlcnNpb24ob2Zmc2V0LCBrVmVyc2lvblNpemVzKTsKLSAgICBpZiAoZXJyICE9PSB2
YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCi0gICAgICAgIHJldHVybiBlcnI7Ci0KLSAg
ICByZXR1cm4gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FOwotICB9OwotCi0gIFF1ZXJ5
VmVyc2lvbi5lbmNvZGVkU2l6ZSA9IGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgMDsKLQotICBR
dWVyeVZlcnNpb24uZGVjb2RlID0gZnVuY3Rpb24oZGVjb2RlcikgewotICAgIHZhciBwYWNrZWQ7
Ci0gICAgdmFyIHZhbCA9IG5ldyBRdWVyeVZlcnNpb24oKTsKLSAgICB2YXIgbnVtYmVyT2ZCeXRl
cyA9IGRlY29kZXIucmVhZFVpbnQzMigpOwotICAgIHZhciB2ZXJzaW9uID0gZGVjb2Rlci5yZWFk
VWludDMyKCk7Ci0gICAgcmV0dXJuIHZhbDsKLSAgfTsKLQotICBRdWVyeVZlcnNpb24uZW5jb2Rl
ID0gZnVuY3Rpb24oZW5jb2RlciwgdmFsKSB7Ci0gICAgdmFyIHBhY2tlZDsKLSAgICBlbmNvZGVy
LndyaXRlVWludDMyKFF1ZXJ5VmVyc2lvbi5lbmNvZGVkU2l6ZSk7Ci0gICAgZW5jb2Rlci53cml0
ZVVpbnQzMigwKTsKLSAgfTsKLSAgZnVuY3Rpb24gUXVlcnlWZXJzaW9uUmVzdWx0KHZhbHVlcykg
ewotICAgIHRoaXMuaW5pdERlZmF1bHRzXygpOwotICAgIHRoaXMuaW5pdEZpZWxkc18odmFsdWVz
KTsKLSAgfQotCi0KLSAgUXVlcnlWZXJzaW9uUmVzdWx0LnByb3RvdHlwZS5pbml0RGVmYXVsdHNf
ID0gZnVuY3Rpb24oKSB7Ci0gICAgdGhpcy52ZXJzaW9uID0gMDsKLSAgfTsKLSAgUXVlcnlWZXJz
aW9uUmVzdWx0LnByb3RvdHlwZS5pbml0RmllbGRzXyA9IGZ1bmN0aW9uKGZpZWxkcykgewotICAg
IGZvcih2YXIgZmllbGQgaW4gZmllbGRzKSB7Ci0gICAgICAgIGlmICh0aGlzLmhhc093blByb3Bl
cnR5KGZpZWxkKSkKLSAgICAgICAgICB0aGlzW2ZpZWxkXSA9IGZpZWxkc1tmaWVsZF07Ci0gICAg
fQotICB9OwotCi0gIFF1ZXJ5VmVyc2lvblJlc3VsdC52YWxpZGF0ZSA9IGZ1bmN0aW9uKG1lc3Nh
Z2VWYWxpZGF0b3IsIG9mZnNldCkgewotICAgIHZhciBlcnI7Ci0gICAgZXJyID0gbWVzc2FnZVZh
bGlkYXRvci52YWxpZGF0ZVN0cnVjdEhlYWRlcihvZmZzZXQsIGNvZGVjLmtTdHJ1Y3RIZWFkZXJT
aXplKTsKLSAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCi0g
ICAgICAgIHJldHVybiBlcnI7Ci0KLSAgICB2YXIga1ZlcnNpb25TaXplcyA9IFsKLSAgICAgIHt2
ZXJzaW9uOiAwLCBudW1CeXRlczogMTZ9Ci0gICAgXTsKLSAgICBlcnIgPSBtZXNzYWdlVmFsaWRh
dG9yLnZhbGlkYXRlU3RydWN0VmVyc2lvbihvZmZzZXQsIGtWZXJzaW9uU2l6ZXMpOwotICAgIGlm
IChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKLSAgICAgICAgcmV0dXJu
IGVycjsKLQotCi0gICAgcmV0dXJuIHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORTsKLSAg
fTsKLQotICBRdWVyeVZlcnNpb25SZXN1bHQuZW5jb2RlZFNpemUgPSBjb2RlYy5rU3RydWN0SGVh
ZGVyU2l6ZSArIDg7Ci0KLSAgUXVlcnlWZXJzaW9uUmVzdWx0LmRlY29kZSA9IGZ1bmN0aW9uKGRl
Y29kZXIpIHsKLSAgICB2YXIgcGFja2VkOwotICAgIHZhciB2YWwgPSBuZXcgUXVlcnlWZXJzaW9u
UmVzdWx0KCk7Ci0gICAgdmFyIG51bWJlck9mQnl0ZXMgPSBkZWNvZGVyLnJlYWRVaW50MzIoKTsK
LSAgICB2YXIgdmVyc2lvbiA9IGRlY29kZXIucmVhZFVpbnQzMigpOwotICAgIHZhbC52ZXJzaW9u
ID0gZGVjb2Rlci5kZWNvZGVTdHJ1Y3QoY29kZWMuVWludDMyKTsKLSAgICBkZWNvZGVyLnNraXAo
MSk7Ci0gICAgZGVjb2Rlci5za2lwKDEpOwotICAgIGRlY29kZXIuc2tpcCgxKTsKLSAgICBkZWNv
ZGVyLnNraXAoMSk7Ci0gICAgcmV0dXJuIHZhbDsKLSAgfTsKLQotICBRdWVyeVZlcnNpb25SZXN1
bHQuZW5jb2RlID0gZnVuY3Rpb24oZW5jb2RlciwgdmFsKSB7Ci0gICAgdmFyIHBhY2tlZDsKLSAg
ICBlbmNvZGVyLndyaXRlVWludDMyKFF1ZXJ5VmVyc2lvblJlc3VsdC5lbmNvZGVkU2l6ZSk7Ci0g
ICAgZW5jb2Rlci53cml0ZVVpbnQzMigwKTsKLSAgICBlbmNvZGVyLmVuY29kZVN0cnVjdChjb2Rl
Yy5VaW50MzIsIHZhbC52ZXJzaW9uKTsKLSAgICBlbmNvZGVyLnNraXAoMSk7Ci0gICAgZW5jb2Rl
ci5za2lwKDEpOwotICAgIGVuY29kZXIuc2tpcCgxKTsKLSAgICBlbmNvZGVyLnNraXAoMSk7Ci0g
IH07Ci0gIGZ1bmN0aW9uIEZsdXNoRm9yVGVzdGluZyh2YWx1ZXMpIHsKLSAgICB0aGlzLmluaXRE
ZWZhdWx0c18oKTsKLSAgICB0aGlzLmluaXRGaWVsZHNfKHZhbHVlcyk7Ci0gIH0KLQotCi0gIEZs
dXNoRm9yVGVzdGluZy5wcm90b3R5cGUuaW5pdERlZmF1bHRzXyA9IGZ1bmN0aW9uKCkgewotICB9
OwotICBGbHVzaEZvclRlc3RpbmcucHJvdG90eXBlLmluaXRGaWVsZHNfID0gZnVuY3Rpb24oZmll
bGRzKSB7Ci0gICAgZm9yKHZhciBmaWVsZCBpbiBmaWVsZHMpIHsKLSAgICAgICAgaWYgKHRoaXMu
aGFzT3duUHJvcGVydHkoZmllbGQpKQotICAgICAgICAgIHRoaXNbZmllbGRdID0gZmllbGRzW2Zp
ZWxkXTsKLSAgICB9Ci0gIH07Ci0KLSAgRmx1c2hGb3JUZXN0aW5nLnZhbGlkYXRlID0gZnVuY3Rp
b24obWVzc2FnZVZhbGlkYXRvciwgb2Zmc2V0KSB7Ci0gICAgdmFyIGVycjsKLSAgICBlcnIgPSBt
ZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0SGVhZGVyKG9mZnNldCwgY29kZWMua1N0cnVj
dEhlYWRlclNpemUpOwotICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3Iu
Tk9ORSkKLSAgICAgICAgcmV0dXJuIGVycjsKLQotICAgIHZhciBrVmVyc2lvblNpemVzID0gWwot
ICAgICAge3ZlcnNpb246IDAsIG51bUJ5dGVzOiA4fQotICAgIF07Ci0gICAgZXJyID0gbWVzc2Fn
ZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdFZlcnNpb24ob2Zmc2V0LCBrVmVyc2lvblNpemVzKTsK
LSAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCi0gICAgICAg
IHJldHVybiBlcnI7Ci0KLSAgICByZXR1cm4gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05F
OwotICB9OwotCi0gIEZsdXNoRm9yVGVzdGluZy5lbmNvZGVkU2l6ZSA9IGNvZGVjLmtTdHJ1Y3RI
ZWFkZXJTaXplICsgMDsKLQotICBGbHVzaEZvclRlc3RpbmcuZGVjb2RlID0gZnVuY3Rpb24oZGVj
b2RlcikgewotICAgIHZhciBwYWNrZWQ7Ci0gICAgdmFyIHZhbCA9IG5ldyBGbHVzaEZvclRlc3Rp
bmcoKTsKLSAgICB2YXIgbnVtYmVyT2ZCeXRlcyA9IGRlY29kZXIucmVhZFVpbnQzMigpOwotICAg
IHZhciB2ZXJzaW9uID0gZGVjb2Rlci5yZWFkVWludDMyKCk7Ci0gICAgcmV0dXJuIHZhbDsKLSAg
fTsKLQotICBGbHVzaEZvclRlc3RpbmcuZW5jb2RlID0gZnVuY3Rpb24oZW5jb2RlciwgdmFsKSB7
Ci0gICAgdmFyIHBhY2tlZDsKLSAgICBlbmNvZGVyLndyaXRlVWludDMyKEZsdXNoRm9yVGVzdGlu
Zy5lbmNvZGVkU2l6ZSk7Ci0gICAgZW5jb2Rlci53cml0ZVVpbnQzMigwKTsKLSAgfTsKLSAgZnVu
Y3Rpb24gUnVuT3JDbG9zZVBpcGVNZXNzYWdlUGFyYW1zKHZhbHVlcykgewotICAgIHRoaXMuaW5p
dERlZmF1bHRzXygpOwotICAgIHRoaXMuaW5pdEZpZWxkc18odmFsdWVzKTsKLSAgfQotCi0KLSAg
UnVuT3JDbG9zZVBpcGVNZXNzYWdlUGFyYW1zLnByb3RvdHlwZS5pbml0RGVmYXVsdHNfID0gZnVu
Y3Rpb24oKSB7Ci0gICAgdGhpcy5pbnB1dCA9IG51bGw7Ci0gIH07Ci0gIFJ1bk9yQ2xvc2VQaXBl
TWVzc2FnZVBhcmFtcy5wcm90b3R5cGUuaW5pdEZpZWxkc18gPSBmdW5jdGlvbihmaWVsZHMpIHsK
LSAgICBmb3IodmFyIGZpZWxkIGluIGZpZWxkcykgewotICAgICAgICBpZiAodGhpcy5oYXNPd25Q
cm9wZXJ0eShmaWVsZCkpCi0gICAgICAgICAgdGhpc1tmaWVsZF0gPSBmaWVsZHNbZmllbGRdOwot
ICAgIH0KLSAgfTsKLQotICBSdW5PckNsb3NlUGlwZU1lc3NhZ2VQYXJhbXMudmFsaWRhdGUgPSBm
dW5jdGlvbihtZXNzYWdlVmFsaWRhdG9yLCBvZmZzZXQpIHsKLSAgICB2YXIgZXJyOwotICAgIGVy
ciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RIZWFkZXIob2Zmc2V0LCBjb2RlYy5r
U3RydWN0SGVhZGVyU2l6ZSk7Ci0gICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25F
cnJvci5OT05FKQotICAgICAgICByZXR1cm4gZXJyOwotCi0gICAgdmFyIGtWZXJzaW9uU2l6ZXMg
PSBbCi0gICAgICB7dmVyc2lvbjogMCwgbnVtQnl0ZXM6IDI0fQotICAgIF07Ci0gICAgZXJyID0g
bWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdFZlcnNpb24ob2Zmc2V0LCBrVmVyc2lvblNp
emVzKTsKLSAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCi0g
ICAgICAgIHJldHVybiBlcnI7Ci0KLQotICAgIC8vIHZhbGlkYXRlIFJ1bk9yQ2xvc2VQaXBlTWVz
c2FnZVBhcmFtcy5pbnB1dAotICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVVbmlv
bihvZmZzZXQgKyBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDAsIFJ1bk9yQ2xvc2VQaXBlSW5w
dXQsIGZhbHNlKTsKLSAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5P
TkUpCi0gICAgICAgIHJldHVybiBlcnI7Ci0KLSAgICByZXR1cm4gdmFsaWRhdG9yLnZhbGlkYXRp
b25FcnJvci5OT05FOwotICB9OwotCi0gIFJ1bk9yQ2xvc2VQaXBlTWVzc2FnZVBhcmFtcy5lbmNv
ZGVkU2l6ZSA9IGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgMTY7Ci0KLSAgUnVuT3JDbG9zZVBp
cGVNZXNzYWdlUGFyYW1zLmRlY29kZSA9IGZ1bmN0aW9uKGRlY29kZXIpIHsKLSAgICB2YXIgcGFj
a2VkOwotICAgIHZhciB2YWwgPSBuZXcgUnVuT3JDbG9zZVBpcGVNZXNzYWdlUGFyYW1zKCk7Ci0g
ICAgdmFyIG51bWJlck9mQnl0ZXMgPSBkZWNvZGVyLnJlYWRVaW50MzIoKTsKLSAgICB2YXIgdmVy
c2lvbiA9IGRlY29kZXIucmVhZFVpbnQzMigpOwotICAgIHZhbC5pbnB1dCA9IGRlY29kZXIuZGVj
b2RlU3RydWN0KFJ1bk9yQ2xvc2VQaXBlSW5wdXQpOwotICAgIHJldHVybiB2YWw7Ci0gIH07Ci0K
LSAgUnVuT3JDbG9zZVBpcGVNZXNzYWdlUGFyYW1zLmVuY29kZSA9IGZ1bmN0aW9uKGVuY29kZXIs
IHZhbCkgewotICAgIHZhciBwYWNrZWQ7Ci0gICAgZW5jb2Rlci53cml0ZVVpbnQzMihSdW5PckNs
b3NlUGlwZU1lc3NhZ2VQYXJhbXMuZW5jb2RlZFNpemUpOwotICAgIGVuY29kZXIud3JpdGVVaW50
MzIoMCk7Ci0gICAgZW5jb2Rlci5lbmNvZGVTdHJ1Y3QoUnVuT3JDbG9zZVBpcGVJbnB1dCwgdmFs
LmlucHV0KTsKLSAgfTsKLSAgZnVuY3Rpb24gUmVxdWlyZVZlcnNpb24odmFsdWVzKSB7Ci0gICAg
dGhpcy5pbml0RGVmYXVsdHNfKCk7Ci0gICAgdGhpcy5pbml0RmllbGRzXyh2YWx1ZXMpOwotICB9
Ci0KLQotICBSZXF1aXJlVmVyc2lvbi5wcm90b3R5cGUuaW5pdERlZmF1bHRzXyA9IGZ1bmN0aW9u
KCkgewotICAgIHRoaXMudmVyc2lvbiA9IDA7Ci0gIH07Ci0gIFJlcXVpcmVWZXJzaW9uLnByb3Rv
dHlwZS5pbml0RmllbGRzXyA9IGZ1bmN0aW9uKGZpZWxkcykgewotICAgIGZvcih2YXIgZmllbGQg
aW4gZmllbGRzKSB7Ci0gICAgICAgIGlmICh0aGlzLmhhc093blByb3BlcnR5KGZpZWxkKSkKLSAg
ICAgICAgICB0aGlzW2ZpZWxkXSA9IGZpZWxkc1tmaWVsZF07Ci0gICAgfQotICB9OwotCi0gIFJl
cXVpcmVWZXJzaW9uLnZhbGlkYXRlID0gZnVuY3Rpb24obWVzc2FnZVZhbGlkYXRvciwgb2Zmc2V0
KSB7Ci0gICAgdmFyIGVycjsKLSAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3Ry
dWN0SGVhZGVyKG9mZnNldCwgY29kZWMua1N0cnVjdEhlYWRlclNpemUpOwotICAgIGlmIChlcnIg
IT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKLSAgICAgICAgcmV0dXJuIGVycjsK
LQotICAgIHZhciBrVmVyc2lvblNpemVzID0gWwotICAgICAge3ZlcnNpb246IDAsIG51bUJ5dGVz
OiAxNn0KLSAgICBdOwotICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RW
ZXJzaW9uKG9mZnNldCwga1ZlcnNpb25TaXplcyk7Ci0gICAgaWYgKGVyciAhPT0gdmFsaWRhdG9y
LnZhbGlkYXRpb25FcnJvci5OT05FKQotICAgICAgICByZXR1cm4gZXJyOwotCi0KLSAgICByZXR1
cm4gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FOwotICB9OwotCi0gIFJlcXVpcmVWZXJz
aW9uLmVuY29kZWRTaXplID0gY29kZWMua1N0cnVjdEhlYWRlclNpemUgKyA4OwotCi0gIFJlcXVp
cmVWZXJzaW9uLmRlY29kZSA9IGZ1bmN0aW9uKGRlY29kZXIpIHsKLSAgICB2YXIgcGFja2VkOwot
ICAgIHZhciB2YWwgPSBuZXcgUmVxdWlyZVZlcnNpb24oKTsKLSAgICB2YXIgbnVtYmVyT2ZCeXRl
cyA9IGRlY29kZXIucmVhZFVpbnQzMigpOwotICAgIHZhciB2ZXJzaW9uID0gZGVjb2Rlci5yZWFk
VWludDMyKCk7Ci0gICAgdmFsLnZlcnNpb24gPSBkZWNvZGVyLmRlY29kZVN0cnVjdChjb2RlYy5V
aW50MzIpOwotICAgIGRlY29kZXIuc2tpcCgxKTsKLSAgICBkZWNvZGVyLnNraXAoMSk7Ci0gICAg
ZGVjb2Rlci5za2lwKDEpOwotICAgIGRlY29kZXIuc2tpcCgxKTsKLSAgICByZXR1cm4gdmFsOwot
ICB9OwotCi0gIFJlcXVpcmVWZXJzaW9uLmVuY29kZSA9IGZ1bmN0aW9uKGVuY29kZXIsIHZhbCkg
ewotICAgIHZhciBwYWNrZWQ7Ci0gICAgZW5jb2Rlci53cml0ZVVpbnQzMihSZXF1aXJlVmVyc2lv
bi5lbmNvZGVkU2l6ZSk7Ci0gICAgZW5jb2Rlci53cml0ZVVpbnQzMigwKTsKLSAgICBlbmNvZGVy
LmVuY29kZVN0cnVjdChjb2RlYy5VaW50MzIsIHZhbC52ZXJzaW9uKTsKLSAgICBlbmNvZGVyLnNr
aXAoMSk7Ci0gICAgZW5jb2Rlci5za2lwKDEpOwotICAgIGVuY29kZXIuc2tpcCgxKTsKLSAgICBl
bmNvZGVyLnNraXAoMSk7Ci0gIH07Ci0KLSAgZnVuY3Rpb24gUnVuSW5wdXQodmFsdWUpIHsKLSAg
ICB0aGlzLmluaXREZWZhdWx0XygpOwotICAgIHRoaXMuaW5pdFZhbHVlXyh2YWx1ZSk7Ci0gIH0K
LQotCi0gIFJ1bklucHV0LlRhZ3MgPSB7Ci0gICAgcXVlcnlWZXJzaW9uOiAwLAotICAgIGZsdXNo
Rm9yVGVzdGluZzogMSwKLSAgfTsKLQotICBSdW5JbnB1dC5wcm90b3R5cGUuaW5pdERlZmF1bHRf
ID0gZnVuY3Rpb24oKSB7Ci0gICAgdGhpcy4kZGF0YSA9IG51bGw7Ci0gICAgdGhpcy4kdGFnID0g
dW5kZWZpbmVkOwotICB9Ci0KLSAgUnVuSW5wdXQucHJvdG90eXBlLmluaXRWYWx1ZV8gPSBmdW5j
dGlvbih2YWx1ZSkgewotICAgIGlmICh2YWx1ZSA9PSB1bmRlZmluZWQpIHsKLSAgICAgIHJldHVy
bjsKLSAgICB9Ci0KLSAgICB2YXIga2V5cyA9IE9iamVjdC5rZXlzKHZhbHVlKTsKLSAgICBpZiAo
a2V5cy5sZW5ndGggPT0gMCkgewotICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmIChrZXlz
Lmxlbmd0aCA+IDEpIHsKLSAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoIllvdSBtYXkgc2V0IG9u
bHkgb25lIG1lbWJlciBvbiBhIHVuaW9uLiIpOwotICAgIH0KLQotICAgIHZhciBmaWVsZHMgPSBb
Ci0gICAgICAgICJxdWVyeVZlcnNpb24iLAotICAgICAgICAiZmx1c2hGb3JUZXN0aW5nIiwKLSAg
ICBdOwotCi0gICAgaWYgKGZpZWxkcy5pbmRleE9mKGtleXNbMF0pIDwgMCkgewotICAgICAgdGhy
b3cgbmV3IFJlZmVyZW5jZUVycm9yKGtleXNbMF0gKyAiIGlzIG5vdCBhIFJ1bklucHV0IG1lbWJl
ci4iKTsKLQotICAgIH0KLQotICAgIHRoaXNba2V5c1swXV0gPSB2YWx1ZVtrZXlzWzBdXTsKLSAg
fQotICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUnVuSW5wdXQucHJvdG90eXBlLCAicXVlcnlWZXJz
aW9uIiwgewotICAgIGdldDogZnVuY3Rpb24oKSB7Ci0gICAgICBpZiAodGhpcy4kdGFnICE9IFJ1
bklucHV0LlRhZ3MucXVlcnlWZXJzaW9uKSB7Ci0gICAgICAgIHRocm93IG5ldyBSZWZlcmVuY2VF
cnJvcigKLSAgICAgICAgICAgICJSdW5JbnB1dC5xdWVyeVZlcnNpb24gaXMgbm90IGN1cnJlbnRs
eSBzZXQuIik7Ci0gICAgICB9Ci0gICAgICByZXR1cm4gdGhpcy4kZGF0YTsKLSAgICB9LAotCi0g
ICAgc2V0OiBmdW5jdGlvbih2YWx1ZSkgewotICAgICAgdGhpcy4kdGFnID0gUnVuSW5wdXQuVGFn
cy5xdWVyeVZlcnNpb247Ci0gICAgICB0aGlzLiRkYXRhID0gdmFsdWU7Ci0gICAgfQotICB9KTsK
LSAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFJ1bklucHV0LnByb3RvdHlwZSwgImZsdXNoRm9yVGVz
dGluZyIsIHsKLSAgICBnZXQ6IGZ1bmN0aW9uKCkgewotICAgICAgaWYgKHRoaXMuJHRhZyAhPSBS
dW5JbnB1dC5UYWdzLmZsdXNoRm9yVGVzdGluZykgewotICAgICAgICB0aHJvdyBuZXcgUmVmZXJl
bmNlRXJyb3IoCi0gICAgICAgICAgICAiUnVuSW5wdXQuZmx1c2hGb3JUZXN0aW5nIGlzIG5vdCBj
dXJyZW50bHkgc2V0LiIpOwotICAgICAgfQotICAgICAgcmV0dXJuIHRoaXMuJGRhdGE7Ci0gICAg
fSwKLQotICAgIHNldDogZnVuY3Rpb24odmFsdWUpIHsKLSAgICAgIHRoaXMuJHRhZyA9IFJ1bklu
cHV0LlRhZ3MuZmx1c2hGb3JUZXN0aW5nOwotICAgICAgdGhpcy4kZGF0YSA9IHZhbHVlOwotICAg
IH0KLSAgfSk7Ci0KLQotICAgIFJ1bklucHV0LmVuY29kZSA9IGZ1bmN0aW9uKGVuY29kZXIsIHZh
bCkgewotICAgICAgaWYgKHZhbCA9PSBudWxsKSB7Ci0gICAgICAgIGVuY29kZXIud3JpdGVVaW50
NjQoMCk7Ci0gICAgICAgIGVuY29kZXIud3JpdGVVaW50NjQoMCk7Ci0gICAgICAgIHJldHVybjsK
LSAgICAgIH0KLSAgICAgIGlmICh2YWwuJHRhZyA9PSB1bmRlZmluZWQpIHsKLSAgICAgICAgdGhy
b3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGVuY29kZSB1bmlvbnMgd2l0aCBhbiB1bmtub3duIG1l
bWJlciBzZXQuIik7Ci0gICAgICB9Ci0KLSAgICAgIGVuY29kZXIud3JpdGVVaW50MzIoMTYpOwot
ICAgICAgZW5jb2Rlci53cml0ZVVpbnQzMih2YWwuJHRhZyk7Ci0gICAgICBzd2l0Y2ggKHZhbC4k
dGFnKSB7Ci0gICAgICAgIGNhc2UgUnVuSW5wdXQuVGFncy5xdWVyeVZlcnNpb246Ci0gICAgICAg
ICAgZW5jb2Rlci5lbmNvZGVTdHJ1Y3RQb2ludGVyKFF1ZXJ5VmVyc2lvbiwgdmFsLnF1ZXJ5VmVy
c2lvbik7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgUnVuSW5wdXQuVGFncy5mbHVz
aEZvclRlc3Rpbmc6Ci0gICAgICAgICAgZW5jb2Rlci5lbmNvZGVTdHJ1Y3RQb2ludGVyKEZsdXNo
Rm9yVGVzdGluZywgdmFsLmZsdXNoRm9yVGVzdGluZyk7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAg
ICB9Ci0gICAgICBlbmNvZGVyLmFsaWduKCk7Ci0gICAgfTsKLQotCi0gICAgUnVuSW5wdXQuZGVj
b2RlID0gZnVuY3Rpb24oZGVjb2RlcikgewotICAgICAgdmFyIHNpemUgPSBkZWNvZGVyLnJlYWRV
aW50MzIoKTsKLSAgICAgIGlmIChzaXplID09IDApIHsKLSAgICAgICAgZGVjb2Rlci5yZWFkVWlu
dDMyKCk7Ci0gICAgICAgIGRlY29kZXIucmVhZFVpbnQ2NCgpOwotICAgICAgICByZXR1cm4gbnVs
bDsKLSAgICAgIH0KLQotICAgICAgdmFyIHJlc3VsdCA9IG5ldyBSdW5JbnB1dCgpOwotICAgICAg
dmFyIHRhZyA9IGRlY29kZXIucmVhZFVpbnQzMigpOwotICAgICAgc3dpdGNoICh0YWcpIHsKLSAg
ICAgICAgY2FzZSBSdW5JbnB1dC5UYWdzLnF1ZXJ5VmVyc2lvbjoKLSAgICAgICAgICByZXN1bHQu
cXVlcnlWZXJzaW9uID0gZGVjb2Rlci5kZWNvZGVTdHJ1Y3RQb2ludGVyKFF1ZXJ5VmVyc2lvbik7
Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgUnVuSW5wdXQuVGFncy5mbHVzaEZvclRl
c3Rpbmc6Ci0gICAgICAgICAgcmVzdWx0LmZsdXNoRm9yVGVzdGluZyA9IGRlY29kZXIuZGVjb2Rl
U3RydWN0UG9pbnRlcihGbHVzaEZvclRlc3RpbmcpOwotICAgICAgICAgIGJyZWFrOwotICAgICAg
fQotICAgICAgZGVjb2Rlci5hbGlnbigpOwotCi0gICAgICByZXR1cm4gcmVzdWx0OwotICAgIH07
Ci0KLQotICAgIFJ1bklucHV0LnZhbGlkYXRlID0gZnVuY3Rpb24obWVzc2FnZVZhbGlkYXRvciwg
b2Zmc2V0KSB7Ci0gICAgICB2YXIgc2l6ZSA9IG1lc3NhZ2VWYWxpZGF0b3IuZGVjb2RlVW5pb25T
aXplKG9mZnNldCk7Ci0gICAgICBpZiAoc2l6ZSAhPSAxNikgewotICAgICAgICByZXR1cm4gdmFs
aWRhdG9yLnZhbGlkYXRpb25FcnJvci5JTlZBTElEX1VOSU9OX1NJWkU7Ci0gICAgICB9Ci0KLSAg
ICAgIHZhciB0YWcgPSBtZXNzYWdlVmFsaWRhdG9yLmRlY29kZVVuaW9uVGFnKG9mZnNldCk7Ci0g
ICAgICB2YXIgZGF0YV9vZmZzZXQgPSBvZmZzZXQgKyA4OwotICAgICAgdmFyIGVycjsKLSAgICAg
IHN3aXRjaCAodGFnKSB7Ci0gICAgICAgIGNhc2UgUnVuSW5wdXQuVGFncy5xdWVyeVZlcnNpb246
Ci0gICAgICAgICAgCi0KLSAgICAvLyB2YWxpZGF0ZSBSdW5JbnB1dC5xdWVyeVZlcnNpb24KLSAg
ICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0UG9pbnRlcihkYXRhX29mZnNl
dCwgUXVlcnlWZXJzaW9uLCBmYWxzZSk7Ci0gICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlk
YXRpb25FcnJvci5OT05FKQotICAgICAgICByZXR1cm4gZXJyOwotICAgICAgICAgIGJyZWFrOwot
ICAgICAgICBjYXNlIFJ1bklucHV0LlRhZ3MuZmx1c2hGb3JUZXN0aW5nOgotICAgICAgICAgIAot
Ci0gICAgLy8gdmFsaWRhdGUgUnVuSW5wdXQuZmx1c2hGb3JUZXN0aW5nCi0gICAgZXJyID0gbWVz
c2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdFBvaW50ZXIoZGF0YV9vZmZzZXQsIEZsdXNoRm9y
VGVzdGluZywgZmFsc2UpOwotICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJy
b3IuTk9ORSkKLSAgICAgICAgcmV0dXJuIGVycjsKLSAgICAgICAgICBicmVhazsKLSAgICAgIH0K
LQotICAgICAgcmV0dXJuIHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORTsKLSAgICB9Owot
Ci0gIFJ1bklucHV0LmVuY29kZWRTaXplID0gMTY7Ci0KLSAgZnVuY3Rpb24gUnVuT3V0cHV0KHZh
bHVlKSB7Ci0gICAgdGhpcy5pbml0RGVmYXVsdF8oKTsKLSAgICB0aGlzLmluaXRWYWx1ZV8odmFs
dWUpOwotICB9Ci0KLQotICBSdW5PdXRwdXQuVGFncyA9IHsKLSAgICBxdWVyeVZlcnNpb25SZXN1
bHQ6IDAsCi0gIH07Ci0KLSAgUnVuT3V0cHV0LnByb3RvdHlwZS5pbml0RGVmYXVsdF8gPSBmdW5j
dGlvbigpIHsKLSAgICB0aGlzLiRkYXRhID0gbnVsbDsKLSAgICB0aGlzLiR0YWcgPSB1bmRlZmlu
ZWQ7Ci0gIH0KLQotICBSdW5PdXRwdXQucHJvdG90eXBlLmluaXRWYWx1ZV8gPSBmdW5jdGlvbih2
YWx1ZSkgewotICAgIGlmICh2YWx1ZSA9PSB1bmRlZmluZWQpIHsKLSAgICAgIHJldHVybjsKLSAg
ICB9Ci0KLSAgICB2YXIga2V5cyA9IE9iamVjdC5rZXlzKHZhbHVlKTsKLSAgICBpZiAoa2V5cy5s
ZW5ndGggPT0gMCkgewotICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmIChrZXlzLmxlbmd0
aCA+IDEpIHsKLSAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoIllvdSBtYXkgc2V0IG9ubHkgb25l
IG1lbWJlciBvbiBhIHVuaW9uLiIpOwotICAgIH0KLQotICAgIHZhciBmaWVsZHMgPSBbCi0gICAg
ICAgICJxdWVyeVZlcnNpb25SZXN1bHQiLAotICAgIF07Ci0KLSAgICBpZiAoZmllbGRzLmluZGV4
T2Yoa2V5c1swXSkgPCAwKSB7Ci0gICAgICB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3Ioa2V5c1sw
XSArICIgaXMgbm90IGEgUnVuT3V0cHV0IG1lbWJlci4iKTsKLQotICAgIH0KLQotICAgIHRoaXNb
a2V5c1swXV0gPSB2YWx1ZVtrZXlzWzBdXTsKLSAgfQotICBPYmplY3QuZGVmaW5lUHJvcGVydHko
UnVuT3V0cHV0LnByb3RvdHlwZSwgInF1ZXJ5VmVyc2lvblJlc3VsdCIsIHsKLSAgICBnZXQ6IGZ1
bmN0aW9uKCkgewotICAgICAgaWYgKHRoaXMuJHRhZyAhPSBSdW5PdXRwdXQuVGFncy5xdWVyeVZl
cnNpb25SZXN1bHQpIHsKLSAgICAgICAgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKAotICAgICAg
ICAgICAgIlJ1bk91dHB1dC5xdWVyeVZlcnNpb25SZXN1bHQgaXMgbm90IGN1cnJlbnRseSBzZXQu
Iik7Ci0gICAgICB9Ci0gICAgICByZXR1cm4gdGhpcy4kZGF0YTsKLSAgICB9LAotCi0gICAgc2V0
OiBmdW5jdGlvbih2YWx1ZSkgewotICAgICAgdGhpcy4kdGFnID0gUnVuT3V0cHV0LlRhZ3MucXVl
cnlWZXJzaW9uUmVzdWx0OwotICAgICAgdGhpcy4kZGF0YSA9IHZhbHVlOwotICAgIH0KLSAgfSk7
Ci0KLQotICAgIFJ1bk91dHB1dC5lbmNvZGUgPSBmdW5jdGlvbihlbmNvZGVyLCB2YWwpIHsKLSAg
ICAgIGlmICh2YWwgPT0gbnVsbCkgewotICAgICAgICBlbmNvZGVyLndyaXRlVWludDY0KDApOwot
ICAgICAgICBlbmNvZGVyLndyaXRlVWludDY0KDApOwotICAgICAgICByZXR1cm47Ci0gICAgICB9
Ci0gICAgICBpZiAodmFsLiR0YWcgPT0gdW5kZWZpbmVkKSB7Ci0gICAgICAgIHRocm93IG5ldyBU
eXBlRXJyb3IoIkNhbm5vdCBlbmNvZGUgdW5pb25zIHdpdGggYW4gdW5rbm93biBtZW1iZXIgc2V0
LiIpOwotICAgICAgfQotCi0gICAgICBlbmNvZGVyLndyaXRlVWludDMyKDE2KTsKLSAgICAgIGVu
Y29kZXIud3JpdGVVaW50MzIodmFsLiR0YWcpOwotICAgICAgc3dpdGNoICh2YWwuJHRhZykgewot
ICAgICAgICBjYXNlIFJ1bk91dHB1dC5UYWdzLnF1ZXJ5VmVyc2lvblJlc3VsdDoKLSAgICAgICAg
ICBlbmNvZGVyLmVuY29kZVN0cnVjdFBvaW50ZXIoUXVlcnlWZXJzaW9uUmVzdWx0LCB2YWwucXVl
cnlWZXJzaW9uUmVzdWx0KTsKLSAgICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICAgIGVuY29k
ZXIuYWxpZ24oKTsKLSAgICB9OwotCi0KLSAgICBSdW5PdXRwdXQuZGVjb2RlID0gZnVuY3Rpb24o
ZGVjb2RlcikgewotICAgICAgdmFyIHNpemUgPSBkZWNvZGVyLnJlYWRVaW50MzIoKTsKLSAgICAg
IGlmIChzaXplID09IDApIHsKLSAgICAgICAgZGVjb2Rlci5yZWFkVWludDMyKCk7Ci0gICAgICAg
IGRlY29kZXIucmVhZFVpbnQ2NCgpOwotICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgIH0KLQot
ICAgICAgdmFyIHJlc3VsdCA9IG5ldyBSdW5PdXRwdXQoKTsKLSAgICAgIHZhciB0YWcgPSBkZWNv
ZGVyLnJlYWRVaW50MzIoKTsKLSAgICAgIHN3aXRjaCAodGFnKSB7Ci0gICAgICAgIGNhc2UgUnVu
T3V0cHV0LlRhZ3MucXVlcnlWZXJzaW9uUmVzdWx0OgotICAgICAgICAgIHJlc3VsdC5xdWVyeVZl
cnNpb25SZXN1bHQgPSBkZWNvZGVyLmRlY29kZVN0cnVjdFBvaW50ZXIoUXVlcnlWZXJzaW9uUmVz
dWx0KTsKLSAgICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICAgIGRlY29kZXIuYWxpZ24oKTsK
LQotICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9OwotCi0KLSAgICBSdW5PdXRwdXQudmFsaWRh
dGUgPSBmdW5jdGlvbihtZXNzYWdlVmFsaWRhdG9yLCBvZmZzZXQpIHsKLSAgICAgIHZhciBzaXpl
ID0gbWVzc2FnZVZhbGlkYXRvci5kZWNvZGVVbmlvblNpemUob2Zmc2V0KTsKLSAgICAgIGlmIChz
aXplICE9IDE2KSB7Ci0gICAgICAgIHJldHVybiB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLklO
VkFMSURfVU5JT05fU0laRTsKLSAgICAgIH0KLQotICAgICAgdmFyIHRhZyA9IG1lc3NhZ2VWYWxp
ZGF0b3IuZGVjb2RlVW5pb25UYWcob2Zmc2V0KTsKLSAgICAgIHZhciBkYXRhX29mZnNldCA9IG9m
ZnNldCArIDg7Ci0gICAgICB2YXIgZXJyOwotICAgICAgc3dpdGNoICh0YWcpIHsKLSAgICAgICAg
Y2FzZSBSdW5PdXRwdXQuVGFncy5xdWVyeVZlcnNpb25SZXN1bHQ6Ci0gICAgICAgICAgCi0KLSAg
ICAvLyB2YWxpZGF0ZSBSdW5PdXRwdXQucXVlcnlWZXJzaW9uUmVzdWx0Ci0gICAgZXJyID0gbWVz
c2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdFBvaW50ZXIoZGF0YV9vZmZzZXQsIFF1ZXJ5VmVy
c2lvblJlc3VsdCwgZmFsc2UpOwotICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9u
RXJyb3IuTk9ORSkKLSAgICAgICAgcmV0dXJuIGVycjsKLSAgICAgICAgICBicmVhazsKLSAgICAg
IH0KLQotICAgICAgcmV0dXJuIHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORTsKLSAgICB9
OwotCi0gIFJ1bk91dHB1dC5lbmNvZGVkU2l6ZSA9IDE2OwotCi0gIGZ1bmN0aW9uIFJ1bk9yQ2xv
c2VQaXBlSW5wdXQodmFsdWUpIHsKLSAgICB0aGlzLmluaXREZWZhdWx0XygpOwotICAgIHRoaXMu
aW5pdFZhbHVlXyh2YWx1ZSk7Ci0gIH0KLQotCi0gIFJ1bk9yQ2xvc2VQaXBlSW5wdXQuVGFncyA9
IHsKLSAgICByZXF1aXJlVmVyc2lvbjogMCwKLSAgfTsKLQotICBSdW5PckNsb3NlUGlwZUlucHV0
LnByb3RvdHlwZS5pbml0RGVmYXVsdF8gPSBmdW5jdGlvbigpIHsKLSAgICB0aGlzLiRkYXRhID0g
bnVsbDsKLSAgICB0aGlzLiR0YWcgPSB1bmRlZmluZWQ7Ci0gIH0KLQotICBSdW5PckNsb3NlUGlw
ZUlucHV0LnByb3RvdHlwZS5pbml0VmFsdWVfID0gZnVuY3Rpb24odmFsdWUpIHsKLSAgICBpZiAo
dmFsdWUgPT0gdW5kZWZpbmVkKSB7Ci0gICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgdmFyIGtl
eXMgPSBPYmplY3Qua2V5cyh2YWx1ZSk7Ci0gICAgaWYgKGtleXMubGVuZ3RoID09IDApIHsKLSAg
ICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAoa2V5cy5sZW5ndGggPiAxKSB7Ci0gICAgICB0
aHJvdyBuZXcgVHlwZUVycm9yKCJZb3UgbWF5IHNldCBvbmx5IG9uZSBtZW1iZXIgb24gYSB1bmlv
bi4iKTsKLSAgICB9Ci0KLSAgICB2YXIgZmllbGRzID0gWwotICAgICAgICAicmVxdWlyZVZlcnNp
b24iLAotICAgIF07Ci0KLSAgICBpZiAoZmllbGRzLmluZGV4T2Yoa2V5c1swXSkgPCAwKSB7Ci0g
ICAgICB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3Ioa2V5c1swXSArICIgaXMgbm90IGEgUnVuT3JD
bG9zZVBpcGVJbnB1dCBtZW1iZXIuIik7Ci0KLSAgICB9Ci0KLSAgICB0aGlzW2tleXNbMF1dID0g
dmFsdWVba2V5c1swXV07Ci0gIH0KLSAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFJ1bk9yQ2xvc2VQ
aXBlSW5wdXQucHJvdG90eXBlLCAicmVxdWlyZVZlcnNpb24iLCB7Ci0gICAgZ2V0OiBmdW5jdGlv
bigpIHsKLSAgICAgIGlmICh0aGlzLiR0YWcgIT0gUnVuT3JDbG9zZVBpcGVJbnB1dC5UYWdzLnJl
cXVpcmVWZXJzaW9uKSB7Ci0gICAgICAgIHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcigKLSAgICAg
ICAgICAgICJSdW5PckNsb3NlUGlwZUlucHV0LnJlcXVpcmVWZXJzaW9uIGlzIG5vdCBjdXJyZW50
bHkgc2V0LiIpOwotICAgICAgfQotICAgICAgcmV0dXJuIHRoaXMuJGRhdGE7Ci0gICAgfSwKLQot
ICAgIHNldDogZnVuY3Rpb24odmFsdWUpIHsKLSAgICAgIHRoaXMuJHRhZyA9IFJ1bk9yQ2xvc2VQ
aXBlSW5wdXQuVGFncy5yZXF1aXJlVmVyc2lvbjsKLSAgICAgIHRoaXMuJGRhdGEgPSB2YWx1ZTsK
LSAgICB9Ci0gIH0pOwotCi0KLSAgICBSdW5PckNsb3NlUGlwZUlucHV0LmVuY29kZSA9IGZ1bmN0
aW9uKGVuY29kZXIsIHZhbCkgewotICAgICAgaWYgKHZhbCA9PSBudWxsKSB7Ci0gICAgICAgIGVu
Y29kZXIud3JpdGVVaW50NjQoMCk7Ci0gICAgICAgIGVuY29kZXIud3JpdGVVaW50NjQoMCk7Ci0g
ICAgICAgIHJldHVybjsKLSAgICAgIH0KLSAgICAgIGlmICh2YWwuJHRhZyA9PSB1bmRlZmluZWQp
IHsKLSAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGVuY29kZSB1bmlvbnMgd2l0
aCBhbiB1bmtub3duIG1lbWJlciBzZXQuIik7Ci0gICAgICB9Ci0KLSAgICAgIGVuY29kZXIud3Jp
dGVVaW50MzIoMTYpOwotICAgICAgZW5jb2Rlci53cml0ZVVpbnQzMih2YWwuJHRhZyk7Ci0gICAg
ICBzd2l0Y2ggKHZhbC4kdGFnKSB7Ci0gICAgICAgIGNhc2UgUnVuT3JDbG9zZVBpcGVJbnB1dC5U
YWdzLnJlcXVpcmVWZXJzaW9uOgotICAgICAgICAgIGVuY29kZXIuZW5jb2RlU3RydWN0UG9pbnRl
cihSZXF1aXJlVmVyc2lvbiwgdmFsLnJlcXVpcmVWZXJzaW9uKTsKLSAgICAgICAgICBicmVhazsK
LSAgICAgIH0KLSAgICAgIGVuY29kZXIuYWxpZ24oKTsKLSAgICB9OwotCi0KLSAgICBSdW5PckNs
b3NlUGlwZUlucHV0LmRlY29kZSA9IGZ1bmN0aW9uKGRlY29kZXIpIHsKLSAgICAgIHZhciBzaXpl
ID0gZGVjb2Rlci5yZWFkVWludDMyKCk7Ci0gICAgICBpZiAoc2l6ZSA9PSAwKSB7Ci0gICAgICAg
IGRlY29kZXIucmVhZFVpbnQzMigpOwotICAgICAgICBkZWNvZGVyLnJlYWRVaW50NjQoKTsKLSAg
ICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICB9Ci0KLSAgICAgIHZhciByZXN1bHQgPSBuZXcgUnVu
T3JDbG9zZVBpcGVJbnB1dCgpOwotICAgICAgdmFyIHRhZyA9IGRlY29kZXIucmVhZFVpbnQzMigp
OwotICAgICAgc3dpdGNoICh0YWcpIHsKLSAgICAgICAgY2FzZSBSdW5PckNsb3NlUGlwZUlucHV0
LlRhZ3MucmVxdWlyZVZlcnNpb246Ci0gICAgICAgICAgcmVzdWx0LnJlcXVpcmVWZXJzaW9uID0g
ZGVjb2Rlci5kZWNvZGVTdHJ1Y3RQb2ludGVyKFJlcXVpcmVWZXJzaW9uKTsKLSAgICAgICAgICBi
cmVhazsKLSAgICAgIH0KLSAgICAgIGRlY29kZXIuYWxpZ24oKTsKLQotICAgICAgcmV0dXJuIHJl
c3VsdDsKLSAgICB9OwotCi0KLSAgICBSdW5PckNsb3NlUGlwZUlucHV0LnZhbGlkYXRlID0gZnVu
Y3Rpb24obWVzc2FnZVZhbGlkYXRvciwgb2Zmc2V0KSB7Ci0gICAgICB2YXIgc2l6ZSA9IG1lc3Nh
Z2VWYWxpZGF0b3IuZGVjb2RlVW5pb25TaXplKG9mZnNldCk7Ci0gICAgICBpZiAoc2l6ZSAhPSAx
NikgewotICAgICAgICByZXR1cm4gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5JTlZBTElEX1VO
SU9OX1NJWkU7Ci0gICAgICB9Ci0KLSAgICAgIHZhciB0YWcgPSBtZXNzYWdlVmFsaWRhdG9yLmRl
Y29kZVVuaW9uVGFnKG9mZnNldCk7Ci0gICAgICB2YXIgZGF0YV9vZmZzZXQgPSBvZmZzZXQgKyA4
OwotICAgICAgdmFyIGVycjsKLSAgICAgIHN3aXRjaCAodGFnKSB7Ci0gICAgICAgIGNhc2UgUnVu
T3JDbG9zZVBpcGVJbnB1dC5UYWdzLnJlcXVpcmVWZXJzaW9uOgotICAgICAgICAgIAotCi0gICAg
Ly8gdmFsaWRhdGUgUnVuT3JDbG9zZVBpcGVJbnB1dC5yZXF1aXJlVmVyc2lvbgotICAgIGVyciA9
IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RQb2ludGVyKGRhdGFfb2Zmc2V0LCBSZXF1
aXJlVmVyc2lvbiwgZmFsc2UpOwotICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9u
RXJyb3IuTk9ORSkKLSAgICAgICAgcmV0dXJuIGVycjsKLSAgICAgICAgICBicmVhazsKLSAgICAg
IH0KLQotICAgICAgcmV0dXJuIHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORTsKLSAgICB9
OwotCi0gIFJ1bk9yQ2xvc2VQaXBlSW5wdXQuZW5jb2RlZFNpemUgPSAxNjsKLSAgZXhwb3J0cy5r
UnVuTWVzc2FnZUlkID0ga1J1bk1lc3NhZ2VJZDsKLSAgZXhwb3J0cy5rUnVuT3JDbG9zZVBpcGVN
ZXNzYWdlSWQgPSBrUnVuT3JDbG9zZVBpcGVNZXNzYWdlSWQ7Ci0gIGV4cG9ydHMuUnVuTWVzc2Fn
ZVBhcmFtcyA9IFJ1bk1lc3NhZ2VQYXJhbXM7Ci0gIGV4cG9ydHMuUnVuUmVzcG9uc2VNZXNzYWdl
UGFyYW1zID0gUnVuUmVzcG9uc2VNZXNzYWdlUGFyYW1zOwotICBleHBvcnRzLlF1ZXJ5VmVyc2lv
biA9IFF1ZXJ5VmVyc2lvbjsKLSAgZXhwb3J0cy5RdWVyeVZlcnNpb25SZXN1bHQgPSBRdWVyeVZl
cnNpb25SZXN1bHQ7Ci0gIGV4cG9ydHMuRmx1c2hGb3JUZXN0aW5nID0gRmx1c2hGb3JUZXN0aW5n
OwotICBleHBvcnRzLlJ1bk9yQ2xvc2VQaXBlTWVzc2FnZVBhcmFtcyA9IFJ1bk9yQ2xvc2VQaXBl
TWVzc2FnZVBhcmFtczsKLSAgZXhwb3J0cy5SZXF1aXJlVmVyc2lvbiA9IFJlcXVpcmVWZXJzaW9u
OwotICBleHBvcnRzLlJ1bklucHV0ID0gUnVuSW5wdXQ7Ci0gIGV4cG9ydHMuUnVuT3V0cHV0ID0g
UnVuT3V0cHV0OwotICBleHBvcnRzLlJ1bk9yQ2xvc2VQaXBlSW5wdXQgPSBSdW5PckNsb3NlUGlw
ZUlucHV0OwotfSkoKTsvLyBDb3B5cmlnaHQgMjAxNCBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVk
IGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNF
TlNFIGZpbGUuCi0KLSd1c2Ugc3RyaWN0JzsKLQotKGZ1bmN0aW9uKCkgewotICB2YXIgbW9qb21J
ZCA9ICdtb2pvL3B1YmxpYy9pbnRlcmZhY2VzL2JpbmRpbmdzL3BpcGVfY29udHJvbF9tZXNzYWdl
cy5tb2pvbSc7Ci0gIGlmIChtb2pvLmludGVybmFsLmlzTW9qb21Mb2FkZWQobW9qb21JZCkpIHsK
LSAgICBjb25zb2xlLndhcm4oJ1RoZSBmb2xsb3dpbmcgbW9qb20gaXMgbG9hZGVkIG11bHRpcGxl
IHRpbWVzOiAnICsgbW9qb21JZCk7Ci0gICAgcmV0dXJuOwotICB9Ci0gIG1vam8uaW50ZXJuYWwu
bWFya01vam9tTG9hZGVkKG1vam9tSWQpOwotICB2YXIgYmluZGluZ3MgPSBtb2pvOwotICB2YXIg
YXNzb2NpYXRlZEJpbmRpbmdzID0gbW9qbzsKLSAgdmFyIGNvZGVjID0gbW9qby5pbnRlcm5hbDsK
LSAgdmFyIHZhbGlkYXRvciA9IG1vam8uaW50ZXJuYWw7Ci0KLSAgdmFyIGV4cG9ydHMgPSBtb2pv
LmludGVybmFsLmV4cG9zZU5hbWVzcGFjZSgnbW9qby5waXBlQ29udHJvbCcpOwotCi0KLSAgdmFy
IGtSdW5PckNsb3NlUGlwZU1lc3NhZ2VJZCA9IDB4RkZGRkZGRkU7Ci0KLSAgZnVuY3Rpb24gUnVu
T3JDbG9zZVBpcGVNZXNzYWdlUGFyYW1zKHZhbHVlcykgewotICAgIHRoaXMuaW5pdERlZmF1bHRz
XygpOwotICAgIHRoaXMuaW5pdEZpZWxkc18odmFsdWVzKTsKLSAgfQotCi0KLSAgUnVuT3JDbG9z
ZVBpcGVNZXNzYWdlUGFyYW1zLnByb3RvdHlwZS5pbml0RGVmYXVsdHNfID0gZnVuY3Rpb24oKSB7
Ci0gICAgdGhpcy5pbnB1dCA9IG51bGw7Ci0gIH07Ci0gIFJ1bk9yQ2xvc2VQaXBlTWVzc2FnZVBh
cmFtcy5wcm90b3R5cGUuaW5pdEZpZWxkc18gPSBmdW5jdGlvbihmaWVsZHMpIHsKLSAgICBmb3Io
dmFyIGZpZWxkIGluIGZpZWxkcykgewotICAgICAgICBpZiAodGhpcy5oYXNPd25Qcm9wZXJ0eShm
aWVsZCkpCi0gICAgICAgICAgdGhpc1tmaWVsZF0gPSBmaWVsZHNbZmllbGRdOwotICAgIH0KLSAg
fTsKLQotICBSdW5PckNsb3NlUGlwZU1lc3NhZ2VQYXJhbXMudmFsaWRhdGUgPSBmdW5jdGlvbiht
ZXNzYWdlVmFsaWRhdG9yLCBvZmZzZXQpIHsKLSAgICB2YXIgZXJyOwotICAgIGVyciA9IG1lc3Nh
Z2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RIZWFkZXIob2Zmc2V0LCBjb2RlYy5rU3RydWN0SGVh
ZGVyU2l6ZSk7Ci0gICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05F
KQotICAgICAgICByZXR1cm4gZXJyOwotCi0gICAgdmFyIGtWZXJzaW9uU2l6ZXMgPSBbCi0gICAg
ICB7dmVyc2lvbjogMCwgbnVtQnl0ZXM6IDI0fQotICAgIF07Ci0gICAgZXJyID0gbWVzc2FnZVZh
bGlkYXRvci52YWxpZGF0ZVN0cnVjdFZlcnNpb24ob2Zmc2V0LCBrVmVyc2lvblNpemVzKTsKLSAg
ICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCi0gICAgICAgIHJl
dHVybiBlcnI7Ci0KLQotICAgIC8vIHZhbGlkYXRlIFJ1bk9yQ2xvc2VQaXBlTWVzc2FnZVBhcmFt
cy5pbnB1dAotICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVVbmlvbihvZmZzZXQg
KyBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDAsIFJ1bk9yQ2xvc2VQaXBlSW5wdXQsIGZhbHNl
KTsKLSAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCi0gICAg
ICAgIHJldHVybiBlcnI7Ci0KLSAgICByZXR1cm4gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5O
T05FOwotICB9OwotCi0gIFJ1bk9yQ2xvc2VQaXBlTWVzc2FnZVBhcmFtcy5lbmNvZGVkU2l6ZSA9
IGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgMTY7Ci0KLSAgUnVuT3JDbG9zZVBpcGVNZXNzYWdl
UGFyYW1zLmRlY29kZSA9IGZ1bmN0aW9uKGRlY29kZXIpIHsKLSAgICB2YXIgcGFja2VkOwotICAg
IHZhciB2YWwgPSBuZXcgUnVuT3JDbG9zZVBpcGVNZXNzYWdlUGFyYW1zKCk7Ci0gICAgdmFyIG51
bWJlck9mQnl0ZXMgPSBkZWNvZGVyLnJlYWRVaW50MzIoKTsKLSAgICB2YXIgdmVyc2lvbiA9IGRl
Y29kZXIucmVhZFVpbnQzMigpOwotICAgIHZhbC5pbnB1dCA9IGRlY29kZXIuZGVjb2RlU3RydWN0
KFJ1bk9yQ2xvc2VQaXBlSW5wdXQpOwotICAgIHJldHVybiB2YWw7Ci0gIH07Ci0KLSAgUnVuT3JD
bG9zZVBpcGVNZXNzYWdlUGFyYW1zLmVuY29kZSA9IGZ1bmN0aW9uKGVuY29kZXIsIHZhbCkgewot
ICAgIHZhciBwYWNrZWQ7Ci0gICAgZW5jb2Rlci53cml0ZVVpbnQzMihSdW5PckNsb3NlUGlwZU1l
c3NhZ2VQYXJhbXMuZW5jb2RlZFNpemUpOwotICAgIGVuY29kZXIud3JpdGVVaW50MzIoMCk7Ci0g
ICAgZW5jb2Rlci5lbmNvZGVTdHJ1Y3QoUnVuT3JDbG9zZVBpcGVJbnB1dCwgdmFsLmlucHV0KTsK
LSAgfTsKLSAgZnVuY3Rpb24gRGlzY29ubmVjdFJlYXNvbih2YWx1ZXMpIHsKLSAgICB0aGlzLmlu
aXREZWZhdWx0c18oKTsKLSAgICB0aGlzLmluaXRGaWVsZHNfKHZhbHVlcyk7Ci0gIH0KLQotCi0g
IERpc2Nvbm5lY3RSZWFzb24ucHJvdG90eXBlLmluaXREZWZhdWx0c18gPSBmdW5jdGlvbigpIHsK
LSAgICB0aGlzLmN1c3RvbVJlYXNvbiA9IDA7Ci0gICAgdGhpcy5kZXNjcmlwdGlvbiA9IG51bGw7
Ci0gIH07Ci0gIERpc2Nvbm5lY3RSZWFzb24ucHJvdG90eXBlLmluaXRGaWVsZHNfID0gZnVuY3Rp
b24oZmllbGRzKSB7Ci0gICAgZm9yKHZhciBmaWVsZCBpbiBmaWVsZHMpIHsKLSAgICAgICAgaWYg
KHRoaXMuaGFzT3duUHJvcGVydHkoZmllbGQpKQotICAgICAgICAgIHRoaXNbZmllbGRdID0gZmll
bGRzW2ZpZWxkXTsKLSAgICB9Ci0gIH07Ci0KLSAgRGlzY29ubmVjdFJlYXNvbi52YWxpZGF0ZSA9
IGZ1bmN0aW9uKG1lc3NhZ2VWYWxpZGF0b3IsIG9mZnNldCkgewotICAgIHZhciBlcnI7Ci0gICAg
ZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdEhlYWRlcihvZmZzZXQsIGNvZGVj
LmtTdHJ1Y3RIZWFkZXJTaXplKTsKLSAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlv
bkVycm9yLk5PTkUpCi0gICAgICAgIHJldHVybiBlcnI7Ci0KLSAgICB2YXIga1ZlcnNpb25TaXpl
cyA9IFsKLSAgICAgIHt2ZXJzaW9uOiAwLCBudW1CeXRlczogMjR9Ci0gICAgXTsKLSAgICBlcnIg
PSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0VmVyc2lvbihvZmZzZXQsIGtWZXJzaW9u
U2l6ZXMpOwotICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkK
LSAgICAgICAgcmV0dXJuIGVycjsKLQotCi0KLSAgICAvLyB2YWxpZGF0ZSBEaXNjb25uZWN0UmVh
c29uLmRlc2NyaXB0aW9uCi0gICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cmlu
Z1BvaW50ZXIob2Zmc2V0ICsgY29kZWMua1N0cnVjdEhlYWRlclNpemUgKyA4LCBmYWxzZSkKLSAg
ICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCi0gICAgICAgIHJl
dHVybiBlcnI7Ci0KLSAgICByZXR1cm4gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FOwot
ICB9OwotCi0gIERpc2Nvbm5lY3RSZWFzb24uZW5jb2RlZFNpemUgPSBjb2RlYy5rU3RydWN0SGVh
ZGVyU2l6ZSArIDE2OwotCi0gIERpc2Nvbm5lY3RSZWFzb24uZGVjb2RlID0gZnVuY3Rpb24oZGVj
b2RlcikgewotICAgIHZhciBwYWNrZWQ7Ci0gICAgdmFyIHZhbCA9IG5ldyBEaXNjb25uZWN0UmVh
c29uKCk7Ci0gICAgdmFyIG51bWJlck9mQnl0ZXMgPSBkZWNvZGVyLnJlYWRVaW50MzIoKTsKLSAg
ICB2YXIgdmVyc2lvbiA9IGRlY29kZXIucmVhZFVpbnQzMigpOwotICAgIHZhbC5jdXN0b21SZWFz
b24gPSBkZWNvZGVyLmRlY29kZVN0cnVjdChjb2RlYy5VaW50MzIpOwotICAgIGRlY29kZXIuc2tp
cCgxKTsKLSAgICBkZWNvZGVyLnNraXAoMSk7Ci0gICAgZGVjb2Rlci5za2lwKDEpOwotICAgIGRl
Y29kZXIuc2tpcCgxKTsKLSAgICB2YWwuZGVzY3JpcHRpb24gPSBkZWNvZGVyLmRlY29kZVN0cnVj
dChjb2RlYy5TdHJpbmcpOwotICAgIHJldHVybiB2YWw7Ci0gIH07Ci0KLSAgRGlzY29ubmVjdFJl
YXNvbi5lbmNvZGUgPSBmdW5jdGlvbihlbmNvZGVyLCB2YWwpIHsKLSAgICB2YXIgcGFja2VkOwot
ICAgIGVuY29kZXIud3JpdGVVaW50MzIoRGlzY29ubmVjdFJlYXNvbi5lbmNvZGVkU2l6ZSk7Ci0g
ICAgZW5jb2Rlci53cml0ZVVpbnQzMigwKTsKLSAgICBlbmNvZGVyLmVuY29kZVN0cnVjdChjb2Rl
Yy5VaW50MzIsIHZhbC5jdXN0b21SZWFzb24pOwotICAgIGVuY29kZXIuc2tpcCgxKTsKLSAgICBl
bmNvZGVyLnNraXAoMSk7Ci0gICAgZW5jb2Rlci5za2lwKDEpOwotICAgIGVuY29kZXIuc2tpcCgx
KTsKLSAgICBlbmNvZGVyLmVuY29kZVN0cnVjdChjb2RlYy5TdHJpbmcsIHZhbC5kZXNjcmlwdGlv
bik7Ci0gIH07Ci0gIGZ1bmN0aW9uIFBlZXJBc3NvY2lhdGVkRW5kcG9pbnRDbG9zZWRFdmVudCh2
YWx1ZXMpIHsKLSAgICB0aGlzLmluaXREZWZhdWx0c18oKTsKLSAgICB0aGlzLmluaXRGaWVsZHNf
KHZhbHVlcyk7Ci0gIH0KLQotCi0gIFBlZXJBc3NvY2lhdGVkRW5kcG9pbnRDbG9zZWRFdmVudC5w
cm90b3R5cGUuaW5pdERlZmF1bHRzXyA9IGZ1bmN0aW9uKCkgewotICAgIHRoaXMuaWQgPSAwOwot
ICAgIHRoaXMuZGlzY29ubmVjdFJlYXNvbiA9IG51bGw7Ci0gIH07Ci0gIFBlZXJBc3NvY2lhdGVk
RW5kcG9pbnRDbG9zZWRFdmVudC5wcm90b3R5cGUuaW5pdEZpZWxkc18gPSBmdW5jdGlvbihmaWVs
ZHMpIHsKLSAgICBmb3IodmFyIGZpZWxkIGluIGZpZWxkcykgewotICAgICAgICBpZiAodGhpcy5o
YXNPd25Qcm9wZXJ0eShmaWVsZCkpCi0gICAgICAgICAgdGhpc1tmaWVsZF0gPSBmaWVsZHNbZmll
bGRdOwotICAgIH0KLSAgfTsKLQotICBQZWVyQXNzb2NpYXRlZEVuZHBvaW50Q2xvc2VkRXZlbnQu
dmFsaWRhdGUgPSBmdW5jdGlvbihtZXNzYWdlVmFsaWRhdG9yLCBvZmZzZXQpIHsKLSAgICB2YXIg
ZXJyOwotICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RIZWFkZXIob2Zm
c2V0LCBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSk7Ci0gICAgaWYgKGVyciAhPT0gdmFsaWRhdG9y
LnZhbGlkYXRpb25FcnJvci5OT05FKQotICAgICAgICByZXR1cm4gZXJyOwotCi0gICAgdmFyIGtW
ZXJzaW9uU2l6ZXMgPSBbCi0gICAgICB7dmVyc2lvbjogMCwgbnVtQnl0ZXM6IDI0fQotICAgIF07
Ci0gICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdFZlcnNpb24ob2Zmc2V0
LCBrVmVyc2lvblNpemVzKTsKLSAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVy
cm9yLk5PTkUpCi0gICAgICAgIHJldHVybiBlcnI7Ci0KLQotCi0gICAgLy8gdmFsaWRhdGUgUGVl
ckFzc29jaWF0ZWRFbmRwb2ludENsb3NlZEV2ZW50LmRpc2Nvbm5lY3RSZWFzb24KLSAgICBlcnIg
PSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0UG9pbnRlcihvZmZzZXQgKyBjb2RlYy5r
U3RydWN0SGVhZGVyU2l6ZSArIDgsIERpc2Nvbm5lY3RSZWFzb24sIHRydWUpOwotICAgIGlmIChl
cnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKLSAgICAgICAgcmV0dXJuIGVy
cjsKLQotICAgIHJldHVybiB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkU7Ci0gIH07Ci0K
LSAgUGVlckFzc29jaWF0ZWRFbmRwb2ludENsb3NlZEV2ZW50LmVuY29kZWRTaXplID0gY29kZWMu
a1N0cnVjdEhlYWRlclNpemUgKyAxNjsKLQotICBQZWVyQXNzb2NpYXRlZEVuZHBvaW50Q2xvc2Vk
RXZlbnQuZGVjb2RlID0gZnVuY3Rpb24oZGVjb2RlcikgewotICAgIHZhciBwYWNrZWQ7Ci0gICAg
dmFyIHZhbCA9IG5ldyBQZWVyQXNzb2NpYXRlZEVuZHBvaW50Q2xvc2VkRXZlbnQoKTsKLSAgICB2
YXIgbnVtYmVyT2ZCeXRlcyA9IGRlY29kZXIucmVhZFVpbnQzMigpOwotICAgIHZhciB2ZXJzaW9u
ID0gZGVjb2Rlci5yZWFkVWludDMyKCk7Ci0gICAgdmFsLmlkID0gZGVjb2Rlci5kZWNvZGVTdHJ1
Y3QoY29kZWMuVWludDMyKTsKLSAgICBkZWNvZGVyLnNraXAoMSk7Ci0gICAgZGVjb2Rlci5za2lw
KDEpOwotICAgIGRlY29kZXIuc2tpcCgxKTsKLSAgICBkZWNvZGVyLnNraXAoMSk7Ci0gICAgdmFs
LmRpc2Nvbm5lY3RSZWFzb24gPSBkZWNvZGVyLmRlY29kZVN0cnVjdFBvaW50ZXIoRGlzY29ubmVj
dFJlYXNvbik7Ci0gICAgcmV0dXJuIHZhbDsKLSAgfTsKLQotICBQZWVyQXNzb2NpYXRlZEVuZHBv
aW50Q2xvc2VkRXZlbnQuZW5jb2RlID0gZnVuY3Rpb24oZW5jb2RlciwgdmFsKSB7Ci0gICAgdmFy
IHBhY2tlZDsKLSAgICBlbmNvZGVyLndyaXRlVWludDMyKFBlZXJBc3NvY2lhdGVkRW5kcG9pbnRD
bG9zZWRFdmVudC5lbmNvZGVkU2l6ZSk7Ci0gICAgZW5jb2Rlci53cml0ZVVpbnQzMigwKTsKLSAg
ICBlbmNvZGVyLmVuY29kZVN0cnVjdChjb2RlYy5VaW50MzIsIHZhbC5pZCk7Ci0gICAgZW5jb2Rl
ci5za2lwKDEpOwotICAgIGVuY29kZXIuc2tpcCgxKTsKLSAgICBlbmNvZGVyLnNraXAoMSk7Ci0g
ICAgZW5jb2Rlci5za2lwKDEpOwotICAgIGVuY29kZXIuZW5jb2RlU3RydWN0UG9pbnRlcihEaXNj
b25uZWN0UmVhc29uLCB2YWwuZGlzY29ubmVjdFJlYXNvbik7Ci0gIH07Ci0KLSAgZnVuY3Rpb24g
UnVuT3JDbG9zZVBpcGVJbnB1dCh2YWx1ZSkgewotICAgIHRoaXMuaW5pdERlZmF1bHRfKCk7Ci0g
ICAgdGhpcy5pbml0VmFsdWVfKHZhbHVlKTsKLSAgfQotCi0KLSAgUnVuT3JDbG9zZVBpcGVJbnB1
dC5UYWdzID0gewotICAgIHBlZXJBc3NvY2lhdGVkRW5kcG9pbnRDbG9zZWRFdmVudDogMCwKLSAg
fTsKLQotICBSdW5PckNsb3NlUGlwZUlucHV0LnByb3RvdHlwZS5pbml0RGVmYXVsdF8gPSBmdW5j
dGlvbigpIHsKLSAgICB0aGlzLiRkYXRhID0gbnVsbDsKLSAgICB0aGlzLiR0YWcgPSB1bmRlZmlu
ZWQ7Ci0gIH0KLQotICBSdW5PckNsb3NlUGlwZUlucHV0LnByb3RvdHlwZS5pbml0VmFsdWVfID0g
ZnVuY3Rpb24odmFsdWUpIHsKLSAgICBpZiAodmFsdWUgPT0gdW5kZWZpbmVkKSB7Ci0gICAgICBy
ZXR1cm47Ci0gICAgfQotCi0gICAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyh2YWx1ZSk7Ci0gICAg
aWYgKGtleXMubGVuZ3RoID09IDApIHsKLSAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAo
a2V5cy5sZW5ndGggPiAxKSB7Ci0gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCJZb3UgbWF5IHNl
dCBvbmx5IG9uZSBtZW1iZXIgb24gYSB1bmlvbi4iKTsKLSAgICB9Ci0KLSAgICB2YXIgZmllbGRz
ID0gWwotICAgICAgICAicGVlckFzc29jaWF0ZWRFbmRwb2ludENsb3NlZEV2ZW50IiwKLSAgICBd
OwotCi0gICAgaWYgKGZpZWxkcy5pbmRleE9mKGtleXNbMF0pIDwgMCkgewotICAgICAgdGhyb3cg
bmV3IFJlZmVyZW5jZUVycm9yKGtleXNbMF0gKyAiIGlzIG5vdCBhIFJ1bk9yQ2xvc2VQaXBlSW5w
dXQgbWVtYmVyLiIpOwotCi0gICAgfQotCi0gICAgdGhpc1trZXlzWzBdXSA9IHZhbHVlW2tleXNb
MF1dOwotICB9Ci0gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShSdW5PckNsb3NlUGlwZUlucHV0LnBy
b3RvdHlwZSwgInBlZXJBc3NvY2lhdGVkRW5kcG9pbnRDbG9zZWRFdmVudCIsIHsKLSAgICBnZXQ6
IGZ1bmN0aW9uKCkgewotICAgICAgaWYgKHRoaXMuJHRhZyAhPSBSdW5PckNsb3NlUGlwZUlucHV0
LlRhZ3MucGVlckFzc29jaWF0ZWRFbmRwb2ludENsb3NlZEV2ZW50KSB7Ci0gICAgICAgIHRocm93
IG5ldyBSZWZlcmVuY2VFcnJvcigKLSAgICAgICAgICAgICJSdW5PckNsb3NlUGlwZUlucHV0LnBl
ZXJBc3NvY2lhdGVkRW5kcG9pbnRDbG9zZWRFdmVudCBpcyBub3QgY3VycmVudGx5IHNldC4iKTsK
LSAgICAgIH0KLSAgICAgIHJldHVybiB0aGlzLiRkYXRhOwotICAgIH0sCi0KLSAgICBzZXQ6IGZ1
bmN0aW9uKHZhbHVlKSB7Ci0gICAgICB0aGlzLiR0YWcgPSBSdW5PckNsb3NlUGlwZUlucHV0LlRh
Z3MucGVlckFzc29jaWF0ZWRFbmRwb2ludENsb3NlZEV2ZW50OwotICAgICAgdGhpcy4kZGF0YSA9
IHZhbHVlOwotICAgIH0KLSAgfSk7Ci0KLQotICAgIFJ1bk9yQ2xvc2VQaXBlSW5wdXQuZW5jb2Rl
ID0gZnVuY3Rpb24oZW5jb2RlciwgdmFsKSB7Ci0gICAgICBpZiAodmFsID09IG51bGwpIHsKLSAg
ICAgICAgZW5jb2Rlci53cml0ZVVpbnQ2NCgwKTsKLSAgICAgICAgZW5jb2Rlci53cml0ZVVpbnQ2
NCgwKTsKLSAgICAgICAgcmV0dXJuOwotICAgICAgfQotICAgICAgaWYgKHZhbC4kdGFnID09IHVu
ZGVmaW5lZCkgewotICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgZW5jb2RlIHVu
aW9ucyB3aXRoIGFuIHVua25vd24gbWVtYmVyIHNldC4iKTsKLSAgICAgIH0KLQotICAgICAgZW5j
b2Rlci53cml0ZVVpbnQzMigxNik7Ci0gICAgICBlbmNvZGVyLndyaXRlVWludDMyKHZhbC4kdGFn
KTsKLSAgICAgIHN3aXRjaCAodmFsLiR0YWcpIHsKLSAgICAgICAgY2FzZSBSdW5PckNsb3NlUGlw
ZUlucHV0LlRhZ3MucGVlckFzc29jaWF0ZWRFbmRwb2ludENsb3NlZEV2ZW50OgotICAgICAgICAg
IGVuY29kZXIuZW5jb2RlU3RydWN0UG9pbnRlcihQZWVyQXNzb2NpYXRlZEVuZHBvaW50Q2xvc2Vk
RXZlbnQsIHZhbC5wZWVyQXNzb2NpYXRlZEVuZHBvaW50Q2xvc2VkRXZlbnQpOwotICAgICAgICAg
IGJyZWFrOwotICAgICAgfQotICAgICAgZW5jb2Rlci5hbGlnbigpOwotICAgIH07Ci0KLQotICAg
IFJ1bk9yQ2xvc2VQaXBlSW5wdXQuZGVjb2RlID0gZnVuY3Rpb24oZGVjb2RlcikgewotICAgICAg
dmFyIHNpemUgPSBkZWNvZGVyLnJlYWRVaW50MzIoKTsKLSAgICAgIGlmIChzaXplID09IDApIHsK
LSAgICAgICAgZGVjb2Rlci5yZWFkVWludDMyKCk7Ci0gICAgICAgIGRlY29kZXIucmVhZFVpbnQ2
NCgpOwotICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgIH0KLQotICAgICAgdmFyIHJlc3VsdCA9
IG5ldyBSdW5PckNsb3NlUGlwZUlucHV0KCk7Ci0gICAgICB2YXIgdGFnID0gZGVjb2Rlci5yZWFk
VWludDMyKCk7Ci0gICAgICBzd2l0Y2ggKHRhZykgewotICAgICAgICBjYXNlIFJ1bk9yQ2xvc2VQ
aXBlSW5wdXQuVGFncy5wZWVyQXNzb2NpYXRlZEVuZHBvaW50Q2xvc2VkRXZlbnQ6Ci0gICAgICAg
ICAgcmVzdWx0LnBlZXJBc3NvY2lhdGVkRW5kcG9pbnRDbG9zZWRFdmVudCA9IGRlY29kZXIuZGVj
b2RlU3RydWN0UG9pbnRlcihQZWVyQXNzb2NpYXRlZEVuZHBvaW50Q2xvc2VkRXZlbnQpOwotICAg
ICAgICAgIGJyZWFrOwotICAgICAgfQotICAgICAgZGVjb2Rlci5hbGlnbigpOwotCi0gICAgICBy
ZXR1cm4gcmVzdWx0OwotICAgIH07Ci0KLQotICAgIFJ1bk9yQ2xvc2VQaXBlSW5wdXQudmFsaWRh
dGUgPSBmdW5jdGlvbihtZXNzYWdlVmFsaWRhdG9yLCBvZmZzZXQpIHsKLSAgICAgIHZhciBzaXpl
ID0gbWVzc2FnZVZhbGlkYXRvci5kZWNvZGVVbmlvblNpemUob2Zmc2V0KTsKLSAgICAgIGlmIChz
aXplICE9IDE2KSB7Ci0gICAgICAgIHJldHVybiB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLklO
VkFMSURfVU5JT05fU0laRTsKLSAgICAgIH0KLQotICAgICAgdmFyIHRhZyA9IG1lc3NhZ2VWYWxp
ZGF0b3IuZGVjb2RlVW5pb25UYWcob2Zmc2V0KTsKLSAgICAgIHZhciBkYXRhX29mZnNldCA9IG9m
ZnNldCArIDg7Ci0gICAgICB2YXIgZXJyOwotICAgICAgc3dpdGNoICh0YWcpIHsKLSAgICAgICAg
Y2FzZSBSdW5PckNsb3NlUGlwZUlucHV0LlRhZ3MucGVlckFzc29jaWF0ZWRFbmRwb2ludENsb3Nl
ZEV2ZW50OgotICAgICAgICAgIAotCi0gICAgLy8gdmFsaWRhdGUgUnVuT3JDbG9zZVBpcGVJbnB1
dC5wZWVyQXNzb2NpYXRlZEVuZHBvaW50Q2xvc2VkRXZlbnQKLSAgICBlcnIgPSBtZXNzYWdlVmFs
aWRhdG9yLnZhbGlkYXRlU3RydWN0UG9pbnRlcihkYXRhX29mZnNldCwgUGVlckFzc29jaWF0ZWRF
bmRwb2ludENsb3NlZEV2ZW50LCBmYWxzZSk7Ci0gICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZh
bGlkYXRpb25FcnJvci5OT05FKQotICAgICAgICByZXR1cm4gZXJyOwotICAgICAgICAgIGJyZWFr
OwotICAgICAgfQotCi0gICAgICByZXR1cm4gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05F
OwotICAgIH07Ci0KLSAgUnVuT3JDbG9zZVBpcGVJbnB1dC5lbmNvZGVkU2l6ZSA9IDE2OwotICBl
eHBvcnRzLmtSdW5PckNsb3NlUGlwZU1lc3NhZ2VJZCA9IGtSdW5PckNsb3NlUGlwZU1lc3NhZ2VJ
ZDsKLSAgZXhwb3J0cy5SdW5PckNsb3NlUGlwZU1lc3NhZ2VQYXJhbXMgPSBSdW5PckNsb3NlUGlw
ZU1lc3NhZ2VQYXJhbXM7Ci0gIGV4cG9ydHMuRGlzY29ubmVjdFJlYXNvbiA9IERpc2Nvbm5lY3RS
ZWFzb247Ci0gIGV4cG9ydHMuUGVlckFzc29jaWF0ZWRFbmRwb2ludENsb3NlZEV2ZW50ID0gUGVl
ckFzc29jaWF0ZWRFbmRwb2ludENsb3NlZEV2ZW50OwotICBleHBvcnRzLlJ1bk9yQ2xvc2VQaXBl
SW5wdXQgPSBSdW5PckNsb3NlUGlwZUlucHV0OwotfSkoKTsKZGlmZiAtLWdpdCBhL0xheW91dFRl
c3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL21v
am9fYmluZGluZ3MuanMuaGVhZGVycyBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxh
dGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL21vam9fYmluZGluZ3MuanMuaGVhZGVycwpk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjgwNWMzMjNkZjVhOTc1MjMxNjQ4YjgzMGUz
M2NlMTgzYzNjYmJkMy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAot
LS0gYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNl
cy9jaHJvbWl1bS9tb2pvX2JpbmRpbmdzLmpzLmhlYWRlcnMKKysrIC9kZXYvbnVsbApAQCAtMSAr
MCwwIEBACi1Db250ZW50LVR5cGU6IHRleHQvamF2YXNjcmlwdDsgY2hhcnNldD11dGYtOApkaWZm
IC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNv
dXJjZXMvY2hyb21pdW0vbW9qb193ZWJfdGVzdF9oZWxwZXJfdGVzdC5tb2pvbS5qcyBiL0xheW91
dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVt
L21vam9fd2ViX3Rlc3RfaGVscGVyX3Rlc3QubW9qb20uanMKZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IGNmYmFkMDg2ODk4Nzc4YjkyMGMyZDc1MDg5MGM4NzBlMDgyZGM2MGEuLjAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvTGF5b3V0VGVzdHMvaW1w
b3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vbW9qb193ZWJf
dGVzdF9oZWxwZXJfdGVzdC5tb2pvbS5qcworKysgL2Rldi9udWxsCkBAIC0xLDI2NCArMCwwIEBA
Ci0vLyBDb3B5cmlnaHQgMjAxNCBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0
eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0K
LSd1c2Ugc3RyaWN0JzsKLQotKGZ1bmN0aW9uKCkgewotICB2YXIgbW9qb21JZCA9ICdjb250ZW50
L3Rlc3QvZGF0YS9tb2pvX3dlYl90ZXN0X2hlbHBlcl90ZXN0Lm1vam9tJzsKLSAgaWYgKG1vam8u
aW50ZXJuYWwuaXNNb2pvbUxvYWRlZChtb2pvbUlkKSkgewotICAgIGNvbnNvbGUud2FybignVGhl
IGZvbGxvd2luZyBtb2pvbSBpcyBsb2FkZWQgbXVsdGlwbGUgdGltZXM6ICcgKyBtb2pvbUlkKTsK
LSAgICByZXR1cm47Ci0gIH0KLSAgbW9qby5pbnRlcm5hbC5tYXJrTW9qb21Mb2FkZWQobW9qb21J
ZCk7Ci0KLSAgLy8gVE9ETyh5enNoZW4pOiBEZWZpbmUgdGhlc2UgYWxpYXNlcyB0byBtaW5pbWl6
ZSB0aGUgZGlmZmVyZW5jZXMgYmV0d2VlbiB0aGUKLSAgLy8gb2xkL25ldyBtb2Rlcy4gUmVtb3Zl
IHRoZW0gd2hlbiB0aGUgb2xkIG1vZGUgZ29lcyBhd2F5LgotICB2YXIgYmluZGluZ3MgPSBtb2pv
OwotICB2YXIgYXNzb2NpYXRlZEJpbmRpbmdzID0gbW9qbzsKLSAgdmFyIGNvZGVjID0gbW9qby5p
bnRlcm5hbDsKLSAgdmFyIHZhbGlkYXRvciA9IG1vam8uaW50ZXJuYWw7Ci0KLSAgdmFyIGV4cG9y
dHMgPSBtb2pvLmludGVybmFsLmV4cG9zZU5hbWVzcGFjZSgnY29udGVudC5tb2pvbScpOwotCi0K
LQotICBmdW5jdGlvbiBNb2pvV2ViVGVzdEhlbHBlcl9SZXZlcnNlX1BhcmFtcyh2YWx1ZXMpIHsK
LSAgICB0aGlzLmluaXREZWZhdWx0c18oKTsKLSAgICB0aGlzLmluaXRGaWVsZHNfKHZhbHVlcyk7
Ci0gIH0KLQotCi0gIE1vam9XZWJUZXN0SGVscGVyX1JldmVyc2VfUGFyYW1zLnByb3RvdHlwZS5p
bml0RGVmYXVsdHNfID0gZnVuY3Rpb24oKSB7Ci0gICAgdGhpcy5tZXNzYWdlID0gbnVsbDsKLSAg
fTsKLSAgTW9qb1dlYlRlc3RIZWxwZXJfUmV2ZXJzZV9QYXJhbXMucHJvdG90eXBlLmluaXRGaWVs
ZHNfID0gZnVuY3Rpb24oZmllbGRzKSB7Ci0gICAgZm9yKHZhciBmaWVsZCBpbiBmaWVsZHMpIHsK
LSAgICAgICAgaWYgKHRoaXMuaGFzT3duUHJvcGVydHkoZmllbGQpKQotICAgICAgICAgIHRoaXNb
ZmllbGRdID0gZmllbGRzW2ZpZWxkXTsKLSAgICB9Ci0gIH07Ci0KLSAgTW9qb1dlYlRlc3RIZWxw
ZXJfUmV2ZXJzZV9QYXJhbXMudmFsaWRhdGUgPSBmdW5jdGlvbihtZXNzYWdlVmFsaWRhdG9yLCBv
ZmZzZXQpIHsKLSAgICB2YXIgZXJyOwotICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRh
dGVTdHJ1Y3RIZWFkZXIob2Zmc2V0LCBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSk7Ci0gICAgaWYg
KGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQotICAgICAgICByZXR1cm4g
ZXJyOwotCi0gICAgdmFyIGtWZXJzaW9uU2l6ZXMgPSBbCi0gICAgICB7dmVyc2lvbjogMCwgbnVt
Qnl0ZXM6IDE2fQotICAgIF07Ci0gICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0
cnVjdFZlcnNpb24ob2Zmc2V0LCBrVmVyc2lvblNpemVzKTsKLSAgICBpZiAoZXJyICE9PSB2YWxp
ZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCi0gICAgICAgIHJldHVybiBlcnI7Ci0KLQotICAg
IC8vIHZhbGlkYXRlIE1vam9XZWJUZXN0SGVscGVyX1JldmVyc2VfUGFyYW1zLm1lc3NhZ2UKLSAg
ICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RyaW5nUG9pbnRlcihvZmZzZXQgKyBj
b2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDAsIGZhbHNlKQotICAgIGlmIChlcnIgIT09IHZhbGlk
YXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKLSAgICAgICAgcmV0dXJuIGVycjsKLQotICAgIHJl
dHVybiB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkU7Ci0gIH07Ci0KLSAgTW9qb1dlYlRl
c3RIZWxwZXJfUmV2ZXJzZV9QYXJhbXMuZW5jb2RlZFNpemUgPSBjb2RlYy5rU3RydWN0SGVhZGVy
U2l6ZSArIDg7Ci0KLSAgTW9qb1dlYlRlc3RIZWxwZXJfUmV2ZXJzZV9QYXJhbXMuZGVjb2RlID0g
ZnVuY3Rpb24oZGVjb2RlcikgewotICAgIHZhciBwYWNrZWQ7Ci0gICAgdmFyIHZhbCA9IG5ldyBN
b2pvV2ViVGVzdEhlbHBlcl9SZXZlcnNlX1BhcmFtcygpOwotICAgIHZhciBudW1iZXJPZkJ5dGVz
ID0gZGVjb2Rlci5yZWFkVWludDMyKCk7Ci0gICAgdmFyIHZlcnNpb24gPSBkZWNvZGVyLnJlYWRV
aW50MzIoKTsKLSAgICB2YWwubWVzc2FnZSA9IGRlY29kZXIuZGVjb2RlU3RydWN0KGNvZGVjLlN0
cmluZyk7Ci0gICAgcmV0dXJuIHZhbDsKLSAgfTsKLQotICBNb2pvV2ViVGVzdEhlbHBlcl9SZXZl
cnNlX1BhcmFtcy5lbmNvZGUgPSBmdW5jdGlvbihlbmNvZGVyLCB2YWwpIHsKLSAgICB2YXIgcGFj
a2VkOwotICAgIGVuY29kZXIud3JpdGVVaW50MzIoTW9qb1dlYlRlc3RIZWxwZXJfUmV2ZXJzZV9Q
YXJhbXMuZW5jb2RlZFNpemUpOwotICAgIGVuY29kZXIud3JpdGVVaW50MzIoMCk7Ci0gICAgZW5j
b2Rlci5lbmNvZGVTdHJ1Y3QoY29kZWMuU3RyaW5nLCB2YWwubWVzc2FnZSk7Ci0gIH07Ci0gIGZ1
bmN0aW9uIE1vam9XZWJUZXN0SGVscGVyX1JldmVyc2VfUmVzcG9uc2VQYXJhbXModmFsdWVzKSB7
Ci0gICAgdGhpcy5pbml0RGVmYXVsdHNfKCk7Ci0gICAgdGhpcy5pbml0RmllbGRzXyh2YWx1ZXMp
OwotICB9Ci0KLQotICBNb2pvV2ViVGVzdEhlbHBlcl9SZXZlcnNlX1Jlc3BvbnNlUGFyYW1zLnBy
b3RvdHlwZS5pbml0RGVmYXVsdHNfID0gZnVuY3Rpb24oKSB7Ci0gICAgdGhpcy5yZXZlcnNlZCA9
IG51bGw7Ci0gIH07Ci0gIE1vam9XZWJUZXN0SGVscGVyX1JldmVyc2VfUmVzcG9uc2VQYXJhbXMu
cHJvdG90eXBlLmluaXRGaWVsZHNfID0gZnVuY3Rpb24oZmllbGRzKSB7Ci0gICAgZm9yKHZhciBm
aWVsZCBpbiBmaWVsZHMpIHsKLSAgICAgICAgaWYgKHRoaXMuaGFzT3duUHJvcGVydHkoZmllbGQp
KQotICAgICAgICAgIHRoaXNbZmllbGRdID0gZmllbGRzW2ZpZWxkXTsKLSAgICB9Ci0gIH07Ci0K
LSAgTW9qb1dlYlRlc3RIZWxwZXJfUmV2ZXJzZV9SZXNwb25zZVBhcmFtcy52YWxpZGF0ZSA9IGZ1
bmN0aW9uKG1lc3NhZ2VWYWxpZGF0b3IsIG9mZnNldCkgewotICAgIHZhciBlcnI7Ci0gICAgZXJy
ID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdEhlYWRlcihvZmZzZXQsIGNvZGVjLmtT
dHJ1Y3RIZWFkZXJTaXplKTsKLSAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVy
cm9yLk5PTkUpCi0gICAgICAgIHJldHVybiBlcnI7Ci0KLSAgICB2YXIga1ZlcnNpb25TaXplcyA9
IFsKLSAgICAgIHt2ZXJzaW9uOiAwLCBudW1CeXRlczogMTZ9Ci0gICAgXTsKLSAgICBlcnIgPSBt
ZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0VmVyc2lvbihvZmZzZXQsIGtWZXJzaW9uU2l6
ZXMpOwotICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKLSAg
ICAgICAgcmV0dXJuIGVycjsKLQotCi0gICAgLy8gdmFsaWRhdGUgTW9qb1dlYlRlc3RIZWxwZXJf
UmV2ZXJzZV9SZXNwb25zZVBhcmFtcy5yZXZlcnNlZAotICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0
b3IudmFsaWRhdGVTdHJpbmdQb2ludGVyKG9mZnNldCArIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXpl
ICsgMCwgZmFsc2UpCi0gICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5O
T05FKQotICAgICAgICByZXR1cm4gZXJyOwotCi0gICAgcmV0dXJuIHZhbGlkYXRvci52YWxpZGF0
aW9uRXJyb3IuTk9ORTsKLSAgfTsKLQotICBNb2pvV2ViVGVzdEhlbHBlcl9SZXZlcnNlX1Jlc3Bv
bnNlUGFyYW1zLmVuY29kZWRTaXplID0gY29kZWMua1N0cnVjdEhlYWRlclNpemUgKyA4OwotCi0g
IE1vam9XZWJUZXN0SGVscGVyX1JldmVyc2VfUmVzcG9uc2VQYXJhbXMuZGVjb2RlID0gZnVuY3Rp
b24oZGVjb2RlcikgewotICAgIHZhciBwYWNrZWQ7Ci0gICAgdmFyIHZhbCA9IG5ldyBNb2pvV2Vi
VGVzdEhlbHBlcl9SZXZlcnNlX1Jlc3BvbnNlUGFyYW1zKCk7Ci0gICAgdmFyIG51bWJlck9mQnl0
ZXMgPSBkZWNvZGVyLnJlYWRVaW50MzIoKTsKLSAgICB2YXIgdmVyc2lvbiA9IGRlY29kZXIucmVh
ZFVpbnQzMigpOwotICAgIHZhbC5yZXZlcnNlZCA9IGRlY29kZXIuZGVjb2RlU3RydWN0KGNvZGVj
LlN0cmluZyk7Ci0gICAgcmV0dXJuIHZhbDsKLSAgfTsKLQotICBNb2pvV2ViVGVzdEhlbHBlcl9S
ZXZlcnNlX1Jlc3BvbnNlUGFyYW1zLmVuY29kZSA9IGZ1bmN0aW9uKGVuY29kZXIsIHZhbCkgewot
ICAgIHZhciBwYWNrZWQ7Ci0gICAgZW5jb2Rlci53cml0ZVVpbnQzMihNb2pvV2ViVGVzdEhlbHBl
cl9SZXZlcnNlX1Jlc3BvbnNlUGFyYW1zLmVuY29kZWRTaXplKTsKLSAgICBlbmNvZGVyLndyaXRl
VWludDMyKDApOwotICAgIGVuY29kZXIuZW5jb2RlU3RydWN0KGNvZGVjLlN0cmluZywgdmFsLnJl
dmVyc2VkKTsKLSAgfTsKLSAgdmFyIGtNb2pvV2ViVGVzdEhlbHBlcl9SZXZlcnNlX05hbWUgPSAw
OwotCi0gIGZ1bmN0aW9uIE1vam9XZWJUZXN0SGVscGVyUHRyKGhhbmRsZU9yUHRySW5mbykgewot
ICAgIHRoaXMucHRyID0gbmV3IGJpbmRpbmdzLkludGVyZmFjZVB0ckNvbnRyb2xsZXIoTW9qb1dl
YlRlc3RIZWxwZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBoYW5kbGVPclB0ckluZm8pOwotICB9Ci0KLSAgZnVuY3Rpb24gTW9qb1dlYlRlc3RI
ZWxwZXJBc3NvY2lhdGVkUHRyKGFzc29jaWF0ZWRJbnRlcmZhY2VQdHJJbmZvKSB7Ci0gICAgdGhp
cy5wdHIgPSBuZXcgYXNzb2NpYXRlZEJpbmRpbmdzLkFzc29jaWF0ZWRJbnRlcmZhY2VQdHJDb250
cm9sbGVyKAotICAgICAgICBNb2pvV2ViVGVzdEhlbHBlciwgYXNzb2NpYXRlZEludGVyZmFjZVB0
ckluZm8pOwotICB9Ci0KLSAgTW9qb1dlYlRlc3RIZWxwZXJBc3NvY2lhdGVkUHRyLnByb3RvdHlw
ZSA9Ci0gICAgICBPYmplY3QuY3JlYXRlKE1vam9XZWJUZXN0SGVscGVyUHRyLnByb3RvdHlwZSk7
Ci0gIE1vam9XZWJUZXN0SGVscGVyQXNzb2NpYXRlZFB0ci5wcm90b3R5cGUuY29uc3RydWN0b3Ig
PQotICAgICAgTW9qb1dlYlRlc3RIZWxwZXJBc3NvY2lhdGVkUHRyOwotCi0gIGZ1bmN0aW9uIE1v
am9XZWJUZXN0SGVscGVyUHJveHkocmVjZWl2ZXIpIHsKLSAgICB0aGlzLnJlY2VpdmVyXyA9IHJl
Y2VpdmVyOwotICB9Ci0gIE1vam9XZWJUZXN0SGVscGVyUHRyLnByb3RvdHlwZS5yZXZlcnNlID0g
ZnVuY3Rpb24oKSB7Ci0gICAgcmV0dXJuIE1vam9XZWJUZXN0SGVscGVyUHJveHkucHJvdG90eXBl
LnJldmVyc2UKLSAgICAgICAgLmFwcGx5KHRoaXMucHRyLmdldFByb3h5KCksIGFyZ3VtZW50cyk7
Ci0gIH07Ci0KLSAgTW9qb1dlYlRlc3RIZWxwZXJQcm94eS5wcm90b3R5cGUucmV2ZXJzZSA9IGZ1
bmN0aW9uKG1lc3NhZ2UpIHsKLSAgICB2YXIgcGFyYW1zID0gbmV3IE1vam9XZWJUZXN0SGVscGVy
X1JldmVyc2VfUGFyYW1zKCk7Ci0gICAgcGFyYW1zLm1lc3NhZ2UgPSBtZXNzYWdlOwotICAgIHJl
dHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3QpIHsKLSAgICAgIHZhciBi
dWlsZGVyID0gbmV3IGNvZGVjLk1lc3NhZ2VWMUJ1aWxkZXIoCi0gICAgICAgICAga01vam9XZWJU
ZXN0SGVscGVyX1JldmVyc2VfTmFtZSwKLSAgICAgICAgICBjb2RlYy5hbGlnbihNb2pvV2ViVGVz
dEhlbHBlcl9SZXZlcnNlX1BhcmFtcy5lbmNvZGVkU2l6ZSksCi0gICAgICAgICAgY29kZWMua01l
c3NhZ2VFeHBlY3RzUmVzcG9uc2UsIDApOwotICAgICAgYnVpbGRlci5lbmNvZGVTdHJ1Y3QoTW9q
b1dlYlRlc3RIZWxwZXJfUmV2ZXJzZV9QYXJhbXMsIHBhcmFtcyk7Ci0gICAgICB2YXIgbWVzc2Fn
ZSA9IGJ1aWxkZXIuZmluaXNoKCk7Ci0gICAgICB0aGlzLnJlY2VpdmVyXy5hY2NlcHRBbmRFeHBl
Y3RSZXNwb25zZShtZXNzYWdlKS50aGVuKGZ1bmN0aW9uKG1lc3NhZ2UpIHsKLSAgICAgICAgdmFy
IHJlYWRlciA9IG5ldyBjb2RlYy5NZXNzYWdlUmVhZGVyKG1lc3NhZ2UpOwotICAgICAgICB2YXIg
cmVzcG9uc2VQYXJhbXMgPQotICAgICAgICAgICAgcmVhZGVyLmRlY29kZVN0cnVjdChNb2pvV2Vi
VGVzdEhlbHBlcl9SZXZlcnNlX1Jlc3BvbnNlUGFyYW1zKTsKLSAgICAgICAgcmVzb2x2ZShyZXNw
b25zZVBhcmFtcyk7Ci0gICAgICB9KS5jYXRjaChmdW5jdGlvbihyZXN1bHQpIHsKLSAgICAgICAg
cmVqZWN0KEVycm9yKCJDb25uZWN0aW9uIGVycm9yOiAiICsgcmVzdWx0KSk7Ci0gICAgICB9KTsK
LSAgICB9LmJpbmQodGhpcykpOwotICB9OwotCi0gIGZ1bmN0aW9uIE1vam9XZWJUZXN0SGVscGVy
U3R1YihkZWxlZ2F0ZSkgewotICAgIHRoaXMuZGVsZWdhdGVfID0gZGVsZWdhdGU7Ci0gIH0KLSAg
TW9qb1dlYlRlc3RIZWxwZXJTdHViLnByb3RvdHlwZS5yZXZlcnNlID0gZnVuY3Rpb24obWVzc2Fn
ZSkgewotICAgIHJldHVybiB0aGlzLmRlbGVnYXRlXyAmJiB0aGlzLmRlbGVnYXRlXy5yZXZlcnNl
ICYmIHRoaXMuZGVsZWdhdGVfLnJldmVyc2UobWVzc2FnZSk7Ci0gIH0KLQotICBNb2pvV2ViVGVz
dEhlbHBlclN0dWIucHJvdG90eXBlLmFjY2VwdCA9IGZ1bmN0aW9uKG1lc3NhZ2UpIHsKLSAgICB2
YXIgcmVhZGVyID0gbmV3IGNvZGVjLk1lc3NhZ2VSZWFkZXIobWVzc2FnZSk7Ci0gICAgc3dpdGNo
IChyZWFkZXIubWVzc2FnZU5hbWUpIHsKLSAgICBkZWZhdWx0OgotICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIH0KLSAgfTsKLQotICBNb2pvV2ViVGVzdEhlbHBlclN0dWIucHJvdG90eXBlLmFjY2Vw
dFdpdGhSZXNwb25kZXIgPQotICAgICAgZnVuY3Rpb24obWVzc2FnZSwgcmVzcG9uZGVyKSB7Ci0g
ICAgdmFyIHJlYWRlciA9IG5ldyBjb2RlYy5NZXNzYWdlUmVhZGVyKG1lc3NhZ2UpOwotICAgIHN3
aXRjaCAocmVhZGVyLm1lc3NhZ2VOYW1lKSB7Ci0gICAgY2FzZSBrTW9qb1dlYlRlc3RIZWxwZXJf
UmV2ZXJzZV9OYW1lOgotICAgICAgdmFyIHBhcmFtcyA9IHJlYWRlci5kZWNvZGVTdHJ1Y3QoTW9q
b1dlYlRlc3RIZWxwZXJfUmV2ZXJzZV9QYXJhbXMpOwotICAgICAgdGhpcy5yZXZlcnNlKHBhcmFt
cy5tZXNzYWdlKS50aGVuKGZ1bmN0aW9uKHJlc3BvbnNlKSB7Ci0gICAgICAgIHZhciByZXNwb25z
ZVBhcmFtcyA9Ci0gICAgICAgICAgICBuZXcgTW9qb1dlYlRlc3RIZWxwZXJfUmV2ZXJzZV9SZXNw
b25zZVBhcmFtcygpOwotICAgICAgICByZXNwb25zZVBhcmFtcy5yZXZlcnNlZCA9IHJlc3BvbnNl
LnJldmVyc2VkOwotICAgICAgICB2YXIgYnVpbGRlciA9IG5ldyBjb2RlYy5NZXNzYWdlVjFCdWls
ZGVyKAotICAgICAgICAgICAga01vam9XZWJUZXN0SGVscGVyX1JldmVyc2VfTmFtZSwKLSAgICAg
ICAgICAgIGNvZGVjLmFsaWduKE1vam9XZWJUZXN0SGVscGVyX1JldmVyc2VfUmVzcG9uc2VQYXJh
bXMuZW5jb2RlZFNpemUpLAotICAgICAgICAgICAgY29kZWMua01lc3NhZ2VJc1Jlc3BvbnNlLCBy
ZWFkZXIucmVxdWVzdElEKTsKLSAgICAgICAgYnVpbGRlci5lbmNvZGVTdHJ1Y3QoTW9qb1dlYlRl
c3RIZWxwZXJfUmV2ZXJzZV9SZXNwb25zZVBhcmFtcywKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcmVzcG9uc2VQYXJhbXMpOwotICAgICAgICB2YXIgbWVzc2FnZSA9IGJ1aWxkZXIuZmlu
aXNoKCk7Ci0gICAgICAgIHJlc3BvbmRlci5hY2NlcHQobWVzc2FnZSk7Ci0gICAgICB9KTsKLSAg
ICAgIHJldHVybiB0cnVlOwotICAgIGRlZmF1bHQ6Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
fQotICB9OwotCi0gIGZ1bmN0aW9uIHZhbGlkYXRlTW9qb1dlYlRlc3RIZWxwZXJSZXF1ZXN0KG1l
c3NhZ2VWYWxpZGF0b3IpIHsKLSAgICB2YXIgbWVzc2FnZSA9IG1lc3NhZ2VWYWxpZGF0b3IubWVz
c2FnZTsKLSAgICB2YXIgcGFyYW1zQ2xhc3MgPSBudWxsOwotICAgIHN3aXRjaCAobWVzc2FnZS5n
ZXROYW1lKCkpIHsKLSAgICAgIGNhc2Uga01vam9XZWJUZXN0SGVscGVyX1JldmVyc2VfTmFtZToK
LSAgICAgICAgaWYgKG1lc3NhZ2UuZXhwZWN0c1Jlc3BvbnNlKCkpCi0gICAgICAgICAgcGFyYW1z
Q2xhc3MgPSBNb2pvV2ViVGVzdEhlbHBlcl9SZXZlcnNlX1BhcmFtczsKLSAgICAgIGJyZWFrOwot
ICAgIH0KLSAgICBpZiAocGFyYW1zQ2xhc3MgPT09IG51bGwpCi0gICAgICByZXR1cm4gdmFsaWRh
dG9yLnZhbGlkYXRpb25FcnJvci5OT05FOwotICAgIHJldHVybiBwYXJhbXNDbGFzcy52YWxpZGF0
ZShtZXNzYWdlVmFsaWRhdG9yLCBtZXNzYWdlVmFsaWRhdG9yLm1lc3NhZ2UuZ2V0SGVhZGVyTnVt
Qnl0ZXMoKSk7Ci0gIH0KLQotICBmdW5jdGlvbiB2YWxpZGF0ZU1vam9XZWJUZXN0SGVscGVyUmVz
cG9uc2UobWVzc2FnZVZhbGlkYXRvcikgewotICAgdmFyIG1lc3NhZ2UgPSBtZXNzYWdlVmFsaWRh
dG9yLm1lc3NhZ2U7Ci0gICB2YXIgcGFyYW1zQ2xhc3MgPSBudWxsOwotICAgc3dpdGNoIChtZXNz
YWdlLmdldE5hbWUoKSkgewotICAgICAgY2FzZSBrTW9qb1dlYlRlc3RIZWxwZXJfUmV2ZXJzZV9O
YW1lOgotICAgICAgICBpZiAobWVzc2FnZS5pc1Jlc3BvbnNlKCkpCi0gICAgICAgICAgcGFyYW1z
Q2xhc3MgPSBNb2pvV2ViVGVzdEhlbHBlcl9SZXZlcnNlX1Jlc3BvbnNlUGFyYW1zOwotICAgICAg
ICBicmVhazsKLSAgICB9Ci0gICAgaWYgKHBhcmFtc0NsYXNzID09PSBudWxsKQotICAgICAgcmV0
dXJuIHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORTsKLSAgICByZXR1cm4gcGFyYW1zQ2xh
c3MudmFsaWRhdGUobWVzc2FnZVZhbGlkYXRvciwgbWVzc2FnZVZhbGlkYXRvci5tZXNzYWdlLmdl
dEhlYWRlck51bUJ5dGVzKCkpOwotICB9Ci0KLSAgdmFyIE1vam9XZWJUZXN0SGVscGVyID0gewot
ICAgIG5hbWU6ICdjb250ZW50Lm1vam9tLk1vam9XZWJUZXN0SGVscGVyJywKLSAgICBrVmVyc2lv
bjogMCwKLSAgICBwdHJDbGFzczogTW9qb1dlYlRlc3RIZWxwZXJQdHIsCi0gICAgcHJveHlDbGFz
czogTW9qb1dlYlRlc3RIZWxwZXJQcm94eSwKLSAgICBzdHViQ2xhc3M6IE1vam9XZWJUZXN0SGVs
cGVyU3R1YiwKLSAgICB2YWxpZGF0ZVJlcXVlc3Q6IHZhbGlkYXRlTW9qb1dlYlRlc3RIZWxwZXJS
ZXF1ZXN0LAotICAgIHZhbGlkYXRlUmVzcG9uc2U6IHZhbGlkYXRlTW9qb1dlYlRlc3RIZWxwZXJS
ZXNwb25zZSwKLSAgfTsKLSAgTW9qb1dlYlRlc3RIZWxwZXJTdHViLnByb3RvdHlwZS52YWxpZGF0
b3IgPSB2YWxpZGF0ZU1vam9XZWJUZXN0SGVscGVyUmVxdWVzdDsKLSAgTW9qb1dlYlRlc3RIZWxw
ZXJQcm94eS5wcm90b3R5cGUudmFsaWRhdG9yID0gdmFsaWRhdGVNb2pvV2ViVGVzdEhlbHBlclJl
c3BvbnNlOwotICBleHBvcnRzLk1vam9XZWJUZXN0SGVscGVyID0gTW9qb1dlYlRlc3RIZWxwZXI7
Ci0gIGV4cG9ydHMuTW9qb1dlYlRlc3RIZWxwZXJQdHIgPSBNb2pvV2ViVGVzdEhlbHBlclB0cjsK
LSAgZXhwb3J0cy5Nb2pvV2ViVGVzdEhlbHBlckFzc29jaWF0ZWRQdHIgPSBNb2pvV2ViVGVzdEhl
bHBlckFzc29jaWF0ZWRQdHI7Ci19KSgpOwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW1wb3J0
ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vbW9qb193ZWJfdGVz
dF9oZWxwZXJfdGVzdC5tb2pvbS5qcy5oZWFkZXJzIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNj
L3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vbW9qb193ZWJfdGVzdF9oZWxw
ZXJfdGVzdC5tb2pvbS5qcy5oZWFkZXJzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2
ODA1YzMyM2RmNWE5NzUyMzE2NDhiODMwZTMzY2UxODNjM2NiYmQzLi4wMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93
ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL21vam9fd2ViX3Rlc3RfaGVscGVy
X3Rlc3QubW9qb20uanMuaGVhZGVycworKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLUNvbnRl
bnQtVHlwZTogdGV4dC9qYXZhc2NyaXB0OyBjaGFyc2V0PXV0Zi04CmRpZmYgLS1naXQgYS9MYXlv
dXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1
bS9uZmMtbW9jay5qcyBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVz
dHMvcmVzb3VyY2VzL2Nocm9taXVtL25mYy1tb2NrLmpzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAxYTdlMTU4MTllNjdjZTBiYzlkMWRiODQxY2I0ZjA5MTM2NGU4MTM4Li4wMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL0xheW91dFRlc3RzL2ltcG9y
dGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL25mYy1tb2NrLmpz
CisrKyAvZGV2L251bGwKQEAgLTEsNDMwICswLDAgQEAKLSd1c2Ugc3RyaWN0JzsKLQotLy8gQ29u
dmVydHMgYmV0d2VlbiBOREVGTWVzc2FnZUluaXQgaHR0cHM6Ly93M2MuZ2l0aHViLmlvL3dlYi1u
ZmMvI2RvbS1uZGVmbWVzc2FnZQotLy8gYW5kIG1vam9tLk5ERUZNZXNzYWdlIHN0cnVjdHVyZSwg
c28gdGhhdCB3YXRjaCBmdW5jdGlvbiBjYW4gYmUgdGVzdGVkLgotZnVuY3Rpb24gdG9Nb2pvTkRF
Rk1lc3NhZ2UobWVzc2FnZSkgewotICBsZXQgbmRlZk1lc3NhZ2UgPSBuZXcgZGV2aWNlLm1vam9t
Lk5ERUZNZXNzYWdlKCk7Ci0gIG5kZWZNZXNzYWdlLmRhdGEgPSBbXTsKLSAgZm9yIChsZXQgcmVj
b3JkIG9mIG1lc3NhZ2UucmVjb3JkcykgewotICAgIG5kZWZNZXNzYWdlLmRhdGEucHVzaCh0b01v
am9OREVGUmVjb3JkKHJlY29yZCkpOwotICB9Ci0gIHJldHVybiBuZGVmTWVzc2FnZTsKLX0KLQot
ZnVuY3Rpb24gdG9Nb2pvTkRFRlJlY29yZChyZWNvcmQpIHsKLSAgbGV0IG5mY1JlY29yZCA9IG5l
dyBkZXZpY2UubW9qb20uTkRFRlJlY29yZCgpOwotICAvLyBTaW1wbHkgY2hlY2tzIHRoZSBleGlz
dGVuY2Ugb2YgJzonIHRvIGRlY2lkZSB3aGV0aGVyIGl0J3MgYW4gZXh0ZXJuYWwKLSAgLy8gdHlw
ZSBvciBhIGxvY2FsIHR5cGUuIEFzIGEgbW9jaywgbm8gbmVlZCB0byByZWFsbHkgaW1wbGVtZW50
IHRoZSB2YWxpZGF0aW9uCi0gIC8vIGFsZ29yaXRobXMgZm9yIHRoZW0uCi0gIGlmIChyZWNvcmQu
cmVjb3JkVHlwZS5zdGFydHNXaXRoKCc6JykpIHsKLSAgICBuZmNSZWNvcmQuY2F0ZWdvcnkgPSBk
ZXZpY2UubW9qb20uTkRFRlJlY29yZFR5cGVDYXRlZ29yeS5rTG9jYWw7Ci0gIH0gZWxzZSBpZiAo
cmVjb3JkLnJlY29yZFR5cGUuc2VhcmNoKCc6JykgIT0gLTEpIHsKLSAgICBuZmNSZWNvcmQuY2F0
ZWdvcnkgPSBkZXZpY2UubW9qb20uTkRFRlJlY29yZFR5cGVDYXRlZ29yeS5rRXh0ZXJuYWw7Ci0g
IH0gZWxzZSB7Ci0gICAgbmZjUmVjb3JkLmNhdGVnb3J5ID0gZGV2aWNlLm1vam9tLk5ERUZSZWNv
cmRUeXBlQ2F0ZWdvcnkua1N0YW5kYXJkaXplZDsKLSAgfQotICBuZmNSZWNvcmQucmVjb3JkVHlw
ZSA9IHJlY29yZC5yZWNvcmRUeXBlOwotICBuZmNSZWNvcmQubWVkaWFUeXBlID0gcmVjb3JkLm1l
ZGlhVHlwZTsKLSAgbmZjUmVjb3JkLmlkID0gcmVjb3JkLmlkOwotICBpZiAocmVjb3JkLnJlY29y
ZFR5cGUgPT0gJ3RleHQnKSB7Ci0gICAgbmZjUmVjb3JkLmVuY29kaW5nID0gcmVjb3JkLmVuY29k
aW5nID09IG51bGw/ICd1dGYtOCc6IHJlY29yZC5lbmNvZGluZzsKLSAgICBuZmNSZWNvcmQubGFu
ZyA9IHJlY29yZC5sYW5nID09IG51bGw/ICdlbic6IHJlY29yZC5sYW5nOwotICB9Ci0gIG5mY1Jl
Y29yZC5kYXRhID0gdG9CeXRlQXJyYXkocmVjb3JkLmRhdGEpOwotICBpZiAocmVjb3JkLmRhdGEg
IT0gbnVsbCAmJiByZWNvcmQuZGF0YS5yZWNvcmRzICE9PSB1bmRlZmluZWQpIHsKLSAgICAvLyB8
cmVjb3JkLmRhdGF8IG1heSBiZSBhbiBOREVGTWVzc2FnZUluaXQsIGkuZS4gdGhlIHBheWxvYWQg
aXMgYSBtZXNzYWdlLgotICAgIG5mY1JlY29yZC5wYXlsb2FkTWVzc2FnZSA9IHRvTW9qb05ERUZN
ZXNzYWdlKHJlY29yZC5kYXRhKTsKLSAgfQotICByZXR1cm4gbmZjUmVjb3JkOwotfQotCi0vLyBD
b252ZXJ0cyBKUyBvYmplY3RzIHRvIGJ5dGUgYXJyYXkuCi1mdW5jdGlvbiB0b0J5dGVBcnJheShk
YXRhKSB7Ci0gIGlmIChkYXRhIGluc3RhbmNlb2YgQXJyYXlCdWZmZXIpCi0gICAgcmV0dXJuIG5l
dyBVaW50OEFycmF5KGRhdGEpOwotICBlbHNlIGlmIChBcnJheUJ1ZmZlci5pc1ZpZXcoZGF0YSkp
Ci0gICAgcmV0dXJuIG5ldyBVaW50OEFycmF5KGRhdGEuYnVmZmVyLCBkYXRhLmJ5dGVPZmZzZXQs
IGRhdGEuYnl0ZUxlbmd0aCk7Ci0KLSAgbGV0IGJ5dGVBcnJheSA9IG5ldyBVaW50OEFycmF5KDAp
OwotICBsZXQgdG1wRGF0YSA9IGRhdGE7Ci0gIGlmICh0eXBlb2YgdG1wRGF0YSA9PT0gJ29iamVj
dCcgfHwgdHlwZW9mIHRtcERhdGEgPT09ICdudW1iZXInKQotICAgIHRtcERhdGEgPSBKU09OLnN0
cmluZ2lmeSh0bXBEYXRhKTsKLQotICBpZiAodHlwZW9mIHRtcERhdGEgPT09ICdzdHJpbmcnKQot
ICAgIGJ5dGVBcnJheSA9IG5ldyBUZXh0RW5jb2RlcigndXRmLTgnKS5lbmNvZGUodG1wRGF0YSk7
Ci0KLSAgcmV0dXJuIGJ5dGVBcnJheTsKLX0KLQotLy8gQ29tcGFyZXMgTkRFRlJlY29yZHMgdGhh
dCB3ZXJlIHByb3ZpZGVkIC8gcmVjZWl2ZWQgYnkgdGhlIG1vY2sgc2VydmljZS4KLS8vIFRPRE86
IFVzZSBkaWZmZXJlbnQgZ2V0dGVycyB0byBnZXQgcmVjZWl2ZWQgcmVjb3JkIGRhdGEsCi0vLyBz
ZWUgc3BlYyBjaGFuZ2VzIGF0IGh0dHBzOi8vZ2l0aHViLmNvbS93M2Mvd2ViLW5mYy9wdWxsLzI0
My4KLWZ1bmN0aW9uIGNvbXBhcmVOREVGUmVjb3Jkcyhwcm92aWRlZFJlY29yZCwgcmVjZWl2ZWRS
ZWNvcmQpIHsKLSAgYXNzZXJ0X2VxdWFscyhwcm92aWRlZFJlY29yZC5yZWNvcmRUeXBlLCByZWNl
aXZlZFJlY29yZC5yZWNvcmRUeXBlKTsKLQotICBpZiAocHJvdmlkZWRSZWNvcmQuaWQgPT09IHVu
ZGVmaW5lZCkgewotICAgIGFzc2VydF9lcXVhbHMobnVsbCwgcmVjZWl2ZWRSZWNvcmQuaWQpOwot
ICB9IGVsc2UgewotICAgIGFzc2VydF9lcXVhbHMocHJvdmlkZWRSZWNvcmQuaWQsIHJlY2VpdmVk
UmVjb3JkLmlkKTsKLSAgfQotCi0gIGlmIChwcm92aWRlZFJlY29yZC5tZWRpYVR5cGUgPT09IHVu
ZGVmaW5lZCkgewotICAgIGFzc2VydF9lcXVhbHMobnVsbCwgcmVjZWl2ZWRSZWNvcmQubWVkaWFU
eXBlKTsKLSAgfSBlbHNlIHsKLSAgICBhc3NlcnRfZXF1YWxzKHByb3ZpZGVkUmVjb3JkLm1lZGlh
VHlwZSwgcmVjZWl2ZWRSZWNvcmQubWVkaWFUeXBlKTsKLSAgfQotCi0gIGFzc2VydF9ub3RfZXF1
YWxzKHByb3ZpZGVkUmVjb3JkLnJlY29yZFR5cGUsICdlbXB0eScpOwotCi0gIGlmIChwcm92aWRl
ZFJlY29yZC5yZWNvcmRUeXBlID09ICd0ZXh0JykgewotICAgIGFzc2VydF9lcXVhbHMoCi0gICAg
ICAgIHByb3ZpZGVkUmVjb3JkLmVuY29kaW5nID09IG51bGw/ICd1dGYtOCc6IHByb3ZpZGVkUmVj
b3JkLmVuY29kaW5nLAotICAgICAgICByZWNlaXZlZFJlY29yZC5lbmNvZGluZyk7Ci0gICAgYXNz
ZXJ0X2VxdWFscyhwcm92aWRlZFJlY29yZC5sYW5nID09IG51bGw/ICdlbic6IHByb3ZpZGVkUmVj
b3JkLmxhbmcsCi0gICAgICAgICAgICAgICAgICByZWNlaXZlZFJlY29yZC5sYW5nKTsKLSAgfSBl
bHNlIHsKLSAgICBhc3NlcnRfZXF1YWxzKG51bGwsIHJlY2VpdmVkUmVjb3JkLmVuY29kaW5nKTsK
LSAgICBhc3NlcnRfZXF1YWxzKG51bGwsIHJlY2VpdmVkUmVjb3JkLmxhbmcpOwotICB9Ci0KLSAg
YXNzZXJ0X2FycmF5X2VxdWFscyh0b0J5dGVBcnJheShwcm92aWRlZFJlY29yZC5kYXRhKSwKLSAg
ICAgICAgICAgICAgICAgICAgICBuZXcgVWludDhBcnJheShyZWNlaXZlZFJlY29yZC5kYXRhKSk7
Ci19Ci0KLS8vIENvbXBhcmVzIE5ERUZXcml0ZU9wdGlvbnMgc3RydWN0dXJlcyB0aGF0IHdlcmUg
cHJvdmlkZWQgdG8gQVBJIGFuZAotLy8gcmVjZWl2ZWQgYnkgdGhlIG1vY2sgbW9qbyBzZXJ2aWNl
LgotZnVuY3Rpb24gYXNzZXJ0TkRFRldyaXRlT3B0aW9uc0VxdWFsKHByb3ZpZGVkLCByZWNlaXZl
ZCkgewotICBpZiAocHJvdmlkZWQuaWdub3JlUmVhZCAhPT0gdW5kZWZpbmVkKQotICAgIGFzc2Vy
dF9lcXVhbHMocHJvdmlkZWQuaWdub3JlUmVhZCwgISFyZWNlaXZlZC5pZ25vcmVSZWFkKTsKLSAg
ZWxzZQotICAgIGFzc2VydF9lcXVhbHMoISFyZWNlaXZlZC5pZ25vcmVfcmVhZCwgdHJ1ZSk7Ci19
Ci0KLS8vIENvbXBhcmVzIE5ERUZSZWFkZXJPcHRpb25zIHN0cnVjdHVyZXMgdGhhdCB3ZXJlIHBy
b3ZpZGVkIHRvIEFQSSBhbmQKLS8vIHJlY2VpdmVkIGJ5IHRoZSBtb2NrIG1vam8gc2VydmljZS4K
LWZ1bmN0aW9uIGFzc2VydE5ERUZSZWFkZXJPcHRpb25zRXF1YWwocHJvdmlkZWQsIHJlY2VpdmVk
KSB7Ci0gIGlmIChwcm92aWRlZC51cmwgIT09IHVuZGVmaW5lZCkKLSAgICBhc3NlcnRfZXF1YWxz
KHByb3ZpZGVkLnVybCwgcmVjZWl2ZWQudXJsKTsKLSAgZWxzZQotICAgIGFzc2VydF9lcXVhbHMo
cmVjZWl2ZWQudXJsLCAnJyk7Ci0KLSAgaWYgKHByb3ZpZGVkLm1lZGlhVHlwZSAhPT0gdW5kZWZp
bmVkKQotICAgIGFzc2VydF9lcXVhbHMocHJvdmlkZWQubWVkaWFUeXBlLCByZWNlaXZlZC5tZWRp
YVR5cGUpOwotICBlbHNlCi0gICAgYXNzZXJ0X2VxdWFscyhyZWNlaXZlZC5tZWRpYVR5cGUsICcn
KTsKLQotICBpZiAocHJvdmlkZWQucmVjb3JkVHlwZSAhPT0gdW5kZWZpbmVkKSB7Ci0gICAgYXNz
ZXJ0X2VxdWFscyhwcm92aWRlZC5yZWNvcmRUeXBlLCByZWNlaXZlZC5yZWNvcmRUeXBlKTsKLSAg
fQotfQotCi0vLyBDaGVja3Mgd2hldGhlciBOREVGUmVhZGVyT3B0aW9ucyBhcmUgbWF0Y2hlZCB3
aXRoIGdpdmVuIG1lc3NhZ2UuCi1mdW5jdGlvbiBtYXRjaGVzV2F0Y2hPcHRpb25zKG1lc3NhZ2Us
IG9wdGlvbnMpIHsKLSAgLy8gQSBtZXNzYWdlIHdpdGggbm8gcmVjb3JkcyBpcyB0byBub3RpZnkg
dGhhdCB0aGUgdGFnIGlzIGFscmVhZHkgZm9ybWF0dGVkIHRvCi0gIC8vIHN1cHBvcnQgTkRFRiBi
dXQgZG9lcyBub3QgY29udGFpbiBhIG1lc3NhZ2UgeWV0LiBXZSBhbHdheXMgZGlzcGF0Y2ggaXQg
Zm9yCi0gIC8vIGFsbCBvcHRpb25zLgotICBpZiAobWVzc2FnZS5yZWNvcmRzLmxlbmd0aCA9PSAw
KQotICAgIHJldHVybiB0cnVlOwotCi0gIGZvciAobGV0IHJlY29yZCBvZiBtZXNzYWdlLnJlY29y
ZHMpIHsKLSAgICBpZiAob3B0aW9ucy5pZCAhPSBudWxsICYmIG9wdGlvbnMuaWQgIT09IHJlY29y
ZC5pZCkgewotICAgICAgY29udGludWU7Ci0gICAgfQotICAgIGlmIChvcHRpb25zLnJlY29yZFR5
cGUgIT0gbnVsbCAmJgotICAgICAgICBvcHRpb25zLnJlY29yZFR5cGUgIT09IHJlY29yZC5yZWNv
cmRUeXBlKSB7Ci0gICAgICBjb250aW51ZTsKLSAgICB9Ci0gICAgaWYgKG9wdGlvbnMubWVkaWFU
eXBlICE9IG51bGwgJiYgb3B0aW9ucy5tZWRpYVR5cGUgIT09IHJlY29yZC5tZWRpYVR5cGUpIHsK
LSAgICAgIGNvbnRpbnVlOwotICAgIH0KLQotICAgIC8vIEZvdW5kIG9uZSByZWNvcmQgbWF0Y2hl
cywgbWVhbnMgdGhlIG1lc3NhZ2UgbWF0Y2hlcy4KLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotCi0g
IHJldHVybiBmYWxzZTsKLX0KLQotZnVuY3Rpb24gY3JlYXRlTkRFRkVycm9yKHR5cGUpIHsKLSAg
cmV0dXJuIHsKLSAgICBlcnJvcjogdHlwZSAhPSBudWxsID8KLSAgICAgICAgbmV3IGRldmljZS5t
b2pvbS5OREVGRXJyb3Ioe2Vycm9yVHlwZTogdHlwZSwgZXJyb3JNZXNzYWdlOiAnJ30pIDoKLSAg
ICAgICAgbnVsbAotICB9OwotfQotCi12YXIgV2ViTkZDVGVzdCA9ICgoKSA9PiB7Ci0gIGNsYXNz
IE1vY2tORkMgewotICAgIGNvbnN0cnVjdG9yKCkgewotICAgICAgdGhpcy5iaW5kaW5nU2V0XyA9
IG5ldyBtb2pvLkJpbmRpbmdTZXQoZGV2aWNlLm1vam9tLk5GQyk7Ci0KLSAgICAgIHRoaXMuaW50
ZXJjZXB0b3JfID0gbmV3IE1vam9JbnRlcmZhY2VJbnRlcmNlcHRvcihkZXZpY2UubW9qb20uTkZD
Lm5hbWUpOwotICAgICAgdGhpcy5pbnRlcmNlcHRvcl8ub25pbnRlcmZhY2VyZXF1ZXN0ID0gZSA9
PiB7Ci0gICAgICAgIGlmICh0aGlzLnNob3VsZF9jbG9zZV9waXBlX29uX3JlcXVlc3RfKQotICAg
ICAgICAgIGUuaGFuZGxlLmNsb3NlKCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICB0aGlzLmJp
bmRpbmdTZXRfLmFkZEJpbmRpbmcodGhpcywgZS5oYW5kbGUpOwotICAgICAgfQotCi0gICAgICB0
aGlzLmludGVyY2VwdG9yXy5zdGFydCgpOwotCi0gICAgICB0aGlzLmh3X3N0YXR1c18gPSBORkNI
V1N0YXR1cy5FTkFCTEVEOwotICAgICAgdGhpcy5wdXNoZWRfbWVzc2FnZV8gPSBudWxsOwotICAg
ICAgdGhpcy5wZW5kaW5nX3dyaXRlX29wdGlvbnNfID0gbnVsbDsKLSAgICAgIHRoaXMucGVuZGlu
Z19wcm9taXNlX2Z1bmNfID0gbnVsbDsKLSAgICAgIHRoaXMucHVzaF9jb21wbGV0ZWRfID0gdHJ1
ZTsKLSAgICAgIHRoaXMuY2xpZW50XyA9IG51bGw7Ci0gICAgICB0aGlzLndhdGNoZXJzXyA9IFtd
OwotICAgICAgdGhpcy5yZWFkaW5nX21lc3NhZ2VzXyA9IFtdOwotICAgICAgdGhpcy5vcGVyYXRp
b25zX3N1c3BlbmRlZF8gPSBmYWxzZTsKLSAgICAgIHRoaXMuaXNfZm9ybWF0dGVkX3RhZ18gPSBm
YWxzZTsKLSAgICAgIHRoaXMuZGF0YV90cmFuc2Zlcl9mYWlsZWRfID0gZmFsc2U7Ci0gICAgICB0
aGlzLnNob3VsZF9jbG9zZV9waXBlX29uX3JlcXVlc3RfID0gZmFsc2U7Ci0gICAgfQotCi0gICAg
Ly8gTkZDIGRlbGVnYXRlIGZ1bmN0aW9ucy4KLSAgICBhc3luYyBwdXNoKG1lc3NhZ2UsIG9wdGlv
bnMpIHsKLSAgICAgIGxldCBlcnJvciA9IHRoaXMuZ2V0SFdFcnJvcigpOwotICAgICAgaWYgKGVy
cm9yKQotICAgICAgICByZXR1cm4gZXJyb3I7Ci0gICAgICAvLyBDYW5jZWxzIHByZXZpb3VzIHBl
bmRpbmcgcHVzaCBvcGVyYXRpb24uCi0gICAgICBpZiAodGhpcy5wZW5kaW5nX3Byb21pc2VfZnVu
Y18pIHsKLSAgICAgICAgdGhpcy5jYW5jZWxQZW5kaW5nUHVzaE9wZXJhdGlvbigpOwotICAgICAg
fQotCi0gICAgICB0aGlzLnB1c2hlZF9tZXNzYWdlXyA9IG1lc3NhZ2U7Ci0gICAgICB0aGlzLnBl
bmRpbmdfd3JpdGVfb3B0aW9uc18gPSBvcHRpb25zOwotICAgICAgcmV0dXJuIG5ldyBQcm9taXNl
KHJlc29sdmUgPT4gewotICAgICAgICBpZiAodGhpcy5vcGVyYXRpb25zX3N1c3BlbmRlZF8gfHwg
IXRoaXMucHVzaF9jb21wbGV0ZWRfKSB7Ci0gICAgICAgICAgLy8gTGVhdmVzIHRoZSBwdXNoIHBl
bmRpbmcuCi0gICAgICAgICAgdGhpcy5wZW5kaW5nX3Byb21pc2VfZnVuY18gPSByZXNvbHZlOwot
ICAgICAgICB9IGVsc2UgaWYgKHRoaXMuaXNfZm9ybWF0dGVkX3RhZ18gJiYgIW9wdGlvbnMub3Zl
cndyaXRlKSB7Ci0gICAgICAgICAgLy8gUmVzb2x2ZXMgd2l0aCBOb3RBbGxvd2VkRXJyb3IgaWYg
dGhlcmUgYXJlIE5ERUYgcmVjb3JkcyBvbiB0aGUgZGV2aWNlCi0gICAgICAgICAgLy8gYW5kIG92
ZXJ3cml0ZSBpcyBmYWxzZS4KLSAgICAgICAgICByZXNvbHZlKGNyZWF0ZU5ERUZFcnJvcihkZXZp
Y2UubW9qb20uTkRFRkVycm9yVHlwZS5OT1RfQUxMT1dFRCkpOwotICAgICAgICB9IGVsc2UgaWYg
KHRoaXMuZGF0YV90cmFuc2Zlcl9mYWlsZWRfKSB7Ci0gICAgICAgICAgLy8gUmVzb2x2ZXMgd2l0
aCBOZXR3b3JrRXJyb3IgaWYgZGF0YSB0cmFuc2ZlciBmYWlscy4KLSAgICAgICAgICByZXNvbHZl
KGNyZWF0ZU5ERUZFcnJvcihkZXZpY2UubW9qb20uTkRFRkVycm9yVHlwZS5JT19FUlJPUikpOwot
ICAgICAgICB9IGVsc2UgewotICAgICAgICAgIHJlc29sdmUoY3JlYXRlTkRFRkVycm9yKG51bGwp
KTsKLSAgICAgICAgfQotICAgICAgfSk7Ci0gICAgfQotCi0gICAgYXN5bmMgY2FuY2VsUHVzaCgp
IHsKLSAgICAgIHRoaXMuY2FuY2VsUGVuZGluZ1B1c2hPcGVyYXRpb24oKTsKLSAgICAgIHJldHVy
biBjcmVhdGVOREVGRXJyb3IobnVsbCk7Ci0gICAgfQotCi0gICAgc2V0Q2xpZW50KGNsaWVudCkg
ewotICAgICAgdGhpcy5jbGllbnRfID0gY2xpZW50OwotICAgIH0KLQotICAgIGFzeW5jIHdhdGNo
KG9wdGlvbnMsIGlkKSB7Ci0gICAgICBhc3NlcnRfdHJ1ZShpZCA+IDApOwotICAgICAgbGV0IGVy
cm9yID0gdGhpcy5nZXRIV0Vycm9yKCk7Ci0gICAgICBpZiAoZXJyb3IpIHsKLSAgICAgICAgcmV0
dXJuIGVycm9yOwotICAgICAgfQotCi0gICAgICB0aGlzLndhdGNoZXJzXy5wdXNoKHtpZDogaWQs
IG9wdGlvbnM6IG9wdGlvbnN9KTsKLSAgICAgIC8vIElnbm9yZXMgcmVhZGluZyBpZiBORkMgb3Bl
cmF0aW9uIGlzIHN1c3BlbmRlZAotICAgICAgLy8gb3IgdGhlIE5GQyB0YWcgZG9lcyBub3QgZXhw
b3NlIE5ERUYgdGVjaG5vbG9neS4KLSAgICAgIGlmICghdGhpcy5vcGVyYXRpb25zX3N1c3BlbmRl
ZF8pIHsKLSAgICAgICAgLy8gVHJpZ2dlcnMgb25XYXRjaCBpZiB0aGUgbmV3IHdhdGNoZXIgbWF0
Y2hlcyBleGlzdGluZyBtZXNzYWdlcy4KLSAgICAgICAgZm9yIChsZXQgbWVzc2FnZSBvZiB0aGlz
LnJlYWRpbmdfbWVzc2FnZXNfKSB7Ci0gICAgICAgICAgaWYgKG1hdGNoZXNXYXRjaE9wdGlvbnMo
bWVzc2FnZSwgb3B0aW9ucykpIHsKLSAgICAgICAgICAgIHRoaXMuY2xpZW50Xy5vbldhdGNoKAot
ICAgICAgICAgICAgICAgIFtpZF0sIGZha2VfdGFnX3NlcmlhbF9udW1iZXIsIHRvTW9qb05ERUZN
ZXNzYWdlKG1lc3NhZ2UpKTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLQotICAg
ICAgcmV0dXJuIGNyZWF0ZU5ERUZFcnJvcihudWxsKTsKLSAgICB9Ci0KLSAgICBhc3luYyBjYW5j
ZWxXYXRjaChpZCkgewotICAgICAgbGV0IGluZGV4ID0gdGhpcy53YXRjaGVyc18uZmluZEluZGV4
KHZhbHVlID0+IHZhbHVlLmlkID09PSBpZCk7Ci0gICAgICBpZiAoaW5kZXggPT09IC0xKSB7Ci0g
ICAgICAgIHJldHVybiBjcmVhdGVOREVGRXJyb3IoZGV2aWNlLm1vam9tLk5ERUZFcnJvclR5cGUu
Tk9UX0ZPVU5EKTsKLSAgICAgIH0KLQotICAgICAgdGhpcy53YXRjaGVyc18uc3BsaWNlKGluZGV4
LCAxKTsKLSAgICAgIHJldHVybiBjcmVhdGVOREVGRXJyb3IobnVsbCk7Ci0gICAgfQotCi0gICAg
YXN5bmMgY2FuY2VsQWxsV2F0Y2hlcygpIHsKLSAgICAgIGlmICh0aGlzLndhdGNoZXJzXy5sZW5n
dGggPT09IDApIHsKLSAgICAgICAgcmV0dXJuIGNyZWF0ZU5ERUZFcnJvcihkZXZpY2UubW9qb20u
TkRFRkVycm9yVHlwZS5OT1RfRk9VTkQpOwotICAgICAgfQotCi0gICAgICB0aGlzLndhdGNoZXJz
Xy5zcGxpY2UoMCwgdGhpcy53YXRjaGVyc18ubGVuZ3RoKTsKLSAgICAgIHJldHVybiBjcmVhdGVO
REVGRXJyb3IobnVsbCk7Ci0gICAgfQotCi0gICAgZ2V0SFdFcnJvcigpIHsKLSAgICAgIGlmICh0
aGlzLmh3X3N0YXR1c18gPT09IE5GQ0hXU3RhdHVzLkRJU0FCTEVEKQotICAgICAgICByZXR1cm4g
Y3JlYXRlTkRFRkVycm9yKGRldmljZS5tb2pvbS5OREVGRXJyb3JUeXBlLk5PVF9SRUFEQUJMRSk7
Ci0gICAgICBpZiAodGhpcy5od19zdGF0dXNfID09PSBORkNIV1N0YXR1cy5OT1RfU1VQUE9SVEVE
KQotICAgICAgICByZXR1cm4gY3JlYXRlTkRFRkVycm9yKGRldmljZS5tb2pvbS5OREVGRXJyb3JU
eXBlLk5PVF9TVVBQT1JURUQpOwotICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfQotCi0gICAgc2V0
SFdTdGF0dXMoc3RhdHVzKSB7Ci0gICAgICB0aGlzLmh3X3N0YXR1c18gPSBzdGF0dXM7Ci0gICAg
fQotCi0gICAgcHVzaGVkTWVzc2FnZSgpIHsKLSAgICAgIHJldHVybiB0aGlzLnB1c2hlZF9tZXNz
YWdlXzsKLSAgICB9Ci0KLSAgICB3cml0ZU9wdGlvbnMoKSB7Ci0gICAgICByZXR1cm4gdGhpcy5w
ZW5kaW5nX3dyaXRlX29wdGlvbnNfOwotICAgIH0KLQotICAgIHdhdGNoT3B0aW9ucygpIHsKLSAg
ICAgIGFzc2VydF9ub3RfZXF1YWxzKHRoaXMud2F0Y2hlcnNfLmxlbmd0aCwgMCk7Ci0gICAgICBy
ZXR1cm4gdGhpcy53YXRjaGVyc19bdGhpcy53YXRjaGVyc18ubGVuZ3RoIC0gMV0ub3B0aW9uczsK
LSAgICB9Ci0KLSAgICBzZXRQZW5kaW5nUHVzaENvbXBsZXRlZChyZXN1bHQpIHsKLSAgICAgIHRo
aXMucHVzaF9jb21wbGV0ZWRfID0gcmVzdWx0OwotICAgIH0KLQotICAgIHJlc2V0KCkgewotICAg
ICAgdGhpcy5od19zdGF0dXNfID0gTkZDSFdTdGF0dXMuRU5BQkxFRDsKLSAgICAgIHRoaXMud2F0
Y2hlcnNfID0gW107Ci0gICAgICB0aGlzLnJlYWRpbmdfbWVzc2FnZXNfID0gW107Ci0gICAgICB0
aGlzLm9wZXJhdGlvbnNfc3VzcGVuZGVkXyA9IGZhbHNlOwotICAgICAgdGhpcy5jYW5jZWxQZW5k
aW5nUHVzaE9wZXJhdGlvbigpOwotICAgICAgdGhpcy5pc19mb3JtYXR0ZWRfdGFnXyA9IGZhbHNl
OwotICAgICAgdGhpcy5kYXRhX3RyYW5zZmVyX2ZhaWxlZF8gPSBmYWxzZTsKLSAgICAgIHRoaXMu
c2hvdWxkX2Nsb3NlX3BpcGVfb25fcmVxdWVzdF8gPSBmYWxzZTsKLSAgICB9Ci0KLSAgICBjYW5j
ZWxQZW5kaW5nUHVzaE9wZXJhdGlvbigpIHsKLSAgICAgIGlmICh0aGlzLnBlbmRpbmdfcHJvbWlz
ZV9mdW5jXykgewotICAgICAgICB0aGlzLnBlbmRpbmdfcHJvbWlzZV9mdW5jXygKLSAgICAgICAg
ICAgIGNyZWF0ZU5ERUZFcnJvcihkZXZpY2UubW9qb20uTkRFRkVycm9yVHlwZS5PUEVSQVRJT05f
Q0FOQ0VMTEVEKSk7Ci0gICAgICAgIHRoaXMucGVuZGluZ19wcm9taXNlX2Z1bmNfID0gbnVsbDsK
LSAgICAgIH0KLQotICAgICAgdGhpcy5wdXNoZWRfbWVzc2FnZV8gPSBudWxsOwotICAgICAgdGhp
cy5wZW5kaW5nX3dyaXRlX29wdGlvbnNfID0gbnVsbDsKLSAgICAgIHRoaXMucHVzaF9jb21wbGV0
ZWRfID0gdHJ1ZTsKLSAgICB9Ci0KLSAgICAvLyBTZXRzIG1lc3NhZ2UgdGhhdCBpcyB1c2VkIHRv
IGRlbGl2ZXIgTkZDIHJlYWRpbmcgdXBkYXRlcy4KLSAgICBzZXRSZWFkaW5nTWVzc2FnZShtZXNz
YWdlKSB7Ci0gICAgICB0aGlzLnJlYWRpbmdfbWVzc2FnZXNfLnB1c2gobWVzc2FnZSk7Ci0gICAg
ICAvLyBJZ25vcmVzIHJlYWRpbmcgaWYgTkZDIG9wZXJhdGlvbiBpcyBzdXNwZW5kZWQuCi0gICAg
ICBpZih0aGlzLm9wZXJhdGlvbnNfc3VzcGVuZGVkXykgcmV0dXJuOwotICAgICAgLy8gSWdub3Jl
cyByZWFkaW5nIGlmIE5ERUZXcml0ZU9wdGlvbnMuaWdub3JlUmVhZCBpcyB0cnVlLgotICAgICAg
aWYgKHRoaXMucGVuZGluZ193cml0ZV9vcHRpb25zXyAmJiB0aGlzLnBlbmRpbmdfd3JpdGVfb3B0
aW9uc18uaWdub3JlUmVhZCkKLSAgICAgICAgcmV0dXJuOwotICAgICAgLy8gVHJpZ2dlcnMgb25X
YXRjaCBpZiB0aGUgbmV3IG1lc3NhZ2UgbWF0Y2hlcyBleGlzdGluZyB3YXRjaGVycy4KLSAgICAg
IGZvciAobGV0IHdhdGNoZXIgb2YgdGhpcy53YXRjaGVyc18pIHsKLSAgICAgICAgaWYgKG1hdGNo
ZXNXYXRjaE9wdGlvbnMobWVzc2FnZSwgd2F0Y2hlci5vcHRpb25zKSkgewotICAgICAgICAgIHRo
aXMuY2xpZW50Xy5vbldhdGNoKAotICAgICAgICAgICAgICBbd2F0Y2hlci5pZF0sIGZha2VfdGFn
X3NlcmlhbF9udW1iZXIsCi0gICAgICAgICAgICAgIHRvTW9qb05ERUZNZXNzYWdlKG1lc3NhZ2Up
KTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLQotICAgIC8vIFN1c3BlbmRzIGFsbCBwZW5k
aW5nIE5GQyBvcGVyYXRpb25zLiBDb3VsZCBiZSB1c2VkIHdoZW4gd2ViIHBhZ2UKLSAgICAvLyB2
aXNpYmlsaXR5IGlzIGxvc3QuCi0gICAgc3VzcGVuZE5GQ09wZXJhdGlvbnMoKSB7Ci0gICAgICB0
aGlzLm9wZXJhdGlvbnNfc3VzcGVuZGVkXyA9IHRydWU7Ci0gICAgfQotCi0gICAgLy8gUmVzdW1l
cyBhbGwgc3VzcGVuZGVkIE5GQyBvcGVyYXRpb25zLgotICAgIHJlc3VtZU5GQ09wZXJhdGlvbnMo
KSB7Ci0gICAgICB0aGlzLm9wZXJhdGlvbnNfc3VzcGVuZGVkXyA9IGZhbHNlOwotICAgICAgLy8g
UmVzdW1lcyBwZW5kaW5nIE5GQyByZWFkaW5nLgotICAgICAgZm9yIChsZXQgd2F0Y2hlciBvZiB0
aGlzLndhdGNoZXJzXykgewotICAgICAgICBmb3IgKGxldCBtZXNzYWdlIG9mIHRoaXMucmVhZGlu
Z19tZXNzYWdlc18pIHsKLSAgICAgICAgICBpZiAobWF0Y2hlc1dhdGNoT3B0aW9ucyhtZXNzYWdl
LCB3YXRjaGVyLm9wdGlvbnMpKSB7Ci0gICAgICAgICAgICB0aGlzLmNsaWVudF8ub25XYXRjaCgK
LSAgICAgICAgICAgICAgICBbd2F0Y2hlci5pZF0sIGZha2VfdGFnX3NlcmlhbF9udW1iZXIsCi0g
ICAgICAgICAgICAgICAgdG9Nb2pvTkRFRk1lc3NhZ2UobWVzc2FnZSkpOwotICAgICAgICAgIH0K
LSAgICAgICAgfQotICAgICAgfQotICAgICAgLy8gUmVzdW1lcyBwZW5kaW5nIHB1c2ggb3BlcmF0
aW9uLgotICAgICAgaWYgKHRoaXMucGVuZGluZ19wcm9taXNlX2Z1bmNfICYmIHRoaXMucHVzaF9j
b21wbGV0ZWRfKSB7Ci0gICAgICAgIHRoaXMucGVuZGluZ19wcm9taXNlX2Z1bmNfKGNyZWF0ZU5E
RUZFcnJvcihudWxsKSk7Ci0gICAgICAgIHRoaXMucGVuZGluZ19wcm9taXNlX2Z1bmNfID0gbnVs
bDsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBTaW11bGF0ZXMgdGhlIGRldmljZSBjb21pbmcg
aW4gcHJveGltaXR5IGRvZXMgbm90IGV4cG9zZSBOREVGIHRlY2hub2xvZ3kuCi0gICAgc2ltdWxh
dGVOb25OREVGVGFnRGlzY292ZXJlZCgpIHsKLSAgICAgIC8vIE5vdGlmeSBOb3RTdXBwb3J0ZWRF
cnJvciB0byBhbGwgYWN0aXZlIHJlYWRlcnMuCi0gICAgICBpZiAodGhpcy53YXRjaGVyc18ubGVu
Z3RoICE9IDApIHsKLSAgICAgICAgdGhpcy5jbGllbnRfLm9uRXJyb3IobmV3IGRldmljZS5tb2pv
bS5OREVGRXJyb3IoewotICAgICAgICAgIGVycm9yVHlwZTogZGV2aWNlLm1vam9tLk5ERUZFcnJv
clR5cGUuTk9UX1NVUFBPUlRFRCwKLSAgICAgICAgICBlcnJvck1lc3NhZ2U6ICcnCi0gICAgICAg
IH0pKTsKLSAgICAgIH0KLSAgICAgIC8vIFJlamVjdCB0aGUgcGVuZGluZyBwdXNoIHdpdGggTm90
U3VwcG9ydGVkRXJyb3IuCi0gICAgICBpZiAodGhpcy5wZW5kaW5nX3Byb21pc2VfZnVuY18pIHsK
LSAgICAgICAgdGhpcy5wZW5kaW5nX3Byb21pc2VfZnVuY18oCi0gICAgICAgICAgICBjcmVhdGVO
REVGRXJyb3IoZGV2aWNlLm1vam9tLk5ERUZFcnJvclR5cGUuTk9UX1NVUFBPUlRFRCkpOwotICAg
ICAgICB0aGlzLnBlbmRpbmdfcHJvbWlzZV9mdW5jXyA9IG51bGw7Ci0gICAgICB9Ci0gICAgfQot
Ci0gICAgc2V0SXNGb3JtYXR0ZWRUYWcoaXNGb3JtYXR0ZWQpIHsKLSAgICAgIHRoaXMuaXNfZm9y
bWF0dGVkX3RhZ18gPSBpc0Zvcm1hdHRlZDsKLSAgICB9Ci0KLSAgICBzaW11bGF0ZURhdGFUcmFu
c2ZlckZhaWxzKCkgewotICAgICAgdGhpcy5kYXRhX3RyYW5zZmVyX2ZhaWxlZF8gPSB0cnVlOwot
ICAgIH0KLQotICAgIHNpbXVsYXRlQ2xvc2VkUGlwZSgpIHsKLSAgICAgIHRoaXMuc2hvdWxkX2Ns
b3NlX3BpcGVfb25fcmVxdWVzdF8gPSB0cnVlOwotICAgIH0KLSAgfQotCi0gIGxldCB0ZXN0SW50
ZXJuYWwgPSB7Ci0gICAgaW5pdGlhbGl6ZWQ6IGZhbHNlLAotICAgIG1vY2tORkM6IG51bGwKLSAg
fQotCi0gIGNsYXNzIE5GQ1Rlc3RDaHJvbWl1bSB7Ci0gICAgY29uc3RydWN0b3IoKSB7Ci0gICAg
ICBPYmplY3QuZnJlZXplKHRoaXMpOyAvLyBNYWtlcyBpdCBpbW11dGFibGUuCi0gICAgfQotCi0g
ICAgYXN5bmMgaW5pdGlhbGl6ZSgpIHsKLSAgICAgIGlmICh0ZXN0SW50ZXJuYWwuaW5pdGlhbGl6
ZWQpCi0gICAgICAgIHRocm93IG5ldyBFcnJvcignQ2FsbCByZXNldCgpIGJlZm9yZSBpbml0aWFs
aXplKCkuJyk7Ci0KLSAgICAgIC8vIEdyYW50IG5mYyBwZXJtaXNzaW9ucyBmb3IgQ2hyb21pdW0g
dGVzdGRyaXZlci4KLSAgICAgIGF3YWl0IHRlc3RfZHJpdmVyLnNldF9wZXJtaXNzaW9uKHsgbmFt
ZTogJ25mYycgfSwgJ2dyYW50ZWQnLCBmYWxzZSk7Ci0KLSAgICAgIGlmICh0ZXN0SW50ZXJuYWwu
bW9ja05GQyA9PSBudWxsKSB7Ci0gICAgICAgIHRlc3RJbnRlcm5hbC5tb2NrTkZDID0gbmV3IE1v
Y2tORkMoKTsKLSAgICAgIH0KLSAgICAgIHRlc3RJbnRlcm5hbC5pbml0aWFsaXplZCA9IHRydWU7
Ci0gICAgfQotCi0gICAgLy8gUmV1c2VzIHRoZSBuZmMgbW9jayBidXQgcmVzZXRzIGl0cyBzdGF0
ZSBiZXR3ZWVuIHRlc3QgcnVucy4KLSAgICBhc3luYyByZXNldCgpIHsKLSAgICAgIGlmICghdGVz
dEludGVybmFsLmluaXRpYWxpemVkKQotICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0NhbGwgaW5p
dGlhbGl6ZSgpIGJlZm9yZSByZXNldCgpLicpOwotICAgICAgdGVzdEludGVybmFsLm1vY2tORkMu
cmVzZXQoKTsKLSAgICAgIHRlc3RJbnRlcm5hbC5pbml0aWFsaXplZCA9IGZhbHNlOwotCi0gICAg
ICBhd2FpdCBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHNldFRpbWVvdXQocmVzb2x2ZSwgMCkpOwot
ICAgIH0KLQotICAgIGdldE1vY2tORkMoKSB7Ci0gICAgICByZXR1cm4gdGVzdEludGVybmFsLm1v
Y2tORkM7Ci0gICAgfQotICB9Ci0KLSAgcmV0dXJuIE5GQ1Rlc3RDaHJvbWl1bTsKLX0pKCk7CmRp
ZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jl
c291cmNlcy9jaHJvbWl1bS9zZW5zb3IubW9qb20uanMgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93
M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS9zZW5zb3IubW9qb20uanMK
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc1NzhkZDZkNjRmMGU5MWQ5NGM5ZGNjMzI0
MzJmZDJjZWFkZDM4YjYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAK
LS0tIGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJj
ZXMvY2hyb21pdW0vc2Vuc29yLm1vam9tLmpzCisrKyAvZGV2L251bGwKQEAgLTEsMTA3NCArMCww
IEBACi0vLyBDb3B5cmlnaHQgMjAxNCBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNE
LXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUu
Ci0KLSd1c2Ugc3RyaWN0JzsKLQotKGZ1bmN0aW9uKCkgewotICB2YXIgbW9qb21JZCA9ICdzZXJ2
aWNlcy9kZXZpY2UvcHVibGljL21vam9tL3NlbnNvci5tb2pvbSc7Ci0gIGlmIChtb2pvLmludGVy
bmFsLmlzTW9qb21Mb2FkZWQobW9qb21JZCkpIHsKLSAgICBjb25zb2xlLndhcm4oJ1RoZSBmb2xs
b3dpbmcgbW9qb20gaXMgbG9hZGVkIG11bHRpcGxlIHRpbWVzOiAnICsgbW9qb21JZCk7Ci0gICAg
cmV0dXJuOwotICB9Ci0gIG1vam8uaW50ZXJuYWwubWFya01vam9tTG9hZGVkKG1vam9tSWQpOwot
ICB2YXIgYmluZGluZ3MgPSBtb2pvOwotICB2YXIgYXNzb2NpYXRlZEJpbmRpbmdzID0gbW9qbzsK
LSAgdmFyIGNvZGVjID0gbW9qby5pbnRlcm5hbDsKLSAgdmFyIHZhbGlkYXRvciA9IG1vam8uaW50
ZXJuYWw7Ci0KLSAgdmFyIGV4cG9ydHMgPSBtb2pvLmludGVybmFsLmV4cG9zZU5hbWVzcGFjZSgn
ZGV2aWNlLm1vam9tJyk7Ci0KLQotICB2YXIgU2Vuc29yVHlwZSA9IHt9OwotICBTZW5zb3JUeXBl
LkFNQklFTlRfTElHSFQgPSAwOwotICBTZW5zb3JUeXBlLlBST1hJTUlUWSA9IFNlbnNvclR5cGUu
QU1CSUVOVF9MSUdIVCArIDE7Ci0gIFNlbnNvclR5cGUuQUNDRUxFUk9NRVRFUiA9IFNlbnNvclR5
cGUuUFJPWElNSVRZICsgMTsKLSAgU2Vuc29yVHlwZS5MSU5FQVJfQUNDRUxFUkFUSU9OID0gU2Vu
c29yVHlwZS5BQ0NFTEVST01FVEVSICsgMTsKLSAgU2Vuc29yVHlwZS5HWVJPU0NPUEUgPSBTZW5z
b3JUeXBlLkxJTkVBUl9BQ0NFTEVSQVRJT04gKyAxOwotICBTZW5zb3JUeXBlLk1BR05FVE9NRVRF
UiA9IFNlbnNvclR5cGUuR1lST1NDT1BFICsgMTsKLSAgU2Vuc29yVHlwZS5QUkVTU1VSRSA9IFNl
bnNvclR5cGUuTUFHTkVUT01FVEVSICsgMTsKLSAgU2Vuc29yVHlwZS5BQlNPTFVURV9PUklFTlRB
VElPTl9FVUxFUl9BTkdMRVMgPSBTZW5zb3JUeXBlLlBSRVNTVVJFICsgMTsKLSAgU2Vuc29yVHlw
ZS5BQlNPTFVURV9PUklFTlRBVElPTl9RVUFURVJOSU9OID0gU2Vuc29yVHlwZS5BQlNPTFVURV9P
UklFTlRBVElPTl9FVUxFUl9BTkdMRVMgKyAxOwotICBTZW5zb3JUeXBlLlJFTEFUSVZFX09SSUVO
VEFUSU9OX0VVTEVSX0FOR0xFUyA9IFNlbnNvclR5cGUuQUJTT0xVVEVfT1JJRU5UQVRJT05fUVVB
VEVSTklPTiArIDE7Ci0gIFNlbnNvclR5cGUuUkVMQVRJVkVfT1JJRU5UQVRJT05fUVVBVEVSTklP
TiA9IFNlbnNvclR5cGUuUkVMQVRJVkVfT1JJRU5UQVRJT05fRVVMRVJfQU5HTEVTICsgMTsKLSAg
U2Vuc29yVHlwZS5NSU5fVkFMVUUgPSAwLAotICBTZW5zb3JUeXBlLk1BWF9WQUxVRSA9IDEwLAot
Ci0gIFNlbnNvclR5cGUuaXNLbm93bkVudW1WYWx1ZSA9IGZ1bmN0aW9uKHZhbHVlKSB7Ci0gICAg
c3dpdGNoICh2YWx1ZSkgewotICAgIGNhc2UgMDoKLSAgICBjYXNlIDE6Ci0gICAgY2FzZSAyOgot
ICAgIGNhc2UgMzoKLSAgICBjYXNlIDQ6Ci0gICAgY2FzZSA1OgotICAgIGNhc2UgNjoKLSAgICBj
YXNlIDc6Ci0gICAgY2FzZSA4OgotICAgIGNhc2UgOToKLSAgICBjYXNlIDEwOgotICAgICAgcmV0
dXJuIHRydWU7Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLSAgfTsKLQotICBTZW5zb3JUeXBl
LnZhbGlkYXRlID0gZnVuY3Rpb24oZW51bVZhbHVlKSB7Ci0gICAgdmFyIGlzRXh0ZW5zaWJsZSA9
IGZhbHNlOwotICAgIGlmIChpc0V4dGVuc2libGUgfHwgdGhpcy5pc0tub3duRW51bVZhbHVlKGVu
dW1WYWx1ZSkpCi0gICAgICByZXR1cm4gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FOwot
Ci0gICAgcmV0dXJuIHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuVU5LTk9XTl9FTlVNX1ZBTFVF
OwotICB9OwotICB2YXIgUmVwb3J0aW5nTW9kZSA9IHt9OwotICBSZXBvcnRpbmdNb2RlLk9OX0NI
QU5HRSA9IDA7Ci0gIFJlcG9ydGluZ01vZGUuQ09OVElOVU9VUyA9IFJlcG9ydGluZ01vZGUuT05f
Q0hBTkdFICsgMTsKLSAgUmVwb3J0aW5nTW9kZS5NSU5fVkFMVUUgPSAwLAotICBSZXBvcnRpbmdN
b2RlLk1BWF9WQUxVRSA9IDEsCi0KLSAgUmVwb3J0aW5nTW9kZS5pc0tub3duRW51bVZhbHVlID0g
ZnVuY3Rpb24odmFsdWUpIHsKLSAgICBzd2l0Y2ggKHZhbHVlKSB7Ci0gICAgY2FzZSAwOgotICAg
IGNhc2UgMToKLSAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci0g
IH07Ci0KLSAgUmVwb3J0aW5nTW9kZS52YWxpZGF0ZSA9IGZ1bmN0aW9uKGVudW1WYWx1ZSkgewot
ICAgIHZhciBpc0V4dGVuc2libGUgPSBmYWxzZTsKLSAgICBpZiAoaXNFeHRlbnNpYmxlIHx8IHRo
aXMuaXNLbm93bkVudW1WYWx1ZShlbnVtVmFsdWUpKQotICAgICAgcmV0dXJuIHZhbGlkYXRvci52
YWxpZGF0aW9uRXJyb3IuTk9ORTsKLQotICAgIHJldHVybiB2YWxpZGF0b3IudmFsaWRhdGlvbkVy
cm9yLlVOS05PV05fRU5VTV9WQUxVRTsKLSAgfTsKLQotICBmdW5jdGlvbiBTZW5zb3JDb25maWd1
cmF0aW9uKHZhbHVlcykgewotICAgIHRoaXMuaW5pdERlZmF1bHRzXygpOwotICAgIHRoaXMuaW5p
dEZpZWxkc18odmFsdWVzKTsKLSAgfQotCi0KLSAgU2Vuc29yQ29uZmlndXJhdGlvbi5wcm90b3R5
cGUuaW5pdERlZmF1bHRzXyA9IGZ1bmN0aW9uKCkgewotICAgIHRoaXMuZnJlcXVlbmN5ID0gMDsK
LSAgfTsKLSAgU2Vuc29yQ29uZmlndXJhdGlvbi5wcm90b3R5cGUuaW5pdEZpZWxkc18gPSBmdW5j
dGlvbihmaWVsZHMpIHsKLSAgICBmb3IodmFyIGZpZWxkIGluIGZpZWxkcykgewotICAgICAgICBp
ZiAodGhpcy5oYXNPd25Qcm9wZXJ0eShmaWVsZCkpCi0gICAgICAgICAgdGhpc1tmaWVsZF0gPSBm
aWVsZHNbZmllbGRdOwotICAgIH0KLSAgfTsKLQotICBTZW5zb3JDb25maWd1cmF0aW9uLnZhbGlk
YXRlID0gZnVuY3Rpb24obWVzc2FnZVZhbGlkYXRvciwgb2Zmc2V0KSB7Ci0gICAgdmFyIGVycjsK
LSAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0SGVhZGVyKG9mZnNldCwg
Y29kZWMua1N0cnVjdEhlYWRlclNpemUpOwotICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxp
ZGF0aW9uRXJyb3IuTk9ORSkKLSAgICAgICAgcmV0dXJuIGVycjsKLQotICAgIHZhciBrVmVyc2lv
blNpemVzID0gWwotICAgICAge3ZlcnNpb246IDAsIG51bUJ5dGVzOiAxNn0KLSAgICBdOwotICAg
IGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RWZXJzaW9uKG9mZnNldCwga1Zl
cnNpb25TaXplcyk7Ci0gICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5O
T05FKQotICAgICAgICByZXR1cm4gZXJyOwotCi0KLSAgICByZXR1cm4gdmFsaWRhdG9yLnZhbGlk
YXRpb25FcnJvci5OT05FOwotICB9OwotCi0gIFNlbnNvckNvbmZpZ3VyYXRpb24uZW5jb2RlZFNp
emUgPSBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDg7Ci0KLSAgU2Vuc29yQ29uZmlndXJhdGlv
bi5kZWNvZGUgPSBmdW5jdGlvbihkZWNvZGVyKSB7Ci0gICAgdmFyIHBhY2tlZDsKLSAgICB2YXIg
dmFsID0gbmV3IFNlbnNvckNvbmZpZ3VyYXRpb24oKTsKLSAgICB2YXIgbnVtYmVyT2ZCeXRlcyA9
IGRlY29kZXIucmVhZFVpbnQzMigpOwotICAgIHZhciB2ZXJzaW9uID0gZGVjb2Rlci5yZWFkVWlu
dDMyKCk7Ci0gICAgdmFsLmZyZXF1ZW5jeSA9IGRlY29kZXIuZGVjb2RlU3RydWN0KGNvZGVjLkRv
dWJsZSk7Ci0gICAgcmV0dXJuIHZhbDsKLSAgfTsKLQotICBTZW5zb3JDb25maWd1cmF0aW9uLmVu
Y29kZSA9IGZ1bmN0aW9uKGVuY29kZXIsIHZhbCkgewotICAgIHZhciBwYWNrZWQ7Ci0gICAgZW5j
b2Rlci53cml0ZVVpbnQzMihTZW5zb3JDb25maWd1cmF0aW9uLmVuY29kZWRTaXplKTsKLSAgICBl
bmNvZGVyLndyaXRlVWludDMyKDApOwotICAgIGVuY29kZXIuZW5jb2RlU3RydWN0KGNvZGVjLkRv
dWJsZSwgdmFsLmZyZXF1ZW5jeSk7Ci0gIH07Ci0gIGZ1bmN0aW9uIFNlbnNvcl9HZXREZWZhdWx0
Q29uZmlndXJhdGlvbl9QYXJhbXModmFsdWVzKSB7Ci0gICAgdGhpcy5pbml0RGVmYXVsdHNfKCk7
Ci0gICAgdGhpcy5pbml0RmllbGRzXyh2YWx1ZXMpOwotICB9Ci0KLQotICBTZW5zb3JfR2V0RGVm
YXVsdENvbmZpZ3VyYXRpb25fUGFyYW1zLnByb3RvdHlwZS5pbml0RGVmYXVsdHNfID0gZnVuY3Rp
b24oKSB7Ci0gIH07Ci0gIFNlbnNvcl9HZXREZWZhdWx0Q29uZmlndXJhdGlvbl9QYXJhbXMucHJv
dG90eXBlLmluaXRGaWVsZHNfID0gZnVuY3Rpb24oZmllbGRzKSB7Ci0gICAgZm9yKHZhciBmaWVs
ZCBpbiBmaWVsZHMpIHsKLSAgICAgICAgaWYgKHRoaXMuaGFzT3duUHJvcGVydHkoZmllbGQpKQot
ICAgICAgICAgIHRoaXNbZmllbGRdID0gZmllbGRzW2ZpZWxkXTsKLSAgICB9Ci0gIH07Ci0KLSAg
U2Vuc29yX0dldERlZmF1bHRDb25maWd1cmF0aW9uX1BhcmFtcy52YWxpZGF0ZSA9IGZ1bmN0aW9u
KG1lc3NhZ2VWYWxpZGF0b3IsIG9mZnNldCkgewotICAgIHZhciBlcnI7Ci0gICAgZXJyID0gbWVz
c2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdEhlYWRlcihvZmZzZXQsIGNvZGVjLmtTdHJ1Y3RI
ZWFkZXJTaXplKTsKLSAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5P
TkUpCi0gICAgICAgIHJldHVybiBlcnI7Ci0KLSAgICB2YXIga1ZlcnNpb25TaXplcyA9IFsKLSAg
ICAgIHt2ZXJzaW9uOiAwLCBudW1CeXRlczogOH0KLSAgICBdOwotICAgIGVyciA9IG1lc3NhZ2VW
YWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RWZXJzaW9uKG9mZnNldCwga1ZlcnNpb25TaXplcyk7Ci0g
ICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQotICAgICAgICBy
ZXR1cm4gZXJyOwotCi0gICAgcmV0dXJuIHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORTsK
LSAgfTsKLQotICBTZW5zb3JfR2V0RGVmYXVsdENvbmZpZ3VyYXRpb25fUGFyYW1zLmVuY29kZWRT
aXplID0gY29kZWMua1N0cnVjdEhlYWRlclNpemUgKyAwOwotCi0gIFNlbnNvcl9HZXREZWZhdWx0
Q29uZmlndXJhdGlvbl9QYXJhbXMuZGVjb2RlID0gZnVuY3Rpb24oZGVjb2RlcikgewotICAgIHZh
ciBwYWNrZWQ7Ci0gICAgdmFyIHZhbCA9IG5ldyBTZW5zb3JfR2V0RGVmYXVsdENvbmZpZ3VyYXRp
b25fUGFyYW1zKCk7Ci0gICAgdmFyIG51bWJlck9mQnl0ZXMgPSBkZWNvZGVyLnJlYWRVaW50MzIo
KTsKLSAgICB2YXIgdmVyc2lvbiA9IGRlY29kZXIucmVhZFVpbnQzMigpOwotICAgIHJldHVybiB2
YWw7Ci0gIH07Ci0KLSAgU2Vuc29yX0dldERlZmF1bHRDb25maWd1cmF0aW9uX1BhcmFtcy5lbmNv
ZGUgPSBmdW5jdGlvbihlbmNvZGVyLCB2YWwpIHsKLSAgICB2YXIgcGFja2VkOwotICAgIGVuY29k
ZXIud3JpdGVVaW50MzIoU2Vuc29yX0dldERlZmF1bHRDb25maWd1cmF0aW9uX1BhcmFtcy5lbmNv
ZGVkU2l6ZSk7Ci0gICAgZW5jb2Rlci53cml0ZVVpbnQzMigwKTsKLSAgfTsKLSAgZnVuY3Rpb24g
U2Vuc29yX0dldERlZmF1bHRDb25maWd1cmF0aW9uX1Jlc3BvbnNlUGFyYW1zKHZhbHVlcykgewot
ICAgIHRoaXMuaW5pdERlZmF1bHRzXygpOwotICAgIHRoaXMuaW5pdEZpZWxkc18odmFsdWVzKTsK
LSAgfQotCi0KLSAgU2Vuc29yX0dldERlZmF1bHRDb25maWd1cmF0aW9uX1Jlc3BvbnNlUGFyYW1z
LnByb3RvdHlwZS5pbml0RGVmYXVsdHNfID0gZnVuY3Rpb24oKSB7Ci0gICAgdGhpcy5jb25maWd1
cmF0aW9uID0gbnVsbDsKLSAgfTsKLSAgU2Vuc29yX0dldERlZmF1bHRDb25maWd1cmF0aW9uX1Jl
c3BvbnNlUGFyYW1zLnByb3RvdHlwZS5pbml0RmllbGRzXyA9IGZ1bmN0aW9uKGZpZWxkcykgewot
ICAgIGZvcih2YXIgZmllbGQgaW4gZmllbGRzKSB7Ci0gICAgICAgIGlmICh0aGlzLmhhc093blBy
b3BlcnR5KGZpZWxkKSkKLSAgICAgICAgICB0aGlzW2ZpZWxkXSA9IGZpZWxkc1tmaWVsZF07Ci0g
ICAgfQotICB9OwotCi0gIFNlbnNvcl9HZXREZWZhdWx0Q29uZmlndXJhdGlvbl9SZXNwb25zZVBh
cmFtcy52YWxpZGF0ZSA9IGZ1bmN0aW9uKG1lc3NhZ2VWYWxpZGF0b3IsIG9mZnNldCkgewotICAg
IHZhciBlcnI7Ci0gICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdEhlYWRl
cihvZmZzZXQsIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplKTsKLSAgICBpZiAoZXJyICE9PSB2YWxp
ZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCi0gICAgICAgIHJldHVybiBlcnI7Ci0KLSAgICB2
YXIga1ZlcnNpb25TaXplcyA9IFsKLSAgICAgIHt2ZXJzaW9uOiAwLCBudW1CeXRlczogMTZ9Ci0g
ICAgXTsKLSAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0VmVyc2lvbihv
ZmZzZXQsIGtWZXJzaW9uU2l6ZXMpOwotICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0
aW9uRXJyb3IuTk9ORSkKLSAgICAgICAgcmV0dXJuIGVycjsKLQotCi0gICAgLy8gdmFsaWRhdGUg
U2Vuc29yX0dldERlZmF1bHRDb25maWd1cmF0aW9uX1Jlc3BvbnNlUGFyYW1zLmNvbmZpZ3VyYXRp
b24KLSAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0UG9pbnRlcihvZmZz
ZXQgKyBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDAsIFNlbnNvckNvbmZpZ3VyYXRpb24sIGZh
bHNlKTsKLSAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCi0g
ICAgICAgIHJldHVybiBlcnI7Ci0KLSAgICByZXR1cm4gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJv
ci5OT05FOwotICB9OwotCi0gIFNlbnNvcl9HZXREZWZhdWx0Q29uZmlndXJhdGlvbl9SZXNwb25z
ZVBhcmFtcy5lbmNvZGVkU2l6ZSA9IGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgODsKLQotICBT
ZW5zb3JfR2V0RGVmYXVsdENvbmZpZ3VyYXRpb25fUmVzcG9uc2VQYXJhbXMuZGVjb2RlID0gZnVu
Y3Rpb24oZGVjb2RlcikgewotICAgIHZhciBwYWNrZWQ7Ci0gICAgdmFyIHZhbCA9IG5ldyBTZW5z
b3JfR2V0RGVmYXVsdENvbmZpZ3VyYXRpb25fUmVzcG9uc2VQYXJhbXMoKTsKLSAgICB2YXIgbnVt
YmVyT2ZCeXRlcyA9IGRlY29kZXIucmVhZFVpbnQzMigpOwotICAgIHZhciB2ZXJzaW9uID0gZGVj
b2Rlci5yZWFkVWludDMyKCk7Ci0gICAgdmFsLmNvbmZpZ3VyYXRpb24gPSBkZWNvZGVyLmRlY29k
ZVN0cnVjdFBvaW50ZXIoU2Vuc29yQ29uZmlndXJhdGlvbik7Ci0gICAgcmV0dXJuIHZhbDsKLSAg
fTsKLQotICBTZW5zb3JfR2V0RGVmYXVsdENvbmZpZ3VyYXRpb25fUmVzcG9uc2VQYXJhbXMuZW5j
b2RlID0gZnVuY3Rpb24oZW5jb2RlciwgdmFsKSB7Ci0gICAgdmFyIHBhY2tlZDsKLSAgICBlbmNv
ZGVyLndyaXRlVWludDMyKFNlbnNvcl9HZXREZWZhdWx0Q29uZmlndXJhdGlvbl9SZXNwb25zZVBh
cmFtcy5lbmNvZGVkU2l6ZSk7Ci0gICAgZW5jb2Rlci53cml0ZVVpbnQzMigwKTsKLSAgICBlbmNv
ZGVyLmVuY29kZVN0cnVjdFBvaW50ZXIoU2Vuc29yQ29uZmlndXJhdGlvbiwgdmFsLmNvbmZpZ3Vy
YXRpb24pOwotICB9OwotICBmdW5jdGlvbiBTZW5zb3JfQWRkQ29uZmlndXJhdGlvbl9QYXJhbXMo
dmFsdWVzKSB7Ci0gICAgdGhpcy5pbml0RGVmYXVsdHNfKCk7Ci0gICAgdGhpcy5pbml0RmllbGRz
Xyh2YWx1ZXMpOwotICB9Ci0KLQotICBTZW5zb3JfQWRkQ29uZmlndXJhdGlvbl9QYXJhbXMucHJv
dG90eXBlLmluaXREZWZhdWx0c18gPSBmdW5jdGlvbigpIHsKLSAgICB0aGlzLmNvbmZpZ3VyYXRp
b24gPSBudWxsOwotICB9OwotICBTZW5zb3JfQWRkQ29uZmlndXJhdGlvbl9QYXJhbXMucHJvdG90
eXBlLmluaXRGaWVsZHNfID0gZnVuY3Rpb24oZmllbGRzKSB7Ci0gICAgZm9yKHZhciBmaWVsZCBp
biBmaWVsZHMpIHsKLSAgICAgICAgaWYgKHRoaXMuaGFzT3duUHJvcGVydHkoZmllbGQpKQotICAg
ICAgICAgIHRoaXNbZmllbGRdID0gZmllbGRzW2ZpZWxkXTsKLSAgICB9Ci0gIH07Ci0KLSAgU2Vu
c29yX0FkZENvbmZpZ3VyYXRpb25fUGFyYW1zLnZhbGlkYXRlID0gZnVuY3Rpb24obWVzc2FnZVZh
bGlkYXRvciwgb2Zmc2V0KSB7Ci0gICAgdmFyIGVycjsKLSAgICBlcnIgPSBtZXNzYWdlVmFsaWRh
dG9yLnZhbGlkYXRlU3RydWN0SGVhZGVyKG9mZnNldCwgY29kZWMua1N0cnVjdEhlYWRlclNpemUp
OwotICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKLSAgICAg
ICAgcmV0dXJuIGVycjsKLQotICAgIHZhciBrVmVyc2lvblNpemVzID0gWwotICAgICAge3ZlcnNp
b246IDAsIG51bUJ5dGVzOiAxNn0KLSAgICBdOwotICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3Iu
dmFsaWRhdGVTdHJ1Y3RWZXJzaW9uKG9mZnNldCwga1ZlcnNpb25TaXplcyk7Ci0gICAgaWYgKGVy
ciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQotICAgICAgICByZXR1cm4gZXJy
OwotCi0KLSAgICAvLyB2YWxpZGF0ZSBTZW5zb3JfQWRkQ29uZmlndXJhdGlvbl9QYXJhbXMuY29u
ZmlndXJhdGlvbgotICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RQb2lu
dGVyKG9mZnNldCArIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgMCwgU2Vuc29yQ29uZmlndXJh
dGlvbiwgZmFsc2UpOwotICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3Iu
Tk9ORSkKLSAgICAgICAgcmV0dXJuIGVycjsKLQotICAgIHJldHVybiB2YWxpZGF0b3IudmFsaWRh
dGlvbkVycm9yLk5PTkU7Ci0gIH07Ci0KLSAgU2Vuc29yX0FkZENvbmZpZ3VyYXRpb25fUGFyYW1z
LmVuY29kZWRTaXplID0gY29kZWMua1N0cnVjdEhlYWRlclNpemUgKyA4OwotCi0gIFNlbnNvcl9B
ZGRDb25maWd1cmF0aW9uX1BhcmFtcy5kZWNvZGUgPSBmdW5jdGlvbihkZWNvZGVyKSB7Ci0gICAg
dmFyIHBhY2tlZDsKLSAgICB2YXIgdmFsID0gbmV3IFNlbnNvcl9BZGRDb25maWd1cmF0aW9uX1Bh
cmFtcygpOwotICAgIHZhciBudW1iZXJPZkJ5dGVzID0gZGVjb2Rlci5yZWFkVWludDMyKCk7Ci0g
ICAgdmFyIHZlcnNpb24gPSBkZWNvZGVyLnJlYWRVaW50MzIoKTsKLSAgICB2YWwuY29uZmlndXJh
dGlvbiA9IGRlY29kZXIuZGVjb2RlU3RydWN0UG9pbnRlcihTZW5zb3JDb25maWd1cmF0aW9uKTsK
LSAgICByZXR1cm4gdmFsOwotICB9OwotCi0gIFNlbnNvcl9BZGRDb25maWd1cmF0aW9uX1BhcmFt
cy5lbmNvZGUgPSBmdW5jdGlvbihlbmNvZGVyLCB2YWwpIHsKLSAgICB2YXIgcGFja2VkOwotICAg
IGVuY29kZXIud3JpdGVVaW50MzIoU2Vuc29yX0FkZENvbmZpZ3VyYXRpb25fUGFyYW1zLmVuY29k
ZWRTaXplKTsKLSAgICBlbmNvZGVyLndyaXRlVWludDMyKDApOwotICAgIGVuY29kZXIuZW5jb2Rl
U3RydWN0UG9pbnRlcihTZW5zb3JDb25maWd1cmF0aW9uLCB2YWwuY29uZmlndXJhdGlvbik7Ci0g
IH07Ci0gIGZ1bmN0aW9uIFNlbnNvcl9BZGRDb25maWd1cmF0aW9uX1Jlc3BvbnNlUGFyYW1zKHZh
bHVlcykgewotICAgIHRoaXMuaW5pdERlZmF1bHRzXygpOwotICAgIHRoaXMuaW5pdEZpZWxkc18o
dmFsdWVzKTsKLSAgfQotCi0KLSAgU2Vuc29yX0FkZENvbmZpZ3VyYXRpb25fUmVzcG9uc2VQYXJh
bXMucHJvdG90eXBlLmluaXREZWZhdWx0c18gPSBmdW5jdGlvbigpIHsKLSAgICB0aGlzLnN1Y2Nl
c3MgPSBmYWxzZTsKLSAgfTsKLSAgU2Vuc29yX0FkZENvbmZpZ3VyYXRpb25fUmVzcG9uc2VQYXJh
bXMucHJvdG90eXBlLmluaXRGaWVsZHNfID0gZnVuY3Rpb24oZmllbGRzKSB7Ci0gICAgZm9yKHZh
ciBmaWVsZCBpbiBmaWVsZHMpIHsKLSAgICAgICAgaWYgKHRoaXMuaGFzT3duUHJvcGVydHkoZmll
bGQpKQotICAgICAgICAgIHRoaXNbZmllbGRdID0gZmllbGRzW2ZpZWxkXTsKLSAgICB9Ci0gIH07
Ci0KLSAgU2Vuc29yX0FkZENvbmZpZ3VyYXRpb25fUmVzcG9uc2VQYXJhbXMudmFsaWRhdGUgPSBm
dW5jdGlvbihtZXNzYWdlVmFsaWRhdG9yLCBvZmZzZXQpIHsKLSAgICB2YXIgZXJyOwotICAgIGVy
ciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RIZWFkZXIob2Zmc2V0LCBjb2RlYy5r
U3RydWN0SGVhZGVyU2l6ZSk7Ci0gICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25F
cnJvci5OT05FKQotICAgICAgICByZXR1cm4gZXJyOwotCi0gICAgdmFyIGtWZXJzaW9uU2l6ZXMg
PSBbCi0gICAgICB7dmVyc2lvbjogMCwgbnVtQnl0ZXM6IDE2fQotICAgIF07Ci0gICAgZXJyID0g
bWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdFZlcnNpb24ob2Zmc2V0LCBrVmVyc2lvblNp
emVzKTsKLSAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCi0g
ICAgICAgIHJldHVybiBlcnI7Ci0KLQotICAgIHJldHVybiB2YWxpZGF0b3IudmFsaWRhdGlvbkVy
cm9yLk5PTkU7Ci0gIH07Ci0KLSAgU2Vuc29yX0FkZENvbmZpZ3VyYXRpb25fUmVzcG9uc2VQYXJh
bXMuZW5jb2RlZFNpemUgPSBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDg7Ci0KLSAgU2Vuc29y
X0FkZENvbmZpZ3VyYXRpb25fUmVzcG9uc2VQYXJhbXMuZGVjb2RlID0gZnVuY3Rpb24oZGVjb2Rl
cikgewotICAgIHZhciBwYWNrZWQ7Ci0gICAgdmFyIHZhbCA9IG5ldyBTZW5zb3JfQWRkQ29uZmln
dXJhdGlvbl9SZXNwb25zZVBhcmFtcygpOwotICAgIHZhciBudW1iZXJPZkJ5dGVzID0gZGVjb2Rl
ci5yZWFkVWludDMyKCk7Ci0gICAgdmFyIHZlcnNpb24gPSBkZWNvZGVyLnJlYWRVaW50MzIoKTsK
LSAgICBwYWNrZWQgPSBkZWNvZGVyLnJlYWRVaW50OCgpOwotICAgIHZhbC5zdWNjZXNzID0gKHBh
Y2tlZCA+PiAwKSAmIDEgPyB0cnVlIDogZmFsc2U7Ci0gICAgZGVjb2Rlci5za2lwKDEpOwotICAg
IGRlY29kZXIuc2tpcCgxKTsKLSAgICBkZWNvZGVyLnNraXAoMSk7Ci0gICAgZGVjb2Rlci5za2lw
KDEpOwotICAgIGRlY29kZXIuc2tpcCgxKTsKLSAgICBkZWNvZGVyLnNraXAoMSk7Ci0gICAgZGVj
b2Rlci5za2lwKDEpOwotICAgIHJldHVybiB2YWw7Ci0gIH07Ci0KLSAgU2Vuc29yX0FkZENvbmZp
Z3VyYXRpb25fUmVzcG9uc2VQYXJhbXMuZW5jb2RlID0gZnVuY3Rpb24oZW5jb2RlciwgdmFsKSB7
Ci0gICAgdmFyIHBhY2tlZDsKLSAgICBlbmNvZGVyLndyaXRlVWludDMyKFNlbnNvcl9BZGRDb25m
aWd1cmF0aW9uX1Jlc3BvbnNlUGFyYW1zLmVuY29kZWRTaXplKTsKLSAgICBlbmNvZGVyLndyaXRl
VWludDMyKDApOwotICAgIHBhY2tlZCA9IDA7Ci0gICAgcGFja2VkIHw9ICh2YWwuc3VjY2VzcyAm
IDEpIDw8IDAKLSAgICBlbmNvZGVyLndyaXRlVWludDgocGFja2VkKTsKLSAgICBlbmNvZGVyLnNr
aXAoMSk7Ci0gICAgZW5jb2Rlci5za2lwKDEpOwotICAgIGVuY29kZXIuc2tpcCgxKTsKLSAgICBl
bmNvZGVyLnNraXAoMSk7Ci0gICAgZW5jb2Rlci5za2lwKDEpOwotICAgIGVuY29kZXIuc2tpcCgx
KTsKLSAgICBlbmNvZGVyLnNraXAoMSk7Ci0gIH07Ci0gIGZ1bmN0aW9uIFNlbnNvcl9SZW1vdmVD
b25maWd1cmF0aW9uX1BhcmFtcyh2YWx1ZXMpIHsKLSAgICB0aGlzLmluaXREZWZhdWx0c18oKTsK
LSAgICB0aGlzLmluaXRGaWVsZHNfKHZhbHVlcyk7Ci0gIH0KLQotCi0gIFNlbnNvcl9SZW1vdmVD
b25maWd1cmF0aW9uX1BhcmFtcy5wcm90b3R5cGUuaW5pdERlZmF1bHRzXyA9IGZ1bmN0aW9uKCkg
ewotICAgIHRoaXMuY29uZmlndXJhdGlvbiA9IG51bGw7Ci0gIH07Ci0gIFNlbnNvcl9SZW1vdmVD
b25maWd1cmF0aW9uX1BhcmFtcy5wcm90b3R5cGUuaW5pdEZpZWxkc18gPSBmdW5jdGlvbihmaWVs
ZHMpIHsKLSAgICBmb3IodmFyIGZpZWxkIGluIGZpZWxkcykgewotICAgICAgICBpZiAodGhpcy5o
YXNPd25Qcm9wZXJ0eShmaWVsZCkpCi0gICAgICAgICAgdGhpc1tmaWVsZF0gPSBmaWVsZHNbZmll
bGRdOwotICAgIH0KLSAgfTsKLQotICBTZW5zb3JfUmVtb3ZlQ29uZmlndXJhdGlvbl9QYXJhbXMu
dmFsaWRhdGUgPSBmdW5jdGlvbihtZXNzYWdlVmFsaWRhdG9yLCBvZmZzZXQpIHsKLSAgICB2YXIg
ZXJyOwotICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RIZWFkZXIob2Zm
c2V0LCBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSk7Ci0gICAgaWYgKGVyciAhPT0gdmFsaWRhdG9y
LnZhbGlkYXRpb25FcnJvci5OT05FKQotICAgICAgICByZXR1cm4gZXJyOwotCi0gICAgdmFyIGtW
ZXJzaW9uU2l6ZXMgPSBbCi0gICAgICB7dmVyc2lvbjogMCwgbnVtQnl0ZXM6IDE2fQotICAgIF07
Ci0gICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdFZlcnNpb24ob2Zmc2V0
LCBrVmVyc2lvblNpemVzKTsKLSAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVy
cm9yLk5PTkUpCi0gICAgICAgIHJldHVybiBlcnI7Ci0KLQotICAgIC8vIHZhbGlkYXRlIFNlbnNv
cl9SZW1vdmVDb25maWd1cmF0aW9uX1BhcmFtcy5jb25maWd1cmF0aW9uCi0gICAgZXJyID0gbWVz
c2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdFBvaW50ZXIob2Zmc2V0ICsgY29kZWMua1N0cnVj
dEhlYWRlclNpemUgKyAwLCBTZW5zb3JDb25maWd1cmF0aW9uLCBmYWxzZSk7Ci0gICAgaWYgKGVy
ciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQotICAgICAgICByZXR1cm4gZXJy
OwotCi0gICAgcmV0dXJuIHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORTsKLSAgfTsKLQot
ICBTZW5zb3JfUmVtb3ZlQ29uZmlndXJhdGlvbl9QYXJhbXMuZW5jb2RlZFNpemUgPSBjb2RlYy5r
U3RydWN0SGVhZGVyU2l6ZSArIDg7Ci0KLSAgU2Vuc29yX1JlbW92ZUNvbmZpZ3VyYXRpb25fUGFy
YW1zLmRlY29kZSA9IGZ1bmN0aW9uKGRlY29kZXIpIHsKLSAgICB2YXIgcGFja2VkOwotICAgIHZh
ciB2YWwgPSBuZXcgU2Vuc29yX1JlbW92ZUNvbmZpZ3VyYXRpb25fUGFyYW1zKCk7Ci0gICAgdmFy
IG51bWJlck9mQnl0ZXMgPSBkZWNvZGVyLnJlYWRVaW50MzIoKTsKLSAgICB2YXIgdmVyc2lvbiA9
IGRlY29kZXIucmVhZFVpbnQzMigpOwotICAgIHZhbC5jb25maWd1cmF0aW9uID0gZGVjb2Rlci5k
ZWNvZGVTdHJ1Y3RQb2ludGVyKFNlbnNvckNvbmZpZ3VyYXRpb24pOwotICAgIHJldHVybiB2YWw7
Ci0gIH07Ci0KLSAgU2Vuc29yX1JlbW92ZUNvbmZpZ3VyYXRpb25fUGFyYW1zLmVuY29kZSA9IGZ1
bmN0aW9uKGVuY29kZXIsIHZhbCkgewotICAgIHZhciBwYWNrZWQ7Ci0gICAgZW5jb2Rlci53cml0
ZVVpbnQzMihTZW5zb3JfUmVtb3ZlQ29uZmlndXJhdGlvbl9QYXJhbXMuZW5jb2RlZFNpemUpOwot
ICAgIGVuY29kZXIud3JpdGVVaW50MzIoMCk7Ci0gICAgZW5jb2Rlci5lbmNvZGVTdHJ1Y3RQb2lu
dGVyKFNlbnNvckNvbmZpZ3VyYXRpb24sIHZhbC5jb25maWd1cmF0aW9uKTsKLSAgfTsKLSAgZnVu
Y3Rpb24gU2Vuc29yX1N1c3BlbmRfUGFyYW1zKHZhbHVlcykgewotICAgIHRoaXMuaW5pdERlZmF1
bHRzXygpOwotICAgIHRoaXMuaW5pdEZpZWxkc18odmFsdWVzKTsKLSAgfQotCi0KLSAgU2Vuc29y
X1N1c3BlbmRfUGFyYW1zLnByb3RvdHlwZS5pbml0RGVmYXVsdHNfID0gZnVuY3Rpb24oKSB7Ci0g
IH07Ci0gIFNlbnNvcl9TdXNwZW5kX1BhcmFtcy5wcm90b3R5cGUuaW5pdEZpZWxkc18gPSBmdW5j
dGlvbihmaWVsZHMpIHsKLSAgICBmb3IodmFyIGZpZWxkIGluIGZpZWxkcykgewotICAgICAgICBp
ZiAodGhpcy5oYXNPd25Qcm9wZXJ0eShmaWVsZCkpCi0gICAgICAgICAgdGhpc1tmaWVsZF0gPSBm
aWVsZHNbZmllbGRdOwotICAgIH0KLSAgfTsKLQotICBTZW5zb3JfU3VzcGVuZF9QYXJhbXMudmFs
aWRhdGUgPSBmdW5jdGlvbihtZXNzYWdlVmFsaWRhdG9yLCBvZmZzZXQpIHsKLSAgICB2YXIgZXJy
OwotICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RIZWFkZXIob2Zmc2V0
LCBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSk7Ci0gICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZh
bGlkYXRpb25FcnJvci5OT05FKQotICAgICAgICByZXR1cm4gZXJyOwotCi0gICAgdmFyIGtWZXJz
aW9uU2l6ZXMgPSBbCi0gICAgICB7dmVyc2lvbjogMCwgbnVtQnl0ZXM6IDh9Ci0gICAgXTsKLSAg
ICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0VmVyc2lvbihvZmZzZXQsIGtW
ZXJzaW9uU2l6ZXMpOwotICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3Iu
Tk9ORSkKLSAgICAgICAgcmV0dXJuIGVycjsKLQotICAgIHJldHVybiB2YWxpZGF0b3IudmFsaWRh
dGlvbkVycm9yLk5PTkU7Ci0gIH07Ci0KLSAgU2Vuc29yX1N1c3BlbmRfUGFyYW1zLmVuY29kZWRT
aXplID0gY29kZWMua1N0cnVjdEhlYWRlclNpemUgKyAwOwotCi0gIFNlbnNvcl9TdXNwZW5kX1Bh
cmFtcy5kZWNvZGUgPSBmdW5jdGlvbihkZWNvZGVyKSB7Ci0gICAgdmFyIHBhY2tlZDsKLSAgICB2
YXIgdmFsID0gbmV3IFNlbnNvcl9TdXNwZW5kX1BhcmFtcygpOwotICAgIHZhciBudW1iZXJPZkJ5
dGVzID0gZGVjb2Rlci5yZWFkVWludDMyKCk7Ci0gICAgdmFyIHZlcnNpb24gPSBkZWNvZGVyLnJl
YWRVaW50MzIoKTsKLSAgICByZXR1cm4gdmFsOwotICB9OwotCi0gIFNlbnNvcl9TdXNwZW5kX1Bh
cmFtcy5lbmNvZGUgPSBmdW5jdGlvbihlbmNvZGVyLCB2YWwpIHsKLSAgICB2YXIgcGFja2VkOwot
ICAgIGVuY29kZXIud3JpdGVVaW50MzIoU2Vuc29yX1N1c3BlbmRfUGFyYW1zLmVuY29kZWRTaXpl
KTsKLSAgICBlbmNvZGVyLndyaXRlVWludDMyKDApOwotICB9OwotICBmdW5jdGlvbiBTZW5zb3Jf
UmVzdW1lX1BhcmFtcyh2YWx1ZXMpIHsKLSAgICB0aGlzLmluaXREZWZhdWx0c18oKTsKLSAgICB0
aGlzLmluaXRGaWVsZHNfKHZhbHVlcyk7Ci0gIH0KLQotCi0gIFNlbnNvcl9SZXN1bWVfUGFyYW1z
LnByb3RvdHlwZS5pbml0RGVmYXVsdHNfID0gZnVuY3Rpb24oKSB7Ci0gIH07Ci0gIFNlbnNvcl9S
ZXN1bWVfUGFyYW1zLnByb3RvdHlwZS5pbml0RmllbGRzXyA9IGZ1bmN0aW9uKGZpZWxkcykgewot
ICAgIGZvcih2YXIgZmllbGQgaW4gZmllbGRzKSB7Ci0gICAgICAgIGlmICh0aGlzLmhhc093blBy
b3BlcnR5KGZpZWxkKSkKLSAgICAgICAgICB0aGlzW2ZpZWxkXSA9IGZpZWxkc1tmaWVsZF07Ci0g
ICAgfQotICB9OwotCi0gIFNlbnNvcl9SZXN1bWVfUGFyYW1zLnZhbGlkYXRlID0gZnVuY3Rpb24o
bWVzc2FnZVZhbGlkYXRvciwgb2Zmc2V0KSB7Ci0gICAgdmFyIGVycjsKLSAgICBlcnIgPSBtZXNz
YWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0SGVhZGVyKG9mZnNldCwgY29kZWMua1N0cnVjdEhl
YWRlclNpemUpOwotICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9O
RSkKLSAgICAgICAgcmV0dXJuIGVycjsKLQotICAgIHZhciBrVmVyc2lvblNpemVzID0gWwotICAg
ICAge3ZlcnNpb246IDAsIG51bUJ5dGVzOiA4fQotICAgIF07Ci0gICAgZXJyID0gbWVzc2FnZVZh
bGlkYXRvci52YWxpZGF0ZVN0cnVjdFZlcnNpb24ob2Zmc2V0LCBrVmVyc2lvblNpemVzKTsKLSAg
ICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCi0gICAgICAgIHJl
dHVybiBlcnI7Ci0KLSAgICByZXR1cm4gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FOwot
ICB9OwotCi0gIFNlbnNvcl9SZXN1bWVfUGFyYW1zLmVuY29kZWRTaXplID0gY29kZWMua1N0cnVj
dEhlYWRlclNpemUgKyAwOwotCi0gIFNlbnNvcl9SZXN1bWVfUGFyYW1zLmRlY29kZSA9IGZ1bmN0
aW9uKGRlY29kZXIpIHsKLSAgICB2YXIgcGFja2VkOwotICAgIHZhciB2YWwgPSBuZXcgU2Vuc29y
X1Jlc3VtZV9QYXJhbXMoKTsKLSAgICB2YXIgbnVtYmVyT2ZCeXRlcyA9IGRlY29kZXIucmVhZFVp
bnQzMigpOwotICAgIHZhciB2ZXJzaW9uID0gZGVjb2Rlci5yZWFkVWludDMyKCk7Ci0gICAgcmV0
dXJuIHZhbDsKLSAgfTsKLQotICBTZW5zb3JfUmVzdW1lX1BhcmFtcy5lbmNvZGUgPSBmdW5jdGlv
bihlbmNvZGVyLCB2YWwpIHsKLSAgICB2YXIgcGFja2VkOwotICAgIGVuY29kZXIud3JpdGVVaW50
MzIoU2Vuc29yX1Jlc3VtZV9QYXJhbXMuZW5jb2RlZFNpemUpOwotICAgIGVuY29kZXIud3JpdGVV
aW50MzIoMCk7Ci0gIH07Ci0gIGZ1bmN0aW9uIFNlbnNvcl9Db25maWd1cmVSZWFkaW5nQ2hhbmdl
Tm90aWZpY2F0aW9uc19QYXJhbXModmFsdWVzKSB7Ci0gICAgdGhpcy5pbml0RGVmYXVsdHNfKCk7
Ci0gICAgdGhpcy5pbml0RmllbGRzXyh2YWx1ZXMpOwotICB9Ci0KLQotICBTZW5zb3JfQ29uZmln
dXJlUmVhZGluZ0NoYW5nZU5vdGlmaWNhdGlvbnNfUGFyYW1zLnByb3RvdHlwZS5pbml0RGVmYXVs
dHNfID0gZnVuY3Rpb24oKSB7Ci0gICAgdGhpcy5lbmFibGVkID0gZmFsc2U7Ci0gIH07Ci0gIFNl
bnNvcl9Db25maWd1cmVSZWFkaW5nQ2hhbmdlTm90aWZpY2F0aW9uc19QYXJhbXMucHJvdG90eXBl
LmluaXRGaWVsZHNfID0gZnVuY3Rpb24oZmllbGRzKSB7Ci0gICAgZm9yKHZhciBmaWVsZCBpbiBm
aWVsZHMpIHsKLSAgICAgICAgaWYgKHRoaXMuaGFzT3duUHJvcGVydHkoZmllbGQpKQotICAgICAg
ICAgIHRoaXNbZmllbGRdID0gZmllbGRzW2ZpZWxkXTsKLSAgICB9Ci0gIH07Ci0KLSAgU2Vuc29y
X0NvbmZpZ3VyZVJlYWRpbmdDaGFuZ2VOb3RpZmljYXRpb25zX1BhcmFtcy52YWxpZGF0ZSA9IGZ1
bmN0aW9uKG1lc3NhZ2VWYWxpZGF0b3IsIG9mZnNldCkgewotICAgIHZhciBlcnI7Ci0gICAgZXJy
ID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdEhlYWRlcihvZmZzZXQsIGNvZGVjLmtT
dHJ1Y3RIZWFkZXJTaXplKTsKLSAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVy
cm9yLk5PTkUpCi0gICAgICAgIHJldHVybiBlcnI7Ci0KLSAgICB2YXIga1ZlcnNpb25TaXplcyA9
IFsKLSAgICAgIHt2ZXJzaW9uOiAwLCBudW1CeXRlczogMTZ9Ci0gICAgXTsKLSAgICBlcnIgPSBt
ZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0VmVyc2lvbihvZmZzZXQsIGtWZXJzaW9uU2l6
ZXMpOwotICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKLSAg
ICAgICAgcmV0dXJuIGVycjsKLQotCi0gICAgcmV0dXJuIHZhbGlkYXRvci52YWxpZGF0aW9uRXJy
b3IuTk9ORTsKLSAgfTsKLQotICBTZW5zb3JfQ29uZmlndXJlUmVhZGluZ0NoYW5nZU5vdGlmaWNh
dGlvbnNfUGFyYW1zLmVuY29kZWRTaXplID0gY29kZWMua1N0cnVjdEhlYWRlclNpemUgKyA4Owot
Ci0gIFNlbnNvcl9Db25maWd1cmVSZWFkaW5nQ2hhbmdlTm90aWZpY2F0aW9uc19QYXJhbXMuZGVj
b2RlID0gZnVuY3Rpb24oZGVjb2RlcikgewotICAgIHZhciBwYWNrZWQ7Ci0gICAgdmFyIHZhbCA9
IG5ldyBTZW5zb3JfQ29uZmlndXJlUmVhZGluZ0NoYW5nZU5vdGlmaWNhdGlvbnNfUGFyYW1zKCk7
Ci0gICAgdmFyIG51bWJlck9mQnl0ZXMgPSBkZWNvZGVyLnJlYWRVaW50MzIoKTsKLSAgICB2YXIg
dmVyc2lvbiA9IGRlY29kZXIucmVhZFVpbnQzMigpOwotICAgIHBhY2tlZCA9IGRlY29kZXIucmVh
ZFVpbnQ4KCk7Ci0gICAgdmFsLmVuYWJsZWQgPSAocGFja2VkID4+IDApICYgMSA/IHRydWUgOiBm
YWxzZTsKLSAgICBkZWNvZGVyLnNraXAoMSk7Ci0gICAgZGVjb2Rlci5za2lwKDEpOwotICAgIGRl
Y29kZXIuc2tpcCgxKTsKLSAgICBkZWNvZGVyLnNraXAoMSk7Ci0gICAgZGVjb2Rlci5za2lwKDEp
OwotICAgIGRlY29kZXIuc2tpcCgxKTsKLSAgICBkZWNvZGVyLnNraXAoMSk7Ci0gICAgcmV0dXJu
IHZhbDsKLSAgfTsKLQotICBTZW5zb3JfQ29uZmlndXJlUmVhZGluZ0NoYW5nZU5vdGlmaWNhdGlv
bnNfUGFyYW1zLmVuY29kZSA9IGZ1bmN0aW9uKGVuY29kZXIsIHZhbCkgewotICAgIHZhciBwYWNr
ZWQ7Ci0gICAgZW5jb2Rlci53cml0ZVVpbnQzMihTZW5zb3JfQ29uZmlndXJlUmVhZGluZ0NoYW5n
ZU5vdGlmaWNhdGlvbnNfUGFyYW1zLmVuY29kZWRTaXplKTsKLSAgICBlbmNvZGVyLndyaXRlVWlu
dDMyKDApOwotICAgIHBhY2tlZCA9IDA7Ci0gICAgcGFja2VkIHw9ICh2YWwuZW5hYmxlZCAmIDEp
IDw8IDAKLSAgICBlbmNvZGVyLndyaXRlVWludDgocGFja2VkKTsKLSAgICBlbmNvZGVyLnNraXAo
MSk7Ci0gICAgZW5jb2Rlci5za2lwKDEpOwotICAgIGVuY29kZXIuc2tpcCgxKTsKLSAgICBlbmNv
ZGVyLnNraXAoMSk7Ci0gICAgZW5jb2Rlci5za2lwKDEpOwotICAgIGVuY29kZXIuc2tpcCgxKTsK
LSAgICBlbmNvZGVyLnNraXAoMSk7Ci0gIH07Ci0gIGZ1bmN0aW9uIFNlbnNvckNsaWVudF9SYWlz
ZUVycm9yX1BhcmFtcyh2YWx1ZXMpIHsKLSAgICB0aGlzLmluaXREZWZhdWx0c18oKTsKLSAgICB0
aGlzLmluaXRGaWVsZHNfKHZhbHVlcyk7Ci0gIH0KLQotCi0gIFNlbnNvckNsaWVudF9SYWlzZUVy
cm9yX1BhcmFtcy5wcm90b3R5cGUuaW5pdERlZmF1bHRzXyA9IGZ1bmN0aW9uKCkgewotICB9Owot
ICBTZW5zb3JDbGllbnRfUmFpc2VFcnJvcl9QYXJhbXMucHJvdG90eXBlLmluaXRGaWVsZHNfID0g
ZnVuY3Rpb24oZmllbGRzKSB7Ci0gICAgZm9yKHZhciBmaWVsZCBpbiBmaWVsZHMpIHsKLSAgICAg
ICAgaWYgKHRoaXMuaGFzT3duUHJvcGVydHkoZmllbGQpKQotICAgICAgICAgIHRoaXNbZmllbGRd
ID0gZmllbGRzW2ZpZWxkXTsKLSAgICB9Ci0gIH07Ci0KLSAgU2Vuc29yQ2xpZW50X1JhaXNlRXJy
b3JfUGFyYW1zLnZhbGlkYXRlID0gZnVuY3Rpb24obWVzc2FnZVZhbGlkYXRvciwgb2Zmc2V0KSB7
Ci0gICAgdmFyIGVycjsKLSAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0
SGVhZGVyKG9mZnNldCwgY29kZWMua1N0cnVjdEhlYWRlclNpemUpOwotICAgIGlmIChlcnIgIT09
IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKLSAgICAgICAgcmV0dXJuIGVycjsKLQot
ICAgIHZhciBrVmVyc2lvblNpemVzID0gWwotICAgICAge3ZlcnNpb246IDAsIG51bUJ5dGVzOiA4
fQotICAgIF07Ci0gICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdFZlcnNp
b24ob2Zmc2V0LCBrVmVyc2lvblNpemVzKTsKLSAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFs
aWRhdGlvbkVycm9yLk5PTkUpCi0gICAgICAgIHJldHVybiBlcnI7Ci0KLSAgICByZXR1cm4gdmFs
aWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FOwotICB9OwotCi0gIFNlbnNvckNsaWVudF9SYWlz
ZUVycm9yX1BhcmFtcy5lbmNvZGVkU2l6ZSA9IGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgMDsK
LQotICBTZW5zb3JDbGllbnRfUmFpc2VFcnJvcl9QYXJhbXMuZGVjb2RlID0gZnVuY3Rpb24oZGVj
b2RlcikgewotICAgIHZhciBwYWNrZWQ7Ci0gICAgdmFyIHZhbCA9IG5ldyBTZW5zb3JDbGllbnRf
UmFpc2VFcnJvcl9QYXJhbXMoKTsKLSAgICB2YXIgbnVtYmVyT2ZCeXRlcyA9IGRlY29kZXIucmVh
ZFVpbnQzMigpOwotICAgIHZhciB2ZXJzaW9uID0gZGVjb2Rlci5yZWFkVWludDMyKCk7Ci0gICAg
cmV0dXJuIHZhbDsKLSAgfTsKLQotICBTZW5zb3JDbGllbnRfUmFpc2VFcnJvcl9QYXJhbXMuZW5j
b2RlID0gZnVuY3Rpb24oZW5jb2RlciwgdmFsKSB7Ci0gICAgdmFyIHBhY2tlZDsKLSAgICBlbmNv
ZGVyLndyaXRlVWludDMyKFNlbnNvckNsaWVudF9SYWlzZUVycm9yX1BhcmFtcy5lbmNvZGVkU2l6
ZSk7Ci0gICAgZW5jb2Rlci53cml0ZVVpbnQzMigwKTsKLSAgfTsKLSAgZnVuY3Rpb24gU2Vuc29y
Q2xpZW50X1NlbnNvclJlYWRpbmdDaGFuZ2VkX1BhcmFtcyh2YWx1ZXMpIHsKLSAgICB0aGlzLmlu
aXREZWZhdWx0c18oKTsKLSAgICB0aGlzLmluaXRGaWVsZHNfKHZhbHVlcyk7Ci0gIH0KLQotCi0g
IFNlbnNvckNsaWVudF9TZW5zb3JSZWFkaW5nQ2hhbmdlZF9QYXJhbXMucHJvdG90eXBlLmluaXRE
ZWZhdWx0c18gPSBmdW5jdGlvbigpIHsKLSAgfTsKLSAgU2Vuc29yQ2xpZW50X1NlbnNvclJlYWRp
bmdDaGFuZ2VkX1BhcmFtcy5wcm90b3R5cGUuaW5pdEZpZWxkc18gPSBmdW5jdGlvbihmaWVsZHMp
IHsKLSAgICBmb3IodmFyIGZpZWxkIGluIGZpZWxkcykgewotICAgICAgICBpZiAodGhpcy5oYXNP
d25Qcm9wZXJ0eShmaWVsZCkpCi0gICAgICAgICAgdGhpc1tmaWVsZF0gPSBmaWVsZHNbZmllbGRd
OwotICAgIH0KLSAgfTsKLQotICBTZW5zb3JDbGllbnRfU2Vuc29yUmVhZGluZ0NoYW5nZWRfUGFy
YW1zLnZhbGlkYXRlID0gZnVuY3Rpb24obWVzc2FnZVZhbGlkYXRvciwgb2Zmc2V0KSB7Ci0gICAg
dmFyIGVycjsKLSAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0SGVhZGVy
KG9mZnNldCwgY29kZWMua1N0cnVjdEhlYWRlclNpemUpOwotICAgIGlmIChlcnIgIT09IHZhbGlk
YXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKLSAgICAgICAgcmV0dXJuIGVycjsKLQotICAgIHZh
ciBrVmVyc2lvblNpemVzID0gWwotICAgICAge3ZlcnNpb246IDAsIG51bUJ5dGVzOiA4fQotICAg
IF07Ci0gICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdFZlcnNpb24ob2Zm
c2V0LCBrVmVyc2lvblNpemVzKTsKLSAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlv
bkVycm9yLk5PTkUpCi0gICAgICAgIHJldHVybiBlcnI7Ci0KLSAgICByZXR1cm4gdmFsaWRhdG9y
LnZhbGlkYXRpb25FcnJvci5OT05FOwotICB9OwotCi0gIFNlbnNvckNsaWVudF9TZW5zb3JSZWFk
aW5nQ2hhbmdlZF9QYXJhbXMuZW5jb2RlZFNpemUgPSBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSAr
IDA7Ci0KLSAgU2Vuc29yQ2xpZW50X1NlbnNvclJlYWRpbmdDaGFuZ2VkX1BhcmFtcy5kZWNvZGUg
PSBmdW5jdGlvbihkZWNvZGVyKSB7Ci0gICAgdmFyIHBhY2tlZDsKLSAgICB2YXIgdmFsID0gbmV3
IFNlbnNvckNsaWVudF9TZW5zb3JSZWFkaW5nQ2hhbmdlZF9QYXJhbXMoKTsKLSAgICB2YXIgbnVt
YmVyT2ZCeXRlcyA9IGRlY29kZXIucmVhZFVpbnQzMigpOwotICAgIHZhciB2ZXJzaW9uID0gZGVj
b2Rlci5yZWFkVWludDMyKCk7Ci0gICAgcmV0dXJuIHZhbDsKLSAgfTsKLQotICBTZW5zb3JDbGll
bnRfU2Vuc29yUmVhZGluZ0NoYW5nZWRfUGFyYW1zLmVuY29kZSA9IGZ1bmN0aW9uKGVuY29kZXIs
IHZhbCkgewotICAgIHZhciBwYWNrZWQ7Ci0gICAgZW5jb2Rlci53cml0ZVVpbnQzMihTZW5zb3JD
bGllbnRfU2Vuc29yUmVhZGluZ0NoYW5nZWRfUGFyYW1zLmVuY29kZWRTaXplKTsKLSAgICBlbmNv
ZGVyLndyaXRlVWludDMyKDApOwotICB9OwotICB2YXIga1NlbnNvcl9HZXREZWZhdWx0Q29uZmln
dXJhdGlvbl9OYW1lID0gMDsKLSAgdmFyIGtTZW5zb3JfQWRkQ29uZmlndXJhdGlvbl9OYW1lID0g
MTsKLSAgdmFyIGtTZW5zb3JfUmVtb3ZlQ29uZmlndXJhdGlvbl9OYW1lID0gMjsKLSAgdmFyIGtT
ZW5zb3JfU3VzcGVuZF9OYW1lID0gMzsKLSAgdmFyIGtTZW5zb3JfUmVzdW1lX05hbWUgPSA0Owot
ICB2YXIga1NlbnNvcl9Db25maWd1cmVSZWFkaW5nQ2hhbmdlTm90aWZpY2F0aW9uc19OYW1lID0g
NTsKLQotICBmdW5jdGlvbiBTZW5zb3JQdHIoaGFuZGxlT3JQdHJJbmZvKSB7Ci0gICAgdGhpcy5w
dHIgPSBuZXcgYmluZGluZ3MuSW50ZXJmYWNlUHRyQ29udHJvbGxlcihTZW5zb3IsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVPclB0cklu
Zm8pOwotICB9Ci0KLSAgZnVuY3Rpb24gU2Vuc29yQXNzb2NpYXRlZFB0cihhc3NvY2lhdGVkSW50
ZXJmYWNlUHRySW5mbykgewotICAgIHRoaXMucHRyID0gbmV3IGFzc29jaWF0ZWRCaW5kaW5ncy5B
c3NvY2lhdGVkSW50ZXJmYWNlUHRyQ29udHJvbGxlcigKLSAgICAgICAgU2Vuc29yLCBhc3NvY2lh
dGVkSW50ZXJmYWNlUHRySW5mbyk7Ci0gIH0KLQotICBTZW5zb3JBc3NvY2lhdGVkUHRyLnByb3Rv
dHlwZSA9Ci0gICAgICBPYmplY3QuY3JlYXRlKFNlbnNvclB0ci5wcm90b3R5cGUpOwotICBTZW5z
b3JBc3NvY2lhdGVkUHRyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9Ci0gICAgICBTZW5zb3JBc3Nv
Y2lhdGVkUHRyOwotCi0gIGZ1bmN0aW9uIFNlbnNvclByb3h5KHJlY2VpdmVyKSB7Ci0gICAgdGhp
cy5yZWNlaXZlcl8gPSByZWNlaXZlcjsKLSAgfQotICBTZW5zb3JQdHIucHJvdG90eXBlLmdldERl
ZmF1bHRDb25maWd1cmF0aW9uID0gZnVuY3Rpb24oKSB7Ci0gICAgcmV0dXJuIFNlbnNvclByb3h5
LnByb3RvdHlwZS5nZXREZWZhdWx0Q29uZmlndXJhdGlvbgotICAgICAgICAuYXBwbHkodGhpcy5w
dHIuZ2V0UHJveHkoKSwgYXJndW1lbnRzKTsKLSAgfTsKLQotICBTZW5zb3JQcm94eS5wcm90b3R5
cGUuZ2V0RGVmYXVsdENvbmZpZ3VyYXRpb24gPSBmdW5jdGlvbigpIHsKLSAgICB2YXIgcGFyYW1z
XyA9IG5ldyBTZW5zb3JfR2V0RGVmYXVsdENvbmZpZ3VyYXRpb25fUGFyYW1zKCk7Ci0gICAgcmV0
dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkgewotICAgICAgdmFyIGJ1
aWxkZXIgPSBuZXcgY29kZWMuTWVzc2FnZVYxQnVpbGRlcigKLSAgICAgICAgICBrU2Vuc29yX0dl
dERlZmF1bHRDb25maWd1cmF0aW9uX05hbWUsCi0gICAgICAgICAgY29kZWMuYWxpZ24oU2Vuc29y
X0dldERlZmF1bHRDb25maWd1cmF0aW9uX1BhcmFtcy5lbmNvZGVkU2l6ZSksCi0gICAgICAgICAg
Y29kZWMua01lc3NhZ2VFeHBlY3RzUmVzcG9uc2UsIDApOwotICAgICAgYnVpbGRlci5lbmNvZGVT
dHJ1Y3QoU2Vuc29yX0dldERlZmF1bHRDb25maWd1cmF0aW9uX1BhcmFtcywgcGFyYW1zXyk7Ci0g
ICAgICB2YXIgbWVzc2FnZSA9IGJ1aWxkZXIuZmluaXNoKCk7Ci0gICAgICB0aGlzLnJlY2VpdmVy
Xy5hY2NlcHRBbmRFeHBlY3RSZXNwb25zZShtZXNzYWdlKS50aGVuKGZ1bmN0aW9uKG1lc3NhZ2Up
IHsKLSAgICAgICAgdmFyIHJlYWRlciA9IG5ldyBjb2RlYy5NZXNzYWdlUmVhZGVyKG1lc3NhZ2Up
OwotICAgICAgICB2YXIgcmVzcG9uc2VQYXJhbXMgPQotICAgICAgICAgICAgcmVhZGVyLmRlY29k
ZVN0cnVjdChTZW5zb3JfR2V0RGVmYXVsdENvbmZpZ3VyYXRpb25fUmVzcG9uc2VQYXJhbXMpOwot
ICAgICAgICByZXNvbHZlKHJlc3BvbnNlUGFyYW1zKTsKLSAgICAgIH0pLmNhdGNoKGZ1bmN0aW9u
KHJlc3VsdCkgewotICAgICAgICByZWplY3QoRXJyb3IoIkNvbm5lY3Rpb24gZXJyb3I6ICIgKyBy
ZXN1bHQpKTsKLSAgICAgIH0pOwotICAgIH0uYmluZCh0aGlzKSk7Ci0gIH07Ci0gIFNlbnNvclB0
ci5wcm90b3R5cGUuYWRkQ29uZmlndXJhdGlvbiA9IGZ1bmN0aW9uKCkgewotICAgIHJldHVybiBT
ZW5zb3JQcm94eS5wcm90b3R5cGUuYWRkQ29uZmlndXJhdGlvbgotICAgICAgICAuYXBwbHkodGhp
cy5wdHIuZ2V0UHJveHkoKSwgYXJndW1lbnRzKTsKLSAgfTsKLQotICBTZW5zb3JQcm94eS5wcm90
b3R5cGUuYWRkQ29uZmlndXJhdGlvbiA9IGZ1bmN0aW9uKGNvbmZpZ3VyYXRpb24pIHsKLSAgICB2
YXIgcGFyYW1zXyA9IG5ldyBTZW5zb3JfQWRkQ29uZmlndXJhdGlvbl9QYXJhbXMoKTsKLSAgICBw
YXJhbXNfLmNvbmZpZ3VyYXRpb24gPSBjb25maWd1cmF0aW9uOwotICAgIHJldHVybiBuZXcgUHJv
bWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3QpIHsKLSAgICAgIHZhciBidWlsZGVyID0gbmV3
IGNvZGVjLk1lc3NhZ2VWMUJ1aWxkZXIoCi0gICAgICAgICAga1NlbnNvcl9BZGRDb25maWd1cmF0
aW9uX05hbWUsCi0gICAgICAgICAgY29kZWMuYWxpZ24oU2Vuc29yX0FkZENvbmZpZ3VyYXRpb25f
UGFyYW1zLmVuY29kZWRTaXplKSwKLSAgICAgICAgICBjb2RlYy5rTWVzc2FnZUV4cGVjdHNSZXNw
b25zZSwgMCk7Ci0gICAgICBidWlsZGVyLmVuY29kZVN0cnVjdChTZW5zb3JfQWRkQ29uZmlndXJh
dGlvbl9QYXJhbXMsIHBhcmFtc18pOwotICAgICAgdmFyIG1lc3NhZ2UgPSBidWlsZGVyLmZpbmlz
aCgpOwotICAgICAgdGhpcy5yZWNlaXZlcl8uYWNjZXB0QW5kRXhwZWN0UmVzcG9uc2UobWVzc2Fn
ZSkudGhlbihmdW5jdGlvbihtZXNzYWdlKSB7Ci0gICAgICAgIHZhciByZWFkZXIgPSBuZXcgY29k
ZWMuTWVzc2FnZVJlYWRlcihtZXNzYWdlKTsKLSAgICAgICAgdmFyIHJlc3BvbnNlUGFyYW1zID0K
LSAgICAgICAgICAgIHJlYWRlci5kZWNvZGVTdHJ1Y3QoU2Vuc29yX0FkZENvbmZpZ3VyYXRpb25f
UmVzcG9uc2VQYXJhbXMpOwotICAgICAgICByZXNvbHZlKHJlc3BvbnNlUGFyYW1zKTsKLSAgICAg
IH0pLmNhdGNoKGZ1bmN0aW9uKHJlc3VsdCkgewotICAgICAgICByZWplY3QoRXJyb3IoIkNvbm5l
Y3Rpb24gZXJyb3I6ICIgKyByZXN1bHQpKTsKLSAgICAgIH0pOwotICAgIH0uYmluZCh0aGlzKSk7
Ci0gIH07Ci0gIFNlbnNvclB0ci5wcm90b3R5cGUucmVtb3ZlQ29uZmlndXJhdGlvbiA9IGZ1bmN0
aW9uKCkgewotICAgIHJldHVybiBTZW5zb3JQcm94eS5wcm90b3R5cGUucmVtb3ZlQ29uZmlndXJh
dGlvbgotICAgICAgICAuYXBwbHkodGhpcy5wdHIuZ2V0UHJveHkoKSwgYXJndW1lbnRzKTsKLSAg
fTsKLQotICBTZW5zb3JQcm94eS5wcm90b3R5cGUucmVtb3ZlQ29uZmlndXJhdGlvbiA9IGZ1bmN0
aW9uKGNvbmZpZ3VyYXRpb24pIHsKLSAgICB2YXIgcGFyYW1zXyA9IG5ldyBTZW5zb3JfUmVtb3Zl
Q29uZmlndXJhdGlvbl9QYXJhbXMoKTsKLSAgICBwYXJhbXNfLmNvbmZpZ3VyYXRpb24gPSBjb25m
aWd1cmF0aW9uOwotICAgIHZhciBidWlsZGVyID0gbmV3IGNvZGVjLk1lc3NhZ2VWMEJ1aWxkZXIo
Ci0gICAgICAgIGtTZW5zb3JfUmVtb3ZlQ29uZmlndXJhdGlvbl9OYW1lLAotICAgICAgICBjb2Rl
Yy5hbGlnbihTZW5zb3JfUmVtb3ZlQ29uZmlndXJhdGlvbl9QYXJhbXMuZW5jb2RlZFNpemUpKTsK
LSAgICBidWlsZGVyLmVuY29kZVN0cnVjdChTZW5zb3JfUmVtb3ZlQ29uZmlndXJhdGlvbl9QYXJh
bXMsIHBhcmFtc18pOwotICAgIHZhciBtZXNzYWdlID0gYnVpbGRlci5maW5pc2goKTsKLSAgICB0
aGlzLnJlY2VpdmVyXy5hY2NlcHQobWVzc2FnZSk7Ci0gIH07Ci0gIFNlbnNvclB0ci5wcm90b3R5
cGUuc3VzcGVuZCA9IGZ1bmN0aW9uKCkgewotICAgIHJldHVybiBTZW5zb3JQcm94eS5wcm90b3R5
cGUuc3VzcGVuZAotICAgICAgICAuYXBwbHkodGhpcy5wdHIuZ2V0UHJveHkoKSwgYXJndW1lbnRz
KTsKLSAgfTsKLQotICBTZW5zb3JQcm94eS5wcm90b3R5cGUuc3VzcGVuZCA9IGZ1bmN0aW9uKCkg
ewotICAgIHZhciBwYXJhbXNfID0gbmV3IFNlbnNvcl9TdXNwZW5kX1BhcmFtcygpOwotICAgIHZh
ciBidWlsZGVyID0gbmV3IGNvZGVjLk1lc3NhZ2VWMEJ1aWxkZXIoCi0gICAgICAgIGtTZW5zb3Jf
U3VzcGVuZF9OYW1lLAotICAgICAgICBjb2RlYy5hbGlnbihTZW5zb3JfU3VzcGVuZF9QYXJhbXMu
ZW5jb2RlZFNpemUpKTsKLSAgICBidWlsZGVyLmVuY29kZVN0cnVjdChTZW5zb3JfU3VzcGVuZF9Q
YXJhbXMsIHBhcmFtc18pOwotICAgIHZhciBtZXNzYWdlID0gYnVpbGRlci5maW5pc2goKTsKLSAg
ICB0aGlzLnJlY2VpdmVyXy5hY2NlcHQobWVzc2FnZSk7Ci0gIH07Ci0gIFNlbnNvclB0ci5wcm90
b3R5cGUucmVzdW1lID0gZnVuY3Rpb24oKSB7Ci0gICAgcmV0dXJuIFNlbnNvclByb3h5LnByb3Rv
dHlwZS5yZXN1bWUKLSAgICAgICAgLmFwcGx5KHRoaXMucHRyLmdldFByb3h5KCksIGFyZ3VtZW50
cyk7Ci0gIH07Ci0KLSAgU2Vuc29yUHJveHkucHJvdG90eXBlLnJlc3VtZSA9IGZ1bmN0aW9uKCkg
ewotICAgIHZhciBwYXJhbXNfID0gbmV3IFNlbnNvcl9SZXN1bWVfUGFyYW1zKCk7Ci0gICAgdmFy
IGJ1aWxkZXIgPSBuZXcgY29kZWMuTWVzc2FnZVYwQnVpbGRlcigKLSAgICAgICAga1NlbnNvcl9S
ZXN1bWVfTmFtZSwKLSAgICAgICAgY29kZWMuYWxpZ24oU2Vuc29yX1Jlc3VtZV9QYXJhbXMuZW5j
b2RlZFNpemUpKTsKLSAgICBidWlsZGVyLmVuY29kZVN0cnVjdChTZW5zb3JfUmVzdW1lX1BhcmFt
cywgcGFyYW1zXyk7Ci0gICAgdmFyIG1lc3NhZ2UgPSBidWlsZGVyLmZpbmlzaCgpOwotICAgIHRo
aXMucmVjZWl2ZXJfLmFjY2VwdChtZXNzYWdlKTsKLSAgfTsKLSAgU2Vuc29yUHRyLnByb3RvdHlw
ZS5jb25maWd1cmVSZWFkaW5nQ2hhbmdlTm90aWZpY2F0aW9ucyA9IGZ1bmN0aW9uKCkgewotICAg
IHJldHVybiBTZW5zb3JQcm94eS5wcm90b3R5cGUuY29uZmlndXJlUmVhZGluZ0NoYW5nZU5vdGlm
aWNhdGlvbnMKLSAgICAgICAgLmFwcGx5KHRoaXMucHRyLmdldFByb3h5KCksIGFyZ3VtZW50cyk7
Ci0gIH07Ci0KLSAgU2Vuc29yUHJveHkucHJvdG90eXBlLmNvbmZpZ3VyZVJlYWRpbmdDaGFuZ2VO
b3RpZmljYXRpb25zID0gZnVuY3Rpb24oZW5hYmxlZCkgewotICAgIHZhciBwYXJhbXNfID0gbmV3
IFNlbnNvcl9Db25maWd1cmVSZWFkaW5nQ2hhbmdlTm90aWZpY2F0aW9uc19QYXJhbXMoKTsKLSAg
ICBwYXJhbXNfLmVuYWJsZWQgPSBlbmFibGVkOwotICAgIHZhciBidWlsZGVyID0gbmV3IGNvZGVj
Lk1lc3NhZ2VWMEJ1aWxkZXIoCi0gICAgICAgIGtTZW5zb3JfQ29uZmlndXJlUmVhZGluZ0NoYW5n
ZU5vdGlmaWNhdGlvbnNfTmFtZSwKLSAgICAgICAgY29kZWMuYWxpZ24oU2Vuc29yX0NvbmZpZ3Vy
ZVJlYWRpbmdDaGFuZ2VOb3RpZmljYXRpb25zX1BhcmFtcy5lbmNvZGVkU2l6ZSkpOwotICAgIGJ1
aWxkZXIuZW5jb2RlU3RydWN0KFNlbnNvcl9Db25maWd1cmVSZWFkaW5nQ2hhbmdlTm90aWZpY2F0
aW9uc19QYXJhbXMsIHBhcmFtc18pOwotICAgIHZhciBtZXNzYWdlID0gYnVpbGRlci5maW5pc2go
KTsKLSAgICB0aGlzLnJlY2VpdmVyXy5hY2NlcHQobWVzc2FnZSk7Ci0gIH07Ci0KLSAgZnVuY3Rp
b24gU2Vuc29yU3R1YihkZWxlZ2F0ZSkgewotICAgIHRoaXMuZGVsZWdhdGVfID0gZGVsZWdhdGU7
Ci0gIH0KLSAgU2Vuc29yU3R1Yi5wcm90b3R5cGUuZ2V0RGVmYXVsdENvbmZpZ3VyYXRpb24gPSBm
dW5jdGlvbigpIHsKLSAgICByZXR1cm4gdGhpcy5kZWxlZ2F0ZV8gJiYgdGhpcy5kZWxlZ2F0ZV8u
Z2V0RGVmYXVsdENvbmZpZ3VyYXRpb24gJiYgdGhpcy5kZWxlZ2F0ZV8uZ2V0RGVmYXVsdENvbmZp
Z3VyYXRpb24oKTsKLSAgfQotICBTZW5zb3JTdHViLnByb3RvdHlwZS5hZGRDb25maWd1cmF0aW9u
ID0gZnVuY3Rpb24oY29uZmlndXJhdGlvbikgewotICAgIHJldHVybiB0aGlzLmRlbGVnYXRlXyAm
JiB0aGlzLmRlbGVnYXRlXy5hZGRDb25maWd1cmF0aW9uICYmIHRoaXMuZGVsZWdhdGVfLmFkZENv
bmZpZ3VyYXRpb24oY29uZmlndXJhdGlvbik7Ci0gIH0KLSAgU2Vuc29yU3R1Yi5wcm90b3R5cGUu
cmVtb3ZlQ29uZmlndXJhdGlvbiA9IGZ1bmN0aW9uKGNvbmZpZ3VyYXRpb24pIHsKLSAgICByZXR1
cm4gdGhpcy5kZWxlZ2F0ZV8gJiYgdGhpcy5kZWxlZ2F0ZV8ucmVtb3ZlQ29uZmlndXJhdGlvbiAm
JiB0aGlzLmRlbGVnYXRlXy5yZW1vdmVDb25maWd1cmF0aW9uKGNvbmZpZ3VyYXRpb24pOwotICB9
Ci0gIFNlbnNvclN0dWIucHJvdG90eXBlLnN1c3BlbmQgPSBmdW5jdGlvbigpIHsKLSAgICByZXR1
cm4gdGhpcy5kZWxlZ2F0ZV8gJiYgdGhpcy5kZWxlZ2F0ZV8uc3VzcGVuZCAmJiB0aGlzLmRlbGVn
YXRlXy5zdXNwZW5kKCk7Ci0gIH0KLSAgU2Vuc29yU3R1Yi5wcm90b3R5cGUucmVzdW1lID0gZnVu
Y3Rpb24oKSB7Ci0gICAgcmV0dXJuIHRoaXMuZGVsZWdhdGVfICYmIHRoaXMuZGVsZWdhdGVfLnJl
c3VtZSAmJiB0aGlzLmRlbGVnYXRlXy5yZXN1bWUoKTsKLSAgfQotICBTZW5zb3JTdHViLnByb3Rv
dHlwZS5jb25maWd1cmVSZWFkaW5nQ2hhbmdlTm90aWZpY2F0aW9ucyA9IGZ1bmN0aW9uKGVuYWJs
ZWQpIHsKLSAgICByZXR1cm4gdGhpcy5kZWxlZ2F0ZV8gJiYgdGhpcy5kZWxlZ2F0ZV8uY29uZmln
dXJlUmVhZGluZ0NoYW5nZU5vdGlmaWNhdGlvbnMgJiYgdGhpcy5kZWxlZ2F0ZV8uY29uZmlndXJl
UmVhZGluZ0NoYW5nZU5vdGlmaWNhdGlvbnMoZW5hYmxlZCk7Ci0gIH0KLQotICBTZW5zb3JTdHVi
LnByb3RvdHlwZS5hY2NlcHQgPSBmdW5jdGlvbihtZXNzYWdlKSB7Ci0gICAgdmFyIHJlYWRlciA9
IG5ldyBjb2RlYy5NZXNzYWdlUmVhZGVyKG1lc3NhZ2UpOwotICAgIHN3aXRjaCAocmVhZGVyLm1l
c3NhZ2VOYW1lKSB7Ci0gICAgY2FzZSBrU2Vuc29yX1JlbW92ZUNvbmZpZ3VyYXRpb25fTmFtZToK
LSAgICAgIHZhciBwYXJhbXMgPSByZWFkZXIuZGVjb2RlU3RydWN0KFNlbnNvcl9SZW1vdmVDb25m
aWd1cmF0aW9uX1BhcmFtcyk7Ci0gICAgICB0aGlzLnJlbW92ZUNvbmZpZ3VyYXRpb24ocGFyYW1z
LmNvbmZpZ3VyYXRpb24pOwotICAgICAgcmV0dXJuIHRydWU7Ci0gICAgY2FzZSBrU2Vuc29yX1N1
c3BlbmRfTmFtZToKLSAgICAgIHZhciBwYXJhbXMgPSByZWFkZXIuZGVjb2RlU3RydWN0KFNlbnNv
cl9TdXNwZW5kX1BhcmFtcyk7Ci0gICAgICB0aGlzLnN1c3BlbmQoKTsKLSAgICAgIHJldHVybiB0
cnVlOwotICAgIGNhc2Uga1NlbnNvcl9SZXN1bWVfTmFtZToKLSAgICAgIHZhciBwYXJhbXMgPSBy
ZWFkZXIuZGVjb2RlU3RydWN0KFNlbnNvcl9SZXN1bWVfUGFyYW1zKTsKLSAgICAgIHRoaXMucmVz
dW1lKCk7Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICBjYXNlIGtTZW5zb3JfQ29uZmlndXJlUmVh
ZGluZ0NoYW5nZU5vdGlmaWNhdGlvbnNfTmFtZToKLSAgICAgIHZhciBwYXJhbXMgPSByZWFkZXIu
ZGVjb2RlU3RydWN0KFNlbnNvcl9Db25maWd1cmVSZWFkaW5nQ2hhbmdlTm90aWZpY2F0aW9uc19Q
YXJhbXMpOwotICAgICAgdGhpcy5jb25maWd1cmVSZWFkaW5nQ2hhbmdlTm90aWZpY2F0aW9ucyhw
YXJhbXMuZW5hYmxlZCk7Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICBkZWZhdWx0OgotICAgICAg
cmV0dXJuIGZhbHNlOwotICAgIH0KLSAgfTsKLQotICBTZW5zb3JTdHViLnByb3RvdHlwZS5hY2Nl
cHRXaXRoUmVzcG9uZGVyID0KLSAgICAgIGZ1bmN0aW9uKG1lc3NhZ2UsIHJlc3BvbmRlcikgewot
ICAgIHZhciByZWFkZXIgPSBuZXcgY29kZWMuTWVzc2FnZVJlYWRlcihtZXNzYWdlKTsKLSAgICBz
d2l0Y2ggKHJlYWRlci5tZXNzYWdlTmFtZSkgewotICAgIGNhc2Uga1NlbnNvcl9HZXREZWZhdWx0
Q29uZmlndXJhdGlvbl9OYW1lOgotICAgICAgdmFyIHBhcmFtcyA9IHJlYWRlci5kZWNvZGVTdHJ1
Y3QoU2Vuc29yX0dldERlZmF1bHRDb25maWd1cmF0aW9uX1BhcmFtcyk7Ci0gICAgICB0aGlzLmdl
dERlZmF1bHRDb25maWd1cmF0aW9uKCkudGhlbihmdW5jdGlvbihyZXNwb25zZSkgewotICAgICAg
ICB2YXIgcmVzcG9uc2VQYXJhbXMgPQotICAgICAgICAgICAgbmV3IFNlbnNvcl9HZXREZWZhdWx0
Q29uZmlndXJhdGlvbl9SZXNwb25zZVBhcmFtcygpOwotICAgICAgICByZXNwb25zZVBhcmFtcy5j
b25maWd1cmF0aW9uID0gcmVzcG9uc2UuY29uZmlndXJhdGlvbjsKLSAgICAgICAgdmFyIGJ1aWxk
ZXIgPSBuZXcgY29kZWMuTWVzc2FnZVYxQnVpbGRlcigKLSAgICAgICAgICAgIGtTZW5zb3JfR2V0
RGVmYXVsdENvbmZpZ3VyYXRpb25fTmFtZSwKLSAgICAgICAgICAgIGNvZGVjLmFsaWduKFNlbnNv
cl9HZXREZWZhdWx0Q29uZmlndXJhdGlvbl9SZXNwb25zZVBhcmFtcy5lbmNvZGVkU2l6ZSksCi0g
ICAgICAgICAgICBjb2RlYy5rTWVzc2FnZUlzUmVzcG9uc2UsIHJlYWRlci5yZXF1ZXN0SUQpOwot
ICAgICAgICBidWlsZGVyLmVuY29kZVN0cnVjdChTZW5zb3JfR2V0RGVmYXVsdENvbmZpZ3VyYXRp
b25fUmVzcG9uc2VQYXJhbXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNl
UGFyYW1zKTsKLSAgICAgICAgdmFyIG1lc3NhZ2UgPSBidWlsZGVyLmZpbmlzaCgpOwotICAgICAg
ICByZXNwb25kZXIuYWNjZXB0KG1lc3NhZ2UpOwotICAgICAgfSk7Ci0gICAgICByZXR1cm4gdHJ1
ZTsKLSAgICBjYXNlIGtTZW5zb3JfQWRkQ29uZmlndXJhdGlvbl9OYW1lOgotICAgICAgdmFyIHBh
cmFtcyA9IHJlYWRlci5kZWNvZGVTdHJ1Y3QoU2Vuc29yX0FkZENvbmZpZ3VyYXRpb25fUGFyYW1z
KTsKLSAgICAgIHRoaXMuYWRkQ29uZmlndXJhdGlvbihwYXJhbXMuY29uZmlndXJhdGlvbikudGhl
bihmdW5jdGlvbihyZXNwb25zZSkgewotICAgICAgICB2YXIgcmVzcG9uc2VQYXJhbXMgPQotICAg
ICAgICAgICAgbmV3IFNlbnNvcl9BZGRDb25maWd1cmF0aW9uX1Jlc3BvbnNlUGFyYW1zKCk7Ci0g
ICAgICAgIHJlc3BvbnNlUGFyYW1zLnN1Y2Nlc3MgPSByZXNwb25zZS5zdWNjZXNzOwotICAgICAg
ICB2YXIgYnVpbGRlciA9IG5ldyBjb2RlYy5NZXNzYWdlVjFCdWlsZGVyKAotICAgICAgICAgICAg
a1NlbnNvcl9BZGRDb25maWd1cmF0aW9uX05hbWUsCi0gICAgICAgICAgICBjb2RlYy5hbGlnbihT
ZW5zb3JfQWRkQ29uZmlndXJhdGlvbl9SZXNwb25zZVBhcmFtcy5lbmNvZGVkU2l6ZSksCi0gICAg
ICAgICAgICBjb2RlYy5rTWVzc2FnZUlzUmVzcG9uc2UsIHJlYWRlci5yZXF1ZXN0SUQpOwotICAg
ICAgICBidWlsZGVyLmVuY29kZVN0cnVjdChTZW5zb3JfQWRkQ29uZmlndXJhdGlvbl9SZXNwb25z
ZVBhcmFtcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2VQYXJhbXMpOwot
ICAgICAgICB2YXIgbWVzc2FnZSA9IGJ1aWxkZXIuZmluaXNoKCk7Ci0gICAgICAgIHJlc3BvbmRl
ci5hY2NlcHQobWVzc2FnZSk7Ci0gICAgICB9KTsKLSAgICAgIHJldHVybiB0cnVlOwotICAgIGRl
ZmF1bHQ6Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICB9OwotCi0gIGZ1bmN0aW9uIHZh
bGlkYXRlU2Vuc29yUmVxdWVzdChtZXNzYWdlVmFsaWRhdG9yKSB7Ci0gICAgdmFyIG1lc3NhZ2Ug
PSBtZXNzYWdlVmFsaWRhdG9yLm1lc3NhZ2U7Ci0gICAgdmFyIHBhcmFtc0NsYXNzID0gbnVsbDsK
LSAgICBzd2l0Y2ggKG1lc3NhZ2UuZ2V0TmFtZSgpKSB7Ci0gICAgICBjYXNlIGtTZW5zb3JfR2V0
RGVmYXVsdENvbmZpZ3VyYXRpb25fTmFtZToKLSAgICAgICAgaWYgKG1lc3NhZ2UuZXhwZWN0c1Jl
c3BvbnNlKCkpCi0gICAgICAgICAgcGFyYW1zQ2xhc3MgPSBTZW5zb3JfR2V0RGVmYXVsdENvbmZp
Z3VyYXRpb25fUGFyYW1zOwotICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIGtTZW5zb3JfQWRkQ29u
ZmlndXJhdGlvbl9OYW1lOgotICAgICAgICBpZiAobWVzc2FnZS5leHBlY3RzUmVzcG9uc2UoKSkK
LSAgICAgICAgICBwYXJhbXNDbGFzcyA9IFNlbnNvcl9BZGRDb25maWd1cmF0aW9uX1BhcmFtczsK
LSAgICAgIGJyZWFrOwotICAgICAgY2FzZSBrU2Vuc29yX1JlbW92ZUNvbmZpZ3VyYXRpb25fTmFt
ZToKLSAgICAgICAgaWYgKCFtZXNzYWdlLmV4cGVjdHNSZXNwb25zZSgpICYmICFtZXNzYWdlLmlz
UmVzcG9uc2UoKSkKLSAgICAgICAgICBwYXJhbXNDbGFzcyA9IFNlbnNvcl9SZW1vdmVDb25maWd1
cmF0aW9uX1BhcmFtczsKLSAgICAgIGJyZWFrOwotICAgICAgY2FzZSBrU2Vuc29yX1N1c3BlbmRf
TmFtZToKLSAgICAgICAgaWYgKCFtZXNzYWdlLmV4cGVjdHNSZXNwb25zZSgpICYmICFtZXNzYWdl
LmlzUmVzcG9uc2UoKSkKLSAgICAgICAgICBwYXJhbXNDbGFzcyA9IFNlbnNvcl9TdXNwZW5kX1Bh
cmFtczsKLSAgICAgIGJyZWFrOwotICAgICAgY2FzZSBrU2Vuc29yX1Jlc3VtZV9OYW1lOgotICAg
ICAgICBpZiAoIW1lc3NhZ2UuZXhwZWN0c1Jlc3BvbnNlKCkgJiYgIW1lc3NhZ2UuaXNSZXNwb25z
ZSgpKQotICAgICAgICAgIHBhcmFtc0NsYXNzID0gU2Vuc29yX1Jlc3VtZV9QYXJhbXM7Ci0gICAg
ICBicmVhazsKLSAgICAgIGNhc2Uga1NlbnNvcl9Db25maWd1cmVSZWFkaW5nQ2hhbmdlTm90aWZp
Y2F0aW9uc19OYW1lOgotICAgICAgICBpZiAoIW1lc3NhZ2UuZXhwZWN0c1Jlc3BvbnNlKCkgJiYg
IW1lc3NhZ2UuaXNSZXNwb25zZSgpKQotICAgICAgICAgIHBhcmFtc0NsYXNzID0gU2Vuc29yX0Nv
bmZpZ3VyZVJlYWRpbmdDaGFuZ2VOb3RpZmljYXRpb25zX1BhcmFtczsKLSAgICAgIGJyZWFrOwot
ICAgIH0KLSAgICBpZiAocGFyYW1zQ2xhc3MgPT09IG51bGwpCi0gICAgICByZXR1cm4gdmFsaWRh
dG9yLnZhbGlkYXRpb25FcnJvci5OT05FOwotICAgIHJldHVybiBwYXJhbXNDbGFzcy52YWxpZGF0
ZShtZXNzYWdlVmFsaWRhdG9yLCBtZXNzYWdlVmFsaWRhdG9yLm1lc3NhZ2UuZ2V0SGVhZGVyTnVt
Qnl0ZXMoKSk7Ci0gIH0KLQotICBmdW5jdGlvbiB2YWxpZGF0ZVNlbnNvclJlc3BvbnNlKG1lc3Nh
Z2VWYWxpZGF0b3IpIHsKLSAgIHZhciBtZXNzYWdlID0gbWVzc2FnZVZhbGlkYXRvci5tZXNzYWdl
OwotICAgdmFyIHBhcmFtc0NsYXNzID0gbnVsbDsKLSAgIHN3aXRjaCAobWVzc2FnZS5nZXROYW1l
KCkpIHsKLSAgICAgIGNhc2Uga1NlbnNvcl9HZXREZWZhdWx0Q29uZmlndXJhdGlvbl9OYW1lOgot
ICAgICAgICBpZiAobWVzc2FnZS5pc1Jlc3BvbnNlKCkpCi0gICAgICAgICAgcGFyYW1zQ2xhc3Mg
PSBTZW5zb3JfR2V0RGVmYXVsdENvbmZpZ3VyYXRpb25fUmVzcG9uc2VQYXJhbXM7Ci0gICAgICAg
IGJyZWFrOwotICAgICAgY2FzZSBrU2Vuc29yX0FkZENvbmZpZ3VyYXRpb25fTmFtZToKLSAgICAg
ICAgaWYgKG1lc3NhZ2UuaXNSZXNwb25zZSgpKQotICAgICAgICAgIHBhcmFtc0NsYXNzID0gU2Vu
c29yX0FkZENvbmZpZ3VyYXRpb25fUmVzcG9uc2VQYXJhbXM7Ci0gICAgICAgIGJyZWFrOwotICAg
IH0KLSAgICBpZiAocGFyYW1zQ2xhc3MgPT09IG51bGwpCi0gICAgICByZXR1cm4gdmFsaWRhdG9y
LnZhbGlkYXRpb25FcnJvci5OT05FOwotICAgIHJldHVybiBwYXJhbXNDbGFzcy52YWxpZGF0ZSht
ZXNzYWdlVmFsaWRhdG9yLCBtZXNzYWdlVmFsaWRhdG9yLm1lc3NhZ2UuZ2V0SGVhZGVyTnVtQnl0
ZXMoKSk7Ci0gIH0KLQotICB2YXIgU2Vuc29yID0gewotICAgIG5hbWU6ICdkZXZpY2UubW9qb20u
U2Vuc29yJywKLSAgICBrVmVyc2lvbjogMCwKLSAgICBwdHJDbGFzczogU2Vuc29yUHRyLAotICAg
IHByb3h5Q2xhc3M6IFNlbnNvclByb3h5LAotICAgIHN0dWJDbGFzczogU2Vuc29yU3R1YiwKLSAg
ICB2YWxpZGF0ZVJlcXVlc3Q6IHZhbGlkYXRlU2Vuc29yUmVxdWVzdCwKLSAgICB2YWxpZGF0ZVJl
c3BvbnNlOiB2YWxpZGF0ZVNlbnNvclJlc3BvbnNlLAotICB9OwotICBTZW5zb3JTdHViLnByb3Rv
dHlwZS52YWxpZGF0b3IgPSB2YWxpZGF0ZVNlbnNvclJlcXVlc3Q7Ci0gIFNlbnNvclByb3h5LnBy
b3RvdHlwZS52YWxpZGF0b3IgPSB2YWxpZGF0ZVNlbnNvclJlc3BvbnNlOwotICB2YXIga1NlbnNv
ckNsaWVudF9SYWlzZUVycm9yX05hbWUgPSAwOwotICB2YXIga1NlbnNvckNsaWVudF9TZW5zb3JS
ZWFkaW5nQ2hhbmdlZF9OYW1lID0gMTsKLQotICBmdW5jdGlvbiBTZW5zb3JDbGllbnRQdHIoaGFu
ZGxlT3JQdHJJbmZvKSB7Ci0gICAgdGhpcy5wdHIgPSBuZXcgYmluZGluZ3MuSW50ZXJmYWNlUHRy
Q29udHJvbGxlcihTZW5zb3JDbGllbnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBoYW5kbGVPclB0ckluZm8pOwotICB9Ci0KLSAgZnVuY3Rpb24g
U2Vuc29yQ2xpZW50QXNzb2NpYXRlZFB0cihhc3NvY2lhdGVkSW50ZXJmYWNlUHRySW5mbykgewot
ICAgIHRoaXMucHRyID0gbmV3IGFzc29jaWF0ZWRCaW5kaW5ncy5Bc3NvY2lhdGVkSW50ZXJmYWNl
UHRyQ29udHJvbGxlcigKLSAgICAgICAgU2Vuc29yQ2xpZW50LCBhc3NvY2lhdGVkSW50ZXJmYWNl
UHRySW5mbyk7Ci0gIH0KLQotICBTZW5zb3JDbGllbnRBc3NvY2lhdGVkUHRyLnByb3RvdHlwZSA9
Ci0gICAgICBPYmplY3QuY3JlYXRlKFNlbnNvckNsaWVudFB0ci5wcm90b3R5cGUpOwotICBTZW5z
b3JDbGllbnRBc3NvY2lhdGVkUHRyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9Ci0gICAgICBTZW5z
b3JDbGllbnRBc3NvY2lhdGVkUHRyOwotCi0gIGZ1bmN0aW9uIFNlbnNvckNsaWVudFByb3h5KHJl
Y2VpdmVyKSB7Ci0gICAgdGhpcy5yZWNlaXZlcl8gPSByZWNlaXZlcjsKLSAgfQotICBTZW5zb3JD
bGllbnRQdHIucHJvdG90eXBlLnJhaXNlRXJyb3IgPSBmdW5jdGlvbigpIHsKLSAgICByZXR1cm4g
U2Vuc29yQ2xpZW50UHJveHkucHJvdG90eXBlLnJhaXNlRXJyb3IKLSAgICAgICAgLmFwcGx5KHRo
aXMucHRyLmdldFByb3h5KCksIGFyZ3VtZW50cyk7Ci0gIH07Ci0KLSAgU2Vuc29yQ2xpZW50UHJv
eHkucHJvdG90eXBlLnJhaXNlRXJyb3IgPSBmdW5jdGlvbigpIHsKLSAgICB2YXIgcGFyYW1zXyA9
IG5ldyBTZW5zb3JDbGllbnRfUmFpc2VFcnJvcl9QYXJhbXMoKTsKLSAgICB2YXIgYnVpbGRlciA9
IG5ldyBjb2RlYy5NZXNzYWdlVjBCdWlsZGVyKAotICAgICAgICBrU2Vuc29yQ2xpZW50X1JhaXNl
RXJyb3JfTmFtZSwKLSAgICAgICAgY29kZWMuYWxpZ24oU2Vuc29yQ2xpZW50X1JhaXNlRXJyb3Jf
UGFyYW1zLmVuY29kZWRTaXplKSk7Ci0gICAgYnVpbGRlci5lbmNvZGVTdHJ1Y3QoU2Vuc29yQ2xp
ZW50X1JhaXNlRXJyb3JfUGFyYW1zLCBwYXJhbXNfKTsKLSAgICB2YXIgbWVzc2FnZSA9IGJ1aWxk
ZXIuZmluaXNoKCk7Ci0gICAgdGhpcy5yZWNlaXZlcl8uYWNjZXB0KG1lc3NhZ2UpOwotICB9Owot
ICBTZW5zb3JDbGllbnRQdHIucHJvdG90eXBlLnNlbnNvclJlYWRpbmdDaGFuZ2VkID0gZnVuY3Rp
b24oKSB7Ci0gICAgcmV0dXJuIFNlbnNvckNsaWVudFByb3h5LnByb3RvdHlwZS5zZW5zb3JSZWFk
aW5nQ2hhbmdlZAotICAgICAgICAuYXBwbHkodGhpcy5wdHIuZ2V0UHJveHkoKSwgYXJndW1lbnRz
KTsKLSAgfTsKLQotICBTZW5zb3JDbGllbnRQcm94eS5wcm90b3R5cGUuc2Vuc29yUmVhZGluZ0No
YW5nZWQgPSBmdW5jdGlvbigpIHsKLSAgICB2YXIgcGFyYW1zXyA9IG5ldyBTZW5zb3JDbGllbnRf
U2Vuc29yUmVhZGluZ0NoYW5nZWRfUGFyYW1zKCk7Ci0gICAgdmFyIGJ1aWxkZXIgPSBuZXcgY29k
ZWMuTWVzc2FnZVYwQnVpbGRlcigKLSAgICAgICAga1NlbnNvckNsaWVudF9TZW5zb3JSZWFkaW5n
Q2hhbmdlZF9OYW1lLAotICAgICAgICBjb2RlYy5hbGlnbihTZW5zb3JDbGllbnRfU2Vuc29yUmVh
ZGluZ0NoYW5nZWRfUGFyYW1zLmVuY29kZWRTaXplKSk7Ci0gICAgYnVpbGRlci5lbmNvZGVTdHJ1
Y3QoU2Vuc29yQ2xpZW50X1NlbnNvclJlYWRpbmdDaGFuZ2VkX1BhcmFtcywgcGFyYW1zXyk7Ci0g
ICAgdmFyIG1lc3NhZ2UgPSBidWlsZGVyLmZpbmlzaCgpOwotICAgIHRoaXMucmVjZWl2ZXJfLmFj
Y2VwdChtZXNzYWdlKTsKLSAgfTsKLQotICBmdW5jdGlvbiBTZW5zb3JDbGllbnRTdHViKGRlbGVn
YXRlKSB7Ci0gICAgdGhpcy5kZWxlZ2F0ZV8gPSBkZWxlZ2F0ZTsKLSAgfQotICBTZW5zb3JDbGll
bnRTdHViLnByb3RvdHlwZS5yYWlzZUVycm9yID0gZnVuY3Rpb24oKSB7Ci0gICAgcmV0dXJuIHRo
aXMuZGVsZWdhdGVfICYmIHRoaXMuZGVsZWdhdGVfLnJhaXNlRXJyb3IgJiYgdGhpcy5kZWxlZ2F0
ZV8ucmFpc2VFcnJvcigpOwotICB9Ci0gIFNlbnNvckNsaWVudFN0dWIucHJvdG90eXBlLnNlbnNv
clJlYWRpbmdDaGFuZ2VkID0gZnVuY3Rpb24oKSB7Ci0gICAgcmV0dXJuIHRoaXMuZGVsZWdhdGVf
ICYmIHRoaXMuZGVsZWdhdGVfLnNlbnNvclJlYWRpbmdDaGFuZ2VkICYmIHRoaXMuZGVsZWdhdGVf
LnNlbnNvclJlYWRpbmdDaGFuZ2VkKCk7Ci0gIH0KLQotICBTZW5zb3JDbGllbnRTdHViLnByb3Rv
dHlwZS5hY2NlcHQgPSBmdW5jdGlvbihtZXNzYWdlKSB7Ci0gICAgdmFyIHJlYWRlciA9IG5ldyBj
b2RlYy5NZXNzYWdlUmVhZGVyKG1lc3NhZ2UpOwotICAgIHN3aXRjaCAocmVhZGVyLm1lc3NhZ2VO
YW1lKSB7Ci0gICAgY2FzZSBrU2Vuc29yQ2xpZW50X1JhaXNlRXJyb3JfTmFtZToKLSAgICAgIHZh
ciBwYXJhbXMgPSByZWFkZXIuZGVjb2RlU3RydWN0KFNlbnNvckNsaWVudF9SYWlzZUVycm9yX1Bh
cmFtcyk7Ci0gICAgICB0aGlzLnJhaXNlRXJyb3IoKTsKLSAgICAgIHJldHVybiB0cnVlOwotICAg
IGNhc2Uga1NlbnNvckNsaWVudF9TZW5zb3JSZWFkaW5nQ2hhbmdlZF9OYW1lOgotICAgICAgdmFy
IHBhcmFtcyA9IHJlYWRlci5kZWNvZGVTdHJ1Y3QoU2Vuc29yQ2xpZW50X1NlbnNvclJlYWRpbmdD
aGFuZ2VkX1BhcmFtcyk7Ci0gICAgICB0aGlzLnNlbnNvclJlYWRpbmdDaGFuZ2VkKCk7Ci0gICAg
ICByZXR1cm4gdHJ1ZTsKLSAgICBkZWZhdWx0OgotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0K
LSAgfTsKLQotICBTZW5zb3JDbGllbnRTdHViLnByb3RvdHlwZS5hY2NlcHRXaXRoUmVzcG9uZGVy
ID0KLSAgICAgIGZ1bmN0aW9uKG1lc3NhZ2UsIHJlc3BvbmRlcikgewotICAgIHZhciByZWFkZXIg
PSBuZXcgY29kZWMuTWVzc2FnZVJlYWRlcihtZXNzYWdlKTsKLSAgICBzd2l0Y2ggKHJlYWRlci5t
ZXNzYWdlTmFtZSkgewotICAgIGRlZmF1bHQ6Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQot
ICB9OwotCi0gIGZ1bmN0aW9uIHZhbGlkYXRlU2Vuc29yQ2xpZW50UmVxdWVzdChtZXNzYWdlVmFs
aWRhdG9yKSB7Ci0gICAgdmFyIG1lc3NhZ2UgPSBtZXNzYWdlVmFsaWRhdG9yLm1lc3NhZ2U7Ci0g
ICAgdmFyIHBhcmFtc0NsYXNzID0gbnVsbDsKLSAgICBzd2l0Y2ggKG1lc3NhZ2UuZ2V0TmFtZSgp
KSB7Ci0gICAgICBjYXNlIGtTZW5zb3JDbGllbnRfUmFpc2VFcnJvcl9OYW1lOgotICAgICAgICBp
ZiAoIW1lc3NhZ2UuZXhwZWN0c1Jlc3BvbnNlKCkgJiYgIW1lc3NhZ2UuaXNSZXNwb25zZSgpKQot
ICAgICAgICAgIHBhcmFtc0NsYXNzID0gU2Vuc29yQ2xpZW50X1JhaXNlRXJyb3JfUGFyYW1zOwot
ICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIGtTZW5zb3JDbGllbnRfU2Vuc29yUmVhZGluZ0NoYW5n
ZWRfTmFtZToKLSAgICAgICAgaWYgKCFtZXNzYWdlLmV4cGVjdHNSZXNwb25zZSgpICYmICFtZXNz
YWdlLmlzUmVzcG9uc2UoKSkKLSAgICAgICAgICBwYXJhbXNDbGFzcyA9IFNlbnNvckNsaWVudF9T
ZW5zb3JSZWFkaW5nQ2hhbmdlZF9QYXJhbXM7Ci0gICAgICBicmVhazsKLSAgICB9Ci0gICAgaWYg
KHBhcmFtc0NsYXNzID09PSBudWxsKQotICAgICAgcmV0dXJuIHZhbGlkYXRvci52YWxpZGF0aW9u
RXJyb3IuTk9ORTsKLSAgICByZXR1cm4gcGFyYW1zQ2xhc3MudmFsaWRhdGUobWVzc2FnZVZhbGlk
YXRvciwgbWVzc2FnZVZhbGlkYXRvci5tZXNzYWdlLmdldEhlYWRlck51bUJ5dGVzKCkpOwotICB9
Ci0KLSAgZnVuY3Rpb24gdmFsaWRhdGVTZW5zb3JDbGllbnRSZXNwb25zZShtZXNzYWdlVmFsaWRh
dG9yKSB7Ci0gICAgcmV0dXJuIHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORTsKLSAgfQot
Ci0gIHZhciBTZW5zb3JDbGllbnQgPSB7Ci0gICAgbmFtZTogJ2RldmljZS5tb2pvbS5TZW5zb3JD
bGllbnQnLAotICAgIGtWZXJzaW9uOiAwLAotICAgIHB0ckNsYXNzOiBTZW5zb3JDbGllbnRQdHIs
Ci0gICAgcHJveHlDbGFzczogU2Vuc29yQ2xpZW50UHJveHksCi0gICAgc3R1YkNsYXNzOiBTZW5z
b3JDbGllbnRTdHViLAotICAgIHZhbGlkYXRlUmVxdWVzdDogdmFsaWRhdGVTZW5zb3JDbGllbnRS
ZXF1ZXN0LAotICAgIHZhbGlkYXRlUmVzcG9uc2U6IG51bGwsCi0gIH07Ci0gIFNlbnNvckNsaWVu
dFN0dWIucHJvdG90eXBlLnZhbGlkYXRvciA9IHZhbGlkYXRlU2Vuc29yQ2xpZW50UmVxdWVzdDsK
LSAgU2Vuc29yQ2xpZW50UHJveHkucHJvdG90eXBlLnZhbGlkYXRvciA9IG51bGw7Ci0gIGV4cG9y
dHMuU2Vuc29yVHlwZSA9IFNlbnNvclR5cGU7Ci0gIGV4cG9ydHMuUmVwb3J0aW5nTW9kZSA9IFJl
cG9ydGluZ01vZGU7Ci0gIGV4cG9ydHMuU2Vuc29yQ29uZmlndXJhdGlvbiA9IFNlbnNvckNvbmZp
Z3VyYXRpb247Ci0gIGV4cG9ydHMuU2Vuc29yID0gU2Vuc29yOwotICBleHBvcnRzLlNlbnNvclB0
ciA9IFNlbnNvclB0cjsKLSAgZXhwb3J0cy5TZW5zb3JBc3NvY2lhdGVkUHRyID0gU2Vuc29yQXNz
b2NpYXRlZFB0cjsKLSAgZXhwb3J0cy5TZW5zb3JDbGllbnQgPSBTZW5zb3JDbGllbnQ7Ci0gIGV4
cG9ydHMuU2Vuc29yQ2xpZW50UHRyID0gU2Vuc29yQ2xpZW50UHRyOwotICBleHBvcnRzLlNlbnNv
ckNsaWVudEFzc29jaWF0ZWRQdHIgPSBTZW5zb3JDbGllbnRBc3NvY2lhdGVkUHRyOwotfSkoKTsK
XCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbXBv
cnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS9zZW5zb3JfcHJv
dmlkZXIubW9qb20uanMgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRl
c3RzL3Jlc291cmNlcy9jaHJvbWl1bS9zZW5zb3JfcHJvdmlkZXIubW9qb20uanMKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ4MmIxNWEzMDRhMjQzOWY1MjA2ZTViYzg2YjkxYzUxZmNm
OTRiZDguLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvTGF5
b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21p
dW0vc2Vuc29yX3Byb3ZpZGVyLm1vam9tLmpzCisrKyAvZGV2L251bGwKQEAgLTEsNDI5ICswLDAg
QEAKLS8vIENvcHlyaWdodCAyMDE0IFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qt
c3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4K
LQotJ3VzZSBzdHJpY3QnOwotCi0oZnVuY3Rpb24oKSB7Ci0gIHZhciBtb2pvbUlkID0gJ3NlcnZp
Y2VzL2RldmljZS9wdWJsaWMvbW9qb20vc2Vuc29yX3Byb3ZpZGVyLm1vam9tJzsKLSAgaWYgKG1v
am8uaW50ZXJuYWwuaXNNb2pvbUxvYWRlZChtb2pvbUlkKSkgewotICAgIGNvbnNvbGUud2Fybign
VGhlIGZvbGxvd2luZyBtb2pvbSBpcyBsb2FkZWQgbXVsdGlwbGUgdGltZXM6ICcgKyBtb2pvbUlk
KTsKLSAgICByZXR1cm47Ci0gIH0KLSAgbW9qby5pbnRlcm5hbC5tYXJrTW9qb21Mb2FkZWQobW9q
b21JZCk7Ci0gIHZhciBiaW5kaW5ncyA9IG1vam87Ci0gIHZhciBhc3NvY2lhdGVkQmluZGluZ3Mg
PSBtb2pvOwotICB2YXIgY29kZWMgPSBtb2pvLmludGVybmFsOwotICB2YXIgdmFsaWRhdG9yID0g
bW9qby5pbnRlcm5hbDsKLQotICB2YXIgZXhwb3J0cyA9IG1vam8uaW50ZXJuYWwuZXhwb3NlTmFt
ZXNwYWNlKCdkZXZpY2UubW9qb20nKTsKLSAgdmFyIHNlbnNvciQgPQotICAgICAgbW9qby5pbnRl
cm5hbC5leHBvc2VOYW1lc3BhY2UoJ2RldmljZS5tb2pvbScpOwotICBpZiAobW9qby5jb25maWcu
YXV0b0xvYWRNb2pvbURlcHMpIHsKLSAgICBtb2pvLmludGVybmFsLmxvYWRNb2pvbUlmTmVjZXNz
YXJ5KAotICAgICAgICAnc2VydmljZXMvZGV2aWNlL3B1YmxpYy9tb2pvbS9zZW5zb3IubW9qb20n
LCAnc2Vuc29yLm1vam9tLmpzJyk7Ci0gIH0KLQotCi0gIHZhciBTZW5zb3JDcmVhdGlvblJlc3Vs
dCA9IHt9OwotICBTZW5zb3JDcmVhdGlvblJlc3VsdC5TVUNDRVNTID0gMDsKLSAgU2Vuc29yQ3Jl
YXRpb25SZXN1bHQuRVJST1JfTk9UX0FWQUlMQUJMRSA9IFNlbnNvckNyZWF0aW9uUmVzdWx0LlNV
Q0NFU1MgKyAxOwotICBTZW5zb3JDcmVhdGlvblJlc3VsdC5FUlJPUl9OT1RfQUxMT1dFRCA9IFNl
bnNvckNyZWF0aW9uUmVzdWx0LkVSUk9SX05PVF9BVkFJTEFCTEUgKyAxOwotCi0gIFNlbnNvckNy
ZWF0aW9uUmVzdWx0LmlzS25vd25FbnVtVmFsdWUgPSBmdW5jdGlvbih2YWx1ZSkgewotICAgIHN3
aXRjaCAodmFsdWUpIHsKLSAgICBjYXNlIDA6Ci0gICAgY2FzZSAxOgotICAgIGNhc2UgMjoKLSAg
ICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci0gIH07Ci0KLSAgU2Vu
c29yQ3JlYXRpb25SZXN1bHQudmFsaWRhdGUgPSBmdW5jdGlvbihlbnVtVmFsdWUpIHsKLSAgICB2
YXIgaXNFeHRlbnNpYmxlID0gZmFsc2U7Ci0gICAgaWYgKGlzRXh0ZW5zaWJsZSB8fCB0aGlzLmlz
S25vd25FbnVtVmFsdWUoZW51bVZhbHVlKSkKLSAgICAgIHJldHVybiB2YWxpZGF0b3IudmFsaWRh
dGlvbkVycm9yLk5PTkU7Ci0KLSAgICByZXR1cm4gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5V
TktOT1dOX0VOVU1fVkFMVUU7Ci0gIH07Ci0KLSAgZnVuY3Rpb24gU2Vuc29ySW5pdFBhcmFtcyh2
YWx1ZXMpIHsKLSAgICB0aGlzLmluaXREZWZhdWx0c18oKTsKLSAgICB0aGlzLmluaXRGaWVsZHNf
KHZhbHVlcyk7Ci0gIH0KLQotCi0gIFNlbnNvckluaXRQYXJhbXMua1JlYWRCdWZmZXJTaXplRm9y
VGVzdHMgPSA0ODsKLSAgU2Vuc29ySW5pdFBhcmFtcy5wcm90b3R5cGUuaW5pdERlZmF1bHRzXyA9
IGZ1bmN0aW9uKCkgewotICAgIHRoaXMuc2Vuc29yID0gbmV3IHNlbnNvciQuU2Vuc29yUHRyKCk7
Ci0gICAgdGhpcy5jbGllbnRSZWNlaXZlciA9IG5ldyBiaW5kaW5ncy5JbnRlcmZhY2VSZXF1ZXN0
KCk7Ci0gICAgdGhpcy5tZW1vcnkgPSBudWxsOwotICAgIHRoaXMuYnVmZmVyT2Zmc2V0ID0gMDsK
LSAgICB0aGlzLm1vZGUgPSAwOwotICAgIHRoaXMuZGVmYXVsdENvbmZpZ3VyYXRpb24gPSBudWxs
OwotICAgIHRoaXMubWF4aW11bUZyZXF1ZW5jeSA9IDA7Ci0gICAgdGhpcy5taW5pbXVtRnJlcXVl
bmN5ID0gMDsKLSAgfTsKLSAgU2Vuc29ySW5pdFBhcmFtcy5wcm90b3R5cGUuaW5pdEZpZWxkc18g
PSBmdW5jdGlvbihmaWVsZHMpIHsKLSAgICBmb3IodmFyIGZpZWxkIGluIGZpZWxkcykgewotICAg
ICAgICBpZiAodGhpcy5oYXNPd25Qcm9wZXJ0eShmaWVsZCkpCi0gICAgICAgICAgdGhpc1tmaWVs
ZF0gPSBmaWVsZHNbZmllbGRdOwotICAgIH0KLSAgfTsKLQotICBTZW5zb3JJbml0UGFyYW1zLnZh
bGlkYXRlID0gZnVuY3Rpb24obWVzc2FnZVZhbGlkYXRvciwgb2Zmc2V0KSB7Ci0gICAgdmFyIGVy
cjsKLSAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0SGVhZGVyKG9mZnNl
dCwgY29kZWMua1N0cnVjdEhlYWRlclNpemUpOwotICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52
YWxpZGF0aW9uRXJyb3IuTk9ORSkKLSAgICAgICAgcmV0dXJuIGVycjsKLQotICAgIHZhciBrVmVy
c2lvblNpemVzID0gWwotICAgICAge3ZlcnNpb246IDAsIG51bUJ5dGVzOiA2NH0KLSAgICBdOwot
ICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RWZXJzaW9uKG9mZnNldCwg
a1ZlcnNpb25TaXplcyk7Ci0gICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJv
ci5OT05FKQotICAgICAgICByZXR1cm4gZXJyOwotCi0KLSAgICAvLyB2YWxpZGF0ZSBTZW5zb3JJ
bml0UGFyYW1zLnNlbnNvcgotICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVJbnRl
cmZhY2Uob2Zmc2V0ICsgY29kZWMua1N0cnVjdEhlYWRlclNpemUgKyAwLCBmYWxzZSk7Ci0gICAg
aWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQotICAgICAgICByZXR1
cm4gZXJyOwotCi0KLSAgICAvLyB2YWxpZGF0ZSBTZW5zb3JJbml0UGFyYW1zLmNsaWVudFJlY2Vp
dmVyCi0gICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZUludGVyZmFjZVJlcXVlc3Qo
b2Zmc2V0ICsgY29kZWMua1N0cnVjdEhlYWRlclNpemUgKyA4LCBmYWxzZSkKLSAgICBpZiAoZXJy
ICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCi0gICAgICAgIHJldHVybiBlcnI7
Ci0KLQotICAgIC8vIHZhbGlkYXRlIFNlbnNvckluaXRQYXJhbXMubWVtb3J5Ci0gICAgZXJyID0g
bWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZUhhbmRsZShvZmZzZXQgKyBjb2RlYy5rU3RydWN0SGVh
ZGVyU2l6ZSArIDEyLCBmYWxzZSkKLSAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlv
bkVycm9yLk5PTkUpCi0gICAgICAgIHJldHVybiBlcnI7Ci0KLQotCi0gICAgLy8gdmFsaWRhdGUg
U2Vuc29ySW5pdFBhcmFtcy5tb2RlCi0gICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0
ZUVudW0ob2Zmc2V0ICsgY29kZWMua1N0cnVjdEhlYWRlclNpemUgKyAyNCwgc2Vuc29yJC5SZXBv
cnRpbmdNb2RlKTsKLSAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5P
TkUpCi0gICAgICAgIHJldHVybiBlcnI7Ci0KLQotICAgIC8vIHZhbGlkYXRlIFNlbnNvckluaXRQ
YXJhbXMuZGVmYXVsdENvbmZpZ3VyYXRpb24KLSAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZh
bGlkYXRlU3RydWN0UG9pbnRlcihvZmZzZXQgKyBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDMy
LCBzZW5zb3IkLlNlbnNvckNvbmZpZ3VyYXRpb24sIGZhbHNlKTsKLSAgICBpZiAoZXJyICE9PSB2
YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCi0gICAgICAgIHJldHVybiBlcnI7Ci0KLQot
Ci0gICAgcmV0dXJuIHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORTsKLSAgfTsKLQotICBT
ZW5zb3JJbml0UGFyYW1zLmVuY29kZWRTaXplID0gY29kZWMua1N0cnVjdEhlYWRlclNpemUgKyA1
NjsKLQotICBTZW5zb3JJbml0UGFyYW1zLmRlY29kZSA9IGZ1bmN0aW9uKGRlY29kZXIpIHsKLSAg
ICB2YXIgcGFja2VkOwotICAgIHZhciB2YWwgPSBuZXcgU2Vuc29ySW5pdFBhcmFtcygpOwotICAg
IHZhciBudW1iZXJPZkJ5dGVzID0gZGVjb2Rlci5yZWFkVWludDMyKCk7Ci0gICAgdmFyIHZlcnNp
b24gPSBkZWNvZGVyLnJlYWRVaW50MzIoKTsKLSAgICB2YWwuc2Vuc29yID0gZGVjb2Rlci5kZWNv
ZGVTdHJ1Y3QobmV3IGNvZGVjLkludGVyZmFjZShzZW5zb3IkLlNlbnNvclB0cikpOwotICAgIHZh
bC5jbGllbnRSZWNlaXZlciA9IGRlY29kZXIuZGVjb2RlU3RydWN0KGNvZGVjLkludGVyZmFjZVJl
cXVlc3QpOwotICAgIHZhbC5tZW1vcnkgPSBkZWNvZGVyLmRlY29kZVN0cnVjdChjb2RlYy5IYW5k
bGUpOwotICAgIHZhbC5idWZmZXJPZmZzZXQgPSBkZWNvZGVyLmRlY29kZVN0cnVjdChjb2RlYy5V
aW50NjQpOwotICAgIHZhbC5tb2RlID0gZGVjb2Rlci5kZWNvZGVTdHJ1Y3QoY29kZWMuSW50MzIp
OwotICAgIGRlY29kZXIuc2tpcCgxKTsKLSAgICBkZWNvZGVyLnNraXAoMSk7Ci0gICAgZGVjb2Rl
ci5za2lwKDEpOwotICAgIGRlY29kZXIuc2tpcCgxKTsKLSAgICB2YWwuZGVmYXVsdENvbmZpZ3Vy
YXRpb24gPSBkZWNvZGVyLmRlY29kZVN0cnVjdFBvaW50ZXIoc2Vuc29yJC5TZW5zb3JDb25maWd1
cmF0aW9uKTsKLSAgICB2YWwubWF4aW11bUZyZXF1ZW5jeSA9IGRlY29kZXIuZGVjb2RlU3RydWN0
KGNvZGVjLkRvdWJsZSk7Ci0gICAgdmFsLm1pbmltdW1GcmVxdWVuY3kgPSBkZWNvZGVyLmRlY29k
ZVN0cnVjdChjb2RlYy5Eb3VibGUpOwotICAgIHJldHVybiB2YWw7Ci0gIH07Ci0KLSAgU2Vuc29y
SW5pdFBhcmFtcy5lbmNvZGUgPSBmdW5jdGlvbihlbmNvZGVyLCB2YWwpIHsKLSAgICB2YXIgcGFj
a2VkOwotICAgIGVuY29kZXIud3JpdGVVaW50MzIoU2Vuc29ySW5pdFBhcmFtcy5lbmNvZGVkU2l6
ZSk7Ci0gICAgZW5jb2Rlci53cml0ZVVpbnQzMigwKTsKLSAgICBlbmNvZGVyLmVuY29kZVN0cnVj
dChuZXcgY29kZWMuSW50ZXJmYWNlKHNlbnNvciQuU2Vuc29yUHRyKSwgdmFsLnNlbnNvcik7Ci0g
ICAgZW5jb2Rlci5lbmNvZGVTdHJ1Y3QoY29kZWMuSW50ZXJmYWNlUmVxdWVzdCwgdmFsLmNsaWVu
dFJlY2VpdmVyKTsKLSAgICBlbmNvZGVyLmVuY29kZVN0cnVjdChjb2RlYy5IYW5kbGUsIHZhbC5t
ZW1vcnkpOwotICAgIGVuY29kZXIuZW5jb2RlU3RydWN0KGNvZGVjLlVpbnQ2NCwgdmFsLmJ1ZmZl
ck9mZnNldCk7Ci0gICAgZW5jb2Rlci5lbmNvZGVTdHJ1Y3QoY29kZWMuSW50MzIsIHZhbC5tb2Rl
KTsKLSAgICBlbmNvZGVyLnNraXAoMSk7Ci0gICAgZW5jb2Rlci5za2lwKDEpOwotICAgIGVuY29k
ZXIuc2tpcCgxKTsKLSAgICBlbmNvZGVyLnNraXAoMSk7Ci0gICAgZW5jb2Rlci5lbmNvZGVTdHJ1
Y3RQb2ludGVyKHNlbnNvciQuU2Vuc29yQ29uZmlndXJhdGlvbiwgdmFsLmRlZmF1bHRDb25maWd1
cmF0aW9uKTsKLSAgICBlbmNvZGVyLmVuY29kZVN0cnVjdChjb2RlYy5Eb3VibGUsIHZhbC5tYXhp
bXVtRnJlcXVlbmN5KTsKLSAgICBlbmNvZGVyLmVuY29kZVN0cnVjdChjb2RlYy5Eb3VibGUsIHZh
bC5taW5pbXVtRnJlcXVlbmN5KTsKLSAgfTsKLSAgZnVuY3Rpb24gU2Vuc29yUHJvdmlkZXJfR2V0
U2Vuc29yX1BhcmFtcyh2YWx1ZXMpIHsKLSAgICB0aGlzLmluaXREZWZhdWx0c18oKTsKLSAgICB0
aGlzLmluaXRGaWVsZHNfKHZhbHVlcyk7Ci0gIH0KLQotCi0gIFNlbnNvclByb3ZpZGVyX0dldFNl
bnNvcl9QYXJhbXMucHJvdG90eXBlLmluaXREZWZhdWx0c18gPSBmdW5jdGlvbigpIHsKLSAgICB0
aGlzLnR5cGUgPSAwOwotICB9OwotICBTZW5zb3JQcm92aWRlcl9HZXRTZW5zb3JfUGFyYW1zLnBy
b3RvdHlwZS5pbml0RmllbGRzXyA9IGZ1bmN0aW9uKGZpZWxkcykgewotICAgIGZvcih2YXIgZmll
bGQgaW4gZmllbGRzKSB7Ci0gICAgICAgIGlmICh0aGlzLmhhc093blByb3BlcnR5KGZpZWxkKSkK
LSAgICAgICAgICB0aGlzW2ZpZWxkXSA9IGZpZWxkc1tmaWVsZF07Ci0gICAgfQotICB9OwotCi0g
IFNlbnNvclByb3ZpZGVyX0dldFNlbnNvcl9QYXJhbXMudmFsaWRhdGUgPSBmdW5jdGlvbihtZXNz
YWdlVmFsaWRhdG9yLCBvZmZzZXQpIHsKLSAgICB2YXIgZXJyOwotICAgIGVyciA9IG1lc3NhZ2VW
YWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RIZWFkZXIob2Zmc2V0LCBjb2RlYy5rU3RydWN0SGVhZGVy
U2l6ZSk7Ci0gICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQot
ICAgICAgICByZXR1cm4gZXJyOwotCi0gICAgdmFyIGtWZXJzaW9uU2l6ZXMgPSBbCi0gICAgICB7
dmVyc2lvbjogMCwgbnVtQnl0ZXM6IDE2fQotICAgIF07Ci0gICAgZXJyID0gbWVzc2FnZVZhbGlk
YXRvci52YWxpZGF0ZVN0cnVjdFZlcnNpb24ob2Zmc2V0LCBrVmVyc2lvblNpemVzKTsKLSAgICBp
ZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCi0gICAgICAgIHJldHVy
biBlcnI7Ci0KLQotICAgIC8vIHZhbGlkYXRlIFNlbnNvclByb3ZpZGVyX0dldFNlbnNvcl9QYXJh
bXMudHlwZQotICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVFbnVtKG9mZnNldCAr
IGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgMCwgc2Vuc29yJC5TZW5zb3JUeXBlKTsKLSAgICBp
ZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCi0gICAgICAgIHJldHVy
biBlcnI7Ci0KLSAgICByZXR1cm4gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FOwotICB9
OwotCi0gIFNlbnNvclByb3ZpZGVyX0dldFNlbnNvcl9QYXJhbXMuZW5jb2RlZFNpemUgPSBjb2Rl
Yy5rU3RydWN0SGVhZGVyU2l6ZSArIDg7Ci0KLSAgU2Vuc29yUHJvdmlkZXJfR2V0U2Vuc29yX1Bh
cmFtcy5kZWNvZGUgPSBmdW5jdGlvbihkZWNvZGVyKSB7Ci0gICAgdmFyIHBhY2tlZDsKLSAgICB2
YXIgdmFsID0gbmV3IFNlbnNvclByb3ZpZGVyX0dldFNlbnNvcl9QYXJhbXMoKTsKLSAgICB2YXIg
bnVtYmVyT2ZCeXRlcyA9IGRlY29kZXIucmVhZFVpbnQzMigpOwotICAgIHZhciB2ZXJzaW9uID0g
ZGVjb2Rlci5yZWFkVWludDMyKCk7Ci0gICAgdmFsLnR5cGUgPSBkZWNvZGVyLmRlY29kZVN0cnVj
dChjb2RlYy5JbnQzMik7Ci0gICAgZGVjb2Rlci5za2lwKDEpOwotICAgIGRlY29kZXIuc2tpcCgx
KTsKLSAgICBkZWNvZGVyLnNraXAoMSk7Ci0gICAgZGVjb2Rlci5za2lwKDEpOwotICAgIHJldHVy
biB2YWw7Ci0gIH07Ci0KLSAgU2Vuc29yUHJvdmlkZXJfR2V0U2Vuc29yX1BhcmFtcy5lbmNvZGUg
PSBmdW5jdGlvbihlbmNvZGVyLCB2YWwpIHsKLSAgICB2YXIgcGFja2VkOwotICAgIGVuY29kZXIu
d3JpdGVVaW50MzIoU2Vuc29yUHJvdmlkZXJfR2V0U2Vuc29yX1BhcmFtcy5lbmNvZGVkU2l6ZSk7
Ci0gICAgZW5jb2Rlci53cml0ZVVpbnQzMigwKTsKLSAgICBlbmNvZGVyLmVuY29kZVN0cnVjdChj
b2RlYy5JbnQzMiwgdmFsLnR5cGUpOwotICAgIGVuY29kZXIuc2tpcCgxKTsKLSAgICBlbmNvZGVy
LnNraXAoMSk7Ci0gICAgZW5jb2Rlci5za2lwKDEpOwotICAgIGVuY29kZXIuc2tpcCgxKTsKLSAg
fTsKLSAgZnVuY3Rpb24gU2Vuc29yUHJvdmlkZXJfR2V0U2Vuc29yX1Jlc3BvbnNlUGFyYW1zKHZh
bHVlcykgewotICAgIHRoaXMuaW5pdERlZmF1bHRzXygpOwotICAgIHRoaXMuaW5pdEZpZWxkc18o
dmFsdWVzKTsKLSAgfQotCi0KLSAgU2Vuc29yUHJvdmlkZXJfR2V0U2Vuc29yX1Jlc3BvbnNlUGFy
YW1zLnByb3RvdHlwZS5pbml0RGVmYXVsdHNfID0gZnVuY3Rpb24oKSB7Ci0gICAgdGhpcy5yZXN1
bHQgPSAwOwotICAgIHRoaXMuaW5pdFBhcmFtcyA9IG51bGw7Ci0gIH07Ci0gIFNlbnNvclByb3Zp
ZGVyX0dldFNlbnNvcl9SZXNwb25zZVBhcmFtcy5wcm90b3R5cGUuaW5pdEZpZWxkc18gPSBmdW5j
dGlvbihmaWVsZHMpIHsKLSAgICBmb3IodmFyIGZpZWxkIGluIGZpZWxkcykgewotICAgICAgICBp
ZiAodGhpcy5oYXNPd25Qcm9wZXJ0eShmaWVsZCkpCi0gICAgICAgICAgdGhpc1tmaWVsZF0gPSBm
aWVsZHNbZmllbGRdOwotICAgIH0KLSAgfTsKLQotICBTZW5zb3JQcm92aWRlcl9HZXRTZW5zb3Jf
UmVzcG9uc2VQYXJhbXMudmFsaWRhdGUgPSBmdW5jdGlvbihtZXNzYWdlVmFsaWRhdG9yLCBvZmZz
ZXQpIHsKLSAgICB2YXIgZXJyOwotICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVT
dHJ1Y3RIZWFkZXIob2Zmc2V0LCBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSk7Ci0gICAgaWYgKGVy
ciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQotICAgICAgICByZXR1cm4gZXJy
OwotCi0gICAgdmFyIGtWZXJzaW9uU2l6ZXMgPSBbCi0gICAgICB7dmVyc2lvbjogMCwgbnVtQnl0
ZXM6IDI0fQotICAgIF07Ci0gICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVj
dFZlcnNpb24ob2Zmc2V0LCBrVmVyc2lvblNpemVzKTsKLSAgICBpZiAoZXJyICE9PSB2YWxpZGF0
b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCi0gICAgICAgIHJldHVybiBlcnI7Ci0KLQotICAgIC8v
IHZhbGlkYXRlIFNlbnNvclByb3ZpZGVyX0dldFNlbnNvcl9SZXNwb25zZVBhcmFtcy5yZXN1bHQK
LSAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlRW51bShvZmZzZXQgKyBjb2RlYy5r
U3RydWN0SGVhZGVyU2l6ZSArIDAsIFNlbnNvckNyZWF0aW9uUmVzdWx0KTsKLSAgICBpZiAoZXJy
ICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCi0gICAgICAgIHJldHVybiBlcnI7
Ci0KLQotICAgIC8vIHZhbGlkYXRlIFNlbnNvclByb3ZpZGVyX0dldFNlbnNvcl9SZXNwb25zZVBh
cmFtcy5pbml0UGFyYW1zCi0gICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVj
dFBvaW50ZXIob2Zmc2V0ICsgY29kZWMua1N0cnVjdEhlYWRlclNpemUgKyA4LCBTZW5zb3JJbml0
UGFyYW1zLCB0cnVlKTsKLSAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9y
Lk5PTkUpCi0gICAgICAgIHJldHVybiBlcnI7Ci0KLSAgICByZXR1cm4gdmFsaWRhdG9yLnZhbGlk
YXRpb25FcnJvci5OT05FOwotICB9OwotCi0gIFNlbnNvclByb3ZpZGVyX0dldFNlbnNvcl9SZXNw
b25zZVBhcmFtcy5lbmNvZGVkU2l6ZSA9IGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgMTY7Ci0K
LSAgU2Vuc29yUHJvdmlkZXJfR2V0U2Vuc29yX1Jlc3BvbnNlUGFyYW1zLmRlY29kZSA9IGZ1bmN0
aW9uKGRlY29kZXIpIHsKLSAgICB2YXIgcGFja2VkOwotICAgIHZhciB2YWwgPSBuZXcgU2Vuc29y
UHJvdmlkZXJfR2V0U2Vuc29yX1Jlc3BvbnNlUGFyYW1zKCk7Ci0gICAgdmFyIG51bWJlck9mQnl0
ZXMgPSBkZWNvZGVyLnJlYWRVaW50MzIoKTsKLSAgICB2YXIgdmVyc2lvbiA9IGRlY29kZXIucmVh
ZFVpbnQzMigpOwotICAgIHZhbC5yZXN1bHQgPSBkZWNvZGVyLmRlY29kZVN0cnVjdChjb2RlYy5J
bnQzMik7Ci0gICAgZGVjb2Rlci5za2lwKDEpOwotICAgIGRlY29kZXIuc2tpcCgxKTsKLSAgICBk
ZWNvZGVyLnNraXAoMSk7Ci0gICAgZGVjb2Rlci5za2lwKDEpOwotICAgIHZhbC5pbml0UGFyYW1z
ID0gZGVjb2Rlci5kZWNvZGVTdHJ1Y3RQb2ludGVyKFNlbnNvckluaXRQYXJhbXMpOwotICAgIHJl
dHVybiB2YWw7Ci0gIH07Ci0KLSAgU2Vuc29yUHJvdmlkZXJfR2V0U2Vuc29yX1Jlc3BvbnNlUGFy
YW1zLmVuY29kZSA9IGZ1bmN0aW9uKGVuY29kZXIsIHZhbCkgewotICAgIHZhciBwYWNrZWQ7Ci0g
ICAgZW5jb2Rlci53cml0ZVVpbnQzMihTZW5zb3JQcm92aWRlcl9HZXRTZW5zb3JfUmVzcG9uc2VQ
YXJhbXMuZW5jb2RlZFNpemUpOwotICAgIGVuY29kZXIud3JpdGVVaW50MzIoMCk7Ci0gICAgZW5j
b2Rlci5lbmNvZGVTdHJ1Y3QoY29kZWMuSW50MzIsIHZhbC5yZXN1bHQpOwotICAgIGVuY29kZXIu
c2tpcCgxKTsKLSAgICBlbmNvZGVyLnNraXAoMSk7Ci0gICAgZW5jb2Rlci5za2lwKDEpOwotICAg
IGVuY29kZXIuc2tpcCgxKTsKLSAgICBlbmNvZGVyLmVuY29kZVN0cnVjdFBvaW50ZXIoU2Vuc29y
SW5pdFBhcmFtcywgdmFsLmluaXRQYXJhbXMpOwotICB9OwotICB2YXIga1NlbnNvclByb3ZpZGVy
X0dldFNlbnNvcl9OYW1lID0gMDsKLQotICBmdW5jdGlvbiBTZW5zb3JQcm92aWRlclB0cihoYW5k
bGVPclB0ckluZm8pIHsKLSAgICB0aGlzLnB0ciA9IG5ldyBiaW5kaW5ncy5JbnRlcmZhY2VQdHJD
b250cm9sbGVyKFNlbnNvclByb3ZpZGVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaGFuZGxlT3JQdHJJbmZvKTsKLSAgfQotCi0gIGZ1bmN0aW9u
IFNlbnNvclByb3ZpZGVyQXNzb2NpYXRlZFB0cihhc3NvY2lhdGVkSW50ZXJmYWNlUHRySW5mbykg
ewotICAgIHRoaXMucHRyID0gbmV3IGFzc29jaWF0ZWRCaW5kaW5ncy5Bc3NvY2lhdGVkSW50ZXJm
YWNlUHRyQ29udHJvbGxlcigKLSAgICAgICAgU2Vuc29yUHJvdmlkZXIsIGFzc29jaWF0ZWRJbnRl
cmZhY2VQdHJJbmZvKTsKLSAgfQotCi0gIFNlbnNvclByb3ZpZGVyQXNzb2NpYXRlZFB0ci5wcm90
b3R5cGUgPQotICAgICAgT2JqZWN0LmNyZWF0ZShTZW5zb3JQcm92aWRlclB0ci5wcm90b3R5cGUp
OwotICBTZW5zb3JQcm92aWRlckFzc29jaWF0ZWRQdHIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0K
LSAgICAgIFNlbnNvclByb3ZpZGVyQXNzb2NpYXRlZFB0cjsKLQotICBmdW5jdGlvbiBTZW5zb3JQ
cm92aWRlclByb3h5KHJlY2VpdmVyKSB7Ci0gICAgdGhpcy5yZWNlaXZlcl8gPSByZWNlaXZlcjsK
LSAgfQotICBTZW5zb3JQcm92aWRlclB0ci5wcm90b3R5cGUuZ2V0U2Vuc29yID0gZnVuY3Rpb24o
KSB7Ci0gICAgcmV0dXJuIFNlbnNvclByb3ZpZGVyUHJveHkucHJvdG90eXBlLmdldFNlbnNvcgot
ICAgICAgICAuYXBwbHkodGhpcy5wdHIuZ2V0UHJveHkoKSwgYXJndW1lbnRzKTsKLSAgfTsKLQot
ICBTZW5zb3JQcm92aWRlclByb3h5LnByb3RvdHlwZS5nZXRTZW5zb3IgPSBmdW5jdGlvbih0eXBl
KSB7Ci0gICAgdmFyIHBhcmFtcyA9IG5ldyBTZW5zb3JQcm92aWRlcl9HZXRTZW5zb3JfUGFyYW1z
KCk7Ci0gICAgcGFyYW1zLnR5cGUgPSB0eXBlOwotICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5j
dGlvbihyZXNvbHZlLCByZWplY3QpIHsKLSAgICAgIHZhciBidWlsZGVyID0gbmV3IGNvZGVjLk1l
c3NhZ2VWMUJ1aWxkZXIoCi0gICAgICAgICAga1NlbnNvclByb3ZpZGVyX0dldFNlbnNvcl9OYW1l
LAotICAgICAgICAgIGNvZGVjLmFsaWduKFNlbnNvclByb3ZpZGVyX0dldFNlbnNvcl9QYXJhbXMu
ZW5jb2RlZFNpemUpLAotICAgICAgICAgIGNvZGVjLmtNZXNzYWdlRXhwZWN0c1Jlc3BvbnNlLCAw
KTsKLSAgICAgIGJ1aWxkZXIuZW5jb2RlU3RydWN0KFNlbnNvclByb3ZpZGVyX0dldFNlbnNvcl9Q
YXJhbXMsIHBhcmFtcyk7Ci0gICAgICB2YXIgbWVzc2FnZSA9IGJ1aWxkZXIuZmluaXNoKCk7Ci0g
ICAgICB0aGlzLnJlY2VpdmVyXy5hY2NlcHRBbmRFeHBlY3RSZXNwb25zZShtZXNzYWdlKS50aGVu
KGZ1bmN0aW9uKG1lc3NhZ2UpIHsKLSAgICAgICAgdmFyIHJlYWRlciA9IG5ldyBjb2RlYy5NZXNz
YWdlUmVhZGVyKG1lc3NhZ2UpOwotICAgICAgICB2YXIgcmVzcG9uc2VQYXJhbXMgPQotICAgICAg
ICAgICAgcmVhZGVyLmRlY29kZVN0cnVjdChTZW5zb3JQcm92aWRlcl9HZXRTZW5zb3JfUmVzcG9u
c2VQYXJhbXMpOwotICAgICAgICByZXNvbHZlKHJlc3BvbnNlUGFyYW1zKTsKLSAgICAgIH0pLmNh
dGNoKGZ1bmN0aW9uKHJlc3VsdCkgewotICAgICAgICByZWplY3QoRXJyb3IoIkNvbm5lY3Rpb24g
ZXJyb3I6ICIgKyByZXN1bHQpKTsKLSAgICAgIH0pOwotICAgIH0uYmluZCh0aGlzKSk7Ci0gIH07
Ci0KLSAgZnVuY3Rpb24gU2Vuc29yUHJvdmlkZXJTdHViKGRlbGVnYXRlKSB7Ci0gICAgdGhpcy5k
ZWxlZ2F0ZV8gPSBkZWxlZ2F0ZTsKLSAgfQotICBTZW5zb3JQcm92aWRlclN0dWIucHJvdG90eXBl
LmdldFNlbnNvciA9IGZ1bmN0aW9uKHR5cGUpIHsKLSAgICByZXR1cm4gdGhpcy5kZWxlZ2F0ZV8g
JiYgdGhpcy5kZWxlZ2F0ZV8uZ2V0U2Vuc29yICYmIHRoaXMuZGVsZWdhdGVfLmdldFNlbnNvcih0
eXBlKTsKLSAgfQotCi0gIFNlbnNvclByb3ZpZGVyU3R1Yi5wcm90b3R5cGUuYWNjZXB0ID0gZnVu
Y3Rpb24obWVzc2FnZSkgewotICAgIHZhciByZWFkZXIgPSBuZXcgY29kZWMuTWVzc2FnZVJlYWRl
cihtZXNzYWdlKTsKLSAgICBzd2l0Y2ggKHJlYWRlci5tZXNzYWdlTmFtZSkgewotICAgIGRlZmF1
bHQ6Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICB9OwotCi0gIFNlbnNvclByb3ZpZGVy
U3R1Yi5wcm90b3R5cGUuYWNjZXB0V2l0aFJlc3BvbmRlciA9Ci0gICAgICBmdW5jdGlvbihtZXNz
YWdlLCByZXNwb25kZXIpIHsKLSAgICB2YXIgcmVhZGVyID0gbmV3IGNvZGVjLk1lc3NhZ2VSZWFk
ZXIobWVzc2FnZSk7Ci0gICAgc3dpdGNoIChyZWFkZXIubWVzc2FnZU5hbWUpIHsKLSAgICBjYXNl
IGtTZW5zb3JQcm92aWRlcl9HZXRTZW5zb3JfTmFtZToKLSAgICAgIHZhciBwYXJhbXMgPSByZWFk
ZXIuZGVjb2RlU3RydWN0KFNlbnNvclByb3ZpZGVyX0dldFNlbnNvcl9QYXJhbXMpOwotICAgICAg
dGhpcy5nZXRTZW5zb3IocGFyYW1zLnR5cGUpLnRoZW4oZnVuY3Rpb24ocmVzcG9uc2UpIHsKLSAg
ICAgICAgdmFyIHJlc3BvbnNlUGFyYW1zID0KLSAgICAgICAgICAgIG5ldyBTZW5zb3JQcm92aWRl
cl9HZXRTZW5zb3JfUmVzcG9uc2VQYXJhbXMoKTsKLSAgICAgICAgcmVzcG9uc2VQYXJhbXMucmVz
dWx0ID0gcmVzcG9uc2UucmVzdWx0OwotICAgICAgICByZXNwb25zZVBhcmFtcy5pbml0UGFyYW1z
ID0gcmVzcG9uc2UuaW5pdFBhcmFtczsKLSAgICAgICAgdmFyIGJ1aWxkZXIgPSBuZXcgY29kZWMu
TWVzc2FnZVYxQnVpbGRlcigKLSAgICAgICAgICAgIGtTZW5zb3JQcm92aWRlcl9HZXRTZW5zb3Jf
TmFtZSwKLSAgICAgICAgICAgIGNvZGVjLmFsaWduKFNlbnNvclByb3ZpZGVyX0dldFNlbnNvcl9S
ZXNwb25zZVBhcmFtcy5lbmNvZGVkU2l6ZSksCi0gICAgICAgICAgICBjb2RlYy5rTWVzc2FnZUlz
UmVzcG9uc2UsIHJlYWRlci5yZXF1ZXN0SUQpOwotICAgICAgICBidWlsZGVyLmVuY29kZVN0cnVj
dChTZW5zb3JQcm92aWRlcl9HZXRTZW5zb3JfUmVzcG9uc2VQYXJhbXMsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHJlc3BvbnNlUGFyYW1zKTsKLSAgICAgICAgdmFyIG1lc3NhZ2UgPSBi
dWlsZGVyLmZpbmlzaCgpOwotICAgICAgICByZXNwb25kZXIuYWNjZXB0KG1lc3NhZ2UpOwotICAg
ICAgfSk7Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICBkZWZhdWx0OgotICAgICAgcmV0dXJuIGZh
bHNlOwotICAgIH0KLSAgfTsKLQotICBmdW5jdGlvbiB2YWxpZGF0ZVNlbnNvclByb3ZpZGVyUmVx
dWVzdChtZXNzYWdlVmFsaWRhdG9yKSB7Ci0gICAgdmFyIG1lc3NhZ2UgPSBtZXNzYWdlVmFsaWRh
dG9yLm1lc3NhZ2U7Ci0gICAgdmFyIHBhcmFtc0NsYXNzID0gbnVsbDsKLSAgICBzd2l0Y2ggKG1l
c3NhZ2UuZ2V0TmFtZSgpKSB7Ci0gICAgICBjYXNlIGtTZW5zb3JQcm92aWRlcl9HZXRTZW5zb3Jf
TmFtZToKLSAgICAgICAgaWYgKG1lc3NhZ2UuZXhwZWN0c1Jlc3BvbnNlKCkpCi0gICAgICAgICAg
cGFyYW1zQ2xhc3MgPSBTZW5zb3JQcm92aWRlcl9HZXRTZW5zb3JfUGFyYW1zOwotICAgICAgYnJl
YWs7Ci0gICAgfQotICAgIGlmIChwYXJhbXNDbGFzcyA9PT0gbnVsbCkKLSAgICAgIHJldHVybiB2
YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkU7Ci0gICAgcmV0dXJuIHBhcmFtc0NsYXNzLnZh
bGlkYXRlKG1lc3NhZ2VWYWxpZGF0b3IsIG1lc3NhZ2VWYWxpZGF0b3IubWVzc2FnZS5nZXRIZWFk
ZXJOdW1CeXRlcygpKTsKLSAgfQotCi0gIGZ1bmN0aW9uIHZhbGlkYXRlU2Vuc29yUHJvdmlkZXJS
ZXNwb25zZShtZXNzYWdlVmFsaWRhdG9yKSB7Ci0gICB2YXIgbWVzc2FnZSA9IG1lc3NhZ2VWYWxp
ZGF0b3IubWVzc2FnZTsKLSAgIHZhciBwYXJhbXNDbGFzcyA9IG51bGw7Ci0gICBzd2l0Y2ggKG1l
c3NhZ2UuZ2V0TmFtZSgpKSB7Ci0gICAgICBjYXNlIGtTZW5zb3JQcm92aWRlcl9HZXRTZW5zb3Jf
TmFtZToKLSAgICAgICAgaWYgKG1lc3NhZ2UuaXNSZXNwb25zZSgpKQotICAgICAgICAgIHBhcmFt
c0NsYXNzID0gU2Vuc29yUHJvdmlkZXJfR2V0U2Vuc29yX1Jlc3BvbnNlUGFyYW1zOwotICAgICAg
ICBicmVhazsKLSAgICB9Ci0gICAgaWYgKHBhcmFtc0NsYXNzID09PSBudWxsKQotICAgICAgcmV0
dXJuIHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORTsKLSAgICByZXR1cm4gcGFyYW1zQ2xh
c3MudmFsaWRhdGUobWVzc2FnZVZhbGlkYXRvciwgbWVzc2FnZVZhbGlkYXRvci5tZXNzYWdlLmdl
dEhlYWRlck51bUJ5dGVzKCkpOwotICB9Ci0KLSAgdmFyIFNlbnNvclByb3ZpZGVyID0gewotICAg
IG5hbWU6ICdkZXZpY2UubW9qb20uU2Vuc29yUHJvdmlkZXInLAotICAgIGtWZXJzaW9uOiAwLAot
ICAgIHB0ckNsYXNzOiBTZW5zb3JQcm92aWRlclB0ciwKLSAgICBwcm94eUNsYXNzOiBTZW5zb3JQ
cm92aWRlclByb3h5LAotICAgIHN0dWJDbGFzczogU2Vuc29yUHJvdmlkZXJTdHViLAotICAgIHZh
bGlkYXRlUmVxdWVzdDogdmFsaWRhdGVTZW5zb3JQcm92aWRlclJlcXVlc3QsCi0gICAgdmFsaWRh
dGVSZXNwb25zZTogdmFsaWRhdGVTZW5zb3JQcm92aWRlclJlc3BvbnNlLAotICB9OwotICBTZW5z
b3JQcm92aWRlclN0dWIucHJvdG90eXBlLnZhbGlkYXRvciA9IHZhbGlkYXRlU2Vuc29yUHJvdmlk
ZXJSZXF1ZXN0OwotICBTZW5zb3JQcm92aWRlclByb3h5LnByb3RvdHlwZS52YWxpZGF0b3IgPSB2
YWxpZGF0ZVNlbnNvclByb3ZpZGVyUmVzcG9uc2U7Ci0gIGV4cG9ydHMuU2Vuc29yQ3JlYXRpb25S
ZXN1bHQgPSBTZW5zb3JDcmVhdGlvblJlc3VsdDsKLSAgZXhwb3J0cy5TZW5zb3JJbml0UGFyYW1z
ID0gU2Vuc29ySW5pdFBhcmFtczsKLSAgZXhwb3J0cy5TZW5zb3JQcm92aWRlciA9IFNlbnNvclBy
b3ZpZGVyOwotICBleHBvcnRzLlNlbnNvclByb3ZpZGVyUHRyID0gU2Vuc29yUHJvdmlkZXJQdHI7
Ci0gIGV4cG9ydHMuU2Vuc29yUHJvdmlkZXJBc3NvY2lhdGVkUHRyID0gU2Vuc29yUHJvdmlkZXJB
c3NvY2lhdGVkUHRyOwotfSkoKTsKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3cz
Yy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL3N0cmluZzE2Lm1vam9tLmpz
IGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMv
Y2hyb21pdW0vc3RyaW5nMTYubW9qb20uanMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDI1Mzc3ZTY2NTcxYjE0NTkwN2E0OTBkMTdjNjczYTVhYmQwMjMxNzEuLjAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNj
L3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vc3RyaW5nMTYubW9qb20uanMK
KysrIC9kZXYvbnVsbApAQCAtMSwxNDEgKzAsMCBAQAotLy8gQ29weXJpZ2h0IDIwMTQgVGhlIENo
cm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3Vy
Y2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0v
LyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotCi0ndXNlIHN0cmljdCc7Ci0KLShmdW5jdGlv
bigpIHsKLSAgdmFyIG1vam9tSWQgPSAnbW9qby9wdWJsaWMvbW9qb20vYmFzZS9zdHJpbmcxNi5t
b2pvbSc7Ci0gIGlmIChtb2pvLmludGVybmFsLmlzTW9qb21Mb2FkZWQobW9qb21JZCkpIHsKLSAg
ICBjb25zb2xlLndhcm4oJ1RoZSBmb2xsb3dpbmcgbW9qb20gaXMgbG9hZGVkIG11bHRpcGxlIHRp
bWVzOiAnICsgbW9qb21JZCk7Ci0gICAgcmV0dXJuOwotICB9Ci0gIG1vam8uaW50ZXJuYWwubWFy
a01vam9tTG9hZGVkKG1vam9tSWQpOwotICB2YXIgYmluZGluZ3MgPSBtb2pvOwotICB2YXIgYXNz
b2NpYXRlZEJpbmRpbmdzID0gbW9qbzsKLSAgdmFyIGNvZGVjID0gbW9qby5pbnRlcm5hbDsKLSAg
dmFyIHZhbGlkYXRvciA9IG1vam8uaW50ZXJuYWw7Ci0KLSAgdmFyIGV4cG9ydHMgPSBtb2pvLmlu
dGVybmFsLmV4cG9zZU5hbWVzcGFjZSgnbW9qb0Jhc2UubW9qb20nKTsKLSAgdmFyIGJpZ19idWZm
ZXIkID0KLSAgICAgIG1vam8uaW50ZXJuYWwuZXhwb3NlTmFtZXNwYWNlKCdtb2pvQmFzZS5tb2pv
bScpOwotICBpZiAobW9qby5jb25maWcuYXV0b0xvYWRNb2pvbURlcHMpIHsKLSAgICBtb2pvLmlu
dGVybmFsLmxvYWRNb2pvbUlmTmVjZXNzYXJ5KAotICAgICAgICAnbW9qby9wdWJsaWMvbW9qb20v
YmFzZS9iaWdfYnVmZmVyLm1vam9tJywgJ2JpZ19idWZmZXIubW9qb20uanMnKTsKLSAgfQotCi0K
LQotICBmdW5jdGlvbiBTdHJpbmcxNih2YWx1ZXMpIHsKLSAgICB0aGlzLmluaXREZWZhdWx0c18o
KTsKLSAgICB0aGlzLmluaXRGaWVsZHNfKHZhbHVlcyk7Ci0gIH0KLQotCi0gIFN0cmluZzE2LnBy
b3RvdHlwZS5pbml0RGVmYXVsdHNfID0gZnVuY3Rpb24oKSB7Ci0gICAgdGhpcy5kYXRhID0gbnVs
bDsKLSAgfTsKLSAgU3RyaW5nMTYucHJvdG90eXBlLmluaXRGaWVsZHNfID0gZnVuY3Rpb24oZmll
bGRzKSB7Ci0gICAgZm9yKHZhciBmaWVsZCBpbiBmaWVsZHMpIHsKLSAgICAgICAgaWYgKHRoaXMu
aGFzT3duUHJvcGVydHkoZmllbGQpKQotICAgICAgICAgIHRoaXNbZmllbGRdID0gZmllbGRzW2Zp
ZWxkXTsKLSAgICB9Ci0gIH07Ci0KLSAgU3RyaW5nMTYudmFsaWRhdGUgPSBmdW5jdGlvbihtZXNz
YWdlVmFsaWRhdG9yLCBvZmZzZXQpIHsKLSAgICB2YXIgZXJyOwotICAgIGVyciA9IG1lc3NhZ2VW
YWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RIZWFkZXIob2Zmc2V0LCBjb2RlYy5rU3RydWN0SGVhZGVy
U2l6ZSk7Ci0gICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQot
ICAgICAgICByZXR1cm4gZXJyOwotCi0gICAgdmFyIGtWZXJzaW9uU2l6ZXMgPSBbCi0gICAgICB7
dmVyc2lvbjogMCwgbnVtQnl0ZXM6IDE2fQotICAgIF07Ci0gICAgZXJyID0gbWVzc2FnZVZhbGlk
YXRvci52YWxpZGF0ZVN0cnVjdFZlcnNpb24ob2Zmc2V0LCBrVmVyc2lvblNpemVzKTsKLSAgICBp
ZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCi0gICAgICAgIHJldHVy
biBlcnI7Ci0KLQotICAgIC8vIHZhbGlkYXRlIFN0cmluZzE2LmRhdGEKLSAgICBlcnIgPSBtZXNz
YWdlVmFsaWRhdG9yLnZhbGlkYXRlQXJyYXlQb2ludGVyKG9mZnNldCArIGNvZGVjLmtTdHJ1Y3RI
ZWFkZXJTaXplICsgMCwgMiwgY29kZWMuVWludDE2LCBmYWxzZSwgWzBdLCAwKTsKLSAgICBpZiAo
ZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCi0gICAgICAgIHJldHVybiBl
cnI7Ci0KLSAgICByZXR1cm4gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FOwotICB9Owot
Ci0gIFN0cmluZzE2LmVuY29kZWRTaXplID0gY29kZWMua1N0cnVjdEhlYWRlclNpemUgKyA4Owot
Ci0gIFN0cmluZzE2LmRlY29kZSA9IGZ1bmN0aW9uKGRlY29kZXIpIHsKLSAgICB2YXIgcGFja2Vk
OwotICAgIHZhciB2YWwgPSBuZXcgU3RyaW5nMTYoKTsKLSAgICB2YXIgbnVtYmVyT2ZCeXRlcyA9
IGRlY29kZXIucmVhZFVpbnQzMigpOwotICAgIHZhciB2ZXJzaW9uID0gZGVjb2Rlci5yZWFkVWlu
dDMyKCk7Ci0gICAgdmFsLmRhdGEgPSBkZWNvZGVyLmRlY29kZUFycmF5UG9pbnRlcihjb2RlYy5V
aW50MTYpOwotICAgIHJldHVybiB2YWw7Ci0gIH07Ci0KLSAgU3RyaW5nMTYuZW5jb2RlID0gZnVu
Y3Rpb24oZW5jb2RlciwgdmFsKSB7Ci0gICAgdmFyIHBhY2tlZDsKLSAgICBlbmNvZGVyLndyaXRl
VWludDMyKFN0cmluZzE2LmVuY29kZWRTaXplKTsKLSAgICBlbmNvZGVyLndyaXRlVWludDMyKDAp
OwotICAgIGVuY29kZXIuZW5jb2RlQXJyYXlQb2ludGVyKGNvZGVjLlVpbnQxNiwgdmFsLmRhdGEp
OwotICB9OwotICBmdW5jdGlvbiBCaWdTdHJpbmcxNih2YWx1ZXMpIHsKLSAgICB0aGlzLmluaXRE
ZWZhdWx0c18oKTsKLSAgICB0aGlzLmluaXRGaWVsZHNfKHZhbHVlcyk7Ci0gIH0KLQotCi0gIEJp
Z1N0cmluZzE2LnByb3RvdHlwZS5pbml0RGVmYXVsdHNfID0gZnVuY3Rpb24oKSB7Ci0gICAgdGhp
cy5kYXRhID0gbnVsbDsKLSAgfTsKLSAgQmlnU3RyaW5nMTYucHJvdG90eXBlLmluaXRGaWVsZHNf
ID0gZnVuY3Rpb24oZmllbGRzKSB7Ci0gICAgZm9yKHZhciBmaWVsZCBpbiBmaWVsZHMpIHsKLSAg
ICAgICAgaWYgKHRoaXMuaGFzT3duUHJvcGVydHkoZmllbGQpKQotICAgICAgICAgIHRoaXNbZmll
bGRdID0gZmllbGRzW2ZpZWxkXTsKLSAgICB9Ci0gIH07Ci0KLSAgQmlnU3RyaW5nMTYudmFsaWRh
dGUgPSBmdW5jdGlvbihtZXNzYWdlVmFsaWRhdG9yLCBvZmZzZXQpIHsKLSAgICB2YXIgZXJyOwot
ICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RIZWFkZXIob2Zmc2V0LCBj
b2RlYy5rU3RydWN0SGVhZGVyU2l6ZSk7Ci0gICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlk
YXRpb25FcnJvci5OT05FKQotICAgICAgICByZXR1cm4gZXJyOwotCi0gICAgdmFyIGtWZXJzaW9u
U2l6ZXMgPSBbCi0gICAgICB7dmVyc2lvbjogMCwgbnVtQnl0ZXM6IDI0fQotICAgIF07Ci0gICAg
ZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdFZlcnNpb24ob2Zmc2V0LCBrVmVy
c2lvblNpemVzKTsKLSAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5P
TkUpCi0gICAgICAgIHJldHVybiBlcnI7Ci0KLQotICAgIC8vIHZhbGlkYXRlIEJpZ1N0cmluZzE2
LmRhdGEKLSAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlVW5pb24ob2Zmc2V0ICsg
Y29kZWMua1N0cnVjdEhlYWRlclNpemUgKyAwLCBiaWdfYnVmZmVyJC5CaWdCdWZmZXIsIGZhbHNl
KTsKLSAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCi0gICAg
ICAgIHJldHVybiBlcnI7Ci0KLSAgICByZXR1cm4gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5O
T05FOwotICB9OwotCi0gIEJpZ1N0cmluZzE2LmVuY29kZWRTaXplID0gY29kZWMua1N0cnVjdEhl
YWRlclNpemUgKyAxNjsKLQotICBCaWdTdHJpbmcxNi5kZWNvZGUgPSBmdW5jdGlvbihkZWNvZGVy
KSB7Ci0gICAgdmFyIHBhY2tlZDsKLSAgICB2YXIgdmFsID0gbmV3IEJpZ1N0cmluZzE2KCk7Ci0g
ICAgdmFyIG51bWJlck9mQnl0ZXMgPSBkZWNvZGVyLnJlYWRVaW50MzIoKTsKLSAgICB2YXIgdmVy
c2lvbiA9IGRlY29kZXIucmVhZFVpbnQzMigpOwotICAgIHZhbC5kYXRhID0gZGVjb2Rlci5kZWNv
ZGVTdHJ1Y3QoYmlnX2J1ZmZlciQuQmlnQnVmZmVyKTsKLSAgICByZXR1cm4gdmFsOwotICB9Owot
Ci0gIEJpZ1N0cmluZzE2LmVuY29kZSA9IGZ1bmN0aW9uKGVuY29kZXIsIHZhbCkgewotICAgIHZh
ciBwYWNrZWQ7Ci0gICAgZW5jb2Rlci53cml0ZVVpbnQzMihCaWdTdHJpbmcxNi5lbmNvZGVkU2l6
ZSk7Ci0gICAgZW5jb2Rlci53cml0ZVVpbnQzMigwKTsKLSAgICBlbmNvZGVyLmVuY29kZVN0cnVj
dChiaWdfYnVmZmVyJC5CaWdCdWZmZXIsIHZhbC5kYXRhKTsKLSAgfTsKLSAgZXhwb3J0cy5TdHJp
bmcxNiA9IFN0cmluZzE2OwotICBleHBvcnRzLkJpZ1N0cmluZzE2ID0gQmlnU3RyaW5nMTY7Ci19
KSgpOwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL0xheW91dFRlc3Rz
L2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL3N0cmlu
ZzE2Lm1vam9tLmpzLmhlYWRlcnMgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRm
b3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS9zdHJpbmcxNi5tb2pvbS5qcy5oZWFkZXJzCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ODA1YzMyM2RmNWE5NzUyMzE2NDhiODMwZTMz
Y2UxODNjM2NiYmQzLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0t
LSBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2Vz
L2Nocm9taXVtL3N0cmluZzE2Lm1vam9tLmpzLmhlYWRlcnMKKysrIC9kZXYvbnVsbApAQCAtMSAr
MCwwIEBACi1Db250ZW50LVR5cGU6IHRleHQvamF2YXNjcmlwdDsgY2hhcnNldD11dGYtOApkaWZm
IC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNv
dXJjZXMvY2hyb21pdW0vdXJsLm1vam9tLmpzIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dl
Yi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vdXJsLm1vam9tLmpzCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNWVlZTFmMmFlYjQwNjljNTk1OTE0ZWUwMjJhOWU1MDli
OWRhNTQ1Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL0xh
eW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9t
aXVtL3VybC5tb2pvbS5qcworKysgL2Rldi9udWxsCkBAIC0xLDc5ICswLDAgQEAKLS8vIENvcHly
aWdodCAyMDE0IFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8g
VXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5z
ZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLQotJ3VzZSBzdHJp
Y3QnOwotCi0oZnVuY3Rpb24oKSB7Ci0gIHZhciBtb2pvbUlkID0gJ3VybC9tb2pvbS91cmwubW9q
b20nOwotICBpZiAobW9qby5pbnRlcm5hbC5pc01vam9tTG9hZGVkKG1vam9tSWQpKSB7Ci0gICAg
Y29uc29sZS53YXJuKCdUaGUgZm9sbG93aW5nIG1vam9tIGlzIGxvYWRlZCBtdWx0aXBsZSB0aW1l
czogJyArIG1vam9tSWQpOwotICAgIHJldHVybjsKLSAgfQotICBtb2pvLmludGVybmFsLm1hcmtN
b2pvbUxvYWRlZChtb2pvbUlkKTsKLSAgdmFyIGJpbmRpbmdzID0gbW9qbzsKLSAgdmFyIGFzc29j
aWF0ZWRCaW5kaW5ncyA9IG1vam87Ci0gIHZhciBjb2RlYyA9IG1vam8uaW50ZXJuYWw7Ci0gIHZh
ciB2YWxpZGF0b3IgPSBtb2pvLmludGVybmFsOwotCi0gIHZhciBleHBvcnRzID0gbW9qby5pbnRl
cm5hbC5leHBvc2VOYW1lc3BhY2UoJ3VybC5tb2pvbScpOwotCi0KLQotICBmdW5jdGlvbiBVcmwo
dmFsdWVzKSB7Ci0gICAgdGhpcy5pbml0RGVmYXVsdHNfKCk7Ci0gICAgdGhpcy5pbml0RmllbGRz
Xyh2YWx1ZXMpOwotICB9Ci0KLQotICBVcmwucHJvdG90eXBlLmluaXREZWZhdWx0c18gPSBmdW5j
dGlvbigpIHsKLSAgICB0aGlzLnVybCA9IG51bGw7Ci0gIH07Ci0gIFVybC5wcm90b3R5cGUuaW5p
dEZpZWxkc18gPSBmdW5jdGlvbihmaWVsZHMpIHsKLSAgICBmb3IodmFyIGZpZWxkIGluIGZpZWxk
cykgewotICAgICAgICBpZiAodGhpcy5oYXNPd25Qcm9wZXJ0eShmaWVsZCkpCi0gICAgICAgICAg
dGhpc1tmaWVsZF0gPSBmaWVsZHNbZmllbGRdOwotICAgIH0KLSAgfTsKLQotICBVcmwudmFsaWRh
dGUgPSBmdW5jdGlvbihtZXNzYWdlVmFsaWRhdG9yLCBvZmZzZXQpIHsKLSAgICB2YXIgZXJyOwot
ICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RIZWFkZXIob2Zmc2V0LCBj
b2RlYy5rU3RydWN0SGVhZGVyU2l6ZSk7Ci0gICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlk
YXRpb25FcnJvci5OT05FKQotICAgICAgICByZXR1cm4gZXJyOwotCi0gICAgdmFyIGtWZXJzaW9u
U2l6ZXMgPSBbCi0gICAgICB7dmVyc2lvbjogMCwgbnVtQnl0ZXM6IDE2fQotICAgIF07Ci0gICAg
ZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdFZlcnNpb24ob2Zmc2V0LCBrVmVy
c2lvblNpemVzKTsKLSAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5P
TkUpCi0gICAgICAgIHJldHVybiBlcnI7Ci0KLQotICAgIC8vIHZhbGlkYXRlIFVybC51cmwKLSAg
ICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RyaW5nUG9pbnRlcihvZmZzZXQgKyBj
b2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDAsIGZhbHNlKQotICAgIGlmIChlcnIgIT09IHZhbGlk
YXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKLSAgICAgICAgcmV0dXJuIGVycjsKLQotICAgIHJl
dHVybiB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkU7Ci0gIH07Ci0KLSAgVXJsLmVuY29k
ZWRTaXplID0gY29kZWMua1N0cnVjdEhlYWRlclNpemUgKyA4OwotCi0gIFVybC5kZWNvZGUgPSBm
dW5jdGlvbihkZWNvZGVyKSB7Ci0gICAgdmFyIHBhY2tlZDsKLSAgICB2YXIgdmFsID0gbmV3IFVy
bCgpOwotICAgIHZhciBudW1iZXJPZkJ5dGVzID0gZGVjb2Rlci5yZWFkVWludDMyKCk7Ci0gICAg
dmFyIHZlcnNpb24gPSBkZWNvZGVyLnJlYWRVaW50MzIoKTsKLSAgICB2YWwudXJsID0gZGVjb2Rl
ci5kZWNvZGVTdHJ1Y3QoY29kZWMuU3RyaW5nKTsKLSAgICByZXR1cm4gdmFsOwotICB9OwotCi0g
IFVybC5lbmNvZGUgPSBmdW5jdGlvbihlbmNvZGVyLCB2YWwpIHsKLSAgICB2YXIgcGFja2VkOwot
ICAgIGVuY29kZXIud3JpdGVVaW50MzIoVXJsLmVuY29kZWRTaXplKTsKLSAgICBlbmNvZGVyLndy
aXRlVWludDMyKDApOwotICAgIGVuY29kZXIuZW5jb2RlU3RydWN0KGNvZGVjLlN0cmluZywgdmFs
LnVybCk7Ci0gIH07Ci0gIGV4cG9ydHMuVXJsID0gVXJsOwotfSkoKTsKXCBObyBuZXdsaW5lIGF0
IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBs
YXRmb3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS93M2MtaW1wb3J0LmxvZyBiL0xheW91dFRl
c3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL3cz
Yy1pbXBvcnQubG9nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMmQwYTA5ZGUxZTlh
MjA3Y2JjYWExYjU3NjIzZGU2OWY4NDVkNzI3Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwCi0tLSBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0t
dGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL3czYy1pbXBvcnQubG9nCisrKyAvZGV2L251bGwKQEAg
LTEsNjMgKzAsMCBAQAotVGhlIHRlc3RzIGluIHRoaXMgZGlyZWN0b3J5IHdlcmUgaW1wb3J0ZWQg
ZnJvbSB0aGUgVzNDIHJlcG9zaXRvcnkuCi1EbyBOT1QgbW9kaWZ5IHRoZXNlIHRlc3RzIGRpcmVj
dGx5IGluIFdlYktpdC4KLUluc3RlYWQsIGNyZWF0ZSBhIHB1bGwgcmVxdWVzdCBvbiB0aGUgV1BU
IGdpdGh1YjoKLQlodHRwczovL2dpdGh1Yi5jb20vd2ViLXBsYXRmb3JtLXRlc3RzL3dwdAotCi1U
aGVuIHJ1biB0aGUgVG9vbHMvU2NyaXB0cy9pbXBvcnQtdzNjLXRlc3RzIGluIFdlYktpdCB0byBy
ZWltcG9ydAotCi1EbyBOT1QgbW9kaWZ5IG9yIHJlbW92ZSB0aGlzIGZpbGUuCi0KLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQotUHJvcGVydGllcyByZXF1aXJpbmcgdmVuZG9yIHByZWZpeGVzOgotTm9uZQotUHJv
cGVydHkgdmFsdWVzIHJlcXVpcmluZyB2ZW5kb3IgcHJlZml4ZXM6Ci1Ob25lCi0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0KLUxpc3Qgb2YgZmlsZXM6Ci0vTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0
Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vUkVBRE1FLm1kCi0vTGF5b3V0VGVzdHMvaW1w
b3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vYmlnX2J1ZmZl
ci5tb2pvbS5qcwotL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMv
cmVzb3VyY2VzL2Nocm9taXVtL2JpZ19idWZmZXIubW9qb20uanMuaGVhZGVycwotL0xheW91dFRl
c3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL2Nv
bnRhY3RzX21hbmFnZXJfbW9jay5qcwotL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxh
dGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL2RldmljZS5tb2pvbS5qcwotL0xheW91dFRl
c3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL2Rl
dmljZS5tb2pvbS5qcy5oZWFkZXJzCi0vTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0
Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vZGV2aWNlX2VudW1lcmF0aW9uX29wdGlvbnMu
bW9qb20uanMKLS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jl
c291cmNlcy9jaHJvbWl1bS9kZXZpY2VfZW51bWVyYXRpb25fb3B0aW9ucy5tb2pvbS5qcy5oZWFk
ZXJzCi0vTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJj
ZXMvY2hyb21pdW0vZGV2aWNlX21hbmFnZXJfY2xpZW50Lm1vam9tLmpzCi0vTGF5b3V0VGVzdHMv
aW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vZGV2aWNl
X21hbmFnZXJfY2xpZW50Lm1vam9tLmpzLmhlYWRlcnMKLS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93
M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS9lbmFibGUtaHlwZXJsaW5r
LWF1ZGl0aW5nLmpzCi0vTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0
cy9yZXNvdXJjZXMvY2hyb21pdW0vZ2VuZXJpY19zZW5zb3JfbW9ja3MuanMKLS9MYXlvdXRUZXN0
cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS9nZW5l
cmljX3NlbnNvcl9tb2Nrcy5qcy5oZWFkZXJzCi0vTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dl
Yi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vaW1hZ2VfY2FwdHVyZS1tb2pvbS5q
cy5oZWFkZXJzCi0vTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9y
ZXNvdXJjZXMvY2hyb21pdW0vaW1hZ2VfY2FwdHVyZS5tb2pvbS5qcwotL0xheW91dFRlc3RzL2lt
cG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL21vY2stYmFy
Y29kZWRldGVjdGlvbi5qcwotL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0t
dGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL21vY2stYmFyY29kZWRldGVjdGlvbi5qcy5oZWFkZXJz
Ci0vTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMv
Y2hyb21pdW0vbW9jay1mYWNlZGV0ZWN0aW9uLmpzCi0vTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNj
L3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vbW9jay1mYWNlZGV0ZWN0aW9u
LmpzLmhlYWRlcnMKLS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3Rz
L3Jlc291cmNlcy9jaHJvbWl1bS9tb2NrLWltYWdlY2FwdHVyZS5qcwotL0xheW91dFRlc3RzL2lt
cG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL21vY2stc2Ny
ZWVuZW51bWVyYXRpb24uanMKLS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3Jt
LXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS9tb2NrLXNjcmVlbmVudW1lcmF0aW9uLmpzLmhlYWRl
cgotL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2Vz
L2Nocm9taXVtL21vY2stc21zLXJlY2VpdmVyLmpzCi0vTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNj
L3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vbW9jay10ZXh0ZGV0ZWN0aW9u
LmpzCi0vTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJj
ZXMvY2hyb21pdW0vbW9jay10ZXh0ZGV0ZWN0aW9uLmpzLmhlYWRlcnMKLS9MYXlvdXRUZXN0cy9p
bXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS9tb2pvX2Jp
bmRpbmdzLmpzCi0vTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9y
ZXNvdXJjZXMvY2hyb21pdW0vbW9qb19iaW5kaW5ncy5qcy5oZWFkZXJzCi0vTGF5b3V0VGVzdHMv
aW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vbW9qb193
ZWJfdGVzdF9oZWxwZXJfdGVzdC5tb2pvbS5qcwotL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93
ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL21vam9fd2ViX3Rlc3RfaGVscGVy
X3Rlc3QubW9qb20uanMuaGVhZGVycwotL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxh
dGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL25mYy1tb2NrLmpzCi0vTGF5b3V0VGVzdHMv
aW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vc2Vuc29y
Lm1vam9tLmpzCi0vTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9y
ZXNvdXJjZXMvY2hyb21pdW0vc2Vuc29yX3Byb3ZpZGVyLm1vam9tLmpzCi0vTGF5b3V0VGVzdHMv
aW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vc3RyaW5n
MTYubW9qb20uanMKLS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3Rz
L3Jlc291cmNlcy9jaHJvbWl1bS9zdHJpbmcxNi5tb2pvbS5qcy5oZWFkZXJzCi0vTGF5b3V0VGVz
dHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vdXJs
Lm1vam9tLmpzCi0vTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9y
ZXNvdXJjZXMvY2hyb21pdW0vd2ViLWJsdWV0b290aC10ZXN0LmpzCi0vTGF5b3V0VGVzdHMvaW1w
b3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vd2ViLWJsdWV0
b290aC10ZXN0LmpzLmhlYWRlcnMKLS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRm
b3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS93ZWJfdXNiX3NlcnZpY2UubW9qb20uanMKLS9M
YXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9jaHJv
bWl1bS93ZWJfdXNiX3NlcnZpY2UubW9qb20uanMuaGVhZGVycwotL0xheW91dFRlc3RzL2ltcG9y
dGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL3dlYnVzYi1jaGls
ZC10ZXN0LmpzCi0vTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9y
ZXNvdXJjZXMvY2hyb21pdW0vd2VidXNiLWNoaWxkLXRlc3QuanMuaGVhZGVycwotL0xheW91dFRl
c3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL3dl
YnVzYi10ZXN0LmpzCi0vTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0
cy9yZXNvdXJjZXMvY2hyb21pdW0vd2VidXNiLXRlc3QuanMuaGVhZGVycwotL0xheW91dFRlc3Rz
L2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL3dlYnhy
LXRlc3QtbWF0aC1oZWxwZXIuanMKLS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRm
b3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS93ZWJ4ci10ZXN0LW1hdGgtaGVscGVyLmpzLmhl
YWRlcnMKLS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291
cmNlcy9jaHJvbWl1bS93ZWJ4ci10ZXN0LmpzCi0vTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dl
Yi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vd2VieHItdGVzdC5qcy5oZWFkZXJz
CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3Rz
L3Jlc291cmNlcy9jaHJvbWl1bS93ZWItYmx1ZXRvb3RoLXRlc3QuanMgYi9MYXlvdXRUZXN0cy9p
bXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS93ZWItYmx1
ZXRvb3RoLXRlc3QuanMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI2MzY1OGUyZTc1
MzIxOGQ1MDUwOGI0MTE5OWZjNmZmMTg3MTFkYmYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAKLS0tIGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9y
bS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vd2ViLWJsdWV0b290aC10ZXN0LmpzCisrKyAvZGV2
L251bGwKQEAgLTEsNjQxICswLDAgQEAKLSd1c2Ugc3RyaWN0JzsKLQotZnVuY3Rpb24gdG9Nb2pv
Q2VudHJhbFN0YXRlKHN0YXRlKSB7Ci0gIHN3aXRjaCAoc3RhdGUpIHsKLSAgICBjYXNlICdhYnNl
bnQnOgotICAgICAgcmV0dXJuIGJsdWV0b290aC5tb2pvbS5DZW50cmFsU3RhdGUuQUJTRU5UOwot
ICAgIGNhc2UgJ3Bvd2VyZWQtb2ZmJzoKLSAgICAgIHJldHVybiBibHVldG9vdGgubW9qb20uQ2Vu
dHJhbFN0YXRlLlBPV0VSRURfT0ZGOwotICAgIGNhc2UgJ3Bvd2VyZWQtb24nOgotICAgICAgcmV0
dXJuIGJsdWV0b290aC5tb2pvbS5DZW50cmFsU3RhdGUuUE9XRVJFRF9PTjsKLSAgICBkZWZhdWx0
OgotICAgICAgdGhyb3cgYFVuc3VwcG9ydGVkIHZhbHVlICR7c3RhdGV9IGZvciBzdGF0ZS5gOwot
ICB9Ci19Ci0KLS8vIENvbnZlcnRzIGJsdWV0b290aC5tb2pvbS5Xcml0ZVR5cGUgdG8gYSBzdHJp
bmcuIElmIHx3cml0ZVR5cGV8IGlzCi0vLyBpbnZhbGlkLCB0aGlzIG1ldGhvZCB3aWxsIHRocm93
LgotZnVuY3Rpb24gd3JpdGVUeXBlVG9TdHJpbmcod3JpdGVUeXBlKSB7Ci0gIHN3aXRjaCAod3Jp
dGVUeXBlKSB7Ci0gICAgY2FzZSBibHVldG9vdGgubW9qb20uV3JpdGVUeXBlLmtOb25lOgotICAg
ICAgcmV0dXJuICdub25lJzsKLSAgICBjYXNlIGJsdWV0b290aC5tb2pvbS5Xcml0ZVR5cGUua1dy
aXRlRGVmYXVsdERlcHJlY2F0ZWQ6Ci0gICAgICByZXR1cm4gJ2RlZmF1bHQtZGVwcmVjYXRlZCc7
Ci0gICAgY2FzZSBibHVldG9vdGgubW9qb20uV3JpdGVUeXBlLmtXcml0ZVdpdGhSZXNwb25zZToK
LSAgICAgIHJldHVybiAnd2l0aC1yZXNwb25zZSc7Ci0gICAgY2FzZSBibHVldG9vdGgubW9qb20u
V3JpdGVUeXBlLmtXcml0ZVdpdGhvdXRSZXNwb25zZToKLSAgICAgIHJldHVybiAnd2l0aG91dC1y
ZXNwb25zZSc7Ci0gICAgZGVmYXVsdDoKLSAgICAgIHRocm93IGBVbmtub3duIGJsdWV0b290aC5t
b2pvbS5Xcml0ZVR5cGU6ICR7d3JpdGVUeXBlfWA7Ci0gIH0KLX0KLQotLy8gQ2Fub25pY2FsaXpl
cyBVVUlEcyBhbmQgY29udmVydHMgdGhlbSB0byBNb2pvIFVVSURzLgotZnVuY3Rpb24gY2Fub25p
Y2FsaXplQW5kQ29udmVydFRvTW9qb1VVSUQodXVpZHMpIHsKLSAgbGV0IGNhbm9uaWNhbFVVSURz
ID0gdXVpZHMubWFwKHZhbCA9PiAoe3V1aWQ6IEJsdWV0b290aFVVSUQuZ2V0U2VydmljZSh2YWwp
fSkpOwotICByZXR1cm4gY2Fub25pY2FsVVVJRHM7Ci19Ci0KLS8vIENvbnZlcnRzIFdlYklETCBh
IHJlY29yZDxET01TdHJpbmcsIEJ1ZmZlclNvdXJjZT4gdG8gYSBtYXA8SywgYXJyYXk8dWludDg+
PiB0bwotLy8gdXNlIGZvciBNb2pvLCB3aGVyZSB0aGUgdmFsdWUgZm9yIEsgaXMgY2FsY3VsYXRl
ZCB1c2luZyBrZXlGbi4KLWZ1bmN0aW9uIGNvbnZlcnRUb01vam9NYXAocmVjb3JkLCBrZXlGbikg
ewotICBsZXQgbWFwID0gbmV3IE1hcCgpOwotICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBP
YmplY3QuZW50cmllcyhyZWNvcmQpKSB7Ci0gICAgbGV0IGJ1ZmZlciA9IEFycmF5QnVmZmVyLmlz
Vmlldyh2YWx1ZSkgPyB2YWx1ZS5idWZmZXIgOiB2YWx1ZTsKLSAgICBtYXAuc2V0KGtleUZuKGtl
eSksIEFycmF5LmZyb20obmV3IFVpbnQ4QXJyYXkoYnVmZmVyKSkpOwotICB9Ci0gIHJldHVybiBt
YXA7Ci19Ci0KLS8vIE1hcHBpbmcgb2YgdGhlIHByb3BlcnR5IG5hbWVzIG9mCi0vLyBCbHVldG9v
dGhDaGFyYWN0ZXJpc3RpY1Byb3BlcnRpZXMgZGVmaW5lZCBpbgotLy8gaHR0cHM6Ly93ZWJibHVl
dG9vdGhjZy5naXRodWIuaW8vd2ViLWJsdWV0b290aC8jY2hhcmFjdGVyaXN0aWNwcm9wZXJ0aWVz
Ci0vLyB0byBwcm9wZXJ0eSBuYW1lcyBvZiB0aGUgQ2hhcmFjdGVyaXN0aWNQcm9wZXJ0aWVzIG1v
am8gc3RydWN0LgotY29uc3QgQ0hBUkFDVEVSSVNUSUNfUFJPUEVSVElFU19XRUJfVE9fTU9KTyA9
IHsKLSAgYnJvYWRjYXN0OiAnYnJvYWRjYXN0JywKLSAgcmVhZDogJ3JlYWQnLAotICB3cml0ZV93
aXRob3V0X3Jlc3BvbnNlOiAnd3JpdGVfd2l0aG91dF9yZXNwb25zZScsCi0gIHdyaXRlOiAnd3Jp
dGUnLAotICBub3RpZnk6ICdub3RpZnknLAotICBpbmRpY2F0ZTogJ2luZGljYXRlJywKLSAgYXV0
aGVudGljYXRlZFNpZ25lZFdyaXRlczogJ2F1dGhlbnRpY2F0ZWRfc2lnbmVkX3dyaXRlcycsCi0g
IGV4dGVuZGVkX3Byb3BlcnRpZXM6ICdleHRlbmRlZF9wcm9wZXJ0aWVzJywKLX07Ci0KLS8vIE1h
cHBpbmcgb2YgdGhlIE1vam8gQ2hvb3NlckV2ZW50VHlwZSBlbnVtIHRvIGEgc3RyaW5nLgotY29u
c3QgTU9KT19DSE9PU0VSX0VWRU5UX1RZUEVfTUFQID0gKCgpID0+IHsKLSAgY29uc3QgQ2hvb3Nl
ckV2ZW50VHlwZSA9IGNvbnRlbnQubW9qb20uQ2hvb3NlckV2ZW50VHlwZTsKLSAgcmV0dXJuIHsK
LSAgICBbQ2hvb3NlckV2ZW50VHlwZS5DSE9PU0VSX09QRU5FRF06ICdjaG9vc2VyLW9wZW5lZCcs
Ci0gICAgW0Nob29zZXJFdmVudFR5cGUuQ0hPT1NFUl9DTE9TRURdOiAnY2hvb3Nlci1jbG9zZWQn
LAotICAgIFtDaG9vc2VyRXZlbnRUeXBlLkFEQVBURVJfUkVNT1ZFRF06ICdhZGFwdGVyLXJlbW92
ZWQnLAotICAgIFtDaG9vc2VyRXZlbnRUeXBlLkFEQVBURVJfRElTQUJMRURdOiAnYWRhcHRlci1k
aXNhYmxlZCcsCi0gICAgW0Nob29zZXJFdmVudFR5cGUuQURBUFRFUl9FTkFCTEVEXTogJ2FkYXB0
ZXItZW5hYmxlZCcsCi0gICAgW0Nob29zZXJFdmVudFR5cGUuRElTQ09WRVJZX0ZBSUxFRF9UT19T
VEFSVF06ICdkaXNjb3ZlcnktZmFpbGVkLXRvLXN0YXJ0JywKLSAgICBbQ2hvb3NlckV2ZW50VHlw
ZS5ESVNDT1ZFUklOR106ICdkaXNjb3ZlcmluZycsCi0gICAgW0Nob29zZXJFdmVudFR5cGUuRElT
Q09WRVJZX0lETEVdOiAnZGlzY292ZXJ5LWlkbGUnLAotICAgIFtDaG9vc2VyRXZlbnRUeXBlLkFE
RF9PUl9VUERBVEVfREVWSUNFXTogJ2FkZC1vci11cGRhdGUtZGV2aWNlJywKLSAgfQotfSkoKTsK
LQotZnVuY3Rpb24gQXJyYXlUb01vam9DaGFyYWN0ZXJpc3RpY1Byb3BlcnRpZXMoYXJyKSB7Ci0g
IGxldCBzdHJ1Y3QgPSBuZXcgYmx1ZXRvb3RoLm1vam9tLkNoYXJhY3RlcmlzdGljUHJvcGVydGll
cygpOwotCi0gIGFyci5mb3JFYWNoKHZhbCA9PiB7Ci0gICAgbGV0IG1vam9fcHJvcGVydHkgPQot
ICAgICAgQ0hBUkFDVEVSSVNUSUNfUFJPUEVSVElFU19XRUJfVE9fTU9KT1t2YWxdOwotCi0gICAg
aWYgKHN0cnVjdC5oYXNPd25Qcm9wZXJ0eShtb2pvX3Byb3BlcnR5KSkKLSAgICAgIHN0cnVjdFtt
b2pvX3Byb3BlcnR5XSA9IHRydWU7Ci0gICAgZWxzZQotICAgICAgdGhyb3cgYEludmFsaWQgbWVt
YmVyICcke3ZhbH0nIGZvciBDaGFyYWN0ZXJpc3RpY1Byb3BlcnRpZXNgOwotICB9KTsKLQotICBy
ZXR1cm4gc3RydWN0OwotfQotCi1jbGFzcyBGYWtlQmx1ZXRvb3RoIHsKLSAgY29uc3RydWN0b3Io
KSB7Ci0gICAgdGhpcy5mYWtlX2JsdWV0b290aF9wdHJfID0gbmV3IGJsdWV0b290aC5tb2pvbS5G
YWtlQmx1ZXRvb3RoUHRyKCk7Ci0gICAgTW9qby5iaW5kSW50ZXJmYWNlKGJsdWV0b290aC5tb2pv
bS5GYWtlQmx1ZXRvb3RoLm5hbWUsCi0gICAgICAgIG1vam8ubWFrZVJlcXVlc3QodGhpcy5mYWtl
X2JsdWV0b290aF9wdHJfKS5oYW5kbGUsICdwcm9jZXNzJyk7Ci0gICAgdGhpcy5mYWtlX2NlbnRy
YWxfID0gbnVsbDsKLSAgfQotCi0gIC8vIFNldCBpdCB0byBpbmRpY2F0ZSB3aGV0aGVyIHRoZSBw
bGF0Zm9ybSBzdXBwb3J0cyBCTEUuIEZvciBleGFtcGxlLAotICAvLyBXaW5kb3dzIDcgaXMgYSBw
bGF0Zm9ybSB0aGF0IGRvZXNuJ3Qgc3VwcG9ydCBMb3cgRW5lcmd5LiBPbiB0aGUgb3RoZXIKLSAg
Ly8gaGFuZCBXaW5kb3dzIDEwIGlzIGEgcGxhdGZvcm0gdGhhdCBkb2VzIHN1cHBvcnQgTEUsIGV2
ZW4gaWYgdGhlcmUgaXMgbm8KLSAgLy8gQmx1ZXRvb3RoIHJhZGlvIHByZXNlbnQuCi0gIGFzeW5j
IHNldExFU3VwcG9ydGVkKHN1cHBvcnRlZCkgewotICAgIGlmICh0eXBlb2Ygc3VwcG9ydGVkICE9
PSAnYm9vbGVhbicpIHRocm93ICdUeXBlIE5vdCBTdXBwb3J0ZWQnOwotICAgIGF3YWl0IHRoaXMu
ZmFrZV9ibHVldG9vdGhfcHRyXy5zZXRMRVN1cHBvcnRlZChzdXBwb3J0ZWQpOwotICB9Ci0KLSAg
Ly8gUmV0dXJucyBhIHByb21pc2UgdGhhdCByZXNvbHZlcyB3aXRoIGEgRmFrZUNlbnRyYWwgdGhh
dCBjbGllbnRzIGNhbiB1c2UKLSAgLy8gdG8gc2ltdWxhdGUgZXZlbnRzIHRoYXQgYSBkZXZpY2Ug
aW4gdGhlIENlbnRyYWwvT2JzZXJ2ZXIgcm9sZSB3b3VsZAotICAvLyByZWNlaXZlIGFzIHdlbGwg
YXMgbW9uaXRvciB0aGUgb3BlcmF0aW9ucyBwZXJmb3JtZWQgYnkgdGhlIGRldmljZSBpbiB0aGUK
LSAgLy8gQ2VudHJhbC9PYnNlcnZlciByb2xlLgotICAvLyBDYWxscyBzZXRzIExFIGFzIHN1cHBv
cnRlZC4KLSAgLy8KLSAgLy8gQSAiQ2VudHJhbCIgb2JqZWN0IHdvdWxkIGFsbG93IGl0cyBjbGll
bnRzIHRvIHJlY2VpdmUgYWR2ZXJ0aXNpbmcgZXZlbnRzCi0gIC8vIGFuZCBpbml0aWF0ZSBjb25u
ZWN0aW9ucyB0byBwZXJpcGhlcmFscyBpLmUuIG9wZXJhdGlvbnMgb2YgdHdvIHJvbGVzCi0gIC8v
IGRlZmluZWQgYnkgdGhlIEJsdWV0b290aCBTcGVjOiBPYnNlcnZlciBhbmQgQ2VudHJhbC4KLSAg
Ly8gU2VlIEJsdWV0b290aCA0LjIgVm9sIDMgUGFydCBDIDIuMi4yICJSb2xlcyB3aGVuIE9wZXJh
dGluZyBvdmVyIGFuCi0gIC8vIExFIFBoeXNpY2FsIFRyYW5zcG9ydCIuCi0gIGFzeW5jIHNpbXVs
YXRlQ2VudHJhbCh7c3RhdGV9KSB7Ci0gICAgaWYgKHRoaXMuZmFrZV9jZW50cmFsXykKLSAgICAg
IHRocm93ICdzaW11bGF0ZUNlbnRyYWwoKSBzaG91bGQgb25seSBiZSBjYWxsZWQgb25jZSc7Ci0K
LSAgICBhd2FpdCB0aGlzLnNldExFU3VwcG9ydGVkKHRydWUpOwotCi0gICAgbGV0IHtmYWtlQ2Vu
dHJhbDogZmFrZV9jZW50cmFsX3B0cn0gPQotICAgICAgYXdhaXQgdGhpcy5mYWtlX2JsdWV0b290
aF9wdHJfLnNpbXVsYXRlQ2VudHJhbCgKLSAgICAgICAgdG9Nb2pvQ2VudHJhbFN0YXRlKHN0YXRl
KSk7Ci0gICAgdGhpcy5mYWtlX2NlbnRyYWxfID0gbmV3IEZha2VDZW50cmFsKGZha2VfY2VudHJh
bF9wdHIpOwotICAgIHJldHVybiB0aGlzLmZha2VfY2VudHJhbF87Ci0gIH0KLQotICAvLyBSZXR1
cm5zIHRydWUgaWYgdGhlcmUgYXJlIG5vIHBlbmRpbmcgcmVzcG9uc2VzLgotICBhc3luYyBhbGxS
ZXNwb25zZXNDb25zdW1lZCgpIHsKLSAgICBsZXQge2NvbnN1bWVkfSA9IGF3YWl0IHRoaXMuZmFr
ZV9ibHVldG9vdGhfcHRyXy5hbGxSZXNwb25zZXNDb25zdW1lZCgpOwotICAgIHJldHVybiBjb25z
dW1lZDsKLSAgfQotCi0gIC8vIFJldHVybnMgYSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2l0aCBh
IEZha2VDaG9vc2VyIHRoYXQgY2xpZW50cyBjYW4gdXNlIHRvCi0gIC8vIHNpbXVsYXRlIGNob29z
ZXIgZXZlbnRzLgotICBhc3luYyBnZXRNYW51YWxDaG9vc2VyKCkgewotICAgIGlmICh0eXBlb2Yg
dGhpcy5mYWtlX2Nob29zZXJfID09PSAndW5kZWZpbmVkJykgewotICAgICAgdGhpcy5mYWtlX2No
b29zZXJfID0gbmV3IEZha2VDaG9vc2VyKCk7Ci0gICAgfQotICAgIHJldHVybiB0aGlzLmZha2Vf
Y2hvb3Nlcl87Ci0gIH0KLX0KLQotLy8gRmFrZUNlbnRyYWwgYWxsb3dzIGNsaWVudHMgdG8gc2lt
dWxhdGUgZXZlbnRzIHRoYXQgYSBkZXZpY2UgaW4gdGhlCi0vLyBDZW50cmFsL09ic2VydmVyIHJv
bGUgd291bGQgcmVjZWl2ZSBhcyB3ZWxsIGFzIG1vbml0b3IgdGhlIG9wZXJhdGlvbnMKLS8vIHBl
cmZvcm1lZCBieSB0aGUgZGV2aWNlIGluIHRoZSBDZW50cmFsL09ic2VydmVyIHJvbGUuCi1jbGFz
cyBGYWtlQ2VudHJhbCB7Ci0gIGNvbnN0cnVjdG9yKGZha2VfY2VudHJhbF9wdHIpIHsKLSAgICB0
aGlzLmZha2VfY2VudHJhbF9wdHJfID0gZmFrZV9jZW50cmFsX3B0cjsKLSAgICB0aGlzLnBlcmlw
aGVyYWxzXyA9IG5ldyBNYXAoKTsKLSAgfQotCi0gIC8vIFNpbXVsYXRlcyBhIHBlcmlwaGVyYWwg
d2l0aCB8YWRkcmVzc3wsIHxuYW1lfCBhbmQgfGtub3duX3NlcnZpY2VfdXVpZHN8Ci0gIC8vIHRo
YXQgaGFzIGFscmVhZHkgYmVlbiBjb25uZWN0ZWQgdG8gdGhlIHN5c3RlbS4gSWYgdGhlIHBlcmlw
aGVyYWwgZXhpc3RlZAotICAvLyBhbHJlYWR5IGl0IHVwZGF0ZXMgaXRzIG5hbWUgYW5kIGtub3du
IFVVSURzLiB8a25vd25fc2VydmljZV91dWlkc3wgc2hvdWxkCi0gIC8vIGJlIGFuIGFycmF5IG9m
IEJsdWV0b290aFNlcnZpY2VVVUlEcwotICAvLyBodHRwczovL3dlYmJsdWV0b290aGNnLmdpdGh1
Yi5pby93ZWItYmx1ZXRvb3RoLyN0eXBlZGVmZGVmLWJsdWV0b290aHNlcnZpY2V1dWlkCi0gIC8v
Ci0gIC8vIFBsYXRmb3JtcyBvZmZlciBtZXRob2RzIHRvIHJldHJpZXZlIGRldmljZXMgdGhhdCBo
YXZlIGFscmVhZHkgYmVlbgotICAvLyBjb25uZWN0ZWQgdG8gdGhlIHN5c3RlbSBvciB3ZXJlbid0
IGNvbm5lY3RlZCB0aHJvdWdoIHRoZSBVQSBlLmcuIGEgdXNlcgotICAvLyBjb25uZWN0ZWQgYSBw
ZXJpcGhlcmFsIHRocm91Z2ggdGhlIHN5c3RlbSdzIHNldHRpbmdzLiBUaGlzIG1ldGhvZCBpcwot
ICAvLyBpbnRlbmRlZCB0byBzaW11bGF0ZSBwZXJpcGhlcmFscyB0aGF0IHRob3NlIG1ldGhvZHMg
d291bGQgcmV0dXJuLgotICBhc3luYyBzaW11bGF0ZVByZWNvbm5lY3RlZFBlcmlwaGVyYWwoewot
ICAgIGFkZHJlc3MsIG5hbWUsIGtub3duU2VydmljZVVVSURzID0gW119KSB7Ci0KLSAgICBhd2Fp
dCB0aGlzLmZha2VfY2VudHJhbF9wdHJfLnNpbXVsYXRlUHJlY29ubmVjdGVkUGVyaXBoZXJhbCgK
LSAgICAgIGFkZHJlc3MsIG5hbWUsIGNhbm9uaWNhbGl6ZUFuZENvbnZlcnRUb01vam9VVUlEKGtu
b3duU2VydmljZVVVSURzKSk7Ci0KLSAgICByZXR1cm4gdGhpcy5mZXRjaE9yQ3JlYXRlUGVyaXBo
ZXJhbF8oYWRkcmVzcyk7Ci0gIH0KLQotICAvLyBTaW11bGF0ZXMgYW4gYWR2ZXJ0aXNlbWVudCBw
YWNrZXQgZGVzY3JpYmVkIGJ5IHxzY2FuUmVzdWx0fCBiZWluZyByZWNlaXZlZAotICAvLyBmcm9t
IGEgZGV2aWNlLiBJZiBjZW50cmFsIGlzIGN1cnJlbnRseSBzY2FubmluZywgdGhlIGRldmljZSB3
aWxsIGFwcGVhciBvbgotICAvLyB0aGUgbGlzdCBvZiBkaXNjb3ZlcmVkIGRldmljZXMuCi0gIGFz
eW5jIHNpbXVsYXRlQWR2ZXJ0aXNlbWVudFJlY2VpdmVkKHNjYW5SZXN1bHQpIHsKLSAgICAvLyBD
cmVhdGUgYSBkZWVwLWNvcHkgdG8gcHJldmVudCB0aGUgb3JpZ2luYWwgfHNjYW5SZXN1bHR8IGZy
b20gYmVpbmcKLSAgICAvLyBtb2RpZmllZCB3aGVuIHRoZSBVVUlEcywgbWFudWZhY3R1cmVyLCBh
bmQgc2VydmljZSBkYXRhIGFyZSBjb252ZXJ0ZWQuCi0gICAgbGV0IGNsb25lZFNjYW5SZXN1bHQg
PSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHNjYW5SZXN1bHQpKTsKLQotICAgIGlmICgndXVp
ZHMnIGluIHNjYW5SZXN1bHQuc2NhblJlY29yZCkgewotICAgICAgY2xvbmVkU2NhblJlc3VsdC5z
Y2FuUmVjb3JkLnV1aWRzID0KLSAgICAgICAgICBjYW5vbmljYWxpemVBbmRDb252ZXJ0VG9Nb2pv
VVVJRChzY2FuUmVzdWx0LnNjYW5SZWNvcmQudXVpZHMpOwotICAgIH0KLQotICAgIC8vIENvbnZl
cnQgdGhlIG9wdGlvbmFsIGFwcGVhcmFuY2UgYW5kIHR4UG93ZXIgZmllbGRzIHRvIHRoZSBjb3Jy
ZXNwb25kaW5nCi0gICAgLy8gTW9qbyBzdHJ1Y3R1cmVzLCBzaW5jZSBNb2pvIGRvZXMgbm90IHN1
cHBvcnQgb3B0aW9uYWwgaW50ZXJnZXIgdmFsdWVzLiBJZgotICAgIC8vIHRoZSBmaWVsZHMgYXJl
IHVuZGVmaW5lZCwgc2V0IHRoZSBoYXNWYWx1ZSBmaWVsZCBhcyBmYWxzZSBhbmQgdmFsdWUgYXMg
MC4KLSAgICAvLyBPdGhlcndpc2UsIHNldCB0aGUgaGFzVmFsdWUgZmllbGQgYXMgdHJ1ZSBhbmQg
dmFsdWUgd2l0aCB0aGUgZmllbGQgdmFsdWUuCi0gICAgY29uc3QgaGFzX2FwcGVhcmFuY2UgPSAn
YXBwZWFyYW5jZScgaW4gc2NhblJlc3VsdC5zY2FuUmVjb3JkOwotICAgIGNsb25lZFNjYW5SZXN1
bHQuc2NhblJlY29yZC5hcHBlYXJhbmNlID0gewotICAgICAgaGFzVmFsdWU6IGhhc19hcHBlYXJh
bmNlLAotICAgICAgdmFsdWU6IChoYXNfYXBwZWFyYW5jZSA/IHNjYW5SZXN1bHQuc2NhblJlY29y
ZC5hcHBlYXJhbmNlIDogMCkKLSAgICB9Ci0KLSAgICBjb25zdCBoYXNfdHhfcG93ZXIgPSAndHhQ
b3dlcicgaW4gc2NhblJlc3VsdC5zY2FuUmVjb3JkOwotICAgIGNsb25lZFNjYW5SZXN1bHQuc2Nh
blJlY29yZC50eFBvd2VyID0gewotICAgICAgaGFzVmFsdWU6IGhhc190eF9wb3dlciwKLSAgICAg
IHZhbHVlOiAoaGFzX3R4X3Bvd2VyID8gc2NhblJlc3VsdC5zY2FuUmVjb3JkLnR4UG93ZXIgOiAw
KQotICAgIH0KLQotICAgIC8vIENvbnZlcnQgbWFudWZhY3R1cmVyRGF0YSBmcm9tIGEgcmVjb3Jk
PERPTVN0cmluZywgQnVmZmVyU291cmNlPiBpbnRvIGEKLSAgICAvLyBtYXA8dWludDgsIGFycmF5
PHVpbnQ4Pj4gZm9yIE1vam8uCi0gICAgaWYgKCdtYW51ZmFjdHVyZXJEYXRhJyBpbiBzY2FuUmVz
dWx0LnNjYW5SZWNvcmQpIHsKLSAgICAgIGNsb25lZFNjYW5SZXN1bHQuc2NhblJlY29yZC5tYW51
ZmFjdHVyZXJEYXRhID0KLSAgICAgICAgICBjb252ZXJ0VG9Nb2pvTWFwKHNjYW5SZXN1bHQuc2Nh
blJlY29yZC5tYW51ZmFjdHVyZXJEYXRhLCBOdW1iZXIpOwotICAgIH0KLQotICAgIC8vIENvbnZl
cnQgc2VydmljZURhdGEgZnJvbSBhIHJlY29yZDxET01TdHJpbmcsIEJ1ZmZlclNvdXJjZT4gaW50
byBhCi0gICAgLy8gbWFwPHN0cmluZywgYXJyYXk8dWludDg+PiBmb3IgTW9qby4KLSAgICBpZiAo
J3NlcnZpY2VEYXRhJyBpbiBzY2FuUmVzdWx0LnNjYW5SZWNvcmQpIHsKLSAgICAgIGNsb25lZFNj
YW5SZXN1bHQuc2NhblJlY29yZC5zZXJ2aWNlRGF0YS5zZXJ2aWNlRGF0YSA9IGNvbnZlcnRUb01v
am9NYXAoCi0gICAgICAgICAgc2NhblJlc3VsdC5zY2FuUmVjb3JkLnNlcnZpY2VEYXRhLCBCbHVl
dG9vdGhVVUlELmdldFNlcnZpY2UpOwotICAgIH0KLQotICAgIGF3YWl0IHRoaXMuZmFrZV9jZW50
cmFsX3B0cl8uc2ltdWxhdGVBZHZlcnRpc2VtZW50UmVjZWl2ZWQoCi0gICAgICAgIG5ldyBibHVl
dG9vdGgubW9qb20uU2NhblJlc3VsdChjbG9uZWRTY2FuUmVzdWx0KSk7Ci0KLSAgICByZXR1cm4g
dGhpcy5mZXRjaE9yQ3JlYXRlUGVyaXBoZXJhbF8oY2xvbmVkU2NhblJlc3VsdC5kZXZpY2VBZGRy
ZXNzKTsKLSAgfQotCi0gIC8vIFNpbXVsYXRlcyBhIGNoYW5nZSBpbiB0aGUgY2VudHJhbCBkZXZp
Y2UgZGVzY3JpYmVkIGJ5IHxzdGF0ZXwuIEZvciBleGFtcGxlLAotICAvLyBzZXRTdGF0ZSgncG93
ZXJlZC1vZmYnKSBjYW4gYmUgdXNlZCB0byBzaW11bGF0ZSB0aGUgY2VudHJhbCBkZXZpY2UgcG93
ZXJpbmcKLSAgLy8gb2ZmLgotICAvLwotICAvLyBUaGlzIG1ldGhvZCBzaG91bGQgYmUgdXNlZCBm
b3IgYW55IGNlbnRyYWwgc3RhdGUgY2hhbmdlcyBhZnRlcgotICAvLyBzaW11bGF0ZUNlbnRyYWwo
KSBoYXMgYmVlbiBjYWxsZWQgdG8gY3JlYXRlIGEgRmFrZUNlbnRyYWwgb2JqZWN0LgotICBhc3lu
YyBzZXRTdGF0ZShzdGF0ZSkgewotICAgIGF3YWl0IHRoaXMuZmFrZV9jZW50cmFsX3B0cl8uc2V0
U3RhdGUodG9Nb2pvQ2VudHJhbFN0YXRlKHN0YXRlKSk7Ci0gIH0KLQotICAvLyBDcmVhdGUgYSBm
YWtlX3BlcmlwaGVyYWwgb2JqZWN0IGZyb20gdGhlIGdpdmVuIGFkZHJlc3MuCi0gIGZldGNoT3JD
cmVhdGVQZXJpcGhlcmFsXyhhZGRyZXNzKSB7Ci0gICAgbGV0IHBlcmlwaGVyYWwgPSB0aGlzLnBl
cmlwaGVyYWxzXy5nZXQoYWRkcmVzcyk7Ci0gICAgaWYgKHBlcmlwaGVyYWwgPT09IHVuZGVmaW5l
ZCkgewotICAgICAgcGVyaXBoZXJhbCA9IG5ldyBGYWtlUGVyaXBoZXJhbChhZGRyZXNzLCB0aGlz
LmZha2VfY2VudHJhbF9wdHJfKTsKLSAgICAgIHRoaXMucGVyaXBoZXJhbHNfLnNldChhZGRyZXNz
LCBwZXJpcGhlcmFsKTsKLSAgICB9Ci0gICAgcmV0dXJuIHBlcmlwaGVyYWw7Ci0gIH0KLX0KLQot
Y2xhc3MgRmFrZVBlcmlwaGVyYWwgewotICBjb25zdHJ1Y3RvcihhZGRyZXNzLCBmYWtlX2NlbnRy
YWxfcHRyKSB7Ci0gICAgdGhpcy5hZGRyZXNzID0gYWRkcmVzczsKLSAgICB0aGlzLmZha2VfY2Vu
dHJhbF9wdHJfID0gZmFrZV9jZW50cmFsX3B0cjsKLSAgfQotCi0gIC8vIEFkZHMgYSBmYWtlIEdB
VFQgU2VydmljZSB3aXRoIHx1dWlkfCB0byBiZSBkaXNjb3ZlcmVkIHdoZW4gZGlzY292ZXJpbmcK
LSAgLy8gdGhlIHBlcmlwaGVyYWwncyBHQVRUIEF0dHJpYnV0ZXMuIFJldHVybnMgYSBGYWtlUmVt
b3RlR0FUVFNlcnZpY2UKLSAgLy8gY29ycmVzcG9uZGluZyB0byB0aGlzIHNlcnZpY2UuIHx1dWlk
fCBzaG91bGQgYmUgYSBCbHVldG9vdGhTZXJ2aWNlVVVJRHMKLSAgLy8gaHR0cHM6Ly93ZWJibHVl
dG9vdGhjZy5naXRodWIuaW8vd2ViLWJsdWV0b290aC8jdHlwZWRlZmRlZi1ibHVldG9vdGhzZXJ2
aWNldXVpZAotICBhc3luYyBhZGRGYWtlU2VydmljZSh7dXVpZH0pIHsKLSAgICBsZXQge3NlcnZp
Y2VJZDogc2VydmljZV9pZH0gPSBhd2FpdCB0aGlzLmZha2VfY2VudHJhbF9wdHJfLmFkZEZha2VT
ZXJ2aWNlKAotICAgICAgdGhpcy5hZGRyZXNzLCB7dXVpZDogQmx1ZXRvb3RoVVVJRC5nZXRTZXJ2
aWNlKHV1aWQpfSk7Ci0KLSAgICBpZiAoc2VydmljZV9pZCA9PT0gbnVsbCkgdGhyb3cgJ2FkZEZh
a2VTZXJ2aWNlIGZhaWxlZCc7Ci0KLSAgICByZXR1cm4gbmV3IEZha2VSZW1vdGVHQVRUU2Vydmlj
ZSgKLSAgICAgIHNlcnZpY2VfaWQsIHRoaXMuYWRkcmVzcywgdGhpcy5mYWtlX2NlbnRyYWxfcHRy
Xyk7Ci0gIH0KLQotICAvLyBTZXRzIHRoZSBuZXh0IEdBVFQgQ29ubmVjdGlvbiByZXF1ZXN0IHJl
c3BvbnNlIHRvIHxjb2RlfC4gfGNvZGV8IGNvdWxkIGJlCi0gIC8vIGFuIEhDSSBFcnJvciBDb2Rl
IGZyb20gQlQgNC4yIFZvbCAyIFBhcnQgRCAxLjMgTGlzdCBPZiBFcnJvciBDb2RlcyBvciBhCi0g
IC8vIG51bWJlciBvdXRzaWRlIHRoYXQgcmFuZ2UgcmV0dXJuZWQgYnkgc3BlY2lmaWMgcGxhdGZv
cm1zIGUuZy4gQW5kcm9pZAotICAvLyByZXR1cm5zIDB4MTAxIHRvIHNpZ25hbCBhIEdBVFQgZmFp
bHVyZQotICAvLyBodHRwczovL2RldmVsb3Blci5hbmRyb2lkLmNvbS9yZWZlcmVuY2UvYW5kcm9p
ZC9ibHVldG9vdGgvQmx1ZXRvb3RoR2F0dC5odG1sI0dBVFRfRkFJTFVSRQotICBhc3luYyBzZXRO
ZXh0R0FUVENvbm5lY3Rpb25SZXNwb25zZSh7Y29kZX0pIHsKLSAgICBsZXQge3N1Y2Nlc3N9ID0K
LSAgICAgIGF3YWl0IHRoaXMuZmFrZV9jZW50cmFsX3B0cl8uc2V0TmV4dEdBVFRDb25uZWN0aW9u
UmVzcG9uc2UoCi0gICAgICAgIHRoaXMuYWRkcmVzcywgY29kZSk7Ci0KLSAgICBpZiAoc3VjY2Vz
cyAhPT0gdHJ1ZSkgdGhyb3cgJ3NldE5leHRHQVRUQ29ubmVjdGlvblJlc3BvbnNlIGZhaWxlZC4n
OwotICB9Ci0KLSAgLy8gU2V0cyB0aGUgbmV4dCBHQVRUIERpc2NvdmVyeSByZXF1ZXN0IHJlc3Bv
bnNlIGZvciBwZXJpcGhlcmFsIHdpdGgKLSAgLy8gfGFkZHJlc3N8IHRvIHxjb2RlfC4gfGNvZGV8
IGNvdWxkIGJlIGFuIEhDSSBFcnJvciBDb2RlIGZyb20KLSAgLy8gQlQgNC4yIFZvbCAyIFBhcnQg
RCAxLjMgTGlzdCBPZiBFcnJvciBDb2RlcyBvciBhIG51bWJlciBvdXRzaWRlIHRoYXQKLSAgLy8g
cmFuZ2UgcmV0dXJuZWQgYnkgc3BlY2lmaWMgcGxhdGZvcm1zIGUuZy4gQW5kcm9pZCByZXR1cm5z
IDB4MTAxIHRvIHNpZ25hbAotICAvLyBhIEdBVFQgZmFpbHVyZQotICAvLyBodHRwczovL2RldmVs
b3Blci5hbmRyb2lkLmNvbS9yZWZlcmVuY2UvYW5kcm9pZC9ibHVldG9vdGgvQmx1ZXRvb3RoR2F0
dC5odG1sI0dBVFRfRkFJTFVSRQotICAvLwotICAvLyBUaGUgZm9sbG93aW5nIHByb2NlZHVyZXMg
ZGVmaW5lZCBhdCBCVCA0LjIgVm9sIDMgUGFydCBHIFNlY3Rpb24gNC4KLSAgLy8gIkdBVFQgRmVh
dHVyZSBSZXF1aXJlbWVudHMiIGFyZSB1c2VkIHRvIGRpc2NvdmVyIGF0dHJpYnV0ZXMgb2YgdGhl
Ci0gIC8vIEdBVFQgU2VydmVyOgotICAvLyAgLSBQcmltYXJ5IFNlcnZpY2UgRGlzY292ZXJ5Ci0g
IC8vICAtIFJlbGF0aW9uc2hpcCBEaXNjb3ZlcnkKLSAgLy8gIC0gQ2hhcmFjdGVyaXN0aWMgRGlz
Y292ZXJ5Ci0gIC8vICAtIENoYXJhY3RlcmlzdGljIERlc2NyaXB0b3IgRGlzY292ZXJ5Ci0gIC8v
IFRoaXMgbWV0aG9kIGFpbXMgdG8gc2ltdWxhdGUgdGhlIHJlc3BvbnNlIG9uY2UgYWxsIG9mIHRo
ZXNlIHByb2NlZHVyZXMKLSAgLy8gaGF2ZSBjb21wbGV0ZWQgb3IgaWYgdGhlcmUgd2FzIGFuIGVy
cm9yIGR1cmluZyBhbnkgb2YgdGhlbS4KLSAgYXN5bmMgc2V0TmV4dEdBVFREaXNjb3ZlcnlSZXNw
b25zZSh7Y29kZX0pIHsKLSAgICBsZXQge3N1Y2Nlc3N9ID0KLSAgICAgIGF3YWl0IHRoaXMuZmFr
ZV9jZW50cmFsX3B0cl8uc2V0TmV4dEdBVFREaXNjb3ZlcnlSZXNwb25zZSgKLSAgICAgICAgdGhp
cy5hZGRyZXNzLCBjb2RlKTsKLQotICAgIGlmIChzdWNjZXNzICE9PSB0cnVlKSB0aHJvdyAnc2V0
TmV4dEdBVFREaXNjb3ZlcnlSZXNwb25zZSBmYWlsZWQuJzsKLSAgfQotCi0gIC8vIFNpbXVsYXRl
cyBhIEdBVFQgZGlzY29ubmVjdGlvbiBmcm9tIHRoZSBwZXJpcGhlcmFsIHdpdGggfGFkZHJlc3N8
LgotICBhc3luYyBzaW11bGF0ZUdBVFREaXNjb25uZWN0aW9uKCkgewotICAgIGxldCB7c3VjY2Vz
c30gPQotICAgICAgYXdhaXQgdGhpcy5mYWtlX2NlbnRyYWxfcHRyXy5zaW11bGF0ZUdBVFREaXNj
b25uZWN0aW9uKHRoaXMuYWRkcmVzcyk7Ci0KLSAgICBpZiAoc3VjY2VzcyAhPT0gdHJ1ZSkgdGhy
b3cgJ3NpbXVsYXRlR0FUVERpc2Nvbm5lY3Rpb24gZmFpbGVkLic7Ci0gIH0KLQotICAvLyBTaW11
bGF0ZXMgYW4gSW5kaWNhdGlvbiBmcm9tIHRoZSBwZXJpcGhlcmFsJ3MgR0FUVCBgU2VydmljZSBD
aGFuZ2VkYAotICAvLyBDaGFyYWN0ZXJpc3RpYyBmcm9tIEJUIDQuMiBWb2wgMyBQYXJ0IEcgNy4x
LiBUaGlzIEluZGljYXRpb24gaXMgc2lnbmFsZWQKLSAgLy8gd2hlbiBzZXJ2aWNlcywgY2hhcmFj
dGVyaXN0aWNzLCBvciBkZXNjcmlwdG9ycyBhcmUgY2hhbmdlZCwgYWRkZWQsIG9yCi0gIC8vIHJl
bW92ZWQuCi0gIC8vCi0gIC8vIFRoZSB2YWx1ZSBmb3IgYFNlcnZpY2UgQ2hhbmdlZGAgaXMgYSBy
YW5nZSBvZiBhdHRyaWJ1dGUgaGFuZGxlcyB0aGF0IGhhdmUKLSAgLy8gY2hhbmdlZC4gSG93ZXZl
ciwgdGhpcyB0ZXN0aW5nIHNwZWNpZmljYXRpb24gd29ya3MgYXQgYW4gYWJzdHJhY3RlZAotICAv
LyBsZXZlbCBhbmQgZG9lcyBub3QgZXhwb3NlIHNldHRpbmcgYXR0cmlidXRlIGhhbmRsZXMgd2hl
biBhZGRpbmcKLSAgLy8gYXR0cmlidXRlcy4gQ29uc2VxdWVudGx5LCB0aGlzIHNpbXVsYXRlIG1l
dGhvZCBzaG91bGQgaW5jbHVkZSB0aGUgZnVsbAotICAvLyByYW5nZSBvZiBhbGwgdGhlIHBlcmlw
aGVyYWwncyBhdHRyaWJ1dGUgaGFuZGxlIHZhbHVlcy4KLSAgYXN5bmMgc2ltdWxhdGVHQVRUU2Vy
dmljZXNDaGFuZ2VkKCkgewotICAgIGxldCB7c3VjY2Vzc30gPQotICAgICAgYXdhaXQgdGhpcy5m
YWtlX2NlbnRyYWxfcHRyXy5zaW11bGF0ZUdBVFRTZXJ2aWNlc0NoYW5nZWQodGhpcy5hZGRyZXNz
KTsKLQotICAgIGlmIChzdWNjZXNzICE9PSB0cnVlKSB0aHJvdyAnc2ltdWxhdGVHQVRUU2Vydmlj
ZXNDaGFuZ2VkIGZhaWxlZC4nOwotICB9Ci19Ci0KLWNsYXNzIEZha2VSZW1vdGVHQVRUU2Vydmlj
ZSB7Ci0gIGNvbnN0cnVjdG9yKHNlcnZpY2VfaWQsIHBlcmlwaGVyYWxfYWRkcmVzcywgZmFrZV9j
ZW50cmFsX3B0cikgewotICAgIHRoaXMuc2VydmljZV9pZF8gPSBzZXJ2aWNlX2lkOwotICAgIHRo
aXMucGVyaXBoZXJhbF9hZGRyZXNzXyA9IHBlcmlwaGVyYWxfYWRkcmVzczsKLSAgICB0aGlzLmZh
a2VfY2VudHJhbF9wdHJfID0gZmFrZV9jZW50cmFsX3B0cjsKLSAgfQotCi0gIC8vIEFkZHMgYSBm
YWtlIEdBVFQgQ2hhcmFjdGVyaXN0aWMgd2l0aCB8dXVpZHwgYW5kIHxwcm9wZXJ0aWVzfAotICAv
LyB0byB0aGlzIGZha2Ugc2VydmljZS4gVGhlIGNoYXJhY3RlcmlzdGljIHdpbGwgYmUgZm91bmQg
d2hlbiBkaXNjb3ZlcmluZwotICAvLyB0aGUgcGVyaXBoZXJhbCdzIEdBVFQgQXR0cmlidXRlcy4g
UmV0dXJucyBhIEZha2VSZW1vdGVHQVRUQ2hhcmFjdGVyaXN0aWMKLSAgLy8gY29ycmVzcG9uZGlu
ZyB0byB0aGUgYWRkZWQgY2hhcmFjdGVyaXN0aWMuCi0gIGFzeW5jIGFkZEZha2VDaGFyYWN0ZXJp
c3RpYyh7dXVpZCwgcHJvcGVydGllc30pIHsKLSAgICBsZXQge2NoYXJhY3RlcmlzdGljSWQ6IGNo
YXJhY3RlcmlzdGljX2lkfSA9Ci0gICAgICAgIGF3YWl0IHRoaXMuZmFrZV9jZW50cmFsX3B0cl8u
YWRkRmFrZUNoYXJhY3RlcmlzdGljKAotICAgICAgICAgICAge3V1aWQ6IEJsdWV0b290aFVVSUQu
Z2V0Q2hhcmFjdGVyaXN0aWModXVpZCl9LAotICAgICAgICAgICAgQXJyYXlUb01vam9DaGFyYWN0
ZXJpc3RpY1Byb3BlcnRpZXMocHJvcGVydGllcyksCi0gICAgICAgICAgICB0aGlzLnNlcnZpY2Vf
aWRfLAotICAgICAgICAgICAgdGhpcy5wZXJpcGhlcmFsX2FkZHJlc3NfKTsKLQotICAgIGlmIChj
aGFyYWN0ZXJpc3RpY19pZCA9PT0gbnVsbCkgdGhyb3cgJ2FkZEZha2VDaGFyYWN0ZXJpc3RpYyBm
YWlsZWQnOwotCi0gICAgcmV0dXJuIG5ldyBGYWtlUmVtb3RlR0FUVENoYXJhY3RlcmlzdGljKAot
ICAgICAgY2hhcmFjdGVyaXN0aWNfaWQsIHRoaXMuc2VydmljZV9pZF8sCi0gICAgICB0aGlzLnBl
cmlwaGVyYWxfYWRkcmVzc18sIHRoaXMuZmFrZV9jZW50cmFsX3B0cl8pOwotICB9Ci0KLSAgLy8g
UmVtb3ZlcyB0aGUgZmFrZSBHQVRUIHNlcnZpY2UgZnJvbSBpdHMgZmFrZSBwZXJpcGhlcmFsLgot
ICBhc3luYyByZW1vdmUoKSB7Ci0gICAgbGV0IHtzdWNjZXNzfSA9Ci0gICAgICAgIGF3YWl0IHRo
aXMuZmFrZV9jZW50cmFsX3B0cl8ucmVtb3ZlRmFrZVNlcnZpY2UoCi0gICAgICAgICAgICB0aGlz
LnNlcnZpY2VfaWRfLAotICAgICAgICAgICAgdGhpcy5wZXJpcGhlcmFsX2FkZHJlc3NfKTsKLQot
ICAgIGlmICghc3VjY2VzcykgdGhyb3cgJ3JlbW92ZSBmYWlsZWQnOwotICB9Ci19Ci0KLWNsYXNz
IEZha2VSZW1vdGVHQVRUQ2hhcmFjdGVyaXN0aWMgewotICBjb25zdHJ1Y3RvcihjaGFyYWN0ZXJp
c3RpY19pZCwgc2VydmljZV9pZCwgcGVyaXBoZXJhbF9hZGRyZXNzLAotICAgICAgZmFrZV9jZW50
cmFsX3B0cikgewotICAgIHRoaXMuaWRzXyA9IFtjaGFyYWN0ZXJpc3RpY19pZCwgc2VydmljZV9p
ZCwgcGVyaXBoZXJhbF9hZGRyZXNzXTsKLSAgICB0aGlzLmRlc2NyaXB0b3JzXyA9IFtdOwotICAg
IHRoaXMuZmFrZV9jZW50cmFsX3B0cl8gPSBmYWtlX2NlbnRyYWxfcHRyOwotICB9Ci0KLSAgLy8g
QWRkcyBhIGZha2UgR0FUVCBEZXNjcmlwdG9yIHdpdGggfHV1aWR8IHRvIGJlIGRpc2NvdmVyZWQg
d2hlbgotICAvLyBkaXNjb3ZlcmluZyB0aGUgcGVyaXBoZXJhbCdzIEdBVFQgQXR0cmlidXRlcy4g
UmV0dXJucyBhCi0gIC8vIEZha2VSZW1vdGVHQVRURGVzY3JpcHRvciBjb3JyZXNwb25kaW5nIHRv
IHRoaXMgZGVzY3JpcHRvci4gfHV1aWR8IHNob3VsZAotICAvLyBiZSBhIEJsdWV0b290aERlc2Ny
aXB0b3JVVUlECi0gIC8vIGh0dHBzOi8vd2ViYmx1ZXRvb3RoY2cuZ2l0aHViLmlvL3dlYi1ibHVl
dG9vdGgvI3R5cGVkZWZkZWYtYmx1ZXRvb3RoZGVzY3JpcHRvcnV1aWQKLSAgYXN5bmMgYWRkRmFr
ZURlc2NyaXB0b3Ioe3V1aWR9KSB7Ci0gICAgbGV0IHtkZXNjcmlwdG9ySWQ6IGRlc2NyaXB0b3Jf
aWR9ID0KLSAgICAgICAgYXdhaXQgdGhpcy5mYWtlX2NlbnRyYWxfcHRyXy5hZGRGYWtlRGVzY3Jp
cHRvcigKLSAgICAgICAgICAgIHt1dWlkOiBCbHVldG9vdGhVVUlELmdldERlc2NyaXB0b3IodXVp
ZCl9LCAuLi50aGlzLmlkc18pOwotCi0gICAgaWYgKGRlc2NyaXB0b3JfaWQgPT09IG51bGwpIHRo
cm93ICdhZGRGYWtlRGVzY3JpcHRvciBmYWlsZWQnOwotCi0gICAgbGV0IGZha2VfZGVzY3JpcHRv
ciA9IG5ldyBGYWtlUmVtb3RlR0FUVERlc2NyaXB0b3IoCi0gICAgICBkZXNjcmlwdG9yX2lkLCAu
Li50aGlzLmlkc18sIHRoaXMuZmFrZV9jZW50cmFsX3B0cl8pOwotICAgIHRoaXMuZGVzY3JpcHRv
cnNfLnB1c2goZmFrZV9kZXNjcmlwdG9yKTsKLQotICAgIHJldHVybiBmYWtlX2Rlc2NyaXB0b3I7
Ci0gIH0KLQotICAvLyBTZXRzIHRoZSBuZXh0IHJlYWQgcmVzcG9uc2UgZm9yIGNoYXJhY3Rlcmlz
dGljIHRvIHxjb2RlfCBhbmQgfHZhbHVlfC4KLSAgLy8gfGNvZGV8IGNvdWxkIGJlIGEgR0FUVCBF
cnJvciBSZXNwb25zZSBmcm9tCi0gIC8vIEJUIDQuMiBWb2wgMyBQYXJ0IEYgMy40LjEuMSBFcnJv
ciBSZXNwb25zZSBvciBhIG51bWJlciBvdXRzaWRlIHRoYXQgcmFuZ2UKLSAgLy8gcmV0dXJuZWQg
Ynkgc3BlY2lmaWMgcGxhdGZvcm1zIGUuZy4gQW5kcm9pZCByZXR1cm5zIDB4MTAxIHRvIHNpZ25h
bCBhIEdBVFQKLSAgLy8gZmFpbHVyZS4KLSAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIuYW5kcm9pZC5j
b20vcmVmZXJlbmNlL2FuZHJvaWQvYmx1ZXRvb3RoL0JsdWV0b290aEdhdHQuaHRtbCNHQVRUX0ZB
SUxVUkUKLSAgYXN5bmMgc2V0TmV4dFJlYWRSZXNwb25zZShnYXR0X2NvZGUsIHZhbHVlPW51bGwp
IHsKLSAgICBpZiAoZ2F0dF9jb2RlID09PSAwICYmIHZhbHVlID09PSBudWxsKSB7Ci0gICAgICB0
aHJvdyAnfHZhbHVlfCBjYW5cJ3QgYmUgbnVsbCBpZiByZWFkIHNob3VsZCBzdWNjZXNzLic7Ci0g
ICAgfQotICAgIGlmIChnYXR0X2NvZGUgIT09IDAgJiYgdmFsdWUgIT09IG51bGwpIHsKLSAgICAg
IHRocm93ICd8dmFsdWV8IG11c3QgYmUgbnVsbCBpZiByZWFkIHNob3VsZCBmYWlsLic7Ci0gICAg
fQotCi0gICAgbGV0IHtzdWNjZXNzfSA9Ci0gICAgICBhd2FpdCB0aGlzLmZha2VfY2VudHJhbF9w
dHJfLnNldE5leHRSZWFkQ2hhcmFjdGVyaXN0aWNSZXNwb25zZSgKLSAgICAgICAgZ2F0dF9jb2Rl
LCB2YWx1ZSwgLi4udGhpcy5pZHNfKTsKLQotICAgIGlmICghc3VjY2VzcykgdGhyb3cgJ3NldE5l
eHRSZWFkQ2hhcmFjdGVyaXN0aWNSZXNwb25zZSBmYWlsZWQnOwotICB9Ci0KLSAgLy8gU2V0cyB0
aGUgbmV4dCB3cml0ZSByZXNwb25zZSBmb3IgdGhpcyBjaGFyYWN0ZXJpc3RpYyB0byB8Y29kZXwu
IElmCi0gIC8vIHdyaXRpbmcgdG8gYSBjaGFyYWN0ZXJpc3RpYyB0aGF0IG9ubHkgc3VwcG9ydHMg
J3dyaXRlX3dpdGhvdXRfcmVzcG9uc2UnCi0gIC8vIHRoZSBzZXQgcmVzcG9uc2Ugd2lsbCBiZSBp
Z25vcmVkLgotICAvLyB8Y29kZXwgY291bGQgYmUgYSBHQVRUIEVycm9yIFJlc3BvbnNlIGZyb20K
LSAgLy8gQlQgNC4yIFZvbCAzIFBhcnQgRiAzLjQuMS4xIEVycm9yIFJlc3BvbnNlIG9yIGEgbnVt
YmVyIG91dHNpZGUgdGhhdCByYW5nZQotICAvLyByZXR1cm5lZCBieSBzcGVjaWZpYyBwbGF0Zm9y
bXMgZS5nLiBBbmRyb2lkIHJldHVybnMgMHgxMDEgdG8gc2lnbmFsIGEgR0FUVAotICAvLyBmYWls
dXJlLgotICBhc3luYyBzZXROZXh0V3JpdGVSZXNwb25zZShnYXR0X2NvZGUpIHsKLSAgICBsZXQg
e3N1Y2Nlc3N9ID0KLSAgICAgIGF3YWl0IHRoaXMuZmFrZV9jZW50cmFsX3B0cl8uc2V0TmV4dFdy
aXRlQ2hhcmFjdGVyaXN0aWNSZXNwb25zZSgKLSAgICAgICAgZ2F0dF9jb2RlLCAuLi50aGlzLmlk
c18pOwotCi0gICAgaWYgKCFzdWNjZXNzKSB0aHJvdyAnc2V0TmV4dFdyaXRlQ2hhcmFjdGVyaXN0
aWNSZXNwb25zZSBmYWlsZWQnOwotICB9Ci0KLSAgLy8gU2V0cyB0aGUgbmV4dCBzdWJzY3JpYmUg
dG8gbm90aWZpY2F0aW9ucyByZXNwb25zZSBmb3IgY2hhcmFjdGVyaXN0aWMgd2l0aAotICAvLyB8
Y2hhcmFjdGVyaXN0aWNfaWR8IGluIHxzZXJ2aWNlX2lkfCBhbmQgaW4gfHBlcmlwaGVyYWxfYWRk
cmVzc3wgdG8KLSAgLy8gfGNvZGV8LiB8Y29kZXwgY291bGQgYmUgYSBHQVRUIEVycm9yIFJlc3Bv
bnNlIGZyb20gQlQgNC4yIFZvbCAzIFBhcnQgRgotICAvLyAzLjQuMS4xIEVycm9yIFJlc3BvbnNl
IG9yIGEgbnVtYmVyIG91dHNpZGUgdGhhdCByYW5nZSByZXR1cm5lZCBieQotICAvLyBzcGVjaWZp
YyBwbGF0Zm9ybXMgZS5nLiBBbmRyb2lkIHJldHVybnMgMHgxMDEgdG8gc2lnbmFsIGEgR0FUVCBm
YWlsdXJlLgotICBhc3luYyBzZXROZXh0U3Vic2NyaWJlVG9Ob3RpZmljYXRpb25zUmVzcG9uc2Uo
Z2F0dF9jb2RlKSB7Ci0gICAgbGV0IHtzdWNjZXNzfSA9Ci0gICAgICBhd2FpdCB0aGlzLmZha2Vf
Y2VudHJhbF9wdHJfLnNldE5leHRTdWJzY3JpYmVUb05vdGlmaWNhdGlvbnNSZXNwb25zZSgKLSAg
ICAgICAgZ2F0dF9jb2RlLCAuLi50aGlzLmlkc18pOwotCi0gICAgaWYgKCFzdWNjZXNzKSB0aHJv
dyAnc2V0TmV4dFN1YnNjcmliZVRvTm90aWZpY2F0aW9uc1Jlc3BvbnNlIGZhaWxlZCc7Ci0gIH0K
LQotICAvLyBTZXRzIHRoZSBuZXh0IHVuc3Vic2NyaWJlIHRvIG5vdGlmaWNhdGlvbnMgcmVzcG9u
c2UgZm9yIGNoYXJhY3RlcmlzdGljIHdpdGgKLSAgLy8gfGNoYXJhY3RlcmlzdGljX2lkfCBpbiB8
c2VydmljZV9pZHwgYW5kIGluIHxwZXJpcGhlcmFsX2FkZHJlc3N8IHRvCi0gIC8vIHxjb2RlfC4g
fGNvZGV8IGNvdWxkIGJlIGEgR0FUVCBFcnJvciBSZXNwb25zZSBmcm9tIEJUIDQuMiBWb2wgMyBQ
YXJ0IEYKLSAgLy8gMy40LjEuMSBFcnJvciBSZXNwb25zZSBvciBhIG51bWJlciBvdXRzaWRlIHRo
YXQgcmFuZ2UgcmV0dXJuZWQgYnkKLSAgLy8gc3BlY2lmaWMgcGxhdGZvcm1zIGUuZy4gQW5kcm9p
ZCByZXR1cm5zIDB4MTAxIHRvIHNpZ25hbCBhIEdBVFQgZmFpbHVyZS4KLSAgYXN5bmMgc2V0TmV4
dFVuc3Vic2NyaWJlRnJvbU5vdGlmaWNhdGlvbnNSZXNwb25zZShnYXR0X2NvZGUpIHsKLSAgICBs
ZXQge3N1Y2Nlc3N9ID0KLSAgICAgIGF3YWl0IHRoaXMuZmFrZV9jZW50cmFsX3B0cl8uc2V0TmV4
dFVuc3Vic2NyaWJlRnJvbU5vdGlmaWNhdGlvbnNSZXNwb25zZSgKLSAgICAgICAgZ2F0dF9jb2Rl
LCAuLi50aGlzLmlkc18pOwotCi0gICAgaWYgKCFzdWNjZXNzKSB0aHJvdyAnc2V0TmV4dFVuc3Vi
c2NyaWJlVG9Ob3RpZmljYXRpb25zUmVzcG9uc2UgZmFpbGVkJzsKLSAgfQotCi0gIC8vIFJldHVy
bnMgdHJ1ZSBpZiBub3RpZmljYXRpb25zIGZyb20gdGhlIGNoYXJhY3RlcmlzdGljIGhhdmUgYmVl
biBzdWJzY3JpYmVkCi0gIC8vIHRvLgotICBhc3luYyBpc05vdGlmeWluZygpIHsKLSAgICBsZXQg
e3N1Y2Nlc3MsIGlzTm90aWZ5aW5nfSA9Ci0gICAgICAgIGF3YWl0IHRoaXMuZmFrZV9jZW50cmFs
X3B0cl8uaXNOb3RpZnlpbmcoLi4udGhpcy5pZHNfKTsKLQotICAgIGlmICghc3VjY2VzcykgdGhy
b3cgJ2lzTm90aWZ5aW5nIGZhaWxlZCc7Ci0KLSAgICByZXR1cm4gaXNOb3RpZnlpbmc7Ci0gIH0K
LQotICAvLyBHZXRzIHRoZSBsYXN0IHN1Y2Nlc3NmdWxseSB3cml0dGVuIHZhbHVlIHRvIHRoZSBj
aGFyYWN0ZXJpc3RpYyBhbmQgaXRzCi0gIC8vIHdyaXRlIHR5cGUuIFdyaXRlIHR5cGUgaXMgb25l
IG9mICdub25lJywgJ2RlZmF1bHQtZGVwcmVjYXRlZCcsCi0gIC8vICd3aXRoLXJlc3BvbnNlJywg
J3dpdGhvdXQtcmVzcG9uc2UnLiBSZXR1cm5zIHtsYXN0VmFsdWU6IG51bGwsCi0gIC8vIGxhc3RX
cml0ZVR5cGU6ICdub25lJ30gaWYgbm8gdmFsdWUgaGFzIHlldCBiZWVuIHdyaXR0ZW4gdG8gdGhl
Ci0gIC8vIGNoYXJhY3RlcmlzdGljLgotICBhc3luYyBnZXRMYXN0V3JpdHRlblZhbHVlKCkgewot
ICAgIGxldCB7c3VjY2VzcywgdmFsdWUsIHdyaXRlVHlwZX0gPQotICAgICAgICBhd2FpdCB0aGlz
LmZha2VfY2VudHJhbF9wdHJfLmdldExhc3RXcml0dGVuQ2hhcmFjdGVyaXN0aWNWYWx1ZSgKLSAg
ICAgICAgICAgIC4uLnRoaXMuaWRzXyk7Ci0KLSAgICBpZiAoIXN1Y2Nlc3MpIHRocm93ICdnZXRM
YXN0V3JpdHRlbkNoYXJhY3RlcmlzdGljVmFsdWUgZmFpbGVkJzsKLQotICAgIHJldHVybiB7bGFz
dFZhbHVlOiB2YWx1ZSwgbGFzdFdyaXRlVHlwZTogd3JpdGVUeXBlVG9TdHJpbmcod3JpdGVUeXBl
KX07Ci0gIH0KLQotICAvLyBSZW1vdmVzIHRoZSBmYWtlIEdBVFQgQ2hhcmFjdGVyaXN0aWMgZnJv
bSBpdHMgZmFrZSBzZXJ2aWNlLgotICBhc3luYyByZW1vdmUoKSB7Ci0gICAgbGV0IHtzdWNjZXNz
fSA9Ci0gICAgICAgIGF3YWl0IHRoaXMuZmFrZV9jZW50cmFsX3B0cl8ucmVtb3ZlRmFrZUNoYXJh
Y3RlcmlzdGljKC4uLnRoaXMuaWRzXyk7Ci0KLSAgICBpZiAoIXN1Y2Nlc3MpIHRocm93ICdyZW1v
dmUgZmFpbGVkJzsKLSAgfQotfQotCi1jbGFzcyBGYWtlUmVtb3RlR0FUVERlc2NyaXB0b3Igewot
ICBjb25zdHJ1Y3RvcihkZXNjcmlwdG9yX2lkLAotICAgICAgICAgICAgICBjaGFyYWN0ZXJpc3Rp
Y19pZCwKLSAgICAgICAgICAgICAgc2VydmljZV9pZCwKLSAgICAgICAgICAgICAgcGVyaXBoZXJh
bF9hZGRyZXNzLAotICAgICAgICAgICAgICBmYWtlX2NlbnRyYWxfcHRyKSB7Ci0gICAgdGhpcy5p
ZHNfID0gWwotICAgICAgZGVzY3JpcHRvcl9pZCwgY2hhcmFjdGVyaXN0aWNfaWQsIHNlcnZpY2Vf
aWQsIHBlcmlwaGVyYWxfYWRkcmVzc107Ci0gICAgdGhpcy5mYWtlX2NlbnRyYWxfcHRyXyA9IGZh
a2VfY2VudHJhbF9wdHI7Ci0gIH0KLQotICAvLyBTZXRzIHRoZSBuZXh0IHJlYWQgcmVzcG9uc2Ug
Zm9yIGRlc2NyaXB0b3IgdG8gfGNvZGV8IGFuZCB8dmFsdWV8LgotICAvLyB8Y29kZXwgY291bGQg
YmUgYSBHQVRUIEVycm9yIFJlc3BvbnNlIGZyb20KLSAgLy8gQlQgNC4yIFZvbCAzIFBhcnQgRiAz
LjQuMS4xIEVycm9yIFJlc3BvbnNlIG9yIGEgbnVtYmVyIG91dHNpZGUgdGhhdCByYW5nZQotICAv
LyByZXR1cm5lZCBieSBzcGVjaWZpYyBwbGF0Zm9ybXMgZS5nLiBBbmRyb2lkIHJldHVybnMgMHgx
MDEgdG8gc2lnbmFsIGEgR0FUVAotICAvLyBmYWlsdXJlLgotICAvLyBodHRwczovL2RldmVsb3Bl
ci5hbmRyb2lkLmNvbS9yZWZlcmVuY2UvYW5kcm9pZC9ibHVldG9vdGgvQmx1ZXRvb3RoR2F0dC5o
dG1sI0dBVFRfRkFJTFVSRQotICBhc3luYyBzZXROZXh0UmVhZFJlc3BvbnNlKGdhdHRfY29kZSwg
dmFsdWU9bnVsbCkgewotICAgIGlmIChnYXR0X2NvZGUgPT09IDAgJiYgdmFsdWUgPT09IG51bGwp
IHsKLSAgICAgIHRocm93ICd8dmFsdWV8IGNhbm5vdCBiZSBudWxsIGlmIHJlYWQgc2hvdWxkIHN1
Y2NlZWQuJzsKLSAgICB9Ci0gICAgaWYgKGdhdHRfY29kZSAhPT0gMCAmJiB2YWx1ZSAhPT0gbnVs
bCkgewotICAgICAgdGhyb3cgJ3x2YWx1ZXwgbXVzdCBiZSBudWxsIGlmIHJlYWQgc2hvdWxkIGZh
aWwuJzsKLSAgICB9Ci0KLSAgICBsZXQge3N1Y2Nlc3N9ID0KLSAgICAgIGF3YWl0IHRoaXMuZmFr
ZV9jZW50cmFsX3B0cl8uc2V0TmV4dFJlYWREZXNjcmlwdG9yUmVzcG9uc2UoCi0gICAgICAgIGdh
dHRfY29kZSwgdmFsdWUsIC4uLnRoaXMuaWRzXyk7Ci0KLSAgICBpZiAoIXN1Y2Nlc3MpIHRocm93
ICdzZXROZXh0UmVhZERlc2NyaXB0b3JSZXNwb25zZSBmYWlsZWQnOwotICB9Ci0KLSAgLy8gU2V0
cyB0aGUgbmV4dCB3cml0ZSByZXNwb25zZSBmb3IgdGhpcyBkZXNjcmlwdG9yIHRvIHxjb2RlfC4K
LSAgLy8gfGNvZGV8IGNvdWxkIGJlIGEgR0FUVCBFcnJvciBSZXNwb25zZSBmcm9tCi0gIC8vIEJU
IDQuMiBWb2wgMyBQYXJ0IEYgMy40LjEuMSBFcnJvciBSZXNwb25zZSBvciBhIG51bWJlciBvdXRz
aWRlIHRoYXQgcmFuZ2UKLSAgLy8gcmV0dXJuZWQgYnkgc3BlY2lmaWMgcGxhdGZvcm1zIGUuZy4g
QW5kcm9pZCByZXR1cm5zIDB4MTAxIHRvIHNpZ25hbCBhIEdBVFQKLSAgLy8gZmFpbHVyZS4KLSAg
YXN5bmMgc2V0TmV4dFdyaXRlUmVzcG9uc2UoZ2F0dF9jb2RlKSB7Ci0gICAgbGV0IHtzdWNjZXNz
fSA9Ci0gICAgICBhd2FpdCB0aGlzLmZha2VfY2VudHJhbF9wdHJfLnNldE5leHRXcml0ZURlc2Ny
aXB0b3JSZXNwb25zZSgKLSAgICAgICAgZ2F0dF9jb2RlLCAuLi50aGlzLmlkc18pOwotCi0gICAg
aWYgKCFzdWNjZXNzKSB0aHJvdyAnc2V0TmV4dFdyaXRlRGVzY3JpcHRvclJlc3BvbnNlIGZhaWxl
ZCc7Ci0gIH0KLQotICAvLyBHZXRzIHRoZSBsYXN0IHN1Y2Nlc3NmdWxseSB3cml0dGVuIHZhbHVl
IHRvIHRoZSBkZXNjcmlwdG9yLgotICAvLyBSZXR1cm5zIG51bGwgaWYgbm8gdmFsdWUgaGFzIHll
dCBiZWVuIHdyaXR0ZW4gdG8gdGhlIGRlc2NyaXB0b3IuCi0gIGFzeW5jIGdldExhc3RXcml0dGVu
VmFsdWUoKSB7Ci0gICAgbGV0IHtzdWNjZXNzLCB2YWx1ZX0gPQotICAgICAgYXdhaXQgdGhpcy5m
YWtlX2NlbnRyYWxfcHRyXy5nZXRMYXN0V3JpdHRlbkRlc2NyaXB0b3JWYWx1ZSgKLSAgICAgICAg
ICAuLi50aGlzLmlkc18pOwotCi0gICAgaWYgKCFzdWNjZXNzKSB0aHJvdyAnZ2V0TGFzdFdyaXR0
ZW5EZXNjcmlwdG9yVmFsdWUgZmFpbGVkJzsKLQotICAgIHJldHVybiB2YWx1ZTsKLSAgfQotCi0g
IC8vIFJlbW92ZXMgdGhlIGZha2UgR0FUVCBEZXNjcmlwdG9yIGZyb20gaXRzIGZha2UgY2hhcmFj
dGVyaXN0aWMuCi0gIGFzeW5jIHJlbW92ZSgpIHsKLSAgICBsZXQge3N1Y2Nlc3N9ID0KLSAgICAg
ICAgYXdhaXQgdGhpcy5mYWtlX2NlbnRyYWxfcHRyXy5yZW1vdmVGYWtlRGVzY3JpcHRvciguLi50
aGlzLmlkc18pOwotCi0gICAgaWYgKCFzdWNjZXNzKSB0aHJvdyAncmVtb3ZlIGZhaWxlZCc7Ci0g
IH0KLX0KLQotLy8gRmFrZUNob29zZXIgYWxsb3dzIGNsaWVudHMgdG8gc2ltdWxhdGUgdXNlciBh
Y3Rpb25zIG9uIGEgQmx1ZXRvb3RoIGNob29zZXIsCi0vLyBhbmQgcmVjb3JkcyB0aGUgZXZlbnRz
IHByb2R1Y2VkIGJ5IHRoZSBCbHVldG9vdGggY2hvb3Nlci4KLWNsYXNzIEZha2VDaG9vc2VyIHsK
LSAgY29uc3RydWN0b3IoKSB7Ci0gICAgbGV0IGZha2VCbHVldG9vdGhDaG9vc2VyRmFjdG9yeVB0
ciA9Ci0gICAgICAgIG5ldyBjb250ZW50Lm1vam9tLkZha2VCbHVldG9vdGhDaG9vc2VyRmFjdG9y
eVB0cigpOwotICAgIE1vam8uYmluZEludGVyZmFjZShjb250ZW50Lm1vam9tLkZha2VCbHVldG9v
dGhDaG9vc2VyRmFjdG9yeS5uYW1lLAotICAgICAgICBtb2pvLm1ha2VSZXF1ZXN0KGZha2VCbHVl
dG9vdGhDaG9vc2VyRmFjdG9yeVB0cikuaGFuZGxlLCAncHJvY2VzcycpOwotCi0gICAgdGhpcy5m
YWtlX2JsdWV0b290aF9jaG9vc2VyX3B0cl8gPQotICAgICAgICBuZXcgY29udGVudC5tb2pvbS5G
YWtlQmx1ZXRvb3RoQ2hvb3NlclB0cigpOwotCi0gICAgbGV0IGNsaWVudFB0ckluZm8gPSBuZXcg
bW9qby5Bc3NvY2lhdGVkSW50ZXJmYWNlUHRySW5mbygpOwotICAgIHRoaXMuZmFrZV9ibHVldG9v
dGhfY2hvb3Nlcl9jbGllbnRfYmluZGluZ18gPQotICAgICAgICBuZXcgbW9qby5Bc3NvY2lhdGVk
QmluZGluZyhjb250ZW50Lm1vam9tLkZha2VCbHVldG9vdGhDaG9vc2VyQ2xpZW50LAotICAgICAg
ICAgICAgdGhpcywgbW9qby5tYWtlUmVxdWVzdChjbGllbnRQdHJJbmZvKSk7Ci0KLSAgICBmYWtl
Qmx1ZXRvb3RoQ2hvb3NlckZhY3RvcnlQdHIuY3JlYXRlRmFrZUJsdWV0b290aENob29zZXIoCi0g
ICAgICAgIG1vam8ubWFrZVJlcXVlc3QodGhpcy5mYWtlX2JsdWV0b290aF9jaG9vc2VyX3B0cl8p
LCBjbGllbnRQdHJJbmZvKTsKLQotICAgIHRoaXMuZXZlbnRzXyA9IG5ldyBBcnJheSgpOwotICAg
IHRoaXMuZXZlbnRfbGlzdGVuZXJfID0gbnVsbDsKLSAgfQotCi0gIC8vIElmIHRoZSBjaG9vc2Vy
IGhhcyByZWNlaXZlZCBtb3JlIGV2ZW50cyB0aGFuIHxudW1PZkV2ZW50c3wgdGhpcyBmdW5jdGlv
bgotICAvLyB3aWxsIHJlamVjdCB0aGUgcHJvbWlzZSwgZWxzZSBpdCB3aWxsIHdhaXQgdW50aWwg
fG51bU9mRXZlbnRzfCBldmVudHMgYXJlCi0gIC8vIHJlY2VpdmVkIGJlZm9yZSByZXNvbHZpbmcg
d2l0aCBhbiBhcnJheSBvZiB8RmFrZUJsdWV0b290aENob29zZXJFdmVudHwKLSAgLy8gb2JqZWN0
cy4KLSAgYXN5bmMgd2FpdEZvckV2ZW50cyhudW1PZkV2ZW50cykgewotICAgIHJldHVybiBuZXcg
UHJvbWlzZShyZXNvbHZlID0+IHsKLSAgICAgIGlmICh0aGlzLmV2ZW50c18ubGVuZ3RoID4gbnVt
T2ZFdmVudHMpIHsKLSAgICAgICAgdGhyb3cgYEFza2VkIGZvciAke251bU9mRXZlbnRzfSBldmVu
dChzKSwgYnV0IHJlY2VpdmVkIGAgKwotICAgICAgICAgICAgYCR7dGhpcy5ldmVudHNfLmxlbmd0
aH0uYDsKLSAgICAgIH0KLQotICAgICAgdGhpcy5ldmVudF9saXN0ZW5lcl8gPSAoKSA9PiB7Ci0g
ICAgICAgICBpZiAodGhpcy5ldmVudHNfLmxlbmd0aCA9PT0gbnVtT2ZFdmVudHMpIHsKLSAgICAg
ICAgICBsZXQgcmVzdWx0ID0gQXJyYXkuZnJvbSh0aGlzLmV2ZW50c18pOwotICAgICAgICAgIHRo
aXMuZXZlbnRfbGlzdGVuZXJfID0gbnVsbDsKLSAgICAgICAgICB0aGlzLmV2ZW50c18gPSBbXTsK
LSAgICAgICAgICByZXNvbHZlKHJlc3VsdCk7Ci0gICAgICAgIH0KLSAgICAgIH07Ci0gICAgICB0
aGlzLmV2ZW50X2xpc3RlbmVyXygpOwotICAgIH0pOwotICB9Ci0KLSAgYXN5bmMgc2VsZWN0UGVy
aXBoZXJhbChwZXJpcGhlcmFsKSB7Ci0gICAgaWYgKCEocGVyaXBoZXJhbCBpbnN0YW5jZW9mIEZh
a2VQZXJpcGhlcmFsKSkgewotICAgICAgdGhyb3cgJ3xwZXJpcGhlcmFsfCBtdXN0IGJlIGFuIGlu
c3RhbmNlIG9mIEZha2VQZXJpcGhlcmFsJzsKLSAgICB9Ci0gICAgYXdhaXQgdGhpcy5mYWtlX2Js
dWV0b290aF9jaG9vc2VyX3B0cl8uc2VsZWN0UGVyaXBoZXJhbChwZXJpcGhlcmFsLmFkZHJlc3Mp
OwotICB9Ci0KLSAgYXN5bmMgY2FuY2VsKCkgewotICAgIGF3YWl0IHRoaXMuZmFrZV9ibHVldG9v
dGhfY2hvb3Nlcl9wdHJfLmNhbmNlbCgpOwotICB9Ci0KLSAgYXN5bmMgcmVzY2FuKCkgewotICAg
IGF3YWl0IHRoaXMuZmFrZV9ibHVldG9vdGhfY2hvb3Nlcl9wdHJfLnJlc2NhbigpOwotICB9Ci0K
LSAgb25FdmVudChjaG9vc2VyRXZlbnQpIHsKLSAgICBjaG9vc2VyRXZlbnQudHlwZSA9IE1PSk9f
Q0hPT1NFUl9FVkVOVF9UWVBFX01BUFtjaG9vc2VyRXZlbnQudHlwZV07Ci0gICAgdGhpcy5ldmVu
dHNfLnB1c2goY2hvb3NlckV2ZW50KTsKLSAgICBpZiAodGhpcy5ldmVudF9saXN0ZW5lcl8gIT09
IG51bGwpIHsKLSAgICAgIHRoaXMuZXZlbnRfbGlzdGVuZXJfKCk7Ci0gICAgfQotICB9Ci19Ci0K
LS8vIElmIHRoaXMgbGluZSBmYWlscywgaXQgbWVhbnMgdGhhdCBjdXJyZW50IGVudmlyb25tZW50
IGRvZXMgbm90IHN1cHBvcnQgdGhlCi0vLyBXZWIgQmx1ZXRvb3RoIFRlc3QgQVBJLgotdHJ5IHsK
LSAgbmF2aWdhdG9yLmJsdWV0b290aC50ZXN0ID0gbmV3IEZha2VCbHVldG9vdGgoKTsKLX0gY2F0
Y2ggewotICAgIHRocm93ICdXZWIgQmx1ZXRvb3RoIFRlc3QgQVBJIGlzIG5vdCBpbXBsZW1lbnRl
ZCBvbiB0aGlzICcgKwotICAgICAgICAnZW52aXJvbm1lbnQuIFNlZSB0aGUgYmx1ZXRvb3RoIFJF
QURNRSBhdCAnICsKLSAgICAgICAgJ2h0dHBzOi8vZ2l0aHViLmNvbS93ZWItcGxhdGZvcm0tdGVz
dHMvd3B0L2Jsb2IvbWFzdGVyL2JsdWV0b290aC9SRUFETUUubWQjd2ViLWJsdWV0b290aC10ZXN0
aW5nJzsKLX0KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZv
cm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL3dlYi1ibHVldG9vdGgtdGVzdC5qcy5oZWFkZXJz
IGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMv
Y2hyb21pdW0vd2ViLWJsdWV0b290aC10ZXN0LmpzLmhlYWRlcnMKZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDY4MDVjMzIzZGY1YTk3NTIzMTY0OGI4MzBlMzNjZTE4M2MzY2JiZDMuLjAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvTGF5b3V0VGVzdHMv
aW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vd2ViLWJs
dWV0b290aC10ZXN0LmpzLmhlYWRlcnMKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi1Db250
ZW50LVR5cGU6IHRleHQvamF2YXNjcmlwdDsgY2hhcnNldD11dGYtOApkaWZmIC0tZ2l0IGEvTGF5
b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21p
dW0vd2ViX3VzYl9zZXJ2aWNlLm1vam9tLmpzIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dl
Yi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vd2ViX3VzYl9zZXJ2aWNlLm1vam9t
LmpzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNGEwMTdiMWRlMTc4YzBjNTFhZGRi
ODc4ZDI1N2I4YjFhNzQwMzM0Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwCi0tLSBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVz
b3VyY2VzL2Nocm9taXVtL3dlYl91c2Jfc2VydmljZS5tb2pvbS5qcworKysgL2Rldi9udWxsCkBA
IC0xLDYxNCArMCwwIEBACi0vLyBDb3B5cmlnaHQgMjAxNCBUaGUgQ2hyb21pdW0gQXV0aG9ycy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVy
bmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBM
SUNFTlNFIGZpbGUuCi0KLSd1c2Ugc3RyaWN0JzsKLQotKGZ1bmN0aW9uKCkgewotICB2YXIgbW9q
b21JZCA9ICd0aGlyZF9wYXJ0eS9ibGluay9wdWJsaWMvbW9qb20vdXNiL3dlYl91c2Jfc2Vydmlj
ZS5tb2pvbSc7Ci0gIGlmIChtb2pvLmludGVybmFsLmlzTW9qb21Mb2FkZWQobW9qb21JZCkpIHsK
LSAgICBjb25zb2xlLndhcm4oJ1RoZSBmb2xsb3dpbmcgbW9qb20gaXMgbG9hZGVkIG11bHRpcGxl
IHRpbWVzOiAnICsgbW9qb21JZCk7Ci0gICAgcmV0dXJuOwotICB9Ci0gIG1vam8uaW50ZXJuYWwu
bWFya01vam9tTG9hZGVkKG1vam9tSWQpOwotICB2YXIgYmluZGluZ3MgPSBtb2pvOwotICB2YXIg
YXNzb2NpYXRlZEJpbmRpbmdzID0gbW9qbzsKLSAgdmFyIGNvZGVjID0gbW9qby5pbnRlcm5hbDsK
LSAgdmFyIHZhbGlkYXRvciA9IG1vam8uaW50ZXJuYWw7Ci0KLSAgdmFyIGV4cG9ydHMgPSBtb2pv
LmludGVybmFsLmV4cG9zZU5hbWVzcGFjZSgnYmxpbmsubW9qb20nKTsKLSAgdmFyIGRldmljZSQg
PQotICAgICAgbW9qby5pbnRlcm5hbC5leHBvc2VOYW1lc3BhY2UoJ2RldmljZS5tb2pvbScpOwot
ICBpZiAobW9qby5jb25maWcuYXV0b0xvYWRNb2pvbURlcHMpIHsKLSAgICBtb2pvLmludGVybmFs
LmxvYWRNb2pvbUlmTmVjZXNzYXJ5KAotICAgICAgICAnZGV2aWNlL3VzYi9wdWJsaWMvbW9qb20v
ZGV2aWNlLm1vam9tJywgJy4uLy4uLy4uLy4uLy4uL2RldmljZS91c2IvcHVibGljL21vam9tL2Rl
dmljZS5tb2pvbS5qcycpOwotICB9Ci0gIHZhciBkZXZpY2VfZW51bWVyYXRpb25fb3B0aW9ucyQg
PQotICAgICAgbW9qby5pbnRlcm5hbC5leHBvc2VOYW1lc3BhY2UoJ2RldmljZS5tb2pvbScpOwot
ICBpZiAobW9qby5jb25maWcuYXV0b0xvYWRNb2pvbURlcHMpIHsKLSAgICBtb2pvLmludGVybmFs
LmxvYWRNb2pvbUlmTmVjZXNzYXJ5KAotICAgICAgICAnZGV2aWNlL3VzYi9wdWJsaWMvbW9qb20v
ZGV2aWNlX2VudW1lcmF0aW9uX29wdGlvbnMubW9qb20nLCAnLi4vLi4vLi4vLi4vLi4vZGV2aWNl
L3VzYi9wdWJsaWMvbW9qb20vZGV2aWNlX2VudW1lcmF0aW9uX29wdGlvbnMubW9qb20uanMnKTsK
LSAgfQotICB2YXIgZGV2aWNlX21hbmFnZXJfY2xpZW50JCA9Ci0gICAgICBtb2pvLmludGVybmFs
LmV4cG9zZU5hbWVzcGFjZSgnZGV2aWNlLm1vam9tJyk7Ci0gIGlmIChtb2pvLmNvbmZpZy5hdXRv
TG9hZE1vam9tRGVwcykgewotICAgIG1vam8uaW50ZXJuYWwubG9hZE1vam9tSWZOZWNlc3Nhcnko
Ci0gICAgICAgICdkZXZpY2UvdXNiL3B1YmxpYy9tb2pvbS9kZXZpY2VfbWFuYWdlcl9jbGllbnQu
bW9qb20nLCAnLi4vLi4vLi4vLi4vLi4vZGV2aWNlL3VzYi9wdWJsaWMvbW9qb20vZGV2aWNlX21h
bmFnZXJfY2xpZW50Lm1vam9tLmpzJyk7Ci0gIH0KLQotCi0KLSAgZnVuY3Rpb24gV2ViVXNiU2Vy
dmljZV9HZXREZXZpY2VzX1BhcmFtcyh2YWx1ZXMpIHsKLSAgICB0aGlzLmluaXREZWZhdWx0c18o
KTsKLSAgICB0aGlzLmluaXRGaWVsZHNfKHZhbHVlcyk7Ci0gIH0KLQotCi0gIFdlYlVzYlNlcnZp
Y2VfR2V0RGV2aWNlc19QYXJhbXMucHJvdG90eXBlLmluaXREZWZhdWx0c18gPSBmdW5jdGlvbigp
IHsKLSAgfTsKLSAgV2ViVXNiU2VydmljZV9HZXREZXZpY2VzX1BhcmFtcy5wcm90b3R5cGUuaW5p
dEZpZWxkc18gPSBmdW5jdGlvbihmaWVsZHMpIHsKLSAgICBmb3IodmFyIGZpZWxkIGluIGZpZWxk
cykgewotICAgICAgICBpZiAodGhpcy5oYXNPd25Qcm9wZXJ0eShmaWVsZCkpCi0gICAgICAgICAg
dGhpc1tmaWVsZF0gPSBmaWVsZHNbZmllbGRdOwotICAgIH0KLSAgfTsKLQotICBXZWJVc2JTZXJ2
aWNlX0dldERldmljZXNfUGFyYW1zLnZhbGlkYXRlID0gZnVuY3Rpb24obWVzc2FnZVZhbGlkYXRv
ciwgb2Zmc2V0KSB7Ci0gICAgdmFyIGVycjsKLSAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZh
bGlkYXRlU3RydWN0SGVhZGVyKG9mZnNldCwgY29kZWMua1N0cnVjdEhlYWRlclNpemUpOwotICAg
IGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKLSAgICAgICAgcmV0
dXJuIGVycjsKLQotICAgIHZhciBrVmVyc2lvblNpemVzID0gWwotICAgICAge3ZlcnNpb246IDAs
IG51bUJ5dGVzOiA4fQotICAgIF07Ci0gICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0
ZVN0cnVjdFZlcnNpb24ob2Zmc2V0LCBrVmVyc2lvblNpemVzKTsKLSAgICBpZiAoZXJyICE9PSB2
YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCi0gICAgICAgIHJldHVybiBlcnI7Ci0KLSAg
ICByZXR1cm4gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FOwotICB9OwotCi0gIFdlYlVz
YlNlcnZpY2VfR2V0RGV2aWNlc19QYXJhbXMuZW5jb2RlZFNpemUgPSBjb2RlYy5rU3RydWN0SGVh
ZGVyU2l6ZSArIDA7Ci0KLSAgV2ViVXNiU2VydmljZV9HZXREZXZpY2VzX1BhcmFtcy5kZWNvZGUg
PSBmdW5jdGlvbihkZWNvZGVyKSB7Ci0gICAgdmFyIHBhY2tlZDsKLSAgICB2YXIgdmFsID0gbmV3
IFdlYlVzYlNlcnZpY2VfR2V0RGV2aWNlc19QYXJhbXMoKTsKLSAgICB2YXIgbnVtYmVyT2ZCeXRl
cyA9IGRlY29kZXIucmVhZFVpbnQzMigpOwotICAgIHZhciB2ZXJzaW9uID0gZGVjb2Rlci5yZWFk
VWludDMyKCk7Ci0gICAgcmV0dXJuIHZhbDsKLSAgfTsKLQotICBXZWJVc2JTZXJ2aWNlX0dldERl
dmljZXNfUGFyYW1zLmVuY29kZSA9IGZ1bmN0aW9uKGVuY29kZXIsIHZhbCkgewotICAgIHZhciBw
YWNrZWQ7Ci0gICAgZW5jb2Rlci53cml0ZVVpbnQzMihXZWJVc2JTZXJ2aWNlX0dldERldmljZXNf
UGFyYW1zLmVuY29kZWRTaXplKTsKLSAgICBlbmNvZGVyLndyaXRlVWludDMyKDApOwotICB9Owot
ICBmdW5jdGlvbiBXZWJVc2JTZXJ2aWNlX0dldERldmljZXNfUmVzcG9uc2VQYXJhbXModmFsdWVz
KSB7Ci0gICAgdGhpcy5pbml0RGVmYXVsdHNfKCk7Ci0gICAgdGhpcy5pbml0RmllbGRzXyh2YWx1
ZXMpOwotICB9Ci0KLQotICBXZWJVc2JTZXJ2aWNlX0dldERldmljZXNfUmVzcG9uc2VQYXJhbXMu
cHJvdG90eXBlLmluaXREZWZhdWx0c18gPSBmdW5jdGlvbigpIHsKLSAgICB0aGlzLnJlc3VsdHMg
PSBudWxsOwotICB9OwotICBXZWJVc2JTZXJ2aWNlX0dldERldmljZXNfUmVzcG9uc2VQYXJhbXMu
cHJvdG90eXBlLmluaXRGaWVsZHNfID0gZnVuY3Rpb24oZmllbGRzKSB7Ci0gICAgZm9yKHZhciBm
aWVsZCBpbiBmaWVsZHMpIHsKLSAgICAgICAgaWYgKHRoaXMuaGFzT3duUHJvcGVydHkoZmllbGQp
KQotICAgICAgICAgIHRoaXNbZmllbGRdID0gZmllbGRzW2ZpZWxkXTsKLSAgICB9Ci0gIH07Ci0K
LSAgV2ViVXNiU2VydmljZV9HZXREZXZpY2VzX1Jlc3BvbnNlUGFyYW1zLnZhbGlkYXRlID0gZnVu
Y3Rpb24obWVzc2FnZVZhbGlkYXRvciwgb2Zmc2V0KSB7Ci0gICAgdmFyIGVycjsKLSAgICBlcnIg
PSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0SGVhZGVyKG9mZnNldCwgY29kZWMua1N0
cnVjdEhlYWRlclNpemUpOwotICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJy
b3IuTk9ORSkKLSAgICAgICAgcmV0dXJuIGVycjsKLQotICAgIHZhciBrVmVyc2lvblNpemVzID0g
WwotICAgICAge3ZlcnNpb246IDAsIG51bUJ5dGVzOiAxNn0KLSAgICBdOwotICAgIGVyciA9IG1l
c3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RWZXJzaW9uKG9mZnNldCwga1ZlcnNpb25TaXpl
cyk7Ci0gICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQotICAg
ICAgICByZXR1cm4gZXJyOwotCi0KLSAgICAvLyB2YWxpZGF0ZSBXZWJVc2JTZXJ2aWNlX0dldERl
dmljZXNfUmVzcG9uc2VQYXJhbXMucmVzdWx0cwotICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3Iu
dmFsaWRhdGVBcnJheVBvaW50ZXIob2Zmc2V0ICsgY29kZWMua1N0cnVjdEhlYWRlclNpemUgKyAw
LCA4LCBuZXcgY29kZWMuUG9pbnRlclRvKGRldmljZSQuVXNiRGV2aWNlSW5mbyksIGZhbHNlLCBb
MF0sIDApOwotICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkK
LSAgICAgICAgcmV0dXJuIGVycjsKLQotICAgIHJldHVybiB2YWxpZGF0b3IudmFsaWRhdGlvbkVy
cm9yLk5PTkU7Ci0gIH07Ci0KLSAgV2ViVXNiU2VydmljZV9HZXREZXZpY2VzX1Jlc3BvbnNlUGFy
YW1zLmVuY29kZWRTaXplID0gY29kZWMua1N0cnVjdEhlYWRlclNpemUgKyA4OwotCi0gIFdlYlVz
YlNlcnZpY2VfR2V0RGV2aWNlc19SZXNwb25zZVBhcmFtcy5kZWNvZGUgPSBmdW5jdGlvbihkZWNv
ZGVyKSB7Ci0gICAgdmFyIHBhY2tlZDsKLSAgICB2YXIgdmFsID0gbmV3IFdlYlVzYlNlcnZpY2Vf
R2V0RGV2aWNlc19SZXNwb25zZVBhcmFtcygpOwotICAgIHZhciBudW1iZXJPZkJ5dGVzID0gZGVj
b2Rlci5yZWFkVWludDMyKCk7Ci0gICAgdmFyIHZlcnNpb24gPSBkZWNvZGVyLnJlYWRVaW50MzIo
KTsKLSAgICB2YWwucmVzdWx0cyA9IGRlY29kZXIuZGVjb2RlQXJyYXlQb2ludGVyKG5ldyBjb2Rl
Yy5Qb2ludGVyVG8oZGV2aWNlJC5Vc2JEZXZpY2VJbmZvKSk7Ci0gICAgcmV0dXJuIHZhbDsKLSAg
fTsKLQotICBXZWJVc2JTZXJ2aWNlX0dldERldmljZXNfUmVzcG9uc2VQYXJhbXMuZW5jb2RlID0g
ZnVuY3Rpb24oZW5jb2RlciwgdmFsKSB7Ci0gICAgdmFyIHBhY2tlZDsKLSAgICBlbmNvZGVyLndy
aXRlVWludDMyKFdlYlVzYlNlcnZpY2VfR2V0RGV2aWNlc19SZXNwb25zZVBhcmFtcy5lbmNvZGVk
U2l6ZSk7Ci0gICAgZW5jb2Rlci53cml0ZVVpbnQzMigwKTsKLSAgICBlbmNvZGVyLmVuY29kZUFy
cmF5UG9pbnRlcihuZXcgY29kZWMuUG9pbnRlclRvKGRldmljZSQuVXNiRGV2aWNlSW5mbyksIHZh
bC5yZXN1bHRzKTsKLSAgfTsKLSAgZnVuY3Rpb24gV2ViVXNiU2VydmljZV9HZXREZXZpY2VfUGFy
YW1zKHZhbHVlcykgewotICAgIHRoaXMuaW5pdERlZmF1bHRzXygpOwotICAgIHRoaXMuaW5pdEZp
ZWxkc18odmFsdWVzKTsKLSAgfQotCi0KLSAgV2ViVXNiU2VydmljZV9HZXREZXZpY2VfUGFyYW1z
LnByb3RvdHlwZS5pbml0RGVmYXVsdHNfID0gZnVuY3Rpb24oKSB7Ci0gICAgdGhpcy5ndWlkID0g
bnVsbDsKLSAgICB0aGlzLmRldmljZVJlcXVlc3RkID0gbmV3IGJpbmRpbmdzLkludGVyZmFjZVJl
cXVlc3QoKTsKLSAgfTsKLSAgV2ViVXNiU2VydmljZV9HZXREZXZpY2VfUGFyYW1zLnByb3RvdHlw
ZS5pbml0RmllbGRzXyA9IGZ1bmN0aW9uKGZpZWxkcykgewotICAgIGZvcih2YXIgZmllbGQgaW4g
ZmllbGRzKSB7Ci0gICAgICAgIGlmICh0aGlzLmhhc093blByb3BlcnR5KGZpZWxkKSkKLSAgICAg
ICAgICB0aGlzW2ZpZWxkXSA9IGZpZWxkc1tmaWVsZF07Ci0gICAgfQotICB9OwotCi0gIFdlYlVz
YlNlcnZpY2VfR2V0RGV2aWNlX1BhcmFtcy52YWxpZGF0ZSA9IGZ1bmN0aW9uKG1lc3NhZ2VWYWxp
ZGF0b3IsIG9mZnNldCkgewotICAgIHZhciBlcnI7Ci0gICAgZXJyID0gbWVzc2FnZVZhbGlkYXRv
ci52YWxpZGF0ZVN0cnVjdEhlYWRlcihvZmZzZXQsIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplKTsK
LSAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCi0gICAgICAg
IHJldHVybiBlcnI7Ci0KLSAgICB2YXIga1ZlcnNpb25TaXplcyA9IFsKLSAgICAgIHt2ZXJzaW9u
OiAwLCBudW1CeXRlczogMjR9Ci0gICAgXTsKLSAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZh
bGlkYXRlU3RydWN0VmVyc2lvbihvZmZzZXQsIGtWZXJzaW9uU2l6ZXMpOwotICAgIGlmIChlcnIg
IT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKLSAgICAgICAgcmV0dXJuIGVycjsK
LQotCi0gICAgLy8gdmFsaWRhdGUgV2ViVXNiU2VydmljZV9HZXREZXZpY2VfUGFyYW1zLmd1aWQK
LSAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RyaW5nUG9pbnRlcihvZmZzZXQg
KyBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDAsIGZhbHNlKQotICAgIGlmIChlcnIgIT09IHZh
bGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKLSAgICAgICAgcmV0dXJuIGVycjsKLQotCi0g
ICAgLy8gdmFsaWRhdGUgV2ViVXNiU2VydmljZV9HZXREZXZpY2VfUGFyYW1zLmRldmljZVJlcXVl
c3RkCi0gICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZUludGVyZmFjZVJlcXVlc3Qo
b2Zmc2V0ICsgY29kZWMua1N0cnVjdEhlYWRlclNpemUgKyA4LCBmYWxzZSkKLSAgICBpZiAoZXJy
ICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCi0gICAgICAgIHJldHVybiBlcnI7
Ci0KLSAgICByZXR1cm4gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FOwotICB9OwotCi0g
IFdlYlVzYlNlcnZpY2VfR2V0RGV2aWNlX1BhcmFtcy5lbmNvZGVkU2l6ZSA9IGNvZGVjLmtTdHJ1
Y3RIZWFkZXJTaXplICsgMTY7Ci0KLSAgV2ViVXNiU2VydmljZV9HZXREZXZpY2VfUGFyYW1zLmRl
Y29kZSA9IGZ1bmN0aW9uKGRlY29kZXIpIHsKLSAgICB2YXIgcGFja2VkOwotICAgIHZhciB2YWwg
PSBuZXcgV2ViVXNiU2VydmljZV9HZXREZXZpY2VfUGFyYW1zKCk7Ci0gICAgdmFyIG51bWJlck9m
Qnl0ZXMgPSBkZWNvZGVyLnJlYWRVaW50MzIoKTsKLSAgICB2YXIgdmVyc2lvbiA9IGRlY29kZXIu
cmVhZFVpbnQzMigpOwotICAgIHZhbC5ndWlkID0gZGVjb2Rlci5kZWNvZGVTdHJ1Y3QoY29kZWMu
U3RyaW5nKTsKLSAgICB2YWwuZGV2aWNlUmVxdWVzdGQgPSBkZWNvZGVyLmRlY29kZVN0cnVjdChj
b2RlYy5JbnRlcmZhY2VSZXF1ZXN0KTsKLSAgICBkZWNvZGVyLnNraXAoMSk7Ci0gICAgZGVjb2Rl
ci5za2lwKDEpOwotICAgIGRlY29kZXIuc2tpcCgxKTsKLSAgICBkZWNvZGVyLnNraXAoMSk7Ci0g
ICAgcmV0dXJuIHZhbDsKLSAgfTsKLQotICBXZWJVc2JTZXJ2aWNlX0dldERldmljZV9QYXJhbXMu
ZW5jb2RlID0gZnVuY3Rpb24oZW5jb2RlciwgdmFsKSB7Ci0gICAgdmFyIHBhY2tlZDsKLSAgICBl
bmNvZGVyLndyaXRlVWludDMyKFdlYlVzYlNlcnZpY2VfR2V0RGV2aWNlX1BhcmFtcy5lbmNvZGVk
U2l6ZSk7Ci0gICAgZW5jb2Rlci53cml0ZVVpbnQzMigwKTsKLSAgICBlbmNvZGVyLmVuY29kZVN0
cnVjdChjb2RlYy5TdHJpbmcsIHZhbC5ndWlkKTsKLSAgICBlbmNvZGVyLmVuY29kZVN0cnVjdChj
b2RlYy5JbnRlcmZhY2VSZXF1ZXN0LCB2YWwuZGV2aWNlUmVxdWVzdGQpOwotICAgIGVuY29kZXIu
c2tpcCgxKTsKLSAgICBlbmNvZGVyLnNraXAoMSk7Ci0gICAgZW5jb2Rlci5za2lwKDEpOwotICAg
IGVuY29kZXIuc2tpcCgxKTsKLSAgfTsKLSAgZnVuY3Rpb24gV2ViVXNiU2VydmljZV9HZXRQZXJt
aXNzaW9uX1BhcmFtcyh2YWx1ZXMpIHsKLSAgICB0aGlzLmluaXREZWZhdWx0c18oKTsKLSAgICB0
aGlzLmluaXRGaWVsZHNfKHZhbHVlcyk7Ci0gIH0KLQotCi0gIFdlYlVzYlNlcnZpY2VfR2V0UGVy
bWlzc2lvbl9QYXJhbXMucHJvdG90eXBlLmluaXREZWZhdWx0c18gPSBmdW5jdGlvbigpIHsKLSAg
ICB0aGlzLmRldmljZUZpbHRlcnMgPSBudWxsOwotICB9OwotICBXZWJVc2JTZXJ2aWNlX0dldFBl
cm1pc3Npb25fUGFyYW1zLnByb3RvdHlwZS5pbml0RmllbGRzXyA9IGZ1bmN0aW9uKGZpZWxkcykg
ewotICAgIGZvcih2YXIgZmllbGQgaW4gZmllbGRzKSB7Ci0gICAgICAgIGlmICh0aGlzLmhhc093
blByb3BlcnR5KGZpZWxkKSkKLSAgICAgICAgICB0aGlzW2ZpZWxkXSA9IGZpZWxkc1tmaWVsZF07
Ci0gICAgfQotICB9OwotCi0gIFdlYlVzYlNlcnZpY2VfR2V0UGVybWlzc2lvbl9QYXJhbXMudmFs
aWRhdGUgPSBmdW5jdGlvbihtZXNzYWdlVmFsaWRhdG9yLCBvZmZzZXQpIHsKLSAgICB2YXIgZXJy
OwotICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RIZWFkZXIob2Zmc2V0
LCBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSk7Ci0gICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZh
bGlkYXRpb25FcnJvci5OT05FKQotICAgICAgICByZXR1cm4gZXJyOwotCi0gICAgdmFyIGtWZXJz
aW9uU2l6ZXMgPSBbCi0gICAgICB7dmVyc2lvbjogMCwgbnVtQnl0ZXM6IDE2fQotICAgIF07Ci0g
ICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdFZlcnNpb24ob2Zmc2V0LCBr
VmVyc2lvblNpemVzKTsKLSAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9y
Lk5PTkUpCi0gICAgICAgIHJldHVybiBlcnI7Ci0KLQotICAgIC8vIHZhbGlkYXRlIFdlYlVzYlNl
cnZpY2VfR2V0UGVybWlzc2lvbl9QYXJhbXMuZGV2aWNlRmlsdGVycwotICAgIGVyciA9IG1lc3Nh
Z2VWYWxpZGF0b3IudmFsaWRhdGVBcnJheVBvaW50ZXIob2Zmc2V0ICsgY29kZWMua1N0cnVjdEhl
YWRlclNpemUgKyAwLCA4LCBuZXcgY29kZWMuUG9pbnRlclRvKGRldmljZV9lbnVtZXJhdGlvbl9v
cHRpb25zJC5Vc2JEZXZpY2VGaWx0ZXIpLCBmYWxzZSwgWzBdLCAwKTsKLSAgICBpZiAoZXJyICE9
PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCi0gICAgICAgIHJldHVybiBlcnI7Ci0K
LSAgICByZXR1cm4gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FOwotICB9OwotCi0gIFdl
YlVzYlNlcnZpY2VfR2V0UGVybWlzc2lvbl9QYXJhbXMuZW5jb2RlZFNpemUgPSBjb2RlYy5rU3Ry
dWN0SGVhZGVyU2l6ZSArIDg7Ci0KLSAgV2ViVXNiU2VydmljZV9HZXRQZXJtaXNzaW9uX1BhcmFt
cy5kZWNvZGUgPSBmdW5jdGlvbihkZWNvZGVyKSB7Ci0gICAgdmFyIHBhY2tlZDsKLSAgICB2YXIg
dmFsID0gbmV3IFdlYlVzYlNlcnZpY2VfR2V0UGVybWlzc2lvbl9QYXJhbXMoKTsKLSAgICB2YXIg
bnVtYmVyT2ZCeXRlcyA9IGRlY29kZXIucmVhZFVpbnQzMigpOwotICAgIHZhciB2ZXJzaW9uID0g
ZGVjb2Rlci5yZWFkVWludDMyKCk7Ci0gICAgdmFsLmRldmljZUZpbHRlcnMgPSBkZWNvZGVyLmRl
Y29kZUFycmF5UG9pbnRlcihuZXcgY29kZWMuUG9pbnRlclRvKGRldmljZV9lbnVtZXJhdGlvbl9v
cHRpb25zJC5Vc2JEZXZpY2VGaWx0ZXIpKTsKLSAgICByZXR1cm4gdmFsOwotICB9OwotCi0gIFdl
YlVzYlNlcnZpY2VfR2V0UGVybWlzc2lvbl9QYXJhbXMuZW5jb2RlID0gZnVuY3Rpb24oZW5jb2Rl
ciwgdmFsKSB7Ci0gICAgdmFyIHBhY2tlZDsKLSAgICBlbmNvZGVyLndyaXRlVWludDMyKFdlYlVz
YlNlcnZpY2VfR2V0UGVybWlzc2lvbl9QYXJhbXMuZW5jb2RlZFNpemUpOwotICAgIGVuY29kZXIu
d3JpdGVVaW50MzIoMCk7Ci0gICAgZW5jb2Rlci5lbmNvZGVBcnJheVBvaW50ZXIobmV3IGNvZGVj
LlBvaW50ZXJUbyhkZXZpY2VfZW51bWVyYXRpb25fb3B0aW9ucyQuVXNiRGV2aWNlRmlsdGVyKSwg
dmFsLmRldmljZUZpbHRlcnMpOwotICB9OwotICBmdW5jdGlvbiBXZWJVc2JTZXJ2aWNlX0dldFBl
cm1pc3Npb25fUmVzcG9uc2VQYXJhbXModmFsdWVzKSB7Ci0gICAgdGhpcy5pbml0RGVmYXVsdHNf
KCk7Ci0gICAgdGhpcy5pbml0RmllbGRzXyh2YWx1ZXMpOwotICB9Ci0KLQotICBXZWJVc2JTZXJ2
aWNlX0dldFBlcm1pc3Npb25fUmVzcG9uc2VQYXJhbXMucHJvdG90eXBlLmluaXREZWZhdWx0c18g
PSBmdW5jdGlvbigpIHsKLSAgICB0aGlzLnJlc3VsdCA9IG51bGw7Ci0gIH07Ci0gIFdlYlVzYlNl
cnZpY2VfR2V0UGVybWlzc2lvbl9SZXNwb25zZVBhcmFtcy5wcm90b3R5cGUuaW5pdEZpZWxkc18g
PSBmdW5jdGlvbihmaWVsZHMpIHsKLSAgICBmb3IodmFyIGZpZWxkIGluIGZpZWxkcykgewotICAg
ICAgICBpZiAodGhpcy5oYXNPd25Qcm9wZXJ0eShmaWVsZCkpCi0gICAgICAgICAgdGhpc1tmaWVs
ZF0gPSBmaWVsZHNbZmllbGRdOwotICAgIH0KLSAgfTsKLQotICBXZWJVc2JTZXJ2aWNlX0dldFBl
cm1pc3Npb25fUmVzcG9uc2VQYXJhbXMudmFsaWRhdGUgPSBmdW5jdGlvbihtZXNzYWdlVmFsaWRh
dG9yLCBvZmZzZXQpIHsKLSAgICB2YXIgZXJyOwotICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3Iu
dmFsaWRhdGVTdHJ1Y3RIZWFkZXIob2Zmc2V0LCBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSk7Ci0g
ICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQotICAgICAgICBy
ZXR1cm4gZXJyOwotCi0gICAgdmFyIGtWZXJzaW9uU2l6ZXMgPSBbCi0gICAgICB7dmVyc2lvbjog
MCwgbnVtQnl0ZXM6IDE2fQotICAgIF07Ci0gICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxp
ZGF0ZVN0cnVjdFZlcnNpb24ob2Zmc2V0LCBrVmVyc2lvblNpemVzKTsKLSAgICBpZiAoZXJyICE9
PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCi0gICAgICAgIHJldHVybiBlcnI7Ci0K
LQotICAgIC8vIHZhbGlkYXRlIFdlYlVzYlNlcnZpY2VfR2V0UGVybWlzc2lvbl9SZXNwb25zZVBh
cmFtcy5yZXN1bHQKLSAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0UG9p
bnRlcihvZmZzZXQgKyBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDAsIGRldmljZSQuVXNiRGV2
aWNlSW5mbywgdHJ1ZSk7Ci0gICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJv
ci5OT05FKQotICAgICAgICByZXR1cm4gZXJyOwotCi0gICAgcmV0dXJuIHZhbGlkYXRvci52YWxp
ZGF0aW9uRXJyb3IuTk9ORTsKLSAgfTsKLQotICBXZWJVc2JTZXJ2aWNlX0dldFBlcm1pc3Npb25f
UmVzcG9uc2VQYXJhbXMuZW5jb2RlZFNpemUgPSBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDg7
Ci0KLSAgV2ViVXNiU2VydmljZV9HZXRQZXJtaXNzaW9uX1Jlc3BvbnNlUGFyYW1zLmRlY29kZSA9
IGZ1bmN0aW9uKGRlY29kZXIpIHsKLSAgICB2YXIgcGFja2VkOwotICAgIHZhciB2YWwgPSBuZXcg
V2ViVXNiU2VydmljZV9HZXRQZXJtaXNzaW9uX1Jlc3BvbnNlUGFyYW1zKCk7Ci0gICAgdmFyIG51
bWJlck9mQnl0ZXMgPSBkZWNvZGVyLnJlYWRVaW50MzIoKTsKLSAgICB2YXIgdmVyc2lvbiA9IGRl
Y29kZXIucmVhZFVpbnQzMigpOwotICAgIHZhbC5yZXN1bHQgPSBkZWNvZGVyLmRlY29kZVN0cnVj
dFBvaW50ZXIoZGV2aWNlJC5Vc2JEZXZpY2VJbmZvKTsKLSAgICByZXR1cm4gdmFsOwotICB9Owot
Ci0gIFdlYlVzYlNlcnZpY2VfR2V0UGVybWlzc2lvbl9SZXNwb25zZVBhcmFtcy5lbmNvZGUgPSBm
dW5jdGlvbihlbmNvZGVyLCB2YWwpIHsKLSAgICB2YXIgcGFja2VkOwotICAgIGVuY29kZXIud3Jp
dGVVaW50MzIoV2ViVXNiU2VydmljZV9HZXRQZXJtaXNzaW9uX1Jlc3BvbnNlUGFyYW1zLmVuY29k
ZWRTaXplKTsKLSAgICBlbmNvZGVyLndyaXRlVWludDMyKDApOwotICAgIGVuY29kZXIuZW5jb2Rl
U3RydWN0UG9pbnRlcihkZXZpY2UkLlVzYkRldmljZUluZm8sIHZhbC5yZXN1bHQpOwotICB9Owot
ICBmdW5jdGlvbiBXZWJVc2JTZXJ2aWNlX1NldENsaWVudF9QYXJhbXModmFsdWVzKSB7Ci0gICAg
dGhpcy5pbml0RGVmYXVsdHNfKCk7Ci0gICAgdGhpcy5pbml0RmllbGRzXyh2YWx1ZXMpOwotICB9
Ci0KLQotICBXZWJVc2JTZXJ2aWNlX1NldENsaWVudF9QYXJhbXMucHJvdG90eXBlLmluaXREZWZh
dWx0c18gPSBmdW5jdGlvbigpIHsKLSAgICB0aGlzLmNsaWVudCA9IG5ldyBhc3NvY2lhdGVkQmlu
ZGluZ3MuQXNzb2NpYXRlZEludGVyZmFjZVB0ckluZm8oKTsKLSAgfTsKLSAgV2ViVXNiU2Vydmlj
ZV9TZXRDbGllbnRfUGFyYW1zLnByb3RvdHlwZS5pbml0RmllbGRzXyA9IGZ1bmN0aW9uKGZpZWxk
cykgewotICAgIGZvcih2YXIgZmllbGQgaW4gZmllbGRzKSB7Ci0gICAgICAgIGlmICh0aGlzLmhh
c093blByb3BlcnR5KGZpZWxkKSkKLSAgICAgICAgICB0aGlzW2ZpZWxkXSA9IGZpZWxkc1tmaWVs
ZF07Ci0gICAgfQotICB9OwotCi0gIFdlYlVzYlNlcnZpY2VfU2V0Q2xpZW50X1BhcmFtcy52YWxp
ZGF0ZSA9IGZ1bmN0aW9uKG1lc3NhZ2VWYWxpZGF0b3IsIG9mZnNldCkgewotICAgIHZhciBlcnI7
Ci0gICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdEhlYWRlcihvZmZzZXQs
IGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplKTsKLSAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFs
aWRhdGlvbkVycm9yLk5PTkUpCi0gICAgICAgIHJldHVybiBlcnI7Ci0KLSAgICB2YXIga1ZlcnNp
b25TaXplcyA9IFsKLSAgICAgIHt2ZXJzaW9uOiAwLCBudW1CeXRlczogMTZ9Ci0gICAgXTsKLSAg
ICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0VmVyc2lvbihvZmZzZXQsIGtW
ZXJzaW9uU2l6ZXMpOwotICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3Iu
Tk9ORSkKLSAgICAgICAgcmV0dXJuIGVycjsKLQotCi0gICAgLy8gdmFsaWRhdGUgV2ViVXNiU2Vy
dmljZV9TZXRDbGllbnRfUGFyYW1zLmNsaWVudAotICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3Iu
dmFsaWRhdGVBc3NvY2lhdGVkSW50ZXJmYWNlKG9mZnNldCArIGNvZGVjLmtTdHJ1Y3RIZWFkZXJT
aXplICsgMCwgZmFsc2UpOwotICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJy
b3IuTk9ORSkKLSAgICAgICAgcmV0dXJuIGVycjsKLQotICAgIHJldHVybiB2YWxpZGF0b3IudmFs
aWRhdGlvbkVycm9yLk5PTkU7Ci0gIH07Ci0KLSAgV2ViVXNiU2VydmljZV9TZXRDbGllbnRfUGFy
YW1zLmVuY29kZWRTaXplID0gY29kZWMua1N0cnVjdEhlYWRlclNpemUgKyA4OwotCi0gIFdlYlVz
YlNlcnZpY2VfU2V0Q2xpZW50X1BhcmFtcy5kZWNvZGUgPSBmdW5jdGlvbihkZWNvZGVyKSB7Ci0g
ICAgdmFyIHBhY2tlZDsKLSAgICB2YXIgdmFsID0gbmV3IFdlYlVzYlNlcnZpY2VfU2V0Q2xpZW50
X1BhcmFtcygpOwotICAgIHZhciBudW1iZXJPZkJ5dGVzID0gZGVjb2Rlci5yZWFkVWludDMyKCk7
Ci0gICAgdmFyIHZlcnNpb24gPSBkZWNvZGVyLnJlYWRVaW50MzIoKTsKLSAgICB2YWwuY2xpZW50
ID0gZGVjb2Rlci5kZWNvZGVTdHJ1Y3QoY29kZWMuQXNzb2NpYXRlZEludGVyZmFjZVB0ckluZm8p
OwotICAgIHJldHVybiB2YWw7Ci0gIH07Ci0KLSAgV2ViVXNiU2VydmljZV9TZXRDbGllbnRfUGFy
YW1zLmVuY29kZSA9IGZ1bmN0aW9uKGVuY29kZXIsIHZhbCkgewotICAgIHZhciBwYWNrZWQ7Ci0g
ICAgZW5jb2Rlci53cml0ZVVpbnQzMihXZWJVc2JTZXJ2aWNlX1NldENsaWVudF9QYXJhbXMuZW5j
b2RlZFNpemUpOwotICAgIGVuY29kZXIud3JpdGVVaW50MzIoMCk7Ci0gICAgZW5jb2Rlci5lbmNv
ZGVTdHJ1Y3QoY29kZWMuQXNzb2NpYXRlZEludGVyZmFjZVB0ckluZm8sIHZhbC5jbGllbnQpOwot
ICB9OwotICB2YXIga1dlYlVzYlNlcnZpY2VfR2V0RGV2aWNlc19OYW1lID0gMDsKLSAgdmFyIGtX
ZWJVc2JTZXJ2aWNlX0dldERldmljZV9OYW1lID0gMTsKLSAgdmFyIGtXZWJVc2JTZXJ2aWNlX0dl
dFBlcm1pc3Npb25fTmFtZSA9IDI7Ci0gIHZhciBrV2ViVXNiU2VydmljZV9TZXRDbGllbnRfTmFt
ZSA9IDM7Ci0KLSAgZnVuY3Rpb24gV2ViVXNiU2VydmljZVB0cihoYW5kbGVPclB0ckluZm8pIHsK
LSAgICB0aGlzLnB0ciA9IG5ldyBiaW5kaW5ncy5JbnRlcmZhY2VQdHJDb250cm9sbGVyKFdlYlVz
YlNlcnZpY2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBoYW5kbGVPclB0ckluZm8pOwotICB9Ci0KLSAgZnVuY3Rpb24gV2ViVXNiU2VydmljZUFz
c29jaWF0ZWRQdHIoYXNzb2NpYXRlZEludGVyZmFjZVB0ckluZm8pIHsKLSAgICB0aGlzLnB0ciA9
IG5ldyBhc3NvY2lhdGVkQmluZGluZ3MuQXNzb2NpYXRlZEludGVyZmFjZVB0ckNvbnRyb2xsZXIo
Ci0gICAgICAgIFdlYlVzYlNlcnZpY2UsIGFzc29jaWF0ZWRJbnRlcmZhY2VQdHJJbmZvKTsKLSAg
fQotCi0gIFdlYlVzYlNlcnZpY2VBc3NvY2lhdGVkUHRyLnByb3RvdHlwZSA9Ci0gICAgICBPYmpl
Y3QuY3JlYXRlKFdlYlVzYlNlcnZpY2VQdHIucHJvdG90eXBlKTsKLSAgV2ViVXNiU2VydmljZUFz
c29jaWF0ZWRQdHIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0KLSAgICAgIFdlYlVzYlNlcnZpY2VB
c3NvY2lhdGVkUHRyOwotCi0gIGZ1bmN0aW9uIFdlYlVzYlNlcnZpY2VQcm94eShyZWNlaXZlcikg
ewotICAgIHRoaXMucmVjZWl2ZXJfID0gcmVjZWl2ZXI7Ci0gIH0KLSAgV2ViVXNiU2VydmljZVB0
ci5wcm90b3R5cGUuZ2V0RGV2aWNlcyA9IGZ1bmN0aW9uKCkgewotICAgIHJldHVybiBXZWJVc2JT
ZXJ2aWNlUHJveHkucHJvdG90eXBlLmdldERldmljZXMKLSAgICAgICAgLmFwcGx5KHRoaXMucHRy
LmdldFByb3h5KCksIGFyZ3VtZW50cyk7Ci0gIH07Ci0KLSAgV2ViVXNiU2VydmljZVByb3h5LnBy
b3RvdHlwZS5nZXREZXZpY2VzID0gZnVuY3Rpb24oKSB7Ci0gICAgdmFyIHBhcmFtc18gPSBuZXcg
V2ViVXNiU2VydmljZV9HZXREZXZpY2VzX1BhcmFtcygpOwotICAgIHJldHVybiBuZXcgUHJvbWlz
ZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3QpIHsKLSAgICAgIHZhciBidWlsZGVyID0gbmV3IGNv
ZGVjLk1lc3NhZ2VWMUJ1aWxkZXIoCi0gICAgICAgICAga1dlYlVzYlNlcnZpY2VfR2V0RGV2aWNl
c19OYW1lLAotICAgICAgICAgIGNvZGVjLmFsaWduKFdlYlVzYlNlcnZpY2VfR2V0RGV2aWNlc19Q
YXJhbXMuZW5jb2RlZFNpemUpLAotICAgICAgICAgIGNvZGVjLmtNZXNzYWdlRXhwZWN0c1Jlc3Bv
bnNlLCAwKTsKLSAgICAgIGJ1aWxkZXIuZW5jb2RlU3RydWN0KFdlYlVzYlNlcnZpY2VfR2V0RGV2
aWNlc19QYXJhbXMsIHBhcmFtc18pOwotICAgICAgdmFyIG1lc3NhZ2UgPSBidWlsZGVyLmZpbmlz
aCgpOwotICAgICAgdGhpcy5yZWNlaXZlcl8uYWNjZXB0QW5kRXhwZWN0UmVzcG9uc2UobWVzc2Fn
ZSkudGhlbihmdW5jdGlvbihtZXNzYWdlKSB7Ci0gICAgICAgIHZhciByZWFkZXIgPSBuZXcgY29k
ZWMuTWVzc2FnZVJlYWRlcihtZXNzYWdlKTsKLSAgICAgICAgdmFyIHJlc3BvbnNlUGFyYW1zID0K
LSAgICAgICAgICAgIHJlYWRlci5kZWNvZGVTdHJ1Y3QoV2ViVXNiU2VydmljZV9HZXREZXZpY2Vz
X1Jlc3BvbnNlUGFyYW1zKTsKLSAgICAgICAgcmVzb2x2ZShyZXNwb25zZVBhcmFtcyk7Ci0gICAg
ICB9KS5jYXRjaChmdW5jdGlvbihyZXN1bHQpIHsKLSAgICAgICAgcmVqZWN0KEVycm9yKCJDb25u
ZWN0aW9uIGVycm9yOiAiICsgcmVzdWx0KSk7Ci0gICAgICB9KTsKLSAgICB9LmJpbmQodGhpcykp
OwotICB9OwotICBXZWJVc2JTZXJ2aWNlUHRyLnByb3RvdHlwZS5nZXREZXZpY2UgPSBmdW5jdGlv
bigpIHsKLSAgICByZXR1cm4gV2ViVXNiU2VydmljZVByb3h5LnByb3RvdHlwZS5nZXREZXZpY2UK
LSAgICAgICAgLmFwcGx5KHRoaXMucHRyLmdldFByb3h5KCksIGFyZ3VtZW50cyk7Ci0gIH07Ci0K
LSAgV2ViVXNiU2VydmljZVByb3h5LnByb3RvdHlwZS5nZXREZXZpY2UgPSBmdW5jdGlvbihndWlk
LCBkZXZpY2VSZXF1ZXN0ZCkgewotICAgIHZhciBwYXJhbXNfID0gbmV3IFdlYlVzYlNlcnZpY2Vf
R2V0RGV2aWNlX1BhcmFtcygpOwotICAgIHBhcmFtc18uZ3VpZCA9IGd1aWQ7Ci0gICAgcGFyYW1z
Xy5kZXZpY2VSZXF1ZXN0ZCA9IGRldmljZVJlcXVlc3RkOwotICAgIHZhciBidWlsZGVyID0gbmV3
IGNvZGVjLk1lc3NhZ2VWMEJ1aWxkZXIoCi0gICAgICAgIGtXZWJVc2JTZXJ2aWNlX0dldERldmlj
ZV9OYW1lLAotICAgICAgICBjb2RlYy5hbGlnbihXZWJVc2JTZXJ2aWNlX0dldERldmljZV9QYXJh
bXMuZW5jb2RlZFNpemUpKTsKLSAgICBidWlsZGVyLmVuY29kZVN0cnVjdChXZWJVc2JTZXJ2aWNl
X0dldERldmljZV9QYXJhbXMsIHBhcmFtc18pOwotICAgIHZhciBtZXNzYWdlID0gYnVpbGRlci5m
aW5pc2goKTsKLSAgICB0aGlzLnJlY2VpdmVyXy5hY2NlcHQobWVzc2FnZSk7Ci0gIH07Ci0gIFdl
YlVzYlNlcnZpY2VQdHIucHJvdG90eXBlLmdldFBlcm1pc3Npb24gPSBmdW5jdGlvbigpIHsKLSAg
ICByZXR1cm4gV2ViVXNiU2VydmljZVByb3h5LnByb3RvdHlwZS5nZXRQZXJtaXNzaW9uCi0gICAg
ICAgIC5hcHBseSh0aGlzLnB0ci5nZXRQcm94eSgpLCBhcmd1bWVudHMpOwotICB9OwotCi0gIFdl
YlVzYlNlcnZpY2VQcm94eS5wcm90b3R5cGUuZ2V0UGVybWlzc2lvbiA9IGZ1bmN0aW9uKGRldmlj
ZUZpbHRlcnMpIHsKLSAgICB2YXIgcGFyYW1zXyA9IG5ldyBXZWJVc2JTZXJ2aWNlX0dldFBlcm1p
c3Npb25fUGFyYW1zKCk7Ci0gICAgcGFyYW1zXy5kZXZpY2VGaWx0ZXJzID0gZGV2aWNlRmlsdGVy
czsKLSAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7Ci0g
ICAgICB2YXIgYnVpbGRlciA9IG5ldyBjb2RlYy5NZXNzYWdlVjFCdWlsZGVyKAotICAgICAgICAg
IGtXZWJVc2JTZXJ2aWNlX0dldFBlcm1pc3Npb25fTmFtZSwKLSAgICAgICAgICBjb2RlYy5hbGln
bihXZWJVc2JTZXJ2aWNlX0dldFBlcm1pc3Npb25fUGFyYW1zLmVuY29kZWRTaXplKSwKLSAgICAg
ICAgICBjb2RlYy5rTWVzc2FnZUV4cGVjdHNSZXNwb25zZSwgMCk7Ci0gICAgICBidWlsZGVyLmVu
Y29kZVN0cnVjdChXZWJVc2JTZXJ2aWNlX0dldFBlcm1pc3Npb25fUGFyYW1zLCBwYXJhbXNfKTsK
LSAgICAgIHZhciBtZXNzYWdlID0gYnVpbGRlci5maW5pc2goKTsKLSAgICAgIHRoaXMucmVjZWl2
ZXJfLmFjY2VwdEFuZEV4cGVjdFJlc3BvbnNlKG1lc3NhZ2UpLnRoZW4oZnVuY3Rpb24obWVzc2Fn
ZSkgewotICAgICAgICB2YXIgcmVhZGVyID0gbmV3IGNvZGVjLk1lc3NhZ2VSZWFkZXIobWVzc2Fn
ZSk7Ci0gICAgICAgIHZhciByZXNwb25zZVBhcmFtcyA9Ci0gICAgICAgICAgICByZWFkZXIuZGVj
b2RlU3RydWN0KFdlYlVzYlNlcnZpY2VfR2V0UGVybWlzc2lvbl9SZXNwb25zZVBhcmFtcyk7Ci0g
ICAgICAgIHJlc29sdmUocmVzcG9uc2VQYXJhbXMpOwotICAgICAgfSkuY2F0Y2goZnVuY3Rpb24o
cmVzdWx0KSB7Ci0gICAgICAgIHJlamVjdChFcnJvcigiQ29ubmVjdGlvbiBlcnJvcjogIiArIHJl
c3VsdCkpOwotICAgICAgfSk7Ci0gICAgfS5iaW5kKHRoaXMpKTsKLSAgfTsKLSAgV2ViVXNiU2Vy
dmljZVB0ci5wcm90b3R5cGUuc2V0Q2xpZW50ID0gZnVuY3Rpb24oKSB7Ci0gICAgcmV0dXJuIFdl
YlVzYlNlcnZpY2VQcm94eS5wcm90b3R5cGUuc2V0Q2xpZW50Ci0gICAgICAgIC5hcHBseSh0aGlz
LnB0ci5nZXRQcm94eSgpLCBhcmd1bWVudHMpOwotICB9OwotCi0gIFdlYlVzYlNlcnZpY2VQcm94
eS5wcm90b3R5cGUuc2V0Q2xpZW50ID0gZnVuY3Rpb24oY2xpZW50KSB7Ci0gICAgdmFyIHBhcmFt
c18gPSBuZXcgV2ViVXNiU2VydmljZV9TZXRDbGllbnRfUGFyYW1zKCk7Ci0gICAgcGFyYW1zXy5j
bGllbnQgPSBjbGllbnQ7Ci0gICAgdmFyIGJ1aWxkZXIgPSBuZXcgY29kZWMuTWVzc2FnZVYyQnVp
bGRlcigKLSAgICAgICAga1dlYlVzYlNlcnZpY2VfU2V0Q2xpZW50X05hbWUsCi0gICAgICAgIGNv
ZGVjLmFsaWduKFdlYlVzYlNlcnZpY2VfU2V0Q2xpZW50X1BhcmFtcy5lbmNvZGVkU2l6ZSkpOwot
ICAgIGJ1aWxkZXIuc2V0UGF5bG9hZChXZWJVc2JTZXJ2aWNlX1NldENsaWVudF9QYXJhbXMsIHBh
cmFtc18pOwotICAgIHZhciBtZXNzYWdlID0gYnVpbGRlci5maW5pc2goKTsKLSAgICB0aGlzLnJl
Y2VpdmVyXy5hY2NlcHQobWVzc2FnZSk7Ci0gIH07Ci0KLSAgZnVuY3Rpb24gV2ViVXNiU2Vydmlj
ZVN0dWIoZGVsZWdhdGUpIHsKLSAgICB0aGlzLmRlbGVnYXRlXyA9IGRlbGVnYXRlOwotICB9Ci0g
IFdlYlVzYlNlcnZpY2VTdHViLnByb3RvdHlwZS5nZXREZXZpY2VzID0gZnVuY3Rpb24oKSB7Ci0g
ICAgcmV0dXJuIHRoaXMuZGVsZWdhdGVfICYmIHRoaXMuZGVsZWdhdGVfLmdldERldmljZXMgJiYg
dGhpcy5kZWxlZ2F0ZV8uZ2V0RGV2aWNlcygpOwotICB9Ci0gIFdlYlVzYlNlcnZpY2VTdHViLnBy
b3RvdHlwZS5nZXREZXZpY2UgPSBmdW5jdGlvbihndWlkLCBkZXZpY2VSZXF1ZXN0ZCkgewotICAg
IHJldHVybiB0aGlzLmRlbGVnYXRlXyAmJiB0aGlzLmRlbGVnYXRlXy5nZXREZXZpY2UgJiYgdGhp
cy5kZWxlZ2F0ZV8uZ2V0RGV2aWNlKGd1aWQsIGRldmljZVJlcXVlc3RkKTsKLSAgfQotICBXZWJV
c2JTZXJ2aWNlU3R1Yi5wcm90b3R5cGUuZ2V0UGVybWlzc2lvbiA9IGZ1bmN0aW9uKGRldmljZUZp
bHRlcnMpIHsKLSAgICByZXR1cm4gdGhpcy5kZWxlZ2F0ZV8gJiYgdGhpcy5kZWxlZ2F0ZV8uZ2V0
UGVybWlzc2lvbiAmJiB0aGlzLmRlbGVnYXRlXy5nZXRQZXJtaXNzaW9uKGRldmljZUZpbHRlcnMp
OwotICB9Ci0gIFdlYlVzYlNlcnZpY2VTdHViLnByb3RvdHlwZS5zZXRDbGllbnQgPSBmdW5jdGlv
bihjbGllbnQpIHsKLSAgICByZXR1cm4gdGhpcy5kZWxlZ2F0ZV8gJiYgdGhpcy5kZWxlZ2F0ZV8u
c2V0Q2xpZW50ICYmIHRoaXMuZGVsZWdhdGVfLnNldENsaWVudChjbGllbnQpOwotICB9Ci0KLSAg
V2ViVXNiU2VydmljZVN0dWIucHJvdG90eXBlLmFjY2VwdCA9IGZ1bmN0aW9uKG1lc3NhZ2UpIHsK
LSAgICB2YXIgcmVhZGVyID0gbmV3IGNvZGVjLk1lc3NhZ2VSZWFkZXIobWVzc2FnZSk7Ci0gICAg
c3dpdGNoIChyZWFkZXIubWVzc2FnZU5hbWUpIHsKLSAgICBjYXNlIGtXZWJVc2JTZXJ2aWNlX0dl
dERldmljZV9OYW1lOgotICAgICAgdmFyIHBhcmFtcyA9IHJlYWRlci5kZWNvZGVTdHJ1Y3QoV2Vi
VXNiU2VydmljZV9HZXREZXZpY2VfUGFyYW1zKTsKLSAgICAgIHRoaXMuZ2V0RGV2aWNlKHBhcmFt
cy5ndWlkLCBwYXJhbXMuZGV2aWNlUmVxdWVzdGQpOwotICAgICAgcmV0dXJuIHRydWU7Ci0gICAg
Y2FzZSBrV2ViVXNiU2VydmljZV9TZXRDbGllbnRfTmFtZToKLSAgICAgIHZhciBwYXJhbXMgPSBy
ZWFkZXIuZGVjb2RlU3RydWN0KFdlYlVzYlNlcnZpY2VfU2V0Q2xpZW50X1BhcmFtcyk7Ci0gICAg
ICB0aGlzLnNldENsaWVudChwYXJhbXMuY2xpZW50KTsKLSAgICAgIHJldHVybiB0cnVlOwotICAg
IGRlZmF1bHQ6Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICB9OwotCi0gIFdlYlVzYlNl
cnZpY2VTdHViLnByb3RvdHlwZS5hY2NlcHRXaXRoUmVzcG9uZGVyID0KLSAgICAgIGZ1bmN0aW9u
KG1lc3NhZ2UsIHJlc3BvbmRlcikgewotICAgIHZhciByZWFkZXIgPSBuZXcgY29kZWMuTWVzc2Fn
ZVJlYWRlcihtZXNzYWdlKTsKLSAgICBzd2l0Y2ggKHJlYWRlci5tZXNzYWdlTmFtZSkgewotICAg
IGNhc2Uga1dlYlVzYlNlcnZpY2VfR2V0RGV2aWNlc19OYW1lOgotICAgICAgdmFyIHBhcmFtcyA9
IHJlYWRlci5kZWNvZGVTdHJ1Y3QoV2ViVXNiU2VydmljZV9HZXREZXZpY2VzX1BhcmFtcyk7Ci0g
ICAgICB0aGlzLmdldERldmljZXMoKS50aGVuKGZ1bmN0aW9uKHJlc3BvbnNlKSB7Ci0gICAgICAg
IHZhciByZXNwb25zZVBhcmFtcyA9Ci0gICAgICAgICAgICBuZXcgV2ViVXNiU2VydmljZV9HZXRE
ZXZpY2VzX1Jlc3BvbnNlUGFyYW1zKCk7Ci0gICAgICAgIHJlc3BvbnNlUGFyYW1zLnJlc3VsdHMg
PSByZXNwb25zZS5yZXN1bHRzOwotICAgICAgICB2YXIgYnVpbGRlciA9IG5ldyBjb2RlYy5NZXNz
YWdlVjFCdWlsZGVyKAotICAgICAgICAgICAga1dlYlVzYlNlcnZpY2VfR2V0RGV2aWNlc19OYW1l
LAotICAgICAgICAgICAgY29kZWMuYWxpZ24oV2ViVXNiU2VydmljZV9HZXREZXZpY2VzX1Jlc3Bv
bnNlUGFyYW1zLmVuY29kZWRTaXplKSwKLSAgICAgICAgICAgIGNvZGVjLmtNZXNzYWdlSXNSZXNw
b25zZSwgcmVhZGVyLnJlcXVlc3RJRCk7Ci0gICAgICAgIGJ1aWxkZXIuZW5jb2RlU3RydWN0KFdl
YlVzYlNlcnZpY2VfR2V0RGV2aWNlc19SZXNwb25zZVBhcmFtcywKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcmVzcG9uc2VQYXJhbXMpOwotICAgICAgICB2YXIgbWVzc2FnZSA9IGJ1aWxk
ZXIuZmluaXNoKCk7Ci0gICAgICAgIHJlc3BvbmRlci5hY2NlcHQobWVzc2FnZSk7Ci0gICAgICB9
KTsKLSAgICAgIHJldHVybiB0cnVlOwotICAgIGNhc2Uga1dlYlVzYlNlcnZpY2VfR2V0UGVybWlz
c2lvbl9OYW1lOgotICAgICAgdmFyIHBhcmFtcyA9IHJlYWRlci5kZWNvZGVTdHJ1Y3QoV2ViVXNi
U2VydmljZV9HZXRQZXJtaXNzaW9uX1BhcmFtcyk7Ci0gICAgICB0aGlzLmdldFBlcm1pc3Npb24o
cGFyYW1zLmRldmljZUZpbHRlcnMpLnRoZW4oZnVuY3Rpb24ocmVzcG9uc2UpIHsKLSAgICAgICAg
dmFyIHJlc3BvbnNlUGFyYW1zID0KLSAgICAgICAgICAgIG5ldyBXZWJVc2JTZXJ2aWNlX0dldFBl
cm1pc3Npb25fUmVzcG9uc2VQYXJhbXMoKTsKLSAgICAgICAgcmVzcG9uc2VQYXJhbXMucmVzdWx0
ID0gcmVzcG9uc2UucmVzdWx0OwotICAgICAgICB2YXIgYnVpbGRlciA9IG5ldyBjb2RlYy5NZXNz
YWdlVjFCdWlsZGVyKAotICAgICAgICAgICAga1dlYlVzYlNlcnZpY2VfR2V0UGVybWlzc2lvbl9O
YW1lLAotICAgICAgICAgICAgY29kZWMuYWxpZ24oV2ViVXNiU2VydmljZV9HZXRQZXJtaXNzaW9u
X1Jlc3BvbnNlUGFyYW1zLmVuY29kZWRTaXplKSwKLSAgICAgICAgICAgIGNvZGVjLmtNZXNzYWdl
SXNSZXNwb25zZSwgcmVhZGVyLnJlcXVlc3RJRCk7Ci0gICAgICAgIGJ1aWxkZXIuZW5jb2RlU3Ry
dWN0KFdlYlVzYlNlcnZpY2VfR2V0UGVybWlzc2lvbl9SZXNwb25zZVBhcmFtcywKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2VQYXJhbXMpOwotICAgICAgICB2YXIgbWVzc2Fn
ZSA9IGJ1aWxkZXIuZmluaXNoKCk7Ci0gICAgICAgIHJlc3BvbmRlci5hY2NlcHQobWVzc2FnZSk7
Ci0gICAgICB9KTsKLSAgICAgIHJldHVybiB0cnVlOwotICAgIGRlZmF1bHQ6Ci0gICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgfQotICB9OwotCi0gIGZ1bmN0aW9uIHZhbGlkYXRlV2ViVXNiU2Vydmlj
ZVJlcXVlc3QobWVzc2FnZVZhbGlkYXRvcikgewotICAgIHZhciBtZXNzYWdlID0gbWVzc2FnZVZh
bGlkYXRvci5tZXNzYWdlOwotICAgIHZhciBwYXJhbXNDbGFzcyA9IG51bGw7Ci0gICAgc3dpdGNo
IChtZXNzYWdlLmdldE5hbWUoKSkgewotICAgICAgY2FzZSBrV2ViVXNiU2VydmljZV9HZXREZXZp
Y2VzX05hbWU6Ci0gICAgICAgIGlmIChtZXNzYWdlLmV4cGVjdHNSZXNwb25zZSgpKQotICAgICAg
ICAgIHBhcmFtc0NsYXNzID0gV2ViVXNiU2VydmljZV9HZXREZXZpY2VzX1BhcmFtczsKLSAgICAg
IGJyZWFrOwotICAgICAgY2FzZSBrV2ViVXNiU2VydmljZV9HZXREZXZpY2VfTmFtZToKLSAgICAg
ICAgaWYgKCFtZXNzYWdlLmV4cGVjdHNSZXNwb25zZSgpICYmICFtZXNzYWdlLmlzUmVzcG9uc2Uo
KSkKLSAgICAgICAgICBwYXJhbXNDbGFzcyA9IFdlYlVzYlNlcnZpY2VfR2V0RGV2aWNlX1BhcmFt
czsKLSAgICAgIGJyZWFrOwotICAgICAgY2FzZSBrV2ViVXNiU2VydmljZV9HZXRQZXJtaXNzaW9u
X05hbWU6Ci0gICAgICAgIGlmIChtZXNzYWdlLmV4cGVjdHNSZXNwb25zZSgpKQotICAgICAgICAg
IHBhcmFtc0NsYXNzID0gV2ViVXNiU2VydmljZV9HZXRQZXJtaXNzaW9uX1BhcmFtczsKLSAgICAg
IGJyZWFrOwotICAgICAgY2FzZSBrV2ViVXNiU2VydmljZV9TZXRDbGllbnRfTmFtZToKLSAgICAg
ICAgaWYgKCFtZXNzYWdlLmV4cGVjdHNSZXNwb25zZSgpICYmICFtZXNzYWdlLmlzUmVzcG9uc2Uo
KSkKLSAgICAgICAgICBwYXJhbXNDbGFzcyA9IFdlYlVzYlNlcnZpY2VfU2V0Q2xpZW50X1BhcmFt
czsKLSAgICAgIGJyZWFrOwotICAgIH0KLSAgICBpZiAocGFyYW1zQ2xhc3MgPT09IG51bGwpCi0g
ICAgICByZXR1cm4gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FOwotICAgIHJldHVybiBw
YXJhbXNDbGFzcy52YWxpZGF0ZShtZXNzYWdlVmFsaWRhdG9yLCBtZXNzYWdlVmFsaWRhdG9yLm1l
c3NhZ2UuZ2V0SGVhZGVyTnVtQnl0ZXMoKSk7Ci0gIH0KLQotICBmdW5jdGlvbiB2YWxpZGF0ZVdl
YlVzYlNlcnZpY2VSZXNwb25zZShtZXNzYWdlVmFsaWRhdG9yKSB7Ci0gICB2YXIgbWVzc2FnZSA9
IG1lc3NhZ2VWYWxpZGF0b3IubWVzc2FnZTsKLSAgIHZhciBwYXJhbXNDbGFzcyA9IG51bGw7Ci0g
ICBzd2l0Y2ggKG1lc3NhZ2UuZ2V0TmFtZSgpKSB7Ci0gICAgICBjYXNlIGtXZWJVc2JTZXJ2aWNl
X0dldERldmljZXNfTmFtZToKLSAgICAgICAgaWYgKG1lc3NhZ2UuaXNSZXNwb25zZSgpKQotICAg
ICAgICAgIHBhcmFtc0NsYXNzID0gV2ViVXNiU2VydmljZV9HZXREZXZpY2VzX1Jlc3BvbnNlUGFy
YW1zOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2Uga1dlYlVzYlNlcnZpY2VfR2V0UGVybWlz
c2lvbl9OYW1lOgotICAgICAgICBpZiAobWVzc2FnZS5pc1Jlc3BvbnNlKCkpCi0gICAgICAgICAg
cGFyYW1zQ2xhc3MgPSBXZWJVc2JTZXJ2aWNlX0dldFBlcm1pc3Npb25fUmVzcG9uc2VQYXJhbXM7
Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBpZiAocGFyYW1zQ2xhc3MgPT09IG51bGwpCi0g
ICAgICByZXR1cm4gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FOwotICAgIHJldHVybiBw
YXJhbXNDbGFzcy52YWxpZGF0ZShtZXNzYWdlVmFsaWRhdG9yLCBtZXNzYWdlVmFsaWRhdG9yLm1l
c3NhZ2UuZ2V0SGVhZGVyTnVtQnl0ZXMoKSk7Ci0gIH0KLQotICB2YXIgV2ViVXNiU2VydmljZSA9
IHsKLSAgICBuYW1lOiAnYmxpbmsubW9qb20uV2ViVXNiU2VydmljZScsCi0gICAga1ZlcnNpb246
IDAsCi0gICAgcHRyQ2xhc3M6IFdlYlVzYlNlcnZpY2VQdHIsCi0gICAgcHJveHlDbGFzczogV2Vi
VXNiU2VydmljZVByb3h5LAotICAgIHN0dWJDbGFzczogV2ViVXNiU2VydmljZVN0dWIsCi0gICAg
dmFsaWRhdGVSZXF1ZXN0OiB2YWxpZGF0ZVdlYlVzYlNlcnZpY2VSZXF1ZXN0LAotICAgIHZhbGlk
YXRlUmVzcG9uc2U6IHZhbGlkYXRlV2ViVXNiU2VydmljZVJlc3BvbnNlLAotICB9OwotICBXZWJV
c2JTZXJ2aWNlU3R1Yi5wcm90b3R5cGUudmFsaWRhdG9yID0gdmFsaWRhdGVXZWJVc2JTZXJ2aWNl
UmVxdWVzdDsKLSAgV2ViVXNiU2VydmljZVByb3h5LnByb3RvdHlwZS52YWxpZGF0b3IgPSB2YWxp
ZGF0ZVdlYlVzYlNlcnZpY2VSZXNwb25zZTsKLSAgZXhwb3J0cy5XZWJVc2JTZXJ2aWNlID0gV2Vi
VXNiU2VydmljZTsKLSAgZXhwb3J0cy5XZWJVc2JTZXJ2aWNlUHRyID0gV2ViVXNiU2VydmljZVB0
cjsKLSAgZXhwb3J0cy5XZWJVc2JTZXJ2aWNlQXNzb2NpYXRlZFB0ciA9IFdlYlVzYlNlcnZpY2VB
c3NvY2lhdGVkUHRyOwotfSkoKTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1n
aXQgYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNl
cy9jaHJvbWl1bS93ZWJfdXNiX3NlcnZpY2UubW9qb20uanMuaGVhZGVycyBiL0xheW91dFRlc3Rz
L2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL3dlYl91
c2Jfc2VydmljZS5tb2pvbS5qcy5oZWFkZXJzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCA2ODA1YzMyM2RmNWE5NzUyMzE2NDhiODMwZTMzY2UxODNjM2NiYmQzLi4wMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3cz
Yy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL3dlYl91c2Jfc2VydmljZS5t
b2pvbS5qcy5oZWFkZXJzCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotQ29udGVudC1UeXBl
OiB0ZXh0L2phdmFzY3JpcHQ7IGNoYXJzZXQ9dXRmLTgKZGlmZiAtLWdpdCBhL0xheW91dFRlc3Rz
L2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL3dlYnVz
Yi1jaGlsZC10ZXN0LmpzIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10
ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vd2VidXNiLWNoaWxkLXRlc3QuanMKZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IGFkZDA0ZmE1ODI1MGQ1OGQ1Njc1OWQyNDI2NjNhNjUxMGQzMDYw
OTAuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvTGF5b3V0
VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0v
d2VidXNiLWNoaWxkLXRlc3QuanMKKysrIC9kZXYvbnVsbApAQCAtMSw0MCArMCwwIEBACi0ndXNl
IHN0cmljdCc7Ci0KLS8vIFRoaXMgcG9seWZpbGwgcHJlcGFyZXMgYSBjaGlsZCBjb250ZXh0IHRv
IGJlIGF0dGFjaGVkIHRvIGEgcGFyZW50IGNvbnRleHQuCi0vLyBUaGUgcGFyZW50IG11c3QgY2Fs
bCBuYXZpZ2F0b3IudXNiLnRlc3QuYXR0YWNoVG9Db250ZXh0KCkgdG8gYXR0YWNoIHRvIHRoZQot
Ly8gY2hpbGQgY29udGV4dC4KLSgoKSA9PiB7Ci0gIGlmICh0aGlzLmNvbnN0cnVjdG9yLm5hbWUg
PT09ICdEZWRpY2F0ZWRXb3JrZXJHbG9iYWxTY29wZScgfHwKLSAgICAgIHRoaXMgIT09IHdpbmRv
dy50b3ApIHsKLQotICAgIC8vIFJ1biBDaHJvbWl1bSBzcGVjaWZpYyBzZXQgdXAgY29kZS4KLSAg
ICBpZiAodHlwZW9mIE1vam9JbnRlcmZhY2VJbnRlcmNlcHRvciAhPT0gJ3VuZGVmaW5lZCcpIHsK
LSAgICAgIGxldCBtZXNzYWdlQ2hhbm5lbCA9IG5ldyBNZXNzYWdlQ2hhbm5lbCgpOwotICAgICAg
bWVzc2FnZUNoYW5uZWwucG9ydDEub25tZXNzYWdlID0gYXN5bmMgKG1lc3NhZ2VFdmVudCkgPT4g
ewotICAgICAgICBpZiAobWVzc2FnZUV2ZW50LmRhdGEudHlwZSA9PT0gJ0F0dGFjaCcpIHsKLSAg
ICAgICAgICBtZXNzYWdlRXZlbnQuZGF0YS5pbnRlcmZhY2VzLmZvckVhY2goaW50ZXJmYWNlTmFt
ZSA9PiB7Ci0gICAgICAgICAgICBsZXQgaW50ZXJmYWNlSW50ZXJjZXB0b3IgPQotICAgICAgICAg
ICAgICAgIG5ldyBNb2pvSW50ZXJmYWNlSW50ZXJjZXB0b3IoaW50ZXJmYWNlTmFtZSk7Ci0gICAg
ICAgICAgICBpbnRlcmZhY2VJbnRlcmNlcHRvci5vbmludGVyZmFjZXJlcXVlc3QgPQotICAgICAg
ICAgICAgICBlID0+IG1lc3NhZ2VDaGFubmVsLnBvcnQxLnBvc3RNZXNzYWdlKHsKLSAgICAgICAg
ICAgICAgICB0eXBlOiBpbnRlcmZhY2VOYW1lLAotICAgICAgICAgICAgICAgIGhhbmRsZTogZS5o
YW5kbGUKLSAgICAgICAgICAgICAgfSwgW2UuaGFuZGxlXSk7Ci0gICAgICAgICAgICBpbnRlcmZh
Y2VJbnRlcmNlcHRvci5zdGFydCgpOwotICAgICAgICAgIH0pOwotCi0gICAgICAgICAgLy8gV2Fp
dCBmb3IgYSBjYWxsIHRvIEdldERldmljZXMoKSB0byBlbnN1cmUgdGhhdCB0aGUgaW50ZXJmYWNl
Ci0gICAgICAgICAgLy8gaGFuZGxlcyBhcmUgZm9yd2FyZGVkIHRvIHRoZSBwYXJlbnQgY29udGV4
dC4KLSAgICAgICAgICBhd2FpdCBuYXZpZ2F0b3IudXNiLmdldERldmljZXMoKTsKLSAgICAgICAg
ICBtZXNzYWdlQ2hhbm5lbC5wb3J0MS5wb3N0TWVzc2FnZSh7IHR5cGU6ICdDb21wbGV0ZScgfSk7
Ci0gICAgICAgIH0KLSAgICAgIH07Ci0KLSAgICAgIGxldCBtZXNzYWdlID0geyB0eXBlOiAnUmVh
ZHlGb3JBdHRhY2htZW50JywgcG9ydDogbWVzc2FnZUNoYW5uZWwucG9ydDIgfTsKLSAgICAgIGlm
ICh0eXBlb2YgV2luZG93ICE9PSAndW5kZWZpbmVkJykKLSAgICAgICAgcGFyZW50LnBvc3RNZXNz
YWdlKG1lc3NhZ2UsICcqJywgW21lc3NhZ2VDaGFubmVsLnBvcnQyXSk7Ci0gICAgICBlbHNlCi0g
ICAgICAgIHBvc3RNZXNzYWdlKG1lc3NhZ2UsIFttZXNzYWdlQ2hhbm5lbC5wb3J0Ml0pOwotICAg
IH0KLSAgfQotfSkoKTsKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWIt
cGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL3dlYnVzYi1jaGlsZC10ZXN0LmpzLmhl
YWRlcnMgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291
cmNlcy9jaHJvbWl1bS93ZWJ1c2ItY2hpbGQtdGVzdC5qcy5oZWFkZXJzCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCA2ODA1YzMyM2RmNWE5NzUyMzE2NDhiODMwZTMzY2UxODNjM2NiYmQz
Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL0xheW91dFRl
c3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL3dl
YnVzYi1jaGlsZC10ZXN0LmpzLmhlYWRlcnMKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi1D
b250ZW50LVR5cGU6IHRleHQvamF2YXNjcmlwdDsgY2hhcnNldD11dGYtOApkaWZmIC0tZ2l0IGEv
TGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hy
b21pdW0vd2VidXNiLXRlc3QuanMgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRm
b3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS93ZWJ1c2ItdGVzdC5qcwpkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggOGJjY2ZkMWY3MjRjYzYyMjYxOWUwMjRiOTVjNzA2OGIyODk5ZmYw
Ny4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9MYXlvdXRU
ZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS93
ZWJ1c2ItdGVzdC5qcworKysgL2Rldi9udWxsCkBAIC0xLDU1MSArMCwwIEBACi0ndXNlIHN0cmlj
dCc7Ci0KLS8vIFRoaXMgcG9seWZpbGwgbGlicmFyeSBpbXBsZW1lbnRzIHRoZSBXZWJVU0IgVGVz
dCBBUEkgYXMgc3BlY2lmaWVkIGhlcmU6Ci0vLyBodHRwczovL3dpY2cuZ2l0aHViLmlvL3dlYnVz
Yi90ZXN0LwotCi0oKCkgPT4gewotCi0vLyBUaGVzZSB2YXJpYWJsZXMgYXJlIGxvZ2ljYWxseSBt
ZW1iZXJzIG9mIHRoZSBVU0JUZXN0IGNsYXNzIGJ1dCBhcmUgZGVmaW5lZAotLy8gaGVyZSB0byBo
aWRlIHRoZW0gZnJvbSBiZWluZyB2aXNpYmxlIGFzIGZpZWxkcyBvZiBuYXZpZ2F0b3IudXNiLnRl
c3QuCi1sZXQgaW50ZXJuYWwgPSB7Ci0gIGludGlhbGl6ZWQ6IGZhbHNlLAotCi0gIHdlYlVzYlNl
cnZpY2U6IG51bGwsCi0gIHdlYlVzYlNlcnZpY2VJbnRlcmNlcHRvcjogbnVsbCwKLQotICBtZXNz
YWdlUG9ydDogbnVsbCwKLX07Ci0KLWZ1bmN0aW9uIGdldE1lc3NhZ2VQb3J0KHRhcmdldCkgewot
ICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7Ci0gICAgdGFyZ2V0LmFkZEV2ZW50TGlz
dGVuZXIoJ21lc3NhZ2UnLCBtZXNzYWdlRXZlbnQgPT4gewotICAgICAgaWYgKG1lc3NhZ2VFdmVu
dC5kYXRhLnR5cGUgPT09ICdSZWFkeUZvckF0dGFjaG1lbnQnKSB7Ci0gICAgICAgIGlmIChpbnRl
cm5hbC5tZXNzYWdlUG9ydCA9PT0gbnVsbCkgewotICAgICAgICAgIGludGVybmFsLm1lc3NhZ2VQ
b3J0ID0gbWVzc2FnZUV2ZW50LmRhdGEucG9ydDsKLSAgICAgICAgfQotICAgICAgICByZXNvbHZl
KCk7Ci0gICAgICB9Ci0gICAgfSwge29uY2U6IHRydWV9KTsKLSAgfSk7Ci19Ci0KLS8vIENvbnZl
cnRzIGFuIEVDTUFTY3JpcHQgU3RyaW5nIG9iamVjdCB0byBhbiBpbnN0YW5jZSBvZgotLy8gbW9q
b19iYXNlLm1vam9tLlN0cmluZzE2LgotZnVuY3Rpb24gbW9qb1N0cmluZzE2VG9TdHJpbmcoc3Ry
aW5nMTYpIHsKLSAgcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkobnVsbCwgc3RyaW5n
MTYuZGF0YSk7Ci19Ci0KLS8vIENvbnZlcnRzIGFuIGluc3RhbmNlIG9mIG1vam9fYmFzZS5tb2pv
bS5TdHJpbmcxNiB0byBhbiBFQ01BU2NyaXB0IFN0cmluZy4KLWZ1bmN0aW9uIHN0cmluZ1RvTW9q
b1N0cmluZzE2KHN0cmluZykgewotICBsZXQgYXJyYXkgPSBuZXcgQXJyYXkoc3RyaW5nLmxlbmd0
aCk7Ci0gIGZvciAodmFyIGkgPSAwOyBpIDwgc3RyaW5nLmxlbmd0aDsgKytpKSB7Ci0gICAgYXJy
YXlbaV0gPSBzdHJpbmcuY2hhckNvZGVBdChpKTsKLSAgfQotICByZXR1cm4geyBkYXRhOiBhcnJh
eSB9Ci19Ci0KLWZ1bmN0aW9uIGZha2VEZXZpY2VJbml0VG9EZXZpY2VJbmZvKGd1aWQsIGluaXQp
IHsKLSAgbGV0IGRldmljZUluZm8gPSB7Ci0gICAgZ3VpZDogZ3VpZCArICIiLAotICAgIHVzYlZl
cnNpb25NYWpvcjogaW5pdC51c2JWZXJzaW9uTWFqb3IsCi0gICAgdXNiVmVyc2lvbk1pbm9yOiBp
bml0LnVzYlZlcnNpb25NaW5vciwKLSAgICB1c2JWZXJzaW9uU3VibWlub3I6IGluaXQudXNiVmVy
c2lvblN1Ym1pbm9yLAotICAgIGNsYXNzQ29kZTogaW5pdC5kZXZpY2VDbGFzcywKLSAgICBzdWJj
bGFzc0NvZGU6IGluaXQuZGV2aWNlU3ViY2xhc3MsCi0gICAgcHJvdG9jb2xDb2RlOiBpbml0LmRl
dmljZVByb3RvY29sLAotICAgIHZlbmRvcklkOiBpbml0LnZlbmRvcklkLAotICAgIHByb2R1Y3RJ
ZDogaW5pdC5wcm9kdWN0SWQsCi0gICAgZGV2aWNlVmVyc2lvbk1ham9yOiBpbml0LmRldmljZVZl
cnNpb25NYWpvciwKLSAgICBkZXZpY2VWZXJzaW9uTWlub3I6IGluaXQuZGV2aWNlVmVyc2lvbk1p
bm9yLAotICAgIGRldmljZVZlcnNpb25TdWJtaW5vcjogaW5pdC5kZXZpY2VWZXJzaW9uU3VibWlu
b3IsCi0gICAgbWFudWZhY3R1cmVyTmFtZTogc3RyaW5nVG9Nb2pvU3RyaW5nMTYoaW5pdC5tYW51
ZmFjdHVyZXJOYW1lKSwKLSAgICBwcm9kdWN0TmFtZTogc3RyaW5nVG9Nb2pvU3RyaW5nMTYoaW5p
dC5wcm9kdWN0TmFtZSksCi0gICAgc2VyaWFsTnVtYmVyOiBzdHJpbmdUb01vam9TdHJpbmcxNihp
bml0LnNlcmlhbE51bWJlciksCi0gICAgYWN0aXZlQ29uZmlndXJhdGlvbjogaW5pdC5hY3RpdmVD
b25maWd1cmF0aW9uVmFsdWUsCi0gICAgY29uZmlndXJhdGlvbnM6IFtdCi0gIH07Ci0gIGluaXQu
Y29uZmlndXJhdGlvbnMuZm9yRWFjaChjb25maWcgPT4gewotICAgIHZhciBjb25maWdJbmZvID0g
ewotICAgICAgY29uZmlndXJhdGlvblZhbHVlOiBjb25maWcuY29uZmlndXJhdGlvblZhbHVlLAot
ICAgICAgY29uZmlndXJhdGlvbk5hbWU6IHN0cmluZ1RvTW9qb1N0cmluZzE2KGNvbmZpZy5jb25m
aWd1cmF0aW9uTmFtZSksCi0gICAgICBzZWxmUG93ZXJlZDogZmFsc2UsCi0gICAgICByZW1vdGVX
YWtldXA6IGZhbHNlLAotICAgICAgbWF4aW11bVBvd2VyOiAwLAotICAgICAgaW50ZXJmYWNlczog
W10sCi0gICAgICBleHRyYURhdGE6IG5ldyBVaW50OEFycmF5KCkKLSAgICB9OwotICAgIGNvbmZp
Zy5pbnRlcmZhY2VzLmZvckVhY2goaWZhY2UgPT4gewotICAgICAgdmFyIGludGVyZmFjZUluZm8g
PSB7Ci0gICAgICAgIGludGVyZmFjZU51bWJlcjogaWZhY2UuaW50ZXJmYWNlTnVtYmVyLAotICAg
ICAgICBhbHRlcm5hdGVzOiBbXQotICAgICAgfTsKLSAgICAgIGlmYWNlLmFsdGVybmF0ZXMuZm9y
RWFjaChhbHRlcm5hdGUgPT4gewotICAgICAgICB2YXIgYWx0ZXJuYXRlSW5mbyA9IHsKLSAgICAg
ICAgICBhbHRlcm5hdGVTZXR0aW5nOiBhbHRlcm5hdGUuYWx0ZXJuYXRlU2V0dGluZywKLSAgICAg
ICAgICBjbGFzc0NvZGU6IGFsdGVybmF0ZS5pbnRlcmZhY2VDbGFzcywKLSAgICAgICAgICBzdWJj
bGFzc0NvZGU6IGFsdGVybmF0ZS5pbnRlcmZhY2VTdWJjbGFzcywKLSAgICAgICAgICBwcm90b2Nv
bENvZGU6IGFsdGVybmF0ZS5pbnRlcmZhY2VQcm90b2NvbCwKLSAgICAgICAgICBpbnRlcmZhY2VO
YW1lOiBzdHJpbmdUb01vam9TdHJpbmcxNihhbHRlcm5hdGUuaW50ZXJmYWNlTmFtZSksCi0gICAg
ICAgICAgZW5kcG9pbnRzOiBbXSwKLSAgICAgICAgICBleHRyYURhdGE6IG5ldyBVaW50OEFycmF5
KCkKLSAgICAgICAgfTsKLSAgICAgICAgYWx0ZXJuYXRlLmVuZHBvaW50cy5mb3JFYWNoKGVuZHBv
aW50ID0+IHsKLSAgICAgICAgICB2YXIgZW5kcG9pbnRJbmZvID0gewotICAgICAgICAgICAgZW5k
cG9pbnROdW1iZXI6IGVuZHBvaW50LmVuZHBvaW50TnVtYmVyLAotICAgICAgICAgICAgcGFja2V0
U2l6ZTogZW5kcG9pbnQucGFja2V0U2l6ZSwKLSAgICAgICAgICAgIHN5bmNocm9uaXphdGlvblR5
cGU6IGRldmljZS5tb2pvbS5Vc2JTeW5jaHJvbml6YXRpb25UeXBlLk5PTkUsCi0gICAgICAgICAg
ICB1c2FnZVR5cGU6IGRldmljZS5tb2pvbS5Vc2JVc2FnZVR5cGUuREFUQSwKLSAgICAgICAgICAg
IHBvbGxpbmdJbnRlcnZhbDogMCwKLSAgICAgICAgICAgIGV4dHJhRGF0YTogbmV3IFVpbnQ4QXJy
YXkoKQotICAgICAgICAgIH07Ci0gICAgICAgICAgc3dpdGNoIChlbmRwb2ludC5kaXJlY3Rpb24p
IHsKLSAgICAgICAgICBjYXNlICJpbiI6Ci0gICAgICAgICAgICBlbmRwb2ludEluZm8uZGlyZWN0
aW9uID0gZGV2aWNlLm1vam9tLlVzYlRyYW5zZmVyRGlyZWN0aW9uLklOQk9VTkQ7Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICBjYXNlICJvdXQiOgotICAgICAgICAgICAgZW5kcG9pbnRJ
bmZvLmRpcmVjdGlvbiA9IGRldmljZS5tb2pvbS5Vc2JUcmFuc2ZlckRpcmVjdGlvbi5PVVRCT1VO
RDsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIH0KLSAgICAgICAgICBzd2l0Y2ggKGVu
ZHBvaW50LnR5cGUpIHsKLSAgICAgICAgICBjYXNlICJidWxrIjoKLSAgICAgICAgICAgIGVuZHBv
aW50SW5mby50eXBlID0gZGV2aWNlLm1vam9tLlVzYlRyYW5zZmVyVHlwZS5CVUxLOwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSAiaW50ZXJydXB0IjoKLSAgICAgICAgICAgIGVu
ZHBvaW50SW5mby50eXBlID0gZGV2aWNlLm1vam9tLlVzYlRyYW5zZmVyVHlwZS5JTlRFUlJVUFQ7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNlICJpc29jaHJvbm91cyI6Ci0gICAg
ICAgICAgICBlbmRwb2ludEluZm8udHlwZSA9IGRldmljZS5tb2pvbS5Vc2JUcmFuc2ZlclR5cGUu
SVNPQ0hST05PVVM7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICB9Ci0gICAgICAgICAg
YWx0ZXJuYXRlSW5mby5lbmRwb2ludHMucHVzaChlbmRwb2ludEluZm8pOwotICAgICAgICB9KTsK
LSAgICAgICAgaW50ZXJmYWNlSW5mby5hbHRlcm5hdGVzLnB1c2goYWx0ZXJuYXRlSW5mbyk7Ci0g
ICAgICB9KTsKLSAgICAgIGNvbmZpZ0luZm8uaW50ZXJmYWNlcy5wdXNoKGludGVyZmFjZUluZm8p
OwotICAgIH0pOwotICAgIGRldmljZUluZm8uY29uZmlndXJhdGlvbnMucHVzaChjb25maWdJbmZv
KTsKLSAgfSk7Ci0gIHJldHVybiBkZXZpY2VJbmZvOwotfQotCi1mdW5jdGlvbiBjb252ZXJ0TW9q
b0RldmljZUZpbHRlcnMoaW5wdXQpIHsKLSAgbGV0IG91dHB1dCA9IFtdOwotICBpbnB1dC5mb3JF
YWNoKGZpbHRlciA9PiB7Ci0gICAgb3V0cHV0LnB1c2goY29udmVydE1vam9EZXZpY2VGaWx0ZXIo
ZmlsdGVyKSk7Ci0gIH0pOwotICByZXR1cm4gb3V0cHV0OwotfQotCi1mdW5jdGlvbiBjb252ZXJ0
TW9qb0RldmljZUZpbHRlcihpbnB1dCkgewotICBsZXQgb3V0cHV0ID0ge307Ci0gIGlmIChpbnB1
dC5oYXNWZW5kb3JJZCkKLSAgICBvdXRwdXQudmVuZG9ySWQgPSBpbnB1dC52ZW5kb3JJZDsKLSAg
aWYgKGlucHV0Lmhhc1Byb2R1Y3RJZCkKLSAgICBvdXRwdXQucHJvZHVjdElkID0gaW5wdXQucHJv
ZHVjdElkOwotICBpZiAoaW5wdXQuaGFzQ2xhc3NDb2RlKQotICAgIG91dHB1dC5jbGFzc0NvZGUg
PSBpbnB1dC5jbGFzc0NvZGU7Ci0gIGlmIChpbnB1dC5oYXNTdWJjbGFzc0NvZGUpCi0gICAgb3V0
cHV0LnN1YmNsYXNzQ29kZSA9IGlucHV0LnN1YmNsYXNzQ29kZTsKLSAgaWYgKGlucHV0Lmhhc1By
b3RvY29sQ29kZSkKLSAgICBvdXRwdXQucHJvdG9jb2xDb2RlID0gaW5wdXQucHJvdG9jb2xDb2Rl
OwotICBpZiAoaW5wdXQuc2VyaWFsTnVtYmVyKQotICAgIG91dHB1dC5zZXJpYWxOdW1iZXIgPSBt
b2pvU3RyaW5nMTZUb1N0cmluZyhpbnB1dC5zZXJpYWxOdW1iZXIpOwotICByZXR1cm4gb3V0cHV0
OwotfQotCi1jbGFzcyBGYWtlRGV2aWNlIHsKLSAgY29uc3RydWN0b3IoZGV2aWNlSW5pdCkgewot
ICAgIHRoaXMuaW5mb18gPSBkZXZpY2VJbml0OwotICAgIHRoaXMub3BlbmVkXyA9IGZhbHNlOwot
ICAgIHRoaXMuY3VycmVudENvbmZpZ3VyYXRpb25fID0gbnVsbDsKLSAgICB0aGlzLmNsYWltZWRJ
bnRlcmZhY2VzXyA9IG5ldyBNYXAoKTsKLSAgfQotCi0gIGdldENvbmZpZ3VyYXRpb24oKSB7Ci0g
ICAgaWYgKHRoaXMuY3VycmVudENvbmZpZ3VyYXRpb25fKSB7Ci0gICAgICByZXR1cm4gUHJvbWlz
ZS5yZXNvbHZlKHsKLSAgICAgICAgICB2YWx1ZTogdGhpcy5jdXJyZW50Q29uZmlndXJhdGlvbl8u
Y29uZmlndXJhdGlvblZhbHVlIH0pOwotICAgIH0gZWxzZSB7Ci0gICAgICByZXR1cm4gUHJvbWlz
ZS5yZXNvbHZlKHsgdmFsdWU6IDAgfSk7Ci0gICAgfQotICB9Ci0KLSAgb3BlbigpIHsKLSAgICBh
c3NlcnRfZmFsc2UodGhpcy5vcGVuZWRfKTsKLSAgICB0aGlzLm9wZW5lZF8gPSB0cnVlOwotICAg
IHJldHVybiBQcm9taXNlLnJlc29sdmUoeyBlcnJvcjogZGV2aWNlLm1vam9tLlVzYk9wZW5EZXZp
Y2VFcnJvci5PSyB9KTsKLSAgfQotCi0gIGNsb3NlKCkgewotICAgIGFzc2VydF90cnVlKHRoaXMu
b3BlbmVkXyk7Ci0gICAgdGhpcy5vcGVuZWRfID0gZmFsc2U7Ci0gICAgcmV0dXJuIFByb21pc2Uu
cmVzb2x2ZSgpOwotICB9Ci0KLSAgc2V0Q29uZmlndXJhdGlvbih2YWx1ZSkgewotICAgIGFzc2Vy
dF90cnVlKHRoaXMub3BlbmVkXyk7Ci0KLSAgICBsZXQgc2VsZWN0ZWRDb25maWd1cmF0aW9uID0g
dGhpcy5pbmZvXy5jb25maWd1cmF0aW9ucy5maW5kKAotICAgICAgICBjb25maWd1cmF0aW9uID0+
IGNvbmZpZ3VyYXRpb24uY29uZmlndXJhdGlvblZhbHVlID09IHZhbHVlKTsKLSAgICAvLyBCbGlu
ayBzaG91bGQgbmV2ZXIgcmVxdWVzdCBhbiBpbnZhbGlkIGNvbmZpZ3VyYXRpb24uCi0gICAgYXNz
ZXJ0X25vdF9lcXVhbHMoc2VsZWN0ZWRDb25maWd1cmF0aW9uLCB1bmRlZmluZWQpOwotICAgIHRo
aXMuY3VycmVudENvbmZpZ3VyYXRpb25fID0gc2VsZWN0ZWRDb25maWd1cmF0aW9uOwotICAgIHJl
dHVybiBQcm9taXNlLnJlc29sdmUoeyBzdWNjZXNzOiB0cnVlIH0pOwotICB9Ci0KLSAgY2xhaW1J
bnRlcmZhY2UoaW50ZXJmYWNlTnVtYmVyKSB7Ci0gICAgYXNzZXJ0X3RydWUodGhpcy5vcGVuZWRf
KTsKLSAgICBhc3NlcnRfZmFsc2UodGhpcy5jdXJyZW50Q29uZmlndXJhdGlvbl8gPT0gbnVsbCwg
J2RldmljZSBjb25maWd1cmVkJyk7Ci0gICAgYXNzZXJ0X2ZhbHNlKHRoaXMuY2xhaW1lZEludGVy
ZmFjZXNfLmhhcyhpbnRlcmZhY2VOdW1iZXIpLAotICAgICAgICAgICAgICAgICAnaW50ZXJmYWNl
IGFscmVhZHkgY2xhaW1lZCcpOwotCi0gICAgLy8gQmxpbmsgc2hvdWxkIG5ldmVyIHJlcXVlc3Qg
YW4gaW52YWxpZCBpbnRlcmZhY2UuCi0gICAgYXNzZXJ0X3RydWUodGhpcy5jdXJyZW50Q29uZmln
dXJhdGlvbl8uaW50ZXJmYWNlcy5zb21lKAotICAgICAgICAgICAgaWZhY2UgPT4gaWZhY2UuaW50
ZXJmYWNlTnVtYmVyID09IGludGVyZmFjZU51bWJlcikpOwotICAgIHRoaXMuY2xhaW1lZEludGVy
ZmFjZXNfLnNldChpbnRlcmZhY2VOdW1iZXIsIDApOwotICAgIHJldHVybiBQcm9taXNlLnJlc29s
dmUoeyBzdWNjZXNzOiB0cnVlIH0pOwotICB9Ci0KLSAgcmVsZWFzZUludGVyZmFjZShpbnRlcmZh
Y2VOdW1iZXIpIHsKLSAgICBhc3NlcnRfdHJ1ZSh0aGlzLm9wZW5lZF8pOwotICAgIGFzc2VydF9m
YWxzZSh0aGlzLmN1cnJlbnRDb25maWd1cmF0aW9uXyA9PSBudWxsLCAnZGV2aWNlIGNvbmZpZ3Vy
ZWQnKTsKLSAgICBhc3NlcnRfdHJ1ZSh0aGlzLmNsYWltZWRJbnRlcmZhY2VzXy5oYXMoaW50ZXJm
YWNlTnVtYmVyKSk7Ci0gICAgdGhpcy5jbGFpbWVkSW50ZXJmYWNlc18uZGVsZXRlKGludGVyZmFj
ZU51bWJlcik7Ci0gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh7IHN1Y2Nlc3M6IHRydWUgfSk7
Ci0gIH0KLQotICBzZXRJbnRlcmZhY2VBbHRlcm5hdGVTZXR0aW5nKGludGVyZmFjZU51bWJlciwg
YWx0ZXJuYXRlU2V0dGluZykgewotICAgIGFzc2VydF90cnVlKHRoaXMub3BlbmVkXyk7Ci0gICAg
YXNzZXJ0X2ZhbHNlKHRoaXMuY3VycmVudENvbmZpZ3VyYXRpb25fID09IG51bGwsICdkZXZpY2Ug
Y29uZmlndXJlZCcpOwotICAgIGFzc2VydF90cnVlKHRoaXMuY2xhaW1lZEludGVyZmFjZXNfLmhh
cyhpbnRlcmZhY2VOdW1iZXIpKTsKLQotICAgIGxldCBpZmFjZSA9IHRoaXMuY3VycmVudENvbmZp
Z3VyYXRpb25fLmludGVyZmFjZXMuZmluZCgKLSAgICAgICAgaWZhY2UgPT4gaWZhY2UuaW50ZXJm
YWNlTnVtYmVyID09IGludGVyZmFjZU51bWJlcik7Ci0gICAgLy8gQmxpbmsgc2hvdWxkIG5ldmVy
IHJlcXVlc3QgYW4gaW52YWxpZCBpbnRlcmZhY2Ugb3IgYWx0ZXJuYXRlLgotICAgIGFzc2VydF9m
YWxzZShpZmFjZSA9PSB1bmRlZmluZWQpOwotICAgIGFzc2VydF90cnVlKGlmYWNlLmFsdGVybmF0
ZXMuc29tZSgKLSAgICAgICAgeCA9PiB4LmFsdGVybmF0ZVNldHRpbmcgPT0gYWx0ZXJuYXRlU2V0
dGluZykpOwotICAgIHRoaXMuY2xhaW1lZEludGVyZmFjZXNfLnNldChpbnRlcmZhY2VOdW1iZXIs
IGFsdGVybmF0ZVNldHRpbmcpOwotICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoeyBzdWNjZXNz
OiB0cnVlIH0pOwotICB9Ci0KLSAgcmVzZXQoKSB7Ci0gICAgYXNzZXJ0X3RydWUodGhpcy5vcGVu
ZWRfKTsKLSAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHsgc3VjY2VzczogdHJ1ZSB9KTsKLSAg
fQotCi0gIGNsZWFySGFsdChlbmRwb2ludCkgewotICAgIGFzc2VydF90cnVlKHRoaXMub3BlbmVk
Xyk7Ci0gICAgYXNzZXJ0X2ZhbHNlKHRoaXMuY3VycmVudENvbmZpZ3VyYXRpb25fID09IG51bGws
ICdkZXZpY2UgY29uZmlndXJlZCcpOwotICAgIC8vIFRPRE8ocmVpbGx5Zyk6IEFzc2VydCB0aGF0
IGVuZHBvaW50IGlzIHZhbGlkLgotICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoeyBzdWNjZXNz
OiB0cnVlIH0pOwotICB9Ci0KLSAgYXN5bmMgY29udHJvbFRyYW5zZmVySW4ocGFyYW1zLCBsZW5n
dGgsIHRpbWVvdXQpIHsKLSAgICBhc3NlcnRfdHJ1ZSh0aGlzLm9wZW5lZF8pOwotCi0gICAgaWYg
KChwYXJhbXMucmVjaXBpZW50ID09IGRldmljZS5tb2pvbS5Vc2JDb250cm9sVHJhbnNmZXJSZWNp
cGllbnQuSU5URVJGQUNFIHx8Ci0gICAgICAgICBwYXJhbXMucmVjaXBpZW50ID09IGRldmljZS5t
b2pvbS5Vc2JDb250cm9sVHJhbnNmZXJSZWNpcGllbnQuRU5EUE9JTlQpICYmCi0gICAgICAgIHRo
aXMuY3VycmVudENvbmZpZ3VyYXRpb25fID09IG51bGwpIHsKLSAgICAgIHJldHVybiB7Ci0gICAg
ICAgIHN0YXR1czogZGV2aWNlLm1vam9tLlVzYlRyYW5zZmVyU3RhdHVzLlBFUk1JU1NJT05fREVO
SUVELAotICAgICAgfTsKLSAgICB9Ci0KLSAgICByZXR1cm4gewotICAgICAgc3RhdHVzOiBkZXZp
Y2UubW9qb20uVXNiVHJhbnNmZXJTdGF0dXMuT0ssCi0gICAgICBkYXRhOiBbbGVuZ3RoID4+IDgs
IGxlbmd0aCAmIDB4ZmYsIHBhcmFtcy5yZXF1ZXN0LCBwYXJhbXMudmFsdWUgPj4gOCwKLSAgICAg
ICAgICAgICBwYXJhbXMudmFsdWUgJiAweGZmLCBwYXJhbXMuaW5kZXggPj4gOCwgcGFyYW1zLmlu
ZGV4ICYgMHhmZl0KLSAgICB9OwotICB9Ci0KLSAgYXN5bmMgY29udHJvbFRyYW5zZmVyT3V0KHBh
cmFtcywgZGF0YSwgdGltZW91dCkgewotICAgIGFzc2VydF90cnVlKHRoaXMub3BlbmVkXyk7Ci0K
LSAgICBpZiAoKHBhcmFtcy5yZWNpcGllbnQgPT0gZGV2aWNlLm1vam9tLlVzYkNvbnRyb2xUcmFu
c2ZlclJlY2lwaWVudC5JTlRFUkZBQ0UgfHwKLSAgICAgICAgIHBhcmFtcy5yZWNpcGllbnQgPT0g
ZGV2aWNlLm1vam9tLlVzYkNvbnRyb2xUcmFuc2ZlclJlY2lwaWVudC5FTkRQT0lOVCkgJiYKLSAg
ICAgICAgdGhpcy5jdXJyZW50Q29uZmlndXJhdGlvbl8gPT0gbnVsbCkgewotICAgICAgcmV0dXJu
IHsKLSAgICAgICAgc3RhdHVzOiBkZXZpY2UubW9qb20uVXNiVHJhbnNmZXJTdGF0dXMuUEVSTUlT
U0lPTl9ERU5JRUQsCi0gICAgICB9OwotICAgIH0KLQotICAgIHJldHVybiB7Ci0gICAgICBzdGF0
dXM6IGRldmljZS5tb2pvbS5Vc2JUcmFuc2ZlclN0YXR1cy5PSywKLSAgICAgIGJ5dGVzV3JpdHRl
bjogZGF0YS5ieXRlTGVuZ3RoCi0gICAgfTsKLSAgfQotCi0gIGdlbmVyaWNUcmFuc2ZlckluKGVu
ZHBvaW50TnVtYmVyLCBsZW5ndGgsIHRpbWVvdXQpIHsKLSAgICBhc3NlcnRfdHJ1ZSh0aGlzLm9w
ZW5lZF8pOwotICAgIGFzc2VydF9mYWxzZSh0aGlzLmN1cnJlbnRDb25maWd1cmF0aW9uXyA9PSBu
dWxsLCAnZGV2aWNlIGNvbmZpZ3VyZWQnKTsKLSAgICAvLyBUT0RPKHJlaWxseWcpOiBBc3NlcnQg
dGhhdCBlbmRwb2ludCBpcyB2YWxpZC4KLSAgICBsZXQgZGF0YSA9IG5ldyBBcnJheShsZW5ndGgp
OwotICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpCi0gICAgICBkYXRhW2ldID0g
aSAmIDB4ZmY7Ci0gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh7Ci0gICAgICBzdGF0dXM6IGRl
dmljZS5tb2pvbS5Vc2JUcmFuc2ZlclN0YXR1cy5PSywKLSAgICAgIGRhdGE6IGRhdGEKLSAgICB9
KTsKLSAgfQotCi0gIGdlbmVyaWNUcmFuc2Zlck91dChlbmRwb2ludE51bWJlciwgZGF0YSwgdGlt
ZW91dCkgewotICAgIGFzc2VydF90cnVlKHRoaXMub3BlbmVkXyk7Ci0gICAgYXNzZXJ0X2ZhbHNl
KHRoaXMuY3VycmVudENvbmZpZ3VyYXRpb25fID09IG51bGwsICdkZXZpY2UgY29uZmlndXJlZCcp
OwotICAgIC8vIFRPRE8ocmVpbGx5Zyk6IEFzc2VydCB0aGF0IGVuZHBvaW50IGlzIHZhbGlkLgot
ICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoewotICAgICAgc3RhdHVzOiBkZXZpY2UubW9qb20u
VXNiVHJhbnNmZXJTdGF0dXMuT0ssCi0gICAgICBieXRlc1dyaXR0ZW46IGRhdGEuYnl0ZUxlbmd0
aAotICAgIH0pOwotICB9Ci0KLSAgaXNvY2hyb25vdXNUcmFuc2ZlckluKGVuZHBvaW50TnVtYmVy
LCBwYWNrZXRMZW5ndGhzLCB0aW1lb3V0KSB7Ci0gICAgYXNzZXJ0X3RydWUodGhpcy5vcGVuZWRf
KTsKLSAgICBhc3NlcnRfZmFsc2UodGhpcy5jdXJyZW50Q29uZmlndXJhdGlvbl8gPT0gbnVsbCwg
J2RldmljZSBjb25maWd1cmVkJyk7Ci0gICAgLy8gVE9ETyhyZWlsbHlnKTogQXNzZXJ0IHRoYXQg
ZW5kcG9pbnQgaXMgdmFsaWQuCi0gICAgbGV0IGRhdGEgPSBuZXcgQXJyYXkocGFja2V0TGVuZ3Ro
cy5yZWR1Y2UoKGEsIGIpID0+IGEgKyBiLCAwKSk7Ci0gICAgbGV0IGRhdGFPZmZzZXQgPSAwOwot
ICAgIGxldCBwYWNrZXRzID0gbmV3IEFycmF5KHBhY2tldExlbmd0aHMubGVuZ3RoKTsKLSAgICBm
b3IgKGxldCBpID0gMDsgaSA8IHBhY2tldExlbmd0aHMubGVuZ3RoOyArK2kpIHsKLSAgICAgIGZv
ciAobGV0IGogPSAwOyBqIDwgcGFja2V0TGVuZ3Roc1tpXTsgKytqKQotICAgICAgICBkYXRhW2Rh
dGFPZmZzZXQrK10gPSBqICYgMHhmZjsKLSAgICAgIHBhY2tldHNbaV0gPSB7Ci0gICAgICAgIGxl
bmd0aDogcGFja2V0TGVuZ3Roc1tpXSwKLSAgICAgICAgdHJhbnNmZXJyZWRMZW5ndGg6IHBhY2tl
dExlbmd0aHNbaV0sCi0gICAgICAgIHN0YXR1czogZGV2aWNlLm1vam9tLlVzYlRyYW5zZmVyU3Rh
dHVzLk9LCi0gICAgICB9OwotICAgIH0KLSAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHsgZGF0
YTogZGF0YSwgcGFja2V0czogcGFja2V0cyB9KTsKLSAgfQotCi0gIGlzb2Nocm9ub3VzVHJhbnNm
ZXJPdXQoZW5kcG9pbnROdW1iZXIsIGRhdGEsIHBhY2tldExlbmd0aHMsIHRpbWVvdXQpIHsKLSAg
ICBhc3NlcnRfdHJ1ZSh0aGlzLm9wZW5lZF8pOwotICAgIGFzc2VydF9mYWxzZSh0aGlzLmN1cnJl
bnRDb25maWd1cmF0aW9uXyA9PSBudWxsLCAnZGV2aWNlIGNvbmZpZ3VyZWQnKTsKLSAgICAvLyBU
T0RPKHJlaWxseWcpOiBBc3NlcnQgdGhhdCBlbmRwb2ludCBpcyB2YWxpZC4KLSAgICBsZXQgcGFj
a2V0cyA9IG5ldyBBcnJheShwYWNrZXRMZW5ndGhzLmxlbmd0aCk7Ci0gICAgZm9yIChsZXQgaSA9
IDA7IGkgPCBwYWNrZXRMZW5ndGhzLmxlbmd0aDsgKytpKSB7Ci0gICAgICBwYWNrZXRzW2ldID0g
ewotICAgICAgICBsZW5ndGg6IHBhY2tldExlbmd0aHNbaV0sCi0gICAgICAgIHRyYW5zZmVycmVk
TGVuZ3RoOiBwYWNrZXRMZW5ndGhzW2ldLAotICAgICAgICBzdGF0dXM6IGRldmljZS5tb2pvbS5V
c2JUcmFuc2ZlclN0YXR1cy5PSwotICAgICAgfTsKLSAgICB9Ci0gICAgcmV0dXJuIFByb21pc2Uu
cmVzb2x2ZSh7IHBhY2tldHM6IHBhY2tldHMgfSk7Ci0gIH0KLX0KLQotY2xhc3MgRmFrZVdlYlVz
YlNlcnZpY2UgewotICBjb25zdHJ1Y3RvcigpIHsKLSAgICB0aGlzLmJpbmRpbmdTZXRfID0gbmV3
IG1vam8uQmluZGluZ1NldChibGluay5tb2pvbS5XZWJVc2JTZXJ2aWNlKTsKLSAgICB0aGlzLmRl
dmljZXNfID0gbmV3IE1hcCgpOwotICAgIHRoaXMuZGV2aWNlc0J5R3VpZF8gPSBuZXcgTWFwKCk7
Ci0gICAgdGhpcy5jbGllbnRfID0gbnVsbDsKLSAgICB0aGlzLm5leHRHdWlkXyA9IDA7Ci0gIH0K
LQotICBhZGRCaW5kaW5nKGhhbmRsZSkgewotICAgIHRoaXMuYmluZGluZ1NldF8uYWRkQmluZGlu
Zyh0aGlzLCBoYW5kbGUpOwotICB9Ci0KLSAgYWRkRGV2aWNlKGZha2VEZXZpY2UsIGluZm8pIHsK
LSAgICBsZXQgZGV2aWNlID0gewotICAgICAgZmFrZURldmljZTogZmFrZURldmljZSwKLSAgICAg
IGd1aWQ6ICh0aGlzLm5leHRHdWlkXysrKS50b1N0cmluZygpLAotICAgICAgaW5mbzogaW5mbywK
LSAgICAgIGJpbmRpbmdBcnJheTogW10KLSAgICB9OwotICAgIHRoaXMuZGV2aWNlc18uc2V0KGZh
a2VEZXZpY2UsIGRldmljZSk7Ci0gICAgdGhpcy5kZXZpY2VzQnlHdWlkXy5zZXQoZGV2aWNlLmd1
aWQsIGRldmljZSk7Ci0gICAgaWYgKHRoaXMuY2xpZW50XykKLSAgICAgIHRoaXMuY2xpZW50Xy5v
bkRldmljZUFkZGVkKGZha2VEZXZpY2VJbml0VG9EZXZpY2VJbmZvKGRldmljZS5ndWlkLCBpbmZv
KSk7Ci0gIH0KLQotICByZW1vdmVEZXZpY2UoZmFrZURldmljZSkgewotICAgIGxldCBkZXZpY2Ug
PSB0aGlzLmRldmljZXNfLmdldChmYWtlRGV2aWNlKTsKLSAgICBpZiAoIWRldmljZSkKLSAgICAg
IHRocm93IG5ldyBFcnJvcignQ2Fubm90IHJlbW92ZSB1bmtub3duIGRldmljZS4nKTsKLQotICAg
IGZvciAodmFyIGJpbmRpbmcgb2YgZGV2aWNlLmJpbmRpbmdBcnJheSkKLSAgICAgIGJpbmRpbmcu
Y2xvc2UoKTsKLSAgICB0aGlzLmRldmljZXNfLmRlbGV0ZShkZXZpY2UuZmFrZURldmljZSk7Ci0g
ICAgdGhpcy5kZXZpY2VzQnlHdWlkXy5kZWxldGUoZGV2aWNlLmd1aWQpOwotICAgIGlmICh0aGlz
LmNsaWVudF8pIHsKLSAgICAgIHRoaXMuY2xpZW50Xy5vbkRldmljZVJlbW92ZWQoCi0gICAgICAg
ICAgZmFrZURldmljZUluaXRUb0RldmljZUluZm8oZGV2aWNlLmd1aWQsIGRldmljZS5pbmZvKSk7
Ci0gICAgfQotICB9Ci0KLSAgcmVtb3ZlQWxsRGV2aWNlcygpIHsKLSAgICB0aGlzLmRldmljZXNf
LmZvckVhY2goZGV2aWNlID0+IHsKLSAgICAgIGZvciAodmFyIGJpbmRpbmcgb2YgZGV2aWNlLmJp
bmRpbmdBcnJheSkKLSAgICAgICAgYmluZGluZy5jbG9zZSgpOwotICAgICAgdGhpcy5jbGllbnRf
Lm9uRGV2aWNlUmVtb3ZlZCgKLSAgICAgICAgICBmYWtlRGV2aWNlSW5pdFRvRGV2aWNlSW5mbyhk
ZXZpY2UuZ3VpZCwgZGV2aWNlLmluZm8pKTsKLSAgICB9KTsKLSAgICB0aGlzLmRldmljZXNfLmNs
ZWFyKCk7Ci0gICAgdGhpcy5kZXZpY2VzQnlHdWlkXy5jbGVhcigpOwotICB9Ci0KLSAgZ2V0RGV2
aWNlcygpIHsKLSAgICBsZXQgZGV2aWNlcyA9IFtdOwotICAgIHRoaXMuZGV2aWNlc18uZm9yRWFj
aChkZXZpY2UgPT4gewotICAgICAgZGV2aWNlcy5wdXNoKGZha2VEZXZpY2VJbml0VG9EZXZpY2VJ
bmZvKGRldmljZS5ndWlkLCBkZXZpY2UuaW5mbykpOwotICAgIH0pOwotICAgIHJldHVybiBQcm9t
aXNlLnJlc29sdmUoeyByZXN1bHRzOiBkZXZpY2VzIH0pOwotICB9Ci0KLSAgZ2V0RGV2aWNlKGd1
aWQsIHJlcXVlc3QpIHsKLSAgICBsZXQgcmV0cmlldmVkRGV2aWNlID0gdGhpcy5kZXZpY2VzQnlH
dWlkXy5nZXQoZ3VpZCk7Ci0gICAgaWYgKHJldHJpZXZlZERldmljZSkgewotICAgICAgbGV0IGJp
bmRpbmcgPSBuZXcgbW9qby5CaW5kaW5nKAotICAgICAgICAgIGRldmljZS5tb2pvbS5Vc2JEZXZp
Y2UsCi0gICAgICAgICAgbmV3IEZha2VEZXZpY2UocmV0cmlldmVkRGV2aWNlLmluZm8pLAotICAg
ICAgICAgIHJlcXVlc3QpOwotICAgICAgYmluZGluZy5zZXRDb25uZWN0aW9uRXJyb3JIYW5kbGVy
KCgpID0+IHsKLSAgICAgICAgaWYgKHJldHJpZXZlZERldmljZS5mYWtlRGV2aWNlLm9uY2xvc2Up
Ci0gICAgICAgICAgcmV0cmlldmVkRGV2aWNlLmZha2VEZXZpY2Uub25jbG9zZSgpOwotICAgICAg
fSk7Ci0gICAgICByZXRyaWV2ZWREZXZpY2UuYmluZGluZ0FycmF5LnB1c2goYmluZGluZyk7Ci0g
ICAgfSBlbHNlIHsKLSAgICAgIHJlcXVlc3QuY2xvc2UoKTsKLSAgICB9Ci0gIH0KLQotICBnZXRQ
ZXJtaXNzaW9uKGRldmljZUZpbHRlcnMpIHsKLSAgICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2
ZSA9PiB7Ci0gICAgICBpZiAobmF2aWdhdG9yLnVzYi50ZXN0Lm9ucmVxdWVzdGRldmljZSkgewot
ICAgICAgICBuYXZpZ2F0b3IudXNiLnRlc3Qub25yZXF1ZXN0ZGV2aWNlKAotICAgICAgICAgICAg
bmV3IFVTQkRldmljZVJlcXVlc3RFdmVudChkZXZpY2VGaWx0ZXJzLCByZXNvbHZlKSk7Ci0gICAg
ICB9IGVsc2UgewotICAgICAgICByZXNvbHZlKHsgcmVzdWx0OiBudWxsIH0pOwotICAgICAgfQot
ICAgIH0pOwotICB9Ci0KLSAgc2V0Q2xpZW50KGNsaWVudEluZm8pIHsKLSAgICB0aGlzLmNsaWVu
dF8gPSBuZXcgZGV2aWNlLm1vam9tLlVzYkRldmljZU1hbmFnZXJDbGllbnRBc3NvY2lhdGVkUHRy
KGNsaWVudEluZm8pOwotICB9Ci19Ci0KLWNsYXNzIFVTQkRldmljZVJlcXVlc3RFdmVudCB7Ci0g
IGNvbnN0cnVjdG9yKGRldmljZUZpbHRlcnMsIHJlc29sdmUpIHsKLSAgICB0aGlzLmZpbHRlcnMg
PSBjb252ZXJ0TW9qb0RldmljZUZpbHRlcnMoZGV2aWNlRmlsdGVycyk7Ci0gICAgdGhpcy5yZXNv
bHZlRnVuY18gPSByZXNvbHZlOwotICB9Ci0KLSAgcmVzcG9uZFdpdGgodmFsdWUpIHsKLSAgICAv
LyBXYWl0IHVudGlsIHx2YWx1ZXwgcmVzb2x2ZXMgKGlmIGl0IGlzIGEgUHJvbWlzZSkuIFRoaXMg
ZnVuY3Rpb24gcmV0dXJucwotICAgIC8vIG5vIHZhbHVlLgotICAgIFByb21pc2UucmVzb2x2ZSh2
YWx1ZSkudGhlbihmYWtlRGV2aWNlID0+IHsKLSAgICAgIGxldCBkZXZpY2UgPSBpbnRlcm5hbC53
ZWJVc2JTZXJ2aWNlLmRldmljZXNfLmdldChmYWtlRGV2aWNlKTsKLSAgICAgIGxldCByZXN1bHQg
PSBudWxsOwotICAgICAgaWYgKGRldmljZSkgewotICAgICAgICByZXN1bHQgPSBmYWtlRGV2aWNl
SW5pdFRvRGV2aWNlSW5mbyhkZXZpY2UuZ3VpZCwgZGV2aWNlLmluZm8pOwotICAgICAgfQotICAg
ICAgdGhpcy5yZXNvbHZlRnVuY18oeyByZXN1bHQ6IHJlc3VsdCB9KTsKLSAgICB9LCAoKSA9PiB7
Ci0gICAgICB0aGlzLnJlc29sdmVGdW5jXyh7IHJlc3VsdDogbnVsbCB9KTsKLSAgICB9KTsKLSAg
fQotfQotCi0vLyBVbmxpa2UgRmFrZURldmljZSB0aGlzIGNsYXNzIGlzIGV4cG9ydGVkIHRvIGNh
bGxlcnMgb2YgVVNCVGVzdC5hZGRGYWtlRGV2aWNlLgotY2xhc3MgRmFrZVVTQkRldmljZSB7Ci0g
IGNvbnN0cnVjdG9yKCkgewotICAgIHRoaXMub25jbG9zZSA9IG51bGw7Ci0gIH0KLQotICBkaXNj
b25uZWN0KCkgewotICAgIHNldFRpbWVvdXQoKCkgPT4gaW50ZXJuYWwud2ViVXNiU2VydmljZS5y
ZW1vdmVEZXZpY2UodGhpcyksIDApOwotICB9Ci19Ci0KLWNsYXNzIFVTQlRlc3QgewotICBjb25z
dHJ1Y3RvcigpIHsKLSAgICB0aGlzLm9ucmVxdWVzdGRldmljZSA9IHVuZGVmaW5lZDsKLSAgfQot
Ci0gIGFzeW5jIGluaXRpYWxpemUoKSB7Ci0gICAgaWYgKGludGVybmFsLmluaXRpYWxpemVkKQot
ICAgICAgcmV0dXJuOwotCi0gICAgLy8gQmUgcmVhZHkgdG8gaGFuZGxlICdSZWFkeUZvckF0dGFj
aG1lbnQnIG1lc3NhZ2UgZnJvbSBjaGlsZCBpZnJhbWVzLgotICAgIGlmICgnd2luZG93JyBpbiBz
ZWxmKSB7Ci0gICAgICBnZXRNZXNzYWdlUG9ydCh3aW5kb3cpOwotICAgIH0KLQotICAgIGludGVy
bmFsLndlYlVzYlNlcnZpY2UgPSBuZXcgRmFrZVdlYlVzYlNlcnZpY2UoKTsKLSAgICBpbnRlcm5h
bC53ZWJVc2JTZXJ2aWNlSW50ZXJjZXB0b3IgPQotICAgICAgICBuZXcgTW9qb0ludGVyZmFjZUlu
dGVyY2VwdG9yKGJsaW5rLm1vam9tLldlYlVzYlNlcnZpY2UubmFtZSk7Ci0gICAgaW50ZXJuYWwu
d2ViVXNiU2VydmljZUludGVyY2VwdG9yLm9uaW50ZXJmYWNlcmVxdWVzdCA9Ci0gICAgICAgIGUg
PT4gaW50ZXJuYWwud2ViVXNiU2VydmljZS5hZGRCaW5kaW5nKGUuaGFuZGxlKTsKLSAgICBpbnRl
cm5hbC53ZWJVc2JTZXJ2aWNlSW50ZXJjZXB0b3Iuc3RhcnQoKTsKLQotICAgIC8vIFdhaXQgZm9y
IGEgY2FsbCB0byBHZXREZXZpY2VzKCkgdG8gcGFzcyBiZXR3ZWVuIHRoZSByZW5kZXJlciBhbmQg
dGhlCi0gICAgLy8gbW9jayBpbiBvcmRlciB0byBlc3RhYmxpc2ggdGhhdCBldmVyeXRoaW5nIGlz
IHNldCB1cC4KLSAgICBhd2FpdCBuYXZpZ2F0b3IudXNiLmdldERldmljZXMoKTsKLSAgICBpbnRl
cm5hbC5pbml0aWFsaXplZCA9IHRydWU7Ci0gIH0KLQotICAvLyBSZXR1cm5zIGEgcHJvbWlzZSB0
aGF0IGlzIHJlc29sdmVkIHdoZW4gdGhlIGltcGxlbWVudGF0aW9uIG9mIHx1c2J8IGluIHRoZQot
ICAvLyBnbG9iYWwgc2NvcGUgZm9yIHxjb250ZXh0fCBpcyBjb250cm9sbGVkIGJ5IHRoZSBjdXJy
ZW50IGNvbnRleHQuCi0gIGF0dGFjaFRvQ29udGV4dChjb250ZXh0KSB7Ci0gICAgaWYgKCFpbnRl
cm5hbC5pbml0aWFsaXplZCkKLSAgICAgIHRocm93IG5ldyBFcnJvcignQ2FsbCBpbml0aWFsaXpl
KCkgYmVmb3JlIGF0dGFjaFRvQ29udGV4dCgpJyk7Ci0KLSAgICBsZXQgdGFyZ2V0ID0gY29udGV4
dC5jb25zdHJ1Y3Rvci5uYW1lID09PSAnV29ya2VyJyA/IGNvbnRleHQgOiB3aW5kb3c7Ci0gICAg
cmV0dXJuIGdldE1lc3NhZ2VQb3J0KHRhcmdldCkudGhlbigoKSA9PiB7Ci0gICAgICByZXR1cm4g
bmV3IFByb21pc2UocmVzb2x2ZSA9PiB7Ci0gICAgICAgIGludGVybmFsLm1lc3NhZ2VQb3J0Lm9u
bWVzc2FnZSA9IGNoYW5uZWxFdmVudCA9PiB7Ci0gICAgICAgICAgc3dpdGNoIChjaGFubmVsRXZl
bnQuZGF0YS50eXBlKSB7Ci0gICAgICAgICAgICBjYXNlIGJsaW5rLm1vam9tLldlYlVzYlNlcnZp
Y2UubmFtZToKLSAgICAgICAgICAgICAgaW50ZXJuYWwud2ViVXNiU2VydmljZS5hZGRCaW5kaW5n
KGNoYW5uZWxFdmVudC5kYXRhLmhhbmRsZSk7Ci0gICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgY2FzZSAnQ29tcGxldGUnOgotICAgICAgICAgICAgICByZXNvbHZlKCk7Ci0gICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgIH0KLSAgICAgICAgfTsKLSAgICAgICAgaW50ZXJuYWwu
bWVzc2FnZVBvcnQucG9zdE1lc3NhZ2UoewotICAgICAgICAgIHR5cGU6ICdBdHRhY2gnICwKLSAg
ICAgICAgICBpbnRlcmZhY2VzOiBbCi0gICAgICAgICAgICBibGluay5tb2pvbS5XZWJVc2JTZXJ2
aWNlLm5hbWUsCi0gICAgICAgICAgXX0pOwotICAgICAgfSk7Ci0gICAgfSk7Ci0gIH0KLQotICBh
ZGRGYWtlRGV2aWNlKGRldmljZUluaXQpIHsKLSAgICBpZiAoIWludGVybmFsLmluaXRpYWxpemVk
KQotICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYWxsIGluaXRpYWxpemUoKSBiZWZvcmUgYWRkRmFr
ZURldmljZSgpLicpOwotCi0gICAgLy8gfGFkZERldmljZXwgYW5kIHxyZW1vdmVEZXZpY2V8IGFy
ZSBjYWxsZWQgaW4gYSBzZXRUaW1lb3V0IGNhbGxiYWNrIHNvCi0gICAgLy8gdGhhdCB0ZXN0cyBk
byBub3QgcmVseSBvbiB0aGUgZGV2aWNlIGJlaW5nIGltbWVkaWF0ZWx5IGF2YWlsYWJsZSB3aGlj
aAotICAgIC8vIG1heSBub3QgYmUgdHJ1ZSBmb3IgYWxsIGltcGxlbWVudGF0aW9ucyBvZiB0aGlz
IHRlc3QgQVBJLgotICAgIGxldCBmYWtlRGV2aWNlID0gbmV3IEZha2VVU0JEZXZpY2UoKTsKLSAg
ICBzZXRUaW1lb3V0KAotICAgICAgICAoKSA9PiBpbnRlcm5hbC53ZWJVc2JTZXJ2aWNlLmFkZERl
dmljZShmYWtlRGV2aWNlLCBkZXZpY2VJbml0KSwgMCk7Ci0gICAgcmV0dXJuIGZha2VEZXZpY2U7
Ci0gIH0KLQotICByZXNldCgpIHsKLSAgICBpZiAoIWludGVybmFsLmluaXRpYWxpemVkKQotICAg
ICAgdGhyb3cgbmV3IEVycm9yKCdDYWxsIGluaXRpYWxpemUoKSBiZWZvcmUgcmVzZXQoKS4nKTsK
LQotICAgIC8vIFJlc2V0IHRoZSBtb2NrcyBpbiBhIHNldFRpbWVvdXQgY2FsbGJhY2sgc28gdGhh
dCB0ZXN0cyBkbyBub3QgcmVseSBvbgotICAgIC8vIHRoZSBmYWN0IHRoYXQgdGhpcyBwb2x5Zmls
bCBjYW4gZG8gdGhpcyBzeW5jaHJvbm91c2x5LgotICAgIHJldHVybiBuZXcgUHJvbWlzZShyZXNv
bHZlID0+IHsKLSAgICAgIHNldFRpbWVvdXQoKCkgPT4gewotICAgICAgICBpZiAoaW50ZXJuYWwu
bWVzc2FnZVBvcnQgIT09IG51bGwpCi0gICAgICAgICAgaW50ZXJuYWwubWVzc2FnZVBvcnQuY2xv
c2UoKTsKLSAgICAgICAgaW50ZXJuYWwubWVzc2FnZVBvcnQgPSBudWxsOwotICAgICAgICBpbnRl
cm5hbC53ZWJVc2JTZXJ2aWNlLnJlbW92ZUFsbERldmljZXMoKTsKLSAgICAgICAgcmVzb2x2ZSgp
OwotICAgICAgfSwgMCk7Ci0gICAgfSk7Ci0gIH0KLX0KLQotbmF2aWdhdG9yLnVzYi50ZXN0ID0g
bmV3IFVTQlRlc3QoKTsKLQotfSkoKTsKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2ltcG9ydGVk
L3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL3dlYnVzYi10ZXN0Lmpz
LmhlYWRlcnMgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jl
c291cmNlcy9jaHJvbWl1bS93ZWJ1c2ItdGVzdC5qcy5oZWFkZXJzCmRlbGV0ZWQgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCA2ODA1YzMyM2RmNWE5NzUyMzE2NDhiODMwZTMzY2UxODNjM2NiYmQzLi4w
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL0xheW91dFRlc3Rz
L2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL3dlYnVz
Yi10ZXN0LmpzLmhlYWRlcnMKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi1Db250ZW50LVR5
cGU6IHRleHQvamF2YXNjcmlwdDsgY2hhcnNldD11dGYtOApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVz
dHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vd2Vi
eHItdGVzdC1tYXRoLWhlbHBlci5qcyBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxh
dGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL3dlYnhyLXRlc3QtbWF0aC1oZWxwZXIuanMK
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIyYzZjMTJkMDhmZTFhNzM5ODU3YmVjMGRh
ODhlODljOGFiZmZjNjAuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAK
LS0tIGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJj
ZXMvY2hyb21pdW0vd2VieHItdGVzdC1tYXRoLWhlbHBlci5qcworKysgL2Rldi9udWxsCkBAIC0x
LDI5OCArMCwwIEBACi0ndXNlIHN0cmljdCc7Ci0KLS8vIE1hdGggaGVscGVyIC0gdXNlZCBtYWlu
bHkgaW4gaGl0IHRlc3QgaW1wbGVtZW50YXRpb24gZG9uZSBieSB3ZWJ4ci10ZXN0LmpzCi1jbGFz
cyBYUk1hdGhIZWxwZXIgewotICBzdGF0aWMgdG9TdHJpbmcocCkgewotICAgIHJldHVybiAiWyIg
KyBwLnggKyAiLCIgKyBwLnkgKyAiLCIgKyBwLnogKyAiLCIgKyBwLncgKyAiXSI7Ci0gIH0KLQot
ICBzdGF0aWMgdHJhbnNmb3JtX2J5X21hdHJpeChtYXRyaXgsIHBvaW50KSB7Ci0gICAgcmV0dXJu
IHsKLSAgICAgIHggOiBtYXRyaXhbMF0gKiBwb2ludC54ICsgbWF0cml4WzRdICogcG9pbnQueSAr
IG1hdHJpeFs4XSAqIHBvaW50LnogKyBtYXRyaXhbMTJdICogcG9pbnQudywKLSAgICAgIHkgOiBt
YXRyaXhbMV0gKiBwb2ludC54ICsgbWF0cml4WzVdICogcG9pbnQueSArIG1hdHJpeFs5XSAqIHBv
aW50LnogKyBtYXRyaXhbMTNdICogcG9pbnQudywKLSAgICAgIHogOiBtYXRyaXhbMl0gKiBwb2lu
dC54ICsgbWF0cml4WzZdICogcG9pbnQueSArIG1hdHJpeFsxMF0gKiBwb2ludC56ICsgbWF0cml4
WzE0XSAqIHBvaW50LncsCi0gICAgICB3IDogbWF0cml4WzNdICogcG9pbnQueCArIG1hdHJpeFs3
XSAqIHBvaW50LnkgKyBtYXRyaXhbMTFdICogcG9pbnQueiArIG1hdHJpeFsxNV0gKiBwb2ludC53
LAotICAgIH07Ci0gIH0KLQotICBzdGF0aWMgbmVnKHApIHsKLSAgICByZXR1cm4ge3ggOiAtcC54
LCB5IDogLXAueSwgeiA6IC1wLnosIHcgOiBwLnd9OwotICB9Ci0KLSAgc3RhdGljIHN1YihsaHMs
IHJocykgewotICAgIC8vIC53IGlzIHRyZWF0ZWQgaGVyZSBsaWtlIGFuIGVudGl0eSB0eXBlLCAx
IHNpZ25pZmllcyBwb2ludHMsIDAgc2lnbmlmaWVzIHZlY3RvcnMuCi0gICAgLy8gcG9pbnQgLSBw
b2ludCwgcG9pbnQgLSB2ZWN0b3IsIHZlY3RvciAtIHZlY3RvciBhcmUgb2ssIHZlY3RvciAtIHBv
aW50IGlzIG5vdC4KLSAgICBpZiAobGhzLncgIT0gcmhzLncgJiYgbGhzLncgPT0gMC4wKSB7Ci0g
ICAgICB0aHJvdyBuZXcgRXJyb3IoInZlY3RvciAtIHBvaW50IG5vdCBhbGxvd2VkOiAiICsgdG9T
dHJpbmcobGhzKSArICItIiArIHRvU3RyaW5nKHJocykpOwotICAgIH0KLQotICAgIHJldHVybiB7
eCA6IGxocy54IC0gcmhzLngsIHkgOiBsaHMueSAtIHJocy55LCB6IDogbGhzLnogLSByaHMueiwg
dyA6IGxocy53IC0gcmhzLnd9OwotICB9Ci0KLSAgc3RhdGljIGFkZChsaHMsIHJocykgewotICAg
IGlmIChsaHMudyA9PSByaHMudyAmJiBsaHMudyA9PSAxLjApIHsKLSAgICAgIHRocm93IG5ldyBF
cnJvcigicG9pbnQgKyBwb2ludCBub3QgYWxsb3dlZCIsIHAxLCBwMik7Ci0gICAgfQotCi0gICAg
cmV0dXJuIHt4IDogbGhzLnggKyByaHMueCwgeSA6IGxocy55ICsgcmhzLnksIHogOiBsaHMueiAr
IHJocy56LCB3IDogbGhzLncgKyByaHMud307Ci0gIH0KLQotICBzdGF0aWMgY3Jvc3MobGhzLCBy
aHMpIHsKLSAgICBpZiAobGhzLncgIT0gMC4wIHx8IHJocy53ICE9IDAuMCkgewotICAgICAgdGhy
b3cgbmV3IEVycm9yKCJjcm9zcyBwcm9kdWN0IG5vdCBhbGxvd2VkOiAiICsgdG9TdHJpbmcobGhz
KSArICJ4IiArIHRvU3RyaW5nKHJocykpOwotICAgIH0KLQotICAgIHJldHVybiB7Ci0gICAgICB4
IDogbGhzLnkgKiByaHMueiAtIGxocy56ICogcmhzLnksCi0gICAgICB5IDogbGhzLnogKiByaHMu
eCAtIGxocy54ICogcmhzLnosCi0gICAgICB6IDogbGhzLnggKiByaHMueSAtIGxocy55ICogcmhz
LngsCi0gICAgICB3IDogMAotICAgIH07Ci0gIH0KLQotICBzdGF0aWMgZG90KGxocywgcmhzKSB7
Ci0gICAgaWYgKGxocy53ICE9IDAgfHwgcmhzLncgIT0gMCkgewotICAgICAgdGhyb3cgbmV3IEVy
cm9yKCJkb3QgcHJvZHVjdCBub3QgYWxsb3dlZDogIiArIHRvU3RyaW5nKGxocykgKyAieCIgKyB0
b1N0cmluZyhyaHMpKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gbGhzLnggKiByaHMueCArIGxocy55
ICogcmhzLnkgKyBsaHMueiAqIHJocy56OwotICB9Ci0KLSAgc3RhdGljIG11bChzY2FsYXIsIHZl
Y3RvcikgewotICAgIGlmICh2ZWN0b3IudyAhPSAwKSB7Ci0gICAgICB0aHJvdyBuZXcgRXJyb3Io
InNjYWxhciAqIHZlY3RvciBub3QgYWxsb3dlZCIsIHNjYWxhciwgdmVjdG9yKTsKLSAgICB9Ci0K
LSAgICByZXR1cm4ge3ggOiB2ZWN0b3IueCAqIHNjYWxhciwgeSA6IHZlY3Rvci55ICogc2NhbGFy
LCB6IDogdmVjdG9yLnogKiBzY2FsYXIsIHcgOiB2ZWN0b3Iud307Ci0gIH0KLQotICBzdGF0aWMg
bGVuZ3RoKHZlY3RvcikgewotICAgIHJldHVybiBNYXRoLnNxcnQoWFJNYXRoSGVscGVyLmRvdCh2
ZWN0b3IsIHZlY3RvcikpOwotICB9Ci0KLSAgc3RhdGljIG5vcm1hbGl6ZSh2ZWN0b3IpIHsKLSAg
ICBjb25zdCBsID0gWFJNYXRoSGVscGVyLmxlbmd0aCh2ZWN0b3IpOwotICAgIHJldHVybiBYUk1h
dGhIZWxwZXIubXVsKDEuMC9sLCB2ZWN0b3IpOwotICB9Ci0KLSAgLy8gQWxsIHxmYWNlfCdzIHBv
aW50cyBhbmQgfHBvaW50fCBtdXN0IGJlIGNvLXBsYW5hci4KLSAgc3RhdGljIHBvaW50SW5GYWNl
KHBvaW50LCBmYWNlKSB7Ci0gICAgY29uc3Qgbm9ybWFsaXplID0gWFJNYXRoSGVscGVyLm5vcm1h
bGl6ZTsKLSAgICBjb25zdCBzdWIgPSBYUk1hdGhIZWxwZXIuc3ViOwotICAgIGNvbnN0IGxlbmd0
aCA9IFhSTWF0aEhlbHBlci5sZW5ndGg7Ci0gICAgY29uc3QgY3Jvc3MgPSBYUk1hdGhIZWxwZXIu
Y3Jvc3M7Ci0KLSAgICBsZXQgb25UaGVSaWdodCA9IG51bGw7Ci0gICAgbGV0IHByZXZpb3VzX3Bv
aW50ID0gZmFjZVtmYWNlLmxlbmd0aCAtIDFdOwotCi0gICAgLy8gfHBvaW50fCBpcyBpbiB8ZmFj
ZXwgaWYgaXQncyBvbiB0aGUgc2FtZSBzaWRlIG9mIGFsbCB0aGUgZWRnZXMuCi0gICAgZm9yIChs
ZXQgaSA9IDA7IGkgPCBmYWNlLmxlbmd0aDsgKytpKSB7Ci0gICAgICBjb25zdCBjdXJyZW50X3Bv
aW50ID0gZmFjZVtpXTsKLQotICAgICAgY29uc3QgZWRnZV9kaXJlY3Rpb24gPSBub3JtYWxpemUo
c3ViKGN1cnJlbnRfcG9pbnQsIHByZXZpb3VzX3BvaW50KSk7Ci0gICAgICBjb25zdCB0dXJuX2Rp
cmVjdGlvbiA9IG5vcm1hbGl6ZShzdWIocG9pbnQsIGN1cnJlbnRfcG9pbnQpKTsKLQotICAgICAg
Y29uc3Qgc2luX3R1cm5fYW5nbGUgPSBsZW5ndGgoY3Jvc3MoZWRnZV9kaXJlY3Rpb24sIHR1cm5f
ZGlyZWN0aW9uKSk7Ci0KLSAgICAgIGlmIChvblRoZVJpZ2h0ID09IG51bGwpIHsKLSAgICAgICAg
b25UaGVSaWdodCA9IHNpbl90dXJuX2FuZ2xlID49IDA7Ci0gICAgICB9IGVsc2UgewotICAgICAg
ICBpZiAob25UaGVSaWdodCAmJiBzaW5fdHVybl9hbmdsZSA8IDApIHJldHVybiBmYWxzZTsKLSAg
ICAgICAgaWYgKCFvblRoZVJpZ2h0ICYmIHNpbl90dXJuX2FuZ2xlID4gMCkgcmV0dXJuIGZhbHNl
OwotICAgICAgfQotCi0gICAgICBwcmV2aW91c19wb2ludCA9IGN1cnJlbnRfcG9pbnQ7Ci0gICAg
fQotCi0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLQotICBzdGF0aWMgZGV0MngyKG0wMCwgbTAxLCBt
MTAsIG0xMSkgewotICAgIHJldHVybiBtMDAgKiBtMTEgLSBtMDEgKiBtMTA7Ci0gIH0KLQotICBz
dGF0aWMgZGV0M3gzKAotICAgIG0wMCwgbTAxLCBtMDIsCi0gICAgbTEwLCBtMTEsIG0xMiwKLSAg
ICBtMjAsIG0yMSwgbTIyCi0gICl7Ci0gICAgY29uc3QgZGV0MngyID0gWFJNYXRoSGVscGVyLmRl
dDJ4MjsKLQotICAgIHJldHVybiAgICBtMDAgKiBkZXQyeDIobTExLCBtMTIsIG0yMSwgbTIyKQot
ICAgICAgICAgICAgLSBtMDEgKiBkZXQyeDIobTEwLCBtMTIsIG0yMCwgbTIyKQotICAgICAgICAg
ICAgKyBtMDIgKiBkZXQyeDIobTEwLCBtMTEsIG0yMCwgbTIxKTsKLSAgfQotCi0gIHN0YXRpYyBk
ZXQ0eDQoCi0gICAgbTAwLCBtMDEsIG0wMiwgbTAzLAotICAgIG0xMCwgbTExLCBtMTIsIG0xMywK
LSAgICBtMjAsIG0yMSwgbTIyLCBtMjMsCi0gICAgbTMwLCBtMzEsIG0zMiwgbTMzCi0gICkgewot
ICAgIGNvbnN0IGRldDN4MyA9IFhSTWF0aEhlbHBlci5kZXQzeDM7Ci0KLSAgICByZXR1cm4gIG0w
MCAqIGRldDN4MyhtMTEsIG0xMiwgbTEzLAotICAgICAgICAgICAgICAgICAgICAgICAgIG0yMSwg
bTIyLCBtMjMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgbTMxLCBtMzIsIG0zMykKLSAgICAg
ICAgICAtIG0wMSAqIGRldDN4MyhtMTAsIG0xMiwgbTEzLAotICAgICAgICAgICAgICAgICAgICAg
ICAgIG0yMCwgbTIyLCBtMjMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgbTMwLCBtMzIsIG0z
MykKLSAgICAgICAgICArIG0wMiAqIGRldDN4MyhtMTAsIG0xMSwgbTEzLAotICAgICAgICAgICAg
ICAgICAgICAgICAgIG0yMCwgbTIxLCBtMjMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgbTMw
LCBtMzEsIG0zMykKLSAgICAgICAgICAtIG0wMyAqIGRldDN4MyhtMTAsIG0xMSwgbTEyLAotICAg
ICAgICAgICAgICAgICAgICAgICAgIG0yMCwgbTIxLCBtMjIsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgbTMwLCBtMzEsIG0zMik7Ci0gIH0KLQotICBzdGF0aWMgaW52MihtKSB7Ci0gICAgLy8g
bWlqIC0gaS10aCBjb2x1bW4sIGotdGggcm93Ci0gICAgY29uc3QgbTAwID0gbVswXSwgIG0wMSA9
IG1bMV0sICBtMDIgPSBtWzJdLCAgbTAzID0gbVszXTsKLSAgICBjb25zdCBtMTAgPSBtWzRdLCAg
bTExID0gbVs1XSwgIG0xMiA9IG1bNl0sICBtMTMgPSBtWzddOwotICAgIGNvbnN0IG0yMCA9IG1b
OF0sICBtMjEgPSBtWzldLCAgbTIyID0gbVsxMF0sIG0yMyA9IG1bMTFdOwotICAgIGNvbnN0IG0z
MCA9IG1bMTJdLCBtMzEgPSBtWzEzXSwgbTMyID0gbVsxNF0sIG0zMyA9IG1bMTVdOwotCi0gICAg
Y29uc3QgZGV0ID0gZGV0NHg0KAotICAgICAgbTAwLCBtMDEsIG0wMiwgbTAzLAotICAgICAgbTEw
LCBtMTEsIG0xMiwgbTEzLAotICAgICAgbTIwLCBtMjEsIG0yMiwgbTIzLAotICAgICAgbTMwLCBt
MzEsIG0zMiwgbTMzCi0gICAgKTsKLSAgfQotCi0gIHN0YXRpYyB0cmFuc3Bvc2UobSkgewotICAg
IGNvbnN0IHJlc3VsdCA9IEFycmF5KDE2KTsKLSAgICBmb3IgKGxldCBpID0gMDsgaSA8IDQ7IGkr
KykgewotICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCA0OyBqKyspIHsKLSAgICAgICAgcmVzdWx0
W2kgKiA0ICsgal0gPSBtW2ogKiA0ICsgaV07Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiBy
ZXN1bHQ7Ci0gIH0KLQotICAvLyBJbnZlcnRzIHRoZSBtYXRyaXgsIHBvcnRlZCBmcm9tIHRyYW5z
Zm9ybWF0aW9uX21hdHJpeC5jYy4KLSAgc3RhdGljIGludmVyc2UobSkgewotICAgIGNvbnN0IGRl
dDN4MyA9IFhSTWF0aEhlbHBlci5kZXQzeDM7Ci0KLSAgICAvLyBtaWogLSBpLXRoIGNvbHVtbiwg
ai10aCByb3cKLSAgICBjb25zdCBtMDAgPSBtWzBdLCAgbTAxID0gbVsxXSwgIG0wMiA9IG1bMl0s
ICBtMDMgPSBtWzNdOwotICAgIGNvbnN0IG0xMCA9IG1bNF0sICBtMTEgPSBtWzVdLCAgbTEyID0g
bVs2XSwgIG0xMyA9IG1bN107Ci0gICAgY29uc3QgbTIwID0gbVs4XSwgIG0yMSA9IG1bOV0sICBt
MjIgPSBtWzEwXSwgbTIzID0gbVsxMV07Ci0gICAgY29uc3QgbTMwID0gbVsxMl0sIG0zMSA9IG1b
MTNdLCBtMzIgPSBtWzE0XSwgbTMzID0gbVsxNV07Ci0KLSAgICBjb25zdCBkZXQgPSBYUk1hdGhI
ZWxwZXIuZGV0NHg0KAotICAgICAgbTAwLCBtMDEsIG0wMiwgbTAzLAotICAgICAgbTEwLCBtMTEs
IG0xMiwgbTEzLAotICAgICAgbTIwLCBtMjEsIG0yMiwgbTIzLAotICAgICAgbTMwLCBtMzEsIG0z
MiwgbTMzCi0gICAgKTsKLQotICAgIGlmIChNYXRoLmFicyhkZXQpIDwgMC4wMDAxKSB7Ci0gICAg
ICByZXR1cm4gbnVsbDsKLSAgICB9Ci0KLSAgICBjb25zdCBpbnZEZXQgPSAxLjAgLyBkZXQ7Ci0g
ICAgLy8gQ2FsY3VsYXRlIGBjb21hdHJpeCAqIDEvZGV0YDoKLSAgICBjb25zdCByZXN1bHQyID0g
WwotICAgICAgLy8gRmlyc3QgY29sdW1uIChtMHIpOgotICAgICAgaW52RGV0ICogZGV0M3gzKG0x
MSwgbTEyLCBtMTMsIG0yMSwgbTIyLCBtMjMsIG0zMiwgbTMyLCBtMzMpLAotICAgICAgLWludkRl
dCAqIGRldDN4MyhtMTAsIG0xMiwgbTEzLCBtMjAsIG0yMiwgbTIzLCBtMzAsIG0zMiwgbTMzKSwK
LSAgICAgIGludkRldCAqIGRldDN4MyhtMTAsIG0xMSwgbTEzLCBtMjAsIG0yMSwgbTIzLCBtMzAs
IG0zMSwgbTMzKSwKLSAgICAgIC1pbnZEZXQgKiBkZXQzeDMobTEwLCBtMTEsIG0xMiwgbTIwLCBt
MjEsIG0yMiwgbTMwLCBtMzEsIG0zMiksCi0gICAgICAvLyBTZWNvbmQgY29sdW1uIChtMXIpOgot
ICAgICAgLWludkRldCAqIGRldDN4MyhtMDEsIG0wMiwgbTAzLCBtMjEsIG0yMiwgbTIzLCBtMzIs
IG0zMiwgbTMzKSwKLSAgICAgIGludkRldCAqIGRldDN4MyhtMDAsIG0wMiwgbTAzLCBtMjAsIG0y
MiwgbTIzLCBtMzAsIG0zMiwgbTMzKSwKLSAgICAgIC1pbnZEZXQgKiBkZXQzeDMobTAwLCBtMDEs
IG0wMywgbTIwLCBtMjEsIG0yMywgbTMwLCBtMzEsIG0zMyksCi0gICAgICBpbnZEZXQgKiBkZXQz
eDMobTAwLCBtMDEsIG0wMiwgbTIwLCBtMjEsIG0yMiwgbTMwLCBtMzEsIG0zMiksCi0gICAgICAv
LyBUaGlyZCBjb2x1bW4gKG0ycik6Ci0gICAgICBpbnZEZXQgKiBkZXQzeDMobTAxLCBtMDIsIG0w
MywgbTExLCBtMTIsIG0xMywgbTMxLCBtMzIsIG0zMyksCi0gICAgICAtaW52RGV0ICogZGV0M3gz
KG0wMCwgbTAyLCBtMDMsIG0xMCwgbTEyLCBtMTMsIG0zMCwgbTMyLCBtMzMpLAotICAgICAgaW52
RGV0ICogZGV0M3gzKG0wMCwgbTAxLCBtMDMsIG0xMCwgbTExLCBtMTMsIG0zMCwgbTMxLCBtMzMp
LAotICAgICAgLWludkRldCAqIGRldDN4MyhtMDAsIG0wMSwgbTAyLCBtMTAsIG0xMSwgbTEyLCBt
MzAsIG0zMSwgbTMyKSwKLSAgICAgIC8vIEZvdXJ0aCBjb2x1bW4gKG0zcik6Ci0gICAgICAtaW52
RGV0ICogZGV0M3gzKG0wMSwgbTAyLCBtMDMsIG0xMSwgbTEyLCBtMTMsIG0yMSwgbTIyLCBtMjMp
LAotICAgICAgaW52RGV0ICogZGV0M3gzKG0wMCwgbTAyLCBtMDMsIG0xMCwgbTEyLCBtMTMsIG0y
MCwgbTIyLCBtMjMpLAotICAgICAgLWludkRldCAqIGRldDN4MyhtMDAsIG0wMSwgbTAzLCBtMTAs
IG0xMSwgbTEzLCBtMjAsIG0yMSwgbTIzKSwKLSAgICAgIGludkRldCAqIGRldDN4MyhtMDAsIG0w
MSwgbTAyLCBtMTAsIG0xMSwgbTEyLCBtMjAsIG0yMSwgbTIyKSwKLSAgICBdOwotCi0gICAgLy8g
QWN0dWFsIGludmVyc2UgaXMgYDEvZGV0ICogdHJhbnNwb3NlZChjb21hdHJpeClgOgotICAgIHJl
dHVybiBYUk1hdGhIZWxwZXIudHJhbnNwb3NlKHJlc3VsdDIpOwotICB9Ci0KLSAgc3RhdGljIG11
bDR4NChtMSwgbTIpIHsKLSAgICBpZiAobTEgPT0gbnVsbCB8fCBtMiA9PSBudWxsKSB7Ci0gICAg
ICByZXR1cm4gbnVsbDsKLSAgICB9Ci0KLSAgICBjb25zdCByZXN1bHQgPSBBcnJheSgxNik7Ci0K
LSAgICBmb3IgKGxldCByb3cgPSAwOyByb3cgPCA0OyByb3crKykgewotICAgICAgZm9yIChsZXQg
Y29sID0gMDsgY29sIDwgNDsgY29sKyspIHsKLSAgICAgICAgcmVzdWx0WzQgKiBjb2wgKyByb3dd
ID0gMDsKLSAgICAgICAgZm9yKGxldCBpID0gMDsgaSA8IDQ7IGkrKykgewotICAgICAgICAgIHJl
c3VsdFs0ICogY29sICsgcm93XSArPSBtMVs0ICogaSArIHJvd10gKiBtMls0ICogY29sICsgaV07
Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gcmVzdWx0OwotICB9Ci0K
LSAgLy8gRGVjb21wb3NlcyBhIG1hdHJpeCwgd2l0aCB0aGUgYXNzdW1wdGlvbiB0aGF0IHRoZSBw
YXNzZWQgaW4gbWF0cml4IGlzCi0gIC8vIGEgcmlnaWQgdHJhbnNmb3JtYXRpb24gKGkuZS4gcG9z
aXRpb24gYW5kIHJvdGF0aW9uICpvbmx5KiEpLgotICAvLyBUaGUgcmVzdWx0IGlzIGFuIG9iamVj
dCB3aXRoIGBwb3NpdGlvbmAgYW5kIGBvcmllbnRhdGlvbmAga2V5cywgd2hpY2ggc2hvdWxkCi0g
IC8vIGJlIGNvbXBhdGlibGUgd2l0aCBGYWtlWFJSaWdpZFRyYW5zZm9ybUluaXQuCi0gIC8vIFRo
ZSBpbXBsZW1lbnRhdGlvbiBzaG91bGQgbWF0Y2ggdGhlIGJlaGF2aW9yIG9mIGdmeDo6VHJhbnNm
b3JtLCBidXQgYXNzdW1lcwotICAvLyB0aGF0IHNjYWxlLCBza2V3ICYgcGVyc3BlY3RpdmUgYXJl
IG5vdCBwcmVzZW50IGluIHRoZSBtYXRyaXggc28gaXQgY291bGQgYmUKLSAgLy8gc2ltcGxpZmll
ZC4KLSAgc3RhdGljIGRlY29tcG9zZVJpZ2lkVHJhbnNmb3JtKG0pIHsKLSAgICBjb25zdCBtMDAg
PSBtWzBdLCAgbTAxID0gbVsxXSwgIG0wMiA9IG1bMl0sICBtMDMgPSBtWzNdOwotICAgIGNvbnN0
IG0xMCA9IG1bNF0sICBtMTEgPSBtWzVdLCAgbTEyID0gbVs2XSwgIG0xMyA9IG1bN107Ci0gICAg
Y29uc3QgbTIwID0gbVs4XSwgIG0yMSA9IG1bOV0sICBtMjIgPSBtWzEwXSwgbTIzID0gbVsxMV07
Ci0gICAgY29uc3QgbTMwID0gbVsxMl0sIG0zMSA9IG1bMTNdLCBtMzIgPSBtWzE0XSwgbTMzID0g
bVsxNV07Ci0KLSAgICBjb25zdCBwb3NpdGlvbiA9IFttMzAsIG0zMSwgbTMyXTsKLSAgICBjb25z
dCBvcmllbnRhdGlvbiA9IFswLCAwLCAwLCAwXTsKLQotICAgIGNvbnN0IHRyYWNlID0gbTAwICsg
bTExICsgbTIyOwotICAgIGlmICh0cmFjZSA+IDApIHsKLSAgICAgIGNvbnN0IFMgPSBNYXRoLnNx
cnQodHJhY2UgKyAxKSAqIDI7Ci0gICAgICBvcmllbnRhdGlvblszXSA9IDAuMjUgKiBTOwotICAg
ICAgb3JpZW50YXRpb25bMF0gPSAobTEyIC0gbTIxKSAvIFM7Ci0gICAgICBvcmllbnRhdGlvblsx
XSA9IChtMjAgLSBtMDIpIC8gUzsKLSAgICAgIG9yaWVudGF0aW9uWzJdID0gKG0wMSAtIG0xMCkg
LyBTOwotICAgIH0gZWxzZSBpZiAobTAwID4gbTExICYmIG0wMCA+IG0yMikgewotICAgICAgY29u
c3QgUyA9IE1hdGguc3FydCgxLjAgKyBtMDAgLSBtMTEgLSBtMjIpICogMjsKLSAgICAgIG9yaWVu
dGF0aW9uWzNdID0gKG0xMiAtIG0yMSkgLyBTOwotICAgICAgb3JpZW50YXRpb25bMF0gPSAwLjI1
ICogUzsKLSAgICAgIG9yaWVudGF0aW9uWzFdID0gKG0wMSArIG0xMCkgLyBTOwotICAgICAgb3Jp
ZW50YXRpb25bMl0gPSAobTIwICsgbTAyKSAvIFM7Ci0gICAgfSBlbHNlIGlmIChtMTEgPiBtMjIp
IHsKLSAgICAgIGNvbnN0IFMgPSBNYXRoLnNxcnQoMS4wICsgbTExIC0gbTAwIC0gbTIyKSAqIDI7
Ci0gICAgICBvcmllbnRhdGlvblszXSA9IChtMjAgLSBtMDIpIC8gUzsKLSAgICAgIG9yaWVudGF0
aW9uWzBdID0gKG0wMSArIG0xMCkgLyBTOwotICAgICAgb3JpZW50YXRpb25bMV0gPSAwLjI1ICog
UzsKLSAgICAgIG9yaWVudGF0aW9uWzJdID0gKG0xMiArIG0yMSkgLyBTOwotICAgIH0gZWxzZSB7
Ci0gICAgICBjb25zdCBTID0gTWF0aC5zcXJ0KDEuMCArIG0yMiAtIG0wMCAtIG0xMSkgKiAyOwot
ICAgICAgb3JpZW50YXRpb25bM10gPSAobTAxIC0gbTEwKSAvIFM7Ci0gICAgICBvcmllbnRhdGlv
blswXSA9IChtMjAgKyBtMDIpIC8gUzsKLSAgICAgIG9yaWVudGF0aW9uWzFdID0gKG0xMiArIG0y
MSkgLyBTOwotICAgICAgb3JpZW50YXRpb25bMl0gPSAwLjI1ICogUzsKLSAgICB9Ci0KLSAgICBy
ZXR1cm4geyBwb3NpdGlvbiwgb3JpZW50YXRpb24gfTsKLSAgfQotCi0gIHN0YXRpYyBpZGVudGl0
eSgpIHsKLSAgICByZXR1cm4gWwotICAgICAgMSwgMCwgMCwgMCwKLSAgICAgIDAsIDEsIDAsIDAs
Ci0gICAgICAwLCAwLCAxLCAwLAotICAgICAgMCwgMCwgMCwgMQotICAgIF07Ci0gIH07Ci19Ci0K
LVhSTWF0aEhlbHBlci5FUFNJTE9OID0gMC4wMDE7CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9p
bXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS93ZWJ4ci10
ZXN0LW1hdGgtaGVscGVyLmpzLmhlYWRlcnMgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2Vi
LXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS93ZWJ4ci10ZXN0LW1hdGgtaGVscGVy
LmpzLmhlYWRlcnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY4MDVjMzIzZGY1YTk3
NTIzMTY0OGI4MzBlMzNjZTE4M2MzY2JiZDMuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAKLS0tIGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10
ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vd2VieHItdGVzdC1tYXRoLWhlbHBlci5qcy5oZWFkZXJz
CisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotQ29udGVudC1UeXBlOiB0ZXh0L2phdmFzY3Jp
cHQ7IGNoYXJzZXQ9dXRmLTgKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93
ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL3dlYnhyLXRlc3QuanMgYi9MYXlv
dXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1
bS93ZWJ4ci10ZXN0LmpzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZWNiMThlNTU1
NjcxMGNkN2Y5ZDRiYzZhOTJhNDE5NDlkZTcyNWMxLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwCi0tLSBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZv
cm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL3dlYnhyLXRlc3QuanMKKysrIC9kZXYvbnVsbApA
QCAtMSwxNzQ3ICswLDAgQEAKLSd1c2Ugc3RyaWN0JzsKLQotLy8gVGhpcyBwb2x5ZmlsbCBsaWJy
YXJ5IGltcGxlbWVudHMgdGhlIFdlYlhSIFRlc3QgQVBJIGFzIHNwZWNpZmllZCBoZXJlOgotLy8g
aHR0cHM6Ly9naXRodWIuY29tL2ltbWVyc2l2ZS13ZWIvd2VieHItdGVzdC1hcGkKLQotY29uc3Qg
ZGVmYXVsdE1vam9Gcm9tRmxvb3IgPSBuZXcgZ2Z4Lm1vam9tLlRyYW5zZm9ybSgpOwotZGVmYXVs
dE1vam9Gcm9tRmxvb3IubWF0cml4ID0gWzEsIDAsICAgICAwLCAwLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDAsIDEsICAgICAwLCAwLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDAsIDAsICAgICAxLCAwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAs
IC0xLjY1LCAwLCAxXTsKLWNvbnN0IGRlZmF1bHRfc3RhZ2VfcGFyYW1ldGVycyA9IHsKLSAgbW9q
b0Zyb21GbG9vcjogZGVmYXVsdE1vam9Gcm9tRmxvb3IsCi0gIGJvdW5kczogbnVsbAotfTsKLQot
ZnVuY3Rpb24gZ2V0TWF0cml4RnJvbVRyYW5zZm9ybSh0cmFuc2Zvcm0pIHsKLSAgY29uc3QgeCA9
IHRyYW5zZm9ybS5vcmllbnRhdGlvblswXTsKLSAgY29uc3QgeSA9IHRyYW5zZm9ybS5vcmllbnRh
dGlvblsxXTsKLSAgY29uc3QgeiA9IHRyYW5zZm9ybS5vcmllbnRhdGlvblsyXTsKLSAgY29uc3Qg
dyA9IHRyYW5zZm9ybS5vcmllbnRhdGlvblszXTsKLQotICBjb25zdCBtMTEgPSAxLjAgLSAyLjAg
KiAoeSAqIHkgKyB6ICogeik7Ci0gIGNvbnN0IG0yMSA9IDIuMCAqICh4ICogeSArIHogKiB3KTsK
LSAgY29uc3QgbTMxID0gMi4wICogKHggKiB6IC0geSAqIHcpOwotCi0gIGNvbnN0IG0xMiA9IDIu
MCAqICh4ICogeSAtIHogKiB3KTsKLSAgY29uc3QgbTIyID0gMS4wIC0gMi4wICogKHggKiB4ICsg
eiAqIHopOwotICBjb25zdCBtMzIgPSAyLjAgKiAoeSAqIHogKyB4ICogdyk7Ci0KLSAgY29uc3Qg
bTEzID0gMi4wICogKHggKiB6ICsgeSAqIHcpOwotICBjb25zdCBtMjMgPSAyLjAgKiAoeSAqIHog
LSB4ICogdyk7Ci0gIGNvbnN0IG0zMyA9IDEuMCAtIDIuMCAqICh4ICogeCArIHkgKiB5KTsKLQot
ICBjb25zdCBtMTQgPSB0cmFuc2Zvcm0ucG9zaXRpb25bMF07Ci0gIGNvbnN0IG0yNCA9IHRyYW5z
Zm9ybS5wb3NpdGlvblsxXTsKLSAgY29uc3QgbTM0ID0gdHJhbnNmb3JtLnBvc2l0aW9uWzJdOwot
Ci0gIC8vIENvbHVtbi1tYWpvciBsaW5lYXJpemVkIG9yZGVyIGlzIGV4cGVjdGVkLgotICByZXR1
cm4gW20xMSwgbTIxLCBtMzEsIDAsCi0gICAgICAgICAgbTEyLCBtMjIsIG0zMiwgMCwKLSAgICAg
ICAgICBtMTMsIG0yMywgbTMzLCAwLAotICAgICAgICAgIG0xNCwgbTI0LCBtMzQsIDFdOwotfQot
Ci1mdW5jdGlvbiBjb21wb3NlR0ZYVHJhbnNmb3JtKGZha2VUcmFuc2Zvcm1Jbml0KSB7Ci0gIGNv
bnN0IHRyYW5zZm9ybSA9IG5ldyBnZngubW9qb20uVHJhbnNmb3JtKCk7Ci0gIHRyYW5zZm9ybS5t
YXRyaXggPSBnZXRNYXRyaXhGcm9tVHJhbnNmb3JtKGZha2VUcmFuc2Zvcm1Jbml0KTsKLSAgcmV0
dXJuIHRyYW5zZm9ybTsKLX0KLQotY2xhc3MgQ2hyb21lWFJUZXN0IHsKLSAgY29uc3RydWN0b3Io
KSB7Ci0gICAgdGhpcy5tb2NrVlJTZXJ2aWNlXyA9IG5ldyBNb2NrVlJTZXJ2aWNlKG1vam8uZnJh
bWVJbnRlcmZhY2VzKTsKLSAgfQotCi0gIHNpbXVsYXRlRGV2aWNlQ29ubmVjdGlvbihpbml0X3Bh
cmFtcykgewotICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodGhpcy5tb2NrVlJTZXJ2aWNlXy5h
ZGRSdW50aW1lKGluaXRfcGFyYW1zKSk7Ci0gIH0KLQotICBkaXNjb25uZWN0QWxsRGV2aWNlcygp
IHsKLSAgICB0aGlzLm1vY2tWUlNlcnZpY2VfLnJlbW92ZUFsbFJ1bnRpbWVzKGRldmljZSk7Ci0g
ICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpOwotICB9Ci0KLSAgc2ltdWxhdGVVc2VyQWN0aXZh
dGlvbihjYWxsYmFjaykgewotICAgIGNvbnN0IGJ1dHRvbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1l
bnQoJ2J1dHRvbicpOwotICAgIGJ1dHRvbi50ZXh0Q29udGVudCA9ICdjbGljayB0byBjb250aW51
ZSB0ZXN0JzsKLSAgICBidXR0b24uc3R5bGUuZGlzcGxheSA9ICdibG9jayc7Ci0gICAgYnV0dG9u
LnN0eWxlLmZvbnRTaXplID0gJzIwcHgnOwotICAgIGJ1dHRvbi5zdHlsZS5wYWRkaW5nID0gJzEw
cHgnOwotICAgIGJ1dHRvbi5vbmNsaWNrID0gKCkgPT4gewotICAgICAgY2FsbGJhY2soKTsKLSAg
ICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQoYnV0dG9uKTsKLSAgICB9OwotICAgIGRvY3Vt
ZW50LmJvZHkuYXBwZW5kQ2hpbGQoYnV0dG9uKTsKLSAgICB0ZXN0X2RyaXZlci5jbGljayhidXR0
b24pOwotICB9Ci0KLSAgRGVidWcobmFtZSwgbXNnKSB7Ci0gICAgY29uc29sZS5sb2cobmV3IERh
dGUoKS50b0lTT1N0cmluZygpICsgJyBERUJVR1snICsgbmFtZSArICddICcgKyBtc2cpOwotICB9
Ci19Ci0KLS8vIE1vY2tpbmcgY2xhc3MgZGVmaW5pdGlvbnMKLQotLy8gTW9jayBzZXJ2aWNlIGlt
cGxlbWVudHMgdGhlIFZSU2VydmljZSBtb2pvIGludGVyZmFjZS4KLWNsYXNzIE1vY2tWUlNlcnZp
Y2UgewotICBjb25zdHJ1Y3RvcigpIHsKLSAgICB0aGlzLmJpbmRpbmdTZXRfID0gbmV3IG1vam8u
QmluZGluZ1NldChkZXZpY2UubW9qb20uVlJTZXJ2aWNlKTsKLSAgICB0aGlzLnJ1bnRpbWVzXyA9
IFtdOwotCi0gICAgdGhpcy5pbnRlcmNlcHRvcl8gPQotICAgICAgICBuZXcgTW9qb0ludGVyZmFj
ZUludGVyY2VwdG9yKGRldmljZS5tb2pvbS5WUlNlcnZpY2UubmFtZSk7Ci0gICAgdGhpcy5pbnRl
cmNlcHRvcl8ub25pbnRlcmZhY2VyZXF1ZXN0ID0gZSA9PgotICAgICAgICB0aGlzLmJpbmRpbmdT
ZXRfLmFkZEJpbmRpbmcodGhpcywgZS5oYW5kbGUpOwotICAgIHRoaXMuaW50ZXJjZXB0b3JfLnN0
YXJ0KCk7Ci0gIH0KLQotICAvLyBUZXN0IG1ldGhvZHMKLSAgYWRkUnVudGltZShmYWtlRGV2aWNl
SW5pdCkgewotICAgIGNvbnN0IHJ1bnRpbWUgPSBuZXcgTW9ja1J1bnRpbWUoZmFrZURldmljZUlu
aXQsIHRoaXMpOwotICAgIHRoaXMucnVudGltZXNfLnB1c2gocnVudGltZSk7Ci0KLSAgICBpZiAo
dGhpcy5jbGllbnRfKSB7Ci0gICAgICB0aGlzLmNsaWVudF8ub25EZXZpY2VDaGFuZ2VkKCk7Ci0g
ICAgfQotCi0gICAgcmV0dXJuIHJ1bnRpbWU7Ci0gIH0KLQotICByZW1vdmVBbGxSdW50aW1lcygp
IHsKLSAgICBpZiAodGhpcy5jbGllbnRfKSB7Ci0gICAgICB0aGlzLmNsaWVudF8ub25EZXZpY2VD
aGFuZ2VkKCk7Ci0gICAgfQotCi0gICAgdGhpcy5ydW50aW1lc18gPSBbXTsKLSAgfQotCi0gIHJl
bW92ZVJ1bnRpbWUoZGV2aWNlKSB7Ci0gICAgY29uc3QgaW5kZXggPSB0aGlzLnJ1bnRpbWVzXy5p
bmRleE9mKGRldmljZSk7Ci0gICAgaWYgKGluZGV4ID49IDApIHsKLSAgICAgIHRoaXMucnVudGlt
ZXNfLnNwbGljZShpbmRleCwgMSk7Ci0gICAgICBpZiAodGhpcy5jbGllbnRfKSB7Ci0gICAgICAg
IHRoaXMuY2xpZW50Xy5vbkRldmljZUNoYW5nZWQoKTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLQot
ICBzZXRDbGllbnQoY2xpZW50KSB7Ci0gICAgaWYgKHRoaXMuY2xpZW50XykgewotICAgICAgdGhy
b3cgbmV3IEVycm9yKCJzZXRDbGllbnQgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIG9uY2UiKTsKLSAg
ICB9Ci0KLSAgICB0aGlzLmNsaWVudF8gPSBjbGllbnQ7Ci0gIH0KLQotICByZXF1ZXN0U2Vzc2lv
bihzZXNzaW9uT3B0aW9ucywgd2FzX2FjdGl2YXRpb24pIHsKLSAgICBjb25zdCByZXF1ZXN0cyA9
IFtdOwotICAgIC8vIFJlcXVlc3QgYSBzZXNzaW9uIGZyb20gYWxsIHRoZSBydW50aW1lcy4KLSAg
ICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMucnVudGltZXNfLmxlbmd0aDsgaSsrKSB7Ci0gICAg
ICByZXF1ZXN0c1tpXSA9IHRoaXMucnVudGltZXNfW2ldLnJlcXVlc3RSdW50aW1lU2Vzc2lvbihz
ZXNzaW9uT3B0aW9ucyk7Ci0gICAgfQotCi0gICAgcmV0dXJuIFByb21pc2UuYWxsKHJlcXVlc3Rz
KS50aGVuKChyZXN1bHRzKSA9PiB7Ci0gICAgICAvLyBGaW5kIGFuZCByZXR1cm4gdGhlIGZpcnN0
IHN1Y2Nlc3NmdWwgcmVzdWx0LgotICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCByZXN1bHRzLmxl
bmd0aDsgaSsrKSB7Ci0gICAgICAgIGlmIChyZXN1bHRzW2ldLnNlc3Npb24pIHsKLSAgICAgICAg
ICAvLyBDb25zdHJ1Y3QgYSBkdW1teSBtZXRyaWNzIHJlY29yZGVyCi0gICAgICAgICAgY29uc3Qg
bWV0cmljc1JlY29yZGVyUHRyID0gbmV3IGRldmljZS5tb2pvbS5YUlNlc3Npb25NZXRyaWNzUmVj
b3JkZXJQdHIoKTsKLSAgICAgICAgICBjb25zdCBtZXRyaWNzUmVjb3JkZXJSZXF1ZXN0ID0gbW9q
by5tYWtlUmVxdWVzdChtZXRyaWNzUmVjb3JkZXJQdHIpOwotICAgICAgICAgIGNvbnN0IG1ldHJp
Y3NSZWNvcmRlckJpbmRpbmcgPSBuZXcgbW9qby5CaW5kaW5nKAotICAgICAgICAgICAgICBkZXZp
Y2UubW9qb20uWFJTZXNzaW9uTWV0cmljc1JlY29yZGVyLCBuZXcgTW9ja1hSU2Vzc2lvbk1ldHJp
Y3NSZWNvcmRlcigpLCBtZXRyaWNzUmVjb3JkZXJSZXF1ZXN0KTsKLQotICAgICAgICAgIGNvbnN0
IHN1Y2Nlc3MgPSB7Ci0gICAgICAgICAgICBzZXNzaW9uOiByZXN1bHRzW2ldLnNlc3Npb24sCi0g
ICAgICAgICAgICBtZXRyaWNzUmVjb3JkZXI6IG1ldHJpY3NSZWNvcmRlclB0ciwKLSAgICAgICAg
ICB9OwotCi0gICAgICAgICAgcmV0dXJuIHsKLSAgICAgICAgICAgIHJlc3VsdDogewotICAgICAg
ICAgICAgICBzdWNjZXNzIDogc3VjY2VzcywKLSAgICAgICAgICAgICAgJHRhZyA6ICAwCi0gICAg
ICAgICAgICB9Ci0gICAgICAgICAgfTsKLSAgICAgICAgfQotICAgICAgfQotCi0gICAgICAvLyBJ
ZiB0aGVyZSB3ZXJlIG5vIHN1Y2Nlc3NmdWwgcmVzdWx0cywgcmV0dXJucyBhIG51bGwgc2Vzc2lv
bi4KLSAgICAgIHJldHVybiB7Ci0gICAgICAgIHJlc3VsdDogewotICAgICAgICAgIGZhaWx1cmVS
ZWFzb24gOiBkZXZpY2UubW9qb20uUmVxdWVzdFNlc3Npb25FcnJvci5OT19SVU5USU1FX0ZPVU5E
LAotICAgICAgICAgICR0YWcgOiAgMQotICAgICAgICB9Ci0gICAgICB9OwotICAgIH0pOwotICB9
Ci0KLSAgZXhpdFByZXNlbnQoKSB7Ci0gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpOwotICB9
Ci0KLSAgc3VwcG9ydHNTZXNzaW9uKHNlc3Npb25PcHRpb25zKSB7Ci0gICAgY29uc3QgcmVxdWVz
dHMgPSBbXTsKLSAgICAvLyBDaGVjayBzdXBwb3J0cyBvbiBhbGwgdGhlIHJ1bnRpbWVzLgotICAg
IGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5ydW50aW1lc18ubGVuZ3RoOyBpKyspIHsKLSAgICAg
IHJlcXVlc3RzW2ldID0gdGhpcy5ydW50aW1lc19baV0ucnVudGltZVN1cHBvcnRzU2Vzc2lvbihz
ZXNzaW9uT3B0aW9ucyk7Ci0gICAgfQotCi0gICAgcmV0dXJuIFByb21pc2UuYWxsKHJlcXVlc3Rz
KS50aGVuKChyZXN1bHRzKSA9PiB7Ci0gICAgICAvLyBGaW5kIGFuZCByZXR1cm4gdGhlIGZpcnN0
IHN1Y2Nlc3NmdWwgcmVzdWx0LgotICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCByZXN1bHRzLmxl
bmd0aDsgaSsrKSB7Ci0gICAgICAgIGlmIChyZXN1bHRzW2ldLnN1cHBvcnRzU2Vzc2lvbikgewot
ICAgICAgICAgIHJldHVybiByZXN1bHRzW2ldOwotICAgICAgICB9Ci0gICAgICB9Ci0KLSAgICAg
IC8vIElmIHRoZXJlIHdlcmUgbm8gc3VjY2Vzc2Z1bCByZXN1bHRzLCByZXR1cm5zIGZhbHNlLgot
ICAgICAgcmV0dXJuIHtzdXBwb3J0c1Nlc3Npb246IGZhbHNlfTsKLSAgICB9KTsKLSAgfQotCi0g
IC8vIE9ubHkgaGFuZGxlcyBhc3luY2hyb25vdXMgY2FsbHMgdG8gbWFrZVhyQ29tcGF0aWJsZS4g
U3luY2hyb25vdXMgY2FsbHMgYXJlCi0gIC8vIG5vdCBzdXBwb3J0ZWQgaW4gSmF2YXNjcmlwdC4K
LSAgbWFrZVhyQ29tcGF0aWJsZSgpIHsKLSAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHsKLSAg
ICAgIHhyX2NvbXBhdGlibGVfcmVzdWx0OiBkZXZpY2UubW9qb20uWHJDb21wYXRpYmxlUmVzdWx0
LmtBbHJlYWR5Q29tcGF0aWJsZQotICAgIH0pOwotICB9Ci19Ci0KLWNsYXNzIEZha2VYUkFuY2hv
ckNvbnRyb2xsZXIgewotICBjb25zdHJ1Y3RvcigpIHsKLSAgICAvLyBQcml2YXRlIHByb3BlcnRp
ZXMuCi0gICAgdGhpcy5kZXZpY2VfID0gbnVsbDsKLSAgICB0aGlzLmlkXyA9IG51bGw7Ci0gICAg
dGhpcy5kaXJ0eV8gPSB0cnVlOwotCi0gICAgLy8gUHJvcGVydGllcyBiYWNraW5nIHVwIHB1Ymxp
YyBhdHRyaWJ1dGVzIC8gbWV0aG9kcy4KLSAgICB0aGlzLmRlbGV0ZWRfID0gZmFsc2U7Ci0gICAg
dGhpcy5wYXVzZWRfID0gZmFsc2U7Ci0gICAgdGhpcy5hbmNob3JPcmlnaW5fID0gWFJNYXRoSGVs
cGVyLmlkZW50aXR5KCk7Ci0gIH0KLQotICBnZXQgZGVsZXRlZCgpIHsKLSAgICByZXR1cm4gdGhp
cy5kZWxldGVkXzsKLSAgfQotCi0gIHBhdXNlVHJhY2tpbmcoKSB7Ci0gICAgaWYoIXRoaXMucGF1
c2VkXykgewotICAgICAgdGhpcy5wYXVzZWRfID0gdHJ1ZTsKLSAgICAgIHRoaXMuZGlydHlfID0g
dHJ1ZTsKLSAgICB9Ci0gIH0KLQotICByZXN1bWVUcmFja2luZygpIHsKLSAgICBpZih0aGlzLnBh
dXNlZF8pIHsKLSAgICAgIHRoaXMucGF1c2VkXyA9IGZhbHNlOwotICAgICAgdGhpcy5kaXJ0eV8g
PSB0cnVlOwotICAgIH0KLSAgfQotCi0gIHN0b3BUcmFja2luZygpIHsKLSAgICBpZighdGhpcy5k
ZWxldGVkXykgewotICAgICAgdGhpcy5kZXZpY2VfLmRlbGV0ZUFuY2hvckNvbnRyb2xsZXIodGhp
cy5pZF8pOwotCi0gICAgICB0aGlzLmRlbGV0ZWRfID0gdHJ1ZTsKLSAgICAgIHRoaXMuZGlydHlf
ID0gdHJ1ZTsKLSAgICB9Ci0gIH0KLQotICBzZXRBbmNob3JPcmlnaW4oYW5jaG9yT3JpZ2luKSB7
Ci0gICAgdGhpcy5hbmNob3JPcmlnaW5fID0gZ2V0TWF0cml4RnJvbVRyYW5zZm9ybShhbmNob3JP
cmlnaW4pOwotICAgIHRoaXMuZGlydHlfID0gdHJ1ZTsKLSAgfQotCi0gIC8vIEludGVybmFsIGlt
cGxlbWVudGF0aW9uOgotICBzZXQgaWQodmFsdWUpIHsKLSAgICB0aGlzLmlkXyA9IHZhbHVlOwot
ICB9Ci0KLSAgc2V0IGRldmljZSh2YWx1ZSkgewotICAgIHRoaXMuZGV2aWNlXyA9IHZhbHVlOwot
ICB9Ci0KLSAgZ2V0IGRpcnR5KCkgewotICAgIHJldHVybiB0aGlzLmRpcnR5XzsKLSAgfQotCi0g
IGdldCBwYXVzZWQoKSB7Ci0gICAgcmV0dXJuIHRoaXMucGF1c2VkXzsKLSAgfQotCi0gIG1hcmtQ
cm9jZXNzZWQoKSB7Ci0gICAgdGhpcy5kaXJ0eV8gPSBmYWxzZTsKLSAgfQotCi0gIGdldEFuY2hv
ck9yaWdpbigpIHsKLSAgICByZXR1cm4gdGhpcy5hbmNob3JPcmlnaW5fOwotICB9Ci19Ci0KLS8v
IEltcGxlbWVudHMgWFJGcmFtZURhdGFQcm92aWRlciBhbmQgWFJQcmVzZW50YXRpb25Qcm92aWRl
ci4gTWFpbnRhaW5zIGEgbW9jawotLy8gZm9yIFhSUHJlc2VudGF0aW9uUHJvdmlkZXIuIEltcGxl
bWVudHMgRmFrZVhSRGV2aWNlIHRlc3QgQVBJLgotY2xhc3MgTW9ja1J1bnRpbWUgewotICAvLyBN
YXBwaW5nIGZyb20gc3RyaW5nIGZlYXR1cmUgbmFtZXMgdG8gdGhlIGNvcnJlc3BvbmRpbmcgbW9q
byB0eXBlcy4KLSAgLy8gVGhpcyBpcyBleHBvc2VkIGFzIGEgbWVtYmVyIGZvciBleHRlbnNpYmls
aXR5LgotICBzdGF0aWMgZmVhdHVyZVRvTW9qb01hcCA9IHsKLSAgICAndmlld2VyJzogZGV2aWNl
Lm1vam9tLlhSU2Vzc2lvbkZlYXR1cmUuUkVGX1NQQUNFX1ZJRVdFUiwKLSAgICAnbG9jYWwnOiBk
ZXZpY2UubW9qb20uWFJTZXNzaW9uRmVhdHVyZS5SRUZfU1BBQ0VfTE9DQUwsCi0gICAgJ2xvY2Fs
LWZsb29yJzogZGV2aWNlLm1vam9tLlhSU2Vzc2lvbkZlYXR1cmUuUkVGX1NQQUNFX0xPQ0FMX0ZM
T09SLAotICAgICdib3VuZGVkLWZsb29yJzogZGV2aWNlLm1vam9tLlhSU2Vzc2lvbkZlYXR1cmUu
UkVGX1NQQUNFX0JPVU5ERURfRkxPT1IsCi0gICAgJ3VuYm91bmRlZCc6IGRldmljZS5tb2pvbS5Y
UlNlc3Npb25GZWF0dXJlLlJFRl9TUEFDRV9VTkJPVU5ERUQsCi0gICAgJ2hpdC10ZXN0JzogZGV2
aWNlLm1vam9tLlhSU2Vzc2lvbkZlYXR1cmUuSElUX1RFU1QsCi0gICAgJ2RvbS1vdmVybGF5Jzog
ZGV2aWNlLm1vam9tLlhSU2Vzc2lvbkZlYXR1cmUuRE9NX09WRVJMQVksCi0gICAgJ2xpZ2h0LWVz
dGltYXRpb24nOiBkZXZpY2UubW9qb20uWFJTZXNzaW9uRmVhdHVyZS5MSUdIVF9FU1RJTUFUSU9O
LAotICAgICdhbmNob3JzJzogZGV2aWNlLm1vam9tLlhSU2Vzc2lvbkZlYXR1cmUuQU5DSE9SUywK
LSAgfTsKLQotICBzdGF0aWMgc2Vzc2lvbk1vZGVUb01vam9NYXAgPSB7Ci0gICAgImlubGluZSI6
IGRldmljZS5tb2pvbS5YUlNlc3Npb25Nb2RlLmtJbmxpbmUsCi0gICAgImltbWVyc2l2ZS12ciI6
IGRldmljZS5tb2pvbS5YUlNlc3Npb25Nb2RlLmtJbW1lcnNpdmVWciwKLSAgICAiaW1tZXJzaXZl
LWFyIjogZGV2aWNlLm1vam9tLlhSU2Vzc2lvbk1vZGUua0ltbWVyc2l2ZUFyLAotICB9OwotCi0g
IGNvbnN0cnVjdG9yKGZha2VEZXZpY2VJbml0LCBzZXJ2aWNlKSB7Ci0gICAgdGhpcy5zZXNzaW9u
Q2xpZW50XyA9IG5ldyBkZXZpY2UubW9qb20uWFJTZXNzaW9uQ2xpZW50UHRyKCk7Ci0gICAgdGhp
cy5wcmVzZW50YXRpb25fcHJvdmlkZXJfID0gbmV3IE1vY2tYUlByZXNlbnRhdGlvblByb3ZpZGVy
KCk7Ci0KLSAgICB0aGlzLnBvc2VfID0gbnVsbDsKLSAgICB0aGlzLm5leHRfZnJhbWVfaWRfID0g
MDsKLSAgICB0aGlzLmJvdW5kc18gPSBudWxsOwotICAgIHRoaXMuc2VuZF9tb2pvX3NwYWNlX3Jl
c2V0XyA9IGZhbHNlOwotICAgIHRoaXMuc3RhZ2VQYXJhbWV0ZXJzXyA9IG51bGw7Ci0gICAgdGhp
cy5zdGFnZVBhcmFtZXRlcnNVcGRhdGVkXyA9IGZhbHNlOwotCi0gICAgdGhpcy5zZXJ2aWNlXyA9
IHNlcnZpY2U7Ci0KLSAgICB0aGlzLmZyYW1lc09mUmVmZXJlbmNlID0ge307Ci0KLSAgICB0aGlz
LmlucHV0X3NvdXJjZXNfID0gbmV3IE1hcCgpOwotICAgIHRoaXMubmV4dF9pbnB1dF9zb3VyY2Vf
aW5kZXhfID0gMTsKLQotICAgIC8vIEN1cnJlbnRseSBhY3RpdmUgaGl0IHRlc3Qgc3Vic2NyaXB0
b25zLgotICAgIHRoaXMuaGl0VGVzdFN1YnNjcmlwdGlvbnNfID0gbmV3IE1hcCgpOwotICAgIC8v
IEN1cnJlbnRseSBhY3RpdmUgdHJhbnNpZW50IGhpdCB0ZXN0IHN1YnNjcmlwdGlvbnMuCi0gICAg
dGhpcy50cmFuc2llbnRIaXRUZXN0U3Vic2NyaXB0aW9uc18gPSBuZXcgTWFwKCk7Ci0gICAgLy8g
SUQgb2YgdGhlIG5leHQgc3Vic2NyaXB0aW9uIHRvIGJlIGFzc2lnbmVkLgotICAgIHRoaXMubmV4
dF9oaXRfdGVzdF9pZF8gPSAxOwotCi0gICAgdGhpcy5hbmNob3JfY29udHJvbGxlcnNfID0gbmV3
IE1hcCgpOwotICAgIC8vIElEIG9mIHRoZSBuZXh0IGFuY2hvciB0byBiZSBhc3NpZ25lZC4KLSAg
ICB0aGlzLm5leHRfYW5jaG9yX2lkXyA9IDE7Ci0gICAgLy8gQW5jaG9yIGNyZWF0aW9uIGNhbGxi
YWNrIChpbml0aWFsbHkgbnVsbCwgY2FuIGJlIHNldCBieSB0ZXN0cykuCi0gICAgdGhpcy5hbmNo
b3JfY3JlYXRpb25fY2FsbGJhY2tfID0gbnVsbDsKLQotICAgIGxldCBzdXBwb3J0ZWRNb2RlcyA9
IFtdOwotICAgIGlmIChmYWtlRGV2aWNlSW5pdC5zdXBwb3J0ZWRNb2RlcykgewotICAgICAgc3Vw
cG9ydGVkTW9kZXMgPSBmYWtlRGV2aWNlSW5pdC5zdXBwb3J0ZWRNb2Rlcy5zbGljZSgpOwotICAg
ICAgaWYgKGZha2VEZXZpY2VJbml0LnN1cHBvcnRlZE1vZGVzLmxlbmd0aCA9PT0gMCkgewotICAg
ICAgICBzdXBwb3J0ZWRNb2RlcyA9IFsiaW5saW5lIl07Ci0gICAgICB9Ci0gICAgfSBlbHNlIHsK
LSAgICAgIC8vIEJhY2stY29tcGF0IG1vZGUuCi0gICAgICBjb25zb2xlLndhcm4oIlBsZWFzZSB1
c2UgYHN1cHBvcnRlZE1vZGVzYCB0byBzaWduYWwgd2hpY2ggbW9kZXMgYXJlIHN1cHBvcnRlZCBi
eSB0aGlzIGRldmljZS4iKTsKLSAgICAgIGlmIChmYWtlRGV2aWNlSW5pdC5zdXBwb3J0c0ltbWVy
c2l2ZSA9PSBudWxsKSB7Ci0gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoIidzdXBwb3J0c0lt
bWVyc2l2ZScgbXVzdCBiZSBzZXQiKTsKLSAgICAgIH0KLQotICAgICAgc3VwcG9ydGVkTW9kZXMg
PSBbImlubGluZSJdOwotICAgICAgaWYgKGZha2VEZXZpY2VJbml0LnN1cHBvcnRzSW1tZXJzaXZl
KSB7Ci0gICAgICAgIHN1cHBvcnRlZE1vZGVzLnB1c2goImltbWVyc2l2ZS12ciIpOwotICAgICAg
fQotICAgIH0KLQotICAgIHRoaXMuc3VwcG9ydGVkTW9kZXNfID0gdGhpcy5fY29udmVydE1vZGVz
VG9FbnVtKHN1cHBvcnRlZE1vZGVzKTsKLQotICAgIC8vIEluaXRpYWxpemUgRGlzcGxheUluZm8g
Zmlyc3QgdG8gc2V0IHRoZSBkZWZhdWx0cywgdGhlbiBvdmVycmlkZSB3aXRoCi0gICAgLy8gYW55
dGhpbmcgZnJvbSB0aGUgZGV2aWNlSW5pdAotICAgIGlmICh0aGlzLnN1cHBvcnRlZE1vZGVzXy5p
bmNsdWRlcyhkZXZpY2UubW9qb20uWFJTZXNzaW9uTW9kZS5rSW1tZXJzaXZlVnIpCi0gICAgIHx8
IHRoaXMuc3VwcG9ydGVkTW9kZXNfLmluY2x1ZGVzKGRldmljZS5tb2pvbS5YUlNlc3Npb25Nb2Rl
LmtJbW1lcnNpdmVBcikpIHsKLSAgICAgIHRoaXMuZGlzcGxheUluZm9fID0gdGhpcy5nZXRJbW1l
cnNpdmVEaXNwbGF5SW5mbygpOwotICAgIH0gZWxzZSBpZiAodGhpcy5zdXBwb3J0ZWRNb2Rlc18u
aW5jbHVkZXMoZGV2aWNlLm1vam9tLlhSU2Vzc2lvbk1vZGUua0lubGluZSkpIHsKLSAgICAgIHRo
aXMuZGlzcGxheUluZm9fID0gdGhpcy5nZXROb25JbW1lcnNpdmVEaXNwbGF5SW5mbygpOwotICAg
IH0gZWxzZSB7Ci0gICAgICAvLyBUaGlzIHNob3VsZCBuZXZlciBoYXBwZW4hCi0gICAgICBjb25z
b2xlLmVycm9yKCJEZXZpY2UgaGFzIGVtcHR5IHN1cHBvcnRlZCBtb2RlcyBhcnJheSEiKTsKLSAg
ICAgIHRocm93IG5ldyBJbnZhbGlkU3RhdGVFcnJvcigpOwotICAgIH0KLQotICAgIGlmIChmYWtl
RGV2aWNlSW5pdC52aWV3ZXJPcmlnaW4gIT0gbnVsbCkgewotICAgICAgdGhpcy5zZXRWaWV3ZXJP
cmlnaW4oZmFrZURldmljZUluaXQudmlld2VyT3JpZ2luKTsKLSAgICB9Ci0KLSAgICBpZiAoZmFr
ZURldmljZUluaXQuZmxvb3JPcmlnaW4gIT0gbnVsbCkgewotICAgICAgdGhpcy5zZXRGbG9vck9y
aWdpbihmYWtlRGV2aWNlSW5pdC5mbG9vck9yaWdpbik7Ci0gICAgfQotCi0gICAgaWYgKGZha2VE
ZXZpY2VJbml0LndvcmxkKSB7Ci0gICAgICB0aGlzLndvcmxkXyA9IGZha2VEZXZpY2VJbml0Lndv
cmxkOwotICAgIH0KLQotICAgIC8vIFRoaXMgYXBwcm9wcmlhdGVseSBoYW5kbGVzIGlmIHRoZSBj
b29yZGluYXRlcyBhcmUgbnVsbAotICAgIHRoaXMuc2V0Qm91bmRzR2VvbWV0cnkoZmFrZURldmlj
ZUluaXQuYm91bmRzQ29vcmRpbmF0ZXMpOwotCi0gICAgdGhpcy5zZXRWaWV3cyhmYWtlRGV2aWNl
SW5pdC52aWV3cyk7Ci0KLSAgICAvLyBOZWVkIHRvIHN1cHBvcnQgd2ViVlIgd2hpY2ggZG9lc24n
dCBoYXZlIGEgbm90aW9uIG9mIGZlYXR1cmVzCi0gICAgdGhpcy5zZXRGZWF0dXJlcyhmYWtlRGV2
aWNlSW5pdC5zdXBwb3J0ZWRGZWF0dXJlcyB8fCBbXSk7Ci0gIH0KLQotICBfY29udmVydE1vZGVU
b0VudW0oc2Vzc2lvbk1vZGUpIHsKLSAgICBpZiAoc2Vzc2lvbk1vZGUgaW4gTW9ja1J1bnRpbWUu
c2Vzc2lvbk1vZGVUb01vam9NYXApIHsKLSAgICAgIHJldHVybiBNb2NrUnVudGltZS5zZXNzaW9u
TW9kZVRvTW9qb01hcFtzZXNzaW9uTW9kZV07Ci0gICAgfQotCi0gICAgdGhyb3cgbmV3IFR5cGVF
cnJvcigiVW5yZWNvZ25pemVkIHZhbHVlIGZvciBYUlNlc3Npb25Nb2RlIGVudW06ICIgKyBzZXNz
aW9uTW9kZSk7Ci0gIH0KLQotICBfY29udmVydE1vZGVzVG9FbnVtKHNlc3Npb25Nb2Rlcykgewot
ICAgIHJldHVybiBzZXNzaW9uTW9kZXMubWFwKG1vZGUgPT4gdGhpcy5fY29udmVydE1vZGVUb0Vu
dW0obW9kZSkpOwotICB9Ci0KLSAgLy8gVGVzdCBBUEkgbWV0aG9kcy4KLSAgZGlzY29ubmVjdCgp
IHsKLSAgICB0aGlzLnNlcnZpY2VfLnJlbW92ZVJ1bnRpbWUodGhpcyk7Ci0gICAgdGhpcy5wcmVz
ZW50YXRpb25fcHJvdmlkZXJfLkNsb3NlKCk7Ci0gICAgaWYgKHRoaXMuc2Vzc2lvbkNsaWVudF8u
cHRyLmlzQm91bmQoKSkgewotICAgICAgdGhpcy5zZXNzaW9uQ2xpZW50Xy5wdHIucmVzZXQoKTsK
LSAgICB9Ci0KLSAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7Ci0gIH0KLQotICBzZXRWaWV3
cyh2aWV3cykgewotICAgIGlmICh2aWV3cykgewotICAgICAgbGV0IGNoYW5nZWQgPSBmYWxzZTsK
LSAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdmlld3MubGVuZ3RoOyBpKyspIHsKLSAgICAgICAg
aWYgKHZpZXdzW2ldLmV5ZSA9PSAnbGVmdCcpIHsKLSAgICAgICAgICB0aGlzLmRpc3BsYXlJbmZv
Xy5sZWZ0RXllID0gdGhpcy5nZXRFeWUodmlld3NbaV0pOwotICAgICAgICAgIGNoYW5nZWQgPSB0
cnVlOwotICAgICAgICB9IGVsc2UgaWYgKHZpZXdzW2ldLmV5ZSA9PSAncmlnaHQnKSB7Ci0gICAg
ICAgICAgdGhpcy5kaXNwbGF5SW5mb18ucmlnaHRFeWUgPSB0aGlzLmdldEV5ZSh2aWV3c1tpXSk7
Ci0gICAgICAgICAgY2hhbmdlZCA9IHRydWU7Ci0gICAgICAgIH0KLSAgICAgIH0KLQotICAgICAg
aWYgKGNoYW5nZWQgJiYgdGhpcy5zZXNzaW9uQ2xpZW50Xy5wdHIuaXNCb3VuZCgpKSB7Ci0gICAg
ICAgIHRoaXMuc2Vzc2lvbkNsaWVudF8ub25DaGFuZ2VkKHRoaXMuZGlzcGxheUluZm9fKTsKLSAg
ICAgIH0KLSAgICB9Ci0gIH0KLQotICBzZXRWaWV3ZXJPcmlnaW4ob3JpZ2luLCBlbXVsYXRlZFBv
c2l0aW9uID0gZmFsc2UpIHsKLSAgICBjb25zdCBwID0gb3JpZ2luLnBvc2l0aW9uOwotICAgIGNv
bnN0IHEgPSBvcmlnaW4ub3JpZW50YXRpb247Ci0gICAgdGhpcy5wb3NlXyA9IHsKLSAgICAgIG9y
aWVudGF0aW9uOiB7IHg6IHFbMF0sIHk6IHFbMV0sIHo6IHFbMl0sIHc6IHFbM10gfSwKLSAgICAg
IHBvc2l0aW9uOiB7IHg6IHBbMF0sIHk6IHBbMV0sIHo6IHBbMl0gfSwKLSAgICAgIGVtdWxhdGVk
UG9zaXRpb246IGVtdWxhdGVkUG9zaXRpb24sCi0gICAgICBhbmd1bGFyVmVsb2NpdHk6IG51bGws
Ci0gICAgICBsaW5lYXJWZWxvY2l0eTogbnVsbCwKLSAgICAgIGFuZ3VsYXJBY2NlbGVyYXRpb246
IG51bGwsCi0gICAgICBsaW5lYXJBY2NlbGVyYXRpb246IG51bGwsCi0gICAgICBpbnB1dFN0YXRl
OiBudWxsLAotICAgICAgcG9zZUluZGV4OiAwCi0gICAgfTsKLSAgfQotCi0gIGNsZWFyVmlld2Vy
T3JpZ2luKCkgewotICAgIHRoaXMucG9zZV8gPSBudWxsOwotICB9Ci0KLSAgc2ltdWxhdGVWaXNp
YmlsaXR5Q2hhbmdlKHZpc2liaWxpdHlTdGF0ZSkgewotICAgIGxldCBtb2pvU3RhdGUgPSBudWxs
OwotICAgIHN3aXRjaCAodmlzaWJpbGl0eVN0YXRlKSB7Ci0gICAgICBjYXNlICJ2aXNpYmxlIjoK
LSAgICAgICAgbW9qb1N0YXRlID0gZGV2aWNlLm1vam9tLlhSVmlzaWJpbGl0eVN0YXRlLlZJU0lC
TEU7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSAidmlzaWJsZS1ibHVycmVkIjoKLSAgICAg
ICAgbW9qb1N0YXRlID0gZGV2aWNlLm1vam9tLlhSVmlzaWJpbGl0eVN0YXRlLlZJU0lCTEVfQkxV
UlJFRDsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlICJoaWRkZW4iOgotICAgICAgICBtb2pv
U3RhdGUgPSBkZXZpY2UubW9qb20uWFJWaXNpYmlsaXR5U3RhdGUuSElEREVOOwotICAgICAgICBi
cmVhazsKLSAgICB9Ci0gICAgaWYgKG1vam9TdGF0ZSkgewotICAgICAgdGhpcy5zZXNzaW9uQ2xp
ZW50Xy5vblZpc2liaWxpdHlTdGF0ZUNoYW5nZWQobW9qb1N0YXRlKTsKLSAgICB9Ci0gIH0KLQot
ICBzZXRCb3VuZHNHZW9tZXRyeShib3VuZHMpIHsKLSAgICBpZiAoYm91bmRzID09IG51bGwpIHsK
LSAgICAgIHRoaXMuYm91bmRzXyA9IG51bGw7Ci0gICAgfSBlbHNlIGlmIChib3VuZHMubGVuZ3Ro
IDwgMykgewotICAgICAgdGhyb3cgbmV3IEVycm9yKCJCb3VuZHMgbXVzdCBoYXZlIGEgbGVuZ3Ro
IG9mIGF0IGxlYXN0IDMiKTsKLSAgICB9IGVsc2UgewotICAgICAgdGhpcy5ib3VuZHNfID0gYm91
bmRzOwotICAgIH0KLQotICAgIC8vIFdlIGNhbiBvbmx5IHNldCBib3VuZHMgaWYgd2UgaGF2ZSBz
dGFnZVBhcmFtZXRlcnMgc2V0OyBvdGhlcndpc2UsIHdlCi0gICAgLy8gZG9uJ3Qga25vdyB0aGUg
dHJhbnNmb3JtIGZyb20gbG9jYWwgc3BhY2UgdG8gYm91bmRzIHNwYWNlLgotICAgIC8vIFdlJ2xs
IGNhY2hlIHRoZSBib3VuZHMgc28gdGhhdCB0aGV5IGNhbiBiZSBzZXQgaW4gdGhlIGZ1dHVyZSBp
ZiB0aGUKLSAgICAvLyBmbG9vckxldmVsIHRyYW5zZm9ybSBpcyBzZXQsIGJ1dCB3ZSB3b24ndCB1
cGRhdGUgdGhlbSBqdXN0IHlldC4KLSAgICBpZiAodGhpcy5zdGFnZVBhcmFtZXRlcnNfKSB7Ci0g
ICAgICB0aGlzLnN0YWdlUGFyYW1ldGVyc18uYm91bmRzID0gdGhpcy5ib3VuZHNfOwotICAgICAg
dGhpcy5vblN0YWdlUGFyYW1ldGVyc1VwZGF0ZWQoKTsKLSAgICB9Ci0gIH0KLQotICBzZXRGbG9v
ck9yaWdpbihmbG9vck9yaWdpbikgewotICAgIGlmICghdGhpcy5zdGFnZVBhcmFtZXRlcnNfKSB7
Ci0gICAgICB0aGlzLnN0YWdlUGFyYW1ldGVyc18gPSBkZWZhdWx0X3N0YWdlX3BhcmFtZXRlcnM7
Ci0gICAgICB0aGlzLnN0YWdlUGFyYW1ldGVyc18uYm91bmRzID0gdGhpcy5ib3VuZHNfOwotICAg
IH0KLQotICAgIHRoaXMuc3RhZ2VQYXJhbWV0ZXJzXy5tb2pvRnJvbUZsb29yID0gbmV3IGdmeC5t
b2pvbS5UcmFuc2Zvcm0oKTsKLQotICAgIC8vIGZsb29yT3JpZ2luIGlzIHBhc3NlZCBpbiBhcyBt
b2pvRnJvbUZsb29yLgotICAgIHRoaXMuc3RhZ2VQYXJhbWV0ZXJzXy5tb2pvRnJvbUZsb29yLm1h
dHJpeCA9Ci0gICAgICBnZXRNYXRyaXhGcm9tVHJhbnNmb3JtKGZsb29yT3JpZ2luKTsKLQotICAg
IHRoaXMub25TdGFnZVBhcmFtZXRlcnNVcGRhdGVkKCk7Ci0gIH0KLQotICBjbGVhckZsb29yT3Jp
Z2luKCkgewotICAgIGlmICh0aGlzLnN0YWdlUGFyYW1ldGVyc18pIHsKLSAgICAgIHRoaXMuc3Rh
Z2VQYXJhbWV0ZXJzXyA9IG51bGw7Ci0gICAgICB0aGlzLm9uU3RhZ2VQYXJhbWV0ZXJzVXBkYXRl
ZCgpOwotICAgIH0KLSAgfQotCi0gIG9uU3RhZ2VQYXJhbWV0ZXJzVXBkYXRlZCgpIHsKLSAgICAv
LyBJbmRpY2F0ZSBmb3IgdGhlIGZyYW1lIGxvb3AgdGhhdCB0aGUgc3RhZ2UgcGFyYW1ldGVycyBo
YXZlIGJlZW4gdXBkYXRlZC4KLSAgICB0aGlzLnN0YWdlUGFyYW1ldGVyc1VwZGF0ZWRfID0gdHJ1
ZTsKLSAgICB0aGlzLmRpc3BsYXlJbmZvXy5zdGFnZVBhcmFtZXRlcnMgPSB0aGlzLnN0YWdlUGFy
YW1ldGVyc187Ci0gICAgaWYgKHRoaXMuc2Vzc2lvbkNsaWVudF8ucHRyLmlzQm91bmQoKSkgewot
ICAgICAgdGhpcy5zZXNzaW9uQ2xpZW50Xy5vbkNoYW5nZWQodGhpcy5kaXNwbGF5SW5mb18pOwot
ICAgIH0KLSAgfQotCi0gIHNpbXVsYXRlUmVzZXRQb3NlKCkgewotICAgIHRoaXMuc2VuZF9tb2pv
X3NwYWNlX3Jlc2V0XyA9IHRydWU7Ci0gIH0KLQotICBzaW11bGF0ZUlucHV0U291cmNlQ29ubmVj
dGlvbihmYWtlSW5wdXRTb3VyY2VJbml0KSB7Ci0gICAgY29uc3QgaW5kZXggPSB0aGlzLm5leHRf
aW5wdXRfc291cmNlX2luZGV4XzsKLSAgICB0aGlzLm5leHRfaW5wdXRfc291cmNlX2luZGV4Xysr
OwotCi0gICAgY29uc3Qgc291cmNlID0gbmV3IE1vY2tYUklucHV0U291cmNlKGZha2VJbnB1dFNv
dXJjZUluaXQsIGluZGV4LCB0aGlzKTsKLSAgICB0aGlzLmlucHV0X3NvdXJjZXNfLnNldChpbmRl
eCwgc291cmNlKTsKLSAgICByZXR1cm4gc291cmNlOwotICB9Ci0KLSAgc2V0QW5jaG9yQ3JlYXRp
b25DYWxsYmFjayhjYWxsYmFjaykgewotICAgIHRoaXMuYW5jaG9yX2NyZWF0aW9uX2NhbGxiYWNr
XyA9IGNhbGxiYWNrOwotICB9Ci0KLSAgLy8gSGVscGVyIG1ldGhvZHMKLSAgZ2V0Tm9uSW1tZXJz
aXZlRGlzcGxheUluZm8oKSB7Ci0gICAgY29uc3QgZGlzcGxheUluZm8gPSB0aGlzLmdldEltbWVy
c2l2ZURpc3BsYXlJbmZvKCk7Ci0KLSAgICBkaXNwbGF5SW5mby5jYXBhYmlsaXRpZXMuY2FuUHJl
c2VudCA9IGZhbHNlOwotICAgIGRpc3BsYXlJbmZvLmxlZnRFeWUgPSBudWxsOwotICAgIGRpc3Bs
YXlJbmZvLnJpZ2h0RXllID0gbnVsbDsKLQotICAgIHJldHVybiBkaXNwbGF5SW5mbzsKLSAgfQot
Ci0gIC8vIEZ1bmN0aW9uIHRvIGdlbmVyYXRlIHNvbWUgdmFsaWQgZGlzcGxheSBpbmZvcm1hdGlv
biBmb3IgdGhlIGRldmljZS4KLSAgZ2V0SW1tZXJzaXZlRGlzcGxheUluZm8oKSB7Ci0gICAgcmV0
dXJuIHsKLSAgICAgIGRpc3BsYXlOYW1lOiAnRmFrZURldmljZScsCi0gICAgICBjYXBhYmlsaXRp
ZXM6IHsKLSAgICAgICAgaGFzUG9zaXRpb246IGZhbHNlLAotICAgICAgICBoYXNFeHRlcm5hbERp
c3BsYXk6IGZhbHNlLAotICAgICAgICBjYW5QcmVzZW50OiB0cnVlLAotICAgICAgICBtYXhMYXll
cnM6IDEKLSAgICAgIH0sCi0gICAgICBzdGFnZVBhcmFtZXRlcnM6IG51bGwsCi0gICAgICBsZWZ0
RXllOiB7Ci0gICAgICAgIGZpZWxkT2ZWaWV3OiB7Ci0gICAgICAgICAgdXBEZWdyZWVzOiA0OC4z
MTYsCi0gICAgICAgICAgZG93bkRlZ3JlZXM6IDUwLjA5OSwKLSAgICAgICAgICBsZWZ0RGVncmVl
czogNTAuODk5LAotICAgICAgICAgIHJpZ2h0RGVncmVlczogMzUuMTk3Ci0gICAgICAgIH0sCi0g
ICAgICAgIGhlYWRGcm9tRXllOiBjb21wb3NlR0ZYVHJhbnNmb3JtKHsKLSAgICAgICAgICBwb3Np
dGlvbjogWy0wLjAzMiwgMCwgMF0sCi0gICAgICAgICAgb3JpZW50YXRpb246IFswLCAwLCAwLCAx
XQotICAgICAgICB9KSwKLSAgICAgICAgcmVuZGVyV2lkdGg6IDIwLAotICAgICAgICByZW5kZXJI
ZWlnaHQ6IDIwCi0gICAgICB9LAotICAgICAgcmlnaHRFeWU6IHsKLSAgICAgICAgZmllbGRPZlZp
ZXc6IHsKLSAgICAgICAgICB1cERlZ3JlZXM6IDQ4LjMxNiwKLSAgICAgICAgICBkb3duRGVncmVl
czogNTAuMDk5LAotICAgICAgICAgIGxlZnREZWdyZWVzOiA1MC44OTksCi0gICAgICAgICAgcmln
aHREZWdyZWVzOiAzNS4xOTcKLSAgICAgICAgfSwKLSAgICAgICAgaGVhZEZyb21FeWU6IGNvbXBv
c2VHRlhUcmFuc2Zvcm0oewotICAgICAgICAgIHBvc2l0aW9uOiBbMC4wMzIsIDAsIDBdLAotICAg
ICAgICAgIG9yaWVudGF0aW9uOiBbMCwgMCwgMCwgMV0KLSAgICAgICAgfSksCi0gICAgICAgIHJl
bmRlcldpZHRoOiAyMCwKLSAgICAgICAgcmVuZGVySGVpZ2h0OiAyMAotICAgICAgfSwKLSAgICAg
IHdlYnhyRGVmYXVsdEZyYW1lYnVmZmVyU2NhbGU6IDAuNywKLSAgICB9OwotICB9Ci0KLSAgLy8g
VGhpcyBmdW5jdGlvbiBjb252ZXJ0cyBiZXR3ZWVuIHRoZSBtYXRyaXggcHJvdmlkZWQgYnkgdGhl
IFdlYlhSIHRlc3QgQVBJCi0gIC8vIGFuZCB0aGUgaW50ZXJuYWwgZGF0YSByZXByZXNlbnRhdGlv
bi4KLSAgZ2V0RXllKGZha2VYUlZpZXdJbml0KSB7Ci0gICAgbGV0IGZvdiA9IG51bGw7Ci0KLSAg
ICBpZiAoZmFrZVhSVmlld0luaXQuZmllbGRPZlZpZXcpIHsKLSAgICAgIGZvdiA9IHsKLSAgICAg
ICAgdXBEZWdyZWVzOiBmYWtlWFJWaWV3SW5pdC5maWVsZE9mVmlldy51cERlZ3JlZXMsCi0gICAg
ICAgIGRvd25EZWdyZWVzOiBmYWtlWFJWaWV3SW5pdC5maWVsZE9mVmlldy5kb3duRGVncmVlcywK
LSAgICAgICAgbGVmdERlZ3JlZXM6IGZha2VYUlZpZXdJbml0LmZpZWxkT2ZWaWV3LmxlZnREZWdy
ZWVzLAotICAgICAgICByaWdodERlZ3JlZXM6IGZha2VYUlZpZXdJbml0LmZpZWxkT2ZWaWV3LnJp
Z2h0RGVncmVlcwotICAgICAgfTsKLSAgICB9IGVsc2UgewotICAgICAgY29uc3QgbSA9IGZha2VY
UlZpZXdJbml0LnByb2plY3Rpb25NYXRyaXg7Ci0KLSAgICAgIGZ1bmN0aW9uIHRvRGVncmVlcyh0
YW4pIHsKLSAgICAgICAgcmV0dXJuIE1hdGguYXRhbih0YW4pICogMTgwIC8gTWF0aC5QSTsKLSAg
ICAgIH0KLQotICAgICAgY29uc3QgbGVmdFRhbiA9ICgxIC0gbVs4XSkgLyBtWzBdOwotICAgICAg
Y29uc3QgcmlnaHRUYW4gPSAoMSArIG1bOF0pIC8gbVswXTsKLSAgICAgIGNvbnN0IHVwVGFuID0g
KDEgKyBtWzldKSAvIG1bNV07Ci0gICAgICBjb25zdCBkb3duVGFuID0gKDEgLSBtWzldKSAvIG1b
NV07Ci0KLSAgICAgIGZvdiA9IHsKLSAgICAgICAgdXBEZWdyZWVzOiB0b0RlZ3JlZXModXBUYW4p
LAotICAgICAgICBkb3duRGVncmVlczogdG9EZWdyZWVzKGRvd25UYW4pLAotICAgICAgICBsZWZ0
RGVncmVlczogdG9EZWdyZWVzKGxlZnRUYW4pLAotICAgICAgICByaWdodERlZ3JlZXM6IHRvRGVn
cmVlcyhyaWdodFRhbikKLSAgICAgIH07Ci0gICAgfQotCi0gICAgcmV0dXJuIHsKLSAgICAgIGZp
ZWxkT2ZWaWV3OiBmb3YsCi0gICAgICBoZWFkRnJvbUV5ZTogY29tcG9zZUdGWFRyYW5zZm9ybShm
YWtlWFJWaWV3SW5pdC52aWV3T2Zmc2V0KSwKLSAgICAgIHJlbmRlcldpZHRoOiBmYWtlWFJWaWV3
SW5pdC5yZXNvbHV0aW9uLndpZHRoLAotICAgICAgcmVuZGVySGVpZ2h0OiBmYWtlWFJWaWV3SW5p
dC5yZXNvbHV0aW9uLmhlaWdodAotICAgIH07Ci0gIH0KLQotICBzZXRGZWF0dXJlcyhzdXBwb3J0
ZWRGZWF0dXJlcykgewotICAgIGZ1bmN0aW9uIGNvbnZlcnRGZWF0dXJlVG9Nb2pvbShmZWF0dXJl
KSB7Ci0gICAgICBpZiAoZmVhdHVyZSBpbiBNb2NrUnVudGltZS5mZWF0dXJlVG9Nb2pvTWFwKSB7
Ci0gICAgICAgIHJldHVybiBNb2NrUnVudGltZS5mZWF0dXJlVG9Nb2pvTWFwW2ZlYXR1cmVdOwot
ICAgICAgfSBlbHNlIHsKLSAgICAgICAgcmV0dXJuIGRldmljZS5tb2pvbS5YUlNlc3Npb25GZWF0
dXJlLklOVkFMSUQ7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgdGhpcy5zdXBwb3J0ZWRGZWF0dXJl
c18gPSBbXTsKLQotICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc3VwcG9ydGVkRmVhdHVyZXMubGVu
Z3RoOyBpKyspIHsKLSAgICAgIGNvbnN0IGZlYXR1cmUgPSBjb252ZXJ0RmVhdHVyZVRvTW9qb20o
c3VwcG9ydGVkRmVhdHVyZXNbaV0pOwotICAgICAgaWYgKGZlYXR1cmUgIT09IGRldmljZS5tb2pv
bS5YUlNlc3Npb25GZWF0dXJlLklOVkFMSUQpIHsKLSAgICAgICAgdGhpcy5zdXBwb3J0ZWRGZWF0
dXJlc18ucHVzaChmZWF0dXJlKTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICAvLyBUaGVzZSBt
ZXRob2RzIGFyZSBpbnRlbmRlZCB0byBiZSB1c2VkIGJ5IE1vY2tYUklucHV0U291cmNlIG9ubHku
Ci0gIGFkZElucHV0U291cmNlKHNvdXJjZSkgewotICAgIGlmICghdGhpcy5pbnB1dF9zb3VyY2Vz
Xy5oYXMoc291cmNlLnNvdXJjZV9pZF8pKSB7Ci0gICAgICB0aGlzLmlucHV0X3NvdXJjZXNfLnNl
dChzb3VyY2Uuc291cmNlX2lkXywgc291cmNlKTsKLSAgICB9Ci0gIH0KLQotICByZW1vdmVJbnB1
dFNvdXJjZShzb3VyY2UpIHsKLSAgICB0aGlzLmlucHV0X3NvdXJjZXNfLmRlbGV0ZShzb3VyY2Uu
c291cmNlX2lkXyk7Ci0gIH0KLQotICAvLyBUaGVzZSBtZXRob2RzIGFyZSBpbnRlbmRlZCB0byBi
ZSB1c2VkIGJ5IEZha2VYUkFuY2hvckNvbnRyb2xsZXIgb25seS4KLSAgZGVsZXRlQW5jaG9yQ29u
dHJvbGxlcihjb250cm9sbGVySWQpIHsKLSAgICB0aGlzLmFuY2hvcl9jb250cm9sbGVyc18uZGVs
ZXRlKGNvbnRyb2xsZXJJZCk7Ci0gIH0KLQotICAvLyBFeHRlbnNpb24gcG9pbnQgZm9yIG5vbi1z
dGFuZGFyZCBtb2R1bGVzLgotCi0gIF9pbmplY3RBZGRpdGlvbmFsRnJhbWVEYXRhKG9wdGlvbnMs
IGZyYW1lRGF0YSkgewotICB9Ci0KLSAgLy8gTW9qbyBmdW5jdGlvbiBpbXBsZW1lbnRhdGlvbnMu
Ci0KLSAgLy8gWFJGcmFtZURhdGFQcm92aWRlciBpbXBsZW1lbnRhdGlvbi4KLSAgZ2V0RnJhbWVE
YXRhKG9wdGlvbnMpIHsKLSAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHsKLQot
ICAgICAgY29uc3QgcG9wdWxhdGVQb3NlID0gKCkgPT4gewotICAgICAgICBjb25zdCBtb2pvX3Nw
YWNlX3Jlc2V0ID0gdGhpcy5zZW5kX21vam9fc3BhY2VfcmVzZXRfOwotICAgICAgICB0aGlzLnNl
bmRfbW9qb19zcGFjZV9yZXNldF8gPSBmYWxzZTsKLQotICAgICAgICBjb25zdCBzdGFnZV9wYXJh
bWV0ZXJzX3VwZGF0ZWQgPSB0aGlzLnN0YWdlUGFyYW1ldGVyc1VwZGF0ZWRfOwotICAgICAgICB0
aGlzLnN0YWdlUGFyYW1ldGVyc1VwZGF0ZWRfID0gZmFsc2U7Ci0gICAgICAgIGlmICh0aGlzLnBv
c2VfKSB7Ci0gICAgICAgICAgdGhpcy5wb3NlXy5wb3NlSW5kZXgrKzsKLSAgICAgICAgfQotCi0g
ICAgICAgIC8vIFNldHRpbmcgdGhlIGlucHV0X3N0YXRlIHRvIG51bGwgdGVzdHMgYSBzbGlnaHRs
eSBkaWZmZXJlbnQgcGF0aCB0aGFuCi0gICAgICAgIC8vIHRoZSBicm93c2VyIHRlc3RzIHdoZXJl
IGlmIHRoZSBsYXN0IGlucHV0IHNvdXJjZSBpcyByZW1vdmVkLCB0aGUgZGV2aWNlCi0gICAgICAg
IC8vIGNvZGUgYWx3YXlzIHNlbmRzIHVwIGFuIGVtcHR5IGFycmF5LCBidXQgaXQncyBhbHNvIHZh
bGlkIG1vam9tIHRvIHNlbmQKLSAgICAgICAgLy8gdXAgYSBudWxsIGFycmF5LgotICAgICAgICBs
ZXQgaW5wdXRfc3RhdGUgPSBudWxsOwotICAgICAgICBpZiAodGhpcy5pbnB1dF9zb3VyY2VzXy5z
aXplID4gMCkgewotICAgICAgICAgIGlucHV0X3N0YXRlID0gW107Ci0gICAgICAgICAgZm9yIChj
b25zdCBpbnB1dF9zb3VyY2Ugb2YgdGhpcy5pbnB1dF9zb3VyY2VzXy52YWx1ZXMoKSkgewotICAg
ICAgICAgICAgaW5wdXRfc3RhdGUucHVzaChpbnB1dF9zb3VyY2UuZ2V0SW5wdXRTb3VyY2VTdGF0
ZSgpKTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBjb25zdCBmcmFtZURhdGEg
PSB7Ci0gICAgICAgICAgcG9zZTogdGhpcy5wb3NlXywKLSAgICAgICAgICBtb2pvU3BhY2VSZXNl
dDogbW9qb19zcGFjZV9yZXNldCwKLSAgICAgICAgICBpbnB1dFN0YXRlOiBpbnB1dF9zdGF0ZSwK
LSAgICAgICAgICB0aW1lRGVsdGE6IHsKLSAgICAgICAgICAgIC8vIHdpbmRvdy5wZXJmb3JtYW5j
ZS5ub3coKSBpcyBpbiBtaWxsaXNlY29uZHMsIHNvIGNvbnZlcnQgdG8gbWljcm9zZWNvbmRzLgot
ICAgICAgICAgICAgbWljcm9zZWNvbmRzOiB3aW5kb3cucGVyZm9ybWFuY2Uubm93KCkgKiAxMDAw
LAotICAgICAgICAgIH0sCi0gICAgICAgICAgZnJhbWVJZDogdGhpcy5uZXh0X2ZyYW1lX2lkXywK
LSAgICAgICAgICBidWZmZXJIb2xkZXI6IG51bGwsCi0gICAgICAgICAgYnVmZmVyU2l6ZToge30s
Ci0gICAgICAgICAgc3RhZ2VQYXJhbWV0ZXJzOiB0aGlzLnN0YWdlUGFyYW1ldGVyc18sCi0gICAg
ICAgICAgc3RhZ2VQYXJhbWV0ZXJzVXBkYXRlZDogc3RhZ2VfcGFyYW1ldGVyc191cGRhdGVkLAot
ICAgICAgICB9OwotCi0gICAgICAgIHRoaXMubmV4dF9mcmFtZV9pZF8rKzsKLQotICAgICAgICB0
aGlzLl9jYWxjdWxhdGVIaXRUZXN0UmVzdWx0cyhmcmFtZURhdGEpOwotCi0gICAgICAgIHRoaXMu
X2NhbGN1bGF0ZUFuY2hvckluZm9ybWF0aW9uKGZyYW1lRGF0YSk7Ci0KLSAgICAgICAgdGhpcy5f
aW5qZWN0QWRkaXRpb25hbEZyYW1lRGF0YShvcHRpb25zLCBmcmFtZURhdGEpOwotCi0gICAgICAg
IHJlc29sdmUoe2ZyYW1lRGF0YX0pOwotICAgICAgfTsKLQotICAgICAgaWYodGhpcy5zZXNzaW9u
T3B0aW9uc18ubW9kZSA9PSBkZXZpY2UubW9qb20uWFJTZXNzaW9uTW9kZS5rSW5saW5lKSB7Ci0g
ICAgICAgIC8vIElubGluZSBzZXNzaW9ucyBzaG91bGQgbm90IGhhdmUgYSBkZWxheSBpbnRyb2R1
Y2VkIHNpbmNlIGl0IGNhdXNlcyB0aGVtCi0gICAgICAgIC8vIHRvIG1pc3MgYSB2c3luYyBibGlu
ay1zaWRlIGFuZCBkZWxheXMgcHJvcGFnYXRpb24gb2YgY2hhbmdlcyB0aGF0IGhhcHBlbmVkCi0g
ICAgICAgIC8vIHdpdGhpbiBhIHJBRmNiIGJ5IG9uZSBmcmFtZSAoZS5nLiBzZXRWaWV3ZXJPcmln
aW4oKSBjYWxscyB3b3VsZCB0YWtlIDIgZnJhbWVzCi0gICAgICAgIC8vIHRvIHByb3BhZ2F0ZSku
Ci0gICAgICAgIHBvcHVsYXRlUG9zZSgpOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgLy8gRm9y
IGltbWVyaXZlIHNlc3Npb25zLCBhZGQgYWRkaXRpb25hbCBkZWxheSB0byBhbGxvdyBmb3IgYW5j
aG9yIGNyZWF0aW9uCi0gICAgICAgIC8vIHByb21pc2VzIHRvIHJ1bi4KLSAgICAgICAgc2V0VGlt
ZW91dChwb3B1bGF0ZVBvc2UsIDMpOyAgLy8gbm90ZTogYWNjb3JkaW5nIHRvIE1ETiwgdGhlIHRp
bWVvdXQgaXMgbm90IGV4YWN0Ci0gICAgICB9Ci0gICAgfSk7Ci0gIH0KLQotICBnZXRFbnZpcm9u
bWVudEludGVncmF0aW9uUHJvdmlkZXIoZW52aXJvbm1lbnRQcm92aWRlclJlcXVlc3QpIHsKLSAg
ICB0aGlzLmVudmlyb25tZW50UHJvdmlkZXJCaW5kaW5nXyA9IG5ldyBtb2pvLkFzc29jaWF0ZWRC
aW5kaW5nKAotICAgICAgICBkZXZpY2UubW9qb20uWFJFbnZpcm9ubWVudEludGVncmF0aW9uUHJv
dmlkZXIsIHRoaXMsCi0gICAgICAgIGVudmlyb25tZW50UHJvdmlkZXJSZXF1ZXN0KTsKLSAgfQot
Ci0gIC8vIE5vdGUgdGhhdCBpZiBnZXRFbnZpcm9ubWVudFByb3ZpZGVyIGhhc24ndCBmaW5pc2hl
ZCBydW5uaW5nIHlldCB0aGlzIHdpbGwKLSAgLy8gYmUgdW5kZWZpbmVkLiBJdCdzIHJlY29tbWVu
ZGVkIHRoYXQgeW91IGFsbG93IGEgc3VjY2Vzc2Z1bCB0YXNrIHRvIHBvc3QKLSAgLy8gZmlyc3Qg
YmVmb3JlIGF0dGVtcHRpbmcgdG8gY2xvc2UuCi0gIGNsb3NlRW52aXJvbm1lbnRJbnRlZ3JhdGlv
blByb3ZpZGVyKCkgewotICAgIHRoaXMuZW52aXJvbm1lbnRQcm92aWRlckJpbmRpbmdfLmNsb3Nl
KCk7Ci0gIH0KLQotICBjbG9zZURhdGFQcm92aWRlcigpIHsKLSAgICB0aGlzLmRhdGFQcm92aWRl
ckJpbmRpbmdfLmNsb3NlKCk7Ci0gICAgdGhpcy5zZXNzaW9uT3B0aW9uc18gPSBudWxsOwotICB9
Ci0KLSAgLy8gWFJFbnZpcm9ubWVudEludGVncmF0aW9uUHJvdmlkZXIgaW1wbGVtZW50YXRpb246
Ci0gIHN1YnNjcmliZVRvSGl0VGVzdChuYXRpdmVPcmlnaW5JbmZvcm1hdGlvbiwgZW50aXR5VHlw
ZXMsIHJheSkgewotICAgIGlmICghdGhpcy5zdXBwb3J0ZWRNb2Rlc18uaW5jbHVkZXMoZGV2aWNl
Lm1vam9tLlhSU2Vzc2lvbk1vZGUua0ltbWVyc2l2ZUFyKSkgewotICAgICAgLy8gUmVqZWN0IG91
dHNpZGUgb2YgQVIuCi0gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHsKLSAgICAgICAgcmVz
dWx0IDogZGV2aWNlLm1vam9tLlN1YnNjcmliZVRvSGl0VGVzdFJlc3VsdC5GQUlMVVJFX0dFTkVS
SUMsCi0gICAgICAgIHN1YnNjcmlwdGlvbklkIDogMAotICAgICAgfSk7Ci0gICAgfQotCi0gICAg
aWYgKCF0aGlzLl9uYXRpdmVPcmlnaW5Lbm93bihuYXRpdmVPcmlnaW5JbmZvcm1hdGlvbikpIHsK
LSAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoewotICAgICAgICByZXN1bHQgOiBkZXZpY2Uu
bW9qb20uU3Vic2NyaWJlVG9IaXRUZXN0UmVzdWx0LkZBSUxVUkVfR0VORVJJQywKLSAgICAgICAg
c3Vic2NyaXB0aW9uSWQgOiAwCi0gICAgICB9KTsKLSAgICB9Ci0KLSAgICAvLyBTdG9yZSB0aGUg
c3Vic2NyaXB0aW9uIGluZm9ybWF0aW9uIGFzLWlzOgotICAgIGNvbnN0IGlkID0gdGhpcy5uZXh0
X2hpdF90ZXN0X2lkXysrOwotICAgIHRoaXMuaGl0VGVzdFN1YnNjcmlwdGlvbnNfLnNldChpZCwg
eyBuYXRpdmVPcmlnaW5JbmZvcm1hdGlvbiwgZW50aXR5VHlwZXMsIHJheSB9KTsKLQotICAgIHJl
dHVybiBQcm9taXNlLnJlc29sdmUoewotICAgICAgcmVzdWx0IDogZGV2aWNlLm1vam9tLlN1YnNj
cmliZVRvSGl0VGVzdFJlc3VsdC5TVUNDRVNTLAotICAgICAgc3Vic2NyaXB0aW9uSWQgOiBpZAot
ICAgIH0pOwotICB9Ci0KLSAgc3Vic2NyaWJlVG9IaXRUZXN0Rm9yVHJhbnNpZW50SW5wdXQocHJv
ZmlsZU5hbWUsIGVudGl0eVR5cGVzLCByYXkpewotICAgIGlmICghdGhpcy5zdXBwb3J0ZWRNb2Rl
c18uaW5jbHVkZXMoZGV2aWNlLm1vam9tLlhSU2Vzc2lvbk1vZGUua0ltbWVyc2l2ZUFyKSkgewot
ICAgICAgLy8gUmVqZWN0IG91dHNpZGUgb2YgQVIuCi0gICAgICByZXR1cm4gUHJvbWlzZS5yZXNv
bHZlKHsKLSAgICAgICAgcmVzdWx0IDogZGV2aWNlLm1vam9tLlN1YnNjcmliZVRvSGl0VGVzdFJl
c3VsdC5GQUlMVVJFX0dFTkVSSUMsCi0gICAgICAgIHN1YnNjcmlwdGlvbklkIDogMAotICAgICAg
fSk7Ci0gICAgfQotCi0gICAgLy8gU3RvcmUgdGhlIHN1YnNjcmlwdGlvbiBpbmZvcm1hdGlvbiBh
cy1pczoKLSAgICBjb25zdCBpZCA9IHRoaXMubmV4dF9oaXRfdGVzdF9pZF8rKzsKLSAgICB0aGlz
LnRyYW5zaWVudEhpdFRlc3RTdWJzY3JpcHRpb25zXy5zZXQoaWQsIHsgcHJvZmlsZU5hbWUsIGVu
dGl0eVR5cGVzLCByYXkgfSk7Ci0KLSAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHsKLSAgICAg
IHJlc3VsdCA6IGRldmljZS5tb2pvbS5TdWJzY3JpYmVUb0hpdFRlc3RSZXN1bHQuU1VDQ0VTUywK
LSAgICAgIHN1YnNjcmlwdGlvbklkIDogaWQKLSAgICB9KTsKLSAgfQotCi0gIGNyZWF0ZUFuY2hv
cihuYXRpdmVPcmlnaW5JbmZvcm1hdGlvbiwgbmF0aXZlT3JpZ2luRnJvbUFuY2hvcikgewotICAg
IHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4gewotICAgICAgaWYodGhpcy5hbmNob3Jf
Y3JlYXRpb25fY2FsbGJhY2tfID09IG51bGwpIHsKLSAgICAgICAgcmVzb2x2ZSh7Ci0gICAgICAg
ICAgcmVzdWx0IDogZGV2aWNlLm1vam9tLkNyZWF0ZUFuY2hvclJlc3VsdC5GQUlMVVJFLAotICAg
ICAgICAgIGFuY2hvcklkIDogMAotICAgICAgICB9KTsKLQotICAgICAgICByZXR1cm47Ci0gICAg
ICB9Ci0KLSAgICAgIGNvbnN0IG1vam9Gcm9tTmF0aXZlT3JpZ2luID0gdGhpcy5fZ2V0TW9qb0Zy
b21OYXRpdmVPcmlnaW4obmF0aXZlT3JpZ2luSW5mb3JtYXRpb24pOwotICAgICAgaWYobW9qb0Zy
b21OYXRpdmVPcmlnaW4gPT0gbnVsbCkgewotICAgICAgICByZXNvbHZlKHsKLSAgICAgICAgICBy
ZXN1bHQgOiBkZXZpY2UubW9qb20uQ3JlYXRlQW5jaG9yUmVzdWx0LkZBSUxVUkUsCi0gICAgICAg
ICAgYW5jaG9ySWQgOiAwCi0gICAgICAgIH0pOwotCi0gICAgICAgIHJldHVybjsKLSAgICAgIH0K
LQotICAgICAgY29uc3QgbW9qb0Zyb21BbmNob3IgPSBYUk1hdGhIZWxwZXIubXVsNHg0KG1vam9G
cm9tTmF0aXZlT3JpZ2luLCBuYXRpdmVPcmlnaW5Gcm9tQW5jaG9yKTsKLQotICAgICAgY29uc3Qg
YW5jaG9yQ3JlYXRpb25QYXJhbWV0ZXJzID0gewotICAgICAgICByZXF1ZXN0ZWRBbmNob3JPcmln
aW46IG1vam9Gcm9tQW5jaG9yLAotICAgICAgICBpc0F0dGFjaGVkVG9FbnRpdHk6IGZhbHNlLAot
ICAgICAgfTsKLQotICAgICAgY29uc3QgYW5jaG9yQ29udHJvbGxlciA9IG5ldyBGYWtlWFJBbmNo
b3JDb250cm9sbGVyKCk7Ci0KLSAgICAgIHRoaXMuYW5jaG9yX2NyZWF0aW9uX2NhbGxiYWNrXyhh
bmNob3JDcmVhdGlvblBhcmFtZXRlcnMsIGFuY2hvckNvbnRyb2xsZXIpCi0gICAgICAgICAgICAu
dGhlbigocmVzdWx0KSA9PiB7Ci0gICAgICAgICAgICAgIGlmKHJlc3VsdCkgewotICAgICAgICAg
ICAgICAgIC8vIElmIHRoZSB0ZXN0IGFsbG93ZWQgdGhlIGFuY2hvciBjcmVhdGlvbiwKLSAgICAg
ICAgICAgICAgICAvLyBzdG9yZSB0aGUgYW5jaG9yIGNvbnRyb2xsZXIgJiByZXR1cm4gc3VjY2Vz
cy4KLQotICAgICAgICAgICAgICAgIGNvbnN0IGFuY2hvcl9pZCA9IHRoaXMubmV4dF9hbmNob3Jf
aWRfOwotICAgICAgICAgICAgICAgIHRoaXMubmV4dF9hbmNob3JfaWRfKys7Ci0KLSAgICAgICAg
ICAgICAgICB0aGlzLmFuY2hvcl9jb250cm9sbGVyc18uc2V0KGFuY2hvcl9pZCwgYW5jaG9yQ29u
dHJvbGxlcik7Ci0gICAgICAgICAgICAgICAgYW5jaG9yQ29udHJvbGxlci5kZXZpY2UgPSB0aGlz
OwotICAgICAgICAgICAgICAgIGFuY2hvckNvbnRyb2xsZXIuaWQgPSBhbmNob3JfaWQ7Ci0KLSAg
ICAgICAgICAgICAgICByZXNvbHZlKHsKLSAgICAgICAgICAgICAgICAgIHJlc3VsdCA6IGRldmlj
ZS5tb2pvbS5DcmVhdGVBbmNob3JSZXN1bHQuU1VDQ0VTUywKLSAgICAgICAgICAgICAgICAgIGFu
Y2hvcklkIDogYW5jaG9yX2lkCi0gICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICAgIH0g
ZWxzZSB7Ci0gICAgICAgICAgICAgICAgLy8gVGhlIHRlc3QgaGFzIHJlamVjdGVkIGFuY2hvciBj
cmVhdGlvbi4KLSAgICAgICAgICAgICAgICByZXNvbHZlKHsKLSAgICAgICAgICAgICAgICAgIHJl
c3VsdCA6IGRldmljZS5tb2pvbS5DcmVhdGVBbmNob3JSZXN1bHQuRkFJTFVSRSwKLSAgICAgICAg
ICAgICAgICAgIGFuY2hvcklkIDogMAotICAgICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICB9KQotICAgICAgICAgICAgLmNhdGNoKCgpID0+IHsKLSAgICAgICAg
ICAgICAgLy8gVGhlIHRlc3QgdGhyZXcgYW4gZXJyb3IsIHRyZWF0IGFuY2hvciBjcmVhdGlvbiBh
cyBmYWlsZWQuCi0gICAgICAgICAgICAgIHJlc29sdmUoewotICAgICAgICAgICAgICAgIHJlc3Vs
dCA6IGRldmljZS5tb2pvbS5DcmVhdGVBbmNob3JSZXN1bHQuRkFJTFVSRSwKLSAgICAgICAgICAg
ICAgICBhbmNob3JJZCA6IDAKLSAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICB9KTsKLSAg
ICB9KTsKLSAgfQotCi0gIGNyZWF0ZVBsYW5lQW5jaG9yKHBsYW5lRnJvbUFuY2hvciwgcGxhbmVJ
ZCkgewotICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4gewotCi0gICAgICAvLyBO
b3Qgc3VwcG9ydGVkIHlldC4KLQotICAgICAgcmVzb2x2ZSh7Ci0gICAgICAgIHJlc3VsdCA6IGRl
dmljZS5tb2pvbS5DcmVhdGVBbmNob3JSZXN1bHQuRkFJTFVSRSwKLSAgICAgICAgYW5jaG9ySWQg
OiAwCi0gICAgICB9KTsKLSAgICB9KTsKLSAgfQotCi0gIC8vIFV0aWxpdHkgZnVuY3Rpb24KLSAg
cmVxdWVzdFJ1bnRpbWVTZXNzaW9uKHNlc3Npb25PcHRpb25zKSB7Ci0gICAgcmV0dXJuIHRoaXMu
cnVudGltZVN1cHBvcnRzU2Vzc2lvbihzZXNzaW9uT3B0aW9ucykudGhlbigocmVzdWx0KSA9PiB7
Ci0gICAgICAvLyBUaGUgSmF2YVNjcmlwdCBiaW5kaW5ncyBjb252ZXJ0IGNfc3R5bGVfbmFtZXMg
dG8gY2FtZWxDYXNlIG5hbWVzLgotICAgICAgY29uc3Qgb3B0aW9ucyA9IG5ldyBkZXZpY2UubW9q
b20uWFJQcmVzZW50YXRpb25UcmFuc3BvcnRPcHRpb25zKCk7Ci0gICAgICBvcHRpb25zLnRyYW5z
cG9ydE1ldGhvZCA9Ci0gICAgICAgICAgZGV2aWNlLm1vam9tLlhSUHJlc2VudGF0aW9uVHJhbnNw
b3J0TWV0aG9kLlNVQk1JVF9BU19NQUlMQk9YX0hPTERFUjsKLSAgICAgIG9wdGlvbnMud2FpdEZv
clRyYW5zZmVyTm90aWZpY2F0aW9uID0gdHJ1ZTsKLSAgICAgIG9wdGlvbnMud2FpdEZvclJlbmRl
ck5vdGlmaWNhdGlvbiA9IHRydWU7Ci0KLSAgICAgIGxldCBzdWJtaXRfZnJhbWVfc2luazsKLSAg
ICAgIGlmIChyZXN1bHQuc3VwcG9ydHNTZXNzaW9uKSB7Ci0gICAgICAgIHN1Ym1pdF9mcmFtZV9z
aW5rID0gewotICAgICAgICAgIGNsaWVudFJlY2VpdmVyOiB0aGlzLnByZXNlbnRhdGlvbl9wcm92
aWRlcl8uZ2V0Q2xpZW50UmVjZWl2ZXIoKSwKLSAgICAgICAgICBwcm92aWRlcjogdGhpcy5wcmVz
ZW50YXRpb25fcHJvdmlkZXJfLmJpbmRQcm92aWRlcihzZXNzaW9uT3B0aW9ucyksCi0gICAgICAg
ICAgdHJhbnNwb3J0T3B0aW9uczogb3B0aW9ucwotICAgICAgICB9OwotCi0gICAgICAgIGNvbnN0
IGRhdGFQcm92aWRlclB0ciA9IG5ldyBkZXZpY2UubW9qb20uWFJGcmFtZURhdGFQcm92aWRlclB0
cigpOwotICAgICAgICBjb25zdCBkYXRhUHJvdmlkZXJSZXF1ZXN0ID0gbW9qby5tYWtlUmVxdWVz
dChkYXRhUHJvdmlkZXJQdHIpOwotICAgICAgICB0aGlzLmRhdGFQcm92aWRlckJpbmRpbmdfID0g
bmV3IG1vam8uQmluZGluZygKLSAgICAgICAgICAgIGRldmljZS5tb2pvbS5YUkZyYW1lRGF0YVBy
b3ZpZGVyLCB0aGlzLCBkYXRhUHJvdmlkZXJSZXF1ZXN0KTsKLSAgICAgICAgdGhpcy5zZXNzaW9u
T3B0aW9uc18gPSBzZXNzaW9uT3B0aW9uczsKLQotICAgICAgICBjb25zdCBjbGllbnRSZWNlaXZl
ciA9IG1vam8ubWFrZVJlcXVlc3QodGhpcy5zZXNzaW9uQ2xpZW50Xyk7Ci0KLSAgICAgICAgY29u
c3QgZW5hYmxlZF9mZWF0dXJlcyA9IFtdOwotICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNl
c3Npb25PcHRpb25zLnJlcXVpcmVkRmVhdHVyZXMubGVuZ3RoOyBpKyspIHsKLSAgICAgICAgICBp
ZiAodGhpcy5zdXBwb3J0ZWRGZWF0dXJlc18uaW5kZXhPZihzZXNzaW9uT3B0aW9ucy5yZXF1aXJl
ZEZlYXR1cmVzW2ldKSAhPT0gLTEpIHsKLSAgICAgICAgICAgIGVuYWJsZWRfZmVhdHVyZXMucHVz
aChzZXNzaW9uT3B0aW9ucy5yZXF1aXJlZEZlYXR1cmVzW2ldKTsKLSAgICAgICAgICB9IGVsc2Ug
ewotICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh7c2Vzc2lvbjogbnVsbH0pOwot
ICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIGZvciAobGV0IGkgPTA7IGkgPCBzZXNz
aW9uT3B0aW9ucy5vcHRpb25hbEZlYXR1cmVzLmxlbmd0aDsgaSsrKSB7Ci0gICAgICAgICAgaWYg
KHRoaXMuc3VwcG9ydGVkRmVhdHVyZXNfLmluZGV4T2Yoc2Vzc2lvbk9wdGlvbnMub3B0aW9uYWxG
ZWF0dXJlc1tpXSkgIT09IC0xKSB7Ci0gICAgICAgICAgICBlbmFibGVkX2ZlYXR1cmVzLnB1c2go
c2Vzc2lvbk9wdGlvbnMub3B0aW9uYWxGZWF0dXJlc1tpXSk7Ci0gICAgICAgICAgfQotICAgICAg
ICB9Ci0KLSAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh7Ci0gICAgICAgICAgc2Vzc2lv
bjogewotICAgICAgICAgICAgc3VibWl0RnJhbWVTaW5rOiBzdWJtaXRfZnJhbWVfc2luaywKLSAg
ICAgICAgICAgIGRhdGFQcm92aWRlcjogZGF0YVByb3ZpZGVyUHRyLAotICAgICAgICAgICAgY2xp
ZW50UmVjZWl2ZXI6IGNsaWVudFJlY2VpdmVyLAotICAgICAgICAgICAgZGlzcGxheUluZm86IHRo
aXMuZGlzcGxheUluZm9fLAotICAgICAgICAgICAgZW5hYmxlZEZlYXR1cmVzOiBlbmFibGVkX2Zl
YXR1cmVzLAotICAgICAgICAgIH0KLSAgICAgICAgfSk7Ci0gICAgICB9IGVsc2UgewotICAgICAg
ICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHtzZXNzaW9uOiBudWxsfSk7Ci0gICAgICB9Ci0gICAg
fSk7Ci0gIH0KLQotICBydW50aW1lU3VwcG9ydHNTZXNzaW9uKG9wdGlvbnMpIHsKLSAgICByZXR1
cm4gUHJvbWlzZS5yZXNvbHZlKHsKLSAgICAgIHN1cHBvcnRzU2Vzc2lvbjogdGhpcy5zdXBwb3J0
ZWRNb2Rlc18uaW5jbHVkZXMob3B0aW9ucy5tb2RlKQotICAgIH0pOwotICB9Ci0KLSAgLy8gUHJp
dmF0ZSBmdW5jdGlvbnMgLSB1dGlsaXRpZXM6Ci0gIF9uYXRpdmVPcmlnaW5Lbm93bihuYXRpdmVP
cmlnaW5JbmZvcm1hdGlvbil7Ci0KLSAgICBpZiAobmF0aXZlT3JpZ2luSW5mb3JtYXRpb24uJHRh
ZyA9PSBkZXZpY2UubW9qb20uWFJOYXRpdmVPcmlnaW5JbmZvcm1hdGlvbi5UYWdzLmlucHV0U291
cmNlSWQpIHsKLSAgICAgIGlmICghdGhpcy5pbnB1dF9zb3VyY2VzXy5oYXMobmF0aXZlT3JpZ2lu
SW5mb3JtYXRpb24uaW5wdXRTb3VyY2VJZCkpIHsKLSAgICAgICAgLy8gVW5rbm93biBpbnB1dCBz
b3VyY2UuCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgIH0KLQotICAgICAgcmV0dXJuIHRy
dWU7Ci0gICAgfSBlbHNlIGlmIChuYXRpdmVPcmlnaW5JbmZvcm1hdGlvbi4kdGFnID09IGRldmlj
ZS5tb2pvbS5YUk5hdGl2ZU9yaWdpbkluZm9ybWF0aW9uLlRhZ3MucmVmZXJlbmNlU3BhY2VUeXBl
KSB7Ci0gICAgICAvLyBCb3VuZGVkX2Zsb29yICYgdW5ib3VuZGVkIHJlZiBzcGFjZXMgYXJlIG5v
dCB5ZXQgc3VwcG9ydGVkIGZvciBBUjoKLSAgICAgIGlmIChuYXRpdmVPcmlnaW5JbmZvcm1hdGlv
bi5yZWZlcmVuY2VTcGFjZVR5cGUgPT0gZGV2aWNlLm1vam9tLlhSUmVmZXJlbmNlU3BhY2VUeXBl
LmtVbmJvdW5kZWQKLSAgICAgICB8fCBuYXRpdmVPcmlnaW5JbmZvcm1hdGlvbi5yZWZlcmVuY2VT
cGFjZVR5cGUgPT0gZGV2aWNlLm1vam9tLlhSUmVmZXJlbmNlU3BhY2VUeXBlLmtCb3VuZGVkRmxv
cikgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICB9Ci0KLSAgICAgIHJldHVybiB0cnVl
OwotICAgIH0gZWxzZSB7Ci0gICAgICAvLyBQbGFuZXMgYW5kIGFuY2hvcnMgYXJlIG5vdCB5ZXQg
c3VwcG9ydGVkIGJ5IHRoZSBtb2NrIGludGVyZmFjZS4KLSAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICB9Ci0gIH0KLQotICAvLyBQcml2YXRlIGZ1bmN0aW9ucyAtIGFuY2hvcnMgaW1wbGVtZW50YXRp
b246Ci0KLSAgLy8gTW9kaWZpZXMgcGFzc2VkIGluIGZyYW1lRGF0YSB0byBhZGQgYW5jaG9yIGlu
Zm9ybWF0aW9uLgotICBfY2FsY3VsYXRlQW5jaG9ySW5mb3JtYXRpb24oZnJhbWVEYXRhKSB7Ci0g
ICAgaWYgKCF0aGlzLnN1cHBvcnRlZE1vZGVzXy5pbmNsdWRlcyhkZXZpY2UubW9qb20uWFJTZXNz
aW9uTW9kZS5rSW1tZXJzaXZlQXIpKSB7Ci0gICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgZnJh
bWVEYXRhLmFuY2hvcnNEYXRhID0gbmV3IGRldmljZS5tb2pvbS5YUkFuY2hvcnNEYXRhKCk7Ci0g
ICAgZnJhbWVEYXRhLmFuY2hvcnNEYXRhLmFsbEFuY2hvcnNJZHMgPSBbXTsKLSAgICBmcmFtZURh
dGEuYW5jaG9yc0RhdGEudXBkYXRlZEFuY2hvcnNEYXRhID0gW107Ci0KLSAgICBmb3IoY29uc3Qg
W2lkLCBjb250cm9sbGVyXSBvZiB0aGlzLmFuY2hvcl9jb250cm9sbGVyc18pIHsKLSAgICAgIGZy
YW1lRGF0YS5hbmNob3JzRGF0YS5hbGxBbmNob3JzSWRzLnB1c2goaWQpOwotCi0gICAgICAvLyBT
ZW5kIHRoZSBlbnRpcmUgYW5jaG9yIGRhdGEgb3ZlciBpZiB0aGVyZSB3YXMgYSBjaGFuZ2Ugc2lu
Y2UgbGFzdCBHZXRGcmFtZURhdGEoKS4KLSAgICAgIGlmKGNvbnRyb2xsZXIuZGlydHkpIHsKLSAg
ICAgICAgY29uc3QgYW5jaG9yRGF0YSA9IG5ldyBkZXZpY2UubW9qb20uWFJBbmNob3JEYXRhKCk7
Ci0gICAgICAgIGFuY2hvckRhdGEuaWQgPSBpZDsKLSAgICAgICAgaWYoIWNvbnRyb2xsZXIucGF1
c2VkKSB7Ci0gICAgICAgICAgYW5jaG9yRGF0YS5tb2pvRnJvbUFuY2hvciA9IFhSTWF0aEhlbHBl
ci5kZWNvbXBvc2VSaWdpZFRyYW5zZm9ybSgKLSAgICAgICAgICAgIGNvbnRyb2xsZXIuZ2V0QW5j
aG9yT3JpZ2luKCkpOwotICAgICAgICB9Ci0KLSAgICAgICAgY29udHJvbGxlci5tYXJrUHJvY2Vz
c2VkKCk7Ci0KLSAgICAgICAgZnJhbWVEYXRhLmFuY2hvcnNEYXRhLnVwZGF0ZWRBbmNob3JzRGF0
YS5wdXNoKGFuY2hvckRhdGEpOwotICAgICAgfQotICAgIH0KLSAgfQotCi0gIC8vIFByaXZhdGUg
ZnVuY3Rpb25zIC0gaGl0IHRlc3QgaW1wbGVtZW50YXRpb246Ci0KLSAgLy8gTW9kaWZpZXMgcGFz
c2VkIGluIGZyYW1lRGF0YSB0byBhZGQgaGl0IHRlc3QgcmVzdWx0cy4KLSAgX2NhbGN1bGF0ZUhp
dFRlc3RSZXN1bHRzKGZyYW1lRGF0YSkgewotICAgIGlmICghdGhpcy5zdXBwb3J0ZWRNb2Rlc18u
aW5jbHVkZXMoZGV2aWNlLm1vam9tLlhSU2Vzc2lvbk1vZGUua0ltbWVyc2l2ZUFyKSkgewotICAg
ICAgcmV0dXJuOwotICAgIH0KLQotICAgIGZyYW1lRGF0YS5oaXRUZXN0U3Vic2NyaXB0aW9uUmVz
dWx0cyA9IG5ldyBkZXZpY2UubW9qb20uWFJIaXRUZXN0U3Vic2NyaXB0aW9uUmVzdWx0c0RhdGEo
KTsKLSAgICBmcmFtZURhdGEuaGl0VGVzdFN1YnNjcmlwdGlvblJlc3VsdHMucmVzdWx0cyA9IFtd
OwotICAgIGZyYW1lRGF0YS5oaXRUZXN0U3Vic2NyaXB0aW9uUmVzdWx0cy50cmFuc2llbnRJbnB1
dFJlc3VsdHMgPSBbXTsKLQotICAgIGlmICghdGhpcy53b3JsZF8pIHsKLSAgICAgIHJldHVybjsK
LSAgICB9Ci0KLSAgICAvLyBOb24tdHJhbnNpZW50IGhpdCB0ZXN0OgotICAgIGZvciAoY29uc3Qg
W2lkLCBzdWJzY3JpcHRpb25dIG9mIHRoaXMuaGl0VGVzdFN1YnNjcmlwdGlvbnNfKSB7Ci0gICAg
ICBjb25zdCBtb2pvX2Zyb21fbmF0aXZlX29yaWdpbiA9IHRoaXMuX2dldE1vam9Gcm9tTmF0aXZl
T3JpZ2luKHN1YnNjcmlwdGlvbi5uYXRpdmVPcmlnaW5JbmZvcm1hdGlvbik7Ci0gICAgICBpZiAo
IW1vam9fZnJvbV9uYXRpdmVfb3JpZ2luKSBjb250aW51ZTsKLQotICAgICAgY29uc3QgW21vam9f
cmF5X29yaWdpbiwgbW9qb19yYXlfZGlyZWN0aW9uXSA9IHRoaXMuX3RyYW5zZm9ybVJheVRvTW9q
b1NwYWNlKAotICAgICAgICBzdWJzY3JpcHRpb24ucmF5LAotICAgICAgICBtb2pvX2Zyb21fbmF0
aXZlX29yaWdpbgotICAgICAgKTsKLQotICAgICAgY29uc3QgcmVzdWx0cyA9IHRoaXMuX2hpdFRl
c3RXb3JsZChtb2pvX3JheV9vcmlnaW4sIG1vam9fcmF5X2RpcmVjdGlvbiwgc3Vic2NyaXB0aW9u
LmVudGl0eVR5cGVzKTsKLQotICAgICAgY29uc3QgcmVzdWx0ID0gbmV3IGRldmljZS5tb2pvbS5Y
UkhpdFRlc3RTdWJzY3JpcHRpb25SZXN1bHREYXRhKCk7Ci0gICAgICByZXN1bHQuc3Vic2NyaXB0
aW9uSWQgPSBpZDsKLSAgICAgIHJlc3VsdC5oaXRUZXN0UmVzdWx0cyA9IHJlc3VsdHM7Ci0KLSAg
ICAgIGZyYW1lRGF0YS5oaXRUZXN0U3Vic2NyaXB0aW9uUmVzdWx0cy5yZXN1bHRzLnB1c2gocmVz
dWx0KTsKLSAgICB9Ci0KLSAgICAvLyBUcmFuc2llbnQgaGl0IHRlc3Q6Ci0gICAgY29uc3QgbW9q
b19mcm9tX3ZpZXdlciA9IHRoaXMuX2dldE1vam9Gcm9tVmlld2VyKCk7Ci0KLSAgICBmb3IgKGNv
bnN0IFtpZCwgc3Vic2NyaXB0aW9uXSBvZiB0aGlzLnRyYW5zaWVudEhpdFRlc3RTdWJzY3JpcHRp
b25zXykgewotICAgICAgY29uc3QgcmVzdWx0ID0gbmV3IGRldmljZS5tb2pvbS5YUkhpdFRlc3RU
cmFuc2llbnRJbnB1dFN1YnNjcmlwdGlvblJlc3VsdERhdGEoKTsKLSAgICAgIHJlc3VsdC5zdWJz
Y3JpcHRpb25JZCA9IGlkOwotICAgICAgcmVzdWx0LmlucHV0U291cmNlSWRUb0hpdFRlc3RSZXN1
bHRzID0gbmV3IE1hcCgpOwotCi0gICAgICAvLyBGaW5kIGFsbCBpbnB1dCBzb3VyY2VzIHRoYXQg
bWF0Y2ggdGhlIHByb2ZpbGUgbmFtZToKLSAgICAgIGNvbnN0IG1hdGNoaW5nX2lucHV0X3NvdXJj
ZXMgPSBBcnJheS5mcm9tKHRoaXMuaW5wdXRfc291cmNlc18udmFsdWVzKCkpCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5maWx0ZXIoaW5w
dXRfc291cmNlID0+IGlucHV0X3NvdXJjZS5wcm9maWxlc18uaW5jbHVkZXMoc3Vic2NyaXB0aW9u
LnByb2ZpbGVOYW1lKSk7Ci0KLSAgICAgIGZvciAoY29uc3QgaW5wdXRfc291cmNlIG9mIG1hdGNo
aW5nX2lucHV0X3NvdXJjZXMpIHsKLSAgICAgICAgY29uc3QgbW9qb19mcm9tX25hdGl2ZV9vcmln
aW4gPSBpbnB1dF9zb3VyY2UuX2dldE1vam9Gcm9tSW5wdXRTb3VyY2UobW9qb19mcm9tX3ZpZXdl
cik7Ci0KLSAgICAgICAgY29uc3QgW21vam9fcmF5X29yaWdpbiwgbW9qb19yYXlfZGlyZWN0aW9u
XSA9IHRoaXMuX3RyYW5zZm9ybVJheVRvTW9qb1NwYWNlKAotICAgICAgICAgIHN1YnNjcmlwdGlv
bi5yYXksCi0gICAgICAgICAgbW9qb19mcm9tX25hdGl2ZV9vcmlnaW4KLSAgICAgICAgKTsKLQot
ICAgICAgICBjb25zdCByZXN1bHRzID0gdGhpcy5faGl0VGVzdFdvcmxkKG1vam9fcmF5X29yaWdp
biwgbW9qb19yYXlfZGlyZWN0aW9uLCBzdWJzY3JpcHRpb24uZW50aXR5VHlwZXMpOwotCi0gICAg
ICAgIHJlc3VsdC5pbnB1dFNvdXJjZUlkVG9IaXRUZXN0UmVzdWx0cy5zZXQoaW5wdXRfc291cmNl
LnNvdXJjZV9pZF8sIHJlc3VsdHMpOwotICAgICAgfQotCi0gICAgICBmcmFtZURhdGEuaGl0VGVz
dFN1YnNjcmlwdGlvblJlc3VsdHMudHJhbnNpZW50SW5wdXRSZXN1bHRzLnB1c2gocmVzdWx0KTsK
LSAgICB9Ci0gIH0KLQotICAvLyBSZXR1cm5zIDItZWxlbWVudCBhcnJheSBbb3JpZ2luLCBkaXJl
Y3Rpb25dIG9mIGEgcmF5IGluIG1vam8gc3BhY2UuCi0gIC8vIHxyYXl8IGlzIGV4cHJlc3NlZCBy
ZWxhdGl2ZSB0byBuYXRpdmUgb3JpZ2luLgotICBfdHJhbnNmb3JtUmF5VG9Nb2pvU3BhY2UocmF5
LCBtb2pvX2Zyb21fbmF0aXZlX29yaWdpbikgewotICAgIGNvbnN0IHJheV9vcmlnaW4gPSB7Ci0g
ICAgICB4OiByYXkub3JpZ2luLngsCi0gICAgICB5OiByYXkub3JpZ2luLnksCi0gICAgICB6OiBy
YXkub3JpZ2luLnosCi0gICAgICB3OiAxCi0gICAgfTsKLSAgICBjb25zdCByYXlfZGlyZWN0aW9u
ID0gewotICAgICAgeDogcmF5LmRpcmVjdGlvbi54LAotICAgICAgeTogcmF5LmRpcmVjdGlvbi55
LAotICAgICAgejogcmF5LmRpcmVjdGlvbi56LAotICAgICAgdzogMAotICAgIH07Ci0KLSAgICBj
b25zdCBtb2pvX3JheV9vcmlnaW4gPSBYUk1hdGhIZWxwZXIudHJhbnNmb3JtX2J5X21hdHJpeCgK
LSAgICAgIG1vam9fZnJvbV9uYXRpdmVfb3JpZ2luLAotICAgICAgcmF5X29yaWdpbik7Ci0gICAg
Y29uc3QgbW9qb19yYXlfZGlyZWN0aW9uID0gWFJNYXRoSGVscGVyLnRyYW5zZm9ybV9ieV9tYXRy
aXgoCi0gICAgICBtb2pvX2Zyb21fbmF0aXZlX29yaWdpbiwKLSAgICAgIHJheV9kaXJlY3Rpb24p
OwotCi0gICAgcmV0dXJuIFttb2pvX3JheV9vcmlnaW4sIG1vam9fcmF5X2RpcmVjdGlvbl07Ci0g
IH0KLQotICAvLyBIaXQgdGVzdHMgdGhlIHBhc3NlZCBpbiByYXkgKGV4cHJlc3NlZCBhcyBvcmln
aW4gYW5kIGRpcmVjdGlvbikgYWdhaW5zdCB0aGUgbW9ja2VkIHdvcmxkIGRhdGEuCi0gIF9oaXRU
ZXN0V29ybGQob3JpZ2luLCBkaXJlY3Rpb24sIGVudGl0eVR5cGVzKSB7Ci0gICAgbGV0IHJlc3Vs
dCA9IFtdOwotCi0gICAgZm9yIChjb25zdCByZWdpb24gb2YgdGhpcy53b3JsZF8uaGl0VGVzdFJl
Z2lvbnMpIHsKLSAgICAgIGNvbnN0IHBhcnRpYWxfcmVzdWx0ID0gdGhpcy5faGl0VGVzdFJlZ2lv
bigKLSAgICAgICAgcmVnaW9uLAotICAgICAgICBvcmlnaW4sIGRpcmVjdGlvbiwKLSAgICAgICAg
ZW50aXR5VHlwZXMpOwotCi0gICAgICByZXN1bHQgPSByZXN1bHQuY29uY2F0KHBhcnRpYWxfcmVz
dWx0KTsKLSAgICB9Ci0KLSAgICByZXR1cm4gcmVzdWx0LnNvcnQoKGxocywgcmhzKSA9PiBsaHMu
ZGlzdGFuY2UgLSByaHMuZGlzdGFuY2UpOwotICB9Ci0KLSAgLy8gSGl0IHRlc3RzIHRoZSBwYXNz
ZWQgaW4gcmF5IChleHByZXNzZWQgYXMgb3JpZ2luIGFuZCBkaXJlY3Rpb24pIGFnYWluc3Qgd29y
bGQgcmVnaW9uLgotICAvLyB8ZW50aXR5VHlwZXN8IGlzIGEgc2V0IG9mIEZha2VYUlJlZ2lvblR5
cGVzLgotICAvLyB8cmVnaW9ufCBpcyBGYWtlWFJSZWdpb24uCi0gIC8vIFJldHVybnMgYXJyYXkg
b2YgWFJIaXRSZXN1bHRzLCBlYWNoIGVudHJ5IHdpbGwgYmUgZGVjb3JhdGVkIHdpdGggdGhlIGRp
c3RhbmNlIGZyb20gdGhlIHJheSBvcmlnaW4gKGFsb25nIHRoZSByYXkpLgotICBfaGl0VGVzdFJl
Z2lvbihyZWdpb24sIG9yaWdpbiwgZGlyZWN0aW9uLCBlbnRpdHlUeXBlcykgewotICAgIGNvbnN0
IHJlZ2lvbk5hbWVUb01vam9FbnVtID0gewotICAgICAgInBvaW50IjpkZXZpY2UubW9qb20uRW50
aXR5VHlwZUZvckhpdFRlc3QuUE9JTlQsCi0gICAgICAicGxhbmUiOmRldmljZS5tb2pvbS5FbnRp
dHlUeXBlRm9ySGl0VGVzdC5QTEFORSwKLSAgICAgICJtZXNoIjpudWxsCi0gICAgfTsKLQotICAg
IGlmICghZW50aXR5VHlwZXMuaW5jbHVkZXMocmVnaW9uTmFtZVRvTW9qb0VudW1bcmVnaW9uLnR5
cGVdKSkgewotICAgICAgcmV0dXJuIFtdOwotICAgIH0KLQotICAgIGNvbnN0IHJlc3VsdCA9IFtd
OwotICAgIGZvciAoY29uc3QgZmFjZSBvZiByZWdpb24uZmFjZXMpIHsKLSAgICAgIGNvbnN0IG1h
eWJlX2hpdCA9IHRoaXMuX2hpdFRlc3RGYWNlKGZhY2UsIG9yaWdpbiwgZGlyZWN0aW9uKTsKLSAg
ICAgIGlmIChtYXliZV9oaXQpIHsKLSAgICAgICAgcmVzdWx0LnB1c2gobWF5YmVfaGl0KTsKLSAg
ICAgIH0KLSAgICB9Ci0KLSAgICAvLyBUaGUgcmVzdWx0cyBzaG91bGQgYmUgc29ydGVkIGJ5IGRp
c3RhbmNlIGFuZCB0aGVyZSBzaG91bGQgYmUgbm8gMiBlbnRyaWVzIHdpdGgKLSAgICAvLyB0aGUg
c2FtZSBkaXN0YW5jZSBmcm9tIHJheSBvcmlnaW4gLSB0aGF0IHdvdWxkIG1lYW4gdGhleSBhcmUg
dGhlIHNhbWUgcG9pbnQuCi0gICAgLy8gVGhpcyBzaXR1YXRpb24gaXMgcG9zc2libGUgd2hlbiBh
IHJheSBpbnRlcnNlY3RzIHRoZSByZWdpb24gdGhyb3VnaCBhbiBlZGdlIHNoYXJlZAotICAgIC8v
IGJ5IDIgZmFjZXMuCi0gICAgcmV0dXJuIHJlc3VsdC5zb3J0KChsaHMsIHJocykgPT4gbGhzLmRp
c3RhbmNlIC0gcmhzLmRpc3RhbmNlKQotICAgICAgICAgICAgICAgICAuZmlsdGVyKCh2YWwsIGlu
ZGV4LCBhcnJheSkgPT4gaW5kZXggPT09IDAgfHwgdmFsLmRpc3RhbmNlICE9PSBhcnJheVtpbmRl
eCAtIDFdLmRpc3RhbmNlKTsKLSAgfQotCi0gIC8vIEhpdCB0ZXN0cyB0aGUgcGFzc2VkIGluIHJh
eSAoZXhwcmVzc2VkIGFzIG9yaWdpbiBhbmQgZGlyZWN0aW9uKSBhZ2FpbnN0IGEgc2luZ2xlIGZh
Y2UuCi0gIC8vIHxmYWNlfCwgfG9yaWdpbnwsIGFuZCB8ZGlyZWN0aW9ufCBhcmUgc3BlY2lmaWVk
IGluIHdvcmxkIChha2EgbW9qbykgY29vcmRpbmF0ZXMuCi0gIC8vIHxmYWNlfCBpcyBhbiBhcnJh
eSBvZiBET01Qb2ludEluaXRzLgotICAvLyBSZXR1cm5zIG51bGwgaWYgdGhlIGZhY2UgZG9lcyBu
b3QgaW50ZXJzZWN0IHdpdGggdGhlIHJheSwgb3RoZXJ3aXNlIHRoZSByZXN1bHQgaXMKLSAgLy8g
YW4gWFJIaXRSZXN1bHQgd2l0aCBtYXRyaXggZGVzY3JpYmluZyB0aGUgcG9zZSBvZiB0aGUgaW50
ZXJzZWN0aW9uIHBvaW50LgotICBfaGl0VGVzdEZhY2UoZmFjZSwgb3JpZ2luLCBkaXJlY3Rpb24p
IHsKLSAgICBjb25zdCBhZGQgPSBYUk1hdGhIZWxwZXIuYWRkOwotICAgIGNvbnN0IHN1YiA9IFhS
TWF0aEhlbHBlci5zdWI7Ci0gICAgY29uc3QgbXVsID0gWFJNYXRoSGVscGVyLm11bDsKLSAgICBj
b25zdCBub3JtYWxpemUgPSBYUk1hdGhIZWxwZXIubm9ybWFsaXplOwotICAgIGNvbnN0IGRvdCA9
IFhSTWF0aEhlbHBlci5kb3Q7Ci0gICAgY29uc3QgY3Jvc3MgPSBYUk1hdGhIZWxwZXIuY3Jvc3M7
Ci0gICAgY29uc3QgbmVnID0gWFJNYXRoSGVscGVyLm5lZzsKLQotICAgIC8vMS4gQ2FsY3VsYXRl
IHBsYW5lIG5vcm1hbCBpbiB3b3JsZCBjb29yZGluYXRlcy4KLSAgICBjb25zdCBwb2ludF9BID0g
ZmFjZS52ZXJ0aWNlc1swXTsKLSAgICBjb25zdCBwb2ludF9CID0gZmFjZS52ZXJ0aWNlc1sxXTsK
LSAgICBjb25zdCBwb2ludF9DID0gZmFjZS52ZXJ0aWNlc1syXTsKLQotICAgIGNvbnN0IGVkZ2Vf
QUIgPSBzdWIocG9pbnRfQiwgcG9pbnRfQSk7Ci0gICAgY29uc3QgZWRnZV9BQyA9IHN1Yihwb2lu
dF9DLCBwb2ludF9BKTsKLQotICAgIGNvbnN0IG5vcm1hbCA9IG5vcm1hbGl6ZShjcm9zcyhlZGdl
X0FCLCBlZGdlX0FDKSk7Ci0KLSAgICBjb25zdCBudW1lcmF0b3IgPSBkb3Qoc3ViKHBvaW50X0Es
IG9yaWdpbiksIG5vcm1hbCk7Ci0gICAgY29uc3QgZGVub21pbmF0b3IgPSBkb3QoZGlyZWN0aW9u
LCBub3JtYWwpOwotCi0gICAgaWYgKE1hdGguYWJzKGRlbm9taW5hdG9yKSA8IFhSTWF0aEhlbHBl
ci5FUFNJTE9OKSB7Ci0gICAgICAvLyBQbGFuZXMgYXJlIG5lYXJseSBwYXJhbGxlbCAtIHRoZXJl
J3MgZWl0aGVyIGluZmluaXRlbHkgbWFueSBpbnRlcnNlY3Rpb24gcG9pbnRzIG9yIDAuCi0gICAg
ICAvLyBCb3RoIGNhc2VzIHNpZ25pZnkgYSAibm8gaGl0IiBmb3IgdXMuCi0gICAgICByZXR1cm4g
bnVsbDsKLSAgICB9IGVsc2UgewotICAgICAgLy8gU2luZ2xlIGludGVyc2VjdGlvbiBwb2ludCBi
ZXR3ZWVuIHRoZSBpbmZpbml0ZSBwbGFuZSBhbmQgdGhlIGxpbmUgKCpub3QqIHJheSkuCi0gICAg
ICAvLyBOZWVkIHRvIGNhbGN1bGF0ZSB0aGUgaGl0IHRlc3QgbWF0cml4IHRha2luZyBpbnRvIGFj
Y291bnQgdGhlIGZhY2UgdmVydGljZXMuCi0gICAgICBjb25zdCBkaXN0YW5jZSA9IG51bWVyYXRv
ciAvIGRlbm9taW5hdG9yOwotICAgICAgaWYgKGRpc3RhbmNlIDwgMCkgewotICAgICAgICAvLyBM
aW5lIC0gcGxhbmUgaW50ZXJzZWN0aW9uIGV4aXN0cywgYnV0IG5vdCB0aGUgaGFsZi1saW5lIC0g
cGxhbmUgZG9lcyBub3QuCi0gICAgICAgIHJldHVybiBudWxsOwotICAgICAgfSBlbHNlIHsKLSAg
ICAgICAgY29uc3QgaW50ZXJzZWN0aW9uX3BvaW50ID0gYWRkKG9yaWdpbiwgbXVsKGRpc3RhbmNl
LCBkaXJlY3Rpb24pKTsKLSAgICAgICAgLy8gU2luY2Ugd2UgYXJlIHRyZWF0aW5nIHRoZSBmYWNl
IGFzIGEgc29saWQsIGZsaXAgdGhlIG5vcm1hbCBzbyB0aGF0IGl0cwotICAgICAgICAvLyBoYWxm
LXNwYWNlIHdpbGwgY29udGFpbiB0aGUgcmF5IG9yaWdpbi4KLSAgICAgICAgY29uc3QgeV9heGlz
ID0gZGVub21pbmF0b3IgPiAwID8gbmVnKG5vcm1hbCkgOiBub3JtYWw7Ci0KLSAgICAgICAgbGV0
IHpfYXhpcyA9IG51bGw7Ci0gICAgICAgIGNvbnN0IGNvc19kaXJlY3Rpb25fYW5kX3lfYXhpcyA9
IGRvdChkaXJlY3Rpb24sIHlfYXhpcyk7Ci0gICAgICAgIGlmIChNYXRoLmFicyhjb3NfZGlyZWN0
aW9uX2FuZF95X2F4aXMpID4gKDEgLSBYUk1hdGhIZWxwZXIuRVBTSUxPTikpIHsKLSAgICAgICAg
ICAvLyBSYXkgYW5kIHRoZSBoaXQgdGVzdCBub3JtYWwgYXJlIGNvLWxpbmVhciAtIHRyeSB1c2lu
ZyB0aGUgJ3VwJyBvciAncmlnaHQnIHZlY3RvcidzIHByb2plY3Rpb24gb24gdGhlIGZhY2UgcGxh
bmUgYXMgdGhlIFogYXhpcy4KLSAgICAgICAgICAvLyBOb3RlOiB0aGlzIGVkZ2UgY2FzZSBpcyBj
dXJyZW50bHkgbm90IGNvdmVyZWQgYnkgdGhlIHNwZWMuCi0gICAgICAgICAgY29uc3QgdXAgPSB7
eDogMC4wLCB5OiAxLjAsIHo6IDAuMCwgdzogMC4wfTsKLSAgICAgICAgICBjb25zdCByaWdodCA9
IHt4OiAxLjAsIHk6IDAuMCwgejogMC4wLCB3OiAwLjB9OwotCi0gICAgICAgICAgel9heGlzID0g
TWF0aC5hYnMoZG90KHVwLCB5X2F4aXMpKSA+ICgxIC0gWFJNYXRoSGVscGVyLkVQU0lMT04pCi0g
ICAgICAgICAgICAgICAgICAgICAgICA/IHN1Yih1cCwgbXVsKGRvdChyaWdodCwgeV9heGlzKSwg
eV9heGlzKSkgIC8vIGB1cCBpcyBhbHNvIGNvLWxpbmVhciB3aXRoIGhpdCB0ZXN0IG5vcm1hbCwg
dXNlIGByaWdodGAKLSAgICAgICAgICAgICAgICAgICAgICAgIDogc3ViKHVwLCBtdWwoZG90KHVw
LCB5X2F4aXMpLCB5X2F4aXMpKTsgICAgLy8gYHVwYCBpcyBub3QgY28tbGluZWFyIHdpdGggaGl0
IHRlc3Qgbm9ybWFsLCB1c2UgaXQKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAvLyBQcm9q
ZWN0IHRoZSByYXkgZGlyZWN0aW9uIG9udG8gdGhlIHBsYW5lLCBuZWdhdGUgaXQgYW5kIHVzZSBh
cyBhIFogYXhpcy4KLSAgICAgICAgICB6X2F4aXMgPSBuZWcoc3ViKGRpcmVjdGlvbiwgbXVsKGNv
c19kaXJlY3Rpb25fYW5kX3lfYXhpcywgeV9heGlzKSkpOyAvLyBaIHNob3VsZCBwb2ludCB0b3dh
cmRzIHRoZSByYXkgb3JpZ2luLCBub3QgYXdheS4KLSAgICAgICAgfQotCi0gICAgICAgIGNvbnN0
IHhfYXhpcyA9IG5vcm1hbGl6ZShjcm9zcyh5X2F4aXMsIHpfYXhpcykpOwotCi0gICAgICAgIC8v
IEZpbHRlciBvdXQgdGhlIHBvaW50cyBub3QgaW4gcG9seWdvbi4KLSAgICAgICAgaWYgKCFYUk1h
dGhIZWxwZXIucG9pbnRJbkZhY2UoaW50ZXJzZWN0aW9uX3BvaW50LCBmYWNlKSkgewotICAgICAg
ICAgIHJldHVybiBudWxsOwotICAgICAgICB9Ci0KLSAgICAgICAgY29uc3QgaGl0UmVzdWx0ID0g
bmV3IGRldmljZS5tb2pvbS5YUkhpdFJlc3VsdCgpOwotICAgICAgICBoaXRSZXN1bHQuZGlzdGFu
Y2UgPSBkaXN0YW5jZTsgIC8vIEV4dGVuZCB0aGUgb2JqZWN0IHdpdGggYWRkaXRpb25hbCBpbmZv
cm1hdGlvbiB1c2VkIGJ5IGhpZ2hlciBsYXllcnMuCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gSXQgd2lsbCBub3QgYmUgc2VyaWFsaXplZCBvdmVyIG1vam9tLgot
Ci0gICAgICAgIGNvbnN0IG1hdHJpeCA9IG5ldyBBcnJheSgxNik7Ci0KLSAgICAgICAgbWF0cml4
WzBdID0geF9heGlzLng7Ci0gICAgICAgIG1hdHJpeFsxXSA9IHhfYXhpcy55OwotICAgICAgICBt
YXRyaXhbMl0gPSB4X2F4aXMuejsKLSAgICAgICAgbWF0cml4WzNdID0gMDsKLQotICAgICAgICBt
YXRyaXhbNF0gPSB5X2F4aXMueDsKLSAgICAgICAgbWF0cml4WzVdID0geV9heGlzLnk7Ci0gICAg
ICAgIG1hdHJpeFs2XSA9IHlfYXhpcy56OwotICAgICAgICBtYXRyaXhbN10gPSAwOwotCi0gICAg
ICAgIG1hdHJpeFs4XSA9IHpfYXhpcy54OwotICAgICAgICBtYXRyaXhbOV0gPSB6X2F4aXMueTsK
LSAgICAgICAgbWF0cml4WzEwXSA9IHpfYXhpcy56OwotICAgICAgICBtYXRyaXhbMTFdID0gMDsK
LQotICAgICAgICBtYXRyaXhbMTJdID0gaW50ZXJzZWN0aW9uX3BvaW50Lng7Ci0gICAgICAgIG1h
dHJpeFsxM10gPSBpbnRlcnNlY3Rpb25fcG9pbnQueTsKLSAgICAgICAgbWF0cml4WzE0XSA9IGlu
dGVyc2VjdGlvbl9wb2ludC56OwotICAgICAgICBtYXRyaXhbMTVdID0gMTsKLQotICAgICAgICBo
aXRSZXN1bHQubW9qb0Zyb21SZXN1bHQgPSBYUk1hdGhIZWxwZXIuZGVjb21wb3NlUmlnaWRUcmFu
c2Zvcm0obWF0cml4KTsKLQotICAgICAgICByZXR1cm4gaGl0UmVzdWx0OwotICAgICAgfQotICAg
IH0KLSAgfQotCi0gIF9nZXRNb2pvRnJvbVZpZXdlcigpIHsKLSAgICBjb25zdCB0cmFuc2Zvcm0g
PSB7Ci0gICAgICBwb3NpdGlvbjogWwotICAgICAgICB0aGlzLnBvc2VfLnBvc2l0aW9uLngsCi0g
ICAgICAgIHRoaXMucG9zZV8ucG9zaXRpb24ueSwKLSAgICAgICAgdGhpcy5wb3NlXy5wb3NpdGlv
bi56XSwKLSAgICAgIG9yaWVudGF0aW9uOiBbCi0gICAgICAgIHRoaXMucG9zZV8ub3JpZW50YXRp
b24ueCwKLSAgICAgICAgdGhpcy5wb3NlXy5vcmllbnRhdGlvbi55LAotICAgICAgICB0aGlzLnBv
c2VfLm9yaWVudGF0aW9uLnosCi0gICAgICAgIHRoaXMucG9zZV8ub3JpZW50YXRpb24ud10sCi0g
ICAgfTsKLQotICAgIHJldHVybiBnZXRNYXRyaXhGcm9tVHJhbnNmb3JtKHRyYW5zZm9ybSk7Ci0g
IH0KLQotICBfZ2V0TW9qb0Zyb21OYXRpdmVPcmlnaW4obmF0aXZlT3JpZ2luSW5mb3JtYXRpb24p
IHsKLSAgICBjb25zdCBtb2pvX2Zyb21fdmlld2VyID0gdGhpcy5fZ2V0TW9qb0Zyb21WaWV3ZXIo
KTsKLQotICAgIGlmIChuYXRpdmVPcmlnaW5JbmZvcm1hdGlvbi4kdGFnID09IGRldmljZS5tb2pv
bS5YUk5hdGl2ZU9yaWdpbkluZm9ybWF0aW9uLlRhZ3MuaW5wdXRTb3VyY2VJZCkgewotICAgICAg
aWYgKCF0aGlzLmlucHV0X3NvdXJjZXNfLmhhcyhuYXRpdmVPcmlnaW5JbmZvcm1hdGlvbi5pbnB1
dFNvdXJjZUlkKSkgewotICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgIH0gZWxzZSB7Ci0gICAg
ICAgIGNvbnN0IGlucHV0U291cmNlID0gdGhpcy5pbnB1dF9zb3VyY2VzXy5nZXQobmF0aXZlT3Jp
Z2luSW5mb3JtYXRpb24uaW5wdXRTb3VyY2VJZCk7Ci0gICAgICAgIHJldHVybiBpbnB1dFNvdXJj
ZS5fZ2V0TW9qb0Zyb21JbnB1dFNvdXJjZShtb2pvX2Zyb21fdmlld2VyKTsKLSAgICAgIH0KLSAg
ICB9IGVsc2UgaWYgKG5hdGl2ZU9yaWdpbkluZm9ybWF0aW9uLiR0YWcgPT0gZGV2aWNlLm1vam9t
LlhSTmF0aXZlT3JpZ2luSW5mb3JtYXRpb24uVGFncy5yZWZlcmVuY2VTcGFjZVR5cGUpIHsKLSAg
ICAgIHN3aXRjaCAobmF0aXZlT3JpZ2luSW5mb3JtYXRpb24ucmVmZXJlbmNlU3BhY2VUeXBlKSB7
Ci0gICAgICAgIGNhc2UgZGV2aWNlLm1vam9tLlhSUmVmZXJlbmNlU3BhY2VUeXBlLmtMb2NhbDoK
LSAgICAgICAgICByZXR1cm4gWFJNYXRoSGVscGVyLmlkZW50aXR5KCk7Ci0gICAgICAgIGNhc2Ug
ZGV2aWNlLm1vam9tLlhSUmVmZXJlbmNlU3BhY2VUeXBlLmtMb2NhbEZsb29yOgotICAgICAgICAg
IGlmICh0aGlzLnN0YWdlUGFyYW1ldGVyc18gPT0gbnVsbCB8fCB0aGlzLnN0YWdlUGFyYW1ldGVy
c18ubW9qb0Zyb21GbG9vciA9PSBudWxsKSB7Ci0gICAgICAgICAgICBjb25zb2xlLndhcm4oIlN0
YW5kaW5nIHRyYW5zZm9ybSBub3QgYXZhaWxhYmxlLiIpOwotICAgICAgICAgICAgcmV0dXJuIG51
bGw7Ci0gICAgICAgICAgfQotICAgICAgICAgIHJldHVybiB0aGlzLnN0YWdlUGFyYW1ldGVyc18u
bW9qb0Zyb21GbG9vci5tYXRyaXg7Ci0gICAgICAgIGNhc2UgZGV2aWNlLm1vam9tLlhSUmVmZXJl
bmNlU3BhY2VUeXBlLmtWaWV3ZXI6Ci0gICAgICAgICAgcmV0dXJuIG1vam9fZnJvbV92aWV3ZXI7
Ci0gICAgICAgIGNhc2UgZGV2aWNlLm1vam9tLlhSUmVmZXJlbmNlU3BhY2VUeXBlLmtCb3VuZGVk
RmxvcjoKLSAgICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgICAgY2FzZSBkZXZpY2UubW9qb20u
WFJSZWZlcmVuY2VTcGFjZVR5cGUua1VuYm91bmRlZDoKLSAgICAgICAgICByZXR1cm4gbnVsbDsK
LSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCJVbnJlY29n
bml6ZWQgWFJSZWZlcmVuY2VTcGFjZVR5cGUhIik7Ci0gICAgICB9Ci0gICAgfSBlbHNlIHsKLSAg
ICAgIC8vIEFuY2hvcnMgJiBwbGFuZXMgYXJlIG5vdCB5ZXQgc3VwcG9ydGVkIGZvciBoaXQgdGVz
dC4KLSAgICAgIHJldHVybiBudWxsOwotICAgIH0KLSAgfQotfQotCi1jbGFzcyBNb2NrWFJTZXNz
aW9uTWV0cmljc1JlY29yZGVyIHsKLSAgcmVwb3J0RmVhdHVyZVVzZWQoZmVhdHVyZSkgewotICAg
IC8vIERvIG5vdGhpbmcKLSAgfQotfQotCi1jbGFzcyBNb2NrWFJJbnB1dFNvdXJjZSB7Ci0gIGNv
bnN0cnVjdG9yKGZha2VJbnB1dFNvdXJjZUluaXQsIGlkLCBwYWlyZWREZXZpY2UpIHsKLSAgICB0
aGlzLnNvdXJjZV9pZF8gPSBpZDsKLSAgICB0aGlzLnBhaXJlZERldmljZV8gPSBwYWlyZWREZXZp
Y2U7Ci0gICAgdGhpcy5oYW5kZWRuZXNzXyA9IGZha2VJbnB1dFNvdXJjZUluaXQuaGFuZGVkbmVz
czsKLSAgICB0aGlzLnRhcmdldF9yYXlfbW9kZV8gPSBmYWtlSW5wdXRTb3VyY2VJbml0LnRhcmdl
dFJheU1vZGU7Ci0KLSAgICBpZiAoZmFrZUlucHV0U291cmNlSW5pdC5wb2ludGVyT3JpZ2luID09
IG51bGwpIHsKLSAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoIkZha2VYUklucHV0U291cmNlSW5p
dC5wb2ludGVyT3JpZ2luIGlzIHJlcXVpcmVkLiIpOwotICAgIH0KLQotICAgIHRoaXMuc2V0UG9p
bnRlck9yaWdpbihmYWtlSW5wdXRTb3VyY2VJbml0LnBvaW50ZXJPcmlnaW4pOwotICAgIHRoaXMu
c2V0UHJvZmlsZXMoZmFrZUlucHV0U291cmNlSW5pdC5wcm9maWxlcyk7Ci0KLSAgICB0aGlzLnBy
aW1hcnlfaW5wdXRfcHJlc3NlZF8gPSBmYWxzZTsKLSAgICBpZiAoZmFrZUlucHV0U291cmNlSW5p
dC5zZWxlY3Rpb25TdGFydGVkICE9IG51bGwpIHsKLSAgICAgIHRoaXMucHJpbWFyeV9pbnB1dF9w
cmVzc2VkXyA9IGZha2VJbnB1dFNvdXJjZUluaXQuc2VsZWN0aW9uU3RhcnRlZDsKLSAgICB9Ci0K
LSAgICB0aGlzLnByaW1hcnlfaW5wdXRfY2xpY2tlZF8gPSBmYWxzZTsKLSAgICBpZiAoZmFrZUlu
cHV0U291cmNlSW5pdC5zZWxlY3Rpb25DbGlja2VkICE9IG51bGwpIHsKLSAgICAgIHRoaXMucHJp
bWFyeV9pbnB1dF9jbGlja2VkXyA9IGZha2VJbnB1dFNvdXJjZUluaXQuc2VsZWN0aW9uQ2xpY2tl
ZDsKLSAgICB9Ci0KLSAgICB0aGlzLnByaW1hcnlfc3F1ZWV6ZV9wcmVzc2VkXyA9IGZhbHNlOwot
ICAgIHRoaXMucHJpbWFyeV9zcXVlZXplX2NsaWNrZWRfID0gZmFsc2U7Ci0KLSAgICB0aGlzLm1v
am9fZnJvbV9pbnB1dF8gPSBudWxsOwotICAgIGlmIChmYWtlSW5wdXRTb3VyY2VJbml0LmdyaXBP
cmlnaW4gIT0gbnVsbCkgewotICAgICAgdGhpcy5zZXRHcmlwT3JpZ2luKGZha2VJbnB1dFNvdXJj
ZUluaXQuZ3JpcE9yaWdpbik7Ci0gICAgfQotCi0gICAgLy8gVGhpcyBwcm9wZXJseSBoYW5kbGVz
IGlmIHN1cHBvcnRlZEJ1dHRvbnMgd2VyZSBub3Qgc3BlY2lmaWVkLgotICAgIHRoaXMuc2V0U3Vw
cG9ydGVkQnV0dG9ucyhmYWtlSW5wdXRTb3VyY2VJbml0LnN1cHBvcnRlZEJ1dHRvbnMpOwotCi0g
ICAgdGhpcy5lbXVsYXRlZF9wb3NpdGlvbl8gPSBmYWxzZTsKLSAgICB0aGlzLmRlc2NfZGlydHlf
ID0gdHJ1ZTsKLSAgfQotCi0gIC8vIFdlYnhyLXRlc3QtYXBpCi0gIHNldEhhbmRlZG5lc3MoaGFu
ZGVkbmVzcykgewotICAgIGlmICh0aGlzLmhhbmRlZG5lc3NfICE9IGhhbmRlZG5lc3MpIHsKLSAg
ICAgIHRoaXMuZGVzY19kaXJ0eV8gPSB0cnVlOwotICAgICAgdGhpcy5oYW5kZWRuZXNzXyA9IGhh
bmRlZG5lc3M7Ci0gICAgfQotICB9Ci0KLSAgc2V0VGFyZ2V0UmF5TW9kZSh0YXJnZXRSYXlNb2Rl
KSB7Ci0gICAgaWYgKHRoaXMudGFyZ2V0X3JheV9tb2RlXyAhPSB0YXJnZXRSYXlNb2RlKSB7Ci0g
ICAgICB0aGlzLmRlc2NfZGlydHlfID0gdHJ1ZTsKLSAgICAgIHRoaXMudGFyZ2V0X3JheV9tb2Rl
XyA9IHRhcmdldFJheU1vZGU7Ci0gICAgfQotICB9Ci0KLSAgc2V0UHJvZmlsZXMocHJvZmlsZXMp
IHsKLSAgICB0aGlzLmRlc2NfZGlydHlfID0gdHJ1ZTsKLSAgICB0aGlzLnByb2ZpbGVzXyA9IHBy
b2ZpbGVzOwotICB9Ci0KLSAgc2V0R3JpcE9yaWdpbih0cmFuc2Zvcm0sIGVtdWxhdGVkUG9zaXRp
b24gPSBmYWxzZSkgewotICAgIC8vIGdyaXBfb3JpZ2luIHdhcyByZW5hbWVkIHRvIG1vam9fZnJv
bV9pbnB1dCBpbiBtb2pvCi0gICAgdGhpcy5tb2pvX2Zyb21faW5wdXRfID0gY29tcG9zZUdGWFRy
YW5zZm9ybSh0cmFuc2Zvcm0pOwotICAgIHRoaXMuZW11bGF0ZWRfcG9zaXRpb25fID0gZW11bGF0
ZWRQb3NpdGlvbjsKLQotICAgIC8vIFRlY2huaWNhbGx5LCBzZXR0aW5nIHRoZSBncmlwIHNob3Vs
ZG4ndCBtYWtlIHRoZSBkZXNjcmlwdGlvbiBkaXJ0eSwgYnV0Ci0gICAgLy8gdGhlIHdlYnhyLXRl
c3QtYXBpIHNldHMgb3VyIHBvaW50ZXIgYXMgbW9qb0Zyb21Qb2ludGVyOyBob3dldmVyLCB3ZSBv
bmx5Ci0gICAgLy8gc3VwcG9ydCBpdCBhY3Jvc3MgbW9qb20gYXMgaW5wdXRGcm9tUG9pbnRlciwg
c28gd2UgbmVlZCB0byByZWNhbGN1bGF0ZSBpdAotICAgIC8vIHdoZW5ldmVyIHRoZSBncmlwIG1v
dmVzLgotICAgIHRoaXMuZGVzY19kaXJ0eV8gPSB0cnVlOwotICB9Ci0KLSAgY2xlYXJHcmlwT3Jp
Z2luKCkgewotICAgIC8vIGdyaXBfb3JpZ2luIHdhcyByZW5hbWVkIHRvIG1vam9fZnJvbV9pbnB1
dCBpbiBtb2pvCi0gICAgaWYgKHRoaXMubW9qb19mcm9tX2lucHV0XyAhPSBudWxsKSB7Ci0gICAg
ICB0aGlzLm1vam9fZnJvbV9pbnB1dF8gPSBudWxsOwotICAgICAgdGhpcy5lbXVsYXRlZF9wb3Np
dGlvbl8gPSBmYWxzZTsKLSAgICAgIHRoaXMuZGVzY19kaXJ0eV8gPSB0cnVlOwotICAgIH0KLSAg
fQotCi0gIHNldFBvaW50ZXJPcmlnaW4odHJhbnNmb3JtLCBlbXVsYXRlZFBvc2l0aW9uID0gZmFs
c2UpIHsKLSAgICAvLyBwb2ludGVyX29yaWdpbiBpcyBtb2pvX2Zyb21fcG9pbnRlci4KLSAgICB0
aGlzLmRlc2NfZGlydHlfID0gdHJ1ZTsKLSAgICB0aGlzLm1vam9fZnJvbV9wb2ludGVyXyA9IGNv
bXBvc2VHRlhUcmFuc2Zvcm0odHJhbnNmb3JtKTsKLSAgICB0aGlzLmVtdWxhdGVkX3Bvc2l0aW9u
XyA9IGVtdWxhdGVkUG9zaXRpb247Ci0gIH0KLQotICBkaXNjb25uZWN0KCkgewotICAgIHRoaXMu
cGFpcmVkRGV2aWNlXy5yZW1vdmVJbnB1dFNvdXJjZSh0aGlzKTsKLSAgfQotCi0gIHJlY29ubmVj
dCgpIHsKLSAgICB0aGlzLnBhaXJlZERldmljZV8uYWRkSW5wdXRTb3VyY2UodGhpcyk7Ci0gIH0K
LQotICBzdGFydFNlbGVjdGlvbigpIHsKLSAgICB0aGlzLnByaW1hcnlfaW5wdXRfcHJlc3NlZF8g
PSB0cnVlOwotICAgIGlmICh0aGlzLmdhbWVwYWRfKSB7Ci0gICAgICB0aGlzLmdhbWVwYWRfLmJ1
dHRvbnNbMF0ucHJlc3NlZCA9IHRydWU7Ci0gICAgICB0aGlzLmdhbWVwYWRfLmJ1dHRvbnNbMF0u
dG91Y2hlZCA9IHRydWU7Ci0gICAgfQotICB9Ci0KLSAgZW5kU2VsZWN0aW9uKCkgewotICAgIGlm
ICghdGhpcy5wcmltYXJ5X2lucHV0X3ByZXNzZWRfKSB7Ci0gICAgICB0aHJvdyBuZXcgRXJyb3Io
IkF0dGVtcHRlZCB0byBlbmQgc2VsZWN0aW9uIHdoaWNoIHdhcyBub3Qgc3RhcnRlZCIpOwotICAg
IH0KLQotICAgIHRoaXMucHJpbWFyeV9pbnB1dF9wcmVzc2VkXyA9IGZhbHNlOwotICAgIHRoaXMu
cHJpbWFyeV9pbnB1dF9jbGlja2VkXyA9IHRydWU7Ci0KLSAgICBpZiAodGhpcy5nYW1lcGFkXykg
ewotICAgICAgdGhpcy5nYW1lcGFkXy5idXR0b25zWzBdLnByZXNzZWQgPSBmYWxzZTsKLSAgICAg
IHRoaXMuZ2FtZXBhZF8uYnV0dG9uc1swXS50b3VjaGVkID0gZmFsc2U7Ci0gICAgfQotICB9Ci0K
LSAgc2ltdWxhdGVTZWxlY3QoKSB7Ci0gICAgdGhpcy5wcmltYXJ5X2lucHV0X2NsaWNrZWRfID0g
dHJ1ZTsKLSAgfQotCi0gIHNldFN1cHBvcnRlZEJ1dHRvbnMoc3VwcG9ydGVkQnV0dG9ucykgewot
ICAgIHRoaXMuZ2FtZXBhZF8gPSBudWxsOwotICAgIHRoaXMuc3VwcG9ydGVkX2J1dHRvbnNfID0g
W107Ci0KLSAgICAvLyBJZiB0aGVyZSBhcmUgbm8gc3VwcG9ydGVkIGJ1dHRvbnMsIHdlIGNhbiBz
dG9wIG5vdy4KLSAgICBpZiAoc3VwcG9ydGVkQnV0dG9ucyA9PSBudWxsIHx8IHN1cHBvcnRlZEJ1
dHRvbnMubGVuZ3RoIDwgMSkgewotICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGNvbnN0IHN1
cHBvcnRlZF9idXR0b25fbWFwID0ge307Ci0gICAgdGhpcy5nYW1lcGFkXyA9IHRoaXMuZ2V0RW1w
dHlHYW1lcGFkKCk7Ci0gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzdXBwb3J0ZWRCdXR0b25zLmxl
bmd0aDsgaSsrKSB7Ci0gICAgICBjb25zdCBidXR0b25UeXBlID0gc3VwcG9ydGVkQnV0dG9uc1tp
XS5idXR0b25UeXBlOwotICAgICAgdGhpcy5zdXBwb3J0ZWRfYnV0dG9uc18ucHVzaChidXR0b25U
eXBlKTsKLSAgICAgIHN1cHBvcnRlZF9idXR0b25fbWFwW2J1dHRvblR5cGVdID0gc3VwcG9ydGVk
QnV0dG9uc1tpXTsKLSAgICB9Ci0KLSAgICAvLyBMZXQncyBzdGFydCBieSBidWlsZGluZyB0aGUg
YnV0dG9uIHN0YXRlIGluIG9yZGVyIG9mIHByaW9yaXR5OgotICAgIC8vIFByaW1hcnkgYnV0dG9u
IGlzIGluZGV4IDAuCi0gICAgdGhpcy5nYW1lcGFkXy5idXR0b25zLnB1c2goewotICAgICAgcHJl
c3NlZDogdGhpcy5wcmltYXJ5X2lucHV0X3ByZXNzZWRfLAotICAgICAgdG91Y2hlZDogdGhpcy5w
cmltYXJ5X2lucHV0X3ByZXNzZWRfLAotICAgICAgdmFsdWU6IHRoaXMucHJpbWFyeV9pbnB1dF9w
cmVzc2VkXyA/IDEuMCA6IDAuMAotICAgIH0pOwotCi0gICAgLy8gTm93IGFkZCB0aGUgcmVzdCBv
ZiBvdXIgYnV0dG9ucwotICAgIHRoaXMuYWRkR2FtZXBhZEJ1dHRvbihzdXBwb3J0ZWRfYnV0dG9u
X21hcFsnZ3JpcCddKTsKLSAgICB0aGlzLmFkZEdhbWVwYWRCdXR0b24oc3VwcG9ydGVkX2J1dHRv
bl9tYXBbJ3RvdWNocGFkJ10pOwotICAgIHRoaXMuYWRkR2FtZXBhZEJ1dHRvbihzdXBwb3J0ZWRf
YnV0dG9uX21hcFsndGh1bWJzdGljayddKTsKLSAgICB0aGlzLmFkZEdhbWVwYWRCdXR0b24oc3Vw
cG9ydGVkX2J1dHRvbl9tYXBbJ29wdGlvbmFsLWJ1dHRvbiddKTsKLSAgICB0aGlzLmFkZEdhbWVw
YWRCdXR0b24oc3VwcG9ydGVkX2J1dHRvbl9tYXBbJ29wdGlvbmFsLXRodW1ic3RpY2snXSk7Ci0K
LSAgICAvLyBGaW5hbGx5LCBiYWNrLWZpbGwgcGxhY2Vob2xkZXIgYnV0dG9ucy9heGVzCi0gICAg
Zm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmdhbWVwYWRfLmJ1dHRvbnMubGVuZ3RoOyBpKyspIHsK
LSAgICAgIGlmICh0aGlzLmdhbWVwYWRfLmJ1dHRvbnNbaV0gPT0gbnVsbCkgewotICAgICAgICB0
aGlzLmdhbWVwYWRfLmJ1dHRvbnNbaV0gPSB7Ci0gICAgICAgICAgcHJlc3NlZDogZmFsc2UsCi0g
ICAgICAgICAgdG91Y2hlZDogZmFsc2UsCi0gICAgICAgICAgdmFsdWU6IDAKLSAgICAgICAgfTsK
LSAgICAgIH0KLSAgICB9Ci0KLSAgICBmb3IgKGxldCBpPTA7IGkgPCB0aGlzLmdhbWVwYWRfLmF4
ZXMubGVuZ3RoOyBpKyspIHsKLSAgICAgIGlmICh0aGlzLmdhbWVwYWRfLmF4ZXNbaV0gPT0gbnVs
bCkgewotICAgICAgICB0aGlzLmdhbWVwYWRfLmF4ZXNbaV0gPSAwOwotICAgICAgfQotICAgIH0K
LSAgfQotCi0gIHVwZGF0ZUJ1dHRvblN0YXRlKGJ1dHRvblN0YXRlKSB7Ci0gICAgaWYgKHRoaXMu
c3VwcG9ydGVkX2J1dHRvbnNfLmluZGV4T2YoYnV0dG9uU3RhdGUuYnV0dG9uVHlwZSkgPT0gLTEp
IHsKLSAgICAgIHRocm93IG5ldyBFcnJvcigiVHJpZWQgdG8gdXBkYXRlIHN0YXRlIG9uIGFuIHVu
c3VwcG9ydGVkIGJ1dHRvbiIpOwotICAgIH0KLQotICAgIGNvbnN0IGJ1dHRvbkluZGV4ID0gdGhp
cy5nZXRCdXR0b25JbmRleChidXR0b25TdGF0ZS5idXR0b25UeXBlKTsKLSAgICBjb25zdCBheGVz
U3RhcnRJbmRleCA9IHRoaXMuZ2V0QXhlc1N0YXJ0SW5kZXgoYnV0dG9uU3RhdGUuYnV0dG9uVHlw
ZSk7Ci0KLSAgICBpZiAoYnV0dG9uSW5kZXggPT0gLTEpIHsKLSAgICAgIHRocm93IG5ldyBFcnJv
cigiVW5rbm93biBCdXR0b24gVHlwZSEiKTsKLSAgICB9Ci0KLSAgICAvLyBpcyB0aGlzIGEgJ3Nx
dWVlemUnIGJ1dHRvbj8KLSAgICBpZiAoYnV0dG9uSW5kZXggPT09IHRoaXMuZ2V0QnV0dG9uSW5k
ZXgoJ2dyaXAnKSkgewotICAgICAgLy8gc3F1ZWV6ZQotICAgICAgaWYgKGJ1dHRvblN0YXRlLnBy
ZXNzZWQpIHsKLSAgICAgICAgdGhpcy5wcmltYXJ5X3NxdWVlemVfcHJlc3NlZF8gPSB0cnVlOwot
ICAgICAgfSBlbHNlIGlmICh0aGlzLmdhbWVwYWRfLmJ1dHRvbnNbYnV0dG9uSW5kZXhdLnByZXNz
ZWQpIHsKLSAgICAgICAgdGhpcy5wcmltYXJ5X3NxdWVlemVfY2xpY2tlZF8gPSB0cnVlOwotICAg
ICAgICB0aGlzLnByaW1hcnlfc3F1ZWV6ZV9wcmVzc2VkXyA9IGZhbHNlOwotICAgICAgfSBlbHNl
IHsKLSAgICAgICAgdGhpcy5wcmltYXJ5X3NxdWVlemVfY2xpY2tlZF8gPSBmYWxzZTsKLSAgICAg
ICAgdGhpcy5wcmltYXJ5X3NxdWVlemVfcHJlc3NlZF8gPSBmYWxzZTsKLSAgICAgIH0KLSAgICB9
Ci0KLSAgICB0aGlzLmdhbWVwYWRfLmJ1dHRvbnNbYnV0dG9uSW5kZXhdLnByZXNzZWQgPSBidXR0
b25TdGF0ZS5wcmVzc2VkOwotICAgIHRoaXMuZ2FtZXBhZF8uYnV0dG9uc1tidXR0b25JbmRleF0u
dG91Y2hlZCA9IGJ1dHRvblN0YXRlLnRvdWNoZWQ7Ci0gICAgdGhpcy5nYW1lcGFkXy5idXR0b25z
W2J1dHRvbkluZGV4XS52YWx1ZSA9IGJ1dHRvblN0YXRlLnByZXNzZWRWYWx1ZTsKLQotICAgIGlm
IChheGVzU3RhcnRJbmRleCAhPSAtMSkgewotICAgICAgdGhpcy5nYW1lcGFkXy5heGVzW2F4ZXNT
dGFydEluZGV4XSA9IGJ1dHRvblN0YXRlLnhWYWx1ZSA9PSBudWxsID8gMC4wIDogYnV0dG9uU3Rh
dGUueFZhbHVlOwotICAgICAgdGhpcy5nYW1lcGFkXy5heGVzW2F4ZXNTdGFydEluZGV4ICsgMV0g
PSBidXR0b25TdGF0ZS55VmFsdWUgPT0gbnVsbCA/IDAuMCA6IGJ1dHRvblN0YXRlLnlWYWx1ZTsK
LSAgICB9Ci0gIH0KLQotICAvLyBIZWxwZXJzIGZvciBNb2pvbQotICBnZXRJbnB1dFNvdXJjZVN0
YXRlKCkgewotICAgIGNvbnN0IGlucHV0X3N0YXRlID0gbmV3IGRldmljZS5tb2pvbS5YUklucHV0
U291cmNlU3RhdGUoKTsKLQotICAgIGlucHV0X3N0YXRlLnNvdXJjZUlkID0gdGhpcy5zb3VyY2Vf
aWRfOwotCi0gICAgaW5wdXRfc3RhdGUucHJpbWFyeUlucHV0UHJlc3NlZCA9IHRoaXMucHJpbWFy
eV9pbnB1dF9wcmVzc2VkXzsKLSAgICBpbnB1dF9zdGF0ZS5wcmltYXJ5SW5wdXRDbGlja2VkID0g
dGhpcy5wcmltYXJ5X2lucHV0X2NsaWNrZWRfOwotCi0gICAgaW5wdXRfc3RhdGUucHJpbWFyeVNx
dWVlemVQcmVzc2VkID0gdGhpcy5wcmltYXJ5X3NxdWVlemVfcHJlc3NlZF87Ci0gICAgaW5wdXRf
c3RhdGUucHJpbWFyeVNxdWVlemVDbGlja2VkID0gdGhpcy5wcmltYXJ5X3NxdWVlemVfY2xpY2tl
ZF87Ci0gICAgLy8gU2V0dGluZyB0aGUgaW5wdXQgc291cmNlJ3MgImNsaWNrZWQiIHN0YXRlIHNo
b3VsZCBnZW5lcmF0ZSBvbmUgInNlbGVjdCIKLSAgICAvLyBldmVudC4gUmVzZXQgdGhlIGlucHV0
IHZhbHVlIHRvIHByZXZlbnQgaXQgZnJvbSBjb250aW51b3VzbHkgZ2VuZXJhdGluZwotICAgIC8v
IGV2ZW50cy4KLSAgICB0aGlzLnByaW1hcnlfaW5wdXRfY2xpY2tlZF8gPSBmYWxzZTsKLSAgICAv
LyBTZXR0aW5nIHRoZSBpbnB1dCBzb3VyY2UncyAiY2xpY2tlZCIgc3RhdGUgc2hvdWxkIGdlbmVy
YXRlIG9uZSAic3F1ZWV6ZSIKLSAgICAvLyBldmVudC4gUmVzZXQgdGhlIGlucHV0IHZhbHVlIHRv
IHByZXZlbnQgaXQgZnJvbSBjb250aW51b3VzbHkgZ2VuZXJhdGluZwotICAgIC8vIGV2ZW50cy4K
LSAgICB0aGlzLnByaW1hcnlfc3F1ZWV6ZV9jbGlja2VkXyA9IGZhbHNlOwotCi0gICAgaW5wdXRf
c3RhdGUubW9qb0Zyb21JbnB1dCA9IHRoaXMubW9qb19mcm9tX2lucHV0XzsKLQotICAgIGlucHV0
X3N0YXRlLmdhbWVwYWQgPSB0aGlzLmdhbWVwYWRfOwotCi0gICAgaW5wdXRfc3RhdGUuZW11bGF0
ZWRQb3NpdGlvbiA9IHRoaXMuZW11bGF0ZWRfcG9zaXRpb25fOwotCi0gICAgaWYgKHRoaXMuZGVz
Y19kaXJ0eV8pIHsKLSAgICAgIGNvbnN0IGlucHV0X2Rlc2MgPSBuZXcgZGV2aWNlLm1vam9tLlhS
SW5wdXRTb3VyY2VEZXNjcmlwdGlvbigpOwotCi0gICAgICBzd2l0Y2ggKHRoaXMudGFyZ2V0X3Jh
eV9tb2RlXykgewotICAgICAgICBjYXNlICdnYXplJzoKLSAgICAgICAgICBpbnB1dF9kZXNjLnRh
cmdldFJheU1vZGUgPSBkZXZpY2UubW9qb20uWFJUYXJnZXRSYXlNb2RlLkdBWklORzsKLSAgICAg
ICAgICBicmVhazsKLSAgICAgICAgY2FzZSAndHJhY2tlZC1wb2ludGVyJzoKLSAgICAgICAgICBp
bnB1dF9kZXNjLnRhcmdldFJheU1vZGUgPSBkZXZpY2UubW9qb20uWFJUYXJnZXRSYXlNb2RlLlBP
SU5USU5HOwotICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlICdzY3JlZW4nOgotICAgICAg
ICAgIGlucHV0X2Rlc2MudGFyZ2V0UmF5TW9kZSA9IGRldmljZS5tb2pvbS5YUlRhcmdldFJheU1v
ZGUuVEFQUElORzsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAg
ICB0aHJvdyBuZXcgRXJyb3IoJ1VuaGFuZGxlZCB0YXJnZXQgcmF5IG1vZGUgJyArIHRoaXMudGFy
Z2V0X3JheV9tb2RlXyk7Ci0gICAgICB9Ci0KLSAgICAgIHN3aXRjaCAodGhpcy5oYW5kZWRuZXNz
XykgewotICAgICAgICBjYXNlICdsZWZ0JzoKLSAgICAgICAgICBpbnB1dF9kZXNjLmhhbmRlZG5l
c3MgPSBkZXZpY2UubW9qb20uWFJIYW5kZWRuZXNzLkxFRlQ7Ci0gICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIGNhc2UgJ3JpZ2h0JzoKLSAgICAgICAgICBpbnB1dF9kZXNjLmhhbmRlZG5lc3MgPSBk
ZXZpY2UubW9qb20uWFJIYW5kZWRuZXNzLlJJR0hUOwotICAgICAgICAgIGJyZWFrOwotICAgICAg
ICBkZWZhdWx0OgotICAgICAgICAgIGlucHV0X2Rlc2MuaGFuZGVkbmVzcyA9IGRldmljZS5tb2pv
bS5YUkhhbmRlZG5lc3MuTk9ORTsKLSAgICAgICAgICBicmVhazsKLSAgICAgIH0KLQotICAgICAg
Ly8gTW9qbyByZXF1aXJlcyB1cyB0byBzZW5kIHRoZSBwb2ludGVyT3JpZ2luIGFzIHJlbGF0aXZl
IHRvIHRoZSBncmlwCi0gICAgICAvLyBzcGFjZS4gSWYgd2UgZG9uJ3QgaGF2ZSBhIGdyaXAgc3Bh
Y2UsIHdlJ2xsIGp1c3QgYXNzdW1lIHRoYXQgdGhlcmUKLSAgICAgIC8vIGlzIGEgZ3JpcCBhdCBp
ZGVudGl0eS4gVGhpcyBhbGxvd3MgdGVzdHMgdG8gc2ltdWxhdGUgY29udHJvbGxlcnMgdGhhdAot
ICAgICAgLy8gYXJlIHJlYWxseSBqdXN0IGEgcG9pbnRlciB3aXRoIG5vIHRyYWNrZWQgZ3JpcCwg
dGhvdWdoIHdlIHdpbGwgZW5kIHVwCi0gICAgICAvLyBleHBvc2luZyB0aGF0IGdyaXAgc3BhY2Uu
Ci0gICAgICBsZXQgbW9qb19mcm9tX2lucHV0ID0gWFJNYXRoSGVscGVyLmlkZW50aXR5KCk7Ci0g
ICAgICBzd2l0Y2ggKHRoaXMudGFyZ2V0X3JheV9tb2RlXykgewotICAgICAgICBjYXNlICdnYXpl
JzoKLSAgICAgICAgY2FzZSAnc2NyZWVuJzoKLSAgICAgICAgICAvLyBGb3IgZ2F6ZSBhbmQgc2Ny
ZWVuIHNwYWNlLCB3ZSB3b24ndCBoYXZlIGEgbW9qb19mcm9tX2lucHV0OyBob3dldmVyCi0gICAg
ICAgICAgLy8gdGhlICJpbnB1dCIgcG9zaXRpb24gaXMganVzdCB0aGUgdmlld2VyLCBzbyB1c2Ug
bW9qb19mcm9tX3ZpZXdlci4KLSAgICAgICAgICBtb2pvX2Zyb21faW5wdXQgPSB0aGlzLnBhaXJl
ZERldmljZV8uX2dldE1vam9Gcm9tVmlld2VyKCk7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IGNhc2UgJ3RyYWNrZWQtcG9pbnRlcic6Ci0gICAgICAgICAgLy8gSWYgd2UgaGF2ZSBhIHRyYWNr
ZWQgZ3JpcCBwb3NpdGlvbiAoZS5nLiBtb2pvX2Zyb21faW5wdXQpLCB0aGVuIHVzZQotICAgICAg
ICAgIC8vIHRoYXQuIElmIHdlIGRvbid0LCB0aGVuIHdlJ2xsIGp1c3Qgc2V0IHRoZSBwb2ludGVy
IG9mZnNldCBkaXJlY3RseSwKLSAgICAgICAgICAvLyB1c2luZyBpZGVudGl0eSBhcyBzZXQgYWJv
dmUuCi0gICAgICAgICAgaWYgKHRoaXMubW9qb19mcm9tX2lucHV0XykgewotICAgICAgICAgICAg
bW9qb19mcm9tX2lucHV0ID0gdGhpcy5tb2pvX2Zyb21faW5wdXRfLm1hdHJpeDsKLSAgICAgICAg
ICB9Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgdGhyb3cg
bmV3IEVycm9yKCdVbmhhbmRsZWQgdGFyZ2V0IHJheSBtb2RlICcgKyB0aGlzLnRhcmdldF9yYXlf
bW9kZV8pOwotICAgICAgfQotCi0gICAgICAvLyBUbyBjb252ZXJ0IG1vam9fZnJvbV9wb2ludGVy
IHRvIGlucHV0X2Zyb21fcG9pbnRlciwgd2UgbmVlZDoKLSAgICAgIC8vIGlucHV0X2Zyb21fcG9p
bnRlciA9IGlucHV0X2Zyb21fbW9qbyAqIG1vam9fZnJvbV9wb2ludGVyCi0gICAgICAvLyBTaW5j
ZSB3ZSBzdG9yZSBtb2pvX2Zyb21faW5wdXQsIHdlIG5lZWQgdG8gaW52ZXJ0IGl0IGhlcmUgYmVm
b3JlCi0gICAgICAvLyBtdWx0aXBseWluZy4KLSAgICAgIGxldCBpbnB1dF9mcm9tX21vam8gPSBY
Uk1hdGhIZWxwZXIuaW52ZXJzZShtb2pvX2Zyb21faW5wdXQpOwotICAgICAgaW5wdXRfZGVzYy5p
bnB1dEZyb21Qb2ludGVyID0gbmV3IGdmeC5tb2pvbS5UcmFuc2Zvcm0oKTsKLSAgICAgIGlucHV0
X2Rlc2MuaW5wdXRGcm9tUG9pbnRlci5tYXRyaXggPQotICAgICAgICBYUk1hdGhIZWxwZXIubXVs
NHg0KGlucHV0X2Zyb21fbW9qbywgdGhpcy5tb2pvX2Zyb21fcG9pbnRlcl8ubWF0cml4KTsKLQot
ICAgICAgaW5wdXRfZGVzYy5wcm9maWxlcyA9IHRoaXMucHJvZmlsZXNfOwotCi0gICAgICBpbnB1
dF9zdGF0ZS5kZXNjcmlwdGlvbiA9IGlucHV0X2Rlc2M7Ci0KLSAgICAgIHRoaXMuZGVzY19kaXJ0
eV8gPSBmYWxzZTsKLSAgICB9Ci0KLSAgICAvLyBQb2ludGVyIGRhdGEgZm9yIERPTSBPdmVybGF5
LCBzZXQgYnkgc2V0T3ZlcmxheVBvaW50ZXJQb3NpdGlvbigpCi0gICAgaWYgKHRoaXMub3Zlcmxh
eV9wb2ludGVyX3Bvc2l0aW9uXykgewotICAgICAgaW5wdXRfc3RhdGUub3ZlcmxheVBvaW50ZXJQ
b3NpdGlvbiA9IHRoaXMub3ZlcmxheV9wb2ludGVyX3Bvc2l0aW9uXzsKLSAgICAgIHRoaXMub3Zl
cmxheV9wb2ludGVyX3Bvc2l0aW9uXyA9IG51bGw7Ci0gICAgfQotCi0gICAgcmV0dXJuIGlucHV0
X3N0YXRlOwotICB9Ci0KLSAgc2V0T3ZlcmxheVBvaW50ZXJQb3NpdGlvbih4LCB5KSB7Ci0gICAg
dGhpcy5vdmVybGF5X3BvaW50ZXJfcG9zaXRpb25fID0ge3g6IHgsIHk6IHl9OwotICB9Ci0KLSAg
Z2V0RW1wdHlHYW1lcGFkKCkgewotICAgIC8vIE1vam8gY29tcGxhaW5zIGlmIHNvbWUgb2YgdGhl
IHByb3BlcnRpZXMgb24gR2FtZXBhZCBhcmUgbnVsbCwgc28gc2V0Ci0gICAgLy8gZXZlcnl0aGlu
ZyB0byByZWFzb25hYmxlIGRlZmF1bHRzIHRoYXQgdGVzdHMgY2FuIG92ZXJyaWRlLgotICAgIGNv
bnN0IGdhbWVwYWQgPSB7Ci0gICAgICBjb25uZWN0ZWQ6IHRydWUsCi0gICAgICBpZDogIiIsCi0g
ICAgICB0aW1lc3RhbXA6IDAsCi0gICAgICBheGVzOiBbXSwKLSAgICAgIGJ1dHRvbnM6IFtdLAot
ICAgICAgbWFwcGluZzogInhyLXN0YW5kYXJkIiwKLSAgICAgIGRpc3BsYXlfaWQ6IDAsCi0gICAg
fTsKLQotICAgIHN3aXRjaCAodGhpcy5oYW5kZWRuZXNzXykgewotICAgICAgY2FzZSAnbGVmdCc6
Ci0gICAgICBnYW1lcGFkLmhhbmQgPSBkZXZpY2UubW9qb20uR2FtZXBhZEhhbmQuR2FtZXBhZEhh
bmRMZWZ0OwotICAgICAgYnJlYWs7Ci0gICAgICBjYXNlICdyaWdodCc6Ci0gICAgICBnYW1lcGFk
LmhhbmQgPSBkZXZpY2UubW9qb20uR2FtZXBhZEhhbmQuR2FtZXBhZEhhbmRSaWdodDsKLSAgICAg
IGJyZWFrOwotICAgICAgZGVmYXVsdDoKLSAgICAgIGdhbWVwYWQuaGFuZCA9IGRldmljZS5tb2pv
bS5HYW1lcGFkSGFuZC5HYW1lcGFkSGFuZE5vbmU7Ci0gICAgICBicmVhazsKLSAgICB9Ci0KLSAg
ICByZXR1cm4gZ2FtZXBhZDsKLSAgfQotCi0gIGFkZEdhbWVwYWRCdXR0b24oYnV0dG9uU3RhdGUp
IHsKLSAgICBpZiAoYnV0dG9uU3RhdGUgPT0gbnVsbCkgewotICAgICAgcmV0dXJuOwotICAgIH0K
LQotICAgIGNvbnN0IGJ1dHRvbkluZGV4ID0gdGhpcy5nZXRCdXR0b25JbmRleChidXR0b25TdGF0
ZS5idXR0b25UeXBlKTsKLSAgICBjb25zdCBheGVzU3RhcnRJbmRleCA9IHRoaXMuZ2V0QXhlc1N0
YXJ0SW5kZXgoYnV0dG9uU3RhdGUuYnV0dG9uVHlwZSk7Ci0KLSAgICBpZiAoYnV0dG9uSW5kZXgg
PT0gLTEpIHsKLSAgICAgIHRocm93IG5ldyBFcnJvcigiVW5rbm93biBCdXR0b24gVHlwZSEiKTsK
LSAgICB9Ci0KLSAgICB0aGlzLmdhbWVwYWRfLmJ1dHRvbnNbYnV0dG9uSW5kZXhdID0gewotICAg
ICAgcHJlc3NlZDogYnV0dG9uU3RhdGUucHJlc3NlZCwKLSAgICAgIHRvdWNoZWQ6IGJ1dHRvblN0
YXRlLnRvdWNoZWQsCi0gICAgICB2YWx1ZTogYnV0dG9uU3RhdGUucHJlc3NlZFZhbHVlCi0gICAg
fTsKLQotICAgIC8vIEFkZCB4L3kgdmFsdWUgaWYgc3VwcG9ydGVkLgotICAgIGlmIChheGVzU3Rh
cnRJbmRleCAhPSAtMSkgewotICAgICAgdGhpcy5nYW1lcGFkXy5heGVzW2F4ZXNTdGFydEluZGV4
XSA9IChidXR0b25TdGF0ZS54VmFsdWUgPT0gbnVsbCA/IDAuMCA6IGJ1dHRvblNhdGUueFZhbHVl
KTsKLSAgICAgIHRoaXMuZ2FtZXBhZF8uYXhlc1theGVzU3RhcnRJbmRleCArIDFdID0gKGJ1dHRv
blN0YXRlLnlWYWx1ZSA9PSBudWxsID8gMC4wIDogYnV0dG9uU2F0ZS55VmFsdWUpOwotICAgIH0K
LSAgfQotCi0gIC8vIEdlbmVyYWwgSGVscGVyIG1ldGhvZHMKLSAgZ2V0QnV0dG9uSW5kZXgoYnV0
dG9uVHlwZSkgewotICAgIHN3aXRjaCAoYnV0dG9uVHlwZSkgewotICAgICAgY2FzZSAnZ3JpcCc6
Ci0gICAgICAgIHJldHVybiAxOwotICAgICAgY2FzZSAndG91Y2hwYWQnOgotICAgICAgICByZXR1
cm4gMjsKLSAgICAgIGNhc2UgJ3RodW1ic3RpY2snOgotICAgICAgICByZXR1cm4gMzsKLSAgICAg
IGNhc2UgJ29wdGlvbmFsLWJ1dHRvbic6Ci0gICAgICAgIHJldHVybiA0OwotICAgICAgY2FzZSAn
b3B0aW9uYWwtdGh1bWJzdGljayc6Ci0gICAgICAgIHJldHVybiA1OwotICAgICAgZGVmYXVsdDoK
LSAgICAgICAgcmV0dXJuIC0xOwotICAgIH0KLSAgfQotCi0gIGdldEF4ZXNTdGFydEluZGV4KGJ1
dHRvblR5cGUpIHsKLSAgICBzd2l0Y2ggKGJ1dHRvblR5cGUpIHsKLSAgICAgIGNhc2UgJ3RvdWNo
cGFkJzoKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgICBjYXNlICd0aHVtYnN0aWNrJzoKLSAgICAg
ICAgcmV0dXJuIDI7Ci0gICAgICBjYXNlICdvcHRpb25hbC10aHVtYnN0aWNrJzoKLSAgICAgICAg
cmV0dXJuIDQ7Ci0gICAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gLTE7Ci0gICAgfQotICB9
Ci0KLSAgX2dldE1vam9Gcm9tSW5wdXRTb3VyY2UobW9qb19mcm9tX3ZpZXdlcikgewotICAgIHJl
dHVybiB0aGlzLm1vam9fZnJvbV9wb2ludGVyXy5tYXRyaXg7Ci0gIH0KLX0KLQotLy8gTW9qbyBo
ZWxwZXIgY2xhc3NlcwotY2xhc3MgTW9ja1hSUHJlc2VudGF0aW9uUHJvdmlkZXIgewotICBjb25z
dHJ1Y3RvcigpIHsKLSAgICB0aGlzLmJpbmRpbmdfID0gbmV3IG1vam8uQmluZGluZyhkZXZpY2Uu
bW9qb20uWFJQcmVzZW50YXRpb25Qcm92aWRlciwgdGhpcyk7Ci0KLSAgICB0aGlzLnN1Ym1pdF9m
cmFtZV9jb3VudF8gPSAwOwotICAgIHRoaXMubWlzc2luZ19mcmFtZV9jb3VudF8gPSAwOwotICB9
Ci0KLSAgYmluZFByb3ZpZGVyKHJlcXVlc3QpIHsKLSAgICBjb25zdCBwcm92aWRlclB0ciA9IG5l
dyBkZXZpY2UubW9qb20uWFJQcmVzZW50YXRpb25Qcm92aWRlclB0cigpOwotICAgIGNvbnN0IHBy
b3ZpZGVyUmVxdWVzdCA9IG1vam8ubWFrZVJlcXVlc3QocHJvdmlkZXJQdHIpOwotCi0gICAgdGhp
cy5iaW5kaW5nXy5jbG9zZSgpOwotCi0gICAgdGhpcy5iaW5kaW5nXyA9IG5ldyBtb2pvLkJpbmRp
bmcoCi0gICAgICAgIGRldmljZS5tb2pvbS5YUlByZXNlbnRhdGlvblByb3ZpZGVyLCB0aGlzLCBw
cm92aWRlclJlcXVlc3QpOwotCi0gICAgcmV0dXJuIHByb3ZpZGVyUHRyOwotICB9Ci0KLSAgZ2V0
Q2xpZW50UmVjZWl2ZXIoKSB7Ci0gICAgdGhpcy5zdWJtaXRGcmFtZUNsaWVudF8gPSBuZXcgZGV2
aWNlLm1vam9tLlhSUHJlc2VudGF0aW9uQ2xpZW50UHRyKCk7Ci0gICAgcmV0dXJuIG1vam8ubWFr
ZVJlcXVlc3QodGhpcy5zdWJtaXRGcmFtZUNsaWVudF8pOwotICB9Ci0KLSAgLy8gWFJQcmVzZW50
YXRpb25Qcm92aWRlciBtb2pvIGltcGxlbWVudGF0aW9uCi0gIHN1Ym1pdEZyYW1lTWlzc2luZyhm
cmFtZUlkLCBtYWlsYm94SG9sZGVyLCB0aW1lV2FpdGVkKSB7Ci0gICAgdGhpcy5taXNzaW5nX2Zy
YW1lX2NvdW50XysrOwotICB9Ci0KLSAgc3VibWl0RnJhbWUoZnJhbWVJZCwgbWFpbGJveEhvbGRl
ciwgdGltZVdhaXRlZCkgewotICAgIHRoaXMuc3VibWl0X2ZyYW1lX2NvdW50XysrOwotCi0gICAg
Ly8gVHJpZ2dlciB0aGUgc3VibWl0IGNvbXBsZXRpb24gY2FsbGJhY2tzIGhlcmUuIFdBUk5JTkc6
IFRoZQotICAgIC8vIEphdmFzY3JpcHQtYmFzZWQgbW9qbyBtb2NrcyBhcmUgKm5vdCogcmUtZW50
cmFudC4gSXQncyBPSyB0bwotICAgIC8vIHdhaXQgZm9yIHRoZXNlIG5vdGlmaWNhdGlvbnMgb24g
dGhlIG5leHQgZnJhbWUsIGJ1dCB3YWl0aW5nCi0gICAgLy8gd2l0aGluIHRoZSBjdXJyZW50IGZy
YW1lIHdvdWxkIG5ldmVyIGZpbmlzaCBzaW5jZSB0aGUgaW5jb21pbmcKLSAgICAvLyBjYWxscyB3
b3VsZCBiZSBxdWV1ZWQgdW50aWwgdGhlIGN1cnJlbnQgZXhlY3V0aW9uIGNvbnRleHQgZmluaXNo
ZXMuCi0gICAgdGhpcy5zdWJtaXRGcmFtZUNsaWVudF8ub25TdWJtaXRGcmFtZVRyYW5zZmVycmVk
KHRydWUpOwotICAgIHRoaXMuc3VibWl0RnJhbWVDbGllbnRfLm9uU3VibWl0RnJhbWVSZW5kZXJl
ZCgpOwotICB9Ci0KLSAgLy8gVXRpbGl0eSBtZXRob2RzCi0gIENsb3NlKCkgewotICAgIHRoaXMu
YmluZGluZ18uY2xvc2UoKTsKLSAgfQotfQotCi1uYXZpZ2F0b3IueHIudGVzdCA9IG5ldyBDaHJv
bWVYUlRlc3QoKTsKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxh
dGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL3dlYnhyLXRlc3QuanMuaGVhZGVycyBiL0xh
eW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9t
aXVtL3dlYnhyLXRlc3QuanMuaGVhZGVycwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
NjgwNWMzMjNkZjVhOTc1MjMxNjQ4YjgzMGUzM2NlMTgzYzNjYmJkMy4uMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mv
d2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS93ZWJ4ci10ZXN0LmpzLmhlYWRl
cnMKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi1Db250ZW50LVR5cGU6IHRleHQvamF2YXNj
cmlwdDsgY2hhcnNldD11dGYtOApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNj
L3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvaWRsaGFybmVzcy5qcyBiL0xheW91dFRlc3Rz
L2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2lkbGhhcm5lc3MuanMK
aW5kZXggMjVjMTkzYjU1ZTViNzZmZmY2ZGMxODAyNjgzNTdhMTFhMjdhYmMwOC4uOTk0YTBkODJl
ZjQ0NGJmNDU2NmRjMjdhODE0ODdlNzBkOWUyODRlYSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMv
aW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvaWRsaGFybmVzcy5qcwor
KysgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNl
cy9pZGxoYXJuZXNzLmpzCkBAIC0yNTM0LDYgKzI1MzQsMTAgQEAgSWRsSW50ZXJmYWNlLnByb3Rv
dHlwZS5kb19tZW1iZXJfb3BlcmF0aW9uX2Fzc2VydHMgPSBmdW5jdGlvbihtZW1iZXJIb2xkZXJP
YmplY3QKICAgICAgICAgbWVtYmVySG9sZGVyT2JqZWN0W21lbWJlci5uYW1lXS5sZW5ndGgsCiAg
ICAgICAgIG1pbk92ZXJsb2FkTGVuZ3RoKGN0b3JzKSwKICAgICAgICAgInByb3BlcnR5IGhhcyB3
cm9uZyAubGVuZ3RoIik7CisgICAgYXNzZXJ0X2VxdWFscygKKyAgICAgICAgbWVtYmVySG9sZGVy
T2JqZWN0W21lbWJlci5uYW1lXS5uYW1lLAorICAgICAgICBtZW1iZXIubmFtZSwKKyAgICAgICAg
InByb3BlcnR5IGhhcyB3cm9uZyAubmFtZSIpOwogCiAgICAgLy8gTWFrZSBzb21lIHN1aXRhYmxl
IGFyZ3VtZW50cwogICAgIHZhciBhcmdzID0gbWVtYmVyLmFyZ3VtZW50cy5tYXAoZnVuY3Rpb24o
YXJnKSB7CkBAIC0zNDMzLDE2ICszNDM3LDYwIEBAIElkbE5hbWVzcGFjZS5wcm90b3R5cGUudGVz
dF9tZW1iZXJfYXR0cmlidXRlID0gZnVuY3Rpb24gKG1lbWJlcikKICAgICB9LmJpbmQodGhpcykp
OwogfTsKIAotSWRsTmFtZXNwYWNlLnByb3RvdHlwZS50ZXN0ID0gZnVuY3Rpb24gKCkKK0lkbE5h
bWVzcGFjZS5wcm90b3R5cGUudGVzdF9zZWxmID0gZnVuY3Rpb24gKCkKIHsKICAgICAvKioKICAg
ICAgKiBUT0RPKGx1a2ViamVycmluZyk6IEFzc2VydDoKICAgICAgKiAtICJOb3RlIHRoYXQgdW5s
aWtlIGludGVyZmFjZXMgb3IgZGljdGlvbmFyaWVzLCBuYW1lc3BhY2VzIGRvIG5vdCBjcmVhdGUg
dHlwZXMuIgotICAgICAqIC0gIk9mIHRoZSBleHRlbmRlZCBhdHRyaWJ1dGVzIGRlZmluZWQgaW4g
dGhpcyBzcGVjaWZpY2F0aW9uLCBvbmx5IHRoZQotICAgICAqICAgICBbRXhwb3NlZF0gYW5kIFtT
ZWN1cmVDb250ZXh0XSBleHRlbmRlZCBhdHRyaWJ1dGVzIGFyZSBhcHBsaWNhYmxlIHRvIG5hbWVz
cGFjZXMuIgotICAgICAqIC0gIk5hbWVzcGFjZXMgbXVzdCBiZSBhbm5vdGF0ZWQgd2l0aCB0aGUg
W0V4cG9zZWRdIGV4dGVuZGVkIGF0dHJpYnV0ZS4iCiAgICAgICovCiAKKyAgICBzdWJzZXRUZXN0
QnlLZXkodGhpcy5uYW1lLCB0ZXN0LCAoKSA9PiB7CisgICAgICAgIGFzc2VydF90cnVlKHRoaXMu
ZXh0QXR0cnMuZXZlcnkobyA9PiBvLm5hbWUgPT09ICJFeHBvc2VkIiB8fCBvLm5hbWUgPT09ICJT
ZWN1cmVDb250ZXh0IiksCisgICAgICAgICAgICAiT25seSB0aGUgW0V4cG9zZWRdIGFuZCBbU2Vj
dXJlQ29udGV4dF0gZXh0ZW5kZWQgYXR0cmlidXRlcyBhcmUgYXBwbGljYWJsZSB0byBuYW1lc3Bh
Y2VzIik7CisgICAgICAgIGFzc2VydF90cnVlKHRoaXMuaGFzX2V4dGVuZGVkX2F0dHJpYnV0ZSgi
RXhwb3NlZCIpLAorICAgICAgICAgICAgIk5hbWVzcGFjZXMgbXVzdCBiZSBhbm5vdGF0ZWQgd2l0
aCB0aGUgW0V4cG9zZWRdIGV4dGVuZGVkIGF0dHJpYnV0ZSIpOworICAgIH0sIGAke3RoaXMubmFt
ZX0gbmFtZXNwYWNlOiBleHRlbmRlZCBhdHRyaWJ1dGVzYCk7CisKKyAgICBjb25zdCBuYW1lc3Bh
Y2VPYmplY3QgPSBzZWxmW3RoaXMubmFtZV07CisKKyAgICBzdWJzZXRUZXN0QnlLZXkodGhpcy5u
YW1lLCB0ZXN0LCAoKSA9PiB7CisgICAgICAgIGNvbnN0IGRlc2MgPSBPYmplY3QuZ2V0T3duUHJv
cGVydHlEZXNjcmlwdG9yKHNlbGYsIHRoaXMubmFtZSk7CisgICAgICAgIGFzc2VydF9lcXVhbHMo
ZGVzYy52YWx1ZSwgbmFtZXNwYWNlT2JqZWN0LCBgd3JvbmcgdmFsdWUgZm9yICR7dGhpcy5uYW1l
fSBuYW1lc3BhY2Ugb2JqZWN0YCk7CisgICAgICAgIGFzc2VydF90cnVlKGRlc2Mud3JpdGFibGUs
ICJuYW1lc3BhY2Ugb2JqZWN0IHNob3VsZCBiZSB3cml0YWJsZSIpOworICAgICAgICBhc3NlcnRf
ZmFsc2UoZGVzYy5lbnVtZXJhYmxlLCAibmFtZXNwYWNlIG9iamVjdCBzaG91bGQgbm90IGJlIGVu
dW1lcmFibGUiKTsKKyAgICAgICAgYXNzZXJ0X3RydWUoZGVzYy5jb25maWd1cmFibGUsICJuYW1l
c3BhY2Ugb2JqZWN0IHNob3VsZCBiZSBjb25maWd1cmFibGUiKTsKKyAgICAgICAgYXNzZXJ0X2Zh
bHNlKCJnZXQiIGluIGRlc2MsICJuYW1lc3BhY2Ugb2JqZWN0IHNob3VsZCBub3QgaGF2ZSBhIGdl
dHRlciIpOworICAgICAgICBhc3NlcnRfZmFsc2UoInNldCIgaW4gZGVzYywgIm5hbWVzcGFjZSBv
YmplY3Qgc2hvdWxkIG5vdCBoYXZlIGEgc2V0dGVyIik7CisgICAgfSwgYCR7dGhpcy5uYW1lfSBu
YW1lc3BhY2U6IHByb3BlcnR5IGRlc2NyaXB0b3JgKTsKKworICAgIHN1YnNldFRlc3RCeUtleSh0
aGlzLm5hbWUsIHRlc3QsICgpID0+IHsKKyAgICAgICAgYXNzZXJ0X3RydWUoT2JqZWN0LmlzRXh0
ZW5zaWJsZShuYW1lc3BhY2VPYmplY3QpKTsKKyAgICB9LCBgJHt0aGlzLm5hbWV9IG5hbWVzcGFj
ZTogW1tFeHRlbnNpYmxlXV0gaXMgdHJ1ZWApOworCisgICAgc3Vic2V0VGVzdEJ5S2V5KHRoaXMu
bmFtZSwgdGVzdCwgKCkgPT4geworICAgICAgICBhc3NlcnRfdHJ1ZShuYW1lc3BhY2VPYmplY3Qg
aW5zdGFuY2VvZiBPYmplY3QpOworCisgICAgICAgIGlmICh0aGlzLm5hbWUgPT09ICJjb25zb2xl
IikgeworICAgICAgICAgICAgLy8gaHR0cHM6Ly9jb25zb2xlLnNwZWMud2hhdHdnLm9yZy8jY29u
c29sZS1uYW1lc3BhY2UKKyAgICAgICAgICAgIGNvbnN0IG5hbWVzcGFjZVByb3RvdHlwZSA9IE9i
amVjdC5nZXRQcm90b3R5cGVPZihuYW1lc3BhY2VPYmplY3QpOworICAgICAgICAgICAgYXNzZXJ0
X2VxdWFscyhSZWZsZWN0Lm93bktleXMobmFtZXNwYWNlUHJvdG90eXBlKS5sZW5ndGgsIDApOwor
ICAgICAgICAgICAgYXNzZXJ0X2VxdWFscyhPYmplY3QuZ2V0UHJvdG90eXBlT2YobmFtZXNwYWNl
UHJvdG90eXBlKSwgT2JqZWN0LnByb3RvdHlwZSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICBhc3NlcnRfZXF1YWxzKE9iamVjdC5nZXRQcm90b3R5cGVPZihuYW1lc3BhY2VPYmplY3Qp
LCBPYmplY3QucHJvdG90eXBlKTsKKyAgICAgICAgfQorICAgIH0sIGAke3RoaXMubmFtZX0gbmFt
ZXNwYWNlOiBbW1Byb3RvdHlwZV1dIGlzIE9iamVjdC5wcm90b3R5cGVgKTsKKworICAgIHN1YnNl
dFRlc3RCeUtleSh0aGlzLm5hbWUsIHRlc3QsICgpID0+IHsKKyAgICAgICAgYXNzZXJ0X2VxdWFs
cyh0eXBlb2YgbmFtZXNwYWNlT2JqZWN0LCAib2JqZWN0Iik7CisgICAgfSwgYCR7dGhpcy5uYW1l
fSBuYW1lc3BhY2U6IHR5cGVvZiBpcyAib2JqZWN0ImApOworfTsKKworSWRsTmFtZXNwYWNlLnBy
b3RvdHlwZS50ZXN0ID0gZnVuY3Rpb24gKCkKK3sKKyAgICBpZiAoIXRoaXMudW50ZXN0ZWQpIHsK
KyAgICAgICAgdGhpcy50ZXN0X3NlbGYoKTsKKyAgICB9CisKICAgICBmb3IgKGNvbnN0IHYgb2Yg
T2JqZWN0LnZhbHVlcyh0aGlzLm1lbWJlcnMpKSB7CiAgICAgICAgIHN3aXRjaCAodi50eXBlKSB7
CiAKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVz
dHMvcmVzb3VyY2VzL3Rlc3Qtb25seS1hcGkuanMgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mv
d2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0LW9ubHktYXBpLmpzCmluZGV4IDUzODkx
ZDIxYmQ0ZWE1N2Y3ODhkMzUyNWE3YmI5MTQ1ZTE2OGYyYzcuLmVmNjZlMGU3MzNmOWM2ODAwNDEy
OWQyNGIzYzlhZDEyYjlhYTA3MDggMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3cz
Yy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3Qtb25seS1hcGkuanMKKysrIGIvTGF5
b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC1v
bmx5LWFwaS5qcwpAQCAtMjMsNyArMjMsNyBAQCBmdW5jdGlvbiBsb2FkU2NyaXB0KHBhdGgpIHsK
ICAgICBzY3JpcHQuYXN5bmMgPSBmYWxzZTsKICAgICBjb25zdCBwID0gbmV3IFByb21pc2UoKHJl
c29sdmUsIHJlamVjdCkgPT4gewogICAgICAgc2NyaXB0Lm9ubG9hZCA9ICgpID0+IHsgcmVzb2x2
ZSgpOyB9OwotICAgICAgc2NyaXB0Lm9uZXJyb3IgPSBlID0+IHsgcmVqZWN0KGUpOyB9OworICAg
ICAgc2NyaXB0Lm9uZXJyb3IgPSBlID0+IHsgcmVqZWN0KGBFcnJvciBsb2FkaW5nICR7cGF0aH1g
KTsgfTsKICAgICB9KQogICAgIGRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoc2NyaXB0KTsKICAg
ICByZXR1cm4gcDsKQEAgLTMxLDcgKzMxLDcgQEAgZnVuY3Rpb24gbG9hZFNjcmlwdChwYXRoKSB7
CiB9CiAKIC8qKgotICogQSBoZWxwZXIgZm9yIENocm9taXVtLWJhc2VkIGJyb3dzZXJzIHRvIGxv
YWQgTW9qbyBKUyBiaW5kaW5nZHMKKyAqIEEgaGVscGVyIGZvciBDaHJvbWl1bS1iYXNlZCBicm93
c2VycyB0byBsb2FkIE1vam8gSlMgYmluZGluZ3MKICAqCiAgKiBUaGlzIGlzIGFuIGFzeW5jIGZ1
bmN0aW9uIHRoYXQgd29ya3MgaW4gYm90aCB3b3JrZXJzIGFuZCB3aW5kb3dzLiBJdCBmaXJzdAog
ICogbG9hZHMgbW9qb19iaW5kaW5ncy5qcywgZGlzYWJsZXMgYXV0b21hdGljIGRlcGVuZGVuY3kg
bG9hZGluZywgYW5kIGxvYWRzIGFsbApAQCAtMzksMTUgKzM5LDIyIEBAIGZ1bmN0aW9uIGxvYWRT
Y3JpcHQocGF0aCkgewogICogc3VjY2Vzc2Z1bGx5LCBvciByZWplY3RzIGlmIGFueSBleGNlcHRp
b24gaXMgcmFpc2VkLiBJZiB0ZXN0aGFybmVzcy5qcyBpcwogICogdXNlZCwgYW4gdW5jYXVnaHQg
ZXhjZXB0aW9uIHdpbGwgdGVybWluYXRlIHRoZSB0ZXN0IHdpdGggYSBoYXJuZXNzIGVycm9yCiAg
KiAodW5sZXNzIGBhbGxvd191bmNhdWdodF9leGNlcHRpb25gIGlzIHRydWUpLCB3aGljaCBpcyB1
c3VhbGx5IHRoZSBkZXNpcmVkCi0gKiBiZWhhdmlvdXIuIE9ubHkgY2FsbCB0aGlzIGZ1bmN0aW9u
IGlmIGlzQ2hyb21pdW1CYXNlZCA9PT0gdHJ1ZS4KKyAqIGJlaGF2aW91ci4KKyAqCisgKiBUaGlz
IGZ1bmN0aW9uIGFsc28gd29ya3Mgd2l0aCBCbGluayB3ZWIgdGVzdHMgbG9hZGVkIGZyb20gZmls
ZTovLywgaW4gd2hpY2gKKyAqIGNhc2UgZmlsZTovLyB3aWxsIGJlIHByZXBlbmRlZCB0byBhbGwg
Jy9nZW4vLi4uJyBVUkxzLgorICoKKyAqIE9ubHkgY2FsbCB0aGlzIGZ1bmN0aW9uIGlmIGlzQ2hy
b21pdW1CYXNlZCA9PT0gdHJ1ZS4KICAqCiAgKiBAcGFyYW0ge0FycmF5LjxzdHJpbmc+fSByZXNv
dXJjZXMgLSBBIGxpc3Qgb2Ygc2NyaXB0cyB0byBsb2FkOiBNb2pvIEpTCi0gKiAgIGJpbmRpbmdz
IHNob3VsZCBiZSBvZiB0aGUgZm9ybSAnL2dlbi8uLi8qLm1vam9tLmpzJywgdGhlIG9yZGVyaW5n
IG9mIHdoaWNoCi0gKiAgIGRvZXMgbm90IG1hdHRlci4gRG8gbm90IGluY2x1ZGUgbW9qb19iaW5k
aW5ncy5qcyBpbiB0aGlzIGxpc3QuIFlvdSBtYXkKLSAqICAgaW5jbHVkZSBvdGhlciBub24tbW9q
b20uanMgc2NyaXB0cyBmb3IgY29udmVuaWVuY2UuCisgKiAgIGJpbmRpbmdzIHNob3VsZCBiZSBv
ZiB0aGUgZm9ybSAnL2dlbi8uLi8qLm1vam9tLmpzJyBvcgorICogICAnL2dlbi8uLi8qLm1vam9t
LWxpdGUuanMnIChyZXF1aXJlcyBgbGl0ZWAgdG8gYmUgdHJ1ZSk7IHRoZSBvcmRlciBkb2VzIG5v
dAorICogICBtYXR0ZXIuIERvIG5vdCBpbmNsdWRlICdtb2pvX2JpbmRpbmdzLmpzJyBvciAnbW9q
b19iaW5kaW5nc19saXRlLmpzJy4KKyAqIEBwYXJhbSB7Ym9vbGVhbj19IGxpdGUgLSBXaGV0aGVy
IHRoZSBsaXRlIGJpbmRpbmdzICgqLm1vam9tLWxpdGUuanMpIGFyZSB1c2VkCisgKiAgIChkZWZh
dWx0IGlzIGZhbHNlKS4KICAqIEByZXR1cm5zIHtQcm9taXNlfQogICovCi1hc3luYyBmdW5jdGlv
biBsb2FkTW9qb1Jlc291cmNlcyhyZXNvdXJjZXMpIHsKK2FzeW5jIGZ1bmN0aW9uIGxvYWRNb2pv
UmVzb3VyY2VzKHJlc291cmNlcywgbGl0ZSA9IGZhbHNlKSB7CiAgIGlmICghaXNDaHJvbWl1bUJh
c2VkKSB7CiAgICAgdGhyb3cgbmV3IEVycm9yKCdNb2pvSlMgbm90IGVuYWJsZWQ7IHN0YXJ0IENo
cm9tZSB3aXRoIC0tZW5hYmxlLWJsaW5rLWZlYXR1cmVzPU1vam9KUyxNb2pvSlNUZXN0Jyk7CiAg
IH0KQEAgLTU1LDE0ICs2MiwzOSBAQCBhc3luYyBmdW5jdGlvbiBsb2FkTW9qb1Jlc291cmNlcyhy
ZXNvdXJjZXMpIHsKICAgICByZXR1cm47CiAgIH0KIAotICAvLyBXZSB3YW50IHRvIGxvYWQgbW9q
b19iaW5kaW5ncy5qcyBzZXBhcmF0ZWx5IHRvIHNldCBtb2pvLmNvbmZpZy4KLSAgaWYgKHJlc291
cmNlcy5zb21lKHAgPT4gcC5lbmRzV2l0aCgnL21vam9fYmluZGluZ3MuanMnKSkpIHsKLSAgICB0
aHJvdyBuZXcgRXJyb3IoJ0RvIG5vdCBsb2FkIG1vam9fYmluZGluZ3MuanMgZXhwbGljaXRseS4n
KTsKKyAgbGV0IGdlblByZWZpeCA9ICcnOworICBpZiAoc2VsZi5sb2NhdGlvbi5wYXRobmFtZS5p
bmNsdWRlcygnL3dlYl90ZXN0cy8nKSkgeworICAgIC8vIEJsaW5rIGludGVybmFsIHdlYiB0ZXN0
cworICAgIGdlblByZWZpeCA9ICdmaWxlOi8vJzsKKyAgfQorCisgIGZvciAoY29uc3QgcGF0aCBv
ZiByZXNvdXJjZXMpIHsKKyAgICAvLyBXZSB3YW50IHRvIGxvYWQgbW9qb19iaW5kaW5ncy5qcyBz
ZXBhcmF0ZWx5IHRvIHNldCBtb2pvLmNvbmZpZy4KKyAgICBpZiAocGF0aC5lbmRzV2l0aCgnL21v
am9fYmluZGluZ3MuanMnKSkgeworICAgICAgdGhyb3cgbmV3IEVycm9yKCdEbyBub3QgbG9hZCBt
b2pvX2JpbmRpbmdzLmpzIGV4cGxpY2l0bHkuJyk7CisgICAgfQorICAgIGlmIChwYXRoLmVuZHNX
aXRoKCcvbW9qb19iaW5kaW5nc19saXRlLmpzJykpIHsKKyAgICAgIHRocm93IG5ldyBFcnJvcign
RG8gbm90IGxvYWQgbW9qb19iaW5kaW5nc19saXRlLmpzIGV4cGxpY2l0bHkuJyk7CisgICAgfQor
ICAgIGlmIChsaXRlKSB7CisgICAgICBpZiAoISAvXlwvZ2VuXC8uKlwubW9qb20tbGl0ZVwuanMk
Ly50ZXN0KHBhdGgpKSB7CisgICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5yZWNvZ25pemVkIHJl
c291cmNlIHBhdGg6ICR7cGF0aH1gKTsKKyAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgaWYg
KCEgL15cL2dlblwvLipcLm1vam9tXC5qcyQvLnRlc3QocGF0aCkpIHsKKyAgICAgICAgdGhyb3cg
bmV3IEVycm9yKGBVbnJlY29nbml6ZWQgcmVzb3VyY2UgcGF0aDogJHtwYXRofWApOworICAgICAg
fQorICAgIH0KKyAgfQorCisgIGlmIChsaXRlKSB7CisgICAgYXdhaXQgbG9hZFNjcmlwdChnZW5Q
cmVmaXggKyAnL2dlbi9sYXlvdXRfdGVzdF9kYXRhL21vam8vcHVibGljL2pzL21vam9fYmluZGlu
Z3NfbGl0ZS5qcycpOworICB9IGVsc2UgeworICAgIGF3YWl0IGxvYWRTY3JpcHQoZ2VuUHJlZml4
ICsgJy9nZW4vbGF5b3V0X3Rlc3RfZGF0YS9tb2pvL3B1YmxpYy9qcy9tb2pvX2JpbmRpbmdzLmpz
Jyk7CisgICAgbW9qby5jb25maWcuYXV0b0xvYWRNb2pvbURlcHMgPSBmYWxzZTsKICAgfQotICBh
d2FpdCBsb2FkU2NyaXB0KCcvZ2VuL2xheW91dF90ZXN0X2RhdGEvbW9qby9wdWJsaWMvanMvbW9q
b19iaW5kaW5ncy5qcycpOwotICBtb2pvLmNvbmZpZy5hdXRvTG9hZE1vam9tRGVwcyA9IGZhbHNl
OwogCiAgIGZvciAoY29uc3QgcGF0aCBvZiByZXNvdXJjZXMpIHsKLSAgICBhd2FpdCBsb2FkU2Ny
aXB0KHBhdGgpOworICAgIGF3YWl0IGxvYWRTY3JpcHQoZ2VuUHJlZml4ICsgcGF0aCk7CiAgIH0K
IH0KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVz
dHMvcmVzb3VyY2VzL3Rlc3Qtb25seS1hcGkubS5qcyBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3cz
Yy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3Qtb25seS1hcGkubS5qcwpuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi45ODRmNjM1YWJhYzAwMjcyMzA0Yzc4ZjJmNWJiOTliMzk3YjI3NTIzCi0tLSAvZGV2L251
bGwKKysrIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNv
dXJjZXMvdGVzdC1vbmx5LWFwaS5tLmpzCkBAIC0wLDAgKzEsNSBAQAorLyogV2hldGhlciB0aGUg
YnJvd3NlciBpcyBDaHJvbWl1bS1iYXNlZCB3aXRoIE1vam9KUyBlbmFibGVkICovCitleHBvcnQg
Y29uc3QgaXNDaHJvbWl1bUJhc2VkID0gJ01vam9JbnRlcmZhY2VJbnRlcmNlcHRvcicgaW4gc2Vs
ZjsKKworLyogV2hldGhlciB0aGUgYnJvd3NlciBpcyBXZWJLaXQtYmFzZWQgd2l0aCBpbnRlcm5h
bCB0ZXN0LW9ubHkgQVBJIGVuYWJsZWQgKi8KK2V4cG9ydCBjb25zdCBpc1dlYktpdEJhc2VkID0g
IWlzQ2hyb21pdW1CYXNlZCAmJiAnaW50ZXJuYWxzJyBpbiBzZWxmOwpkaWZmIC0tZ2l0IGEvTGF5
b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC1v
bmx5LWFwaS5tLmpzLmhlYWRlcnMgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRm
b3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0LW9ubHktYXBpLm0uanMuaGVhZGVycwpuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li41ZThmNjQwYzY2NTlkMTc2ZWFjYTRjNzFjYzE3OThiNzI4NTU0MGI3Ci0tLSAvZGV2L251bGwK
KysrIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJj
ZXMvdGVzdC1vbmx5LWFwaS5tLmpzLmhlYWRlcnMKQEAgLTAsMCArMSwyIEBACitDb250ZW50LVR5
cGU6IHRleHQvamF2YXNjcmlwdDsgY2hhcnNldD11dGYtOAorQ2FjaGUtQ29udHJvbDogbWF4LWFn
ZT0zNjAwCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3Jt
LXRlc3RzL3Jlc291cmNlcy90ZXN0L2NvbmZ0ZXN0LnB5IGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQv
dzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC9jb25mdGVzdC5weQppbmRleCBh
OWY0MjAzZjI3OWNiYWRiNzAyNDU2YjFkNzFkNmFhNjBlZDVkMGVmLi4xYmFmNjYyMmIwNTk5YzQ0
ZmI4NWQyNjcyODgwMzFhMDVlNDI0M2RjIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9pbXBvcnRl
ZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L2NvbmZ0ZXN0LnB5CisrKyBi
L0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rl
c3QvY29uZnRlc3QucHkKQEAgLTI1LDYgKzI1LDcgQEAgaW1wb3J0IHdlYmRyaXZlcgogCiBkZWYg
cHl0ZXN0X2FkZG9wdGlvbihwYXJzZXIpOgogICAgIHBhcnNlci5hZGRvcHRpb24oIi0tYmluYXJ5
IiwgYWN0aW9uPSJzdG9yZSIsIGRlZmF1bHQ9Tm9uZSwgaGVscD0icGF0aCB0byBicm93c2VyIGJp
bmFyeSIpCisgICAgcGFyc2VyLmFkZG9wdGlvbigiLS1oZWFkbGVzcyIsIGFjdGlvbj0ic3RvcmVf
dHJ1ZSIsIGRlZmF1bHQ9RmFsc2UsIGhlbHA9InJ1biBicm93c2VyIGluIGhlYWRsZXNzIG1vZGUi
KQogCiAKIGRlZiBweXRlc3RfY29sbGVjdF9maWxlKHBhdGgsIHBhcmVudCk6CkBAIC00NSw5ICs0
NiwxMSBAQCBkZWYgcHl0ZXN0X2NvbmZpZ3VyZShjb25maWcpOgogICAgIGNvbmZpZy5wcm9jID0g
c3VicHJvY2Vzcy5Qb3BlbihbImdlY2tvZHJpdmVyIl0pCiAgICAgY29uZmlnLmFkZF9jbGVhbnVw
KGNvbmZpZy5wcm9jLmtpbGwpCiAKLSAgICBjYXBhYmlsaXRpZXMgPSB7ImFsd2F5c01hdGNoIjog
eyJhY2NlcHRJbnNlY3VyZUNlcnRzIjogVHJ1ZX19CisgICAgY2FwYWJpbGl0aWVzID0geyJhbHdh
eXNNYXRjaCI6IHsiYWNjZXB0SW5zZWN1cmVDZXJ0cyI6IFRydWUsICJtb3o6ZmlyZWZveE9wdGlv
bnMiOiB7fX19CiAgICAgaWYgY29uZmlnLmdldG9wdGlvbigiLS1iaW5hcnkiKToKLSAgICAgICAg
Y2FwYWJpbGl0aWVzWyJhbHdheXNNYXRjaCJdWyJtb3o6ZmlyZWZveE9wdGlvbnMiXSA9IHsiYmlu
YXJ5IjogY29uZmlnLmdldG9wdGlvbigiLS1iaW5hcnkiKX0KKyAgICAgICAgY2FwYWJpbGl0aWVz
WyJhbHdheXNNYXRjaCJdWyJtb3o6ZmlyZWZveE9wdGlvbnMiXVsiYmluYXJ5Il0gPSBjb25maWcu
Z2V0b3B0aW9uKCItLWJpbmFyeSIpCisgICAgaWYgY29uZmlnLmdldG9wdGlvbigiLS1oZWFkbGVz
cyIpOgorICAgICAgICBjYXBhYmlsaXRpZXNbImFsd2F5c01hdGNoIl1bIm1vejpmaXJlZm94T3B0
aW9ucyJdWyJhcmdzIl0gPSBbIi0taGVhZGxlc3MiXQogCiAgICAgY29uZmlnLmRyaXZlciA9IHdl
YmRyaXZlci5TZXNzaW9uKCJsb2NhbGhvc3QiLCA0NDQ0LAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjYXBhYmlsaXRpZXM9Y2FwYWJpbGl0aWVzKQpkaWZmIC0tZ2l0IGEv
TGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVz
dC90ZXN0cy9mdW5jdGlvbmFsL2lkbGhhcm5lc3MvSWRsTmFtZXNwYWNlL3Rlc3RfYXR0cmlidXRl
Lmh0bWwgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291
cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvaWRsaGFybmVzcy9JZGxOYW1lc3BhY2UvdGVzdF9h
dHRyaWJ1dGUuaHRtbAppbmRleCA4YzFmNTE3MjE2NTQ0ZTc4MjI5MzkyY2M2ZjMzZWIwNmM3Nzk2
MGIzLi5jYTVlZGY0NzIzZDViNWMyMDU1YzJmMDI0ZDk1MWU5ODEyNGM4Y2Q5IDEwMDY0NAotLS0g
YS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90
ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvaWRsaGFybmVzcy9JZGxOYW1lc3BhY2UvdGVzdF9hdHRyaWJ1
dGUuaHRtbAorKysgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3Rz
L3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvaWRsaGFybmVzcy9JZGxOYW1lc3BhY2Uv
dGVzdF9hdHRyaWJ1dGUuaHRtbApAQCAtMTYsMTMgKzE2LDE5IEBACiA8c2NyaXB0PgogInVzZSBz
dHJpY3QiOwogCi1zZWxmLmZvbyA9IHsKLSAgdHJ1dGg6IHRydWUKLX07CitPYmplY3QuZGVmaW5l
UHJvcGVydHkoc2VsZiwgImZvbyIsIHsKKyAgdmFsdWU6IHsKKyAgICB0cnV0aDogdHJ1ZSwKKyAg
fSwKKyAgd3JpdGFibGU6IHRydWUsCisgIGVudW1lcmFibGU6IGZhbHNlLAorICBjb25maWd1cmFi
bGU6IHRydWUsCit9KTsKIAogdmFyIGlkbEFycmF5ID0gbmV3IElkbEFycmF5KCk7Ci1pZGxBcnJh
eS5hZGRfaWRscygKLWBuYW1lc3BhY2UgZm9vIHsKK2lkbEFycmF5LmFkZF9pZGxzKGAKK1tFeHBv
c2VkPVdpbmRvd10KK25hbWVzcGFjZSBmb28gewogICByZWFkb25seSBhdHRyaWJ1dGUgYm9vbCB0
cnV0aDsKICAgcmVhZG9ubHkgYXR0cmlidXRlIGJvb2wgbGllczsKIH07YCk7CkBAIC0zNSw2ICs0
MSwzNiBAQCBpZGxBcnJheS50ZXN0KCk7CiAgICAgIm1lc3NhZ2UiOiBudWxsCiAgIH0sCiAgICJz
dW1tYXJpemVkX3Rlc3RzIjogWworICAgIHsKKyAgICAgICJuYW1lIjogImZvbyBuYW1lc3BhY2U6
IGV4dGVuZGVkIGF0dHJpYnV0ZXMiLAorICAgICAgInN0YXR1c19zdHJpbmciOiAiUEFTUyIsCisg
ICAgICAicHJvcGVydGllcyI6IHt9LAorICAgICAgIm1lc3NhZ2UiOiBudWxsCisgICAgfSwKKyAg
ICB7CisgICAgICAibmFtZSI6ICJmb28gbmFtZXNwYWNlOiBwcm9wZXJ0eSBkZXNjcmlwdG9yIiwK
KyAgICAgICJzdGF0dXNfc3RyaW5nIjogIlBBU1MiLAorICAgICAgInByb3BlcnRpZXMiOiB7fSwK
KyAgICAgICJtZXNzYWdlIjogbnVsbAorICAgIH0sCisgICAgeworICAgICAgIm5hbWUiOiAiZm9v
IG5hbWVzcGFjZTogW1tFeHRlbnNpYmxlXV0gaXMgdHJ1ZSIsCisgICAgICAic3RhdHVzX3N0cmlu
ZyI6ICJQQVNTIiwKKyAgICAgICJwcm9wZXJ0aWVzIjoge30sCisgICAgICAibWVzc2FnZSI6IG51
bGwKKyAgICB9LAorICAgIHsKKyAgICAgICJuYW1lIjogImZvbyBuYW1lc3BhY2U6IFtbUHJvdG90
eXBlXV0gaXMgT2JqZWN0LnByb3RvdHlwZSIsCisgICAgICAic3RhdHVzX3N0cmluZyI6ICJQQVNT
IiwKKyAgICAgICJwcm9wZXJ0aWVzIjoge30sCisgICAgICAibWVzc2FnZSI6IG51bGwKKyAgICB9
LAorICAgIHsKKyAgICAgICJuYW1lIjogImZvbyBuYW1lc3BhY2U6IHR5cGVvZiBpcyBcIm9iamVj
dFwiIiwKKyAgICAgICJzdGF0dXNfc3RyaW5nIjogIlBBU1MiLAorICAgICAgInByb3BlcnRpZXMi
OiB7fSwKKyAgICAgICJtZXNzYWdlIjogbnVsbAorICAgIH0sCiAgICAgewogICAgICAgIm5hbWUi
OiAiZm9vIG5hbWVzcGFjZTogYXR0cmlidXRlIHRydXRoIiwKICAgICAgICJzdGF0dXNfc3RyaW5n
IjogIlBBU1MiLApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0
Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9mdW5jdGlvbmFsL2lkbGhhcm5lc3MvSWRs
TmFtZXNwYWNlL3Rlc3Rfb3BlcmF0aW9uLmh0bWwgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mv
d2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvaWRsaGFy
bmVzcy9JZGxOYW1lc3BhY2UvdGVzdF9vcGVyYXRpb24uaHRtbAppbmRleCAxYjk5NTUyOWQyMzlj
YTA5ZTI4OTZkNjUzMjI2MjQzYjU4MWFjYjJlLi42MGQ3ZDQ3YzllZWE2NGE4MWQ1MzlhZmE2ZmQz
YWNkNzI1ODFjMDBiIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBs
YXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvaWRsaGFybmVzcy9J
ZGxOYW1lc3BhY2UvdGVzdF9vcGVyYXRpb24uaHRtbAorKysgYi9MYXlvdXRUZXN0cy9pbXBvcnRl
ZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwv
aWRsaGFybmVzcy9JZGxOYW1lc3BhY2UvdGVzdF9vcGVyYXRpb24uaHRtbApAQCAtMTYsMzggKzE2
LDU3IEBACiA8c2NyaXB0PgogInVzZSBzdHJpY3QiOwogCi1zZWxmLmZvbyA9IHsKLSAgVHJ1dGg6
IGZ1bmN0aW9uKCkge30sCi19OwotT2JqZWN0LmRlZmluZVByb3BlcnR5KHNlbGYuZm9vLCAiVHJ1
dGgiLCB7IHdyaXRhYmxlOiB0cnVlIH0pOworT2JqZWN0LmRlZmluZVByb3BlcnR5KHNlbGYsICJm
b28iLCB7CisgIHZhbHVlOiBPYmplY3QuZGVmaW5lUHJvcGVydHkoe30sICJUcnV0aCIsIHsKKyAg
ICB2YWx1ZTogZnVuY3Rpb24oKSB7fSwKKyAgICB3cml0YWJsZTogdHJ1ZSwKKyAgICBlbnVtZXJh
YmxlOiB0cnVlLAorICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSwKKyAgfSksCisgIHdyaXRhYmxlOiB0
cnVlLAorICBlbnVtZXJhYmxlOiBmYWxzZSwKKyAgY29uZmlndXJhYmxlOiB0cnVlLAorfSk7CiAK
LXNlbGYuYmFyID0gewotICBUcnV0aDogZnVuY3Rpb24oKSB7fSwKLX0KLU9iamVjdC5kZWZpbmVQ
cm9wZXJ0eShzZWxmLmJhciwgIlRydXRoIiwgewotICB3cml0YWJsZTogZmFsc2UsCi0gIGNvbmZp
Z3VyYWJsZTogZmFsc2UsCitPYmplY3QuZGVmaW5lUHJvcGVydHkoc2VsZiwgImJhciIsIHsKKyAg
dmFsdWU6IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7fSwgIlRydXRoIiwgeworICAgIHZhbHVlOiBm
dW5jdGlvbigpIHt9LAorICAgIHdyaXRhYmxlOiBmYWxzZSwKKyAgICBlbnVtZXJhYmxlOiB0cnVl
LAorICAgIGNvbmZpZ3VyYWJsZTogZmFsc2UsCisgIH0pLAorICB3cml0YWJsZTogdHJ1ZSwKKyAg
ZW51bWVyYWJsZTogZmFsc2UsCisgIGNvbmZpZ3VyYWJsZTogdHJ1ZSwKIH0pOwogCi1zZWxmLmJh
eiA9IHsKLSAgTG9uZ1N0b3J5OiBmdW5jdGlvbihoZXJvLCAuLi5kZXRhaWxzKSB7Ci0gICAgcmV0
dXJuIGAke2hlcm99IHdlbnQgYW5kICR7ZGV0YWlscy5qb2luKCcsIHRoZW4nKX1gCi0gIH0sCi0g
IFNob3J0U3Rvcnk6IGZ1bmN0aW9uKC4uLmRldGFpbHMpIHsKLSAgICByZXR1cm4gYCR7ZGV0YWls
cy5qb2luKCcuICcpfWA7CitPYmplY3QuZGVmaW5lUHJvcGVydHkoc2VsZiwgImJheiIsIHsKKyAg
dmFsdWU6IHsKKyAgICBMb25nU3Rvcnk6IGZ1bmN0aW9uKGhlcm8sIC4uLmRldGFpbHMpIHsKKyAg
ICAgIHJldHVybiBgJHtoZXJvfSB3ZW50IGFuZCAke2RldGFpbHMuam9pbignLCB0aGVuJyl9YAor
ICAgIH0sCisgICAgU2hvcnRTdG9yeTogZnVuY3Rpb24oLi4uZGV0YWlscykgeworICAgICAgcmV0
dXJuIGAke2RldGFpbHMuam9pbignLiAnKX1gOworICAgIH0sCiAgIH0sCi19OworICB3cml0YWJs
ZTogdHJ1ZSwKKyAgZW51bWVyYWJsZTogZmFsc2UsCisgIGNvbmZpZ3VyYWJsZTogdHJ1ZSwKK30p
OwogCiB2YXIgaWRsQXJyYXkgPSBuZXcgSWRsQXJyYXkoKTsKLWlkbEFycmF5LmFkZF9pZGxzKAot
YG5hbWVzcGFjZSBmb28geworaWRsQXJyYXkuYWRkX2lkbHMoYAorW0V4cG9zZWQ9V2luZG93XQor
bmFtZXNwYWNlIGZvbyB7CiAgIHZvaWQgVHJ1dGgoKTsKICAgdm9pZCBMaWVzKCk7CiB9OworW0V4
cG9zZWQ9V2luZG93XQogbmFtZXNwYWNlIGJhciB7CiAgIFtMZWdhY3lVbmZvcmdlYWJsZV0KICAg
dm9pZCBUcnV0aCgpOwogfTsKK1tFeHBvc2VkPVdpbmRvd10KIG5hbWVzcGFjZSBiYXogewogICBE
T01TdHJpbmcgTG9uZ1N0b3J5KGFueSBoZXJvLCBET01TdHJpbmcuLi4gZGV0YWlscyk7CiAgIERP
TVN0cmluZyBTaG9ydFN0b3J5KERPTVN0cmluZy4uLiBkZXRhaWxzKTsKQEAgLTYyLDE5ICs4MSwz
MSBAQCBpZGxBcnJheS50ZXN0KCk7CiAgIH0sCiAgICJzdW1tYXJpemVkX3Rlc3RzIjogWwogICAg
IHsKLSAgICAgICJuYW1lIjogImJhciBuYW1lc3BhY2U6IG9wZXJhdGlvbiBUcnV0aCgpIiwKKyAg
ICAgICJuYW1lIjogImZvbyBuYW1lc3BhY2U6IGV4dGVuZGVkIGF0dHJpYnV0ZXMiLAogICAgICAg
InN0YXR1c19zdHJpbmciOiAiUEFTUyIsCiAgICAgICAicHJvcGVydGllcyI6IHt9LAogICAgICAg
Im1lc3NhZ2UiOiBudWxsCiAgICAgfSwKICAgICB7Ci0gICAgICAibmFtZSI6ICJiYXogbmFtZXNw
YWNlOiBvcGVyYXRpb24gTG9uZ1N0b3J5KGFueSwgRE9NU3RyaW5nLi4uKSIsCisgICAgICAibmFt
ZSI6ICJmb28gbmFtZXNwYWNlOiBwcm9wZXJ0eSBkZXNjcmlwdG9yIiwKICAgICAgICJzdGF0dXNf
c3RyaW5nIjogIlBBU1MiLAogICAgICAgInByb3BlcnRpZXMiOiB7fSwKICAgICAgICJtZXNzYWdl
IjogbnVsbAogICAgIH0sCiAgICAgewotICAgICAgIm5hbWUiOiAiYmF6IG5hbWVzcGFjZTogb3Bl
cmF0aW9uIFNob3J0U3RvcnkoRE9NU3RyaW5nLi4uKSIsCisgICAgICAibmFtZSI6ICJmb28gbmFt
ZXNwYWNlOiBbW0V4dGVuc2libGVdXSBpcyB0cnVlIiwKKyAgICAgICJzdGF0dXNfc3RyaW5nIjog
IlBBU1MiLAorICAgICAgInByb3BlcnRpZXMiOiB7fSwKKyAgICAgICJtZXNzYWdlIjogbnVsbAor
ICAgIH0sCisgICAgeworICAgICAgIm5hbWUiOiAiZm9vIG5hbWVzcGFjZTogW1tQcm90b3R5cGVd
XSBpcyBPYmplY3QucHJvdG90eXBlIiwKKyAgICAgICJzdGF0dXNfc3RyaW5nIjogIlBBU1MiLAor
ICAgICAgInByb3BlcnRpZXMiOiB7fSwKKyAgICAgICJtZXNzYWdlIjogbnVsbAorICAgIH0sCisg
ICAgeworICAgICAgIm5hbWUiOiAiZm9vIG5hbWVzcGFjZTogdHlwZW9mIGlzIFwib2JqZWN0XCIi
LAogICAgICAgInN0YXR1c19zdHJpbmciOiAiUEFTUyIsCiAgICAgICAicHJvcGVydGllcyI6IHt9
LAogICAgICAgIm1lc3NhZ2UiOiBudWxsCkBAIC05MCw2ICsxMjEsODYgQEAgaWRsQXJyYXkudGVz
dCgpOwogICAgICAgInN0YXR1c19zdHJpbmciOiAiRkFJTCIsCiAgICAgICAicHJvcGVydGllcyI6
IHt9LAogICAgICAgIm1lc3NhZ2UiOiAiYXNzZXJ0X293bl9wcm9wZXJ0eTogbmFtZXNwYWNlIG9i
amVjdCBtaXNzaW5nIG9wZXJhdGlvbiBcIkxpZXNcIiBleHBlY3RlZCBwcm9wZXJ0eSBcIkxpZXNc
IiBtaXNzaW5nIgorICAgIH0sCisKKyAgICB7CisgICAgICAibmFtZSI6ICJiYXIgbmFtZXNwYWNl
OiBleHRlbmRlZCBhdHRyaWJ1dGVzIiwKKyAgICAgICJzdGF0dXNfc3RyaW5nIjogIlBBU1MiLAor
ICAgICAgInByb3BlcnRpZXMiOiB7fSwKKyAgICAgICJtZXNzYWdlIjogbnVsbAorICAgIH0sCisg
ICAgeworICAgICAgIm5hbWUiOiAiYmFyIG5hbWVzcGFjZTogcHJvcGVydHkgZGVzY3JpcHRvciIs
CisgICAgICAic3RhdHVzX3N0cmluZyI6ICJQQVNTIiwKKyAgICAgICJwcm9wZXJ0aWVzIjoge30s
CisgICAgICAibWVzc2FnZSI6IG51bGwKKyAgICB9LAorICAgIHsKKyAgICAgICJuYW1lIjogImJh
ciBuYW1lc3BhY2U6IFtbRXh0ZW5zaWJsZV1dIGlzIHRydWUiLAorICAgICAgInN0YXR1c19zdHJp
bmciOiAiUEFTUyIsCisgICAgICAicHJvcGVydGllcyI6IHt9LAorICAgICAgIm1lc3NhZ2UiOiBu
dWxsCisgICAgfSwKKyAgICB7CisgICAgICAibmFtZSI6ICJiYXIgbmFtZXNwYWNlOiBbW1Byb3Rv
dHlwZV1dIGlzIE9iamVjdC5wcm90b3R5cGUiLAorICAgICAgInN0YXR1c19zdHJpbmciOiAiUEFT
UyIsCisgICAgICAicHJvcGVydGllcyI6IHt9LAorICAgICAgIm1lc3NhZ2UiOiBudWxsCisgICAg
fSwKKyAgICB7CisgICAgICAibmFtZSI6ICJiYXIgbmFtZXNwYWNlOiB0eXBlb2YgaXMgXCJvYmpl
Y3RcIiIsCisgICAgICAic3RhdHVzX3N0cmluZyI6ICJQQVNTIiwKKyAgICAgICJwcm9wZXJ0aWVz
Ijoge30sCisgICAgICAibWVzc2FnZSI6IG51bGwKKyAgICB9LAorICAgIHsKKyAgICAgICJuYW1l
IjogImJhciBuYW1lc3BhY2U6IG9wZXJhdGlvbiBUcnV0aCgpIiwKKyAgICAgICJzdGF0dXNfc3Ry
aW5nIjogIlBBU1MiLAorICAgICAgInByb3BlcnRpZXMiOiB7fSwKKyAgICAgICJtZXNzYWdlIjog
bnVsbAorICAgIH0sCisKKyAgICB7CisgICAgICAibmFtZSI6ICJiYXogbmFtZXNwYWNlOiBleHRl
bmRlZCBhdHRyaWJ1dGVzIiwKKyAgICAgICJzdGF0dXNfc3RyaW5nIjogIlBBU1MiLAorICAgICAg
InByb3BlcnRpZXMiOiB7fSwKKyAgICAgICJtZXNzYWdlIjogbnVsbAorICAgIH0sCisgICAgewor
ICAgICAgIm5hbWUiOiAiYmF6IG5hbWVzcGFjZTogcHJvcGVydHkgZGVzY3JpcHRvciIsCisgICAg
ICAic3RhdHVzX3N0cmluZyI6ICJQQVNTIiwKKyAgICAgICJwcm9wZXJ0aWVzIjoge30sCisgICAg
ICAibWVzc2FnZSI6IG51bGwKKyAgICB9LAorICAgIHsKKyAgICAgICJuYW1lIjogImJheiBuYW1l
c3BhY2U6IFtbRXh0ZW5zaWJsZV1dIGlzIHRydWUiLAorICAgICAgInN0YXR1c19zdHJpbmciOiAi
UEFTUyIsCisgICAgICAicHJvcGVydGllcyI6IHt9LAorICAgICAgIm1lc3NhZ2UiOiBudWxsCisg
ICAgfSwKKyAgICB7CisgICAgICAibmFtZSI6ICJiYXogbmFtZXNwYWNlOiBbW1Byb3RvdHlwZV1d
IGlzIE9iamVjdC5wcm90b3R5cGUiLAorICAgICAgInN0YXR1c19zdHJpbmciOiAiUEFTUyIsCisg
ICAgICAicHJvcGVydGllcyI6IHt9LAorICAgICAgIm1lc3NhZ2UiOiBudWxsCisgICAgfSwKKyAg
ICB7CisgICAgICAibmFtZSI6ICJiYXogbmFtZXNwYWNlOiB0eXBlb2YgaXMgXCJvYmplY3RcIiIs
CisgICAgICAic3RhdHVzX3N0cmluZyI6ICJQQVNTIiwKKyAgICAgICJwcm9wZXJ0aWVzIjoge30s
CisgICAgICAibWVzc2FnZSI6IG51bGwKKyAgICB9LAorICAgIHsKKyAgICAgICJuYW1lIjogImJh
eiBuYW1lc3BhY2U6IG9wZXJhdGlvbiBMb25nU3RvcnkoYW55LCBET01TdHJpbmcuLi4pIiwKKyAg
ICAgICJzdGF0dXNfc3RyaW5nIjogIlBBU1MiLAorICAgICAgInByb3BlcnRpZXMiOiB7fSwKKyAg
ICAgICJtZXNzYWdlIjogbnVsbAorICAgIH0sCisgICAgeworICAgICAgIm5hbWUiOiAiYmF6IG5h
bWVzcGFjZTogb3BlcmF0aW9uIFNob3J0U3RvcnkoRE9NU3RyaW5nLi4uKSIsCisgICAgICAic3Rh
dHVzX3N0cmluZyI6ICJQQVNTIiwKKyAgICAgICJwcm9wZXJ0aWVzIjoge30sCisgICAgICAibWVz
c2FnZSI6IG51bGwKICAgICB9CiAgIF0sCiAgICJ0eXBlIjogImNvbXBsZXRlIgpkaWZmIC0tZ2l0
IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMv
dGVzdC90ZXN0cy9mdW5jdGlvbmFsL25vLXRpdGxlLmh0bWwgYi9MYXlvdXRUZXN0cy9pbXBvcnRl
ZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwv
bm8tdGl0bGUuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iYWVmYjgxYmY4ZmFjNTFlMjc2N2UyZTYyMzg4N2Nk
MGI5NmQ4ZjFkCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dl
Yi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9mdW5jdGlvbmFsL25vLXRpdGxl
Lmh0bWwKQEAgLTAsMCArMSwxNDkgQEAKKzwhRE9DVFlQRSBIVE1MPgorPGh0bWw+Cis8aGVhZD4K
KzxtZXRhIG5hbWU9InZhcmlhbnQiIGNvbnRlbnQ9IiI+Cis8bWV0YSBuYW1lPSJ2YXJpYW50IiBj
b250ZW50PSI/a2VlcC1wcm9taXNlIj4KKzx0aXRsZT5UZXN0cyB3aXRoIG5vIHRpdGxlPC90aXRs
ZT4KKzxzY3JpcHQgc3JjPSIuLi8uLi92YXJpYW50cy5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8
c2NyaXB0IHNyYz0iL3Jlc291cmNlcy90ZXN0aGFybmVzcy5qcyI+PC9zY3JpcHQ+CisKKzxib2R5
PgorPGgxPlRlc3RzIHdpdGggbm8gdGl0bGU8L2gxPgorPGRpdiBpZD0ibG9nIj48L2Rpdj4KKzxz
Y3JpcHQ+CisgIHRlc3QoZnVuY3Rpb24oKXthc3NlcnRfdHJ1ZSh0cnVlLCAnMScpfSk7CisgIHRl
c3QoKCk9PmFzc2VydF90cnVlKHRydWUsICcyJykpOworICB0ZXN0KCgpID0+IGFzc2VydF90cnVl
KHRydWUsICczJykpOworICB0ZXN0KCgpID0+IGFzc2VydF90cnVlKHRydWUsICczJykpOyAgLy8g
dGVzdCBkdXBsaWNhdGUgYmVoYXZpb3VyCisgIHRlc3QoKCkgPT4gYXNzZXJ0X3RydWUodHJ1ZSwg
JzMnKSk7ICAvLyB0ZXN0IGR1cGxpY2F0ZSBiZWhhdmlvdXIKKyAgdGVzdCgoKSA9PiB7CisgICAg
ICBhc3NlcnRfdHJ1ZSh0cnVlLCAnNCcpOworICB9KTsKKyAgdGVzdCgoKSA9PiB7IGFzc2VydF90
cnVlKHRydWUsICc1JykgfSk7CisgIHRlc3QoKCkgPT4geyBhc3NlcnRfdHJ1ZSh0cnVlLCAnNicp
IH0gICApOworICB0ZXN0KCgpID0+IHsgYXNzZXJ0X3RydWUodHJ1ZSwgJzcnKTsgfSk7CisgIHRl
c3QoKCkgPT4ge30pOworICB0ZXN0KCgpID0+IHsgfSk7CisgIHRlc3QoKCkgPT4gezs7Ozt9KTsK
KyAgdGVzdCgoKSA9PiB7IDsgOyA7IDsgfSk7CisgIHRlc3QoKCk9Pnt9KTsKKyAgdGVzdCgoKT0+
eyB9KTsKKyAgdGVzdCgoKT0+ezs7Ozt9KTsKKyAgdGVzdCgoKT0+eyA7IDsgOyA7IH0pOworPC9z
Y3JpcHQ+Cis8c2NyaXB0IHR5cGU9InRleHQvanNvbiIgaWQ9ImV4cGVjdGVkIj4KK3sKKyAgInN1
bW1hcml6ZWRfc3RhdHVzIjogeworICAgICJzdGF0dXNfc3RyaW5nIjogIk9LIiwKKyAgICAibWVz
c2FnZSI6IG51bGwKKyAgfSwKKyAgInN1bW1hcml6ZWRfdGVzdHMiOiBbCisgICAgeworICAgICAg
InN0YXR1c19zdHJpbmciOiAiUEFTUyIsCisgICAgICAibmFtZSI6ICJUZXN0cyB3aXRoIG5vIHRp
dGxlIiwKKyAgICAgICJwcm9wZXJ0aWVzIjoge30sCisgICAgICAibWVzc2FnZSI6IG51bGwKKyAg
ICB9LAorICAgIHsKKyAgICAgICJzdGF0dXNfc3RyaW5nIjogIlBBU1MiLAorICAgICAgIm5hbWUi
OiAiYXNzZXJ0X3RydWUodHJ1ZSwgJzInKSIsCisgICAgICAicHJvcGVydGllcyI6IHt9LAorICAg
ICAgIm1lc3NhZ2UiOiBudWxsCisgICAgfSwKKyAgICB7CisgICAgICAic3RhdHVzX3N0cmluZyI6
ICJQQVNTIiwKKyAgICAgICJuYW1lIjogImFzc2VydF90cnVlKHRydWUsICczJykiLAorICAgICAg
InByb3BlcnRpZXMiOiB7fSwKKyAgICAgICJtZXNzYWdlIjogbnVsbAorICAgIH0sCisgICAgewor
ICAgICAgInN0YXR1c19zdHJpbmciOiAiUEFTUyIsCisgICAgICAibmFtZSI6ICJhc3NlcnRfdHJ1
ZSh0cnVlLCAnMycpIDEiLAorICAgICAgInByb3BlcnRpZXMiOiB7fSwKKyAgICAgICJtZXNzYWdl
IjogbnVsbAorICAgIH0sCisgICAgeworICAgICAgInN0YXR1c19zdHJpbmciOiAiUEFTUyIsCisg
ICAgICAibmFtZSI6ICJhc3NlcnRfdHJ1ZSh0cnVlLCAnMycpIDIiLAorICAgICAgInByb3BlcnRp
ZXMiOiB7fSwKKyAgICAgICJtZXNzYWdlIjogbnVsbAorICAgIH0sCisgICAgeworICAgICAgInN0
YXR1c19zdHJpbmciOiAiUEFTUyIsCisgICAgICAibmFtZSI6ICJUZXN0cyB3aXRoIG5vIHRpdGxl
IDEiLAorICAgICAgInByb3BlcnRpZXMiOiB7fSwKKyAgICAgICJtZXNzYWdlIjogbnVsbAorICAg
IH0sCisgICAgeworICAgICAgInN0YXR1c19zdHJpbmciOiAiUEFTUyIsCisgICAgICAibmFtZSI6
ICJhc3NlcnRfdHJ1ZSh0cnVlLCAnNScpIiwKKyAgICAgICJwcm9wZXJ0aWVzIjoge30sCisgICAg
ICAibWVzc2FnZSI6IG51bGwKKyAgICB9LAorICAgIHsKKyAgICAgICJzdGF0dXNfc3RyaW5nIjog
IlBBU1MiLAorICAgICAgIm5hbWUiOiAiYXNzZXJ0X3RydWUodHJ1ZSwgJzYnKSIsCisgICAgICAi
cHJvcGVydGllcyI6IHt9LAorICAgICAgIm1lc3NhZ2UiOiBudWxsCisgICAgfSwKKyAgICB7Cisg
ICAgICAic3RhdHVzX3N0cmluZyI6ICJQQVNTIiwKKyAgICAgICJuYW1lIjogImFzc2VydF90cnVl
KHRydWUsICc3JykiLAorICAgICAgInByb3BlcnRpZXMiOiB7fSwKKyAgICAgICJtZXNzYWdlIjog
bnVsbAorICAgIH0sCisgICAgeworICAgICAgInN0YXR1c19zdHJpbmciOiAiUEFTUyIsCisgICAg
ICAibmFtZSI6ICJUZXN0cyB3aXRoIG5vIHRpdGxlIDIiLAorICAgICAgInByb3BlcnRpZXMiOiB7
fSwKKyAgICAgICJtZXNzYWdlIjogbnVsbAorICAgIH0sCisgICAgeworICAgICAgInN0YXR1c19z
dHJpbmciOiAiUEFTUyIsCisgICAgICAibmFtZSI6ICJUZXN0cyB3aXRoIG5vIHRpdGxlIDMiLAor
ICAgICAgInByb3BlcnRpZXMiOiB7fSwKKyAgICAgICJtZXNzYWdlIjogbnVsbAorICAgIH0sCisg
ICAgeworICAgICAgInN0YXR1c19zdHJpbmciOiAiUEFTUyIsCisgICAgICAibmFtZSI6ICJUZXN0
cyB3aXRoIG5vIHRpdGxlIDQiLAorICAgICAgInByb3BlcnRpZXMiOiB7fSwKKyAgICAgICJtZXNz
YWdlIjogbnVsbAorICAgIH0sCisgICAgeworICAgICAgInN0YXR1c19zdHJpbmciOiAiUEFTUyIs
CisgICAgICAibmFtZSI6ICJUZXN0cyB3aXRoIG5vIHRpdGxlIDUiLAorICAgICAgInByb3BlcnRp
ZXMiOiB7fSwKKyAgICAgICJtZXNzYWdlIjogbnVsbAorICAgIH0sCisgICAgeworICAgICAgInN0
YXR1c19zdHJpbmciOiAiUEFTUyIsCisgICAgICAibmFtZSI6ICJUZXN0cyB3aXRoIG5vIHRpdGxl
IDYiLAorICAgICAgInByb3BlcnRpZXMiOiB7fSwKKyAgICAgICJtZXNzYWdlIjogbnVsbAorICAg
IH0sCisgICAgeworICAgICAgInN0YXR1c19zdHJpbmciOiAiUEFTUyIsCisgICAgICAibmFtZSI6
ICJUZXN0cyB3aXRoIG5vIHRpdGxlIDciLAorICAgICAgInByb3BlcnRpZXMiOiB7fSwKKyAgICAg
ICJtZXNzYWdlIjogbnVsbAorICAgIH0sCisgICAgeworICAgICAgInN0YXR1c19zdHJpbmciOiAi
UEFTUyIsCisgICAgICAibmFtZSI6ICJUZXN0cyB3aXRoIG5vIHRpdGxlIDgiLAorICAgICAgInBy
b3BlcnRpZXMiOiB7fSwKKyAgICAgICJtZXNzYWdlIjogbnVsbAorICAgIH0sCisgICAgeworICAg
ICAgInN0YXR1c19zdHJpbmciOiAiUEFTUyIsCisgICAgICAibmFtZSI6ICJUZXN0cyB3aXRoIG5v
IHRpdGxlIDkiLAorICAgICAgInByb3BlcnRpZXMiOiB7fSwKKyAgICAgICJtZXNzYWdlIjogbnVs
bAorICAgIH0KKyAgXSwKKyAgInR5cGUiOiAiY29tcGxldGUiCit9Cis8L3NjcmlwdD4KKzwvYm9k
eT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxh
dGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC93M2MtaW1wb3J0Lmxv
ZyBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2Vz
L3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC93M2MtaW1wb3J0LmxvZwppbmRleCBmNzhiMTQxMjhkODRi
YjNmZjRjMDAwOGU0ZTkwMWMzYjgxNThlNDliLi4xMmI4MGMxMzA0ODZhMzM4YmRjNjY4NzdlNTVl
OGZlOWJkMWM1NDg1IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBs
YXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvdzNjLWltcG9ydC5s
b2cKKysrIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNv
dXJjZXMvdGVzdC90ZXN0cy9mdW5jdGlvbmFsL3czYy1pbXBvcnQubG9nCkBAIC0zNiw2ICszNiw3
IEBAIExpc3Qgb2YgZmlsZXM6CiAvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9y
bS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9mdW5jdGlvbmFsL2lmcmFtZS1jb25zb2xpZGF0
ZS10ZXN0cy5odG1sCiAvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0
cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9mdW5jdGlvbmFsL2lmcmFtZS1tc2cuaHRtbAogL0xheW91
dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVz
dHMvZnVuY3Rpb25hbC9sb2ctaW5zZXJ0aW9uLmh0bWwKKy9MYXlvdXRUZXN0cy9pbXBvcnRlZC93
M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvbm8t
dGl0bGUuaHRtbAogL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMv
cmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC9vcmRlci5odG1sCiAvTGF5b3V0VGVzdHMv
aW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9mdW5j
dGlvbmFsL3Byb21pc2UtYXN5bmMuaHRtbAogL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWIt
cGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC9wcm9taXNlLXdp
dGgtc3luYy5odG1sCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBs
YXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL3VuaXQvYXNzZXJ0X29iamVjdF9lcXVh
bHMuaHRtbCBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVz
b3VyY2VzL3Rlc3QvdGVzdHMvdW5pdC9hc3NlcnRfb2JqZWN0X2VxdWFscy5odG1sCmluZGV4IDE5
Mjk2YjgyOTNmMjUwNTVhMjEwMGViZDg4NGRjOWRiYmQ3OTk5ZmYuLjMxM2Q3N2I5NzcxNTZkZmM4
YTZlMzFjY2NlNTQ3MDY0ZjJjNDE2NDggMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2ltcG9ydGVk
L3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvdW5pdC9hc3NlcnRf
b2JqZWN0X2VxdWFscy5odG1sCisrKyBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxh
dGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvdW5pdC9hc3NlcnRfb2JqZWN0X2VxdWFs
cy5odG1sCkBAIC00Myw3ICs0Myw3IEBAIHRlc3QoZnVuY3Rpb24oKSB7CiAgIHZhciBleHBlY3Rl
ZCA9IHt9OwogICBPYmplY3QuZGVmaW5lUHJvcGVydHkoYWN0dWFsLCAnYScsIHsgdmFsdWU6IDEs
IGVudW1lcmFibGU6IGZhbHNlIH0pOwogCi0gIGFzc2VydF90cnVlKGFjdHVhbC5hICE9PSBleHBl
Y3RlZC5hKTsKKyAgYXNzZXJ0X25vdF9lcXVhbHMoYWN0dWFsLmEsIGV4cGVjdGVkLmEpOwogICBh
c3NlcnRfb2JqZWN0X2VxdWFscyhhY3R1YWwsIGV4cGVjdGVkKTsKIH0sICdub24tZW51bWVyYWJs
ZSBwcm9wZXJ0aWVzIGluIGFjdHVhbCB2YWx1ZSBpZ25vcmVkJyk7CiAKQEAgLTUyLDcgKzUyLDcg
QEAgdGVzdChmdW5jdGlvbigpIHsKICAgdmFyIGV4cGVjdGVkID0ge307CiAgIE9iamVjdC5kZWZp
bmVQcm9wZXJ0eShleHBlY3RlZCwgJ2EnLCB7IHZhbHVlOiAxLCBlbnVtZXJhYmxlOiBmYWxzZSB9
KTsKIAotICBhc3NlcnRfdHJ1ZShhY3R1YWwuYSAhPT0gZXhwZWN0ZWQuYSk7CisgIGFzc2VydF9u
b3RfZXF1YWxzKGFjdHVhbC5hLCBleHBlY3RlZC5hKTsKICAgYXNzZXJ0X29iamVjdF9lcXVhbHMo
YWN0dWFsLCBleHBlY3RlZCk7CiB9LCAnbm9uLWVudW1lcmFibGUgcHJvcGVydGllcyBpbiBleHBl
Y3RlZCB2YWx1ZSBpZ25vcmVkJyk7CiAKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2ltcG9ydGVk
L3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvdW5pdC9hc3luYy10
ZXN0LXJldHVybi1yZXN0cmljdGlvbnMuaHRtbCBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93
ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvdW5pdC9hc3luYy10ZXN0LXJl
dHVybi1yZXN0cmljdGlvbnMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wZmRlMmUyNDIyM2YwMTc1MzI5NDY1
NmVhMWJhYTQyN2MzZmY5ZjRhCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvaW1wb3J0
ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy91bml0L2FzeW5j
LXRlc3QtcmV0dXJuLXJlc3RyaWN0aW9ucy5odG1sCkBAIC0wLDAgKzEsMTM1IEBACis8IURPQ1RZ
UEUgSFRNTD4KKzxodG1sPgorPGhlYWQ+CisgIDxtZXRhIGNoYXJzZXQ9InV0Zi04Ij4KKyAgPHNj
cmlwdCBzcmM9Ii9yZXNvdXJjZXMvdGVzdGhhcm5lc3MuanMiPjwvc2NyaXB0PgorICA8dGl0bGU+
UmVzdHJpY3Rpb25zIG9uIHJldHVybiB2YWx1ZSBmcm9tIGBhc3luY190ZXN0YDwvdGl0bGU+Cis8
L2hlYWQ+Cis8Ym9keT4KKzxzY3JpcHQ+CitmdW5jdGlvbiBtYWtlVGVzdCguLi5ib2RpZXMpIHsK
KyAgY29uc3QgY2xvc2VTY3JpcHQgPSAnPCcgKyAnL3NjcmlwdD4nOworICBsZXQgc3JjID0gYAor
PCFET0NUWVBFIEhUTUw+Cis8aHRtbD4KKzxoZWFkPgorPHRpdGxlPkRvY3VtZW50IHRpdGxlPC90
aXRsZT4KKzxzY3JpcHQgc3JjPSIvcmVzb3VyY2VzL3Rlc3RoYXJuZXNzLmpzPyR7TWF0aC5yYW5k
b20oKX0iPiR7Y2xvc2VTY3JpcHR9Cis8L2hlYWQ+CisKKzxib2R5PgorPGRpdiBpZD0ibG9nIj48
L2Rpdj5gOworICBib2RpZXMuZm9yRWFjaCgoYm9keSkgPT4geworICAgIHNyYyArPSAnPHNjcmlw
dD4oJyArIGJvZHkgKyAnKSgpOycgKyBjbG9zZVNjcmlwdDsKKyAgfSk7CisKKyAgY29uc3QgaWZy
YW1lID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaWZyYW1lJyk7CisKKyAgZG9jdW1lbnQuYm9k
eS5hcHBlbmRDaGlsZChpZnJhbWUpOworICBpZnJhbWUuY29udGVudERvY3VtZW50LndyaXRlKHNy
Yyk7CisKKyAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7CisgICAgd2luZG93LmFk
ZEV2ZW50TGlzdGVuZXIoJ21lc3NhZ2UnLCBmdW5jdGlvbiBvbk1lc3NhZ2UoZSkgeworICAgICAg
aWYgKGUuc291cmNlICE9PSBpZnJhbWUuY29udGVudFdpbmRvdykgeworICAgICAgICByZXR1cm47
CisgICAgICB9CisgICAgICBpZiAoIWUuZGF0YSB8fCBlLmRhdGEudHlwZSAhPT0nY29tcGxldGUn
KSB7CisgICAgICAgIHJldHVybjsKKyAgICAgIH0KKyAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExp
c3RlbmVyKCdtZXNzYWdlJywgb25NZXNzYWdlKTsKKyAgICAgIHJlc29sdmUoZS5kYXRhKTsKKyAg
ICB9KTsKKworICAgIGlmcmFtZS5jb250ZW50RG9jdW1lbnQuY2xvc2UoKTsKKyAgfSkudGhlbigo
eyB0ZXN0cywgc3RhdHVzIH0pID0+IHsKKyAgICBjb25zdCBzdW1tYXJ5ID0geworICAgICAgaGFy
bmVzczogeworICAgICAgICBzdGF0dXM6IGdldEVudW1Qcm9wKHN0YXR1cywgc3RhdHVzLnN0YXR1
cyksCisgICAgICAgIG1lc3NhZ2U6IHN0YXR1cy5tZXNzYWdlCisgICAgICB9LAorICAgICAgdGVz
dHM6IHt9CisgICAgfTsKKworICAgIHRlc3RzLmZvckVhY2goKHRlc3QpID0+IHsKKyAgICAgIHN1
bW1hcnkudGVzdHNbdGVzdC5uYW1lXSA9IGdldEVudW1Qcm9wKHRlc3QsIHRlc3Quc3RhdHVzKTsK
KyAgICB9KTsKKworICAgIHJldHVybiBzdW1tYXJ5OworICB9KTsKK30KKworZnVuY3Rpb24gZ2V0
RW51bVByb3Aob2JqZWN0LCB2YWx1ZSkgeworICBmb3IgKGxldCBwcm9wZXJ0eSBpbiBvYmplY3Qp
IHsKKyAgICBpZiAoIS9eW0EtWl0rJC8udGVzdChwcm9wZXJ0eSkpIHsKKyAgICAgIGNvbnRpbnVl
OworICAgIH0KKworICAgIGlmIChvYmplY3RbcHJvcGVydHldID09PSB2YWx1ZSkgeworICAgICAg
cmV0dXJuIHByb3BlcnR5OworICAgIH0KKyAgfQorfQorCitwcm9taXNlX3Rlc3QoKCkgPT4gewor
ICByZXR1cm4gbWFrZVRlc3QoCisgICAgICAoKSA9PiB7CisgICAgICAgIGFzeW5jX3Rlc3QoKHQp
ID0+IHt0LmRvbmUoKTsgcmV0dXJuIHVuZGVmaW5lZDt9LCAnYmVmb3JlJyk7CisgICAgICAgIGFz
eW5jX3Rlc3QoKHQpID0+IHt0LmRvbmUoKTsgcmV0dXJuIG51bGw7fSwgJ251bGwnKTsKKyAgICAg
ICAgYXN5bmNfdGVzdCgodCkgPT4ge3QuZG9uZSgpOyByZXR1cm4gdW5kZWZpbmVkO30sICdhZnRl
cicpOworICAgICAgfQorICAgICkudGhlbigoe2hhcm5lc3MsIHRlc3RzfSkgPT4geworICAgICAg
YXNzZXJ0X2VxdWFscyhoYXJuZXNzLnN0YXR1cywgJ0VSUk9SJyk7CisgICAgICBhc3NlcnRfZXF1
YWxzKAorICAgICAgICBoYXJuZXNzLm1lc3NhZ2UsCisgICAgICAgICdUZXN0IG5hbWVkICJudWxs
IiBwYXNzZWQgYSBmdW5jdGlvbiB0byBgYXN5bmNfdGVzdGAgdGhhdCByZXR1cm5lZCBhIHZhbHVl
LicKKyAgICAgICk7CisgICAgICBhc3NlcnRfZXF1YWxzKHRlc3RzLmJlZm9yZSwgJ1BBU1MnKTsK
KyAgICAgIGFzc2VydF9lcXVhbHModGVzdHMubnVsbCwgJ1BBU1MnKTsKKyAgICAgIC8vIFRoaXMg
dGVzdCBkaWQgbm90IGdldCB0aGUgY2hhbmNlIHRvIHN0YXJ0LgorICAgICAgYXNzZXJ0X2VxdWFs
cyh0ZXN0cy5hZnRlciwgdW5kZWZpbmVkKTsKKyAgICB9KTsKK30sICd0ZXN0IHJldHVybmluZyBg
bnVsbGAnKTsKKworcHJvbWlzZV90ZXN0KCgpID0+IHsKKyAgcmV0dXJuIG1ha2VUZXN0KAorICAg
ICAgKCkgPT4geworICAgICAgICBhc3luY190ZXN0KCh0KSA9PiB7dC5kb25lKCk7IHJldHVybiB1
bmRlZmluZWQ7fSwgJ2JlZm9yZScpOworICAgICAgICBhc3luY190ZXN0KCh0KSA9PiB7dC5kb25l
KCk7IHJldHVybiB7fTt9LCAnb2JqZWN0Jyk7CisgICAgICAgIGFzeW5jX3Rlc3QoKHQpID0+IHt0
LmRvbmUoKTsgcmV0dXJuIHVuZGVmaW5lZDt9LCAnYWZ0ZXInKTsKKyAgICAgIH0KKyAgICApLnRo
ZW4oKHtoYXJuZXNzLCB0ZXN0c30pID0+IHsKKyAgICAgIGFzc2VydF9lcXVhbHMoaGFybmVzcy5z
dGF0dXMsICdFUlJPUicpOworICAgICAgYXNzZXJ0X2VxdWFscygKKyAgICAgICAgaGFybmVzcy5t
ZXNzYWdlLAorICAgICAgICAnVGVzdCBuYW1lZCAib2JqZWN0IiBwYXNzZWQgYSBmdW5jdGlvbiB0
byBgYXN5bmNfdGVzdGAgdGhhdCByZXR1cm5lZCBhIHZhbHVlLicKKyAgICAgICk7CisgICAgICBh
c3NlcnRfZXF1YWxzKHRlc3RzLmJlZm9yZSwgJ1BBU1MnKTsKKyAgICAgIGFzc2VydF9lcXVhbHMo
dGVzdHMub2JqZWN0LCAnUEFTUycpOworICAgICAgLy8gVGhpcyB0ZXN0IGRpZCBub3QgZ2V0IHRo
ZSBjaGFuY2UgdG8gc3RhcnQuCisgICAgICBhc3NlcnRfZXF1YWxzKHRlc3RzLmFmdGVyLCB1bmRl
ZmluZWQpOworICAgIH0pOworfSwgJ3Rlc3QgcmV0dXJuaW5nIGFuIG9yZGluYXJ5IG9iamVjdCcp
OworCitwcm9taXNlX3Rlc3QoKCkgPT4geworICByZXR1cm4gbWFrZVRlc3QoCisgICAgICAoKSA9
PiB7CisgICAgICAgIGFzeW5jX3Rlc3QoKHQpID0+IHt0LmRvbmUoKTsgcmV0dXJuIHVuZGVmaW5l
ZDt9LCAnYmVmb3JlJyk7CisgICAgICAgIGFzeW5jX3Rlc3QoKHQpID0+IHt0LmRvbmUoKTsgcmV0
dXJuIFByb21pc2UucmVzb2x2ZSg1KTt9LCAndGhlbmFibGUnKTsKKyAgICAgICAgYXN5bmNfdGVz
dCgodCkgPT4ge3QuZG9uZSgpOyByZXR1cm4gdW5kZWZpbmVkO30sICdhZnRlcicpOworICAgICAg
fQorICAgICkudGhlbigoe2hhcm5lc3MsIHRlc3RzfSkgPT4geworICAgICAgYXNzZXJ0X2VxdWFs
cyhoYXJuZXNzLnN0YXR1cywgJ0VSUk9SJyk7CisgICAgICBhc3NlcnRfZXF1YWxzKAorICAgICAg
ICBoYXJuZXNzLm1lc3NhZ2UsCisgICAgICAgICdUZXN0IG5hbWVkICJ0aGVuYWJsZSIgcGFzc2Vk
IGEgZnVuY3Rpb24gdG8gYGFzeW5jX3Rlc3RgIHRoYXQgcmV0dXJuZWQgYSB2YWx1ZS4gJyArCisg
ICAgICAgICdDb25zaWRlciB1c2luZyBgcHJvbWlzZV90ZXN0YCBpbnN0ZWFkIHdoZW4gdXNpbmcg
UHJvbWlzZXMgb3IgYXN5bmMvYXdhaXQuJworICAgICAgKTsKKyAgICAgIGFzc2VydF9lcXVhbHMo
dGVzdHMuYmVmb3JlLCAnUEFTUycpOworICAgICAgYXNzZXJ0X2VxdWFscyh0ZXN0cy50aGVuYWJs
ZSwgJ1BBU1MnKTsKKyAgICAgIC8vIFRoaXMgdGVzdCBkaWQgbm90IGdldCBhIGNoYW5jZSB0byBz
dGFydC4KKyAgICAgIGFzc2VydF9lcXVhbHModGVzdHMuYWZ0ZXIsIHVuZGVmaW5lZCk7CisgICAg
fSk7Cit9LCAndGVzdCByZXR1cm5pbmcgYSB0aGVuYWJsZSBvYmplY3QnKTsKKzwvc2NyaXB0Pgor
PC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dl
Yi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy91bml0L2Jhc2ljLmh0bWwgYi9M
YXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0
L3Rlc3RzL3VuaXQvYmFzaWMuaHRtbAppbmRleCBkOTA3YzdiYjlmYmY0ZmE0ZGM2NzRiZDU3ZTZh
ODU2YjY4ZWQxM2VhLi5kNTIwODJmMmUwNzZkZTA0NThiNjg5NzUwNTIzYjNkMTA2NDZmNGUwIDEw
MDY0NAotLS0gYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jl
c291cmNlcy90ZXN0L3Rlc3RzL3VuaXQvYmFzaWMuaHRtbAorKysgYi9MYXlvdXRUZXN0cy9pbXBv
cnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL3VuaXQvYmFz
aWMuaHRtbApAQCAtMjgsNyArMjgsNyBAQAogICAgICAgICAgICAgV2ViSURMMi5wYXJzZSgiSSdt
IGEgc3ludGF4IGVycm9yIik7CiAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIldlYiBJREwg
ZGlkbid0IHRocm93Iik7CiAgICAgICAgIH0gY2F0Y2ggKGUpIHsKLSAgICAgICAgICAgIGFzc2Vy
dF90cnVlKGUubmFtZSA9PT0gIldlYklETFBhcnNlRXJyb3IiKTsKKyAgICAgICAgICAgIGFzc2Vy
dF9lcXVhbHMoZS5uYW1lLCAiV2ViSURMUGFyc2VFcnJvciIpOwogICAgICAgICB9CiAgICAgfSwg
J1dlYklETDIgcGFyc2UgbWV0aG9kIHNob3VsZCBiYWlsIG9uIGluY29ycmVjdCBXZWJJREwnKTsK
ICAgICB0ZXN0KGZ1bmN0aW9uKCkgewpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQv
dzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy91bml0L2V4Y2VwdGlv
bmFsLWNhc2VzLmh0bWwgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRl
c3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL3VuaXQvZXhjZXB0aW9uYWwtY2FzZXMuaHRtbAppbmRl
eCAyYmU0ZGFjYWFlYzhhZTUzZTYzZDcwNGU4NDJkMzI5NjhhNDI0YjRiLi40MDU0ZDAzMTFkMmRl
NWE4M2M0M2JjMDc2ZDBmNzllOGM2MDFlNDc0IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9pbXBv
cnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL3VuaXQvZXhj
ZXB0aW9uYWwtY2FzZXMuaHRtbAorKysgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBs
YXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL3VuaXQvZXhjZXB0aW9uYWwtY2FzZXMu
aHRtbApAQCAtMTI3LDcgKzEyNyw3IEBAIHByb21pc2VfdGVzdCgoKSA9PiB7CiAgICAgICAgIGFz
eW5jX3Rlc3QoKHQpID0+IHsKICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHsKICAgICAgICAg
ICAgIHNldFRpbWVvdXQoKCkgPT4gdC5kb25lKCksIDApOwotICAgICAgICAgICAgYXN5bmNfdGVz
dCgodCkgPT4gc2V0VGltZW91dCh0LmRvbmUuYmluZCh0KSwgMCksICdhZnRlcicpOworICAgICAg
ICAgICAgYXN5bmNfdGVzdCgodCkgPT4geyBzZXRUaW1lb3V0KHQuZG9uZS5iaW5kKHQpLCAwKTsg
fSwgJ2FmdGVyJyk7CiAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3RoaXMgZXJyb3IgaXMg
ZXhwZWN0ZWQnKTsKICAgICAgICAgICB9LCAwKTsKICAgICAgICAgfSwgJ2R1cmluZycpOwpAQCAt
MjA1LDcgKzIwNSw3IEBAIGlmICgnb251bmhhbmRsZWRyZWplY3Rpb24nIGluIHdpbmRvdykgewog
CiAgICAgICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigndW5oYW5kbGVkcmVqZWN0aW9u
JywgKCkgPT4gewogICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB0LmRvbmUoKSwgMCk7Ci0g
ICAgICAgICAgICAgIGFzeW5jX3Rlc3QoKHQpID0+IHNldFRpbWVvdXQodC5kb25lLmJpbmQodCks
IDApLCAnYWZ0ZXInKTsKKyAgICAgICAgICAgICAgYXN5bmNfdGVzdCgodCkgPT4geyBzZXRUaW1l
b3V0KHQuZG9uZS5iaW5kKHQpLCAwKTsgfSwgJ2FmdGVyJyk7CiAgICAgICAgICAgICAgIHQuZG9u
ZSgpOwogICAgICAgICAgICAgfSk7CiAgICAgICAgICAgfSwgJ2R1cmluZycpOwpAQCAtMjYxLDEw
ICsyNjEsMTAgQEAgaWYgKCdvbnVuaGFuZGxlZHJlamVjdGlvbicgaW4gd2luZG93KSB7CiAgICAg
cmV0dXJuIG1ha2VUZXN0KAogICAgICAgICAoKSA9PiB7CiAgICAgICAgICAgc2V0dXAoeyBleHBs
aWNpdF9kb25lOiB0cnVlIH0pOwotICAgICAgICAgIGFzeW5jX3Rlc3QoKHQpID0+IHNldFRpbWVv
dXQodC5kb25lLmJpbmQodCksIDApLCAnYmVmb3JlJyk7CisgICAgICAgICAgYXN5bmNfdGVzdCgo
dCkgPT4geyBzZXRUaW1lb3V0KHQuZG9uZS5iaW5kKHQpLCAwKTsgfSwgJ2JlZm9yZScpOwogICAg
ICAgICAgIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcigndGhpcyBlcnJvciBpcyBleHBlY3RlZCcp
KTsKICAgICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigndW5oYW5kbGVkcmVqZWN0aW9u
JywgKCkgPT4gewotICAgICAgICAgICAgYXN5bmNfdGVzdCgodCkgPT4gc2V0VGltZW91dCh0LmRv
bmUuYmluZCh0KSwgMCksICdhZnRlcicpOworICAgICAgICAgICAgYXN5bmNfdGVzdCgodCkgPT4g
eyBzZXRUaW1lb3V0KHQuZG9uZS5iaW5kKHQpLCAwKTsgfSwgJ2FmdGVyJyk7CiAgICAgICAgICAg
ICBkb25lKCk7CiAgICAgICAgICAgfSk7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL0xheW91dFRl
c3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMv
dW5pdC90ZXN0LXJldHVybi1yZXN0cmljdGlvbnMuaHRtbCBiL0xheW91dFRlc3RzL2ltcG9ydGVk
L3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvdW5pdC90ZXN0LXJl
dHVybi1yZXN0cmljdGlvbnMuaHRtbAppbmRleCBiODQ2ZDRkYzQzMDBhOTkwZWRmN2E5MDVmMzAx
ZGNhZjc1YmVlMThjLi4wMjk1YzUyMTRkYzIyYmViYTk3OTFjYWY4Y2RmZmM4NjllMDdmMWQ4IDEw
MDY0NAotLS0gYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jl
c291cmNlcy90ZXN0L3Rlc3RzL3VuaXQvdGVzdC1yZXR1cm4tcmVzdHJpY3Rpb25zLmh0bWwKKysr
IGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMv
dGVzdC90ZXN0cy91bml0L3Rlc3QtcmV0dXJuLXJlc3RyaWN0aW9ucy5odG1sCkBAIC04MSw3ICs4
MSw3IEBAIHByb21pc2VfdGVzdCgoKSA9PiB7CiAgICAgICBhc3NlcnRfZXF1YWxzKGhhcm5lc3Mu
c3RhdHVzLCAnRVJST1InKTsKICAgICAgIGFzc2VydF9lcXVhbHMoCiAgICAgICAgIGhhcm5lc3Mu
bWVzc2FnZSwKLSAgICAgICAgJ1Rlc3QgbmFtZWQgIm51bGwiIGluYXBwcm9wcmlhdGVseSByZXR1
cm5lZCBhIHZhbHVlJworICAgICAgICAnVGVzdCBuYW1lZCAibnVsbCIgcGFzc2VkIGEgZnVuY3Rp
b24gdG8gYHRlc3RgIHRoYXQgcmV0dXJuZWQgYSB2YWx1ZS4nCiAgICAgICApOwogICAgICAgYXNz
ZXJ0X2VxdWFscyh0ZXN0cy5iZWZvcmUsICdQQVNTJyk7CiAgICAgICBhc3NlcnRfZXF1YWxzKHRl
c3RzLm51bGwsICdQQVNTJyk7CkBAIC0xMDAsNyArMTAwLDcgQEAgcHJvbWlzZV90ZXN0KCgpID0+
IHsKICAgICAgIGFzc2VydF9lcXVhbHMoaGFybmVzcy5zdGF0dXMsICdFUlJPUicpOwogICAgICAg
YXNzZXJ0X2VxdWFscygKICAgICAgICAgaGFybmVzcy5tZXNzYWdlLAotICAgICAgICAnVGVzdCBu
YW1lZCAib2JqZWN0IiBpbmFwcHJvcHJpYXRlbHkgcmV0dXJuZWQgYSB2YWx1ZScKKyAgICAgICAg
J1Rlc3QgbmFtZWQgIm9iamVjdCIgcGFzc2VkIGEgZnVuY3Rpb24gdG8gYHRlc3RgIHRoYXQgcmV0
dXJuZWQgYSB2YWx1ZS4nCiAgICAgICApOwogICAgICAgYXNzZXJ0X2VxdWFscyh0ZXN0cy5iZWZv
cmUsICdQQVNTJyk7CiAgICAgICBhc3NlcnRfZXF1YWxzKHRlc3RzLm9iamVjdCwgJ1BBU1MnKTsK
QEAgLTExMiwxNCArMTEyLDE1IEBAIHByb21pc2VfdGVzdCgoKSA9PiB7CiAgIHJldHVybiBtYWtl
VGVzdCgKICAgICAgICgpID0+IHsKICAgICAgICAgdGVzdCgoKSA9PiB1bmRlZmluZWQsICdiZWZv
cmUnKTsKLSAgICAgICAgdGVzdCgoKSA9PiAoeyB0aGVuKCkge30gfSksICd0aGVuYWJsZScpOwor
ICAgICAgICB0ZXN0KCgpID0+IFByb21pc2UucmVzb2x2ZSg1KSwgJ3RoZW5hYmxlJyk7CiAgICAg
ICAgIHRlc3QoKCkgPT4gdW5kZWZpbmVkLCAnYWZ0ZXInKTsKICAgICAgIH0KICAgICApLnRoZW4o
KHtoYXJuZXNzLCB0ZXN0c30pID0+IHsKICAgICAgIGFzc2VydF9lcXVhbHMoaGFybmVzcy5zdGF0
dXMsICdFUlJPUicpOwogICAgICAgYXNzZXJ0X2VxdWFscygKICAgICAgICAgaGFybmVzcy5tZXNz
YWdlLAotICAgICAgICAnVGVzdCBuYW1lZCAidGhlbmFibGUiIGluYXBwcm9wcmlhdGVseSByZXR1
cm5lZCBhIHZhbHVlLCBjb25zaWRlciB1c2luZyBgcHJvbWlzZV90ZXN0YCBpbnN0ZWFkJworICAg
ICAgICAnVGVzdCBuYW1lZCAidGhlbmFibGUiIHBhc3NlZCBhIGZ1bmN0aW9uIHRvIGB0ZXN0YCB0
aGF0IHJldHVybmVkIGEgdmFsdWUuICcgKworICAgICAgICAnQ29uc2lkZXIgdXNpbmcgYHByb21p
c2VfdGVzdGAgaW5zdGVhZCB3aGVuIHVzaW5nIFByb21pc2VzIG9yIGFzeW5jL2F3YWl0LicKICAg
ICAgICk7CiAgICAgICBhc3NlcnRfZXF1YWxzKHRlc3RzLmJlZm9yZSwgJ1BBU1MnKTsKICAgICAg
IGFzc2VydF9lcXVhbHModGVzdHMudGhlbmFibGUsICdQQVNTJyk7CkBAIC0xNDMsNyArMTQ0LDcg
QEAgcHJvbWlzZV90ZXN0KCgpID0+IHsKICAgICAgIGFzc2VydF9lcXVhbHMoaGFybmVzcy5zdGF0
dXMsICdFUlJPUicpOwogICAgICAgYXNzZXJ0X2VxdWFscygKICAgICAgICAgaGFybmVzcy5tZXNz
YWdlLAotICAgICAgICAnVGVzdCBuYW1lZCAicmVzdHJpY3RlZCIgaW5hcHByb3ByaWF0ZWx5IHJl
dHVybmVkIGEgdmFsdWUnCisgICAgICAgICdUZXN0IG5hbWVkICJyZXN0cmljdGVkIiBwYXNzZWQg
YSBmdW5jdGlvbiB0byBgdGVzdGAgdGhhdCByZXR1cm5lZCBhIHZhbHVlLicKICAgICAgICk7CiAg
ICAgICBhc3NlcnRfZXF1YWxzKHRlc3RzLmJlZm9yZSwgJ1BBU1MnKTsKICAgICAgIGFzc2VydF9l
cXVhbHModGVzdHMucmVzdHJpY3RlZCwgJ1BBU1MnKTsKZGlmZiAtLWdpdCBhL0xheW91dFRlc3Rz
L2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvdW5p
dC93M2MtaW1wb3J0LmxvZyBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0t
dGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvdW5pdC93M2MtaW1wb3J0LmxvZwppbmRleCA2YjIy
NDcxMTI0MTEwNDAzOGI1OTgyZWY3YjA0ZWIxZDEzYzg0M2U0Li5iN2I0NDI5OTdkNDZiNDEyOWY4
ZjBiOTYyY2IwYzZkYzhjZDRiY2EwIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93
M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL3VuaXQvdzNjLWltcG9y
dC5sb2cKKysrIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9y
ZXNvdXJjZXMvdGVzdC90ZXN0cy91bml0L3czYy1pbXBvcnQubG9nCkBAIC0xNyw2ICsxNyw3IEBA
IExpc3Qgb2YgZmlsZXM6CiAvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10
ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy91bml0L2Fzc2VydF9pbXBsZW1lbnRzLmh0bWwKIC9M
YXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0
L3Rlc3RzL3VuaXQvYXNzZXJ0X2ltcGxlbWVudHNfb3B0aW9uYWwuaHRtbAogL0xheW91dFRlc3Rz
L2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvdW5p
dC9hc3NlcnRfb2JqZWN0X2VxdWFscy5odG1sCisvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dl
Yi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy91bml0L2FzeW5jLXRlc3QtcmV0
dXJuLXJlc3RyaWN0aW9ucy5odG1sCiAvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0
Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy91bml0L2Jhc2ljLmh0bWwKIC9MYXlvdXRU
ZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3Rz
L3VuaXQvZXhjZXB0aW9uYWwtY2FzZXMtdGltZW91dHMuaHRtbAogL0xheW91dFRlc3RzL2ltcG9y
dGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvdW5pdC9leGNl
cHRpb25hbC1jYXNlcy5odG1sCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mv
d2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3RveC5pbmkgYi9MYXlvdXRUZXN0cy9p
bXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3RveC5pbmkKaW5k
ZXggYTdhMDJlNGI5M2JkYzAwOWVmMGIwNWNiYzAzOWMzOTc3ZmNkZDQ2ZS4uMjY2YTZlODk1MmUw
NGQ5MDEyMDY0ODM2MTRiZGE5MDk3OTMzYmI4ZSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvaW1w
b3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90b3guaW5pCisrKyBi
L0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rl
c3QvdG94LmluaQpAQCAtMSw2ICsxLDUgQEAKIFt0b3hdCi0jIE5vdGUgdGhhdCBvbmx5IHB5Mjcg
aXMgcnVuIGluIENJLgotZW52bGlzdCA9IHB5MjcscHkzNgorZW52bGlzdCA9IHB5MjcscHkzNixw
eTM4CiBza2lwc2Rpc3Q9VHJ1ZQogCiBbdGVzdGVudl0KQEAgLTgsNyArNyw3IEBAIHBhc3NlbnY9
RElTUExBWSAjIE5lY2Vzc2FyeSBmb3IgdGhlIHNwYXduZWQgR2Vja29Ecml2ZXIgcHJvY2VzcyB0
byBjb25uZWN0IHRvCiAgICAgICAgICAgICAgICAgIyB0aGUgYXBwcm9wcmlhdGUgZGlzcGxheS4K
IGRlcHMgPQogICBodG1sNWxpYgotICBweXRlc3Q+PTIuOQorICBweXRlc3Q+PTIuOSw8NiAjIHBp
bm5lZCB0byA8NiBkdWUgdG8gaHR0cHM6Ly9naXRodWIuY29tL3dlYi1wbGF0Zm9ybS10ZXN0cy93
cHQvaXNzdWVzLzI2MTMyCiAgIHB5dmlydHVhbGRpc3BsYXkKICAgc2l4CiAgIHJlcXVlc3RzCmRp
ZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jl
c291cmNlcy90ZXN0L3dwdHNlcnZlci5weSBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWIt
cGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3Qvd3B0c2VydmVyLnB5CmluZGV4IGQ0N2UzMjVm
YmVmNjRhNDI1YmE5MWYyMWE0OWE2ZDI3ZTAzYTdlM2IuLmE1MDRhNzZhNDZlMDBkYjhmOWJiNGEx
OWRjOWRjYTU4ZWMxYzgzMTQgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93
ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3Qvd3B0c2VydmVyLnB5CisrKyBiL0xheW91
dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3Qvd3B0
c2VydmVyLnB5CkBAIC0yNCw2ICsyNCw4IEBAIGNsYXNzIFdQVFNlcnZlcihvYmplY3QpOgogICAg
IGRlZiBzdGFydChzZWxmKToKICAgICAgICAgc2VsZi5kZXZudWxsID0gb3Blbihvcy5kZXZudWxs
LCAndycpCiAgICAgICAgIHdwdHNlcnZlX2NtZCA9IFtvcy5wYXRoLmpvaW4oc2VsZi53cHRfcm9v
dCwgJ3dwdCcpLCAnc2VydmUnXQorICAgICAgICBpZiBzeXMuZXhlY3V0YWJsZToKKyAgICAgICAg
ICAgIHdwdHNlcnZlX2NtZFswOjBdID0gW3N5cy5leGVjdXRhYmxlXQogICAgICAgICBsb2dnaW5n
LmluZm8oJ0V4ZWN1dGluZyAlcycgJSAnICcuam9pbih3cHRzZXJ2ZV9jbWQpKQogICAgICAgICBz
ZWxmLnByb2MgPSBzdWJwcm9jZXNzLlBvcGVuKAogICAgICAgICAgICAgd3B0c2VydmVfY21kLApk
aWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9y
ZXNvdXJjZXMvdGVzdGRyaXZlci1hY3Rpb25zLmpzIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNj
L3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdGRyaXZlci1hY3Rpb25zLmpzCmluZGV4
IDg3MGEyZThlMjY2NzgwODVmODBjMDMwZDQzNmRkMTM2ODZmYjliMGIuLmYzZTYzODhlOGFjZDE5
OThkODk3NTAxNTBlMDc3OWRmMzI3YTU0MTcgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2ltcG9y
dGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3Rkcml2ZXItYWN0aW9ucy5q
cworKysgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291
cmNlcy90ZXN0ZHJpdmVyLWFjdGlvbnMuanMKQEAgLTksNiArOSw3IEBACiAgIGZ1bmN0aW9uIEFj
dGlvbnMoZGVmYXVsdFRpY2tEdXJhdGlvbj0xNikgewogICAgIHRoaXMuc291cmNlVHlwZXMgPSBu
ZXcgTWFwKFtbImtleSIsIEtleVNvdXJjZV0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFsicG9pbnRlciIsIFBvaW50ZXJTb3VyY2VdLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBbIndoZWVsIiwgV2hlZWxTb3VyY2VdLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBbIm5vbmUiLCBHZW5lcmFsU291cmNlXV0pOwogICAgIHRoaXMuc291cmNlcyA9IG5l
dyBNYXAoKTsKICAgICB0aGlzLnNvdXJjZU9yZGVyID0gW107CkBAIC0yMiw2ICsyMyw3IEBACiAg
ICAgdGhpcy5jcmVhdGVTb3VyY2UoIm5vbmUiKTsKICAgICB0aGlzLnRpY2tJZHggPSAwOwogICAg
IHRoaXMuZGVmYXVsdFRpY2tEdXJhdGlvbiA9IGRlZmF1bHRUaWNrRHVyYXRpb247CisgICAgdGhp
cy5jb250ZXh0ID0gbnVsbDsKICAgfQogCiAgIEFjdGlvbnMucHJvdG90eXBlID0gewpAQCAtNjUs
NyArNjcsMTcgQEAKICAgICAgIH0gY2F0Y2goZSkgewogICAgICAgICByZXR1cm4gUHJvbWlzZS5y
ZWplY3QoZSk7CiAgICAgICB9Ci0gICAgICByZXR1cm4gdGVzdF9kcml2ZXIuYWN0aW9uX3NlcXVl
bmNlKGFjdGlvbnMpOworICAgICAgcmV0dXJuIHRlc3RfZHJpdmVyLmFjdGlvbl9zZXF1ZW5jZShh
Y3Rpb25zLCB0aGlzLmNvbnRleHQpOworICAgIH0sCisKKyAgICAvKioKKyAgICAgKiBTZXQgdGhl
IGNvbnRleHQgZm9yIHRoZSBhY3Rpb25zCisgICAgICoKKyAgICAgKiBAcGFyYW0ge1dpbmRvd1By
b3h5fSBjb250ZXh0IC0gQ29udGV4dCBpbiB3aGljaCB0byBydW4gdGhlIGFjdGlvbiBzZXF1ZW5j
ZQorICAgICAqLworICAgIHNldENvbnRleHQ6IGZ1bmN0aW9uKGNvbnRleHQpIHsKKyAgICAgIHRo
aXMuY29udGV4dCA9IGNvbnRleHQ7CisgICAgICByZXR1cm4gdGhpczsKICAgICB9LAogCiAgICAg
LyoqCkBAIC03Myw3ICs4NSw3IEBACiAgICAgICogSWYgbm8gbmFtZSBpcyBwYXNzZWQsIGEgbmV3
IHNvdXJjZSB3aXRoIHRoZSBnaXZlbiB0eXBlIGlzCiAgICAgICogY3JlYXRlZC4KICAgICAgKgot
ICAgICAqIEBwYXJhbSB7U3RyaW5nfSB0eXBlIC0gU291cmNlIHR5cGUgKCdub25lJywgJ2tleScs
IG9yICdwb2ludGVyJykKKyAgICAgKiBAcGFyYW0ge1N0cmluZ30gdHlwZSAtIFNvdXJjZSB0eXBl
ICgnbm9uZScsICdrZXknLCAncG9pbnRlcicsIG9yICd3aGVlbCcpCiAgICAgICogQHBhcmFtIHtT
dHJpbmc/fSBuYW1lIC0gTmFtZSBvZiB0aGUgc291cmNlCiAgICAgICogQHJldHVybnMge1NvdXJj
ZX0gU291cmNlIG9iamVjdCBmb3IgdGhhdCBzb3VyY2UuCiAgICAgICovCkBAIC0xNTQsNiArMTY2
LDMyIEBACiAgICAgICByZXR1cm4gdGhpczsKICAgICB9LAogCisgICAgLyoqCisgICAgICogQWRk
IGEgbmV3IHdoZWVsIGlucHV0IHNvdXJjZSB3aXRoIHRoZSBnaXZlbiBuYW1lCisgICAgICoKKyAg
ICAgKiBAcGFyYW0ge1N0cmluZ30gdHlwZSAtIE5hbWUgb2YgdGhlIHdoZWVsIHNvdXJjZQorICAg
ICAqIEBwYXJhbSB7Qm9vbH0gc2V0IC0gU2V0IHNvdXJjZSBhcyB0aGUgZGVmYXVsdCB3aGVlbCBz
b3VyY2UKKyAgICAgKiBAcmV0dXJucyB7QWN0aW9uc30KKyAgICAgKi8KKyAgICBhZGRXaGVlbDog
ZnVuY3Rpb24obmFtZSwgc2V0PXRydWUpIHsKKyAgICAgIHRoaXMuY3JlYXRlU291cmNlKCJ3aGVl
bCIsIG5hbWUpOworICAgICAgaWYgKHNldCkgeworICAgICAgICB0aGlzLnNldFdoZWVsKG5hbWUp
OworICAgICAgfQorICAgICAgcmV0dXJuIHRoaXM7CisgICAgfSwKKworICAgIC8qKgorICAgICAq
IFNldCB0aGUgY3VycmVudCBkZWZhdWx0IHdoZWVsIHNvdXJjZQorICAgICAqCisgICAgICogQHBh
cmFtIHtTdHJpbmd9IG5hbWUgLSBOYW1lIG9mIHRoZSB3aGVlbCBzb3VyY2UKKyAgICAgKiBAcmV0
dXJucyB7QWN0aW9uc30KKyAgICAgKi8KKyAgICBzZXRXaGVlbDogZnVuY3Rpb24obmFtZSkgewor
ICAgICAgdGhpcy5zZXRTb3VyY2UoIndoZWVsIiwgbmFtZSk7CisgICAgICByZXR1cm4gdGhpczsK
KyAgICB9LAorCiAgICAgY3JlYXRlU291cmNlOiBmdW5jdGlvbih0eXBlLCBuYW1lLCBwYXJhbWV0
ZXJzPXt9KSB7CiAgICAgICBpZiAoIXRoaXMuc291cmNlcy5oYXModHlwZSkpIHsKICAgICAgICAg
dGhyb3cgbmV3IEVycm9yKGAke3R5cGV9IGlzIG5vdCBhIHZhbGlkIGFjdGlvbiB0eXBlYCk7CkBA
IC0xOTYsOCArMjM0LDkgQEAKICAgICAgKgogICAgICAqIEBwYXJhbSB7TnVtYmVyP30gZHVyYXRp
b24gLSBNaW5pbXVtIGxlbmd0aCBvZiB0aGUgdGljayBpbiBtcy4KICAgICAgKiBAcGFyYW0ge1N0
cmluZ30gc291cmNlVHlwZSAtIHNvdXJjZSB0eXBlCi0gICAgICogQHBhcmFtIHtTdHJpbmc/fSBz
b3VyY2VOYW1lIC0gTmFtZWQga2V5IG9yIHBvaW50ZXIgc291cmNlIHRvIHVzZSBvciBudWxsIGZv
ciB0aGUgZGVmYXVsdAotICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleSBv
ciBwb2ludGVyIHNvdXJjZQorICAgICAqIEBwYXJhbSB7U3RyaW5nP30gc291cmNlTmFtZSAtIE5h
bWVkIGtleSwgcG9pbnRlciBvciB3aGVlbCBzb3VyY2UgdG8gdXNlCisgICAgICogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgb3IgbnVsbCBmb3IgdGhlIGRlZmF1bHQga2V5LCBwb2ludGVy
IG9yCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hlZWwgc291cmNlCiAg
ICAgICogQHJldHVybnMge0FjdGlvbnN9CiAgICAgICovCiAgICAgcGF1c2U6IGZ1bmN0aW9uKGR1
cmF0aW9uPTAsIHNvdXJjZVR5cGU9Im5vbmUiLCB7c291cmNlTmFtZT1udWxsfT17fSkgewpAQCAt
MjgwLDYgKzMxOSwyNyBAQAogICAgICAgc291cmNlLnBvaW50ZXJNb3ZlKHRoaXMsIHgsIHksIGR1
cmF0aW9uLCBvcmlnaW4pOwogICAgICAgcmV0dXJuIHRoaXM7CiAgICAgfSwKKworICAgIC8qKgor
ICAgICAqIENyZWF0ZSBhIHNjcm9sbCBldmVudCBmb3IgdGhlIGN1cnJlbnQgZGVmYXVsdCB3aGVl
bCBzb3VyY2UKKyAgICAgKgorICAgICAqIEBwYXJhbSB7TnVtYmVyfSB4IC0gbW91c2UgY3Vyc29y
IHggY29vcmRpbmF0ZQorICAgICAqIEBwYXJhbSB7TnVtYmVyfSB5IC0gbW91c2UgY3Vyc29yIHkg
Y29vcmRpbmF0ZQorICAgICAqIEBwYXJhbSB7TnVtYmVyfSBkZWx0YVggLSBzY3JvbGwgZGVsdGEg
dmFsdWUgYWxvbmcgdGhlIHgtYXhpcyBpbiBwaXhlbHMKKyAgICAgKiBAcGFyYW0ge051bWJlcn0g
ZGVsdGFZIC0gc2Nyb2xsIGRlbHRhIHZhbHVlIGFsb25nIHRoZSB5LWF4aXMgaW4gcGl4ZWxzCisg
ICAgICogQHBhcmFtIHtTdHJpbmd8RWxlbWVudH0gb3JpZ2luIC0gT3JpZ2luIG9mIHRoZSBjb29y
ZGluYXRlIHN5c3RlbS4KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBF
aXRoZXIgInZpZXdwb3J0IiBvciBhbiBFbGVtZW50CisgICAgICogQHBhcmFtIHtOdW1iZXI/fSBk
dXJhdGlvbiAtIFRpbWUgaW4gbXMgZm9yIHRoZSBzY3JvbGwKKyAgICAgKiBAcGFyYW0ge1N0cmlu
Zz99IHNvdXJjZU5hbWUgLSBOYW1lZCB3aGVlbCBzb3VyY2UgdG8gdXNlIG9yIG51bGwgZm9yIHRo
ZQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQgd2hlZWwgc291
cmNlCisgICAgICogQHJldHVybnMge0FjdGlvbnN9CisgICAgICovCisgICAgc2Nyb2xsOiBmdW5j
dGlvbih4LCB5LCBkZWx0YVgsIGRlbHRhWSwKKyAgICAgICAgICAgICAgICAgICAgIHtvcmlnaW49
InZpZXdwb3J0IiwgZHVyYXRpb24sIHNvdXJjZU5hbWU9bnVsbH09e30pIHsKKyAgICAgIGxldCBz
b3VyY2UgPSB0aGlzLmdldFNvdXJjZSgid2hlZWwiLCBzb3VyY2VOYW1lKTsKKyAgICAgIHNvdXJj
ZS5zY3JvbGwodGhpcywgeCwgeSwgZGVsdGFYLCBkZWx0YVksIGR1cmF0aW9uLCBvcmlnaW4pOwor
ICAgICAgcmV0dXJuIHRoaXM7CisgICAgfSwKICAgfTsKIAogICBmdW5jdGlvbiBHZW5lcmFsU291
cmNlKCkgewpAQCAtNDE3LDUgKzQ3Nyw0NiBAQAogICAgIH0sCiAgIH07CiAKKyAgZnVuY3Rpb24g
V2hlZWxTb3VyY2UoKSB7CisgICAgdGhpcy5hY3Rpb25zID0gbmV3IE1hcCgpOworICB9CisKKyAg
V2hlZWxTb3VyY2UucHJvdG90eXBlID0geworICAgIHNlcmlhbGl6ZTogZnVuY3Rpb24odGlja0Nv
dW50KSB7CisgICAgICBpZiAoIXRoaXMuYWN0aW9ucy5zaXplKSB7CisgICAgICAgIHJldHVybiB1
bmRlZmluZWQ7CisgICAgICB9CisgICAgICBsZXQgYWN0aW9ucyA9IFtdOworICAgICAgbGV0IGRh
dGEgPSB7InR5cGUiOiAid2hlZWwiLCAiYWN0aW9ucyI6IGFjdGlvbnN9OworICAgICAgZm9yIChs
ZXQgaT0wOyBpPHRpY2tDb3VudDsgaSsrKSB7CisgICAgICAgIGlmICh0aGlzLmFjdGlvbnMuaGFz
KGkpKSB7CisgICAgICAgICAgYWN0aW9ucy5wdXNoKHRoaXMuYWN0aW9ucy5nZXQoaSkpOworICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgIGFjdGlvbnMucHVzaCh7InR5cGUiOiAicGF1c2UifSk7
CisgICAgICAgIH0KKyAgICAgIH0KKyAgICAgIHJldHVybiBkYXRhOworICAgIH0sCisKKyAgICBz
Y3JvbGw6IGZ1bmN0aW9uKGFjdGlvbnMsIHgsIHksIGRlbHRhWCwgZGVsdGFZLCBkdXJhdGlvbiwg
b3JpZ2luKSB7CisgICAgICBsZXQgdGljayA9IGFjdGlvbnMudGlja0lkeDsKKyAgICAgIGlmICh0
aGlzLmFjdGlvbnMuaGFzKHRpY2spKSB7CisgICAgICAgIHRpY2sgPSBhY3Rpb25zLmFkZFRpY2so
KS50aWNrSWR4OworICAgICAgfQorICAgICAgdGhpcy5hY3Rpb25zLnNldCh0aWNrLCB7dHlwZTog
InNjcm9sbCIsIHgsIHksIGRlbHRhWCwgZGVsdGFZLCBvcmlnaW59KTsKKyAgICAgIGlmIChkdXJh
dGlvbikgeworICAgICAgICB0aGlzLmFjdGlvbnMuZ2V0KHRpY2spLmR1cmF0aW9uID0gZHVyYXRp
b247CisgICAgICB9CisgICAgfSwKKworICAgIGFkZFBhdXNlOiBmdW5jdGlvbihhY3Rpb25zLCBk
dXJhdGlvbikgeworICAgICAgbGV0IHRpY2sgPSBhY3Rpb25zLnRpY2tJZHg7CisgICAgICBpZiAo
dGhpcy5hY3Rpb25zLmhhcyh0aWNrKSkgeworICAgICAgICB0aWNrID0gYWN0aW9ucy5hZGRUaWNr
KCkudGlja0lkeDsKKyAgICAgIH0KKyAgICAgIHRoaXMuYWN0aW9ucy5zZXQodGljaywge3R5cGU6
ICJwYXVzZSIsIGR1cmF0aW9uOiBkdXJhdGlvbn0pOworICAgIH0sCisgIH07CisKICAgdGVzdF9k
cml2ZXIuQWN0aW9ucyA9IEFjdGlvbnM7CiB9KSgpOwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMv
aW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdGRyaXZlci5qcyBi
L0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rl
c3Rkcml2ZXIuanMKaW5kZXggYTg1ODhiNDRmOTRjNzhmMGEzYzI1NDIzODViY2UyMGNmZDFhNjRj
OS4uYzUzYjI0MTM2YzA5MWYwNWU0ZmZiZTI4NmQwNjBhYmEwZmE2NmNkZiAxMDA2NDQKLS0tIGEv
TGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVz
dGRyaXZlci5qcworKysgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRl
c3RzL3Jlc291cmNlcy90ZXN0ZHJpdmVyLmpzCkBAIC0xLDYgKzEsNyBAQAogKGZ1bmN0aW9uKCkg
ewogICAgICJ1c2Ugc3RyaWN0IjsKICAgICB2YXIgaWRDb3VudGVyID0gMDsKKyAgICBsZXQgdGVz
dGhhcm5lc3NfY29udGV4dCA9IG51bGw7CiAKICAgICBmdW5jdGlvbiBnZXRJblZpZXdDZW50ZXJQ
b2ludChyZWN0KSB7CiAgICAgICAgIHZhciBsZWZ0ID0gTWF0aC5tYXgoMCwgcmVjdC5sZWZ0KTsK
QEAgLTE1LDcgKzE2LDggQEAKICAgICB9CiAKICAgICBmdW5jdGlvbiBnZXRQb2ludGVySW50ZXJh
Y3RhYmxlUGFpbnRUcmVlKGVsZW1lbnQpIHsKLSAgICAgICAgaWYgKCF3aW5kb3cuZG9jdW1lbnQu
Y29udGFpbnMoZWxlbWVudCkpIHsKKyAgICAgICAgbGV0IGVsZW1lbnREb2N1bWVudCA9IGVsZW1l
bnQub3duZXJEb2N1bWVudDsKKyAgICAgICAgaWYgKCFlbGVtZW50RG9jdW1lbnQuY29udGFpbnMo
ZWxlbWVudCkpIHsKICAgICAgICAgICAgIHJldHVybiBbXTsKICAgICAgICAgfQogCkBAIC0yNywx
MCArMjksMTAgQEAKIAogICAgICAgICB2YXIgY2VudGVyUG9pbnQgPSBnZXRJblZpZXdDZW50ZXJQ
b2ludChyZWN0YW5nbGVzWzBdKTsKIAotICAgICAgICBpZiAoImVsZW1lbnRzRnJvbVBvaW50IiBp
biBkb2N1bWVudCkgewotICAgICAgICAgICAgcmV0dXJuIGRvY3VtZW50LmVsZW1lbnRzRnJvbVBv
aW50KGNlbnRlclBvaW50WzBdLCBjZW50ZXJQb2ludFsxXSk7Ci0gICAgICAgIH0gZWxzZSBpZiAo
Im1zRWxlbWVudHNGcm9tUG9pbnQiIGluIGRvY3VtZW50KSB7Ci0gICAgICAgICAgICB2YXIgcnYg
PSBkb2N1bWVudC5tc0VsZW1lbnRzRnJvbVBvaW50KGNlbnRlclBvaW50WzBdLCBjZW50ZXJQb2lu
dFsxXSk7CisgICAgICAgIGlmICgiZWxlbWVudHNGcm9tUG9pbnQiIGluIGVsZW1lbnREb2N1bWVu
dCkgeworICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnREb2N1bWVudC5lbGVtZW50c0Zyb21Qb2lu
dChjZW50ZXJQb2ludFswXSwgY2VudGVyUG9pbnRbMV0pOworICAgICAgICB9IGVsc2UgaWYgKCJt
c0VsZW1lbnRzRnJvbVBvaW50IiBpbiBlbGVtZW50RG9jdW1lbnQpIHsKKyAgICAgICAgICAgIHZh
ciBydiA9IGVsZW1lbnREb2N1bWVudC5tc0VsZW1lbnRzRnJvbVBvaW50KGNlbnRlclBvaW50WzBd
LCBjZW50ZXJQb2ludFsxXSk7CiAgICAgICAgICAgICByZXR1cm4gQXJyYXkucHJvdG90eXBlLnNs
aWNlLmNhbGwocnYgPyBydiA6IFtdKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIHRo
cm93IG5ldyBFcnJvcigiZG9jdW1lbnQuZWxlbWVudHNGcm9tUG9pbnQgdW5zdXBwb3J0ZWQiKTsK
QEAgLTQ3LDYgKzQ5LDMxIEBACiAgICAgICogQG5hbWVzcGFjZQogICAgICAqLwogICAgIHdpbmRv
dy50ZXN0X2RyaXZlciA9IHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIFNldCB0aGUgY29udGV4
dCBpbiB3aGljaCB0ZXN0aGFybmVzcy5qcyBpcyBsb2FkZWQKKyAgICAgICAgICoKKyAgICAgICAg
ICogQHBhcmFtIHtXaW5kb3dQcm94eX0gY29udGV4dCAtIHRoZSB3aW5kb3cgY29udGFpbmluZyB0
ZXN0aGFybmVzcy5qcworICAgICAgICAgKiovCisgICAgICAgIHNldF90ZXN0X2NvbnRleHQ6IGZ1
bmN0aW9uKGNvbnRleHQpIHsKKyAgICAgICAgICBpZiAod2luZG93LnRlc3RfZHJpdmVyX2ludGVy
bmFsLnNldF90ZXN0X2NvbnRleHQpIHsKKyAgICAgICAgICAgIHdpbmRvdy50ZXN0X2RyaXZlcl9p
bnRlcm5hbC5zZXRfdGVzdF9jb250ZXh0KGNvbnRleHQpOworICAgICAgICAgIH0KKyAgICAgICAg
ICB0ZXN0aGFybmVzc19jb250ZXh0ID0gY29udGV4dDsKKyAgICAgICAgfSwKKworICAgICAgICAv
KioKKyAgICAgICAgICogcG9zdE1lc3NhZ2UgdG8gdGhlIGNvbnRleHQgY29udGFpbmluZyB0ZXN0
aGFybmVzcy5qcworICAgICAgICAgKgorICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gbXNnIC0g
dGhlIGRhdGEgdG8gUE9TVAorICAgICAgICAgKiovCisgICAgICAgIG1lc3NhZ2VfdGVzdDogZnVu
Y3Rpb24obXNnKSB7CisgICAgICAgICAgICBsZXQgdGFyZ2V0ID0gdGVzdGhhcm5lc3NfY29udGV4
dDsKKyAgICAgICAgICAgIGlmICh0ZXN0aGFybmVzc19jb250ZXh0ID09PSBudWxsKSB7CisgICAg
ICAgICAgICAgICAgdGFyZ2V0ID0gd2luZG93OworICAgICAgICAgICAgfQorICAgICAgICAgICAg
dGFyZ2V0LnBvc3RNZXNzYWdlKG1zZywgIioiKTsKKyAgICAgICAgfSwKKwogICAgICAgICAvKioK
ICAgICAgICAgICogVHJpZ2dlciB1c2VyIGludGVyYWN0aW9uIGluIG9yZGVyIHRvIGdyYW50IGFk
ZGl0aW9uYWwgcHJpdmlsZWdlcyB0bwogICAgICAgICAgKiBhIHByb3ZpZGVkIGZ1bmN0aW9uLgpA
QCAtNTYsMzAgKzgzLDM1IEBACiAgICAgICAgICAqIEBwYXJhbSB7U3RyaW5nfSBpbnRlbnQgLSBh
IGRlc2NyaXB0aW9uIG9mIHRoZSBhY3Rpb24gd2hpY2ggbXVjaCBiZQogICAgICAgICAgKiAgICAg
ICAgICAgICAgICAgICAgICAgICAgdHJpZ2dlcmVkIGJ5IHVzZXIgaW50ZXJhY3Rpb24KICAgICAg
ICAgICogQHBhcmFtIHtGdW5jdGlvbn0gYWN0aW9uIC0gY29kZSByZXF1aXJpbmcgZXNjYWxhdGVk
IHByaXZpbGVnZXMKKyAgICAgICAgICogQHBhcmFtIHtXaW5kb3dQcm94eX0gY29udGV4dCAtIEJy
b3dzaW5nIGNvbnRleHQgaW4gd2hpY2gKKyAgICAgICAgICogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHRvIHJ1biB0aGUgY2FsbCwgb3IgbnVsbCBmb3IgdGhlIGN1cnJlbnQKKyAgICAg
ICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyb3dzaW5nIGNvbnRleHQuCiAg
ICAgICAgICAqCiAgICAgICAgICAqIEByZXR1cm5zIHtQcm9taXNlfSBmdWxmaWxsZWQgZm9sbG93
aW5nIHVzZXIgaW50ZXJhY3Rpb24gYW5kCiAgICAgICAgICAqICAgICAgICAgICAgICAgICAgICBl
eGVjdXRpb24gb2YgdGhlIHByb3ZpZGVkIGBhY3Rpb25gIGZ1bmN0aW9uOwogICAgICAgICAgKiAg
ICAgICAgICAgICAgICAgICAgcmVqZWN0ZWQgaWYgaW50ZXJhY3Rpb24gZmFpbHMgb3IgdGhlIHBy
b3ZpZGVkCiAgICAgICAgICAqICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiB0aHJvd3MgYW4g
ZXJyb3IKICAgICAgICAgICovCi0gICAgICAgIGJsZXNzOiBmdW5jdGlvbihpbnRlbnQsIGFjdGlv
bikgewotICAgICAgICAgICAgdmFyIGJ1dHRvbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImJ1
dHRvbiIpOworICAgICAgICBibGVzczogZnVuY3Rpb24oaW50ZW50LCBhY3Rpb24sIGNvbnRleHQ9
bnVsbCkgeworICAgICAgICAgICAgbGV0IGNvbnRleHREb2N1bWVudCA9IGNvbnRleHQgPyBjb250
ZXh0LmRvY3VtZW50IDogZG9jdW1lbnQ7CisgICAgICAgICAgICB2YXIgYnV0dG9uID0gY29udGV4
dERvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImJ1dHRvbiIpOwogICAgICAgICAgICAgYnV0dG9uLmlu
bmVySFRNTCA9ICJUaGlzIHRlc3QgcmVxdWlyZXMgdXNlciBpbnRlcmFjdGlvbi48YnIgLz4iICsK
ICAgICAgICAgICAgICAgICAiUGxlYXNlIGNsaWNrIGhlcmUgdG8gYWxsb3cgIiArIGludGVudCAr
ICIuIjsKICAgICAgICAgICAgIGJ1dHRvbi5pZCA9ICJ3cHQtdGVzdC1kcml2ZXItYmxlc3MtIiAr
IChpZENvdW50ZXIgKz0gMSk7Ci0gICAgICAgICAgICBjb25zdCBlbGVtID0gZG9jdW1lbnQuYm9k
eSB8fCBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7CisgICAgICAgICAgICBjb25zdCBlbGVtID0g
Y29udGV4dERvY3VtZW50LmJvZHkgfHwgY29udGV4dERvY3VtZW50LmRvY3VtZW50RWxlbWVudDsK
ICAgICAgICAgICAgIGVsZW0uYXBwZW5kQ2hpbGQoYnV0dG9uKTsKIAotICAgICAgICAgICAgcmV0
dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkgewotICAgICAgICAgICAg
ICAgICAgICBidXR0b24uYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCByZXNvbHZlKTsKKyAgICAg
ICAgICAgIGxldCB3YWl0X2NsaWNrID0gbmV3IFByb21pc2UocmVzb2x2ZSA9PiBidXR0b24uYWRk
RXZlbnRMaXN0ZW5lcigiY2xpY2siLCByZXNvbHZlKSk7CiAKLSAgICAgICAgICAgICAgICAgICAg
dGVzdF9kcml2ZXIuY2xpY2soYnV0dG9uKS5jYXRjaChyZWplY3QpOwotICAgICAgICAgICAgICAg
IH0pLnRoZW4oZnVuY3Rpb24oKSB7CisgICAgICAgICAgICByZXR1cm4gdGVzdF9kcml2ZXIuY2xp
Y2soYnV0dG9uKQorICAgICAgICAgICAgICAgIC50aGVuKHdhaXRfY2xpY2spCisgICAgICAgICAg
ICAgICAgLnRoZW4oZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgIGJ1dHRvbi5yZW1v
dmUoKTsKIAogICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGFjdGlvbiA9PT0gImZ1bmN0
aW9uIikgewogICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGFjdGlvbigpOwogICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAg
ICAgICAgICAgIH0pOwogICAgICAgICB9LAogCkBAIC05NSwxNCArMTI3LDYgQEAKICAgICAgICAg
ICogICAgICAgICAgICAgICAgICAgIHRoZSBjYXNlcyB0aGUgV2ViRHJpdmVyIGNvbW1hbmQgZXJy
b3JzCiAgICAgICAgICAqLwogICAgICAgICBjbGljazogZnVuY3Rpb24oZWxlbWVudCkgewotICAg
ICAgICAgICAgaWYgKHdpbmRvdy50b3AgIT09IHdpbmRvdykgewotICAgICAgICAgICAgICAgIHJl
dHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoImNhbiBvbmx5IGNsaWNrIGluIHRvcC1sZXZl
bCB3aW5kb3ciKSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmICghd2luZG93LmRv
Y3VtZW50LmNvbnRhaW5zKGVsZW1lbnQpKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIFByb21p
c2UucmVqZWN0KG5ldyBFcnJvcigiZWxlbWVudCBpbiBkaWZmZXJlbnQgZG9jdW1lbnQgb3Igc2hh
ZG93IHRyZWUiKSk7Ci0gICAgICAgICAgICB9Ci0KICAgICAgICAgICAgIGlmICghaW5WaWV3KGVs
ZW1lbnQpKSB7CiAgICAgICAgICAgICAgICAgZWxlbWVudC5zY3JvbGxJbnRvVmlldyh7YmVoYXZp
b3I6ICJpbnN0YW50IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBi
bG9jazogImVuZCIsCkBAIC0xMzUsMTQgKzE1OSw2IEBACiAgICAgICAgICAqICAgICAgICAgICAg
ICAgICAgICB0aGUgY2FzZXMgdGhlIFdlYkRyaXZlciBjb21tYW5kIGVycm9ycwogICAgICAgICAg
Ki8KICAgICAgICAgc2VuZF9rZXlzOiBmdW5jdGlvbihlbGVtZW50LCBrZXlzKSB7Ci0gICAgICAg
ICAgICBpZiAod2luZG93LnRvcCAhPT0gd2luZG93KSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJu
IFByb21pc2UucmVqZWN0KG5ldyBFcnJvcigiY2FuIG9ubHkgc2VuZCBrZXlzIGluIHRvcC1sZXZl
bCB3aW5kb3ciKSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmICghd2luZG93LmRv
Y3VtZW50LmNvbnRhaW5zKGVsZW1lbnQpKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIFByb21p
c2UucmVqZWN0KG5ldyBFcnJvcigiZWxlbWVudCBpbiBkaWZmZXJlbnQgZG9jdW1lbnQgb3Igc2hh
ZG93IHRyZWUiKSk7Ci0gICAgICAgICAgICB9Ci0KICAgICAgICAgICAgIGlmICghaW5WaWV3KGVs
ZW1lbnQpKSB7CiAgICAgICAgICAgICAgICAgZWxlbWVudC5zY3JvbGxJbnRvVmlldyh7YmVoYXZp
b3I6ICJpbnN0YW50IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBi
bG9jazogImVuZCIsCkBAIC0xNjYsMzQgKzE4Miw0MiBAQAogICAgICAgICAgKiBodHRwczovL2dp
dGh1Yi5jb20vV0lDRy9wYWdlLWxpZmVjeWNsZS9ibG9iL21hc3Rlci9SRUFETUUubWR8TGlmZWN5
Y2xlIEFQSQogICAgICAgICAgKiBmb3IgV2ViIFBhZ2VzfQogICAgICAgICAgKgorICAgICAgICAg
KiBAcGFyYW0ge1dpbmRvd1Byb3h5fSBjb250ZXh0IC0gQnJvd3NpbmcgY29udGV4dCBpbiB3aGlj
aAorICAgICAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gcnVuIHRoZSBj
YWxsLCBvciBudWxsIGZvciB0aGUgY3VycmVudAorICAgICAgICAgKiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgYnJvd3NpbmcgY29udGV4dC4KKyAgICAgICAgICoKICAgICAgICAgICog
QHJldHVybnMge1Byb21pc2V9IGZ1bGZpbGxlZCBhZnRlciB0aGUgZnJlZXplIHJlcXVlc3QgaXMg
c2VudCwgb3IgcmVqZWN0ZWQKICAgICAgICAgICogICAgICAgICAgICAgICAgICAgIGluIGNhc2Ug
dGhlIFdlYkRyaXZlciBjb21tYW5kIGVycm9ycwogICAgICAgICAgKi8KLSAgICAgICAgZnJlZXpl
OiBmdW5jdGlvbigpIHsKKyAgICAgICAgZnJlZXplOiBmdW5jdGlvbihjb250ZXh0PW51bGwpIHsK
ICAgICAgICAgICAgIHJldHVybiB3aW5kb3cudGVzdF9kcml2ZXJfaW50ZXJuYWwuZnJlZXplKCk7
CiAgICAgICAgIH0sCiAKICAgICAgICAgLyoqCiAgICAgICAgICAqIFNlbmQgYSBzZXF1ZW5jZSBv
ZiBhY3Rpb25zCiAgICAgICAgICAqCi0gICAgICAgICAqIFRoaXMgZnVuY3Rpb24gc2VuZHMgYSBz
ZXF1ZW5jZSBvZiBhY3Rpb25zIHRvIHRoZSB0b3AgbGV2ZWwgd2luZG93CisgICAgICAgICAqIFRo
aXMgZnVuY3Rpb24gc2VuZHMgYSBzZXF1ZW5jZSBvZiBhY3Rpb25zCiAgICAgICAgICAqIHRvIHBl
cmZvcm0uIEl0IGlzIG1vZGVsZWQgYWZ0ZXIgdGhlIGJlaGF2aW91ciBvZiB7QGxpbmsKICAgICAg
ICAgICogaHR0cHM6Ly93M2MuZ2l0aHViLmlvL3dlYmRyaXZlci8jYWN0aW9uc3xXZWJEcml2ZXIg
QWN0aW9ucyBDb21tYW5kfQogICAgICAgICAgKgogICAgICAgICAgKiBAcGFyYW0ge0FycmF5fSBh
Y3Rpb25zIC0gYW4gYXJyYXkgb2YgYWN0aW9ucy4gVGhlIGZvcm1hdCBpcyB0aGUgc2FtZSBhcyB0
aGUgYWN0aW9ucwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvcGVydHkg
b2YgdGhlIFdlYkRyaXZlciBjb21tYW5kIHtAbGluawotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaHR0cHM6Ly93M2MuZ2l0aHViLmlvL3dlYmRyaXZlci8jcGVyZm9ybS1hY3Rp
b25zfFBlcmZvcm0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFjdGlvbnN9
IGNvbW1hbmQuIEVhY2ggZWxlbWVudCBpcyBhbiBvYmplY3QgcmVwcmVzZW50aW5nIGFuCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dCBzb3VyY2UgYW5kIGVhY2ggaW5w
dXQgc291cmNlIGl0c2VsZiBoYXMgYW4gYWN0aW9ucwotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcHJvcGVydHkgZGV0YWlsaW5nIHRoZSBiZWhhdmlvdXIgb2YgdGhhdCBzb3Vy
Y2UgYXQgZWFjaCB0aW1lc3RlcAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
KG9yIHRpY2spLiBBdXRob3JzIGFyZSBub3QgZXhwZWN0ZWQgdG8gY29uc3RydWN0IHRoZSBhY3Rp
b25zCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXF1ZW5jZSBieSBoYW5k
LCBidXQgdG8gdXNlIHRoZSBidWlsZGVyIGFwaSBwcm92aWRlZCBpbgotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdGVzdGRyaXZlci1hY3Rpb25zLmpzCisgICAgICAgICAqICAg
ICAgICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eSBvZiB0aGUgV2ViRHJpdmVyIGNvbW1hbmQg
e0BsaW5rCisgICAgICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICBodHRwczovL3czYy5n
aXRodWIuaW8vd2ViZHJpdmVyLyNwZXJmb3JtLWFjdGlvbnN8UGVyZm9ybQorICAgICAgICAgKiAg
ICAgICAgICAgICAgICAgICAgICAgICAgQWN0aW9uc30gY29tbWFuZC4gRWFjaCBlbGVtZW50IGlz
IGFuIG9iamVjdCByZXByZXNlbnRpbmcgYW4KKyAgICAgICAgICogICAgICAgICAgICAgICAgICAg
ICAgICAgIGlucHV0IHNvdXJjZSBhbmQgZWFjaCBpbnB1dCBzb3VyY2UgaXRzZWxmIGhhcyBhbiBh
Y3Rpb25zCisgICAgICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eSBkZXRh
aWxpbmcgdGhlIGJlaGF2aW91ciBvZiB0aGF0IHNvdXJjZSBhdCBlYWNoIHRpbWVzdGVwCisgICAg
ICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAob3IgdGljaykuIEF1dGhvcnMgYXJlIG5v
dCBleHBlY3RlZCB0byBjb25zdHJ1Y3QgdGhlIGFjdGlvbnMKKyAgICAgICAgICogICAgICAgICAg
ICAgICAgICAgICAgICAgIHNlcXVlbmNlIGJ5IGhhbmQsIGJ1dCB0byB1c2UgdGhlIGJ1aWxkZXIg
YXBpIHByb3ZpZGVkIGluCisgICAgICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0
ZHJpdmVyLWFjdGlvbnMuanMKKyAgICAgICAgICogQHBhcmFtIHtXaW5kb3dQcm94eX0gY29udGV4
dCAtIEJyb3dzaW5nIGNvbnRleHQgaW4gd2hpY2gKKyAgICAgICAgICogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHRvIHJ1biB0aGUgY2FsbCwgb3IgbnVsbCBmb3IgdGhlIGN1cnJlbnQK
KyAgICAgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyb3dzaW5nIGNvbnRl
eHQuCisgICAgICAgICAqCiAgICAgICAgICAqIEByZXR1cm5zIHtQcm9taXNlfSBmdWZpbGVkIGFm
dGVyIHRoZSBhY3Rpb25zIGFyZSBwZXJmb3JtZWQsIG9yIHJlamVjdGVkIGluCiAgICAgICAgICAq
ICAgICAgICAgICAgICAgICAgICB0aGUgY2FzZXMgdGhlIFdlYkRyaXZlciBjb21tYW5kIGVycm9y
cwogICAgICAgICAgKi8KLSAgICAgICAgYWN0aW9uX3NlcXVlbmNlOiBmdW5jdGlvbihhY3Rpb25z
KSB7Ci0gICAgICAgICAgICByZXR1cm4gd2luZG93LnRlc3RfZHJpdmVyX2ludGVybmFsLmFjdGlv
bl9zZXF1ZW5jZShhY3Rpb25zKTsKKyAgICAgICAgYWN0aW9uX3NlcXVlbmNlOiBmdW5jdGlvbihh
Y3Rpb25zLCBjb250ZXh0PW51bGwpIHsKKyAgICAgICAgICAgIHJldHVybiB3aW5kb3cudGVzdF9k
cml2ZXJfaW50ZXJuYWwuYWN0aW9uX3NlcXVlbmNlKGFjdGlvbnMsIGNvbnRleHQpOwogICAgICAg
ICB9LAogCiAgICAgICAgIC8qKgpAQCAtMjAzLDExICsyMjcsMTUgQEAKICAgICAgICAgICogYnkg
UmVwb3J0aW5nT2JzZXJ2ZXIpIGZvciB0ZXN0aW5nIHB1cnBvc2VzLCBhcyBkZXNjcmliZWQgaW4K
ICAgICAgICAgICoge0BsaW5rIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby9yZXBvcnRpbmcvI2dlbmVy
YXRlLXRlc3QtcmVwb3J0LWNvbW1hbmR9CiAgICAgICAgICAqCisgICAgICAgICAqIEBwYXJhbSB7
V2luZG93UHJveHl9IGNvbnRleHQgLSBCcm93c2luZyBjb250ZXh0IGluIHdoaWNoCisgICAgICAg
ICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0byBydW4gdGhlIGNhbGwsIG9yIG51
bGwgZm9yIHRoZSBjdXJyZW50CisgICAgICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBicm93c2luZyBjb250ZXh0LgorICAgICAgICAgKgogICAgICAgICAgKiBAcmV0dXJucyB7
UHJvbWlzZX0gZnVsZmlsbGVkIGFmdGVyIHRoZSByZXBvcnQgaXMgZ2VuZXJhdGVkLCBvcgogICAg
ICAgICAgKiAgICAgICAgICAgICAgICAgICAgcmVqZWN0ZWQgaWYgdGhlIHJlcG9ydCBnZW5lcmF0
aW9uIGZhaWxzCiAgICAgICAgICAqLwotICAgICAgICBnZW5lcmF0ZV90ZXN0X3JlcG9ydDogZnVu
Y3Rpb24obWVzc2FnZSkgewotICAgICAgICAgICAgcmV0dXJuIHdpbmRvdy50ZXN0X2RyaXZlcl9p
bnRlcm5hbC5nZW5lcmF0ZV90ZXN0X3JlcG9ydChtZXNzYWdlKTsKKyAgICAgICAgZ2VuZXJhdGVf
dGVzdF9yZXBvcnQ6IGZ1bmN0aW9uKG1lc3NhZ2UsIGNvbnRleHQ9bnVsbCkgeworICAgICAgICAg
ICAgcmV0dXJuIHdpbmRvdy50ZXN0X2RyaXZlcl9pbnRlcm5hbC5nZW5lcmF0ZV90ZXN0X3JlcG9y
dChtZXNzYWdlLCBjb250ZXh0KTsKICAgICAgICAgfSwKIAogICAgICAgICAvKioKQEAgLTIyMSw2
ICsyNDksOSBAQAogICAgICAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVj
dAogICAgICAgICAgKiBAcGFyYW0ge1N0cmluZ30gc3RhdGUgLSB0aGUgc3RhdGUgb2YgdGhlIHBl
cm1pc3Npb24KICAgICAgICAgICogQHBhcmFtIHtib29sZWFufSBvbmVfcmVhbG0gLSBPcHRpb25h
bC4gV2hldGhlciB0aGUgcGVybWlzc2lvbiBhcHBsaWVzIHRvIG9ubHkgb25lIHJlYWxtCisgICAg
ICAgICAqIEBwYXJhbSB7V2luZG93UHJveHl9IGNvbnRleHQgLSBCcm93c2luZyBjb250ZXh0IGlu
IHdoaWNoCisgICAgICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0byBydW4g
dGhlIGNhbGwsIG9yIG51bGwgZm9yIHRoZSBjdXJyZW50CisgICAgICAgICAqICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBicm93c2luZyBjb250ZXh0LgogICAgICAgICAgKgogICAgICAg
ICAgKiBUaGUgYWJvdmUgcGFyYW1zIGFyZSB1c2VkIHRvIGNyZWF0ZSBhIFtQZXJtaXNzaW9uU2V0
UGFyYW1ldGVyc117QGxpbmsKICAgICAgICAgICogaHR0cHM6Ly93M2MuZ2l0aHViLmlvL3Blcm1p
c3Npb25zLyNkaWN0ZGVmLXBlcm1pc3Npb25zZXRwYXJhbWV0ZXJzfSBvYmplY3QKQEAgLTIyOCwx
MyArMjU5LDEzIEBACiAgICAgICAgICAqIEByZXR1cm5zIHtQcm9taXNlfSBmdWxmaWxsZWQgYWZ0
ZXIgdGhlIHBlcm1pc3Npb24gaXMgc2V0LCBvciByZWplY3RlZCBpZiBzZXR0aW5nIHRoZQogICAg
ICAgICAgKiAgICAgICAgICAgICAgICAgICAgcGVybWlzc2lvbiBmYWlscwogICAgICAgICAgKi8K
LSAgICAgICAgc2V0X3Blcm1pc3Npb246IGZ1bmN0aW9uKGRlc2NyaXB0b3IsIHN0YXRlLCBvbmVf
cmVhbG0pIHsKKyAgICAgICAgc2V0X3Blcm1pc3Npb246IGZ1bmN0aW9uKGRlc2NyaXB0b3IsIHN0
YXRlLCBvbmVfcmVhbG0sIGNvbnRleHQ9bnVsbCkgewogICAgICAgICAgICAgbGV0IHBlcm1pc3Np
b25fcGFyYW1zID0gewogICAgICAgICAgICAgICBkZXNjcmlwdG9yLAogICAgICAgICAgICAgICBz
dGF0ZSwKICAgICAgICAgICAgICAgb25lUmVhbG06IG9uZV9yZWFsbSwKICAgICAgICAgICAgIH07
Ci0gICAgICAgICAgICByZXR1cm4gd2luZG93LnRlc3RfZHJpdmVyX2ludGVybmFsLnNldF9wZXJt
aXNzaW9uKHBlcm1pc3Npb25fcGFyYW1zKTsKKyAgICAgICAgICAgIHJldHVybiB3aW5kb3cudGVz
dF9kcml2ZXJfaW50ZXJuYWwuc2V0X3Blcm1pc3Npb24ocGVybWlzc2lvbl9wYXJhbXMsIGNvbnRl
eHQpOwogICAgICAgICB9LAogCiAgICAgICAgIC8qKgpAQCAtMjQ3LDEyICsyNzgsMTYgQEAKICAg
ICAgICAgICogQHBhcmFtIHtPYmplY3R9IGNvbmZpZyAtIGFuIFtBdXRoZW50aWNhdG9yIENvbmZp
Z3VyYXRpb25de0BsaW5rCiAgICAgICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICBodHRw
czovL3czYy5naXRodWIuaW8vd2ViYXV0aG4vI2F1dGhlbnRpY2F0b3ItY29uZmlndXJhdGlvbn0K
ICAgICAgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdAorICAgICAgICAgKiBA
cGFyYW0ge1dpbmRvd1Byb3h5fSBjb250ZXh0IC0gQnJvd3NpbmcgY29udGV4dCBpbiB3aGljaAor
ICAgICAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gcnVuIHRoZSBjYWxs
LCBvciBudWxsIGZvciB0aGUgY3VycmVudAorICAgICAgICAgKiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgYnJvd3NpbmcgY29udGV4dC4KKyAgICAgICAgICoKICAgICAgICAgICogQHJl
dHVybnMge1Byb21pc2V9IGZ1bGZpbGxlZCBhZnRlciB0aGUgYXV0aGVudGljYXRvciBpcyBhZGRl
ZCwgb3IKICAgICAgICAgICogICAgICAgICAgICAgICAgICAgIHJlamVjdGVkIGluIHRoZSBjYXNl
cyB0aGUgV2ViRHJpdmVyIGNvbW1hbmQKICAgICAgICAgICogICAgICAgICAgICAgICAgICAgIGVy
cm9ycy4gUmV0dXJucyB0aGUgSUQgb2YgdGhlIGF1dGhlbnRpY2F0b3IKICAgICAgICAgICovCi0g
ICAgICAgIGFkZF92aXJ0dWFsX2F1dGhlbnRpY2F0b3I6IGZ1bmN0aW9uKGNvbmZpZykgewotICAg
ICAgICAgICAgcmV0dXJuIHdpbmRvdy50ZXN0X2RyaXZlcl9pbnRlcm5hbC5hZGRfdmlydHVhbF9h
dXRoZW50aWNhdG9yKGNvbmZpZyk7CisgICAgICAgIGFkZF92aXJ0dWFsX2F1dGhlbnRpY2F0b3I6
IGZ1bmN0aW9uKGNvbmZpZywgY29udGV4dD1udWxsKSB7CisgICAgICAgICAgICByZXR1cm4gd2lu
ZG93LnRlc3RfZHJpdmVyX2ludGVybmFsLmFkZF92aXJ0dWFsX2F1dGhlbnRpY2F0b3IoY29uZmln
LCBjb250ZXh0KTsKICAgICAgICAgfSwKIAogICAgICAgICAvKioKQEAgLTI2NCwxMyArMjk5LDE2
IEBACiAgICAgICAgICAqCiAgICAgICAgICAqIEBwYXJhbSB7U3RyaW5nfSBhdXRoZW50aWNhdG9y
X2lkIC0gdGhlIElEIG9mIHRoZSBhdXRoZW50aWNhdG9yIHRvIGJlCiAgICAgICAgICAqICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3ZlZC4KKyAgICAgICAgICogQHBhcmFt
IHtXaW5kb3dQcm94eX0gY29udGV4dCAtIEJyb3dzaW5nIGNvbnRleHQgaW4gd2hpY2gKKyAgICAg
ICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvIHJ1biB0aGUgY2FsbCwgb3Ig
bnVsbCBmb3IgdGhlIGN1cnJlbnQKKyAgICAgICAgICogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGJyb3dzaW5nIGNvbnRleHQuCiAgICAgICAgICAqCiAgICAgICAgICAqIEByZXR1cm5z
IHtQcm9taXNlfSBmdWxmaWxsZWQgYWZ0ZXIgdGhlIGF1dGhlbnRpY2F0b3IgaXMgcmVtb3ZlZCwg
b3IKICAgICAgICAgICogICAgICAgICAgICAgICAgICAgIHJlamVjdGVkIGluIHRoZSBjYXNlcyB0
aGUgV2ViRHJpdmVyIGNvbW1hbmQKICAgICAgICAgICogICAgICAgICAgICAgICAgICAgIGVycm9y
cwogICAgICAgICAgKi8KLSAgICAgICAgcmVtb3ZlX3ZpcnR1YWxfYXV0aGVudGljYXRvcjogZnVu
Y3Rpb24oYXV0aGVudGljYXRvcl9pZCkgewotICAgICAgICAgICAgcmV0dXJuIHdpbmRvdy50ZXN0
X2RyaXZlcl9pbnRlcm5hbC5yZW1vdmVfdmlydHVhbF9hdXRoZW50aWNhdG9yKGF1dGhlbnRpY2F0
b3JfaWQpOworICAgICAgICByZW1vdmVfdmlydHVhbF9hdXRoZW50aWNhdG9yOiBmdW5jdGlvbihh
dXRoZW50aWNhdG9yX2lkLCBjb250ZXh0PW51bGwpIHsKKyAgICAgICAgICAgIHJldHVybiB3aW5k
b3cudGVzdF9kcml2ZXJfaW50ZXJuYWwucmVtb3ZlX3ZpcnR1YWxfYXV0aGVudGljYXRvcihhdXRo
ZW50aWNhdG9yX2lkLCBjb250ZXh0KTsKICAgICAgICAgfSwKIAogICAgICAgICAvKioKQEAgLTI4
MiwxMyArMzIwLDE2IEBACiAgICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBjcmVkZW50aWFsIC0g
QSBbQ3JlZGVudGlhbCBQYXJhbWV0ZXJzXXtAbGluawogICAgICAgICAgKiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby93ZWJhdXRobi8jY3JlZGVudGlh
bC1wYXJhbWV0ZXJzfQogICAgICAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9i
amVjdAorICAgICAgICAgKiBAcGFyYW0ge1dpbmRvd1Byb3h5fSBjb250ZXh0IC0gQnJvd3Npbmcg
Y29udGV4dCBpbiB3aGljaAorICAgICAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdG8gcnVuIHRoZSBjYWxsLCBvciBudWxsIGZvciB0aGUgY3VycmVudAorICAgICAgICAgKiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJvd3NpbmcgY29udGV4dC4KICAgICAgICAg
ICoKICAgICAgICAgICogQHJldHVybnMge1Byb21pc2V9IGZ1bGZpbGxlZCBhZnRlciB0aGUgY3Jl
ZGVudGlhbCBpcyBhZGRlZCwgb3IKICAgICAgICAgICogICAgICAgICAgICAgICAgICAgIHJlamVj
dGVkIGluIHRoZSBjYXNlcyB0aGUgV2ViRHJpdmVyIGNvbW1hbmQKICAgICAgICAgICogICAgICAg
ICAgICAgICAgICAgIGVycm9ycwogICAgICAgICAgKi8KLSAgICAgICAgYWRkX2NyZWRlbnRpYWw6
IGZ1bmN0aW9uKGF1dGhlbnRpY2F0b3JfaWQsIGNyZWRlbnRpYWwpIHsKLSAgICAgICAgICAgIHJl
dHVybiB3aW5kb3cudGVzdF9kcml2ZXJfaW50ZXJuYWwuYWRkX2NyZWRlbnRpYWwoYXV0aGVudGlj
YXRvcl9pZCwgY3JlZGVudGlhbCk7CisgICAgICAgIGFkZF9jcmVkZW50aWFsOiBmdW5jdGlvbihh
dXRoZW50aWNhdG9yX2lkLCBjcmVkZW50aWFsLCBjb250ZXh0PW51bGwpIHsKKyAgICAgICAgICAg
IHJldHVybiB3aW5kb3cudGVzdF9kcml2ZXJfaW50ZXJuYWwuYWRkX2NyZWRlbnRpYWwoYXV0aGVu
dGljYXRvcl9pZCwgY3JlZGVudGlhbCwgY29udGV4dCk7CiAgICAgICAgIH0sCiAKICAgICAgICAg
LyoqCkBAIC0zMDAsNiArMzQxLDkgQEAKICAgICAgICAgICogaHR0cHM6Ly93M2MuZ2l0aHViLmlv
L3dlYmF1dGhuLyNzY3RuLWF1dG9tYXRpb24tZ2V0LWNyZWRlbnRpYWxzCiAgICAgICAgICAqCiAg
ICAgICAgICAqIEBwYXJhbSB7U3RyaW5nfSBhdXRoZW50aWNhdG9yX2lkIC0gdGhlIElEIG9mIHRo
ZSBhdXRoZW50aWNhdG9yCisgICAgICAgICAqIEBwYXJhbSB7V2luZG93UHJveHl9IGNvbnRleHQg
LSBCcm93c2luZyBjb250ZXh0IGluIHdoaWNoCisgICAgICAgICAqICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB0byBydW4gdGhlIGNhbGwsIG9yIG51bGwgZm9yIHRoZSBjdXJyZW50Cisg
ICAgICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicm93c2luZyBjb250ZXh0
LgogICAgICAgICAgKgogICAgICAgICAgKiBAcmV0dXJucyB7UHJvbWlzZX0gZnVsZmlsbGVkIGFm
dGVyIHRoZSBjcmVkZW50aWFscyBhcmUgcmV0dXJuZWQsIG9yCiAgICAgICAgICAqICAgICAgICAg
ICAgICAgICAgICByZWplY3RlZCBpbiB0aGUgY2FzZXMgdGhlIFdlYkRyaXZlciBjb21tYW5kCkBA
IC0zMDcsOCArMzUxLDggQEAKICAgICAgICAgICogICAgICAgICAgICAgICAgICAgIFBhcmFtZXRl
cnNde0BsaW5rCiAgICAgICAgICAqICAgICAgICAgICAgICAgICAgICBodHRwczovL3czYy5naXRo
dWIuaW8vd2ViYXV0aG4vI2NyZWRlbnRpYWwtcGFyYW1ldGVyc30KICAgICAgICAgICovCi0gICAg
ICAgIGdldF9jcmVkZW50aWFsczogZnVuY3Rpb24oYXV0aGVudGljYXRvcl9pZCkgewotICAgICAg
ICAgICAgcmV0dXJuIHdpbmRvdy50ZXN0X2RyaXZlcl9pbnRlcm5hbC5nZXRfY3JlZGVudGlhbHMo
YXV0aGVudGljYXRvcl9pZCk7CisgICAgICAgIGdldF9jcmVkZW50aWFsczogZnVuY3Rpb24oYXV0
aGVudGljYXRvcl9pZCwgY29udGV4dD1udWxsKSB7CisgICAgICAgICAgICByZXR1cm4gd2luZG93
LnRlc3RfZHJpdmVyX2ludGVybmFsLmdldF9jcmVkZW50aWFscyhhdXRoZW50aWNhdG9yX2lkLCBj
b250ZXh0PW51bGwpOwogICAgICAgICB9LAogCiAgICAgICAgIC8qKgpAQCAtMzE4LDEzICszNjIs
MTYgQEAKICAgICAgICAgICoKICAgICAgICAgICogQHBhcmFtIHtTdHJpbmd9IGF1dGhlbnRpY2F0
b3JfaWQgLSB0aGUgSUQgb2YgdGhlIGF1dGhlbnRpY2F0b3IKICAgICAgICAgICogQHBhcmFtIHtT
dHJpbmd9IGNyZWRlbnRpYWxfaWQgLSB0aGUgSUQgb2YgdGhlIGNyZWRlbnRpYWwKKyAgICAgICAg
ICogQHBhcmFtIHtXaW5kb3dQcm94eX0gY29udGV4dCAtIEJyb3dzaW5nIGNvbnRleHQgaW4gd2hp
Y2gKKyAgICAgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvIHJ1biB0aGUg
Y2FsbCwgb3IgbnVsbCBmb3IgdGhlIGN1cnJlbnQKKyAgICAgICAgICogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGJyb3dzaW5nIGNvbnRleHQuCiAgICAgICAgICAqCiAgICAgICAgICAq
IEByZXR1cm5zIHtQcm9taXNlfSBmdWxmaWxsZWQgYWZ0ZXIgdGhlIGNyZWRlbnRpYWwgaXMgcmVt
b3ZlZCwgb3IKICAgICAgICAgICogICAgICAgICAgICAgICAgICAgIHJlamVjdGVkIGluIHRoZSBj
YXNlcyB0aGUgV2ViRHJpdmVyIGNvbW1hbmQKICAgICAgICAgICogICAgICAgICAgICAgICAgICAg
IGVycm9ycy4KICAgICAgICAgICovCi0gICAgICAgIHJlbW92ZV9jcmVkZW50aWFsOiBmdW5jdGlv
bihhdXRoZW50aWNhdG9yX2lkLCBjcmVkZW50aWFsX2lkKSB7Ci0gICAgICAgICAgICByZXR1cm4g
d2luZG93LnRlc3RfZHJpdmVyX2ludGVybmFsLnJlbW92ZV9jcmVkZW50aWFsKGF1dGhlbnRpY2F0
b3JfaWQsIGNyZWRlbnRpYWxfaWQpOworICAgICAgICByZW1vdmVfY3JlZGVudGlhbDogZnVuY3Rp
b24oYXV0aGVudGljYXRvcl9pZCwgY3JlZGVudGlhbF9pZCwgY29udGV4dD1udWxsKSB7CisgICAg
ICAgICAgICByZXR1cm4gd2luZG93LnRlc3RfZHJpdmVyX2ludGVybmFsLnJlbW92ZV9jcmVkZW50
aWFsKGF1dGhlbnRpY2F0b3JfaWQsIGNyZWRlbnRpYWxfaWQsIGNvbnRleHQpOwogICAgICAgICB9
LAogCiAgICAgICAgIC8qKgpAQCAtMzMzLDEzICszODAsMTYgQEAKICAgICAgICAgICogaHR0cHM6
Ly93M2MuZ2l0aHViLmlvL3dlYmF1dGhuLyNzY3RuLWF1dG9tYXRpb24tcmVtb3ZlLWFsbC1jcmVk
ZW50aWFscwogICAgICAgICAgKgogICAgICAgICAgKiBAcGFyYW0ge1N0cmluZ30gYXV0aGVudGlj
YXRvcl9pZCAtIHRoZSBJRCBvZiB0aGUgYXV0aGVudGljYXRvcgorICAgICAgICAgKiBAcGFyYW0g
e1dpbmRvd1Byb3h5fSBjb250ZXh0IC0gQnJvd3NpbmcgY29udGV4dCBpbiB3aGljaAorICAgICAg
ICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gcnVuIHRoZSBjYWxsLCBvciBu
dWxsIGZvciB0aGUgY3VycmVudAorICAgICAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgYnJvd3NpbmcgY29udGV4dC4KICAgICAgICAgICoKICAgICAgICAgICogQHJldHVybnMg
e1Byb21pc2V9IGZ1bGZpbGxlZCBhZnRlciB0aGUgY3JlZGVudGlhbHMgYXJlIHJlbW92ZWQsIG9y
CiAgICAgICAgICAqICAgICAgICAgICAgICAgICAgICByZWplY3RlZCBpbiB0aGUgY2FzZXMgdGhl
IFdlYkRyaXZlciBjb21tYW5kCiAgICAgICAgICAqICAgICAgICAgICAgICAgICAgICBlcnJvcnMu
CiAgICAgICAgICAqLwotICAgICAgICByZW1vdmVfYWxsX2NyZWRlbnRpYWxzOiBmdW5jdGlvbihh
dXRoZW50aWNhdG9yX2lkKSB7Ci0gICAgICAgICAgICByZXR1cm4gd2luZG93LnRlc3RfZHJpdmVy
X2ludGVybmFsLnJlbW92ZV9hbGxfY3JlZGVudGlhbHMoYXV0aGVudGljYXRvcl9pZCk7CisgICAg
ICAgIHJlbW92ZV9hbGxfY3JlZGVudGlhbHM6IGZ1bmN0aW9uKGF1dGhlbnRpY2F0b3JfaWQsIGNv
bnRleHQ9bnVsbCkgeworICAgICAgICAgICAgcmV0dXJuIHdpbmRvdy50ZXN0X2RyaXZlcl9pbnRl
cm5hbC5yZW1vdmVfYWxsX2NyZWRlbnRpYWxzKGF1dGhlbnRpY2F0b3JfaWQsIGNvbnRleHQpOwog
ICAgICAgICB9LAogCiAgICAgICAgIC8qKgpAQCAtMzUxLDkgKzQwMSw0MSBAQAogICAgICAgICAg
KgogICAgICAgICAgKiBAcGFyYW0ge1N0cmluZ30gYXV0aGVudGljYXRvcl9pZCAtIHRoZSBJRCBv
ZiB0aGUgYXV0aGVudGljYXRvcgogICAgICAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IHV2IC0gdGhl
IFVzZXIgVmVyaWZpZWQgZmxhZworICAgICAgICAgKiBAcGFyYW0ge1dpbmRvd1Byb3h5fSBjb250
ZXh0IC0gQnJvd3NpbmcgY29udGV4dCBpbiB3aGljaAorICAgICAgICAgKiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdG8gcnVuIHRoZSBjYWxsLCBvciBudWxsIGZvciB0aGUgY3VycmVu
dAorICAgICAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJvd3NpbmcgY29u
dGV4dC4KKyAgICAgICAgICovCisgICAgICAgIHNldF91c2VyX3ZlcmlmaWVkOiBmdW5jdGlvbihh
dXRoZW50aWNhdG9yX2lkLCB1diwgY29udGV4dD1udWxsKSB7CisgICAgICAgICAgICByZXR1cm4g
d2luZG93LnRlc3RfZHJpdmVyX2ludGVybmFsLnNldF91c2VyX3ZlcmlmaWVkKGF1dGhlbnRpY2F0
b3JfaWQsIHV2LCBjb250ZXh0KTsKKyAgICAgICAgfSwKKworICAgICAgICAvKioKKyAgICAgICAg
ICogU2V0cyB0aGUgc3RvcmFnZSBhY2Nlc3MgcnVsZSBmb3IgYW4gb3JpZ2luIHdoZW4gZW1iZWRk
ZWQKKyAgICAgICAgICogaW4gYSB0aGlyZC1wYXJ0eSBjb250ZXh0LgorICAgICAgICAgKgorICAg
ICAgICAgKiB7QGxpbmsgaHR0cHM6Ly9wcml2YWN5Y2cuZ2l0aHViLmlvL3N0b3JhZ2UtYWNjZXNz
LyNzZXQtc3RvcmFnZS1hY2Nlc3MtY29tbWFuZH0KKyAgICAgICAgICoKKyAgICAgICAgICogQHBh
cmFtIHtTdHJpbmd9IG9yaWdpbiAtIEEgdGhpcmQtcGFydHkgb3JpZ2luIHRvIGJsb2NrIG9yIGFs
bG93LgorICAgICAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgTWF5IGJlICIqIiB0byBp
bmRpY2F0ZSBhbGwgb3JpZ2lucy4KKyAgICAgICAgICogQHBhcmFtIHtTdHJpbmd9IGVtYmVkZGlu
Z19vcmlnaW4gLSBhbiBlbWJlZGRpbmcgKGZpcnN0LXBhcnR5KSBvcmlnaW4KKyAgICAgICAgICog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbiB3aGljaCB7b3JpZ2lufSdzIGFj
Y2VzcyBzaG91bGQKKyAgICAgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBiZSBibG9ja2VkIG9yIGFsbG93ZWQuCisgICAgICAgICAqICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgTWF5IGJlICIqIiB0byBpbmRpY2F0ZSBhbGwgb3JpZ2lucy4KKyAgICAg
ICAgICogQHBhcmFtIHtTdHJpbmd9IHN0YXRlIC0gVGhlIHN0b3JhZ2UgYWNjZXNzIHNldHRpbmcu
CisgICAgICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgIE11c3QgYmUgZWl0aGVyICJhbGxv
d2VkIiBvciAiYmxvY2tlZCIuCisgICAgICAgICAqIEBwYXJhbSB7V2luZG93UHJveHl9IGNvbnRl
eHQgLSBCcm93c2luZyBjb250ZXh0IGluIHdoaWNoCisgICAgICAgICAqICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB0byBydW4gdGhlIGNhbGwsIG9yIG51bGwgZm9yIHRoZSBjdXJyZW50
CisgICAgICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicm93c2luZyBjb250
ZXh0LgorICAgICAgICAgKgorICAgICAgICAgKiBAcmV0dXJucyB7UHJvbWlzZX0gRnVsZmlsbGVk
IGFmdGVyIHRoZSBzdG9yYWdlIGFjY2VzcyBydWxlIGhhcyBiZWVuCisgICAgICAgICAqICAgICAg
ICAgICAgICAgICAgICBzZXQsIG9yIHJlamVjdGVkIGlmIHNldHRpbmcgdGhlIHJ1bGUgZmFpbHMu
CiAgICAgICAgICAqLwotICAgICAgICBzZXRfdXNlcl92ZXJpZmllZDogZnVuY3Rpb24oYXV0aGVu
dGljYXRvcl9pZCwgdXYpIHsKLSAgICAgICAgICAgIHJldHVybiB3aW5kb3cudGVzdF9kcml2ZXJf
aW50ZXJuYWwuc2V0X3VzZXJfdmVyaWZpZWQoYXV0aGVudGljYXRvcl9pZCwgdXYpOworICAgICAg
ICBzZXRfc3RvcmFnZV9hY2Nlc3M6IGZ1bmN0aW9uKG9yaWdpbiwgZW1iZWRkaW5nX29yaWdpbiwg
c3RhdGUsIGNvbnRleHQ9bnVsbCkgeworICAgICAgICAgICAgaWYgKHN0YXRlICE9PSAiYWxsb3dl
ZCIgJiYgc3RhdGUgIT09ICJibG9ja2VkIikgeworICAgICAgICAgICAgICAgIHRocm93IG5ldyBF
cnJvcigic3RvcmFnZSBhY2Nlc3Mgc3RhdHVzIG11c3QgYmUgJ2FsbG93ZWQnIG9yICdibG9ja2Vk
JyIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgY29uc3QgYmxvY2tlZCA9IHN0YXRlID09
PSAiYmxvY2tlZCI7CisgICAgICAgICAgICByZXR1cm4gd2luZG93LnRlc3RfZHJpdmVyX2ludGVy
bmFsLnNldF9zdG9yYWdlX2FjY2VzcyhvcmlnaW4sIGVtYmVkZGluZ19vcmlnaW4sIGJsb2NrZWQs
IGNvbnRleHQpOwogICAgICAgICB9LAogICAgIH07CiAKQEAgLTM2NiwxMyArNDQ4LDYgQEAKICAg
ICAgICAgICovCiAgICAgICAgIGluX2F1dG9tYXRpb246IGZhbHNlLAogCi0gICAgICAgIC8qKgot
ICAgICAgICAgKiBXYWl0cyBmb3IgYSB1c2VyLWluaXRpYXRlZCBjbGljawotICAgICAgICAgKgot
ICAgICAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IGVsZW1lbnQgLSBlbGVtZW50IHRvIGJlIGNsaWNr
ZWQKLSAgICAgICAgICogQHBhcmFtIHt7eDogbnVtYmVyLCB5OiBudW1iZXJ9IGNvb3JkcyAtIHZp
ZXdwb3J0IGNvb3JkaW5hdGVzIHRvIGNsaWNrIGF0Ci0gICAgICAgICAqIEByZXR1cm5zIHtQcm9t
aXNlfSBmdWxmaWxsZWQgYWZ0ZXIgY2xpY2sgb2NjdXJzCi0gICAgICAgICAqLwogICAgICAgICBj
bGljazogZnVuY3Rpb24oZWxlbWVudCwgY29vcmRzKSB7CiAgICAgICAgICAgICBpZiAodGhpcy5p
bl9hdXRvbWF0aW9uKSB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5l
dyBFcnJvcignTm90IGltcGxlbWVudGVkJykpOwpAQCAtMzgzLDE0ICs0NTgsNiBAQAogICAgICAg
ICAgICAgfSk7CiAgICAgICAgIH0sCiAKLSAgICAgICAgLyoqCi0gICAgICAgICAqIFdhaXRzIGZv
ciBhbiBlbGVtZW50IHRvIHJlY2VpdmUgYSBzZXJpZXMgb2Yga2V5IHByZXNzZXMKLSAgICAgICAg
ICoKLSAgICAgICAgICogQHBhcmFtIHtFbGVtZW50fSBlbGVtZW50IC0gZWxlbWVudCB3aGljaCBz
aG91bGQgcmVjZXZlIGtleSBwcmVzc2VzCi0gICAgICAgICAqIEBwYXJhbSB7U3RyaW5nfSBrZXlz
IC0ga2V5cyB0byBleHBlY3QKLSAgICAgICAgICogQHJldHVybnMge1Byb21pc2V9IGZ1bGZpbGxl
ZCBhZnRlciBrZXlzIGFyZSByZWNlaXZlZCBvciByZWplY3RlZCBpZgotICAgICAgICAgKiAgICAg
ICAgICAgICAgICAgICAgYW4gaW5jb3JyZWN0IGtleSBzZXF1ZW5jZSBpcyByZWNlaXZlZAotICAg
ICAgICAgKi8KICAgICAgICAgc2VuZF9rZXlzOiBmdW5jdGlvbihlbGVtZW50LCBrZXlzKSB7CiAg
ICAgICAgICAgICBpZiAodGhpcy5pbl9hdXRvbWF0aW9uKSB7CiAgICAgICAgICAgICAgICAgcmV0
dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcignTm90IGltcGxlbWVudGVkJykpOwpAQCAtNDIz
LDE1MCArNDkwLDUyIEBACiAgICAgICAgICAgICB9KTsKICAgICAgICAgfSwKIAotICAgICAgICAv
KioKLSAgICAgICAgICogRnJlZXplIHRoZSBjdXJyZW50IHBhZ2UKLSAgICAgICAgICoKLSAgICAg
ICAgICogQHJldHVybnMge1Byb21pc2V9IGZ1bGZpbGxlZCBhZnRlciBmcmVlemUgcmVxdWVzdCBp
cyBzZW50LCBvdGhlcndpc2UKLSAgICAgICAgICogaXQgZ2V0cyByZWplY3RlZAotICAgICAgICAg
Ki8KLSAgICAgICAgZnJlZXplOiBmdW5jdGlvbigpIHsKKyAgICAgICAgZnJlZXplOiBmdW5jdGlv
bihjb250ZXh0PW51bGwpIHsKICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcg
RXJyb3IoInVuaW1wbGVtZW50ZWQiKSk7CiAgICAgICAgIH0sCiAKLSAgICAgICAgLyoqCi0gICAg
ICAgICAqIFNlbmQgYSBzZXF1ZW5jZSBvZiBwb2ludGVyIGFjdGlvbnMKLSAgICAgICAgICoKLSAg
ICAgICAgICogQHJldHVybnMge1Byb21pc2V9IGZ1ZmlsbGVkIGFmdGVyIGFjdGlvbnMgYXJlIHNl
bnQsIHJlamVjdGVkIGlmIGFueSBhY3Rpb25zCi0gICAgICAgICAqICAgICAgICAgICAgICAgICAg
ICBmYWlsCi0gICAgICAgICAqLwotICAgICAgICBhY3Rpb25fc2VxdWVuY2U6IGZ1bmN0aW9uKGFj
dGlvbnMpIHsKKyAgICAgICAgYWN0aW9uX3NlcXVlbmNlOiBmdW5jdGlvbihhY3Rpb25zLCBjb250
ZXh0PW51bGwpIHsKICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3Io
InVuaW1wbGVtZW50ZWQiKSk7CiAgICAgICAgIH0sCiAKLSAgICAgICAgLyoqCi0gICAgICAgICAq
IEdlbmVyYXRlcyBhIHRlc3QgcmVwb3J0IG9uIHRoZSBjdXJyZW50IHBhZ2UKLSAgICAgICAgICoK
LSAgICAgICAgICogQHBhcmFtIHtTdHJpbmd9IG1lc3NhZ2UgLSB0aGUgbWVzc2FnZSB0byBiZSBj
b250YWluZWQgaW4gdGhlIHJlcG9ydAotICAgICAgICAgKiBAcmV0dXJucyB7UHJvbWlzZX0gZnVs
ZmlsbGVkIGFmdGVyIHRoZSByZXBvcnQgaXMgZ2VuZXJhdGVkLCBvcgotICAgICAgICAgKiAgICAg
ICAgICAgICAgICAgICAgcmVqZWN0ZWQgaWYgdGhlIHJlcG9ydCBnZW5lcmF0aW9uIGZhaWxzCi0g
ICAgICAgICAqLwotICAgICAgICBnZW5lcmF0ZV90ZXN0X3JlcG9ydDogZnVuY3Rpb24obWVzc2Fn
ZSkgeworICAgICAgICBnZW5lcmF0ZV90ZXN0X3JlcG9ydDogZnVuY3Rpb24obWVzc2FnZSwgY29u
dGV4dD1udWxsKSB7CiAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9y
KCJ1bmltcGxlbWVudGVkIikpOwogICAgICAgICB9LAogCiAKLSAgICAgICAgLyoqCi0gICAgICAg
ICAqIFNldHMgdGhlIHN0YXRlIG9mIGEgcGVybWlzc2lvbgotICAgICAgICAgKgotICAgICAgICAg
KiBUaGlzIGZ1bmN0aW9uIHNpbXVsYXRlcyBhIHVzZXIgc2V0dGluZyBhIHBlcm1pc3Npb24gaW50
byBhIHBhcnRpY3VsYXIgc3RhdGUgYXMgZGVzY3JpYmVkCi0gICAgICAgICAqIGluIHtAbGluayBo
dHRwczovL3czYy5naXRodWIuaW8vcGVybWlzc2lvbnMvI3NldC1wZXJtaXNzaW9uLWNvbW1hbmR9
Ci0gICAgICAgICAqCi0gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBwZXJtaXNzaW9uX3BhcmFt
cyAtIGEgW1Blcm1pc3Npb25TZXRQYXJhbWV0ZXJzXXtAbGludAotICAgICAgICAgKiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBodHRwczovL3czYy5naXRodWIuaW8vcGVybWlz
c2lvbnMvI2RpY3RkZWYtcGVybWlzc2lvbnNldHBhcmFtZXRlcnN9Ci0gICAgICAgICAqICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdAotICAgICAgICAgKiBAcmV0dXJu
cyB7UHJvbWlzZX0gZnVsZmlsbGVkIGFmdGVyIHRoZSBwZXJtaXNzaW9uIGlzIHNldCwgb3IgcmVq
ZWN0ZWQgaWYgc2V0dGluZyB0aGUKLSAgICAgICAgICogICAgICAgICAgICAgICAgICAgIHBlcm1p
c3Npb24gZmFpbHMKLSAgICAgICAgICovCi0gICAgICAgIHNldF9wZXJtaXNzaW9uOiBmdW5jdGlv
bihwZXJtaXNzaW9uX3BhcmFtcykgeworICAgICAgICBzZXRfcGVybWlzc2lvbjogZnVuY3Rpb24o
cGVybWlzc2lvbl9wYXJhbXMsIGNvbnRleHQ9bnVsbCkgewogICAgICAgICAgICAgcmV0dXJuIFBy
b21pc2UucmVqZWN0KG5ldyBFcnJvcigidW5pbXBsZW1lbnRlZCIpKTsKICAgICAgICAgfSwKIAot
ICAgICAgICAvKioKLSAgICAgICAgICogQ3JlYXRlcyBhIHZpcnR1YWwgYXV0aGVudGljYXRvcgot
ICAgICAgICAgKgotICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gY29uZmlnIC0gdGhlIGF1dGhl
bnRpY2F0b3IgY29uZmlndXJhdGlvbgotICAgICAgICAgKiBAcmV0dXJucyB7UHJvbWlzZX0gZnVs
ZmlsbGVkIGFmdGVyIHRoZSBhdXRoZW50aWNhdG9yIGlzIGFkZGVkLCBvcgotICAgICAgICAgKiAg
ICAgICAgICAgICAgICAgICAgcmVqZWN0ZWQgaW4gdGhlIGNhc2VzIHRoZSBXZWJEcml2ZXIgY29t
bWFuZAotICAgICAgICAgKiAgICAgICAgICAgICAgICAgICAgZXJyb3JzLgotICAgICAgICAgKi8K
LSAgICAgICAgYWRkX3ZpcnR1YWxfYXV0aGVudGljYXRvcjogZnVuY3Rpb24oY29uZmlnKSB7Cisg
ICAgICAgIGFkZF92aXJ0dWFsX2F1dGhlbnRpY2F0b3I6IGZ1bmN0aW9uKGNvbmZpZywgY29udGV4
dD1udWxsKSB7CiAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKCJ1
bmltcGxlbWVudGVkIikpOwogICAgICAgICB9LAogCi0gICAgICAgIC8qKgotICAgICAgICAgKiBS
ZW1vdmVzIGEgdmlydHVhbCBhdXRoZW50aWNhdG9yCi0gICAgICAgICAqCi0gICAgICAgICAqIEBw
YXJhbSB7U3RyaW5nfSBhdXRoZW50aWNhdG9yX2lkIC0gdGhlIElEIG9mIHRoZSBhdXRoZW50aWNh
dG9yIHRvIGJlCi0gICAgICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
cmVtb3ZlZC4KLSAgICAgICAgICoKLSAgICAgICAgICogQHJldHVybnMge1Byb21pc2V9IGZ1bGZp
bGxlZCBhZnRlciB0aGUgYXV0aGVudGljYXRvciBpcyByZW1vdmVkLCBvcgotICAgICAgICAgKiAg
ICAgICAgICAgICAgICAgICAgcmVqZWN0ZWQgaW4gdGhlIGNhc2VzIHRoZSBXZWJEcml2ZXIgY29t
bWFuZAotICAgICAgICAgKiAgICAgICAgICAgICAgICAgICAgZXJyb3JzCi0gICAgICAgICAqLwot
ICAgICAgICByZW1vdmVfdmlydHVhbF9hdXRoZW50aWNhdG9yOiBmdW5jdGlvbihhdXRoZW50aWNh
dG9yX2lkKSB7CisgICAgICAgIHJlbW92ZV92aXJ0dWFsX2F1dGhlbnRpY2F0b3I6IGZ1bmN0aW9u
KGF1dGhlbnRpY2F0b3JfaWQsIGNvbnRleHQ9bnVsbCkgewogICAgICAgICAgICAgcmV0dXJuIFBy
b21pc2UucmVqZWN0KG5ldyBFcnJvcigidW5pbXBsZW1lbnRlZCIpKTsKICAgICAgICAgfSwKIAot
ICAgICAgICAvKioKLSAgICAgICAgICogQWRkcyBhIGNyZWRlbnRpYWwgdG8gYSB2aXJ0dWFsIGF1
dGhlbnRpY2F0b3IKLSAgICAgICAgICoKLSAgICAgICAgICogQHBhcmFtIHtTdHJpbmd9IGF1dGhl
bnRpY2F0b3JfaWQgLSB0aGUgSUQgb2YgdGhlIGF1dGhlbnRpY2F0b3IKLSAgICAgICAgICogQHBh
cmFtIHtPYmplY3R9IGNyZWRlbnRpYWwgLSBBIFtDcmVkZW50aWFsIFBhcmFtZXRlcnNde0BsaW5r
Ci0gICAgICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaHR0cHM6Ly93M2MuZ2l0
aHViLmlvL3dlYmF1dGhuLyNjcmVkZW50aWFsLXBhcmFtZXRlcnN9Ci0gICAgICAgICAqICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0Ci0gICAgICAgICAqCi0gICAgICAgICAqIEBy
ZXR1cm5zIHtQcm9taXNlfSBmdWxmaWxsZWQgYWZ0ZXIgdGhlIGNyZWRlbnRpYWwgaXMgYWRkZWQs
IG9yCi0gICAgICAgICAqICAgICAgICAgICAgICAgICAgICByZWplY3RlZCBpbiB0aGUgY2FzZXMg
dGhlIFdlYkRyaXZlciBjb21tYW5kCi0gICAgICAgICAqICAgICAgICAgICAgICAgICAgICBlcnJv
cnMKLSAgICAgICAgICoKLSAgICAgICAgICovCi0gICAgICAgIGFkZF9jcmVkZW50aWFsOiBmdW5j
dGlvbihhdXRoZW50aWNhdG9yX2lkLCBjcmVkZW50aWFsKSB7CisgICAgICAgIGFkZF9jcmVkZW50
aWFsOiBmdW5jdGlvbihhdXRoZW50aWNhdG9yX2lkLCBjcmVkZW50aWFsLCBjb250ZXh0PW51bGwp
IHsKICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoInVuaW1wbGVt
ZW50ZWQiKSk7CiAgICAgICAgIH0sCiAKLSAgICAgICAgLyoqCi0gICAgICAgICAqIEdldHMgYWxs
IHRoZSBjcmVkZW50aWFscyBzdG9yZWQgaW4gYW4gYXV0aGVudGljYXRvcgotICAgICAgICAgKgot
ICAgICAgICAgKiBAcGFyYW0ge1N0cmluZ30gYXV0aGVudGljYXRvcl9pZCAtIHRoZSBJRCBvZiB0
aGUgYXV0aGVudGljYXRvcgotICAgICAgICAgKgotICAgICAgICAgKiBAcmV0dXJucyB7UHJvbWlz
ZX0gZnVsZmlsbGVkIGFmdGVyIHRoZSBjcmVkZW50aWFscyBhcmUgcmV0dXJuZWQsIG9yCi0gICAg
ICAgICAqICAgICAgICAgICAgICAgICAgICByZWplY3RlZCBpbiB0aGUgY2FzZXMgdGhlIFdlYkRy
aXZlciBjb21tYW5kCi0gICAgICAgICAqICAgICAgICAgICAgICAgICAgICBlcnJvcnMuIFJldHVy
bnMgYW4gYXJyYXkgb2YgW0NyZWRlbnRpYWwKLSAgICAgICAgICogICAgICAgICAgICAgICAgICAg
IFBhcmFtZXRlcnNde0BsaW5rCi0gICAgICAgICAqICAgICAgICAgICAgICAgICAgICBodHRwczov
L3czYy5naXRodWIuaW8vd2ViYXV0aG4vI2NyZWRlbnRpYWwtcGFyYW1ldGVyc30KLSAgICAgICAg
ICoKLSAgICAgICAgICovCi0gICAgICAgIGdldF9jcmVkZW50aWFsczogZnVuY3Rpb24oYXV0aGVu
dGljYXRvcl9pZCkgeworICAgICAgICBnZXRfY3JlZGVudGlhbHM6IGZ1bmN0aW9uKGF1dGhlbnRp
Y2F0b3JfaWQsIGNvbnRleHQ9bnVsbCkgewogICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVq
ZWN0KG5ldyBFcnJvcigidW5pbXBsZW1lbnRlZCIpKTsKICAgICAgICAgfSwKIAotICAgICAgICAv
KioKLSAgICAgICAgICogUmVtb3ZlIGEgY3JlZGVudGlhbCBzdG9yZWQgaW4gYW4gYXV0aGVudGlj
YXRvcgotICAgICAgICAgKgotICAgICAgICAgKiBAcGFyYW0ge1N0cmluZ30gYXV0aGVudGljYXRv
cl9pZCAtIHRoZSBJRCBvZiB0aGUgYXV0aGVudGljYXRvcgotICAgICAgICAgKiBAcGFyYW0ge1N0
cmluZ30gY3JlZGVudGlhbF9pZCAtIHRoZSBJRCBvZiB0aGUgY3JlZGVudGlhbAotICAgICAgICAg
KgotICAgICAgICAgKiBAcmV0dXJucyB7UHJvbWlzZX0gZnVsZmlsbGVkIGFmdGVyIHRoZSBjcmVk
ZW50aWFsIGlzIHJlbW92ZWQsIG9yCi0gICAgICAgICAqICAgICAgICAgICAgICAgICAgICByZWpl
Y3RlZCBpbiB0aGUgY2FzZXMgdGhlIFdlYkRyaXZlciBjb21tYW5kCi0gICAgICAgICAqICAgICAg
ICAgICAgICAgICAgICBlcnJvcnMuCi0gICAgICAgICAqCi0gICAgICAgICAqLwotICAgICAgICBy
ZW1vdmVfY3JlZGVudGlhbDogZnVuY3Rpb24oYXV0aGVudGljYXRvcl9pZCwgY3JlZGVudGlhbF9p
ZCkgeworICAgICAgICByZW1vdmVfY3JlZGVudGlhbDogZnVuY3Rpb24oYXV0aGVudGljYXRvcl9p
ZCwgY3JlZGVudGlhbF9pZCwgY29udGV4dD1udWxsKSB7CiAgICAgICAgICAgICByZXR1cm4gUHJv
bWlzZS5yZWplY3QobmV3IEVycm9yKCJ1bmltcGxlbWVudGVkIikpOwogICAgICAgICB9LAogCi0g
ICAgICAgIC8qKgotICAgICAgICAgKiBSZW1vdmVzIGFsbCB0aGUgY3JlZGVudGlhbHMgc3RvcmVk
IGluIGEgdmlydHVhbCBhdXRoZW50aWNhdG9yCi0gICAgICAgICAqCi0gICAgICAgICAqIEBwYXJh
bSB7U3RyaW5nfSBhdXRoZW50aWNhdG9yX2lkIC0gdGhlIElEIG9mIHRoZSBhdXRoZW50aWNhdG9y
Ci0gICAgICAgICAqCi0gICAgICAgICAqIEByZXR1cm5zIHtQcm9taXNlfSBmdWxmaWxsZWQgYWZ0
ZXIgdGhlIGNyZWRlbnRpYWxzIGFyZSByZW1vdmVkLCBvcgotICAgICAgICAgKiAgICAgICAgICAg
ICAgICAgICAgcmVqZWN0ZWQgaW4gdGhlIGNhc2VzIHRoZSBXZWJEcml2ZXIgY29tbWFuZAotICAg
ICAgICAgKiAgICAgICAgICAgICAgICAgICAgZXJyb3JzLgotICAgICAgICAgKgotICAgICAgICAg
Ki8KLSAgICAgICAgcmVtb3ZlX2FsbF9jcmVkZW50aWFsczogZnVuY3Rpb24oYXV0aGVudGljYXRv
cl9pZCkgeworICAgICAgICByZW1vdmVfYWxsX2NyZWRlbnRpYWxzOiBmdW5jdGlvbihhdXRoZW50
aWNhdG9yX2lkLCBjb250ZXh0PW51bGwpIHsKICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJl
amVjdChuZXcgRXJyb3IoInVuaW1wbGVtZW50ZWQiKSk7CiAgICAgICAgIH0sCiAKLSAgICAgICAg
LyoqCi0gICAgICAgICAqIFNldHMgdGhlIFVzZXIgVmVyaWZpZWQgZmxhZyBvbiBhbiBhdXRoZW50
aWNhdG9yCi0gICAgICAgICAqCi0gICAgICAgICAqIEBwYXJhbSB7U3RyaW5nfSBhdXRoZW50aWNh
dG9yX2lkIC0gdGhlIElEIG9mIHRoZSBhdXRoZW50aWNhdG9yCi0gICAgICAgICAqIEBwYXJhbSB7
Ym9vbGVhbn0gdXYgLSB0aGUgVXNlciBWZXJpZmllZCBmbGFnCi0gICAgICAgICAqCi0gICAgICAg
ICAqLwotICAgICAgICBzZXRfdXNlcl92ZXJpZmllZDogZnVuY3Rpb24oYXV0aGVudGljYXRvcl9p
ZCwgdXYpIHsKKyAgICAgICAgc2V0X3VzZXJfdmVyaWZpZWQ6IGZ1bmN0aW9uKGF1dGhlbnRpY2F0
b3JfaWQsIHV2LCBjb250ZXh0PW51bGwpIHsKKyAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJl
amVjdChuZXcgRXJyb3IoInVuaW1wbGVtZW50ZWQiKSk7CisgICAgICAgIH0sCisKKyAgICAgICAg
c2V0X3N0b3JhZ2VfYWNjZXNzOiBmdW5jdGlvbihvcmlnaW4sIGVtYmVkZGluZ19vcmlnaW4sIGJs
b2NrZWQsIGNvbnRleHQ9bnVsbCkgewogICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0
KG5ldyBFcnJvcigidW5pbXBsZW1lbnRlZCIpKTsKICAgICAgICAgfSwKICAgICB9OwpkaWZmIC0t
Z2l0IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJj
ZXMvdGVzdGhhcm5lc3MuanMgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3Jt
LXRlc3RzL3Jlc291cmNlcy90ZXN0aGFybmVzcy5qcwppbmRleCAyNzRkYzlkN2Q4OTBkYmE3ZDk4
OTg1ZmVhYzk1MzNkZDYyNDUwNDMzLi5kNTBlMDk0MTE3ZGY1NmRiNDlkNzVmMTYyMGM0YWJhNTEz
MTlmYzNjIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3Jt
LXRlc3RzL3Jlc291cmNlcy90ZXN0aGFybmVzcy5qcworKysgYi9MYXlvdXRUZXN0cy9pbXBvcnRl
ZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0aGFybmVzcy5qcwpAQCAtNTIw
LDYgKzUyMCw0MyBAQCBwb2xpY2llcyBhbmQgY29udHJpYnV0aW9uIGZvcm1zIFszXS4KICAgICAg
ICAgICAgIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh3b3JrZXIpID09ICdbb2JqZWN0
IFNlcnZpY2VXb3JrZXJdJzsKICAgICB9CiAKKyAgICB2YXIgc2Vlbl9mdW5jX25hbWUgPSBPYmpl
Y3QuY3JlYXRlKG51bGwpOworCisgICAgZnVuY3Rpb24gZ2V0X3Rlc3RfbmFtZShmdW5jLCBuYW1l
KQorICAgIHsKKyAgICAgICAgaWYgKG5hbWUpIHsKKyAgICAgICAgICAgIHJldHVybiBuYW1lOwor
ICAgICAgICB9CisKKyAgICAgICAgaWYgKGZ1bmMpIHsKKyAgICAgICAgICAgIHZhciBmdW5jX2Nv
ZGUgPSBmdW5jLnRvU3RyaW5nKCk7CisKKyAgICAgICAgICAgIC8vIFRyeSBhbmQgbWF0Y2ggd2l0
aCBicmFja2V0cywgYnV0IGZhbGxiYWNrIHRvIG1hdGNoaW5nIHdpdGhvdXQKKyAgICAgICAgICAg
IHZhciBhcnJvdyA9IGZ1bmNfY29kZS5tYXRjaCgvXlwoXClccyo9PlxzKig/OnsoLiopfVxzKnwo
LiopKSQvKTsKKworICAgICAgICAgICAgLy8gQ2hlY2sgZm9yIEpTIGxpbmUgc2VwYXJhdG9ycwor
ICAgICAgICAgICAgaWYgKGFycm93ICE9PSBudWxsICYmICEvW1x1MDAwQVx1MDAwRFx1MjAyOFx1
MjAyOV0vLnRlc3QoZnVuY19jb2RlKSkgeworICAgICAgICAgICAgICAgIHZhciB0cmltbWVkID0g
KGFycm93WzFdICE9PSB1bmRlZmluZWQgPyBhcnJvd1sxXSA6IGFycm93WzJdKS50cmltKCk7Cisg
ICAgICAgICAgICAgICAgLy8gZHJvcCB0cmFpbGluZyA7IGlmIHRoZXJlJ3Mgbm8gZWFybGllciBv
bmVzCisgICAgICAgICAgICAgICAgdHJpbW1lZCA9IHRyaW1tZWQucmVwbGFjZSgvXihbXjtdKiko
O1xzKikrJC8sICIkMSIpOworCisgICAgICAgICAgICAgICAgaWYgKHRyaW1tZWQpIHsKKyAgICAg
ICAgICAgICAgICAgICAgbGV0IG5hbWUgPSB0cmltbWVkOworICAgICAgICAgICAgICAgICAgICBp
ZiAoc2Vlbl9mdW5jX25hbWVbdHJpbW1lZF0pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8v
IFRoaXMgc3VidGVzdCBuYW1lIGFscmVhZHkgZXhpc3RzLCBzbyBhZGQgYSBzdWZmaXguCisgICAg
ICAgICAgICAgICAgICAgICAgICBuYW1lICs9ICIgIiArIHNlZW5fZnVuY19uYW1lW3RyaW1tZWRd
OworICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAg
c2Vlbl9mdW5jX25hbWVbdHJpbW1lZF0gPSAwOworICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgICAgIHNlZW5fZnVuY19uYW1lW3RyaW1tZWRdICs9IDE7CisgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBuYW1lOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorCisgICAgICAgIHJldHVybiB0ZXN0X2Vudmlyb25tZW50Lm5leHRfZGVmYXVs
dF90ZXN0X25hbWUoKTsKKyAgICB9CisKICAgICAvKgogICAgICAqIEFQSSBmdW5jdGlvbnMKICAg
ICAgKi8KQEAgLTUzMCwxNyArNTY3LDE4IEBAIHBvbGljaWVzIGFuZCBjb250cmlidXRpb24gZm9y
bXMgWzNdLgogICAgICAgICAgICAgdGVzdHMuc3RhdHVzLm1lc3NhZ2UgPSAnYHRlc3RgIGludm9r
ZWQgYWZ0ZXIgYHByb21pc2Vfc2V0dXBgJzsKICAgICAgICAgICAgIHRlc3RzLmNvbXBsZXRlKCk7
CiAgICAgICAgIH0KLSAgICAgICAgdmFyIHRlc3RfbmFtZSA9IG5hbWUgPyBuYW1lIDogdGVzdF9l
bnZpcm9ubWVudC5uZXh0X2RlZmF1bHRfdGVzdF9uYW1lKCk7CisgICAgICAgIHZhciB0ZXN0X25h
bWUgPSBnZXRfdGVzdF9uYW1lKGZ1bmMsIG5hbWUpOwogICAgICAgICB2YXIgdGVzdF9vYmogPSBu
ZXcgVGVzdCh0ZXN0X25hbWUsIHByb3BlcnRpZXMpOwogICAgICAgICB2YXIgdmFsdWUgPSB0ZXN0
X29iai5zdGVwKGZ1bmMsIHRlc3Rfb2JqLCB0ZXN0X29iaik7CiAKICAgICAgICAgaWYgKHZhbHVl
ICE9PSB1bmRlZmluZWQpIHsKLSAgICAgICAgICAgIHZhciBtc2cgPSAiVGVzdCBuYW1lZCBcIiIg
KyB0ZXN0X25hbWUgKwotICAgICAgICAgICAgICAgICJcIiBpbmFwcHJvcHJpYXRlbHkgcmV0dXJu
ZWQgYSB2YWx1ZSI7CisgICAgICAgICAgICB2YXIgbXNnID0gJ1Rlc3QgbmFtZWQgIicgKyB0ZXN0
X25hbWUgKworICAgICAgICAgICAgICAgICciIHBhc3NlZCBhIGZ1bmN0aW9uIHRvIGB0ZXN0YCB0
aGF0IHJldHVybmVkIGEgdmFsdWUuJzsKIAogICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAg
ICAgICBpZiAodmFsdWUgJiYgdmFsdWUuaGFzT3duUHJvcGVydHkoInRoZW4iKSkgewotICAgICAg
ICAgICAgICAgICAgICBtc2cgKz0gIiwgY29uc2lkZXIgdXNpbmcgYHByb21pc2VfdGVzdGAgaW5z
dGVhZCI7CisgICAgICAgICAgICAgICAgaWYgKHZhbHVlICYmIHR5cGVvZiB2YWx1ZS50aGVuID09
PSAnZnVuY3Rpb24nKSB7CisgICAgICAgICAgICAgICAgICAgIG1zZyArPSAnIENvbnNpZGVyIHVz
aW5nIGBwcm9taXNlX3Rlc3RgIGluc3RlYWQgd2hlbiAnICsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICd1c2luZyBQcm9taXNlcyBvciBhc3luYy9hd2FpdC4nOwogICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgIH0gY2F0Y2ggKGVycikge30KIApAQCAtNTY1LDEwICs2MDMsMzMgQEAgcG9s
aWNpZXMgYW5kIGNvbnRyaWJ1dGlvbiBmb3JtcyBbM10uCiAgICAgICAgICAgICBuYW1lID0gZnVu
YzsKICAgICAgICAgICAgIGZ1bmMgPSBudWxsOwogICAgICAgICB9Ci0gICAgICAgIHZhciB0ZXN0
X25hbWUgPSBuYW1lID8gbmFtZSA6IHRlc3RfZW52aXJvbm1lbnQubmV4dF9kZWZhdWx0X3Rlc3Rf
bmFtZSgpOworICAgICAgICB2YXIgdGVzdF9uYW1lID0gZ2V0X3Rlc3RfbmFtZShmdW5jLCBuYW1l
KTsKICAgICAgICAgdmFyIHRlc3Rfb2JqID0gbmV3IFRlc3QodGVzdF9uYW1lLCBwcm9wZXJ0aWVz
KTsKICAgICAgICAgaWYgKGZ1bmMpIHsKLSAgICAgICAgICAgIHRlc3Rfb2JqLnN0ZXAoZnVuYywg
dGVzdF9vYmosIHRlc3Rfb2JqKTsKKyAgICAgICAgICAgIHZhciB2YWx1ZSA9IHRlc3Rfb2JqLnN0
ZXAoZnVuYywgdGVzdF9vYmosIHRlc3Rfb2JqKTsKKworICAgICAgICAgICAgLy8gVGVzdCBhdXRo
b3JzIHNvbWV0aW1lcyByZXR1cm4gdmFsdWVzIHRvIGFzeW5jX3Rlc3QsIGV4cGVjdGluZyB1cwor
ICAgICAgICAgICAgLy8gdG8gaGFuZGxlIHRoZSB2YWx1ZSBzb21laG93LiBNYWtlIGRvaW5nIHNv
IGEgaGFybmVzcyBlcnJvciB0byBiZQorICAgICAgICAgICAgLy8gY2xlYXIgdGhpcyBpcyBpbnZh
bGlkLCBhbmQgcG9pbnQgYXV0aG9ycyB0byBwcm9taXNlX3Rlc3QgaWYgaXQKKyAgICAgICAgICAg
IC8vIG1heSBiZSBhcHByb3ByaWF0ZS4KKyAgICAgICAgICAgIC8vCisgICAgICAgICAgICAvLyBO
b3RlIHRoYXQgd2Ugb25seSBwZXJmb3JtIHRoaXMgY2hlY2sgb24gdGhlIGluaXRpYWwgZnVuY3Rp
b24KKyAgICAgICAgICAgIC8vIHBhc3NlZCB0byBhc3luY190ZXN0LCBub3Qgb24gYW55IGxhdGVy
IHN0ZXBzIC0gd2UgaGF2ZW4ndCBzZWVuIGEKKyAgICAgICAgICAgIC8vIGNvbnNpc3RlbnQgcHJv
YmxlbSB3aXRoIHRob3NlIChhbmQgaXQncyBoYXJkZXIgdG8gY2hlY2spLgorICAgICAgICAgICAg
aWYgKHZhbHVlICE9PSB1bmRlZmluZWQpIHsKKyAgICAgICAgICAgICAgICB2YXIgbXNnID0gJ1Rl
c3QgbmFtZWQgIicgKyB0ZXN0X25hbWUgKworICAgICAgICAgICAgICAgICAgICAnIiBwYXNzZWQg
YSBmdW5jdGlvbiB0byBgYXN5bmNfdGVzdGAgdGhhdCByZXR1cm5lZCBhIHZhbHVlLic7CisKKyAg
ICAgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWUgJiYgdHlw
ZW9mIHZhbHVlLnRoZW4gPT09ICdmdW5jdGlvbicpIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
IG1zZyArPSAnIENvbnNpZGVyIHVzaW5nIGBwcm9taXNlX3Rlc3RgIGluc3RlYWQgd2hlbiAnICsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAndXNpbmcgUHJvbWlzZXMgb3IgYXN5bmMvYXdh
aXQuJzsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGVy
cikge30KKworICAgICAgICAgICAgICAgIHRlc3RzLnNldF9zdGF0dXModGVzdHMuc3RhdHVzLkVS
Uk9SLCBtc2cpOworICAgICAgICAgICAgICAgIHRlc3RzLmNvbXBsZXRlKCk7CisgICAgICAgICAg
ICB9CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIHRlc3Rfb2JqOwogICAgIH0KQEAgLTU3OSw3
ICs2NDAsNyBAQCBwb2xpY2llcyBhbmQgY29udHJpYnV0aW9uIGZvcm1zIFszXS4KICAgICAgICAg
ICAgIG5hbWUgPSBmdW5jOwogICAgICAgICAgICAgZnVuYyA9IG51bGw7CiAgICAgICAgIH0KLSAg
ICAgICAgdmFyIHRlc3RfbmFtZSA9IG5hbWUgPyBuYW1lIDogdGVzdF9lbnZpcm9ubWVudC5uZXh0
X2RlZmF1bHRfdGVzdF9uYW1lKCk7CisgICAgICAgIHZhciB0ZXN0X25hbWUgPSBnZXRfdGVzdF9u
YW1lKGZ1bmMsIG5hbWUpOwogICAgICAgICB2YXIgdGVzdCA9IG5ldyBUZXN0KHRlc3RfbmFtZSwg
cHJvcGVydGllcyk7CiAgICAgICAgIHRlc3QuX2lzX3Byb21pc2VfdGVzdCA9IHRydWU7CiAKQEAg
LTEzMjMsMTAgKzEzODQsMTYgQEAgcG9saWNpZXMgYW5kIGNvbnRyaWJ1dGlvbiBmb3JtcyBbM10u
CiAgICAgICAgICAgICAgICAiZXhwZWN0ZWQgYSBudW1iZXIgYnV0IGdvdCBhICR7dHlwZV9hY3R1
YWx9IiwKICAgICAgICAgICAgICAgIHt0eXBlX2FjdHVhbDp0eXBlb2YgYWN0dWFsfSk7CiAKLSAg
ICAgICAgYXNzZXJ0KE1hdGguYWJzKGFjdHVhbCAtIGV4cGVjdGVkKSA8PSBlcHNpbG9uLAotICAg
ICAgICAgICAgICAgImFzc2VydF9hcHByb3hfZXF1YWxzIiwgZGVzY3JpcHRpb24sCi0gICAgICAg
ICAgICAgICAiZXhwZWN0ZWQgJHtleHBlY3RlZH0gKy8tICR7ZXBzaWxvbn0gYnV0IGdvdCAke2Fj
dHVhbH0iLAotICAgICAgICAgICAgICAge2V4cGVjdGVkOmV4cGVjdGVkLCBhY3R1YWw6YWN0dWFs
LCBlcHNpbG9uOmVwc2lsb259KTsKKyAgICAgICAgLy8gVGhlIGVwc2lsb24gbWF0aCBiZWxvdyBk
b2VzIG5vdCBwbGFjZSBuaWNlIHdpdGggTmFOIGFuZCBJbmZpbml0eQorICAgICAgICAvLyBCdXQg
aW4gdGhpcyBjYXNlIEluZmluaXR5ID0gSW5maW5pdHkgYW5kIE5hTiA9IE5hTgorICAgICAgICBp
ZiAoaXNGaW5pdGUoYWN0dWFsKSB8fCBpc0Zpbml0ZShleHBlY3RlZCkpIHsKKyAgICAgICAgICAg
IGFzc2VydChNYXRoLmFicyhhY3R1YWwgLSBleHBlY3RlZCkgPD0gZXBzaWxvbiwKKyAgICAgICAg
ICAgICAgICAgICAiYXNzZXJ0X2FwcHJveF9lcXVhbHMiLCBkZXNjcmlwdGlvbiwKKyAgICAgICAg
ICAgICAgICAgICAiZXhwZWN0ZWQgJHtleHBlY3RlZH0gKy8tICR7ZXBzaWxvbn0gYnV0IGdvdCAk
e2FjdHVhbH0iLAorICAgICAgICAgICAgICAgICAgIHtleHBlY3RlZDpleHBlY3RlZCwgYWN0dWFs
OmFjdHVhbCwgZXBzaWxvbjplcHNpbG9ufSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICBhc3NlcnRfZXF1YWxzKGFjdHVhbCwgZXhwZWN0ZWQpOworICAgICAgICB9CiAgICAgfQogICAg
IGV4cG9zZShhc3NlcnRfYXBwcm94X2VxdWFscywgImFzc2VydF9hcHByb3hfZXF1YWxzIik7CiAK
QEAgLTIwNjksNyArMjEzNiw3IEBAIHBvbGljaWVzIGFuZCBjb250cmlidXRpb24gZm9ybXMgWzNd
LgogICAgICAgICAgICAgICAgIGZ1bmMoKTsKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAg
ICAgICAgICAgaWYocmVtYWluaW5nID09PSAwKSB7Ci0gICAgICAgICAgICAgICAgICAgIGFzc2Vy
dChmYWxzZSwgIndhaXRfZm9yIiwgZGVzY3JpcHRpb24sCisgICAgICAgICAgICAgICAgICAgIGFz
c2VydChmYWxzZSwgInN0ZXBfd2FpdF9mdW5jIiwgZGVzY3JpcHRpb24sCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAiVGltZWQgb3V0IHdhaXRpbmcgb24gY29uZGl0aW9uIik7CiAgICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgICAgIHJlbWFpbmluZy0tOwpAQCAtMjA4NCw3ICsyMTUx
LDcgQEAgcG9saWNpZXMgYW5kIGNvbnRyaWJ1dGlvbiBmb3JtcyBbM10uCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVvdXQ9MzAwMCwgaW50ZXJ2
YWw9MTAwKSB7CiAgICAgICAgIC8qKgogICAgICAgICAgKiBQb2xsIGZvciBhIGZ1bmN0aW9uIHRv
IHJldHVybiB0cnVlLCBhbmQgaW52b2tlIGEgY2FsbGJhY2sKLSAgICAgICAgICogZm9sbG93ZWQg
dGhpcy5kb25lKCkgb25jZSBpdCBkb2VzLCBvciBhc3NlcnQgaWYgYSB0aW1lb3V0CisgICAgICAg
ICAqIGZvbGxvd2VkIGJ5IHRoaXMuZG9uZSgpIG9uY2UgaXQgZG9lcywgb3IgYXNzZXJ0IGlmIGEg
dGltZW91dAogICAgICAgICAgKiBpcyByZWFjaGVkLiBUaGlzIGlzIHByZWZlcnJlZCBvdmVyIGEg
c2ltcGxlIHN0ZXBfdGltZW91dAogICAgICAgICAgKiB3aGVuZXZlciBwb3NzaWJsZSBzaW5jZSBp
dCBhbGxvd3MgdGhlIHRpbWVvdXQgdG8gYmUgbG9uZ2VyCiAgICAgICAgICAqIHRvIHJlZHVjZSBp
bnRlcm1pdHRlbnRzIHdpdGhvdXQgY29tcHJvbWlzaW5nIHRlc3QgZXhlY3V0aW9uIHNwZWVkCkBA
IC0zNzczLDcgKzM4NDAsNyBAQCBwb2xpY2llcyBhbmQgY29udHJpYnV0aW9uIGZvcm1zIFszXS4K
ICAgICBmdW5jdGlvbiBnZXRfdGl0bGUoKQogICAgIHsKICAgICAgICAgaWYgKCdkb2N1bWVudCcg
aW4gZ2xvYmFsX3Njb3BlKSB7Ci0gICAgICAgICAgICAvL0Rvbid0IHVzZSBkb2N1bWVudC50aXRs
ZSB0byB3b3JrIGFyb3VuZCBhbiBPcGVyYSBidWcgaW4gWEhUTUwgZG9jdW1lbnRzCisgICAgICAg
ICAgICAvL0Rvbid0IHVzZSBkb2N1bWVudC50aXRsZSB0byB3b3JrIGFyb3VuZCBhbiBPcGVyYS9Q
cmVzdG8gYnVnIGluIFhIVE1MIGRvY3VtZW50cwogICAgICAgICAgICAgdmFyIHRpdGxlID0gZG9j
dW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInRpdGxlIilbMF07CiAgICAgICAgICAgICBpZiAo
dGl0bGUgJiYgdGl0bGUuZmlyc3RDaGlsZCAmJiB0aXRsZS5maXJzdENoaWxkLmRhdGEpIHsKICAg
ICAgICAgICAgICAgICByZXR1cm4gdGl0bGUuZmlyc3RDaGlsZC5kYXRhOwpAQCAtMzk5OCw1ICs0
MDY1LDUgQEAgc3Bhbi5vaywgc3Bhbi50aW1lb3V0LCBzcGFuLmVycm9yIHtcCiB9XAogIjsKIAot
fSkodGhpcyk7Cit9KShzZWxmKTsKIC8vIHZpbTogc2V0IGV4cGFuZHRhYiBzaGlmdHdpZHRoPTQg
dGFic3RvcD00OgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0
Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdzNjLWltcG9ydC5sb2cgYi9MYXlvdXRUZXN0cy9pbXBvcnRl
ZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy93M2MtaW1wb3J0LmxvZwppbmRleCA3
Yjg2YzNjZTNmMzdhYjhhMTc0ZWExNjA0NDZmNTY3NWVmMDYxZTA1Li4wNmFlZDQzZTIwNDhjNzM2
ZTg0ZDFjOTYwYTJjNmMyZmUzOWJkZGZkIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9pbXBvcnRl
ZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy93M2MtaW1wb3J0LmxvZworKysgYi9M
YXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy93M2Mt
aW1wb3J0LmxvZwpAQCAtMjQsNiArMjQsOCBAQCBMaXN0IG9mIGZpbGVzOgogL0xheW91dFRlc3Rz
L2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3NyaWhhcm5lc3MuanMK
IC9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90
ZXN0LW9ubHktYXBpLmpzCiAvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10
ZXN0cy9yZXNvdXJjZXMvdGVzdC1vbmx5LWFwaS5qcy5oZWFkZXJzCisvTGF5b3V0VGVzdHMvaW1w
b3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC1vbmx5LWFwaS5tLmpz
CisvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMv
dGVzdC1vbmx5LWFwaS5tLmpzLmhlYWRlcnMKIC9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2Vi
LXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0ZHJpdmVyLWFjdGlvbnMuanMKIC9MYXlvdXRU
ZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0ZHJpdmVy
LXZlbmRvci5qcwogL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMv
cmVzb3VyY2VzL3Rlc3Rkcml2ZXItdmVuZG9yLmpzLmhlYWRlcnMKZGlmZiAtLWdpdCBhL0xheW91
dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvd2FzbS9qc2FwaS9pZGxoYXJu
ZXNzLmFueS1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRm
b3JtLXRlc3RzL3dhc20vanNhcGkvaWRsaGFybmVzcy5hbnktZXhwZWN0ZWQudHh0CmluZGV4IDFl
MDFkYmQ1YmY5MzU2MjIwNzAyOWRjMDI3NmY0ZDhiMzgxNjllYjMuLmNmMzIzYjEyMDg0YjYxNWQw
MmFlNTc1OGNlMGRjNTlmMTZjMDA3ZjUgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2ltcG9ydGVk
L3czYy93ZWItcGxhdGZvcm0tdGVzdHMvd2FzbS9qc2FwaS9pZGxoYXJuZXNzLmFueS1leHBlY3Rl
ZC50eHQKKysrIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy93
YXNtL2pzYXBpL2lkbGhhcm5lc3MuYW55LWV4cGVjdGVkLnR4dApAQCAtMSw1ICsxLDEwIEBACiAK
IFBBU1Mgd2FzbS1qcy1hcGkgaW50ZXJmYWNlcy4KK1BBU1MgV2ViQXNzZW1ibHkgbmFtZXNwYWNl
OiBleHRlbmRlZCBhdHRyaWJ1dGVzCitQQVNTIFdlYkFzc2VtYmx5IG5hbWVzcGFjZTogcHJvcGVy
dHkgZGVzY3JpcHRvcgorUEFTUyBXZWJBc3NlbWJseSBuYW1lc3BhY2U6IFtbRXh0ZW5zaWJsZV1d
IGlzIHRydWUKK1BBU1MgV2ViQXNzZW1ibHkgbmFtZXNwYWNlOiBbW1Byb3RvdHlwZV1dIGlzIE9i
amVjdC5wcm90b3R5cGUKK1BBU1MgV2ViQXNzZW1ibHkgbmFtZXNwYWNlOiB0eXBlb2YgaXMgIm9i
amVjdCIKIFBBU1MgV2ViQXNzZW1ibHkgbmFtZXNwYWNlOiBvcGVyYXRpb24gdmFsaWRhdGUoQnVm
ZmVyU291cmNlKQogUEFTUyBXZWJBc3NlbWJseSBuYW1lc3BhY2U6IG9wZXJhdGlvbiBjb21waWxl
KEJ1ZmZlclNvdXJjZSkKIFBBU1MgV2ViQXNzZW1ibHkgbmFtZXNwYWNlOiBvcGVyYXRpb24gaW5z
dGFudGlhdGUoQnVmZmVyU291cmNlLCBvcHRpb25hbCBvYmplY3QpCmRpZmYgLS1naXQgYS9MYXlv
dXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3dlYi1zaGFyZS9zaGFyZS11
cmwtaW52YWxpZC5odHRwcy5odG1sIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0
Zm9ybS10ZXN0cy93ZWItc2hhcmUvc2hhcmUtdXJsLWludmFsaWQuaHR0cHMuaHRtbAppbmRleCA1
ZWFlOGU4OTQyNmI0ODg5ZDZmOTg3YTI1ZGIyNGE4NDBkNTgzZjcxLi5jYjc2NDU4YzI0YzU2MzJm
NGE5N2QzZjhmNWE3NDRmYzQ2ZDdiNmEwIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9pbXBvcnRl
ZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3dlYi1zaGFyZS9zaGFyZS11cmwtaW52YWxpZC5odHRw
cy5odG1sCisrKyBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMv
d2ViLXNoYXJlL3NoYXJlLXVybC1pbnZhbGlkLmh0dHBzLmh0bWwKQEAgLTExLDE1ICsxMSw2NiBA
QAogICA8Ym9keT4KICAgICA8c2NyaXB0PgogICAgICAgcHJvbWlzZV90ZXN0KGFzeW5jIHQgPT4g
ewotICAgICAgICBjb25zdCB1cmwgPSAiaHR0cDovL2V4YW1wbGUuY29tOjY1NTM2IjsKLSAgICAg
ICAgYXdhaXQgdGVzdF9kcml2ZXIuYmxlc3MoCi0gICAgICAgICAgIndlYiBzaGFyZSIsCi0gICAg
ICAgICAgKCkgPT4gewotICAgICAgICAgICAgcmV0dXJuIHByb21pc2VfcmVqZWN0c19qcyh0LCBU
eXBlRXJyb3IsIG5hdmlnYXRvci5zaGFyZSh7IHVybCB9KSk7Ci0gICAgICAgICAgfSwKLSAgICAg
ICAgICAic2hhcmUgd2l0aCBhbiBpbnZhbGlkIFVSTCIKLSAgICAgICAgKTsKKyAgICAgICAgYXdh
aXQgdGVzdF9kcml2ZXIuYmxlc3MoKTsKKyAgICAgICAgY29uc3QgcHJvbWlzZSA9IG5hdmlnYXRv
ci5zaGFyZSh7IHVybDogImh0dHA6Ly9hLmNvbTo2NTUzNiIgfSk7CisgICAgICAgIHJldHVybiBw
cm9taXNlX3JlamVjdHNfanModCwgVHlwZUVycm9yLCBwcm9taXNlKTsKICAgICAgIH0sICJzaGFy
ZSgpIHJlamVjdHMgd2hlbiBVUkwgaXMgaW52YWxpZCIpOworCisgICAgICBwcm9taXNlX3Rlc3Qo
YXN5bmMgdCA9PiB7CisgICAgICAgIGF3YWl0IHRlc3RfZHJpdmVyLmJsZXNzKCk7CisgICAgICAg
IGNvbnN0IHByb21pc2UgPSBuYXZpZ2F0b3Iuc2hhcmUoeyB1cmw6ICJmaWxlOi8vL2V0Yy9wYXNz
d2QiIH0pOworICAgICAgICByZXR1cm4gcHJvbWlzZV9yZWplY3RzX2pzKHQsIFR5cGVFcnJvciwg
cHJvbWlzZSk7CisgICAgICB9LCAic2hhcmUoKSByZWplY3RzIGZpbGU6Ly8gVVJMcyIpOworCisg
ICAgICBwcm9taXNlX3Rlc3QoYXN5bmMgdCA9PiB7CisgICAgICAgIGF3YWl0IHRlc3RfZHJpdmVy
LmJsZXNzKCk7CisgICAgICAgIGNvbnN0IHByb21pc2UgPSBuYXZpZ2F0b3Iuc2hhcmUoeyB1cmw6
ICJ3c3M6Ly9hLmNvbS8iIH0pOworICAgICAgICByZXR1cm4gcHJvbWlzZV9yZWplY3RzX2pzKHQs
IFR5cGVFcnJvciwgcHJvbWlzZSk7CisgICAgICB9LCAic2hhcmUoKSByZWplY3RzIHdzczogVVJM
cyIpOworCisgICAgICBwcm9taXNlX3Rlc3QoYXN5bmMgdCA9PiB7CisgICAgICAgIGF3YWl0IHRl
c3RfZHJpdmVyLmJsZXNzKCk7CisgICAgICAgIGNvbnN0IHByb21pc2UgPSBuYXZpZ2F0b3Iuc2hh
cmUoeyB1cmw6ICJhYm91dDpjb25maWciIH0pOworICAgICAgICByZXR1cm4gcHJvbWlzZV9yZWpl
Y3RzX2pzKHQsIFR5cGVFcnJvciwgcHJvbWlzZSk7CisgICAgICB9LCAic2hhcmUoKSByZWplY3Rz
IGFib3V0OiBVUkxzIik7CisKKyAgICAgIHByb21pc2VfdGVzdChhc3luYyB0ID0+IHsKKyAgICAg
ICAgYXdhaXQgdGVzdF9kcml2ZXIuYmxlc3MoKTsKKyAgICAgICAgY29uc3QgcHJvbWlzZSA9IG5h
dmlnYXRvci5zaGFyZSh7IHVybDogImNocm9tZTovL2Fib3V0IiB9KTsKKyAgICAgICAgcmV0dXJu
IHByb21pc2VfcmVqZWN0c19qcyh0LCBUeXBlRXJyb3IsIHByb21pc2UpOworICAgICAgfSwgInNo
YXJlKCkgcmVqZWN0cyBjaHJvbWU6IFVSTHMiKTsKKworICAgICAgcHJvbWlzZV90ZXN0KGFzeW5j
IHQgPT4geworICAgICAgICBhd2FpdCB0ZXN0X2RyaXZlci5ibGVzcygpOworICAgICAgICBjb25z
dCBwcm9taXNlID0gbmF2aWdhdG9yLnNoYXJlKHsgdXJsOiAiamF2YXNjcmlwdDp3aW5kb3cuYWxl
cnQoJ2Vycm9yJykiIH0pOworICAgICAgICByZXR1cm4gcHJvbWlzZV9yZWplY3RzX2pzKHQsIFR5
cGVFcnJvciwgcHJvbWlzZSk7CisgICAgICB9LCAic2hhcmUoKSByZWplY3RzIGphdmFzY3JpcHQ6
IFVSTHMiKTsKKworICAgICAgcHJvbWlzZV90ZXN0KGFzeW5jIHQgPT4geworICAgICAgICBhd2Fp
dCB0ZXN0X2RyaXZlci5ibGVzcygpOworICAgICAgICBjb25zdCBmaWxlID0gbmV3IEZpbGUoW10s
ICJ0ZXh0L3BsYWluIik7CisgICAgICAgIGNvbnN0IHByb21pc2UgPSBuYXZpZ2F0b3Iuc2hhcmUo
eyB1cmw6IFVSTC5jcmVhdGVPYmplY3RVUkwoZmlsZSkgfSk7CisgICAgICAgIHJldHVybiBwcm9t
aXNlX3JlamVjdHNfanModCwgVHlwZUVycm9yLCBwcm9taXNlKTsKKyAgICAgIH0sICJzaGFyZSgp
IHJlamVjdHMgYmxvYjogVVJMcyIpOworCisgICAgICBwcm9taXNlX3Rlc3QoYXN5bmMgdCA9PiB7
CisgICAgICAgIGNvbnN0IGVuY29kZXIgPSBuZXcgVGV4dEVuY29kZXIoKTsKKyAgICAgICAgY29u
c3QgZW5jb2RlZCA9IGVuY29kZXIuZW5jb2RlKAorICAgICAgICAgIGA8bWV0YSBodHRwLWVxdWl2
PSJyZWZyZXNoIiBjb250ZW50PSIxO3VybD1odHRwOi8vZXhhbXBsZS5jb20vIj5gCisgICAgICAg
ICk7CisgICAgICAgIGNvbnN0IGZpbGUgPSBuZXcgRmlsZShlbmNvZGVkLCAidGV4dC9odG1sIik7
CisgICAgICAgIGNvbnN0IHVybCA9IFVSTC5jcmVhdGVPYmplY3RVUkwoZmlsZSk7CisgICAgICAg
IGNvbnN0IHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7CisgICAgICAgIHJlYWRlci5yZWFkQXNE
YXRhVVJMKGZpbGUpOworICAgICAgICBjb25zdCBkYXRhVVJMID0gYXdhaXQgbmV3IFByb21pc2Uo
cmVzb2x2ZSA9PiB7CisgICAgICAgICAgcmVhZGVyLmFkZEV2ZW50TGlzdGVuZXIoImxvYWQiLCAo
KSA9PiB7CisgICAgICAgICAgICByZXNvbHZlKHJlYWRlci5yZXN1bHQpOworICAgICAgICAgIH0p
OworICAgICAgICB9KTsKKyAgICAgICAgYXdhaXQgdGVzdF9kcml2ZXIuYmxlc3MoKTsKKyAgICAg
ICAgY29uc3QgcHJvbWlzZSA9IG5hdmlnYXRvci5zaGFyZSh7IHVybDogZGF0YVVSTCB9KTsKKyAg
ICAgICAgcmV0dXJuIHByb21pc2VfcmVqZWN0c19qcyh0LCBUeXBlRXJyb3IsIHByb21pc2UpOwor
ICAgICAgfSwgInNoYXJlKCkgcmVqZWN0cyBkYXRhOiBVUkxzIik7CiAgICAgPC9zY3JpcHQ+CiAg
IDwvYm9keT4KIDwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93
ZWItcGxhdGZvcm0tdGVzdHMvd2VicnRjL1JUQ1BlZXJDb25uZWN0aW9uLWdldFN0YXRzLmh0dHBz
Lmh0bWwgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3dlYnJ0
Yy9SVENQZWVyQ29ubmVjdGlvbi1nZXRTdGF0cy5odHRwcy5odG1sCmluZGV4IGJkZjc3NzAzNTBl
OTlmZTZiNzMwZDNlOTEyNTVmNDlmMzA5NjFlZDAuLmVkZTBhYjFlZmMxMDc5OWQxMjQ3MzQzN2U1
M2YyZWM1NTVhYTYyNWYgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWIt
cGxhdGZvcm0tdGVzdHMvd2VicnRjL1JUQ1BlZXJDb25uZWN0aW9uLWdldFN0YXRzLmh0dHBzLmh0
bWwKKysrIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy93ZWJy
dGMvUlRDUGVlckNvbm5lY3Rpb24tZ2V0U3RhdHMuaHR0cHMuaHRtbApAQCAtODIsNyArODIsNyBA
QAogICAgIGNvbnN0IHBjID0gbmV3IFJUQ1BlZXJDb25uZWN0aW9uKCk7CiAgICAgdC5hZGRfY2xl
YW51cCgoKSA9PiBwYy5jbG9zZSgpKTsKIAotICAgIGNvbnN0IHN0cmVhbSA9IGF3YWl0IG5hdmln
YXRvci5tZWRpYURldmljZXMuZ2V0VXNlck1lZGlhKHthdWRpbzogdHJ1ZX0pOworICAgIGNvbnN0
IHN0cmVhbSA9IGF3YWl0IGdldE5vaXNlU3RyZWFtKHthdWRpbzogdHJ1ZX0pOwogICAgIHQuYWRk
X2NsZWFudXAoKCkgPT4gc3RyZWFtLmdldFRyYWNrcygpLmZvckVhY2godHJhY2sgPT4gdHJhY2su
c3RvcCgpKSk7CiAgICAgY29uc3QgW3RyYWNrXSA9IHN0cmVhbS5nZXRUcmFja3MoKTsKICAgICBw
Yy5hZGRUcmFuc2NlaXZlcih0cmFjayk7CkBAIC0yNDcsNyArMjQ3LDcgQEAKIAogICAgIGNvbnN0
IGRhdGFDaGFubmVsID0gcGMxLmNyZWF0ZURhdGFDaGFubmVsKCd0ZXN0LWNoYW5uZWwnKTsKIAot
ICAgIHJldHVybiBnZXROb2lzZVN0cmVhbSh7CisgICAgZ2V0Tm9pc2VTdHJlYW0oewogICAgICAg
YXVkaW86IHRydWUsCiAgICAgICB2aWRlbzogdHJ1ZQogICAgIH0pCkBAIC0yOTIsOSArMjkyLDYg
QEAKICAgICAgICAgICAnRXhwZWN0IHZpZGVvIHRyYWNrIHN0YXRzIHRvIGJlIGZvdW5kJyk7CiAK
ICAgICAgICAgYXNzZXJ0X2VxdWFscyh2aWRlb1RyYWNrU3RhdHMua2luZCwgJ3ZpZGVvJyk7Ci0K
LSAgICAgICAgYXNzZXJ0X3RydWUobWVkaWFTdHJlYW1TdGF0cy50cmFja0lkcy5pbmNsdWRlKGF1
ZGlvVHJhY2tTdGF0cy5pZCkpOwotICAgICAgICBhc3NlcnRfdHJ1ZShtZWRpYVN0cmVhbVN0YXRz
LnRyYWNrSWRzLmluY2x1ZGUodmlkZW9UcmFja1N0YXRzLmlkKSk7CiAgICAgICB9CiAKICAgICAg
IGNvbnN0IG9uQ29ubmVjdGVkID0gdC5zdGVwX2Z1bmMoKCkgPT4gewpkaWZmIC0tZ2l0IGEvTGF5
b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy93ZWJydGMvUlRDUGVlckNv
bm5lY3Rpb24tc2V0UmVtb3RlRGVzY3JpcHRpb24tcmVwbGFjZVRyYWNrLmh0dHBzLmh0bWwgYi9M
YXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3dlYnJ0Yy9SVENQZWVy
Q29ubmVjdGlvbi1zZXRSZW1vdGVEZXNjcmlwdGlvbi1yZXBsYWNlVHJhY2suaHR0cHMuaHRtbApp
bmRleCA0YmRjZGRlYzUxMTVjM2Q5Yzk1Mzg1OTk1MDg1NGIzZWM5N2ZiYmVmLi4yMTczMjZiZmFl
MjJmMTNjYTZkY2UyODc0ZDhkMDFkMTA2YWQ3Mzc4IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9p
bXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3dlYnJ0Yy9SVENQZWVyQ29ubmVjdGlvbi1z
ZXRSZW1vdGVEZXNjcmlwdGlvbi1yZXBsYWNlVHJhY2suaHR0cHMuaHRtbAorKysgYi9MYXlvdXRU
ZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3dlYnJ0Yy9SVENQZWVyQ29ubmVj
dGlvbi1zZXRSZW1vdGVEZXNjcmlwdGlvbi1yZXBsYWNlVHJhY2suaHR0cHMuaHRtbApAQCAtMTMs
NyArMTMsNyBAQAogICBhc3luY190ZXN0KHQgPT4gewogICAgIGNvbnN0IGNhbGxlciA9IG5ldyBS
VENQZWVyQ29ubmVjdGlvbigpOwogICAgIHQuYWRkX2NsZWFudXAoKCkgPT4gY2FsbGVyLmNsb3Nl
KCkpOwotICAgIHJldHVybiBnZXRVc2VyTWVkaWFUcmFja3NBbmRTdHJlYW1zKDIpCisgICAgZ2V0
VXNlck1lZGlhVHJhY2tzQW5kU3RyZWFtcygyKQogICAgIC50aGVuKHQuc3RlcF9mdW5jKChbdHJh
Y2tzLCBzdHJlYW1zXSkgPT4gewogICAgICAgY29uc3Qgc2VuZGVyID0gY2FsbGVyLmFkZFRyYWNr
KHRyYWNrc1swXSwgc3RyZWFtc1swXSk7CiAgICAgICByZXR1cm4gc2VuZGVyLnJlcGxhY2VUcmFj
ayh0cmFja3NbMV0pCkBAIC0zMCw3ICszMCw3IEBACiAgIGFzeW5jX3Rlc3QodCA9PiB7CiAgICAg
Y29uc3QgY2FsbGVyID0gbmV3IFJUQ1BlZXJDb25uZWN0aW9uKCk7CiAgICAgdC5hZGRfY2xlYW51
cCgoKSA9PiBjYWxsZXIuY2xvc2UoKSk7Ci0gICAgcmV0dXJuIGdldFVzZXJNZWRpYVRyYWNrc0Fu
ZFN0cmVhbXMoMSkKKyAgICBnZXRVc2VyTWVkaWFUcmFja3NBbmRTdHJlYW1zKDEpCiAgICAgLnRo
ZW4odC5zdGVwX2Z1bmMoKFt0cmFja3MsIHN0cmVhbXNdKSA9PiB7CiAgICAgICBjb25zdCBzZW5k
ZXIgPSBjYWxsZXIuYWRkVHJhY2sodHJhY2tzWzBdLCBzdHJlYW1zWzBdKTsKICAgICAgIHJldHVy
biBzZW5kZXIucmVwbGFjZVRyYWNrKG51bGwpCkBAIC00Nyw3ICs0Nyw3IEBACiAgIGFzeW5jX3Rl
c3QodCA9PiB7CiAgICAgY29uc3QgY2FsbGVyID0gbmV3IFJUQ1BlZXJDb25uZWN0aW9uKCk7CiAg
ICAgdC5hZGRfY2xlYW51cCgoKSA9PiBjYWxsZXIuY2xvc2UoKSk7Ci0gICAgcmV0dXJuIGdldFVz
ZXJNZWRpYVRyYWNrc0FuZFN0cmVhbXMoMikKKyAgICBnZXRVc2VyTWVkaWFUcmFja3NBbmRTdHJl
YW1zKDIpCiAgICAgLnRoZW4odC5zdGVwX2Z1bmMoKFt0cmFja3MsIHN0cmVhbXNdKSA9PiB7CiAg
ICAgICBjb25zdCBzZW5kZXIgPSBjYWxsZXIuYWRkVHJhY2sodHJhY2tzWzBdLCBzdHJlYW1zWzBd
KTsKICAgICAgIGFzc2VydF9lcXVhbHMoc2VuZGVyLnRyYWNrLCB0cmFja3NbMF0pOwpAQCAtNjYs
NyArNjYsNyBAQAogICAgIGNvbnN0IGV4cGVjdGVkRXhjZXB0aW9uID0gJ0ludmFsaWRTdGF0ZUVy
cm9yJzsKICAgICBjb25zdCBjYWxsZXIgPSBuZXcgUlRDUGVlckNvbm5lY3Rpb24oKTsKICAgICB0
LmFkZF9jbGVhbnVwKCgpID0+IGNhbGxlci5jbG9zZSgpKTsKLSAgICByZXR1cm4gZ2V0VXNlck1l
ZGlhVHJhY2tzQW5kU3RyZWFtcygyKQorICAgIGdldFVzZXJNZWRpYVRyYWNrc0FuZFN0cmVhbXMo
MikKICAgICAudGhlbih0LnN0ZXBfZnVuYygoW3RyYWNrcywgc3RyZWFtc10pID0+IHsKICAgICAg
IGNvbnN0IHNlbmRlciA9IGNhbGxlci5hZGRUcmFjayh0cmFja3NbMF0sIHN0cmVhbXNbMF0pOwog
ICAgICAgY2FsbGVyLmNsb3NlKCk7CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93
M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3dlYnJ0Yy9SVENQZWVyQ29ubmVjdGlvbi10cmFjay1zdGF0
cy5odHRwcy1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRm
b3JtLXRlc3RzL3dlYnJ0Yy9SVENQZWVyQ29ubmVjdGlvbi10cmFjay1zdGF0cy5odHRwcy1leHBl
Y3RlZC50eHQKaW5kZXggYzRjMWM4MDIyOTEyY2YxMTY3YTJhNWU1MTRjMGE0ZmJiYzA4OTQ2MC4u
ZmM1YzQ0YjFlYzI3OWVkMWQ5YzVlYWRkZGM1ZGIyYmRiZjJmMWFiZCAxMDA2NDQKLS0tIGEvTGF5
b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy93ZWJydGMvUlRDUGVlckNv
bm5lY3Rpb24tdHJhY2stc3RhdHMuaHR0cHMtZXhwZWN0ZWQudHh0CisrKyBiL0xheW91dFRlc3Rz
L2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvd2VicnRjL1JUQ1BlZXJDb25uZWN0aW9u
LXRyYWNrLXN0YXRzLmh0dHBzLWV4cGVjdGVkLnR4dApAQCAtMSwxMCArMSw2IEBACiAKIFBBU1Mg
YWRkVHJhY2soKSB3aXRob3V0IHNldExvY2FsRGVzY3JpcHRpb24oKSB5aWVsZHMgdHJhY2sgc3Rh
dHMKLUZBSUwgYWRkVHJhY2soKSB3aXRob3V0IHNldExvY2FsRGVzY3JpcHRpb24oKSB5aWVsZHMg
bWVkaWEgc3RyZWFtIHN0YXRzIGFzc2VydF90cnVlOiBIYXMgc3RhdHMgZm9yIHN0cmVhbSBleHBl
Y3RlZCB0cnVlIGdvdCBmYWxzZQogUEFTUyBhZGRUcmFjaygpIHdpdGggc2V0TG9jYWxEZXNjcmlw
dGlvbigpIHlpZWxkcyB0cmFjayBzdGF0cwotRkFJTCBhZGRUcmFjaygpIHdpdGggc2V0TG9jYWxE
ZXNjcmlwdGlvbigpIHlpZWxkcyBtZWRpYSBzdHJlYW0gc3RhdHMgYXNzZXJ0X3RydWU6IEhhcyBz
dGF0cyBmb3Igc3RyZWFtIGV4cGVjdGVkIHRydWUgZ290IGZhbHNlCi1GQUlMIGFkZFRyYWNrKCk6
IE1lZGlhIHN0cmVhbSBzdGF0cyByZWZlcmVuY2VzIHRyYWNrIHN0YXRzIGFzc2VydF90cnVlOiBI
YXMgc3RhdHMgZm9yIHRyYWNrIGFuZCBzdHJlYW0gZXhwZWN0ZWQgdHJ1ZSBnb3QgZmFsc2UKLUZB
SUwgTWVkaWEgc3RyZWFtIHN0YXRzIHJlZmVyZW5jZXMgdHJhY2sgc3RhdHMgYXNzZXJ0X3RydWU6
IEhhcyBzdGF0cyBmb3IgdHJhY2sgYW5kIHN0cmVhbSBleHBlY3RlZCB0cnVlIGdvdCBmYWxzZQog
UEFTUyBPL0EgZXhjaGFuZ2UgeWllbGRzIG91dGJvdW5kIFJUUCBzdHJlYW0gc3RhdHMgZm9yIHNl
bmRpbmcgdHJhY2sKIFBBU1MgTy9BIGV4Y2hhbmdlIHlpZWxkcyBpbmJvdW5kIFJUUCBzdHJlYW0g
c3RhdHMgZm9yIHJlY2VpdmluZyB0cmFjawogUEFTUyByZXBsYWNlVHJhY2soKSBiZWZvcmUgb2Zm
ZXI6IG5ldyB0cmFjayBhdHRhY2htZW50IHN0YXRzIHByZXNlbnQKZGlmZiAtLWdpdCBhL0xheW91
dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvd2VicnRjL1JUQ1BlZXJDb25u
ZWN0aW9uLXRyYWNrLXN0YXRzLmh0dHBzLmh0bWwgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mv
d2ViLXBsYXRmb3JtLXRlc3RzL3dlYnJ0Yy9SVENQZWVyQ29ubmVjdGlvbi10cmFjay1zdGF0cy5o
dHRwcy5odG1sCmluZGV4IDgzYzlmMTkxNmNkMDJhNWU5MTAzMWU0ZTYxODMxOTYyOGRhNTJjY2Mu
LjdjMzQ0MjIzMDI5OTc4ZjJiMGRlMTBjZTZkOGVkZmFmNDg5MDkwMjkgMTAwNjQ0Ci0tLSBhL0xh
eW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvd2VicnRjL1JUQ1BlZXJD
b25uZWN0aW9uLXRyYWNrLXN0YXRzLmh0dHBzLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvaW1wb3J0
ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy93ZWJydGMvUlRDUGVlckNvbm5lY3Rpb24tdHJhY2st
c3RhdHMuaHR0cHMuaHRtbApAQCAtMjMsNyArMjMsNyBAQAogICAgIGNvbnN0IHBjID0gbmV3IFJU
Q1BlZXJDb25uZWN0aW9uKCk7CiAgICAgdC5hZGRfY2xlYW51cCgoKSA9PiBwYy5jbG9zZSgpKTsK
ICAgICBsZXQgdHJhY2s7Ci0gICAgcmV0dXJuIGdldFVzZXJNZWRpYVRyYWNrc0FuZFN0cmVhbXMo
MSkKKyAgICBnZXRVc2VyTWVkaWFUcmFja3NBbmRTdHJlYW1zKDEpCiAgICAgLnRoZW4odC5zdGVw
X2Z1bmMoKFt0cmFja3MsIHN0cmVhbXNdKSA9PiB7CiAgICAgICB0LmFkZF9jbGVhbnVwKCgpID0+
IHRyYWNrcy5mb3JFYWNoKHRyYWNrID0+IHRyYWNrLnN0b3AoKSkpOwogICAgICAgdHJhY2sgPSB0
cmFja3NbMF07CkBAIC00OCwzMSArNDgsOSBAQAogICBhc3luY190ZXN0KHQgPT4gewogICAgIGNv
bnN0IHBjID0gbmV3IFJUQ1BlZXJDb25uZWN0aW9uKCk7CiAgICAgdC5hZGRfY2xlYW51cCgoKSA9
PiBwYy5jbG9zZSgpKTsKLSAgICBsZXQgc3RyZWFtOwotICAgIHJldHVybiBnZXRVc2VyTWVkaWFU
cmFja3NBbmRTdHJlYW1zKDEpCi0gICAgLnRoZW4odC5zdGVwX2Z1bmMoKFt0cmFja3MsIHN0cmVh
bXNdKSA9PiB7Ci0gICAgICB0LmFkZF9jbGVhbnVwKCgpID0+IHRyYWNrcy5mb3JFYWNoKHRyYWNr
ID0+IHRyYWNrLnN0b3AoKSkpOwotICAgICAgbGV0IHRyYWNrID0gdHJhY2tzWzBdOwotICAgICAg
c3RyZWFtID0gc3RyZWFtc1swXTsKLSAgICAgIHBjLmFkZFRyYWNrKHRyYWNrLCBzdHJlYW0pOwot
ICAgICAgcmV0dXJuIHBjLmdldFN0YXRzKCk7Ci0gICAgfSkpCi0gICAgLnRoZW4odC5zdGVwX2Z1
bmMocmVwb3J0ID0+IHsKLSAgICAgIGxldCBzdHJlYW1TdGF0cyA9IGZpbmRTdGF0c0J5VHlwZUFu
ZElkKHJlcG9ydCwgJ3N0cmVhbScsIHN0cmVhbS5pZCk7Ci0gICAgICBhc3NlcnRfdHJ1ZShzdHJl
YW1TdGF0cyAhPSBudWxsLCAnSGFzIHN0YXRzIGZvciBzdHJlYW0nKTsKLSAgICAgIHZhbGlkYXRl
UnRjU3RhdHMocmVwb3J0LCBzdHJlYW1TdGF0cyk7Ci0gICAgICB0LmRvbmUoKTsKLSAgICB9KSkK
LSAgICAuY2F0Y2godC5zdGVwX2Z1bmMocmVhc29uID0+IHsKLSAgICAgIGFzc2VydF91bnJlYWNo
ZWQocmVhc29uKTsKLSAgICB9KSk7Ci0gIH0sICdhZGRUcmFjaygpIHdpdGhvdXQgc2V0TG9jYWxE
ZXNjcmlwdGlvbigpIHlpZWxkcyBtZWRpYSBzdHJlYW0gc3RhdHMnKTsKIAotICBhc3luY190ZXN0
KHQgPT4gewotICAgIGNvbnN0IHBjID0gbmV3IFJUQ1BlZXJDb25uZWN0aW9uKCk7Ci0gICAgdC5h
ZGRfY2xlYW51cCgoKSA9PiBwYy5jbG9zZSgpKTsKICAgICBsZXQgdHJhY2s7Ci0gICAgcmV0dXJu
IGdldFVzZXJNZWRpYVRyYWNrc0FuZFN0cmVhbXMoMSkKKyAgICBnZXRVc2VyTWVkaWFUcmFja3NB
bmRTdHJlYW1zKDEpCiAgICAgLnRoZW4odC5zdGVwX2Z1bmMoKFt0cmFja3MsIHN0cmVhbXNdKSA9
PiB7CiAgICAgICB0LmFkZF9jbGVhbnVwKCgpID0+IHRyYWNrcy5mb3JFYWNoKHRyYWNrID0+IHRy
YWNrLnN0b3AoKSkpOwogICAgICAgdHJhY2sgPSB0cmFja3NbMF07CkBAIC05NiwxMTQgKzc0LDEz
IEBACiAgICAgfSkpOwogICB9LCAnYWRkVHJhY2soKSB3aXRoIHNldExvY2FsRGVzY3JpcHRpb24o
KSB5aWVsZHMgdHJhY2sgc3RhdHMnKTsKIAotICBhc3luY190ZXN0KHQgPT4gewotICAgIGNvbnN0
IHBjID0gbmV3IFJUQ1BlZXJDb25uZWN0aW9uKCk7Ci0gICAgdC5hZGRfY2xlYW51cCgoKSA9PiBw
Yy5jbG9zZSgpKTsKLSAgICBsZXQgc3RyZWFtOwotICAgIHJldHVybiBnZXRVc2VyTWVkaWFUcmFj
a3NBbmRTdHJlYW1zKDEpCi0gICAgLnRoZW4odC5zdGVwX2Z1bmMoKFt0cmFja3MsIHN0cmVhbXNd
KSA9PiB7Ci0gICAgICB0LmFkZF9jbGVhbnVwKCgpID0+IHRyYWNrcy5mb3JFYWNoKHRyYWNrID0+
IHRyYWNrLnN0b3AoKSkpOwotICAgICAgbGV0IHRyYWNrID0gdHJhY2tzWzBdOwotICAgICAgc3Ry
ZWFtID0gc3RyZWFtc1swXTsKLSAgICAgIHBjLmFkZFRyYWNrKHRyYWNrLCBzdHJlYW0pOwotICAg
ICAgcmV0dXJuIHBjLmNyZWF0ZU9mZmVyKCk7Ci0gICAgfSkpCi0gICAgLnRoZW4odC5zdGVwX2Z1
bmMob2ZmZXIgPT4gewotICAgICAgcmV0dXJuIHBjLnNldExvY2FsRGVzY3JpcHRpb24ob2ZmZXIp
OwotICAgIH0pKQotICAgIC50aGVuKHQuc3RlcF9mdW5jKCgpID0+IHsKLSAgICAgIHJldHVybiBw
Yy5nZXRTdGF0cygpOwotICAgIH0pKQotICAgIC50aGVuKHQuc3RlcF9mdW5jKHJlcG9ydCA9PiB7
Ci0gICAgICBsZXQgc3RyZWFtU3RhdHMgPSBmaW5kU3RhdHNCeVR5cGVBbmRJZChyZXBvcnQsICdz
dHJlYW0nLCBzdHJlYW0uaWQpOwotICAgICAgYXNzZXJ0X3RydWUoc3RyZWFtU3RhdHMgIT0gbnVs
bCwgJ0hhcyBzdGF0cyBmb3Igc3RyZWFtJyk7Ci0gICAgICB2YWxpZGF0ZVJ0Y1N0YXRzKHJlcG9y
dCwgc3RyZWFtU3RhdHMpOwotICAgICAgdC5kb25lKCk7Ci0gICAgfSkpCi0gICAgLmNhdGNoKHQu
c3RlcF9mdW5jKHJlYXNvbiA9PiB7Ci0gICAgICBhc3NlcnRfdW5yZWFjaGVkKHJlYXNvbik7Ci0g
ICAgfSkpOwotICB9LCAnYWRkVHJhY2soKSB3aXRoIHNldExvY2FsRGVzY3JpcHRpb24oKSB5aWVs
ZHMgbWVkaWEgc3RyZWFtIHN0YXRzJyk7Ci0KLSAgYXN5bmNfdGVzdCh0ID0+IHsKLSAgICBjb25z
dCBwYyA9IG5ldyBSVENQZWVyQ29ubmVjdGlvbigpOwotICAgIHQuYWRkX2NsZWFudXAoKCkgPT4g
cGMuY2xvc2UoKSk7Ci0gICAgbGV0IHRyYWNrOwotICAgIGxldCBzdHJlYW07Ci0gICAgcmV0dXJu
IGdldFVzZXJNZWRpYVRyYWNrc0FuZFN0cmVhbXMoMSkKLSAgICAudGhlbih0LnN0ZXBfZnVuYygo
W3RyYWNrcywgc3RyZWFtc10pID0+IHsKLSAgICAgIHQuYWRkX2NsZWFudXAoKCkgPT4gdHJhY2tz
LmZvckVhY2godHJhY2sgPT4gdHJhY2suc3RvcCgpKSk7Ci0gICAgICB0cmFjayA9IHRyYWNrc1sw
XTsKLSAgICAgIHN0cmVhbSA9IHN0cmVhbXNbMF07Ci0gICAgICBwYy5hZGRUcmFjayh0cmFjaywg
c3RyZWFtKTsKLSAgICAgIHJldHVybiBwYy5jcmVhdGVPZmZlcigpOwotICAgIH0pKQotICAgIC50
aGVuKHQuc3RlcF9mdW5jKG9mZmVyID0+IHsKLSAgICAgIHJldHVybiBwYy5zZXRMb2NhbERlc2Ny
aXB0aW9uKG9mZmVyKTsKLSAgICB9KSkKLSAgICAudGhlbih0LnN0ZXBfZnVuYygoKSA9PiB7Ci0g
ICAgICByZXR1cm4gcGMuZ2V0U3RhdHMoKTsKLSAgICB9KSkKLSAgICAudGhlbih0LnN0ZXBfZnVu
YyhyZXBvcnQgPT4gewotICAgICAgbGV0IHRyYWNrU3RhdHMgPSBmaW5kU3RhdHNCeVR5cGVBbmRJ
ZChyZXBvcnQsICd0cmFjaycsIHRyYWNrLmlkKTsKLSAgICAgIGxldCBzdHJlYW1TdGF0cyA9IGZp
bmRTdGF0c0J5VHlwZUFuZElkKHJlcG9ydCwgJ3N0cmVhbScsIHN0cmVhbS5pZCk7Ci0gICAgICBh
c3NlcnRfdHJ1ZSh0cmFja1N0YXRzICE9IG51bGwgJiYgc3RyZWFtU3RhdHMgIT0gbnVsbCwKLSAg
ICAgICAgICAgICAgICAgICdIYXMgc3RhdHMgZm9yIHRyYWNrIGFuZCBzdHJlYW0nKTsKLSAgICAg
IGFzc2VydF9hcnJheV9lcXVhbHMoc3RyZWFtU3RhdHMudHJhY2tJZHMsIFsgdHJhY2tTdGF0cy5p
ZCBdLAotICAgICAgICAgICAgICAgICAgICAgICAgICAnc3RyZWFtU3RhdHMudHJhY2tJZHMgPT0g
WyB0cmFja1N0YXRzLmlkIF0nKTsKLSAgICAgIHZhbGlkYXRlUnRjU3RhdHMocmVwb3J0LCB0cmFj
a1N0YXRzKTsKLSAgICAgIHZhbGlkYXRlUnRjU3RhdHMocmVwb3J0LCBzdHJlYW1TdGF0cyk7Ci0g
ICAgICB0LmRvbmUoKTsKLSAgICB9KSkKLSAgICAuY2F0Y2godC5zdGVwX2Z1bmMocmVhc29uID0+
IHsKLSAgICAgIGFzc2VydF91bnJlYWNoZWQocmVhc29uKTsKLSAgICB9KSk7Ci0gIH0sICdhZGRU
cmFjaygpOiBNZWRpYSBzdHJlYW0gc3RhdHMgcmVmZXJlbmNlcyB0cmFjayBzdGF0cycpOwotCi0g
IGFzeW5jX3Rlc3QodCA9PiB7Ci0gICAgY29uc3QgcGMgPSBuZXcgUlRDUGVlckNvbm5lY3Rpb24o
KTsKLSAgICB0LmFkZF9jbGVhbnVwKCgpID0+IHBjLmNsb3NlKCkpOwotICAgIGxldCB0cmFjazsK
LSAgICBsZXQgc3RyZWFtOwotICAgIHJldHVybiBnZXRVc2VyTWVkaWFUcmFja3NBbmRTdHJlYW1z
KDEpCi0gICAgLnRoZW4odC5zdGVwX2Z1bmMoKFt0cmFja3MsIHN0cmVhbXNdKSA9PiB7Ci0gICAg
ICB0LmFkZF9jbGVhbnVwKCgpID0+IHRyYWNrcy5mb3JFYWNoKHRyYWNrID0+IHRyYWNrLnN0b3Ao
KSkpOwotICAgICAgdHJhY2sgPSB0cmFja3NbMF07Ci0gICAgICBzdHJlYW0gPSBzdHJlYW1zWzBd
OwotICAgICAgc3RyZWFtLmFkZFRyYWNrKHRyYWNrKTsKLSAgICAgIGZvciAoY29uc3QgdHJhY2sg
b2Ygc3RyZWFtLmdldFRyYWNrcygpKQotICAgICAgICBwYy5hZGRUcmFjayh0cmFjaywgc3RyZWFt
KTsKLSAgICAgIHJldHVybiBwYy5jcmVhdGVPZmZlcigpOwotICAgIH0pKQotICAgIC50aGVuKHQu
c3RlcF9mdW5jKG9mZmVyID0+IHsKLSAgICAgIHJldHVybiBwYy5zZXRMb2NhbERlc2NyaXB0aW9u
KG9mZmVyKTsKLSAgICB9KSkKLSAgICAudGhlbih0LnN0ZXBfZnVuYygoKSA9PiB7Ci0gICAgICBy
ZXR1cm4gcGMuZ2V0U3RhdHMoKTsKLSAgICB9KSkKLSAgICAudGhlbih0LnN0ZXBfZnVuYyhyZXBv
cnQgPT4gewotICAgICAgbGV0IHRyYWNrU3RhdHMgPSBmaW5kU3RhdHNCeVR5cGVBbmRJZChyZXBv
cnQsICd0cmFjaycsIHRyYWNrLmlkKTsKLSAgICAgIGxldCBzdHJlYW1TdGF0cyA9IGZpbmRTdGF0
c0J5VHlwZUFuZElkKHJlcG9ydCwgJ3N0cmVhbScsIHN0cmVhbS5pZCk7Ci0gICAgICBhc3NlcnRf
dHJ1ZSh0cmFja1N0YXRzICE9IG51bGwgJiYgc3RyZWFtU3RhdHMgIT0gbnVsbCwKLSAgICAgICAg
ICAgICAgICAgICdIYXMgc3RhdHMgZm9yIHRyYWNrIGFuZCBzdHJlYW0nKTsKLSAgICAgIGFzc2Vy
dF9hcnJheV9lcXVhbHMoc3RyZWFtU3RhdHMudHJhY2tJZHMsIFsgdHJhY2tTdGF0cy5pZCBdLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAnc3RyZWFtU3RhdHMudHJhY2tJZHMgPT0gWyB0cmFj
a1N0YXRzLmlkIF0nKTsKLSAgICAgIHZhbGlkYXRlUnRjU3RhdHMocmVwb3J0LCB0cmFja1N0YXRz
KTsKLSAgICAgIHZhbGlkYXRlUnRjU3RhdHMocmVwb3J0LCBzdHJlYW1TdGF0cyk7Ci0gICAgICB0
LmRvbmUoKTsKLSAgICB9KSkKLSAgICAuY2F0Y2godC5zdGVwX2Z1bmMocmVhc29uID0+IHsKLSAg
ICAgIGFzc2VydF91bnJlYWNoZWQocmVhc29uKTsKLSAgICB9KSk7Ci0gIH0sICdNZWRpYSBzdHJl
YW0gc3RhdHMgcmVmZXJlbmNlcyB0cmFjayBzdGF0cycpOwotCiAgIGFzeW5jX3Rlc3QodCA9PiB7
CiAgICAgY29uc3QgY2FsbGVyID0gbmV3IFJUQ1BlZXJDb25uZWN0aW9uKCk7CiAgICAgdC5hZGRf
Y2xlYW51cCgoKSA9PiBjYWxsZXIuY2xvc2UoKSk7CiAgICAgY29uc3QgY2FsbGVlID0gbmV3IFJU
Q1BlZXJDb25uZWN0aW9uKCk7CiAgICAgdC5hZGRfY2xlYW51cCgoKSA9PiBjYWxsZWUuY2xvc2Uo
KSk7CiAgICAgbGV0IHNlbmRpbmdUcmFjazsKLSAgICByZXR1cm4gZ2V0VXNlck1lZGlhVHJhY2tz
QW5kU3RyZWFtcygxKQorICAgIGdldFVzZXJNZWRpYVRyYWNrc0FuZFN0cmVhbXMoMSkKICAgICAu
dGhlbih0LnN0ZXBfZnVuYygoW3RyYWNrcywgc3RyZWFtc10pID0+IHsKICAgICAgIHQuYWRkX2Ns
ZWFudXAoKCkgPT4gdHJhY2tzLmZvckVhY2godHJhY2sgPT4gdHJhY2suc3RvcCgpKSk7CiAgICAg
ICBzZW5kaW5nVHJhY2sgPSB0cmFja3NbMF07CkBAIC0yMzUsMTAgKzExMiwxMCBAQAogICAgIHQu
YWRkX2NsZWFudXAoKCkgPT4gY2FsbGVlLmNsb3NlKCkpOwogICAgIGxldCByZWNlaXZpbmdUcmFj
azsKICAgICBjYWxsZWUub250cmFjayA9IHRyYWNrRXZlbnQgPT4gewotICAgICAgYXNzZXJ0X3Ry
dWUocmVjZWl2aW5nVHJhY2sgPT0gdW5kZWZpbmVkLCAnb250cmFjayBoYXMgbm90IGZpcmVkIGJl
Zm9yZScpOworICAgICAgYXNzZXJ0X2VxdWFscyhyZWNlaXZpbmdUcmFjaywgdW5kZWZpbmVkLCAn
b250cmFjayBoYXMgbm90IGZpcmVkIGJlZm9yZScpOwogICAgICAgcmVjZWl2aW5nVHJhY2sgPSB0
cmFja0V2ZW50LnRyYWNrOwogICAgIH07Ci0gICAgcmV0dXJuIGdldFVzZXJNZWRpYVRyYWNrc0Fu
ZFN0cmVhbXMoMSkKKyAgICBnZXRVc2VyTWVkaWFUcmFja3NBbmRTdHJlYW1zKDEpCiAgICAgLnRo
ZW4odC5zdGVwX2Z1bmMoKFt0cmFja3MsIHN0cmVhbXNdKSA9PiB7CiAgICAgICB0LmFkZF9jbGVh
bnVwKCgpID0+IHRyYWNrcy5mb3JFYWNoKHRyYWNrID0+IHRyYWNrLnN0b3AoKSkpOwogICAgICAg
Y2FsbGVyLmFkZFRyYWNrKHRyYWNrc1swXSwgc3RyZWFtc1swXSk7CkBAIC0yNzEsNyArMTQ4LDcg
QEAKICAgICBsZXQgc2VuZGluZ1RyYWNrMTsKICAgICBsZXQgc2VuZGluZ1RyYWNrMjsKICAgICBs
ZXQgc2VuZGVyOwotICAgIHJldHVybiBnZXRVc2VyTWVkaWFUcmFja3NBbmRTdHJlYW1zKDIpCisg
ICAgZ2V0VXNlck1lZGlhVHJhY2tzQW5kU3RyZWFtcygyKQogICAgIC50aGVuKHQuc3RlcF9mdW5j
KChbdHJhY2tzLCBzdHJlYW1zXSkgPT4gewogICAgICAgdC5hZGRfY2xlYW51cCgoKSA9PiB0cmFj
a3MuZm9yRWFjaCh0cmFjayA9PiB0cmFjay5zdG9wKCkpKTsKICAgICAgIHNlbmRpbmdUcmFjazEg
PSB0cmFja3NbMF07CkBAIC0zMDEsNyArMTc4LDcgQEAKICAgICBsZXQgc2VuZGluZ1RyYWNrMTsK
ICAgICBsZXQgc2VuZGluZ1RyYWNrMjsKICAgICBsZXQgc2VuZGVyOwotICAgIHJldHVybiBnZXRV
c2VyTWVkaWFUcmFja3NBbmRTdHJlYW1zKDIpCisgICAgZ2V0VXNlck1lZGlhVHJhY2tzQW5kU3Ry
ZWFtcygyKQogICAgIC50aGVuKHQuc3RlcF9mdW5jKChbdHJhY2tzLCBzdHJlYW1zXSkgPT4gewog
ICAgICAgdC5hZGRfY2xlYW51cCgoKSA9PiB0cmFja3MuZm9yRWFjaCh0cmFjayA9PiB0cmFjay5z
dG9wKCkpKTsKICAgICAgIHNlbmRpbmdUcmFjazEgPSB0cmFja3NbMF07CkBAIC0zMzksNyArMjE2
LDcgQEAKICAgICBsZXQgc2VuZGluZ1RyYWNrMTsKICAgICBsZXQgc2VuZGluZ1RyYWNrMjsKICAg
ICBsZXQgc2VuZGVyOwotICAgIHJldHVybiBnZXRVc2VyTWVkaWFUcmFja3NBbmRTdHJlYW1zKDIp
CisgICAgZ2V0VXNlck1lZGlhVHJhY2tzQW5kU3RyZWFtcygyKQogICAgIC50aGVuKHQuc3RlcF9m
dW5jKChbdHJhY2tzLCBzdHJlYW1zXSkgPT4gewogICAgICAgdC5hZGRfY2xlYW51cCgoKSA9PiB0
cmFja3MuZm9yRWFjaCh0cmFjayA9PiB0cmFjay5zdG9wKCkpKTsKICAgICAgIHNlbmRpbmdUcmFj
azEgPSB0cmFja3NbMF07CkBAIC0zNzYsNyArMjUzLDcgQEAKICAgICBsZXQgc2VuZGluZ1RyYWNr
MTsKICAgICBsZXQgc2VuZGluZ1RyYWNrMjsKICAgICBsZXQgc2VuZGVyOwotICAgIHJldHVybiBn
ZXRVc2VyTWVkaWFUcmFja3NBbmRTdHJlYW1zKDIpCisgICAgZ2V0VXNlck1lZGlhVHJhY2tzQW5k
U3RyZWFtcygyKQogICAgIC50aGVuKHQuc3RlcF9mdW5jKChbdHJhY2tzLCBzdHJlYW1zXSkgPT4g
ewogICAgICAgdC5hZGRfY2xlYW51cCgoKSA9PiB0cmFja3MuZm9yRWFjaCh0cmFjayA9PiB0cmFj
ay5zdG9wKCkpKTsKICAgICAgIHNlbmRpbmdUcmFjazEgPSB0cmFja3NbMF07CkBAIC0zOTYsNyAr
MjczLDcgQEAKICAgICAgIGFzc2VydF90cnVlKHRyYWNrU3RhdHMub2JqZWN0RGVsZXRlZCk7CiAg
ICAgICBsZXQgb3V0Ym91bmRTdGF0cyA9IGZpbmRTdGF0c0J5VHlwZUFuZE1lbWJlcihyZXBvcnQs
ICdvdXRib3VuZC1ydHAnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgJ3RyYWNrSWQnLCB0cmFja1N0YXRzLmlkKTsKLSAgICAgIGFzc2VydF90cnVl
KG91dGJvdW5kU3RhdHMgPT0gbnVsbCwKKyAgICAgIGFzc2VydF9lcXVhbHMob3V0Ym91bmRTdGF0
cywgbnVsbCwKICAgICAgICAgICAgICAgICAgICdUaGUgb3V0Ym91bmQgUlRQIHN0cmVhbSBzaG91
bGQgbm8gbG9uZ2VyIHJlZmVyZW5jZSB0aGUgJyArCiAgICAgICAgICAgICAgICAgICAnb3JpZ2lu
YWwgYXR0YWNobWVudCcpOwogICAgICAgdC5kb25lKCk7CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0
cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3dlYnJ0Yy9sZWdhY3kvUlRDUGVlckNv
bm5lY3Rpb24tYWRkU3RyZWFtLmh0dHBzLmh0bWwgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mv
d2ViLXBsYXRmb3JtLXRlc3RzL3dlYnJ0Yy9sZWdhY3kvUlRDUGVlckNvbm5lY3Rpb24tYWRkU3Ry
ZWFtLmh0dHBzLmh0bWwKaW5kZXggNWEzNWViYzUzYjhkN2NlMzg1N2Q0ODY5YTQ3NmUwZTk5YTkw
NzhjOC4uN2ViY2FjZGE1MzcxZjc0YTIzN2QxZTE5NDEyYzIwMDM3MWJlOWQ1OCAxMDA2NDQKLS0t
IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy93ZWJydGMvbGVn
YWN5L1JUQ1BlZXJDb25uZWN0aW9uLWFkZFN0cmVhbS5odHRwcy5odG1sCisrKyBiL0xheW91dFRl
c3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvd2VicnRjL2xlZ2FjeS9SVENQZWVy
Q29ubmVjdGlvbi1hZGRTdHJlYW0uaHR0cHMuaHRtbApAQCAtMjcsNyArMjcsNyBAQAogICAgIHQu
YWRkX2NsZWFudXAoKCkgPT4gcGMuY2xvc2UoKSk7CiAgICAgbGV0IHRyYWNrOwogICAgIGxldCBz
dHJlYW07Ci0gICAgcmV0dXJuIGdldFVzZXJNZWRpYVRyYWNrc0FuZFN0cmVhbXMoMSkKKyAgICBn
ZXRVc2VyTWVkaWFUcmFja3NBbmRTdHJlYW1zKDEpCiAgICAgLnRoZW4odC5zdGVwX2Z1bmMoKFt0
cmFja3MsIHN0cmVhbXNdKSA9PiB7CiAgICAgICB0cmFjayA9IHRyYWNrc1swXTsKICAgICAgIHN0
cmVhbSA9IHN0cmVhbXNbMF07CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMt
d2syL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvd2ViLXNoYXJlL3NoYXJlLXVybC1p
bnZhbGlkLmh0dHBzLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL3BsYXRmb3JtL21hYy13azIv
aW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy93ZWItc2hhcmUvc2hhcmUtdXJsLWludmFs
aWQuaHR0cHMtZXhwZWN0ZWQudHh0CmluZGV4IDEwZDc4M2IxODVhMzEzZjg4NGFlZWU4NWVhY2Fh
MmU1ZmJhZWNlODUuLmVkZGVlMDFiNjdjMzYwN2M5N2QwMDZiMWZjZmE5ZTAzYzg5ZjI0NmQgMTAw
NjQ0Ci0tLSBhL0xheW91dFRlc3RzL3BsYXRmb3JtL21hYy13azIvaW1wb3J0ZWQvdzNjL3dlYi1w
bGF0Zm9ybS10ZXN0cy93ZWItc2hhcmUvc2hhcmUtdXJsLWludmFsaWQuaHR0cHMtZXhwZWN0ZWQu
dHh0CisrKyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL21hYy13azIvaW1wb3J0ZWQvdzNjL3dlYi1w
bGF0Zm9ybS10ZXN0cy93ZWItc2hhcmUvc2hhcmUtdXJsLWludmFsaWQuaHR0cHMtZXhwZWN0ZWQu
dHh0CkBAIC0xLDMgKzEsMTAgQEAKIAogUEFTUyBzaGFyZSgpIHJlamVjdHMgd2hlbiBVUkwgaXMg
aW52YWxpZAorUEFTUyBzaGFyZSgpIHJlamVjdHMgZmlsZTovLyBVUkxzCitQQVNTIHNoYXJlKCkg
cmVqZWN0cyB3c3M6IFVSTHMKK1BBU1Mgc2hhcmUoKSByZWplY3RzIGFib3V0OiBVUkxzCitQQVNT
IHNoYXJlKCkgcmVqZWN0cyBjaHJvbWU6IFVSTHMKK1BBU1Mgc2hhcmUoKSByZWplY3RzIGphdmFz
Y3JpcHQ6IFVSTHMKK1BBU1Mgc2hhcmUoKSByZWplY3RzIGJsb2I6IFVSTHMKK0ZBSUwgc2hhcmUo
KSByZWplY3RzIGRhdGE6IFVSTHMgYXNzZXJ0X3VucmVhY2hlZDogU2hvdWxkIGhhdmUgcmVqZWN0
ZWQ6IHVuZGVmaW5lZCBSZWFjaGVkIHVucmVhY2hhYmxlIGNvZGUKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>412741</attachid>
            <date>2020-10-30 07:36:39 -0700</date>
            <delta_ts>2020-10-30 08:32:54 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-218351-20201030073638.patch</filename>
            <type>text/plain</type>
            <size>779553</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY5MTY0CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFu
Z2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggMThlZTlkMTJiYmQ3Nzc4ZmMxNTAw
ZjZmMjVjZmVjODA1MjQ1ZTlhYS4uMjUyNDQxNzg1NzdmNTg1NmZhOTc3YmIyY2ExM2U4NzA5OTQ4
MDkxYyAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3Rz
L0NoYW5nZUxvZwpAQCAtMSwzICsxLDE0IEBACisyMDIwLTEwLTI5ICBDaHJpcyBEdW1leiAgPGNk
dW1lekBhcHBsZS5jb20+CisKKyAgICAgICAgUmVzeW5jIHdlYi1wbGF0Zm9ybS10ZXN0cy9yZXNv
dXJjZXMgdGVzdHMgZnJvbSB1cHN0cmVhbQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MjE4MzUxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgU2FtIFdlaW5p
Zy4KKworICAgICAgICBSZWJhc2VsaW5lIHRlc3QgdGhhdCBoYXMgZGlmZmVyZW50IG91dHB1dC4K
KworICAgICAgICAqIHBsYXRmb3JtL21hYy13azIvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10
ZXN0cy93ZWItc2hhcmUvc2hhcmUtdXJsLWludmFsaWQuaHR0cHMtZXhwZWN0ZWQudHh0OgorCiAy
MDIwLTEwLTI5ICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CiAKICAgICAgICAgUmVz
eW5jIHdlYi1wbGF0Zm9ybS10ZXN0cy9wYXltZW50LXJlcXVlc3QgdGVzdHMgZnJvbSB1cHN0cmVh
bQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL0NoYW5nZUxvZyBiL0xheW91
dFRlc3RzL2ltcG9ydGVkL3czYy9DaGFuZ2VMb2cKaW5kZXggZThlMzJiZDZkODhmMmI0OWM0NWJk
NTQ4YzYzYjBlMWUxMDA5ZDMwZC4uNGFkMjQwY2QzYTk0ZDZjYTE4YTU2Y2RlZTA5YzFhM2E5ODYx
MDA5NCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL0NoYW5nZUxvZworKysg
Yi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2MvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzYgQEAKKzIw
MjAtMTAtMjkgIENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KKworICAgICAgICBSZXN5
bmMgd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcyB0ZXN0cyBmcm9tIHVwc3RyZWFtCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTgzNTEKKworICAg
ICAgICBSZXZpZXdlZCBieSBTYW0gV2VpbmlnLgorCisgICAgICAgIFJlc3luYyB3ZWItcGxhdGZv
cm0tdGVzdHMvcmVzb3VyY2VzIHRlc3RzIGZyb20gdXBzdHJlYW0gNWRiYjBhM2ZhNjMxZWY3M2Rh
MC4KKworICAgICAgICAqIHdlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvKjogVXBkYXRlZC4K
KworICAgICAgICAqIHdlYi1wbGF0Zm9ybS10ZXN0cy9jb25zb2xlL2lkbGhhcm5lc3MuYW55LWV4
cGVjdGVkLnR4dDoKKyAgICAgICAgKiB3ZWItcGxhdGZvcm0tdGVzdHMvY29uc29sZS9pZGxoYXJu
ZXNzLmFueS53b3JrZXItZXhwZWN0ZWQudHh0OgorICAgICAgICAqIHdlYi1wbGF0Zm9ybS10ZXN0
cy9jb250ZW50LXNlY3VyaXR5LXBvbGljeS9mcmFtZS1zcmMvZnJhbWUtc3JjLXNhbWUtZG9jdW1l
bnQtbWV0YS5zdWIuaHRtbDoKKyAgICAgICAgKiB3ZWItcGxhdGZvcm0tdGVzdHMvY3NzL2Nzcy10
ZXh0L292ZXJmbG93LXdyYXAvb3ZlcmZsb3ctd3JhcC1icmVhay13b3JkLWxvbmctY3Jhc2gtZXhw
ZWN0ZWQudHh0OgorICAgICAgICAqIHdlYi1wbGF0Zm9ybS10ZXN0cy9jc3MvY3NzLXRleHQvdGV4
dC1pbmRlbnQvdGV4dC1pbmRlbnQtbG9uZy1saW5lLWNyYXNoLWV4cGVjdGVkLnR4dDoKKyAgICAg
ICAgKiB3ZWItcGxhdGZvcm0tdGVzdHMvY3NzL2Nzc29tL2lkbGhhcm5lc3MtZXhwZWN0ZWQudHh0
OgorICAgICAgICAqIHdlYi1wbGF0Zm9ybS10ZXN0cy9odG1sL2Jyb3dzZXJzL2Jyb3dzaW5nLXRo
ZS13ZWIvbmF2aWdhdGluZy1hY3Jvc3MtZG9jdW1lbnRzL2FuY2hvci1mcmFnbWVudC1mb3JtLXN1
Ym1pdC13aXRocGF0aC5odG1sOgorICAgICAgICAqIHdlYi1wbGF0Zm9ybS10ZXN0cy9odG1sL2Ny
b3NzLW9yaWdpbi1lbWJlZGRlci1wb2xpY3kvcmVwb3J0aW5nLW5hdmlnYXRpb24uaHR0cHMuaHRt
bDoKKyAgICAgICAgKiB3ZWItcGxhdGZvcm0tdGVzdHMvaHRtbC9jcm9zcy1vcmlnaW4tZW1iZWRk
ZXItcG9saWN5L3JlcXVpcmUtY29ycC1hYm91dC1ibGFuay5odHRwcy1leHBlY3RlZC50eHQ6Cisg
ICAgICAgICogd2ViLXBsYXRmb3JtLXRlc3RzL2h0bWwvY3Jvc3Mtb3JpZ2luLWVtYmVkZGVyLXBv
bGljeS9yZXF1aXJlLWNvcnAtYWJvdXQtc3JjZG9jLmh0dHBzLWV4cGVjdGVkLnR4dDoKKyAgICAg
ICAgKiB3ZWItcGxhdGZvcm0tdGVzdHMvaHRtbC9jcm9zcy1vcmlnaW4tZW1iZWRkZXItcG9saWN5
L3JlcXVpcmUtY29ycC5odHRwcy1leHBlY3RlZC50eHQ6CisgICAgICAgICogd2ViLXBsYXRmb3Jt
LXRlc3RzL3dhc20vanNhcGkvaWRsaGFybmVzcy5hbnktZXhwZWN0ZWQudHh0OgorICAgICAgICAq
IHdlYi1wbGF0Zm9ybS10ZXN0cy93ZWItc2hhcmUvc2hhcmUtdXJsLWludmFsaWQuaHR0cHMuaHRt
bDoKKyAgICAgICAgKiB3ZWItcGxhdGZvcm0tdGVzdHMvd2VicnRjL1JUQ1BlZXJDb25uZWN0aW9u
LWdldFN0YXRzLmh0dHBzLmh0bWw6CisgICAgICAgICogd2ViLXBsYXRmb3JtLXRlc3RzL3dlYnJ0
Yy9SVENQZWVyQ29ubmVjdGlvbi1zZXRSZW1vdGVEZXNjcmlwdGlvbi1yZXBsYWNlVHJhY2suaHR0
cHMuaHRtbDoKKyAgICAgICAgKiB3ZWItcGxhdGZvcm0tdGVzdHMvd2VicnRjL1JUQ1BlZXJDb25u
ZWN0aW9uLXRyYWNrLXN0YXRzLmh0dHBzLWV4cGVjdGVkLnR4dDoKKyAgICAgICAgKiB3ZWItcGxh
dGZvcm0tdGVzdHMvd2VicnRjL1JUQ1BlZXJDb25uZWN0aW9uLXRyYWNrLXN0YXRzLmh0dHBzLmh0
bWw6CisgICAgICAgICogd2ViLXBsYXRmb3JtLXRlc3RzL3dlYnJ0Yy9sZWdhY3kvUlRDUGVlckNv
bm5lY3Rpb24tYWRkU3RyZWFtLmh0dHBzLmh0bWw6CisgICAgICAgIC0gUmViYXNlbGluZSBhIGZl
dyB0ZXN0cyB0aGF0IGhhdmUgZGlmZmVyZW50IG91dHB1dC4KKyAgICAgICAgLSBJIHJlc3luYydk
IGZyb20gdXBzdHJlYW0gYSBmZXcgdGVzdHMgdGhhdCB3b3VsZCBoYXZlIHN0b3BwZWQgcnVubmlu
ZyBwcm9wZXJseSBhZnRlciB0aGUKKyAgICAgICAgICByZXNvdXJjZXMvIGZvbGRlciByZXN5bmMu
CisKIDIwMjAtMTAtMjkgIENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KIAogICAgICAg
ICBSZXN5bmMgd2ViLXBsYXRmb3JtLXRlc3RzL3BheW1lbnQtcmVxdWVzdCB0ZXN0cyBmcm9tIHVw
c3RyZWFtCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3Jt
LXRlc3RzL2NvbnNvbGUvaWRsaGFybmVzcy5hbnktZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMv
aW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9jb25zb2xlL2lkbGhhcm5lc3MuYW55LWV4
cGVjdGVkLnR4dAppbmRleCA4OGQ4ZGM2OWMzM2UyNTkyMjkwNzMyN2M3ZDhjNTcwNDYyYTY4NDZm
Li5iNTE0N2ZiZjBmOTFhNDU0ZTY4YTliN2M1MTM2MjEyZThjNTRhNTYzIDEwMDY0NAotLS0gYS9M
YXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL2NvbnNvbGUvaWRsaGFy
bmVzcy5hbnktZXhwZWN0ZWQudHh0CisrKyBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWIt
cGxhdGZvcm0tdGVzdHMvY29uc29sZS9pZGxoYXJuZXNzLmFueS1leHBlY3RlZC50eHQKQEAgLTEs
NiArMSwxMSBAQAogCiBQQVNTIGlkbF90ZXN0IHNldHVwCiBQQVNTIGlkbF90ZXN0IHZhbGlkYXRp
b24KK1BBU1MgY29uc29sZSBuYW1lc3BhY2U6IGV4dGVuZGVkIGF0dHJpYnV0ZXMKK1BBU1MgY29u
c29sZSBuYW1lc3BhY2U6IHByb3BlcnR5IGRlc2NyaXB0b3IKK1BBU1MgY29uc29sZSBuYW1lc3Bh
Y2U6IFtbRXh0ZW5zaWJsZV1dIGlzIHRydWUKK1BBU1MgY29uc29sZSBuYW1lc3BhY2U6IFtbUHJv
dG90eXBlXV0gaXMgT2JqZWN0LnByb3RvdHlwZQorUEFTUyBjb25zb2xlIG5hbWVzcGFjZTogdHlw
ZW9mIGlzICJvYmplY3QiCiBQQVNTIGNvbnNvbGUgbmFtZXNwYWNlOiBvcGVyYXRpb24gYXNzZXJ0
KG9wdGlvbmFsIGJvb2xlYW4sIGFueS4uLikKIFBBU1MgY29uc29sZSBuYW1lc3BhY2U6IG9wZXJh
dGlvbiBjbGVhcigpCiBQQVNTIGNvbnNvbGUgbmFtZXNwYWNlOiBvcGVyYXRpb24gZGVidWcoYW55
Li4uKQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10
ZXN0cy9jb25zb2xlL2lkbGhhcm5lc3MuYW55Lndvcmtlci1leHBlY3RlZC50eHQgYi9MYXlvdXRU
ZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL2NvbnNvbGUvaWRsaGFybmVzcy5h
bnkud29ya2VyLWV4cGVjdGVkLnR4dAppbmRleCA4OGQ4ZGM2OWMzM2UyNTkyMjkwNzMyN2M3ZDhj
NTcwNDYyYTY4NDZmLi5iNTE0N2ZiZjBmOTFhNDU0ZTY4YTliN2M1MTM2MjEyZThjNTRhNTYzIDEw
MDY0NAotLS0gYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL2Nv
bnNvbGUvaWRsaGFybmVzcy5hbnkud29ya2VyLWV4cGVjdGVkLnR4dAorKysgYi9MYXlvdXRUZXN0
cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL2NvbnNvbGUvaWRsaGFybmVzcy5hbnku
d29ya2VyLWV4cGVjdGVkLnR4dApAQCAtMSw2ICsxLDExIEBACiAKIFBBU1MgaWRsX3Rlc3Qgc2V0
dXAKIFBBU1MgaWRsX3Rlc3QgdmFsaWRhdGlvbgorUEFTUyBjb25zb2xlIG5hbWVzcGFjZTogZXh0
ZW5kZWQgYXR0cmlidXRlcworUEFTUyBjb25zb2xlIG5hbWVzcGFjZTogcHJvcGVydHkgZGVzY3Jp
cHRvcgorUEFTUyBjb25zb2xlIG5hbWVzcGFjZTogW1tFeHRlbnNpYmxlXV0gaXMgdHJ1ZQorUEFT
UyBjb25zb2xlIG5hbWVzcGFjZTogW1tQcm90b3R5cGVdXSBpcyBPYmplY3QucHJvdG90eXBlCitQ
QVNTIGNvbnNvbGUgbmFtZXNwYWNlOiB0eXBlb2YgaXMgIm9iamVjdCIKIFBBU1MgY29uc29sZSBu
YW1lc3BhY2U6IG9wZXJhdGlvbiBhc3NlcnQob3B0aW9uYWwgYm9vbGVhbiwgYW55Li4uKQogUEFT
UyBjb25zb2xlIG5hbWVzcGFjZTogb3BlcmF0aW9uIGNsZWFyKCkKIFBBU1MgY29uc29sZSBuYW1l
c3BhY2U6IG9wZXJhdGlvbiBkZWJ1ZyhhbnkuLi4pCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9p
bXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL2NvbnRlbnQtc2VjdXJpdHktcG9saWN5L2Zy
YW1lLXNyYy9mcmFtZS1zcmMtc2FtZS1kb2N1bWVudC1tZXRhLnN1Yi5odG1sIGIvTGF5b3V0VGVz
dHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9jb250ZW50LXNlY3VyaXR5LXBvbGlj
eS9mcmFtZS1zcmMvZnJhbWUtc3JjLXNhbWUtZG9jdW1lbnQtbWV0YS5zdWIuaHRtbAppbmRleCAy
ODEyOTE4NGJkYTg3YmI3OWJiNzBiNGUxMGE2NTEyYTNjYjVhZWQ4Li5mNDEyMmYzZDM1NmIzNzg2
MGEyOTYzNGU0N2JkZTkxNDc0MzJiYTA5IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9pbXBvcnRl
ZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL2NvbnRlbnQtc2VjdXJpdHktcG9saWN5L2ZyYW1lLXNy
Yy9mcmFtZS1zcmMtc2FtZS1kb2N1bWVudC1tZXRhLnN1Yi5odG1sCisrKyBiL0xheW91dFRlc3Rz
L2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvY29udGVudC1zZWN1cml0eS1wb2xpY3kv
ZnJhbWUtc3JjL2ZyYW1lLXNyYy1zYW1lLWRvY3VtZW50LW1ldGEuc3ViLmh0bWwKQEAgLTMsNyAr
Myw3IEBACiA8aHRtbD4KIDxib2R5PjwvYm9keT4KIDxzY3JpcHQ+Ci0gICAgYXN5bmNfdGVzdChh
c3luYyB0ZXN0ID0+IHsKKyAgICBwcm9taXNlX3Rlc3QoYXN5bmMgdGVzdCA9PiB7CiAgICAgICAv
LyAxLiBMb2FkIGFuIGlmcmFtZSAobm90IGJsb2NrZWQpLgogICAgICAgbGV0IGlmcmFtZSA9IGRv
Y3VtZW50LmNyZWF0ZUVsZW1lbnQoImlmcmFtZSIpOwogICAgICAgewpAQCAtNDcsOCArNDcsNiBA
QAogICAgICAgLy8gNS4gUmVncmVzc2lvbiB0ZXN0IGZvciBodHRwczovL2NyYnVnLmNvbS8xMDE4
Mzg1LiBUaGUgYnJvd3NlciBzaG91bGQKICAgICAgIC8vIG5vdCBjcmFzaCB3aGlsZSBkaXNwbGF5
aW5nIHRoZSBlcnJvciBwYWdlLgogICAgICAgYXdhaXQgbmV3IFByb21pc2UocmVzb2x2ZSA9PiB3
aW5kb3cuc2V0VGltZW91dChyZXNvbHZlLCAxMDAwKSk7Ci0KLSAgICAgIHRlc3QuZG9uZSgpOwog
ICAgIH0sICJTYW1lLWRvY3VtZW50IG5hdmlnYXRpb25zIGluIGFuIGlmcmFtZSBibG9ja2VkIGJ5
IENTUCBmcmFtZS1zcmMgZHluYW1pY2FsbHkgdXNpbmcgdGhlIDxtZXRhPiB0YWciKTsKIDwvc2Ny
aXB0PgogPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1w
bGF0Zm9ybS10ZXN0cy9jc3MvY3NzLXRleHQvb3ZlcmZsb3ctd3JhcC9vdmVyZmxvdy13cmFwLWJy
ZWFrLXdvcmQtbG9uZy1jcmFzaC1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93
M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL2Nzcy9jc3MtdGV4dC9vdmVyZmxvdy13cmFwL292ZXJmbG93
LXdyYXAtYnJlYWstd29yZC1sb25nLWNyYXNoLWV4cGVjdGVkLnR4dAppbmRleCBkM2QwOTMxZmQz
ZTkyNzU1OWJjNWNkNzg4ZWI3N2U2ZGJjMTZlNzYxLi4yZGE5MDgxMTQyNDA0YjczYzZjZDI4Mjhj
ZTkxNWQ3YzU0N2UzOWM0IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2Vi
LXBsYXRmb3JtLXRlc3RzL2Nzcy9jc3MtdGV4dC9vdmVyZmxvdy13cmFwL292ZXJmbG93LXdyYXAt
YnJlYWstd29yZC1sb25nLWNyYXNoLWV4cGVjdGVkLnR4dAorKysgYi9MYXlvdXRUZXN0cy9pbXBv
cnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL2Nzcy9jc3MtdGV4dC9vdmVyZmxvdy13cmFwL292
ZXJmbG93LXdyYXAtYnJlYWstd29yZC1sb25nLWNyYXNoLWV4cGVjdGVkLnR4dApAQCAtMSw0ICsx
LDQgQEAKIHgKIAotUEFTUyBDU1MgVGV4dCBUZXN0OiB2ZXJ5IGxvbmcgbGluZSB3aXRoIGBvdmVy
Zmxvdy13cmFwOiBicmVhay13b3JkYCBzaG91bGQgbm90IGNyYXNoCitQQVNTIGRvY3VtZW50LmJv
ZHkub2Zmc2V0VG9wCiAKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWIt
cGxhdGZvcm0tdGVzdHMvY3NzL2Nzcy10ZXh0L3RleHQtaW5kZW50L3RleHQtaW5kZW50LWxvbmct
bGluZS1jcmFzaC1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBs
YXRmb3JtLXRlc3RzL2Nzcy9jc3MtdGV4dC90ZXh0LWluZGVudC90ZXh0LWluZGVudC1sb25nLWxp
bmUtY3Jhc2gtZXhwZWN0ZWQudHh0CmluZGV4IGNlMTM4NjMyNDhiNGY3MjU1OGMyNzBkZTlhNmQ2
OWE5YzJlNTJkNzEuLjhiOTBhYTZmOTBlNmU0NmZkODFlZWNkYmQwMjlmZDhkOTUzZDNiOGMgMTAw
NjQ0Ci0tLSBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvY3Nz
L2Nzcy10ZXh0L3RleHQtaW5kZW50L3RleHQtaW5kZW50LWxvbmctbGluZS1jcmFzaC1leHBlY3Rl
ZC50eHQKKysrIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9j
c3MvY3NzLXRleHQvdGV4dC1pbmRlbnQvdGV4dC1pbmRlbnQtbG9uZy1saW5lLWNyYXNoLWV4cGVj
dGVkLnR4dApAQCAtMSw0ICsxLDQgQEAKIFhYWAogCi1QQVNTIFZlcnkgbG9uZyBsaW5lIHdpdGgg
YHRleHQtaW5kZW50YCBzaG91bGQgbm90IGNyYXNoCitQQVNTIGRvY3VtZW50LmJvZHkub2Zmc2V0
VG9wCiAKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0t
dGVzdHMvY3NzL2Nzc29tL2lkbGhhcm5lc3MtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvaW1w
b3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9jc3MvY3Nzb20vaWRsaGFybmVzcy1leHBlY3Rl
ZC50eHQKaW5kZXggN2Q3YzcyMDU0NjVjNDhhYmMxNmY1ODY2MDIwNGIzNWUxNjAyYTUyNS4uNDY3
ODZlZTlmNDcxZTBmMTgxMTJhMjBiOGRlOTBkN2E0NGEwNGZkMyAxMDA2NDQKLS0tIGEvTGF5b3V0
VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9jc3MvY3Nzb20vaWRsaGFybmVz
cy1leHBlY3RlZC50eHQKKysrIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9y
bS10ZXN0cy9jc3MvY3Nzb20vaWRsaGFybmVzcy1leHBlY3RlZC50eHQKQEAgLTQxNyw2ICs0MTcs
MTMgQEAgUEFTUyBDU1NTdHlsZURlY2xhcmF0aW9uIGludGVyZmFjZTogZ2V0Q29tcHV0ZWRTdHls
ZShzdmdfZWxlbWVudCkgbXVzdCBpbmhlcml0IHAKIFBBU1MgQ1NTU3R5bGVEZWNsYXJhdGlvbiBp
bnRlcmZhY2U6IGNhbGxpbmcgcmVtb3ZlUHJvcGVydHkoQ1NTT01TdHJpbmcpIG9uIGdldENvbXB1
dGVkU3R5bGUoc3ZnX2VsZW1lbnQpIHdpdGggdG9vIGZldyBhcmd1bWVudHMgbXVzdCB0aHJvdyBU
eXBlRXJyb3IKIFBBU1MgQ1NTU3R5bGVEZWNsYXJhdGlvbiBpbnRlcmZhY2U6IGdldENvbXB1dGVk
U3R5bGUoc3ZnX2VsZW1lbnQpIG11c3QgaW5oZXJpdCBwcm9wZXJ0eSAicGFyZW50UnVsZSIgd2l0
aCB0aGUgcHJvcGVyIHR5cGUKIFBBU1MgQ1NTU3R5bGVEZWNsYXJhdGlvbiBpbnRlcmZhY2U6IGdl
dENvbXB1dGVkU3R5bGUoc3ZnX2VsZW1lbnQpIG11c3QgaW5oZXJpdCBwcm9wZXJ0eSAiY3NzRmxv
YXQiIHdpdGggdGhlIHByb3BlciB0eXBlCitQQVNTIENTUyBuYW1lc3BhY2U6IGV4dGVuZGVkIGF0
dHJpYnV0ZXMKK1BBU1MgQ1NTIG5hbWVzcGFjZTogcHJvcGVydHkgZGVzY3JpcHRvcgorUEFTUyBD
U1MgbmFtZXNwYWNlOiBbW0V4dGVuc2libGVdXSBpcyB0cnVlCitGQUlMIENTUyBuYW1lc3BhY2U6
IFtbUHJvdG90eXBlXV0gaXMgT2JqZWN0LnByb3RvdHlwZSBhc3NlcnRfZXF1YWxzOiBleHBlY3Rl
ZCAob2JqZWN0KSBvYmplY3QgIltvYmplY3QgT2JqZWN0XSIgYnV0IGdvdCAoZnVuY3Rpb24pIGZ1
bmN0aW9uICJmdW5jdGlvbiAoKSB7CisgICAgW25hdGl2ZSBjb2RlXQorfSIKK0ZBSUwgQ1NTIG5h
bWVzcGFjZTogdHlwZW9mIGlzICJvYmplY3QiIGFzc2VydF9lcXVhbHM6IGV4cGVjdGVkICJvYmpl
Y3QiIGJ1dCBnb3QgImZ1bmN0aW9uIgogUEFTUyBDU1MgbmFtZXNwYWNlOiBvcGVyYXRpb24gZXNj
YXBlKENTU09NU3RyaW5nKQogUEFTUyBTVkdFbGVtZW50IGludGVyZmFjZTogYXR0cmlidXRlIHN0
eWxlCiBQQVNTIFNWR0VsZW1lbnQgaW50ZXJmYWNlOiBzdmdfZWxlbWVudCBtdXN0IGluaGVyaXQg
cHJvcGVydHkgInN0eWxlIiB3aXRoIHRoZSBwcm9wZXIgdHlwZQpkaWZmIC0tZ2l0IGEvTGF5b3V0
VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9odG1sL2Jyb3dzZXJzL2Jyb3dz
aW5nLXRoZS13ZWIvbmF2aWdhdGluZy1hY3Jvc3MtZG9jdW1lbnRzL2FuY2hvci1mcmFnbWVudC1m
b3JtLXN1Ym1pdC13aXRocGF0aC5odG1sIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1w
bGF0Zm9ybS10ZXN0cy9odG1sL2Jyb3dzZXJzL2Jyb3dzaW5nLXRoZS13ZWIvbmF2aWdhdGluZy1h
Y3Jvc3MtZG9jdW1lbnRzL2FuY2hvci1mcmFnbWVudC1mb3JtLXN1Ym1pdC13aXRocGF0aC5odG1s
CmluZGV4IGI4OTE2MjNhMmY1NjBmZTVjZmVjODQ0YjJhMzc3YjA1MTM5MjU4ZjkuLjZiZmY1MWM5
YzZmMjgwMTFlMjJiMzlmMmJhYzk4ZWY5MDk4YTFjMTQgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3Rz
L2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvaHRtbC9icm93c2Vycy9icm93c2luZy10
aGUtd2ViL25hdmlnYXRpbmctYWNyb3NzLWRvY3VtZW50cy9hbmNob3ItZnJhZ21lbnQtZm9ybS1z
dWJtaXQtd2l0aHBhdGguaHRtbAorKysgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBs
YXRmb3JtLXRlc3RzL2h0bWwvYnJvd3NlcnMvYnJvd3NpbmctdGhlLXdlYi9uYXZpZ2F0aW5nLWFj
cm9zcy1kb2N1bWVudHMvYW5jaG9yLWZyYWdtZW50LWZvcm0tc3VibWl0LXdpdGhwYXRoLmh0bWwK
QEAgLTE2LDIwICsxNiwyMCBAQAogPGEgaWQ9ImFuY2hvciIgdGFyZ2V0PSJ0ZXN0IiBvbmNsaWNr
PSJkb2N1bWVudC5mb3Jtc1swXS5zdWJtaXQoKSI+VGVzdDwvYT4KIAogPHNjcmlwdD4KLWFzeW5j
X3Rlc3QoYXN5bmMgdCA9PiB7Cithc3luY190ZXN0KHQgPT4gewogICBjb25zdCBpZnJhbWUgPSBk
b2N1bWVudC5xdWVyeVNlbGVjdG9yKCdpZnJhbWUnKTsKLSAgY29uc3QgaWZyYW1lTG9hZFByb21p
c2UgPSBuZXcgUHJvbWlzZShyZXNvbHZlID0+IGlmcmFtZS5vbmxvYWQgPSByZXNvbHZlKTsKLSAg
aWZyYW1lLnNyYyA9ICcvJzsKLSAgYXdhaXQgaWZyYW1lTG9hZFByb21pc2U7Ci0KLSAgY29uc3Qg
YW5jaG9yID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2FuY2hvcicpOwotICBhbmNob3IuaHJl
ZiA9ICcvIyc7Ci0gIHQuc3RlcCgoKSA9PiBhbmNob3IuY2xpY2soKSk7Ci0gIHdpbmRvdy5vbm1l
c3NhZ2UgPSB0LnN0ZXBfZnVuYyhldmVudCA9PiB7Ci0gICAgaWYgKHR5cGVvZiBldmVudC5kYXRh
ID09PSAnc3RyaW5nJyAmJiBldmVudC5kYXRhLmluY2x1ZGVzKCduYXZpZ2F0aW9uJykpIHsKLSAg
ICAgIGFzc2VydF9lcXVhbHMoZXZlbnQuZGF0YSwgJ2Zvcm0gbmF2aWdhdGlvbicpOwotICAgICAg
dC5kb25lKCk7Ci0gICAgfQorICBpZnJhbWUub25sb2FkID0gdC5zdGVwX2Z1bmMoKCkgPT4gewor
ICAgIGNvbnN0IGFuY2hvciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdhbmNob3InKTsKKyAg
ICBhbmNob3IuaHJlZiA9ICcvIyc7CisgICAgYW5jaG9yLmNsaWNrKCk7CisgICAgd2luZG93Lm9u
bWVzc2FnZSA9IHQuc3RlcF9mdW5jKGV2ZW50ID0+IHsKKyAgICAgIGlmICh0eXBlb2YgZXZlbnQu
ZGF0YSA9PT0gJ3N0cmluZycgJiYgZXZlbnQuZGF0YS5pbmNsdWRlcygnbmF2aWdhdGlvbicpKSB7
CisgICAgICAgIGFzc2VydF9lcXVhbHMoZXZlbnQuZGF0YSwgJ2Zvcm0gbmF2aWdhdGlvbicpOwor
ICAgICAgICB0LmRvbmUoKTsKKyAgICAgIH0KKyAgICB9KTsKICAgfSk7CisKKyAgaWZyYW1lLnNy
YyA9ICcvJzsKIH0pOwogPC9zY3JpcHQ+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbXBvcnRl
ZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL2h0bWwvY3Jvc3Mtb3JpZ2luLWVtYmVkZGVyLXBvbGlj
eS9yZXBvcnRpbmctbmF2aWdhdGlvbi5odHRwcy5odG1sIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQv
dzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9odG1sL2Nyb3NzLW9yaWdpbi1lbWJlZGRlci1wb2xpY3kv
cmVwb3J0aW5nLW5hdmlnYXRpb24uaHR0cHMuaHRtbAppbmRleCA3MDg3OTg1OTkwZTY4MjNiMGY3
YjFiY2IyMmU1N2IyNWE3NTNkNjA1Li5mZTQyMDE1OTEzYjU2ZDFjYTBmZGQyMzRkNGFkNmFkOWQw
OTI2YWYyIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3Jt
LXRlc3RzL2h0bWwvY3Jvc3Mtb3JpZ2luLWVtYmVkZGVyLXBvbGljeS9yZXBvcnRpbmctbmF2aWdh
dGlvbi5odHRwcy5odG1sCisrKyBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZv
cm0tdGVzdHMvaHRtbC9jcm9zcy1vcmlnaW4tZW1iZWRkZXItcG9saWN5L3JlcG9ydGluZy1uYXZp
Z2F0aW9uLmh0dHBzLmh0bWwKQEAgLTE1LDE4ICsxNSwyMSBAQCBjb25zdCBDT1JQX0NST1NTX09S
SUdJTiA9CiBjb25zdCBGUkFNRV9VUkwgPSBgJHtPUklHSU59L2NvbW1vbi9ibGFuay5odG1sP3Bp
cGU9YDsKIGNvbnN0IFJFTU9URV9GUkFNRV9VUkwgPSBgJHtSRU1PVEVfT1JJR0lOfS9jb21tb24v
YmxhbmsuaHRtbD9waXBlPWA7CiAKLWZ1bmN0aW9uIGNoZWNrQ29ycFJlcG9ydChyZXBvcnQsIGNv
bnRleHRVcmwsIGJsb2NrZWRVcmwpIHsKK2Z1bmN0aW9uIGNoZWNrQ29ycFJlcG9ydChyZXBvcnQs
IGNvbnRleHRVcmwsIGJsb2NrZWRVcmwsIGRpc3Bvc2l0aW9uKSB7CiAgIGFzc2VydF9lcXVhbHMo
cmVwb3J0LnR5cGUsICdjb2VwJyk7CiAgIGFzc2VydF9lcXVhbHMocmVwb3J0LnVybCwgY29udGV4
dFVybCk7CiAgIGFzc2VydF9lcXVhbHMocmVwb3J0LmJvZHkudHlwZSwgJ2NvcnAnKTsKLSAgYXNz
ZXJ0X2VxdWFscyhyZXBvcnQuYm9keVsnYmxvY2tlZC11cmwnXSwgYmxvY2tlZFVybCk7CisgIGFz
c2VydF9lcXVhbHMocmVwb3J0LmJvZHkuYmxvY2tlZFVSTCwgYmxvY2tlZFVybCk7CisgIGFzc2Vy
dF9lcXVhbHMocmVwb3J0LmJvZHkuZGlzcG9zaXRpb24sIGRpc3Bvc2l0aW9uKTsKKyAgYXNzZXJ0
X2VxdWFscyhyZXBvcnQuYm9keS5kZXN0aW5hdGlvbiwgJ2lmcmFtZScpOwogfQogCi1mdW5jdGlv
biBjaGVja0NvZXBNaXNtYXRjaFJlcG9ydChyZXBvcnQsIGNvbnRleHRVcmwsIGJsb2NrZWRVcmwp
IHsKK2Z1bmN0aW9uIGNoZWNrQ29lcE1pc21hdGNoUmVwb3J0KHJlcG9ydCwgY29udGV4dFVybCwg
YmxvY2tlZFVybCwgZGlzcG9zaXRpb24pIHsKICAgYXNzZXJ0X2VxdWFscyhyZXBvcnQudHlwZSwg
J2NvZXAnKTsKICAgYXNzZXJ0X2VxdWFscyhyZXBvcnQudXJsLCBjb250ZXh0VXJsKTsKICAgYXNz
ZXJ0X2VxdWFscyhyZXBvcnQuYm9keS50eXBlLCAnbmF2aWdhdGlvbicpOwotICBhc3NlcnRfZXF1
YWxzKHJlcG9ydC5ib2R5WydibG9ja2VkLXVybCddLCBibG9ja2VkVXJsKTsKKyAgYXNzZXJ0X2Vx
dWFscyhyZXBvcnQuYm9keS5ibG9ja2VkVVJMLCBibG9ja2VkVXJsKTsKKyAgYXNzZXJ0X2VxdWFs
cyhyZXBvcnQuYm9keS5kaXNwb3NpdGlvbiwgZGlzcG9zaXRpb24pOwogfQogCiBmdW5jdGlvbiBs
b2FkRnJhbWUoZG9jdW1lbnQsIHVybCkgewpAQCAtODIsOSArODUsNiBAQCBhc3luYyBmdW5jdGlv
biBvYnNlcnZlUmVwb3J0cyhnbG9iYWwpIHsKIC8vICAgICAnQ09SUC1STycgQ09SUCB2aW9sYXRp
b24gKHJlcG9ydCBvbmx5KQogLy8gICAgICdOQVYnOiBDT0VQIG1pc21hdGNoIGJldHdlZW4gdGhl
IGZyYW1lcy4KIC8vICAgICAnTkFWLVJPJzogQ09FUCBtaXNtYXRjaCBiZXR3ZWVuIHRoZSBmcmFt
ZXMgKHJlcG9ydCBvbmx5KS4KLS8vICAgQ3VycmVudGx5ICctUk8nIGlzIG5vLW9wLCBlLmcuLCAn
Q09SUCcgYW5kICdDT1JQLVJPJyBoYXZlIHRoZSBzYW1lCi0vLyAgIGV4cGVjdGF0aW9uLiBXZSBh
cmUgcGxhbm5pbmcgdG8gaW50cm9kdWNlICJkaXNwb3NpdGlvbiIgbWVtYmVyIGluCi0vLyAgIHJl
cG9ydHMsIHdoaWNoIHdpbGwgZGlmZmVyZW50aWF0ZSB0aGVtIGVhY2ggb3RoZXIuCiBjb25zdCBD
QVNFUyA9IFsKICAgeyBwYXJlbnQ6ICcnLCB0YXJnZXQ6ICcnLCByZXBvcnRzOiBbXSB9LAogICB7
IHBhcmVudDogJycsIHRhcmdldDogQ09FUCwgcmVwb3J0czogW10gfSwKQEAgLTExMCw0MCArMTEw
LDQyIEBAIGZvciAoY29uc3QgdGVzdGNhc2Ugb2YgQ0FTRVMpIHsKICAgICBmdW5jdGlvbiBkZXNj
KHMpIHsKICAgICAgIHJldHVybiBzID09PSAnJyA/ICcobm9uZSknIDogczsKICAgICB9Ci0gICAg
YXN5bmNfdGVzdChhc3luYyAodCkgPT4gewotICAgICAgdHJ5IHsKLSAgICAgICAgY29uc3QgdGFy
Z2V0VXJsID0gUkVNT1RFX0ZSQU1FX1VSTCArIHRlc3RjYXNlLnRhcmdldDsKLSAgICAgICAgY29u
c3QgcGFyZW50ID0KLSAgICAgICAgICBhd2FpdCBsb2FkRnJhbWVzKHQsIHRlc3RjYXNlLnBhcmVu
dCwgd2l0aEVtcHR5RnJhbWUsIHRhcmdldFVybCk7Ci0KKyAgICAvLyBUaGVzZSB0ZXN0cyBhcmUg
dmVyeSBzbG93LCBzbyB0aGV5IG11c3QgYmUgcnVuIGluIHBhcmFsbGVsIHVzaW5nCisgICAgLy8g
YXN5bmNfdGVzdC4KKyAgICBhc3luY190ZXN0KHQgPT4geworICAgICAgY29uc3QgdGFyZ2V0VXJs
ID0gUkVNT1RFX0ZSQU1FX1VSTCArIHRlc3RjYXNlLnRhcmdldDsKKyAgICAgIGxvYWRGcmFtZXMo
dCwgdGVzdGNhc2UucGFyZW50LCB3aXRoRW1wdHlGcmFtZSwgdGFyZ2V0VXJsKQorICAgICAgICAg
IC50aGVuKHQuc3RlcF9mdW5jKHBhcmVudCA9PiB7CiAgICAgICAgIGNvbnN0IGNvbnRleHRVcmwg
PSBwYXJlbnQuc3JjID8gcGFyZW50LnNyYyA6ICdhYm91dDpibGFuayc7Ci0gICAgICAgIGNvbnN0
IHJlcG9ydHMgPSBhd2FpdCBvYnNlcnZlUmVwb3J0cyhwYXJlbnQuY29udGVudFdpbmRvdyk7Ci0g
ICAgICAgIGFzc2VydF9lcXVhbHMocmVwb3J0cy5sZW5ndGgsIHRlc3RjYXNlLnJlcG9ydHMubGVu
Z3RoKTsKLQotICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJlcG9ydHMubGVuZ3RoOyBpICs9
IDEpIHsKLSAgICAgICAgICBjb25zdCByZXBvcnQgPSByZXBvcnRzW2ldOwotICAgICAgICAgIHN3
aXRjaCAodGVzdGNhc2UucmVwb3J0c1tpXSkgewotICAgICAgICAgICAgY2FzZSAnQ09SUCc6Ci0g
ICAgICAgICAgICBjYXNlICdDT1JQLVJPJzoKLSAgICAgICAgICAgICAgY2hlY2tDb3JwUmVwb3J0
KHJlcG9ydCwgY29udGV4dFVybCwgdGFyZ2V0VXJsKTsKLSAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICBjYXNlICdOQVYnOgotICAgICAgICAgICAgY2FzZSAnTkFWLVJPJzoKLSAgICAg
ICAgICAgICAgY2hlY2tDb2VwTWlzbWF0Y2hSZXBvcnQocmVwb3J0LCBjb250ZXh0VXJsLCB0YXJn
ZXRVcmwpOwotICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAg
ICAgICAgICAgIGFzc2VydF91bnJlYWNoZWQoCi0gICAgICAgICAgICAgICAgJ1VuZXhwZWN0ZWQg
cmVwb3J0IGV4cGVhY3Rpb246ICcgKyB0ZXN0Y2FzZS5yZXBvcnRzW2ldKTsKKyAgICAgICAgb2Jz
ZXJ2ZVJlcG9ydHMocGFyZW50LmNvbnRlbnRXaW5kb3cpLnRoZW4odC5zdGVwX2Z1bmMocmVwb3J0
cyA9PiB7CisgICAgICAgICAgYXNzZXJ0X2VxdWFscyhyZXBvcnRzLmxlbmd0aCwgdGVzdGNhc2Uu
cmVwb3J0cy5sZW5ndGgpOworICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcmVwb3J0cy5s
ZW5ndGg7IGkgKz0gMSkgeworICAgICAgICAgICAgY29uc3QgcmVwb3J0ID0gcmVwb3J0c1tpXTsK
KyAgICAgICAgICAgIHN3aXRjaCAodGVzdGNhc2UucmVwb3J0c1tpXSkgeworICAgICAgICAgICAg
ICBjYXNlICdDT1JQJzoKKyAgICAgICAgICAgICAgICBjaGVja0NvcnBSZXBvcnQocmVwb3J0LCBj
b250ZXh0VXJsLCB0YXJnZXRVcmwsICdlbmZvcmNlJyk7CisgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICAgIGNhc2UgJ0NPUlAtUk8nOgorICAgICAgICAgICAgICAgIGNoZWNrQ29y
cFJlcG9ydChyZXBvcnQsIGNvbnRleHRVcmwsIHRhcmdldFVybCwgJ3JlcG9ydGluZycpOworICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlICdOQVYnOgorICAgICAgICAg
ICAgICAgIGNoZWNrQ29lcE1pc21hdGNoUmVwb3J0KHJlcG9ydCwgY29udGV4dFVybCwgdGFyZ2V0
VXJsLCAnZW5mb3JjZScpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBj
YXNlICdOQVYtUk8nOgorICAgICAgICAgICAgICAgIGNoZWNrQ29lcE1pc21hdGNoUmVwb3J0KHJl
cG9ydCwgY29udGV4dFVybCwgdGFyZ2V0VXJsLCAncmVwb3J0aW5nJyk7CisgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgYXNzZXJ0
X3VucmVhY2hlZCgKKyAgICAgICAgICAgICAgICAgICdVbmV4cGVjdGVkIHJlcG9ydCBleHBlYWN0
aW9uOiAnICsgdGVzdGNhc2UucmVwb3J0c1tpXSk7CisgICAgICAgICAgICB9CiAgICAgICAgICAg
fQotICAgICAgICB9Ci0gICAgICAgIHQuZG9uZSgpOwotICAgICAgfSBjYXRjaCAoZSkgewotICAg
ICAgICB0LnN0ZXAoKCkgPT4geyB0aHJvdyBlOyB9KTsKLSAgICAgIH0KKyAgICAgICAgICB0LmRv
bmUoKTsKKyAgICAgICAgfSkpLmNhdGNoKHQuc3RlcF9mdW5jKGUgPT4geyB0aHJvdyBlOyB9KSk7
CisgICAgICB9KSkuY2F0Y2godC5zdGVwX2Z1bmMoZSA9PiB7IHRocm93IGU7IH0pKTsKICAgICB9
LCBgcGFyZW50OiAke2Rlc2ModGVzdGNhc2UucGFyZW50KX0sIHRhcmdldDogJHtkZXNjKHRlc3Rj
YXNlLnRhcmdldCl9LCBgICsKICAgICAgICBgd2l0aCBlbXB0eSBmcmFtZTogJHt3aXRoRW1wdHlG
cmFtZX1gKTsKICAgfQogfQogCiA8L3NjcmlwdD4KLTwvYm9keT48L2h0bWw+ClwgTm8gbmV3bGlu
ZSBhdCBlbmQgb2YgZmlsZQorPC9ib2R5PjwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3Rz
L2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvaHRtbC9jcm9zcy1vcmlnaW4tZW1iZWRk
ZXItcG9saWN5L3JlcXVpcmUtY29ycC1hYm91dC1ibGFuay5odHRwcy1leHBlY3RlZC50eHQgYi9M
YXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL2h0bWwvY3Jvc3Mtb3Jp
Z2luLWVtYmVkZGVyLXBvbGljeS9yZXF1aXJlLWNvcnAtYWJvdXQtYmxhbmsuaHR0cHMtZXhwZWN0
ZWQudHh0CmluZGV4IDk5YjdlYTZjOTFlNGVhYTIwOTBhOTk0ZGEwYWJmZDJhZjQ0MjFkODUuLjVm
ZGI5YzRlOWNiZGM4OGY3NTAwYWJmNDBiZDM0ZjBiNmZhOWI0OWQgMTAwNjQ0Ci0tLSBhL0xheW91
dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvaHRtbC9jcm9zcy1vcmlnaW4t
ZW1iZWRkZXItcG9saWN5L3JlcXVpcmUtY29ycC1hYm91dC1ibGFuay5odHRwcy1leHBlY3RlZC50
eHQKKysrIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9odG1s
L2Nyb3NzLW9yaWdpbi1lbWJlZGRlci1wb2xpY3kvcmVxdWlyZS1jb3JwLWFib3V0LWJsYW5rLmh0
dHBzLWV4cGVjdGVkLnR4dApAQCAtMiw1ICsyLDUgQEAKIAogUEFTUyBXYWl0IGZvciB0aGUgRE9N
IHRvIGJlIGJ1aWx0LgogUEFTUyBhYm91dDpibGFuayBjYW4gYWx3YXlzIGJlIGVtYmVkZGVkIGJ5
IGEgJ3JlcXVpcmUtY29ycCcgZG9jdW1lbnQKLUZBSUwgQShCKEMpKSBBPXJlcXVpcmUtY29ycCwg
Qj1hYm91dDpibGFuaywgQz1uby1yZXF1aXJlLWNvcnAgPT4gQyBjYW4ndCBsb2FkIHdhaXRfZm9y
OiBUaW1lZCBvdXQgd2FpdGluZyBvbiBjb25kaXRpb24KK0ZBSUwgQShCKEMpKSBBPXJlcXVpcmUt
Y29ycCwgQj1hYm91dDpibGFuaywgQz1uby1yZXF1aXJlLWNvcnAgPT4gQyBjYW4ndCBsb2FkIHN0
ZXBfd2FpdF9mdW5jOiBUaW1lZCBvdXQgd2FpdGluZyBvbiBjb25kaXRpb24KIApkaWZmIC0tZ2l0
IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9odG1sL2Nyb3Nz
LW9yaWdpbi1lbWJlZGRlci1wb2xpY3kvcmVxdWlyZS1jb3JwLWFib3V0LXNyY2RvYy5odHRwcy1l
eHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3Rz
L2h0bWwvY3Jvc3Mtb3JpZ2luLWVtYmVkZGVyLXBvbGljeS9yZXF1aXJlLWNvcnAtYWJvdXQtc3Jj
ZG9jLmh0dHBzLWV4cGVjdGVkLnR4dAppbmRleCA2NjNkZDAzMzI0YTM2NzgyN2NiMjA5Yjg0YjE5
MTBmNGY0MmUwMjJiLi5kOWJlN2UzNjRhMjk0MTdiY2UwYzIzZTI2ODc3MmU2MzZkMjJhZTNkIDEw
MDY0NAotLS0gYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL2h0
bWwvY3Jvc3Mtb3JpZ2luLWVtYmVkZGVyLXBvbGljeS9yZXF1aXJlLWNvcnAtYWJvdXQtc3JjZG9j
Lmh0dHBzLWV4cGVjdGVkLnR4dAorKysgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBs
YXRmb3JtLXRlc3RzL2h0bWwvY3Jvc3Mtb3JpZ2luLWVtYmVkZGVyLXBvbGljeS9yZXF1aXJlLWNv
cnAtYWJvdXQtc3JjZG9jLmh0dHBzLWV4cGVjdGVkLnR4dApAQCAtMiw1ICsyLDUgQEAKIAogUEFT
UyBXYWl0IGZvciB0aGUgRE9NIHRvIGJlIGJ1aWx0LgogUEFTUyBhYm91dDpzcmNkb2MgY2FuIGFs
d2F5cyBiZSBlbWJlZGRlZCBieSBhICdyZXF1aXJlLWNvcnAnIGRvY3VtZW50Ci1GQUlMIEEoQihD
KSkgQT1yZXF1aXJlLWNvcnAsIEI9YWJvdXQ6c3JjZG9jLCBDPW5vLXJlcXVpcmUtY29ycCA9PiBD
IGNhbid0IGxvYWQgd2FpdF9mb3I6IFRpbWVkIG91dCB3YWl0aW5nIG9uIGNvbmRpdGlvbgorRkFJ
TCBBKEIoQykpIEE9cmVxdWlyZS1jb3JwLCBCPWFib3V0OnNyY2RvYywgQz1uby1yZXF1aXJlLWNv
cnAgPT4gQyBjYW4ndCBsb2FkIHN0ZXBfd2FpdF9mdW5jOiBUaW1lZCBvdXQgd2FpdGluZyBvbiBj
b25kaXRpb24KIApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0
Zm9ybS10ZXN0cy9odG1sL2Nyb3NzLW9yaWdpbi1lbWJlZGRlci1wb2xpY3kvcmVxdWlyZS1jb3Jw
Lmh0dHBzLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZv
cm0tdGVzdHMvaHRtbC9jcm9zcy1vcmlnaW4tZW1iZWRkZXItcG9saWN5L3JlcXVpcmUtY29ycC5o
dHRwcy1leHBlY3RlZC50eHQKaW5kZXggNzIzODQ0NDk1MjBkMGYyM2Y2OTdmMWZiODZmYmRkOGZj
NDI0MDE2MC4uYmJkOTkxYjZkZDNjODM5MDYzZTNjNGUwMTI3OWJjMzBlYTQxZDhlZCAxMDA2NDQK
LS0tIGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9odG1sL2Ny
b3NzLW9yaWdpbi1lbWJlZGRlci1wb2xpY3kvcmVxdWlyZS1jb3JwLmh0dHBzLWV4cGVjdGVkLnR4
dAorKysgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL2h0bWwv
Y3Jvc3Mtb3JpZ2luLWVtYmVkZGVyLXBvbGljeS9yZXF1aXJlLWNvcnAuaHR0cHMtZXhwZWN0ZWQu
dHh0CkBAIC0xLDUgKzEsNSBAQAogCi1GQUlMICJyZXF1aXJlLWNvcnAiIHRvcC1sZXZlbDogbmF2
aWdhdGluZyBhIGZyYW1lIHRvICJub25lIiBzaG91bGQgZmFpbCB3YWl0X2ZvcjogVGltZWQgb3V0
IHdhaXRpbmcgb24gY29uZGl0aW9uCitGQUlMICJyZXF1aXJlLWNvcnAiIHRvcC1sZXZlbDogbmF2
aWdhdGluZyBhIGZyYW1lIHRvICJub25lIiBzaG91bGQgZmFpbCBzdGVwX3dhaXRfZnVuYzogVGlt
ZWQgb3V0IHdhaXRpbmcgb24gY29uZGl0aW9uCiBGQUlMICJyZXF1aXJlLWNvcnAiIHRvcC1sZXZl
bDogbmF2aWdhdGluZyBhIGZyYW1lIGZyb20gInJlcXVpcmUtY29ycCIgdG8gIm5vbmUiIHNob3Vs
ZCBmYWlsIENhbid0IGZpbmQgdmFyaWFibGU6IEJyb2FkY2FzdENoYW5uZWwKIEZBSUwgInJlcXVp
cmUtY29ycCIgdG9wLWxldmVsOiBjcmVhdGluZyBhIG5vb3BlbmVyICJub25lIiBwb3B1cCBzaG91
bGQgc3VjY2VlZCBDYW4ndCBmaW5kIHZhcmlhYmxlOiBCcm9hZGNhc3RDaGFubmVsCiBGQUlMICJy
ZXF1aXJlLWNvcnAiIHRvcC1sZXZlbDogY3JlYXRpbmcgYSAibm9uZSIgcG9wdXAgc2hvdWxkIHN1
Y2NlZWQuIENhbid0IGZpbmQgdmFyaWFibGU6IEJyb2FkY2FzdENoYW5uZWwKQEAgLTksNyArOSw3
IEBAIEZBSUwgInJlcXVpcmUtY29ycCIgdG9wLWxldmVsIChhcyBwb3B1cCB3aXRoIG9wZW5lciBz
ZXQgdG8gbnVsbCk6IG5hdmlnYXRpbmcgdG8KIFBBU1MgInJlcXVpcmUtY29ycCIgdG9wLWxldmVs
OiBmZXRjaCgpIHRvIENPUlA6IGNyb3NzLW9yaWdpbiByZXNwb25zZSBzaG91bGQgc3VjY2VlZAog
RkFJTCAicmVxdWlyZS1jb3JwIiB0b3AtbGV2ZWw6IGZldGNoKCkgdG8gcmVzcG9uc2Ugd2l0aG91
dCBDT1JQIHNob3VsZCBmYWlsIGFzc2VydF91bnJlYWNoZWQ6IFNob3VsZCBoYXZlIHJlamVjdGVk
OiB1bmRlZmluZWQgUmVhY2hlZCB1bnJlYWNoYWJsZSBjb2RlCiBGQUlMICJyZXF1aXJlLWNvcnAi
IHRvcC1sZXZlbDogZmV0Y2goKSB0byByZXNwb25zZSB3aXRob3V0IENPUlAgdGhyb3VnaCBhIFdp
bmRvd1Byb3h5IHNob3VsZCBmYWlsIGFzc2VydF91bnJlYWNoZWQ6IFNob3VsZCBoYXZlIHJlamVj
dGVkOiB1bmRlZmluZWQgUmVhY2hlZCB1bnJlYWNoYWJsZSBjb2RlCi1GQUlMICJyZXF1aXJlLWNv
cnAiIHRvcC1sZXZlbDogbmF2aWdhdGluZyBhbiBpZnJhbWUgdG8gYSBwYWdlIHdpdGhvdXQgQ09S
UCwgdGhyb3VnaCBhIFdpbmRvd1Byb3h5LCBzaG91bGQgZmFpbCB3YWl0X2ZvcjogVGltZWQgb3V0
IHdhaXRpbmcgb24gY29uZGl0aW9uCitGQUlMICJyZXF1aXJlLWNvcnAiIHRvcC1sZXZlbDogbmF2
aWdhdGluZyBhbiBpZnJhbWUgdG8gYSBwYWdlIHdpdGhvdXQgQ09SUCwgdGhyb3VnaCBhIFdpbmRv
d1Byb3h5LCBzaG91bGQgZmFpbCBzdGVwX3dhaXRfZnVuYzogVGltZWQgb3V0IHdhaXRpbmcgb24g
Y29uZGl0aW9uCiBQQVNTIENPUlA6IHNhbWUtc2l0ZSBpcyBjaGVja2VkIGFuZCBhbGxvd2VkLgog
RkFJTCBDT1JQOiBzYW1lLXNpdGUgaXMgY2hlY2tlZCBhbmQgYmxvY2tlZC4gYXNzZXJ0X2ZhbHNl
OiBleHBlY3RlZCBmYWxzZSBnb3QgdHJ1ZQogRkFJTCBuYXZpZ2F0aW9uIENPUlAgaXMgY2hlY2tl
ZCB3aXRoIHRoZSBwYXJlbnQgZnJhbWUsIG5vdCB0aGUgbmF2aWdhdGlvbiBzb3VyY2UgLSB0byBi
ZSBhbGxvd2VkIENhbid0IGZpbmQgdmFyaWFibGU6IEJyb2FkY2FzdENoYW5uZWwKZGlmZiAtLWdp
dCBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2Vz
L2Nocm9taXVtL1JFQURNRS5tZCBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZv
cm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL1JFQURNRS5tZApkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggYjUzYzZhOGM0MjMyZGJlOWM3ODdiMGVhMTdmMGVkMWE0OWYxZTM4Ni4uMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9MYXlvdXRUZXN0cy9p
bXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS9SRUFETUUu
bWQKKysrIC9kZXYvbnVsbApAQCAtMSw0ICswLDAgQEAKLVRoaXMgZGlyZWN0b3J5IGNvbnRhaW5z
IENocm9taXVtLXNwZWNpZmljIHRlc3QgcmVzb3VyY2VzLgotCi1UaGUgZmlsZXMgYG1vam9fYmlu
ZGluZ3MuanNgIGFuZCBgKi5tb2pvbS5qc2AgYXJlIG1hbnVhbGx5IGNvcGllZCBmcm9tIHRoZQot
Q2hyb21pdW0gYnVpbGQgcHJvY2VzcydzIGdlbmVyYXRlZCBmaWxlcyBhbmQgc2hvdWxkIG5vdCBi
ZSBlZGl0ZWQgbWFudWFsbHkuCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mv
d2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS9iaWdfYnVmZmVyLm1vam9tLmpz
IGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMv
Y2hyb21pdW0vYmlnX2J1ZmZlci5tb2pvbS5qcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggZjA5NzA2ZWViYjgyMjg1MTg0Y2RjMjdhZDlhMzY5ZjBiZWY1NDE5My4uMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93
M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS9iaWdfYnVmZmVyLm1vam9t
LmpzCisrKyAvZGV2L251bGwKQEAgLTEsMjYzICswLDAgQEAKLS8vIENvcHlyaWdodCAyMDE0IFRo
ZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMg
c291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBi
ZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLQotJ3VzZSBzdHJpY3QnOwotCi0oZnVu
Y3Rpb24oKSB7Ci0gIHZhciBtb2pvbUlkID0gJ21vam8vcHVibGljL21vam9tL2Jhc2UvYmlnX2J1
ZmZlci5tb2pvbSc7Ci0gIGlmIChtb2pvLmludGVybmFsLmlzTW9qb21Mb2FkZWQobW9qb21JZCkp
IHsKLSAgICBjb25zb2xlLndhcm4oJ1RoZSBmb2xsb3dpbmcgbW9qb20gaXMgbG9hZGVkIG11bHRp
cGxlIHRpbWVzOiAnICsgbW9qb21JZCk7Ci0gICAgcmV0dXJuOwotICB9Ci0gIG1vam8uaW50ZXJu
YWwubWFya01vam9tTG9hZGVkKG1vam9tSWQpOwotICB2YXIgYmluZGluZ3MgPSBtb2pvOwotICB2
YXIgYXNzb2NpYXRlZEJpbmRpbmdzID0gbW9qbzsKLSAgdmFyIGNvZGVjID0gbW9qby5pbnRlcm5h
bDsKLSAgdmFyIHZhbGlkYXRvciA9IG1vam8uaW50ZXJuYWw7Ci0KLSAgdmFyIGV4cG9ydHMgPSBt
b2pvLmludGVybmFsLmV4cG9zZU5hbWVzcGFjZSgnbW9qb0Jhc2UubW9qb20nKTsKLQotCi0KLSAg
ZnVuY3Rpb24gQmlnQnVmZmVyU2hhcmVkTWVtb3J5UmVnaW9uKHZhbHVlcykgewotICAgIHRoaXMu
aW5pdERlZmF1bHRzXygpOwotICAgIHRoaXMuaW5pdEZpZWxkc18odmFsdWVzKTsKLSAgfQotCi0K
LSAgQmlnQnVmZmVyU2hhcmVkTWVtb3J5UmVnaW9uLnByb3RvdHlwZS5pbml0RGVmYXVsdHNfID0g
ZnVuY3Rpb24oKSB7Ci0gICAgdGhpcy5idWZmZXJIYW5kbGUgPSBudWxsOwotICAgIHRoaXMuc2l6
ZSA9IDA7Ci0gIH07Ci0gIEJpZ0J1ZmZlclNoYXJlZE1lbW9yeVJlZ2lvbi5wcm90b3R5cGUuaW5p
dEZpZWxkc18gPSBmdW5jdGlvbihmaWVsZHMpIHsKLSAgICBmb3IodmFyIGZpZWxkIGluIGZpZWxk
cykgewotICAgICAgICBpZiAodGhpcy5oYXNPd25Qcm9wZXJ0eShmaWVsZCkpCi0gICAgICAgICAg
dGhpc1tmaWVsZF0gPSBmaWVsZHNbZmllbGRdOwotICAgIH0KLSAgfTsKLQotICBCaWdCdWZmZXJT
aGFyZWRNZW1vcnlSZWdpb24udmFsaWRhdGUgPSBmdW5jdGlvbihtZXNzYWdlVmFsaWRhdG9yLCBv
ZmZzZXQpIHsKLSAgICB2YXIgZXJyOwotICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRh
dGVTdHJ1Y3RIZWFkZXIob2Zmc2V0LCBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSk7Ci0gICAgaWYg
KGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQotICAgICAgICByZXR1cm4g
ZXJyOwotCi0gICAgdmFyIGtWZXJzaW9uU2l6ZXMgPSBbCi0gICAgICB7dmVyc2lvbjogMCwgbnVt
Qnl0ZXM6IDE2fQotICAgIF07Ci0gICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0
cnVjdFZlcnNpb24ob2Zmc2V0LCBrVmVyc2lvblNpemVzKTsKLSAgICBpZiAoZXJyICE9PSB2YWxp
ZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCi0gICAgICAgIHJldHVybiBlcnI7Ci0KLQotICAg
IC8vIHZhbGlkYXRlIEJpZ0J1ZmZlclNoYXJlZE1lbW9yeVJlZ2lvbi5idWZmZXJIYW5kbGUKLSAg
ICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlSGFuZGxlKG9mZnNldCArIGNvZGVjLmtT
dHJ1Y3RIZWFkZXJTaXplICsgMCwgZmFsc2UpCi0gICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZh
bGlkYXRpb25FcnJvci5OT05FKQotICAgICAgICByZXR1cm4gZXJyOwotCi0KLSAgICByZXR1cm4g
dmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FOwotICB9OwotCi0gIEJpZ0J1ZmZlclNoYXJl
ZE1lbW9yeVJlZ2lvbi5lbmNvZGVkU2l6ZSA9IGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgODsK
LQotICBCaWdCdWZmZXJTaGFyZWRNZW1vcnlSZWdpb24uZGVjb2RlID0gZnVuY3Rpb24oZGVjb2Rl
cikgewotICAgIHZhciBwYWNrZWQ7Ci0gICAgdmFyIHZhbCA9IG5ldyBCaWdCdWZmZXJTaGFyZWRN
ZW1vcnlSZWdpb24oKTsKLSAgICB2YXIgbnVtYmVyT2ZCeXRlcyA9IGRlY29kZXIucmVhZFVpbnQz
MigpOwotICAgIHZhciB2ZXJzaW9uID0gZGVjb2Rlci5yZWFkVWludDMyKCk7Ci0gICAgdmFsLmJ1
ZmZlckhhbmRsZSA9IGRlY29kZXIuZGVjb2RlU3RydWN0KGNvZGVjLkhhbmRsZSk7Ci0gICAgdmFs
LnNpemUgPSBkZWNvZGVyLmRlY29kZVN0cnVjdChjb2RlYy5VaW50MzIpOwotICAgIHJldHVybiB2
YWw7Ci0gIH07Ci0KLSAgQmlnQnVmZmVyU2hhcmVkTWVtb3J5UmVnaW9uLmVuY29kZSA9IGZ1bmN0
aW9uKGVuY29kZXIsIHZhbCkgewotICAgIHZhciBwYWNrZWQ7Ci0gICAgZW5jb2Rlci53cml0ZVVp
bnQzMihCaWdCdWZmZXJTaGFyZWRNZW1vcnlSZWdpb24uZW5jb2RlZFNpemUpOwotICAgIGVuY29k
ZXIud3JpdGVVaW50MzIoMCk7Ci0gICAgZW5jb2Rlci5lbmNvZGVTdHJ1Y3QoY29kZWMuSGFuZGxl
LCB2YWwuYnVmZmVySGFuZGxlKTsKLSAgICBlbmNvZGVyLmVuY29kZVN0cnVjdChjb2RlYy5VaW50
MzIsIHZhbC5zaXplKTsKLSAgfTsKLQotICBmdW5jdGlvbiBCaWdCdWZmZXIodmFsdWUpIHsKLSAg
ICB0aGlzLmluaXREZWZhdWx0XygpOwotICAgIHRoaXMuaW5pdFZhbHVlXyh2YWx1ZSk7Ci0gIH0K
LQotCi0gIEJpZ0J1ZmZlci5UYWdzID0gewotICAgIGJ5dGVzOiAwLAotICAgIHNoYXJlZE1lbW9y
eTogMSwKLSAgICBpbnZhbGlkQnVmZmVyOiAyLAotICB9OwotCi0gIEJpZ0J1ZmZlci5wcm90b3R5
cGUuaW5pdERlZmF1bHRfID0gZnVuY3Rpb24oKSB7Ci0gICAgdGhpcy4kZGF0YSA9IG51bGw7Ci0g
ICAgdGhpcy4kdGFnID0gdW5kZWZpbmVkOwotICB9Ci0KLSAgQmlnQnVmZmVyLnByb3RvdHlwZS5p
bml0VmFsdWVfID0gZnVuY3Rpb24odmFsdWUpIHsKLSAgICBpZiAodmFsdWUgPT0gdW5kZWZpbmVk
KSB7Ci0gICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyh2
YWx1ZSk7Ci0gICAgaWYgKGtleXMubGVuZ3RoID09IDApIHsKLSAgICAgIHJldHVybjsKLSAgICB9
Ci0KLSAgICBpZiAoa2V5cy5sZW5ndGggPiAxKSB7Ci0gICAgICB0aHJvdyBuZXcgVHlwZUVycm9y
KCJZb3UgbWF5IHNldCBvbmx5IG9uZSBtZW1iZXIgb24gYSB1bmlvbi4iKTsKLSAgICB9Ci0KLSAg
ICB2YXIgZmllbGRzID0gWwotICAgICAgICAiYnl0ZXMiLAotICAgICAgICAic2hhcmVkTWVtb3J5
IiwKLSAgICAgICAgImludmFsaWRCdWZmZXIiLAotICAgIF07Ci0KLSAgICBpZiAoZmllbGRzLmlu
ZGV4T2Yoa2V5c1swXSkgPCAwKSB7Ci0gICAgICB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3Ioa2V5
c1swXSArICIgaXMgbm90IGEgQmlnQnVmZmVyIG1lbWJlci4iKTsKLQotICAgIH0KLQotICAgIHRo
aXNba2V5c1swXV0gPSB2YWx1ZVtrZXlzWzBdXTsKLSAgfQotICBPYmplY3QuZGVmaW5lUHJvcGVy
dHkoQmlnQnVmZmVyLnByb3RvdHlwZSwgImJ5dGVzIiwgewotICAgIGdldDogZnVuY3Rpb24oKSB7
Ci0gICAgICBpZiAodGhpcy4kdGFnICE9IEJpZ0J1ZmZlci5UYWdzLmJ5dGVzKSB7Ci0gICAgICAg
IHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcigKLSAgICAgICAgICAgICJCaWdCdWZmZXIuYnl0ZXMg
aXMgbm90IGN1cnJlbnRseSBzZXQuIik7Ci0gICAgICB9Ci0gICAgICByZXR1cm4gdGhpcy4kZGF0
YTsKLSAgICB9LAotCi0gICAgc2V0OiBmdW5jdGlvbih2YWx1ZSkgewotICAgICAgdGhpcy4kdGFn
ID0gQmlnQnVmZmVyLlRhZ3MuYnl0ZXM7Ci0gICAgICB0aGlzLiRkYXRhID0gdmFsdWU7Ci0gICAg
fQotICB9KTsKLSAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEJpZ0J1ZmZlci5wcm90b3R5cGUsICJz
aGFyZWRNZW1vcnkiLCB7Ci0gICAgZ2V0OiBmdW5jdGlvbigpIHsKLSAgICAgIGlmICh0aGlzLiR0
YWcgIT0gQmlnQnVmZmVyLlRhZ3Muc2hhcmVkTWVtb3J5KSB7Ci0gICAgICAgIHRocm93IG5ldyBS
ZWZlcmVuY2VFcnJvcigKLSAgICAgICAgICAgICJCaWdCdWZmZXIuc2hhcmVkTWVtb3J5IGlzIG5v
dCBjdXJyZW50bHkgc2V0LiIpOwotICAgICAgfQotICAgICAgcmV0dXJuIHRoaXMuJGRhdGE7Ci0g
ICAgfSwKLQotICAgIHNldDogZnVuY3Rpb24odmFsdWUpIHsKLSAgICAgIHRoaXMuJHRhZyA9IEJp
Z0J1ZmZlci5UYWdzLnNoYXJlZE1lbW9yeTsKLSAgICAgIHRoaXMuJGRhdGEgPSB2YWx1ZTsKLSAg
ICB9Ci0gIH0pOwotICBPYmplY3QuZGVmaW5lUHJvcGVydHkoQmlnQnVmZmVyLnByb3RvdHlwZSwg
ImludmFsaWRCdWZmZXIiLCB7Ci0gICAgZ2V0OiBmdW5jdGlvbigpIHsKLSAgICAgIGlmICh0aGlz
LiR0YWcgIT0gQmlnQnVmZmVyLlRhZ3MuaW52YWxpZEJ1ZmZlcikgewotICAgICAgICB0aHJvdyBu
ZXcgUmVmZXJlbmNlRXJyb3IoCi0gICAgICAgICAgICAiQmlnQnVmZmVyLmludmFsaWRCdWZmZXIg
aXMgbm90IGN1cnJlbnRseSBzZXQuIik7Ci0gICAgICB9Ci0gICAgICByZXR1cm4gdGhpcy4kZGF0
YTsKLSAgICB9LAotCi0gICAgc2V0OiBmdW5jdGlvbih2YWx1ZSkgewotICAgICAgdGhpcy4kdGFn
ID0gQmlnQnVmZmVyLlRhZ3MuaW52YWxpZEJ1ZmZlcjsKLSAgICAgIHRoaXMuJGRhdGEgPSB2YWx1
ZTsKLSAgICB9Ci0gIH0pOwotCi0KLSAgICBCaWdCdWZmZXIuZW5jb2RlID0gZnVuY3Rpb24oZW5j
b2RlciwgdmFsKSB7Ci0gICAgICBpZiAodmFsID09IG51bGwpIHsKLSAgICAgICAgZW5jb2Rlci53
cml0ZVVpbnQ2NCgwKTsKLSAgICAgICAgZW5jb2Rlci53cml0ZVVpbnQ2NCgwKTsKLSAgICAgICAg
cmV0dXJuOwotICAgICAgfQotICAgICAgaWYgKHZhbC4kdGFnID09IHVuZGVmaW5lZCkgewotICAg
ICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgZW5jb2RlIHVuaW9ucyB3aXRoIGFuIHVu
a25vd24gbWVtYmVyIHNldC4iKTsKLSAgICAgIH0KLQotICAgICAgZW5jb2Rlci53cml0ZVVpbnQz
MigxNik7Ci0gICAgICBlbmNvZGVyLndyaXRlVWludDMyKHZhbC4kdGFnKTsKLSAgICAgIHN3aXRj
aCAodmFsLiR0YWcpIHsKLSAgICAgICAgY2FzZSBCaWdCdWZmZXIuVGFncy5ieXRlczoKLSAgICAg
ICAgICBlbmNvZGVyLmVuY29kZUFycmF5UG9pbnRlcihjb2RlYy5VaW50OCwgdmFsLmJ5dGVzKTsK
LSAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBCaWdCdWZmZXIuVGFncy5zaGFyZWRNZW1v
cnk6Ci0gICAgICAgICAgZW5jb2Rlci5lbmNvZGVTdHJ1Y3RQb2ludGVyKEJpZ0J1ZmZlclNoYXJl
ZE1lbW9yeVJlZ2lvbiwgdmFsLnNoYXJlZE1lbW9yeSk7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIGNhc2UgQmlnQnVmZmVyLlRhZ3MuaW52YWxpZEJ1ZmZlcjoKLSAgICAgICAgICBlbmNvZGVy
LndyaXRlVWludDgodmFsLmludmFsaWRCdWZmZXIgPyAxIDogMCk7Ci0gICAgICAgICAgYnJlYWs7
Ci0gICAgICB9Ci0gICAgICBlbmNvZGVyLmFsaWduKCk7Ci0gICAgfTsKLQotCi0gICAgQmlnQnVm
ZmVyLmRlY29kZSA9IGZ1bmN0aW9uKGRlY29kZXIpIHsKLSAgICAgIHZhciBzaXplID0gZGVjb2Rl
ci5yZWFkVWludDMyKCk7Ci0gICAgICBpZiAoc2l6ZSA9PSAwKSB7Ci0gICAgICAgIGRlY29kZXIu
cmVhZFVpbnQzMigpOwotICAgICAgICBkZWNvZGVyLnJlYWRVaW50NjQoKTsKLSAgICAgICAgcmV0
dXJuIG51bGw7Ci0gICAgICB9Ci0KLSAgICAgIHZhciByZXN1bHQgPSBuZXcgQmlnQnVmZmVyKCk7
Ci0gICAgICB2YXIgdGFnID0gZGVjb2Rlci5yZWFkVWludDMyKCk7Ci0gICAgICBzd2l0Y2ggKHRh
ZykgewotICAgICAgICBjYXNlIEJpZ0J1ZmZlci5UYWdzLmJ5dGVzOgotICAgICAgICAgIHJlc3Vs
dC5ieXRlcyA9IGRlY29kZXIuZGVjb2RlQXJyYXlQb2ludGVyKGNvZGVjLlVpbnQ4KTsKLSAgICAg
ICAgICBicmVhazsKLSAgICAgICAgY2FzZSBCaWdCdWZmZXIuVGFncy5zaGFyZWRNZW1vcnk6Ci0g
ICAgICAgICAgcmVzdWx0LnNoYXJlZE1lbW9yeSA9IGRlY29kZXIuZGVjb2RlU3RydWN0UG9pbnRl
cihCaWdCdWZmZXJTaGFyZWRNZW1vcnlSZWdpb24pOwotICAgICAgICAgIGJyZWFrOwotICAgICAg
ICBjYXNlIEJpZ0J1ZmZlci5UYWdzLmludmFsaWRCdWZmZXI6Ci0gICAgICAgICAgcmVzdWx0Lmlu
dmFsaWRCdWZmZXIgPSBkZWNvZGVyLnJlYWRVaW50OCgpID8gdHJ1ZSA6IGZhbHNlOwotICAgICAg
ICAgIGJyZWFrOwotICAgICAgfQotICAgICAgZGVjb2Rlci5hbGlnbigpOwotCi0gICAgICByZXR1
cm4gcmVzdWx0OwotICAgIH07Ci0KLQotICAgIEJpZ0J1ZmZlci52YWxpZGF0ZSA9IGZ1bmN0aW9u
KG1lc3NhZ2VWYWxpZGF0b3IsIG9mZnNldCkgewotICAgICAgdmFyIHNpemUgPSBtZXNzYWdlVmFs
aWRhdG9yLmRlY29kZVVuaW9uU2l6ZShvZmZzZXQpOwotICAgICAgaWYgKHNpemUgIT0gMTYpIHsK
LSAgICAgICAgcmV0dXJuIHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuSU5WQUxJRF9VTklPTl9T
SVpFOwotICAgICAgfQotCi0gICAgICB2YXIgdGFnID0gbWVzc2FnZVZhbGlkYXRvci5kZWNvZGVV
bmlvblRhZyhvZmZzZXQpOwotICAgICAgdmFyIGRhdGFfb2Zmc2V0ID0gb2Zmc2V0ICsgODsKLSAg
ICAgIHZhciBlcnI7Ci0gICAgICBzd2l0Y2ggKHRhZykgewotICAgICAgICBjYXNlIEJpZ0J1ZmZl
ci5UYWdzLmJ5dGVzOgotCi0KLSAgICAvLyB2YWxpZGF0ZSBCaWdCdWZmZXIuYnl0ZXMKLSAgICBl
cnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlQXJyYXlQb2ludGVyKGRhdGFfb2Zmc2V0LCAx
LCBjb2RlYy5VaW50OCwgZmFsc2UsIFswXSwgMCk7Ci0gICAgaWYgKGVyciAhPT0gdmFsaWRhdG9y
LnZhbGlkYXRpb25FcnJvci5OT05FKQotICAgICAgICByZXR1cm4gZXJyOwotICAgICAgICAgIGJy
ZWFrOwotICAgICAgICBjYXNlIEJpZ0J1ZmZlci5UYWdzLnNoYXJlZE1lbW9yeToKLQotCi0gICAg
Ly8gdmFsaWRhdGUgQmlnQnVmZmVyLnNoYXJlZE1lbW9yeQotICAgIGVyciA9IG1lc3NhZ2VWYWxp
ZGF0b3IudmFsaWRhdGVTdHJ1Y3RQb2ludGVyKGRhdGFfb2Zmc2V0LCBCaWdCdWZmZXJTaGFyZWRN
ZW1vcnlSZWdpb24sIGZhbHNlKTsKLSAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlv
bkVycm9yLk5PTkUpCi0gICAgICAgIHJldHVybiBlcnI7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIGNhc2UgQmlnQnVmZmVyLlRhZ3MuaW52YWxpZEJ1ZmZlcjoKLQotCi0gICAgICAgICAgYnJl
YWs7Ci0gICAgICB9Ci0KLSAgICAgIHJldHVybiB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5P
TkU7Ci0gICAgfTsKLQotICBCaWdCdWZmZXIuZW5jb2RlZFNpemUgPSAxNjsKLSAgZXhwb3J0cy5C
aWdCdWZmZXJTaGFyZWRNZW1vcnlSZWdpb24gPSBCaWdCdWZmZXJTaGFyZWRNZW1vcnlSZWdpb247
Ci0gIGV4cG9ydHMuQmlnQnVmZmVyID0gQmlnQnVmZmVyOwotfSkoKTsKZGlmZiAtLWdpdCBhL0xh
eW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9t
aXVtL2JpZ19idWZmZXIubW9qb20uanMuaGVhZGVycyBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3cz
Yy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL2JpZ19idWZmZXIubW9qb20u
anMuaGVhZGVycwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmM2MWEzNGE0ZWMyZTc1
MDk2ZGIwZWI5Zjc3NDhiMTQyZjBkYjdiYi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMAotLS0gYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRl
c3RzL3Jlc291cmNlcy9jaHJvbWl1bS9iaWdfYnVmZmVyLm1vam9tLmpzLmhlYWRlcnMKKysrIC9k
ZXYvbnVsbApAQCAtMSArMCwwIEBACi1Db250ZW50LVR5cGU6IHRleHQvamF2YXNjcmlwdDsgY2hh
cnNldD11dGYtOApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL0xheW91
dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVt
L2NvbnRhY3RzX21hbmFnZXJfbW9jay5qcyBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWIt
cGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL2NvbnRhY3RzX21hbmFnZXJfbW9jay5q
cwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDQzZDUwYmJjNjJiZWY3MWU0MDhmZmJh
NTdlYjY2Nzg3NzJkYTIyNC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MAotLS0gYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291
cmNlcy9jaHJvbWl1bS9jb250YWN0c19tYW5hZ2VyX21vY2suanMKKysrIC9kZXYvbnVsbApAQCAt
MSw5MCArMCwwIEBACi0vLyBDb3B5cmlnaHQgMjAxOCBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVk
IGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNF
TlNFIGZpbGUuCi0KLSd1c2Ugc3RyaWN0JzsKLQotY29uc3QgV2ViQ29udGFjdHNUZXN0ID0gKCgp
ID0+IHsKLSAgY2xhc3MgTW9ja0NvbnRhY3RzIHsKLSAgICBjb25zdHJ1Y3RvcigpIHsKLSAgICAg
IHRoaXMuYmluZGluZ1NldF8gPSBuZXcgbW9qby5CaW5kaW5nU2V0KGJsaW5rLm1vam9tLkNvbnRh
Y3RzTWFuYWdlcik7Ci0KLSAgICAgIHRoaXMuaW50ZXJjZXB0b3JfID0KLSAgICAgICAgICBuZXcg
TW9qb0ludGVyZmFjZUludGVyY2VwdG9yKGJsaW5rLm1vam9tLkNvbnRhY3RzTWFuYWdlci5uYW1l
KTsKLSAgICAgIHRoaXMuaW50ZXJjZXB0b3JfLm9uaW50ZXJmYWNlcmVxdWVzdCA9Ci0gICAgICAg
ICAgZSA9PiB0aGlzLmJpbmRpbmdTZXRfLmFkZEJpbmRpbmcodGhpcywgZS5oYW5kbGUpOwotICAg
ICAgdGhpcy5pbnRlcmNlcHRvcl8uc3RhcnQoKTsKLQotICAgICAgdGhpcy5zZWxlY3RlZENvbnRh
Y3RzXyA9IFtdOwotICAgIH0KLQotICAgIGZvcm1hdEFkZHJlc3NfKGFkZHJlc3MpIHsKLSAgICAg
IC8vIFRoZXNlIGFyZSBhbGwgcmVxdWlyZWQgZmllbGRzIGluIHRoZSBtb2pvIGRlZmluaXRpb24u
Ci0gICAgICByZXR1cm4gewotICAgICAgICBjb3VudHJ5OiBhZGRyZXNzLmNvdW50cnkgfHwgJycs
Ci0gICAgICAgIGFkZHJlc3NMaW5lOiBhZGRyZXNzLmFkZHJlc3NMaW5lIHx8IFtdLAotICAgICAg
ICByZWdpb246IGFkZHJlc3MucmVnaW9uIHx8ICcnLAotICAgICAgICBjaXR5OiBhZGRyZXNzLmNp
dHkgfHwgJycsCi0gICAgICAgIGRlcGVuZGVudExvY2FsaXR5OiBhZGRyZXNzLmRlcGVuZGVudExv
Y2FsaXR5IHx8ICcnLAotICAgICAgICBwb3N0YWxDb2RlOiBhZGRyZXNzLnBvc3RDb2RlIHx8ICcn
LAotICAgICAgICBzb3J0aW5nQ29kZTogYWRkcmVzcy5zb3J0aW5nQ29kZSB8fCAnJywKLSAgICAg
ICAgb3JnYW5pemF0aW9uOiBhZGRyZXNzLm9yZ2FuaXphdGlvbiB8fCAnJywKLSAgICAgICAgcmVj
aXBpZW50OiBhZGRyZXNzLnJlY2lwaWVudCB8fCAnJywKLSAgICAgICAgcGhvbmU6IGFkZHJlc3Mu
cGhvbmUgfHwgJycsCi0gICAgICB9OwotICAgIH0KLQotICAgIGFzeW5jIHNlbGVjdChtdWx0aXBs
ZSwgaW5jbHVkZU5hbWVzLCBpbmNsdWRlRW1haWxzLCBpbmNsdWRlVGVsLCBpbmNsdWRlQWRkcmVz
c2VzLCBpbmNsdWRlSWNvbnMpIHsKLSAgICAgIGlmICh0aGlzLnNlbGVjdGVkQ29udGFjdHNfID09
PSBudWxsKQotICAgICAgICByZXR1cm4ge2NvbnRhY3RzOiBudWxsfTsKLQotICAgICAgY29uc3Qg
Y29udGFjdEluZm9zID0gYXdhaXQgUHJvbWlzZS5hbGwodGhpcy5zZWxlY3RlZENvbnRhY3RzXy5t
YXAoYXN5bmMgY29udGFjdCA9PiB7Ci0gICAgICAgIGNvbnN0IGNvbnRhY3RJbmZvID0gbmV3IGJs
aW5rLm1vam9tLkNvbnRhY3RJbmZvKCk7Ci0gICAgICAgIGlmIChpbmNsdWRlTmFtZXMpCi0gICAg
ICAgICAgY29udGFjdEluZm8ubmFtZSA9IGNvbnRhY3QubmFtZSB8fCBbXTsKLSAgICAgICAgaWYg
KGluY2x1ZGVFbWFpbHMpCi0gICAgICAgICAgY29udGFjdEluZm8uZW1haWwgPSBjb250YWN0LmVt
YWlsIHx8IFtdOwotICAgICAgICBpZiAoaW5jbHVkZVRlbCkKLSAgICAgICAgICBjb250YWN0SW5m
by50ZWwgPSBjb250YWN0LnRlbCB8fCBbXTsKLSAgICAgICAgaWYgKGluY2x1ZGVBZGRyZXNzZXMp
IHsKLSAgICAgICAgICBjb250YWN0SW5mby5hZGRyZXNzID0gKGNvbnRhY3QuYWRkcmVzcyB8fCBb
XSkubWFwKGFkZHJlc3MgPT4gdGhpcy5mb3JtYXRBZGRyZXNzXyhhZGRyZXNzKSk7Ci0gICAgICAg
IH0KLSAgICAgICAgaWYgKGluY2x1ZGVJY29ucykgewotICAgICAgICAgIGNvbnRhY3RJbmZvLmlj
b24gPSBhd2FpdCBQcm9taXNlLmFsbCgKLSAgICAgICAgICAgIChjb250YWN0Lmljb24gfHwgW10p
Lm1hcChhc3luYyBibG9iID0+ICh7Ci0gICAgICAgICAgICAgIG1pbWVUeXBlOiBibG9iLnR5cGUs
Ci0gICAgICAgICAgICAgIGRhdGE6IChhd2FpdCBibG9iLnRleHQoKSkuc3BsaXQoJycpLm1hcChz
ID0+IHMuY2hhckNvZGVBdCgwKSksCi0gICAgICAgICAgICB9KSkpOwotICAgICAgICB9Ci0gICAg
ICAgIHJldHVybiBjb250YWN0SW5mbzsKLSAgICAgIH0pKTsKLQotICAgICAgaWYgKCFjb250YWN0
SW5mb3MubGVuZ3RoKSByZXR1cm4ge2NvbnRhY3RzOiBbXX07Ci0gICAgICBpZiAoIW11bHRpcGxl
KSByZXR1cm4ge2NvbnRhY3RzOiBbY29udGFjdEluZm9zWzBdXX07Ci0gICAgICByZXR1cm4ge2Nv
bnRhY3RzOiBjb250YWN0SW5mb3N9OwotICAgIH0KLQotICAgIHNldFNlbGVjdGVkQ29udGFjdHMo
Y29udGFjdHMpIHsKLSAgICAgIHRoaXMuc2VsZWN0ZWRDb250YWN0c18gPSBjb250YWN0czsKLSAg
ICB9Ci0KLSAgICByZXNldCgpIHsKLSAgICAgIHRoaXMuYmluZGluZ1NldF8uY2xvc2VBbGxCaW5k
aW5ncygpOwotICAgICAgdGhpcy5pbnRlcmNlcHRvcl8uc3RvcCgpOwotICAgIH0KLSAgfQotCi0g
IGNvbnN0IG1vY2tDb250YWN0cyA9IG5ldyBNb2NrQ29udGFjdHMoKTsKLQotICBjbGFzcyBDb250
YWN0c1Rlc3RDaHJvbWl1bSB7Ci0gICAgY29uc3RydWN0b3IoKSB7Ci0gICAgICBPYmplY3QuZnJl
ZXplKHRoaXMpOyAvLyBNYWtlIGl0IGltbXV0YWJsZS4KLSAgICB9Ci0KLSAgICBzZXRTZWxlY3Rl
ZENvbnRhY3RzKGNvbnRhY3RzKSB7Ci0gICAgICBtb2NrQ29udGFjdHMuc2V0U2VsZWN0ZWRDb250
YWN0cyhjb250YWN0cyk7Ci0gICAgfQotICB9Ci0KLSAgcmV0dXJuIENvbnRhY3RzVGVzdENocm9t
aXVtOwotfSkoKTsKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxh
dGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL2RldmljZS5tb2pvbS5qcyBiL0xheW91dFRl
c3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL2Rl
dmljZS5tb2pvbS5qcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjQ4OGNiYzY5YzI5
MTcwZDk0NDFkMjIxMGRhMjdhNDY0ZjY3ZDQ0NS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMAotLS0gYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3Jt
LXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS9kZXZpY2UubW9qb20uanMKKysrIC9kZXYvbnVsbApA
QCAtMSwzNzg4ICswLDAgQEAKLS8vIENvcHlyaWdodCAyMDE0IFRoZSBDaHJvbWl1bSBBdXRob3Jz
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292
ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhl
IExJQ0VOU0UgZmlsZS4KLQotJ3VzZSBzdHJpY3QnOwotCi0oZnVuY3Rpb24oKSB7Ci0gIHZhciBt
b2pvbUlkID0gJ2RldmljZS91c2IvcHVibGljL21vam9tL2RldmljZS5tb2pvbSc7Ci0gIGlmICht
b2pvLmludGVybmFsLmlzTW9qb21Mb2FkZWQobW9qb21JZCkpIHsKLSAgICBjb25zb2xlLndhcm4o
J1RoZSBmb2xsb3dpbmcgbW9qb20gaXMgbG9hZGVkIG11bHRpcGxlIHRpbWVzOiAnICsgbW9qb21J
ZCk7Ci0gICAgcmV0dXJuOwotICB9Ci0gIG1vam8uaW50ZXJuYWwubWFya01vam9tTG9hZGVkKG1v
am9tSWQpOwotICB2YXIgYmluZGluZ3MgPSBtb2pvOwotICB2YXIgYXNzb2NpYXRlZEJpbmRpbmdz
ID0gbW9qbzsKLSAgdmFyIGNvZGVjID0gbW9qby5pbnRlcm5hbDsKLSAgdmFyIHZhbGlkYXRvciA9
IG1vam8uaW50ZXJuYWw7Ci0KLSAgdmFyIGV4cG9ydHMgPSBtb2pvLmludGVybmFsLmV4cG9zZU5h
bWVzcGFjZSgnZGV2aWNlLm1vam9tJyk7Ci0gIHZhciBzdHJpbmcxNiQgPQotICAgICAgbW9qby5p
bnRlcm5hbC5leHBvc2VOYW1lc3BhY2UoJ21vam9CYXNlLm1vam9tJyk7Ci0gIGlmIChtb2pvLmNv
bmZpZy5hdXRvTG9hZE1vam9tRGVwcykgewotICAgIG1vam8uaW50ZXJuYWwubG9hZE1vam9tSWZO
ZWNlc3NhcnkoCi0gICAgICAgICdtb2pvL3B1YmxpYy9tb2pvbS9iYXNlL3N0cmluZzE2Lm1vam9t
JywgJy4uLy4uLy4uLy4uL21vam8vcHVibGljL21vam9tL2Jhc2Uvc3RyaW5nMTYubW9qb20uanMn
KTsKLSAgfQotICB2YXIgdXJsJCA9Ci0gICAgICBtb2pvLmludGVybmFsLmV4cG9zZU5hbWVzcGFj
ZSgndXJsLm1vam9tJyk7Ci0gIGlmIChtb2pvLmNvbmZpZy5hdXRvTG9hZE1vam9tRGVwcykgewot
ICAgIG1vam8uaW50ZXJuYWwubG9hZE1vam9tSWZOZWNlc3NhcnkoCi0gICAgICAgICd1cmwvbW9q
b20vdXJsLm1vam9tJywgJy4uLy4uLy4uLy4uL3VybC9tb2pvbS91cmwubW9qb20uanMnKTsKLSAg
fQotCi0KLSAgdmFyIFVzYk9wZW5EZXZpY2VFcnJvciA9IHt9OwotICBVc2JPcGVuRGV2aWNlRXJy
b3IuT0sgPSAwOwotICBVc2JPcGVuRGV2aWNlRXJyb3IuQUNDRVNTX0RFTklFRCA9IFVzYk9wZW5E
ZXZpY2VFcnJvci5PSyArIDE7Ci0gIFVzYk9wZW5EZXZpY2VFcnJvci5BTFJFQURZX09QRU4gPSBV
c2JPcGVuRGV2aWNlRXJyb3IuQUNDRVNTX0RFTklFRCArIDE7Ci0gIFVzYk9wZW5EZXZpY2VFcnJv
ci5NSU5fVkFMVUUgPSAwLAotICBVc2JPcGVuRGV2aWNlRXJyb3IuTUFYX1ZBTFVFID0gMiwKLQot
ICBVc2JPcGVuRGV2aWNlRXJyb3IuaXNLbm93bkVudW1WYWx1ZSA9IGZ1bmN0aW9uKHZhbHVlKSB7
Ci0gICAgc3dpdGNoICh2YWx1ZSkgewotICAgIGNhc2UgMDoKLSAgICBjYXNlIDE6Ci0gICAgY2Fz
ZSAyOgotICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLSAgfTsK
LQotICBVc2JPcGVuRGV2aWNlRXJyb3IudmFsaWRhdGUgPSBmdW5jdGlvbihlbnVtVmFsdWUpIHsK
LSAgICB2YXIgaXNFeHRlbnNpYmxlID0gZmFsc2U7Ci0gICAgaWYgKGlzRXh0ZW5zaWJsZSB8fCB0
aGlzLmlzS25vd25FbnVtVmFsdWUoZW51bVZhbHVlKSkKLSAgICAgIHJldHVybiB2YWxpZGF0b3Iu
dmFsaWRhdGlvbkVycm9yLk5PTkU7Ci0KLSAgICByZXR1cm4gdmFsaWRhdG9yLnZhbGlkYXRpb25F
cnJvci5VTktOT1dOX0VOVU1fVkFMVUU7Ci0gIH07Ci0gIHZhciBVc2JUcmFuc2ZlckRpcmVjdGlv
biA9IHt9OwotICBVc2JUcmFuc2ZlckRpcmVjdGlvbi5JTkJPVU5EID0gMDsKLSAgVXNiVHJhbnNm
ZXJEaXJlY3Rpb24uT1VUQk9VTkQgPSBVc2JUcmFuc2ZlckRpcmVjdGlvbi5JTkJPVU5EICsgMTsK
LSAgVXNiVHJhbnNmZXJEaXJlY3Rpb24uTUlOX1ZBTFVFID0gMCwKLSAgVXNiVHJhbnNmZXJEaXJl
Y3Rpb24uTUFYX1ZBTFVFID0gMSwKLQotICBVc2JUcmFuc2ZlckRpcmVjdGlvbi5pc0tub3duRW51
bVZhbHVlID0gZnVuY3Rpb24odmFsdWUpIHsKLSAgICBzd2l0Y2ggKHZhbHVlKSB7Ci0gICAgY2Fz
ZSAwOgotICAgIGNhc2UgMToKLSAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICByZXR1cm4g
ZmFsc2U7Ci0gIH07Ci0KLSAgVXNiVHJhbnNmZXJEaXJlY3Rpb24udmFsaWRhdGUgPSBmdW5jdGlv
bihlbnVtVmFsdWUpIHsKLSAgICB2YXIgaXNFeHRlbnNpYmxlID0gZmFsc2U7Ci0gICAgaWYgKGlz
RXh0ZW5zaWJsZSB8fCB0aGlzLmlzS25vd25FbnVtVmFsdWUoZW51bVZhbHVlKSkKLSAgICAgIHJl
dHVybiB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkU7Ci0KLSAgICByZXR1cm4gdmFsaWRh
dG9yLnZhbGlkYXRpb25FcnJvci5VTktOT1dOX0VOVU1fVkFMVUU7Ci0gIH07Ci0gIHZhciBVc2JD
b250cm9sVHJhbnNmZXJUeXBlID0ge307Ci0gIFVzYkNvbnRyb2xUcmFuc2ZlclR5cGUuU1RBTkRB
UkQgPSAwOwotICBVc2JDb250cm9sVHJhbnNmZXJUeXBlLkNMQVNTID0gVXNiQ29udHJvbFRyYW5z
ZmVyVHlwZS5TVEFOREFSRCArIDE7Ci0gIFVzYkNvbnRyb2xUcmFuc2ZlclR5cGUuVkVORE9SID0g
VXNiQ29udHJvbFRyYW5zZmVyVHlwZS5DTEFTUyArIDE7Ci0gIFVzYkNvbnRyb2xUcmFuc2ZlclR5
cGUuUkVTRVJWRUQgPSBVc2JDb250cm9sVHJhbnNmZXJUeXBlLlZFTkRPUiArIDE7Ci0gIFVzYkNv
bnRyb2xUcmFuc2ZlclR5cGUuTUlOX1ZBTFVFID0gMCwKLSAgVXNiQ29udHJvbFRyYW5zZmVyVHlw
ZS5NQVhfVkFMVUUgPSAzLAotCi0gIFVzYkNvbnRyb2xUcmFuc2ZlclR5cGUuaXNLbm93bkVudW1W
YWx1ZSA9IGZ1bmN0aW9uKHZhbHVlKSB7Ci0gICAgc3dpdGNoICh2YWx1ZSkgewotICAgIGNhc2Ug
MDoKLSAgICBjYXNlIDE6Ci0gICAgY2FzZSAyOgotICAgIGNhc2UgMzoKLSAgICAgIHJldHVybiB0
cnVlOwotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci0gIH07Ci0KLSAgVXNiQ29udHJvbFRyYW5z
ZmVyVHlwZS52YWxpZGF0ZSA9IGZ1bmN0aW9uKGVudW1WYWx1ZSkgewotICAgIHZhciBpc0V4dGVu
c2libGUgPSBmYWxzZTsKLSAgICBpZiAoaXNFeHRlbnNpYmxlIHx8IHRoaXMuaXNLbm93bkVudW1W
YWx1ZShlbnVtVmFsdWUpKQotICAgICAgcmV0dXJuIHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3Iu
Tk9ORTsKLQotICAgIHJldHVybiB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLlVOS05PV05fRU5V
TV9WQUxVRTsKLSAgfTsKLSAgdmFyIFVzYkNvbnRyb2xUcmFuc2ZlclJlY2lwaWVudCA9IHt9Owot
ICBVc2JDb250cm9sVHJhbnNmZXJSZWNpcGllbnQuREVWSUNFID0gMDsKLSAgVXNiQ29udHJvbFRy
YW5zZmVyUmVjaXBpZW50LklOVEVSRkFDRSA9IFVzYkNvbnRyb2xUcmFuc2ZlclJlY2lwaWVudC5E
RVZJQ0UgKyAxOwotICBVc2JDb250cm9sVHJhbnNmZXJSZWNpcGllbnQuRU5EUE9JTlQgPSBVc2JD
b250cm9sVHJhbnNmZXJSZWNpcGllbnQuSU5URVJGQUNFICsgMTsKLSAgVXNiQ29udHJvbFRyYW5z
ZmVyUmVjaXBpZW50Lk9USEVSID0gVXNiQ29udHJvbFRyYW5zZmVyUmVjaXBpZW50LkVORFBPSU5U
ICsgMTsKLSAgVXNiQ29udHJvbFRyYW5zZmVyUmVjaXBpZW50Lk1JTl9WQUxVRSA9IDAsCi0gIFVz
YkNvbnRyb2xUcmFuc2ZlclJlY2lwaWVudC5NQVhfVkFMVUUgPSAzLAotCi0gIFVzYkNvbnRyb2xU
cmFuc2ZlclJlY2lwaWVudC5pc0tub3duRW51bVZhbHVlID0gZnVuY3Rpb24odmFsdWUpIHsKLSAg
ICBzd2l0Y2ggKHZhbHVlKSB7Ci0gICAgY2FzZSAwOgotICAgIGNhc2UgMToKLSAgICBjYXNlIDI6
Ci0gICAgY2FzZSAzOgotICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIHJldHVybiBmYWxz
ZTsKLSAgfTsKLQotICBVc2JDb250cm9sVHJhbnNmZXJSZWNpcGllbnQudmFsaWRhdGUgPSBmdW5j
dGlvbihlbnVtVmFsdWUpIHsKLSAgICB2YXIgaXNFeHRlbnNpYmxlID0gZmFsc2U7Ci0gICAgaWYg
KGlzRXh0ZW5zaWJsZSB8fCB0aGlzLmlzS25vd25FbnVtVmFsdWUoZW51bVZhbHVlKSkKLSAgICAg
IHJldHVybiB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkU7Ci0KLSAgICByZXR1cm4gdmFs
aWRhdG9yLnZhbGlkYXRpb25FcnJvci5VTktOT1dOX0VOVU1fVkFMVUU7Ci0gIH07Ci0gIHZhciBV
c2JUcmFuc2ZlclR5cGUgPSB7fTsKLSAgVXNiVHJhbnNmZXJUeXBlLkNPTlRST0wgPSAwOwotICBV
c2JUcmFuc2ZlclR5cGUuSVNPQ0hST05PVVMgPSBVc2JUcmFuc2ZlclR5cGUuQ09OVFJPTCArIDE7
Ci0gIFVzYlRyYW5zZmVyVHlwZS5CVUxLID0gVXNiVHJhbnNmZXJUeXBlLklTT0NIUk9OT1VTICsg
MTsKLSAgVXNiVHJhbnNmZXJUeXBlLklOVEVSUlVQVCA9IFVzYlRyYW5zZmVyVHlwZS5CVUxLICsg
MTsKLSAgVXNiVHJhbnNmZXJUeXBlLk1JTl9WQUxVRSA9IDAsCi0gIFVzYlRyYW5zZmVyVHlwZS5N
QVhfVkFMVUUgPSAzLAotCi0gIFVzYlRyYW5zZmVyVHlwZS5pc0tub3duRW51bVZhbHVlID0gZnVu
Y3Rpb24odmFsdWUpIHsKLSAgICBzd2l0Y2ggKHZhbHVlKSB7Ci0gICAgY2FzZSAwOgotICAgIGNh
c2UgMToKLSAgICBjYXNlIDI6Ci0gICAgY2FzZSAzOgotICAgICAgcmV0dXJuIHRydWU7Ci0gICAg
fQotICAgIHJldHVybiBmYWxzZTsKLSAgfTsKLQotICBVc2JUcmFuc2ZlclR5cGUudmFsaWRhdGUg
PSBmdW5jdGlvbihlbnVtVmFsdWUpIHsKLSAgICB2YXIgaXNFeHRlbnNpYmxlID0gZmFsc2U7Ci0g
ICAgaWYgKGlzRXh0ZW5zaWJsZSB8fCB0aGlzLmlzS25vd25FbnVtVmFsdWUoZW51bVZhbHVlKSkK
LSAgICAgIHJldHVybiB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkU7Ci0KLSAgICByZXR1
cm4gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5VTktOT1dOX0VOVU1fVkFMVUU7Ci0gIH07Ci0g
IHZhciBVc2JTeW5jaHJvbml6YXRpb25UeXBlID0ge307Ci0gIFVzYlN5bmNocm9uaXphdGlvblR5
cGUuTk9ORSA9IDA7Ci0gIFVzYlN5bmNocm9uaXphdGlvblR5cGUuQVNZTkNIUk9OT1VTID0gVXNi
U3luY2hyb25pemF0aW9uVHlwZS5OT05FICsgMTsKLSAgVXNiU3luY2hyb25pemF0aW9uVHlwZS5B
REFQVElWRSA9IFVzYlN5bmNocm9uaXphdGlvblR5cGUuQVNZTkNIUk9OT1VTICsgMTsKLSAgVXNi
U3luY2hyb25pemF0aW9uVHlwZS5TWU5DSFJPTk9VUyA9IFVzYlN5bmNocm9uaXphdGlvblR5cGUu
QURBUFRJVkUgKyAxOwotICBVc2JTeW5jaHJvbml6YXRpb25UeXBlLk1JTl9WQUxVRSA9IDAsCi0g
IFVzYlN5bmNocm9uaXphdGlvblR5cGUuTUFYX1ZBTFVFID0gMywKLQotICBVc2JTeW5jaHJvbml6
YXRpb25UeXBlLmlzS25vd25FbnVtVmFsdWUgPSBmdW5jdGlvbih2YWx1ZSkgewotICAgIHN3aXRj
aCAodmFsdWUpIHsKLSAgICBjYXNlIDA6Ci0gICAgY2FzZSAxOgotICAgIGNhc2UgMjoKLSAgICBj
YXNlIDM6Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9
OwotCi0gIFVzYlN5bmNocm9uaXphdGlvblR5cGUudmFsaWRhdGUgPSBmdW5jdGlvbihlbnVtVmFs
dWUpIHsKLSAgICB2YXIgaXNFeHRlbnNpYmxlID0gZmFsc2U7Ci0gICAgaWYgKGlzRXh0ZW5zaWJs
ZSB8fCB0aGlzLmlzS25vd25FbnVtVmFsdWUoZW51bVZhbHVlKSkKLSAgICAgIHJldHVybiB2YWxp
ZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkU7Ci0KLSAgICByZXR1cm4gdmFsaWRhdG9yLnZhbGlk
YXRpb25FcnJvci5VTktOT1dOX0VOVU1fVkFMVUU7Ci0gIH07Ci0gIHZhciBVc2JVc2FnZVR5cGUg
PSB7fTsKLSAgVXNiVXNhZ2VUeXBlLkRBVEEgPSAwOwotICBVc2JVc2FnZVR5cGUuRkVFREJBQ0sg
PSBVc2JVc2FnZVR5cGUuREFUQSArIDE7Ci0gIFVzYlVzYWdlVHlwZS5FWFBMSUNJVF9GRUVEQkFD
SyA9IFVzYlVzYWdlVHlwZS5GRUVEQkFDSyArIDE7Ci0gIFVzYlVzYWdlVHlwZS5QRVJJT0RJQyA9
IFVzYlVzYWdlVHlwZS5FWFBMSUNJVF9GRUVEQkFDSyArIDE7Ci0gIFVzYlVzYWdlVHlwZS5OT1RJ
RklDQVRJT04gPSBVc2JVc2FnZVR5cGUuUEVSSU9ESUMgKyAxOwotICBVc2JVc2FnZVR5cGUuUkVT
RVJWRUQgPSBVc2JVc2FnZVR5cGUuTk9USUZJQ0FUSU9OICsgMTsKLSAgVXNiVXNhZ2VUeXBlLk1J
Tl9WQUxVRSA9IDAsCi0gIFVzYlVzYWdlVHlwZS5NQVhfVkFMVUUgPSA1LAotCi0gIFVzYlVzYWdl
VHlwZS5pc0tub3duRW51bVZhbHVlID0gZnVuY3Rpb24odmFsdWUpIHsKLSAgICBzd2l0Y2ggKHZh
bHVlKSB7Ci0gICAgY2FzZSAwOgotICAgIGNhc2UgMToKLSAgICBjYXNlIDI6Ci0gICAgY2FzZSAz
OgotICAgIGNhc2UgNDoKLSAgICBjYXNlIDU6Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0g
ICAgcmV0dXJuIGZhbHNlOwotICB9OwotCi0gIFVzYlVzYWdlVHlwZS52YWxpZGF0ZSA9IGZ1bmN0
aW9uKGVudW1WYWx1ZSkgewotICAgIHZhciBpc0V4dGVuc2libGUgPSBmYWxzZTsKLSAgICBpZiAo
aXNFeHRlbnNpYmxlIHx8IHRoaXMuaXNLbm93bkVudW1WYWx1ZShlbnVtVmFsdWUpKQotICAgICAg
cmV0dXJuIHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORTsKLQotICAgIHJldHVybiB2YWxp
ZGF0b3IudmFsaWRhdGlvbkVycm9yLlVOS05PV05fRU5VTV9WQUxVRTsKLSAgfTsKLSAgdmFyIFVz
YlRyYW5zZmVyU3RhdHVzID0ge307Ci0gIFVzYlRyYW5zZmVyU3RhdHVzLkNPTVBMRVRFRCA9IDA7
Ci0gIFVzYlRyYW5zZmVyU3RhdHVzLlRSQU5TRkVSX0VSUk9SID0gVXNiVHJhbnNmZXJTdGF0dXMu
Q09NUExFVEVEICsgMTsKLSAgVXNiVHJhbnNmZXJTdGF0dXMuVElNRU9VVCA9IFVzYlRyYW5zZmVy
U3RhdHVzLlRSQU5TRkVSX0VSUk9SICsgMTsKLSAgVXNiVHJhbnNmZXJTdGF0dXMuQ0FOQ0VMTEVE
ID0gVXNiVHJhbnNmZXJTdGF0dXMuVElNRU9VVCArIDE7Ci0gIFVzYlRyYW5zZmVyU3RhdHVzLlNU
QUxMRUQgPSBVc2JUcmFuc2ZlclN0YXR1cy5DQU5DRUxMRUQgKyAxOwotICBVc2JUcmFuc2ZlclN0
YXR1cy5ESVNDT05ORUNUID0gVXNiVHJhbnNmZXJTdGF0dXMuU1RBTExFRCArIDE7Ci0gIFVzYlRy
YW5zZmVyU3RhdHVzLkJBQkJMRSA9IFVzYlRyYW5zZmVyU3RhdHVzLkRJU0NPTk5FQ1QgKyAxOwot
ICBVc2JUcmFuc2ZlclN0YXR1cy5TSE9SVF9QQUNLRVQgPSBVc2JUcmFuc2ZlclN0YXR1cy5CQUJC
TEUgKyAxOwotICBVc2JUcmFuc2ZlclN0YXR1cy5QRVJNSVNTSU9OX0RFTklFRCA9IFVzYlRyYW5z
ZmVyU3RhdHVzLlNIT1JUX1BBQ0tFVCArIDE7Ci0gIFVzYlRyYW5zZmVyU3RhdHVzLk1JTl9WQUxV
RSA9IDAsCi0gIFVzYlRyYW5zZmVyU3RhdHVzLk1BWF9WQUxVRSA9IDgsCi0KLSAgVXNiVHJhbnNm
ZXJTdGF0dXMuaXNLbm93bkVudW1WYWx1ZSA9IGZ1bmN0aW9uKHZhbHVlKSB7Ci0gICAgc3dpdGNo
ICh2YWx1ZSkgewotICAgIGNhc2UgMDoKLSAgICBjYXNlIDE6Ci0gICAgY2FzZSAyOgotICAgIGNh
c2UgMzoKLSAgICBjYXNlIDQ6Ci0gICAgY2FzZSA1OgotICAgIGNhc2UgNjoKLSAgICBjYXNlIDc6
Ci0gICAgY2FzZSA4OgotICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIHJldHVybiBmYWxz
ZTsKLSAgfTsKLQotICBVc2JUcmFuc2ZlclN0YXR1cy52YWxpZGF0ZSA9IGZ1bmN0aW9uKGVudW1W
YWx1ZSkgewotICAgIHZhciBpc0V4dGVuc2libGUgPSBmYWxzZTsKLSAgICBpZiAoaXNFeHRlbnNp
YmxlIHx8IHRoaXMuaXNLbm93bkVudW1WYWx1ZShlbnVtVmFsdWUpKQotICAgICAgcmV0dXJuIHZh
bGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORTsKLQotICAgIHJldHVybiB2YWxpZGF0b3IudmFs
aWRhdGlvbkVycm9yLlVOS05PV05fRU5VTV9WQUxVRTsKLSAgfTsKLQotICBmdW5jdGlvbiBVc2JF
bmRwb2ludEluZm8odmFsdWVzKSB7Ci0gICAgdGhpcy5pbml0RGVmYXVsdHNfKCk7Ci0gICAgdGhp
cy5pbml0RmllbGRzXyh2YWx1ZXMpOwotICB9Ci0KLQotICBVc2JFbmRwb2ludEluZm8ucHJvdG90
eXBlLmluaXREZWZhdWx0c18gPSBmdW5jdGlvbigpIHsKLSAgICB0aGlzLmVuZHBvaW50TnVtYmVy
ID0gMDsKLSAgICB0aGlzLnBvbGxpbmdJbnRlcnZhbCA9IDA7Ci0gICAgdGhpcy5kaXJlY3Rpb24g
PSAwOwotICAgIHRoaXMudHlwZSA9IDA7Ci0gICAgdGhpcy5wYWNrZXRTaXplID0gMDsKLSAgICB0
aGlzLnN5bmNocm9uaXphdGlvblR5cGUgPSAwOwotICAgIHRoaXMudXNhZ2VUeXBlID0gMDsKLSAg
ICB0aGlzLmV4dHJhRGF0YSA9IG51bGw7Ci0gIH07Ci0gIFVzYkVuZHBvaW50SW5mby5wcm90b3R5
cGUuaW5pdEZpZWxkc18gPSBmdW5jdGlvbihmaWVsZHMpIHsKLSAgICBmb3IodmFyIGZpZWxkIGlu
IGZpZWxkcykgewotICAgICAgICBpZiAodGhpcy5oYXNPd25Qcm9wZXJ0eShmaWVsZCkpCi0gICAg
ICAgICAgdGhpc1tmaWVsZF0gPSBmaWVsZHNbZmllbGRdOwotICAgIH0KLSAgfTsKLQotICBVc2JF
bmRwb2ludEluZm8udmFsaWRhdGUgPSBmdW5jdGlvbihtZXNzYWdlVmFsaWRhdG9yLCBvZmZzZXQp
IHsKLSAgICB2YXIgZXJyOwotICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1
Y3RIZWFkZXIob2Zmc2V0LCBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSk7Ci0gICAgaWYgKGVyciAh
PT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQotICAgICAgICByZXR1cm4gZXJyOwot
Ci0gICAgdmFyIGtWZXJzaW9uU2l6ZXMgPSBbCi0gICAgICB7dmVyc2lvbjogMCwgbnVtQnl0ZXM6
IDQwfQotICAgIF07Ci0gICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdFZl
cnNpb24ob2Zmc2V0LCBrVmVyc2lvblNpemVzKTsKLSAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3Iu
dmFsaWRhdGlvbkVycm9yLk5PTkUpCi0gICAgICAgIHJldHVybiBlcnI7Ci0KLQotCi0gICAgLy8g
dmFsaWRhdGUgVXNiRW5kcG9pbnRJbmZvLmRpcmVjdGlvbgotICAgIGVyciA9IG1lc3NhZ2VWYWxp
ZGF0b3IudmFsaWRhdGVFbnVtKG9mZnNldCArIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgNCwg
VXNiVHJhbnNmZXJEaXJlY3Rpb24pOwotICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0
aW9uRXJyb3IuTk9ORSkKLSAgICAgICAgcmV0dXJuIGVycjsKLQotCi0gICAgLy8gdmFsaWRhdGUg
VXNiRW5kcG9pbnRJbmZvLnR5cGUKLSAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRl
RW51bShvZmZzZXQgKyBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDgsIFVzYlRyYW5zZmVyVHlw
ZSk7Ci0gICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQotICAg
ICAgICByZXR1cm4gZXJyOwotCi0KLQotICAgIC8vIHZhbGlkYXRlIFVzYkVuZHBvaW50SW5mby5z
eW5jaHJvbml6YXRpb25UeXBlCi0gICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZUVu
dW0ob2Zmc2V0ICsgY29kZWMua1N0cnVjdEhlYWRlclNpemUgKyAxNiwgVXNiU3luY2hyb25pemF0
aW9uVHlwZSk7Ci0gICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05F
KQotICAgICAgICByZXR1cm4gZXJyOwotCi0KLSAgICAvLyB2YWxpZGF0ZSBVc2JFbmRwb2ludElu
Zm8udXNhZ2VUeXBlCi0gICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZUVudW0ob2Zm
c2V0ICsgY29kZWMua1N0cnVjdEhlYWRlclNpemUgKyAyMCwgVXNiVXNhZ2VUeXBlKTsKLSAgICBp
ZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCi0gICAgICAgIHJldHVy
biBlcnI7Ci0KLQotCi0gICAgLy8gdmFsaWRhdGUgVXNiRW5kcG9pbnRJbmZvLmV4dHJhRGF0YQot
ICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVBcnJheVBvaW50ZXIob2Zmc2V0ICsg
Y29kZWMua1N0cnVjdEhlYWRlclNpemUgKyAyNCwgMSwgY29kZWMuVWludDgsIGZhbHNlLCBbMF0s
IDApOwotICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKLSAg
ICAgICAgcmV0dXJuIGVycjsKLQotICAgIHJldHVybiB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9y
Lk5PTkU7Ci0gIH07Ci0KLSAgVXNiRW5kcG9pbnRJbmZvLmVuY29kZWRTaXplID0gY29kZWMua1N0
cnVjdEhlYWRlclNpemUgKyAzMjsKLQotICBVc2JFbmRwb2ludEluZm8uZGVjb2RlID0gZnVuY3Rp
b24oZGVjb2RlcikgewotICAgIHZhciBwYWNrZWQ7Ci0gICAgdmFyIHZhbCA9IG5ldyBVc2JFbmRw
b2ludEluZm8oKTsKLSAgICB2YXIgbnVtYmVyT2ZCeXRlcyA9IGRlY29kZXIucmVhZFVpbnQzMigp
OwotICAgIHZhciB2ZXJzaW9uID0gZGVjb2Rlci5yZWFkVWludDMyKCk7Ci0gICAgdmFsLmVuZHBv
aW50TnVtYmVyID0gZGVjb2Rlci5kZWNvZGVTdHJ1Y3QoY29kZWMuVWludDgpOwotICAgIHZhbC5w
b2xsaW5nSW50ZXJ2YWwgPSBkZWNvZGVyLmRlY29kZVN0cnVjdChjb2RlYy5VaW50OCk7Ci0gICAg
ZGVjb2Rlci5za2lwKDEpOwotICAgIGRlY29kZXIuc2tpcCgxKTsKLSAgICB2YWwuZGlyZWN0aW9u
ID0gZGVjb2Rlci5kZWNvZGVTdHJ1Y3QoY29kZWMuSW50MzIpOwotICAgIHZhbC50eXBlID0gZGVj
b2Rlci5kZWNvZGVTdHJ1Y3QoY29kZWMuSW50MzIpOwotICAgIHZhbC5wYWNrZXRTaXplID0gZGVj
b2Rlci5kZWNvZGVTdHJ1Y3QoY29kZWMuVWludDMyKTsKLSAgICB2YWwuc3luY2hyb25pemF0aW9u
VHlwZSA9IGRlY29kZXIuZGVjb2RlU3RydWN0KGNvZGVjLkludDMyKTsKLSAgICB2YWwudXNhZ2VU
eXBlID0gZGVjb2Rlci5kZWNvZGVTdHJ1Y3QoY29kZWMuSW50MzIpOwotICAgIHZhbC5leHRyYURh
dGEgPSBkZWNvZGVyLmRlY29kZUFycmF5UG9pbnRlcihjb2RlYy5VaW50OCk7Ci0gICAgcmV0dXJu
IHZhbDsKLSAgfTsKLQotICBVc2JFbmRwb2ludEluZm8uZW5jb2RlID0gZnVuY3Rpb24oZW5jb2Rl
ciwgdmFsKSB7Ci0gICAgdmFyIHBhY2tlZDsKLSAgICBlbmNvZGVyLndyaXRlVWludDMyKFVzYkVu
ZHBvaW50SW5mby5lbmNvZGVkU2l6ZSk7Ci0gICAgZW5jb2Rlci53cml0ZVVpbnQzMigwKTsKLSAg
ICBlbmNvZGVyLmVuY29kZVN0cnVjdChjb2RlYy5VaW50OCwgdmFsLmVuZHBvaW50TnVtYmVyKTsK
LSAgICBlbmNvZGVyLmVuY29kZVN0cnVjdChjb2RlYy5VaW50OCwgdmFsLnBvbGxpbmdJbnRlcnZh
bCk7Ci0gICAgZW5jb2Rlci5za2lwKDEpOwotICAgIGVuY29kZXIuc2tpcCgxKTsKLSAgICBlbmNv
ZGVyLmVuY29kZVN0cnVjdChjb2RlYy5JbnQzMiwgdmFsLmRpcmVjdGlvbik7Ci0gICAgZW5jb2Rl
ci5lbmNvZGVTdHJ1Y3QoY29kZWMuSW50MzIsIHZhbC50eXBlKTsKLSAgICBlbmNvZGVyLmVuY29k
ZVN0cnVjdChjb2RlYy5VaW50MzIsIHZhbC5wYWNrZXRTaXplKTsKLSAgICBlbmNvZGVyLmVuY29k
ZVN0cnVjdChjb2RlYy5JbnQzMiwgdmFsLnN5bmNocm9uaXphdGlvblR5cGUpOwotICAgIGVuY29k
ZXIuZW5jb2RlU3RydWN0KGNvZGVjLkludDMyLCB2YWwudXNhZ2VUeXBlKTsKLSAgICBlbmNvZGVy
LmVuY29kZUFycmF5UG9pbnRlcihjb2RlYy5VaW50OCwgdmFsLmV4dHJhRGF0YSk7Ci0gIH07Ci0g
IGZ1bmN0aW9uIFVzYkFsdGVybmF0ZUludGVyZmFjZUluZm8odmFsdWVzKSB7Ci0gICAgdGhpcy5p
bml0RGVmYXVsdHNfKCk7Ci0gICAgdGhpcy5pbml0RmllbGRzXyh2YWx1ZXMpOwotICB9Ci0KLQot
ICBVc2JBbHRlcm5hdGVJbnRlcmZhY2VJbmZvLnByb3RvdHlwZS5pbml0RGVmYXVsdHNfID0gZnVu
Y3Rpb24oKSB7Ci0gICAgdGhpcy5hbHRlcm5hdGVTZXR0aW5nID0gMDsKLSAgICB0aGlzLmNsYXNz
Q29kZSA9IDA7Ci0gICAgdGhpcy5zdWJjbGFzc0NvZGUgPSAwOwotICAgIHRoaXMucHJvdG9jb2xD
b2RlID0gMDsKLSAgICB0aGlzLmludGVyZmFjZU5hbWUgPSBudWxsOwotICAgIHRoaXMuZW5kcG9p
bnRzID0gbnVsbDsKLSAgICB0aGlzLmV4dHJhRGF0YSA9IG51bGw7Ci0gIH07Ci0gIFVzYkFsdGVy
bmF0ZUludGVyZmFjZUluZm8ucHJvdG90eXBlLmluaXRGaWVsZHNfID0gZnVuY3Rpb24oZmllbGRz
KSB7Ci0gICAgZm9yKHZhciBmaWVsZCBpbiBmaWVsZHMpIHsKLSAgICAgICAgaWYgKHRoaXMuaGFz
T3duUHJvcGVydHkoZmllbGQpKQotICAgICAgICAgIHRoaXNbZmllbGRdID0gZmllbGRzW2ZpZWxk
XTsKLSAgICB9Ci0gIH07Ci0KLSAgVXNiQWx0ZXJuYXRlSW50ZXJmYWNlSW5mby52YWxpZGF0ZSA9
IGZ1bmN0aW9uKG1lc3NhZ2VWYWxpZGF0b3IsIG9mZnNldCkgewotICAgIHZhciBlcnI7Ci0gICAg
ZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdEhlYWRlcihvZmZzZXQsIGNvZGVj
LmtTdHJ1Y3RIZWFkZXJTaXplKTsKLSAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlv
bkVycm9yLk5PTkUpCi0gICAgICAgIHJldHVybiBlcnI7Ci0KLSAgICB2YXIga1ZlcnNpb25TaXpl
cyA9IFsKLSAgICAgIHt2ZXJzaW9uOiAwLCBudW1CeXRlczogNDB9Ci0gICAgXTsKLSAgICBlcnIg
PSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0VmVyc2lvbihvZmZzZXQsIGtWZXJzaW9u
U2l6ZXMpOwotICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkK
LSAgICAgICAgcmV0dXJuIGVycjsKLQotCi0KLQotCi0KLSAgICAvLyB2YWxpZGF0ZSBVc2JBbHRl
cm5hdGVJbnRlcmZhY2VJbmZvLmludGVyZmFjZU5hbWUKLSAgICBlcnIgPSBtZXNzYWdlVmFsaWRh
dG9yLnZhbGlkYXRlU3RydWN0UG9pbnRlcihvZmZzZXQgKyBjb2RlYy5rU3RydWN0SGVhZGVyU2l6
ZSArIDgsIHN0cmluZzE2JC5TdHJpbmcxNiwgdHJ1ZSk7Ci0gICAgaWYgKGVyciAhPT0gdmFsaWRh
dG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQotICAgICAgICByZXR1cm4gZXJyOwotCi0KLSAgICAv
LyB2YWxpZGF0ZSBVc2JBbHRlcm5hdGVJbnRlcmZhY2VJbmZvLmVuZHBvaW50cwotICAgIGVyciA9
IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVBcnJheVBvaW50ZXIob2Zmc2V0ICsgY29kZWMua1N0
cnVjdEhlYWRlclNpemUgKyAxNiwgOCwgbmV3IGNvZGVjLlBvaW50ZXJUbyhVc2JFbmRwb2ludElu
Zm8pLCBmYWxzZSwgWzBdLCAwKTsKLSAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlv
bkVycm9yLk5PTkUpCi0gICAgICAgIHJldHVybiBlcnI7Ci0KLQotICAgIC8vIHZhbGlkYXRlIFVz
YkFsdGVybmF0ZUludGVyZmFjZUluZm8uZXh0cmFEYXRhCi0gICAgZXJyID0gbWVzc2FnZVZhbGlk
YXRvci52YWxpZGF0ZUFycmF5UG9pbnRlcihvZmZzZXQgKyBjb2RlYy5rU3RydWN0SGVhZGVyU2l6
ZSArIDI0LCAxLCBjb2RlYy5VaW50OCwgZmFsc2UsIFswXSwgMCk7Ci0gICAgaWYgKGVyciAhPT0g
dmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQotICAgICAgICByZXR1cm4gZXJyOwotCi0g
ICAgcmV0dXJuIHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORTsKLSAgfTsKLQotICBVc2JB
bHRlcm5hdGVJbnRlcmZhY2VJbmZvLmVuY29kZWRTaXplID0gY29kZWMua1N0cnVjdEhlYWRlclNp
emUgKyAzMjsKLQotICBVc2JBbHRlcm5hdGVJbnRlcmZhY2VJbmZvLmRlY29kZSA9IGZ1bmN0aW9u
KGRlY29kZXIpIHsKLSAgICB2YXIgcGFja2VkOwotICAgIHZhciB2YWwgPSBuZXcgVXNiQWx0ZXJu
YXRlSW50ZXJmYWNlSW5mbygpOwotICAgIHZhciBudW1iZXJPZkJ5dGVzID0gZGVjb2Rlci5yZWFk
VWludDMyKCk7Ci0gICAgdmFyIHZlcnNpb24gPSBkZWNvZGVyLnJlYWRVaW50MzIoKTsKLSAgICB2
YWwuYWx0ZXJuYXRlU2V0dGluZyA9IGRlY29kZXIuZGVjb2RlU3RydWN0KGNvZGVjLlVpbnQ4KTsK
LSAgICB2YWwuY2xhc3NDb2RlID0gZGVjb2Rlci5kZWNvZGVTdHJ1Y3QoY29kZWMuVWludDgpOwot
ICAgIHZhbC5zdWJjbGFzc0NvZGUgPSBkZWNvZGVyLmRlY29kZVN0cnVjdChjb2RlYy5VaW50OCk7
Ci0gICAgdmFsLnByb3RvY29sQ29kZSA9IGRlY29kZXIuZGVjb2RlU3RydWN0KGNvZGVjLlVpbnQ4
KTsKLSAgICBkZWNvZGVyLnNraXAoMSk7Ci0gICAgZGVjb2Rlci5za2lwKDEpOwotICAgIGRlY29k
ZXIuc2tpcCgxKTsKLSAgICBkZWNvZGVyLnNraXAoMSk7Ci0gICAgdmFsLmludGVyZmFjZU5hbWUg
PSBkZWNvZGVyLmRlY29kZVN0cnVjdFBvaW50ZXIoc3RyaW5nMTYkLlN0cmluZzE2KTsKLSAgICB2
YWwuZW5kcG9pbnRzID0gZGVjb2Rlci5kZWNvZGVBcnJheVBvaW50ZXIobmV3IGNvZGVjLlBvaW50
ZXJUbyhVc2JFbmRwb2ludEluZm8pKTsKLSAgICB2YWwuZXh0cmFEYXRhID0gZGVjb2Rlci5kZWNv
ZGVBcnJheVBvaW50ZXIoY29kZWMuVWludDgpOwotICAgIHJldHVybiB2YWw7Ci0gIH07Ci0KLSAg
VXNiQWx0ZXJuYXRlSW50ZXJmYWNlSW5mby5lbmNvZGUgPSBmdW5jdGlvbihlbmNvZGVyLCB2YWwp
IHsKLSAgICB2YXIgcGFja2VkOwotICAgIGVuY29kZXIud3JpdGVVaW50MzIoVXNiQWx0ZXJuYXRl
SW50ZXJmYWNlSW5mby5lbmNvZGVkU2l6ZSk7Ci0gICAgZW5jb2Rlci53cml0ZVVpbnQzMigwKTsK
LSAgICBlbmNvZGVyLmVuY29kZVN0cnVjdChjb2RlYy5VaW50OCwgdmFsLmFsdGVybmF0ZVNldHRp
bmcpOwotICAgIGVuY29kZXIuZW5jb2RlU3RydWN0KGNvZGVjLlVpbnQ4LCB2YWwuY2xhc3NDb2Rl
KTsKLSAgICBlbmNvZGVyLmVuY29kZVN0cnVjdChjb2RlYy5VaW50OCwgdmFsLnN1YmNsYXNzQ29k
ZSk7Ci0gICAgZW5jb2Rlci5lbmNvZGVTdHJ1Y3QoY29kZWMuVWludDgsIHZhbC5wcm90b2NvbENv
ZGUpOwotICAgIGVuY29kZXIuc2tpcCgxKTsKLSAgICBlbmNvZGVyLnNraXAoMSk7Ci0gICAgZW5j
b2Rlci5za2lwKDEpOwotICAgIGVuY29kZXIuc2tpcCgxKTsKLSAgICBlbmNvZGVyLmVuY29kZVN0
cnVjdFBvaW50ZXIoc3RyaW5nMTYkLlN0cmluZzE2LCB2YWwuaW50ZXJmYWNlTmFtZSk7Ci0gICAg
ZW5jb2Rlci5lbmNvZGVBcnJheVBvaW50ZXIobmV3IGNvZGVjLlBvaW50ZXJUbyhVc2JFbmRwb2lu
dEluZm8pLCB2YWwuZW5kcG9pbnRzKTsKLSAgICBlbmNvZGVyLmVuY29kZUFycmF5UG9pbnRlcihj
b2RlYy5VaW50OCwgdmFsLmV4dHJhRGF0YSk7Ci0gIH07Ci0gIGZ1bmN0aW9uIFVzYkludGVyZmFj
ZUluZm8odmFsdWVzKSB7Ci0gICAgdGhpcy5pbml0RGVmYXVsdHNfKCk7Ci0gICAgdGhpcy5pbml0
RmllbGRzXyh2YWx1ZXMpOwotICB9Ci0KLQotICBVc2JJbnRlcmZhY2VJbmZvLnByb3RvdHlwZS5p
bml0RGVmYXVsdHNfID0gZnVuY3Rpb24oKSB7Ci0gICAgdGhpcy5pbnRlcmZhY2VOdW1iZXIgPSAw
OwotICAgIHRoaXMuYWx0ZXJuYXRlcyA9IG51bGw7Ci0gIH07Ci0gIFVzYkludGVyZmFjZUluZm8u
cHJvdG90eXBlLmluaXRGaWVsZHNfID0gZnVuY3Rpb24oZmllbGRzKSB7Ci0gICAgZm9yKHZhciBm
aWVsZCBpbiBmaWVsZHMpIHsKLSAgICAgICAgaWYgKHRoaXMuaGFzT3duUHJvcGVydHkoZmllbGQp
KQotICAgICAgICAgIHRoaXNbZmllbGRdID0gZmllbGRzW2ZpZWxkXTsKLSAgICB9Ci0gIH07Ci0K
LSAgVXNiSW50ZXJmYWNlSW5mby52YWxpZGF0ZSA9IGZ1bmN0aW9uKG1lc3NhZ2VWYWxpZGF0b3Is
IG9mZnNldCkgewotICAgIHZhciBlcnI7Ci0gICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxp
ZGF0ZVN0cnVjdEhlYWRlcihvZmZzZXQsIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplKTsKLSAgICBp
ZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCi0gICAgICAgIHJldHVy
biBlcnI7Ci0KLSAgICB2YXIga1ZlcnNpb25TaXplcyA9IFsKLSAgICAgIHt2ZXJzaW9uOiAwLCBu
dW1CeXRlczogMjR9Ci0gICAgXTsKLSAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRl
U3RydWN0VmVyc2lvbihvZmZzZXQsIGtWZXJzaW9uU2l6ZXMpOwotICAgIGlmIChlcnIgIT09IHZh
bGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKLSAgICAgICAgcmV0dXJuIGVycjsKLQotCi0K
LSAgICAvLyB2YWxpZGF0ZSBVc2JJbnRlcmZhY2VJbmZvLmFsdGVybmF0ZXMKLSAgICBlcnIgPSBt
ZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlQXJyYXlQb2ludGVyKG9mZnNldCArIGNvZGVjLmtTdHJ1
Y3RIZWFkZXJTaXplICsgOCwgOCwgbmV3IGNvZGVjLlBvaW50ZXJUbyhVc2JBbHRlcm5hdGVJbnRl
cmZhY2VJbmZvKSwgZmFsc2UsIFswXSwgMCk7Ci0gICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZh
bGlkYXRpb25FcnJvci5OT05FKQotICAgICAgICByZXR1cm4gZXJyOwotCi0gICAgcmV0dXJuIHZh
bGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORTsKLSAgfTsKLQotICBVc2JJbnRlcmZhY2VJbmZv
LmVuY29kZWRTaXplID0gY29kZWMua1N0cnVjdEhlYWRlclNpemUgKyAxNjsKLQotICBVc2JJbnRl
cmZhY2VJbmZvLmRlY29kZSA9IGZ1bmN0aW9uKGRlY29kZXIpIHsKLSAgICB2YXIgcGFja2VkOwot
ICAgIHZhciB2YWwgPSBuZXcgVXNiSW50ZXJmYWNlSW5mbygpOwotICAgIHZhciBudW1iZXJPZkJ5
dGVzID0gZGVjb2Rlci5yZWFkVWludDMyKCk7Ci0gICAgdmFyIHZlcnNpb24gPSBkZWNvZGVyLnJl
YWRVaW50MzIoKTsKLSAgICB2YWwuaW50ZXJmYWNlTnVtYmVyID0gZGVjb2Rlci5kZWNvZGVTdHJ1
Y3QoY29kZWMuVWludDgpOwotICAgIGRlY29kZXIuc2tpcCgxKTsKLSAgICBkZWNvZGVyLnNraXAo
MSk7Ci0gICAgZGVjb2Rlci5za2lwKDEpOwotICAgIGRlY29kZXIuc2tpcCgxKTsKLSAgICBkZWNv
ZGVyLnNraXAoMSk7Ci0gICAgZGVjb2Rlci5za2lwKDEpOwotICAgIGRlY29kZXIuc2tpcCgxKTsK
LSAgICB2YWwuYWx0ZXJuYXRlcyA9IGRlY29kZXIuZGVjb2RlQXJyYXlQb2ludGVyKG5ldyBjb2Rl
Yy5Qb2ludGVyVG8oVXNiQWx0ZXJuYXRlSW50ZXJmYWNlSW5mbykpOwotICAgIHJldHVybiB2YWw7
Ci0gIH07Ci0KLSAgVXNiSW50ZXJmYWNlSW5mby5lbmNvZGUgPSBmdW5jdGlvbihlbmNvZGVyLCB2
YWwpIHsKLSAgICB2YXIgcGFja2VkOwotICAgIGVuY29kZXIud3JpdGVVaW50MzIoVXNiSW50ZXJm
YWNlSW5mby5lbmNvZGVkU2l6ZSk7Ci0gICAgZW5jb2Rlci53cml0ZVVpbnQzMigwKTsKLSAgICBl
bmNvZGVyLmVuY29kZVN0cnVjdChjb2RlYy5VaW50OCwgdmFsLmludGVyZmFjZU51bWJlcik7Ci0g
ICAgZW5jb2Rlci5za2lwKDEpOwotICAgIGVuY29kZXIuc2tpcCgxKTsKLSAgICBlbmNvZGVyLnNr
aXAoMSk7Ci0gICAgZW5jb2Rlci5za2lwKDEpOwotICAgIGVuY29kZXIuc2tpcCgxKTsKLSAgICBl
bmNvZGVyLnNraXAoMSk7Ci0gICAgZW5jb2Rlci5za2lwKDEpOwotICAgIGVuY29kZXIuZW5jb2Rl
QXJyYXlQb2ludGVyKG5ldyBjb2RlYy5Qb2ludGVyVG8oVXNiQWx0ZXJuYXRlSW50ZXJmYWNlSW5m
byksIHZhbC5hbHRlcm5hdGVzKTsKLSAgfTsKLSAgZnVuY3Rpb24gVXNiQ29uZmlndXJhdGlvbklu
Zm8odmFsdWVzKSB7Ci0gICAgdGhpcy5pbml0RGVmYXVsdHNfKCk7Ci0gICAgdGhpcy5pbml0Rmll
bGRzXyh2YWx1ZXMpOwotICB9Ci0KLQotICBVc2JDb25maWd1cmF0aW9uSW5mby5wcm90b3R5cGUu
aW5pdERlZmF1bHRzXyA9IGZ1bmN0aW9uKCkgewotICAgIHRoaXMuY29uZmlndXJhdGlvblZhbHVl
ID0gMDsKLSAgICB0aGlzLnNlbGZQb3dlcmVkID0gZmFsc2U7Ci0gICAgdGhpcy5yZW1vdGVXYWtl
dXAgPSBmYWxzZTsKLSAgICB0aGlzLm1heGltdW1Qb3dlciA9IDA7Ci0gICAgdGhpcy5jb25maWd1
cmF0aW9uTmFtZSA9IG51bGw7Ci0gICAgdGhpcy5pbnRlcmZhY2VzID0gbnVsbDsKLSAgICB0aGlz
LmV4dHJhRGF0YSA9IG51bGw7Ci0gIH07Ci0gIFVzYkNvbmZpZ3VyYXRpb25JbmZvLnByb3RvdHlw
ZS5pbml0RmllbGRzXyA9IGZ1bmN0aW9uKGZpZWxkcykgewotICAgIGZvcih2YXIgZmllbGQgaW4g
ZmllbGRzKSB7Ci0gICAgICAgIGlmICh0aGlzLmhhc093blByb3BlcnR5KGZpZWxkKSkKLSAgICAg
ICAgICB0aGlzW2ZpZWxkXSA9IGZpZWxkc1tmaWVsZF07Ci0gICAgfQotICB9OwotCi0gIFVzYkNv
bmZpZ3VyYXRpb25JbmZvLnZhbGlkYXRlID0gZnVuY3Rpb24obWVzc2FnZVZhbGlkYXRvciwgb2Zm
c2V0KSB7Ci0gICAgdmFyIGVycjsKLSAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRl
U3RydWN0SGVhZGVyKG9mZnNldCwgY29kZWMua1N0cnVjdEhlYWRlclNpemUpOwotICAgIGlmIChl
cnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKLSAgICAgICAgcmV0dXJuIGVy
cjsKLQotICAgIHZhciBrVmVyc2lvblNpemVzID0gWwotICAgICAge3ZlcnNpb246IDAsIG51bUJ5
dGVzOiA0MH0KLSAgICBdOwotICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1
Y3RWZXJzaW9uKG9mZnNldCwga1ZlcnNpb25TaXplcyk7Ci0gICAgaWYgKGVyciAhPT0gdmFsaWRh
dG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQotICAgICAgICByZXR1cm4gZXJyOwotCi0KLQotICAg
IC8vIHZhbGlkYXRlIFVzYkNvbmZpZ3VyYXRpb25JbmZvLmNvbmZpZ3VyYXRpb25OYW1lCi0gICAg
ZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdFBvaW50ZXIob2Zmc2V0ICsgY29k
ZWMua1N0cnVjdEhlYWRlclNpemUgKyA4LCBzdHJpbmcxNiQuU3RyaW5nMTYsIHRydWUpOwotICAg
IGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKLSAgICAgICAgcmV0
dXJuIGVycjsKLQotCi0KLQotCi0gICAgLy8gdmFsaWRhdGUgVXNiQ29uZmlndXJhdGlvbkluZm8u
aW50ZXJmYWNlcwotICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVBcnJheVBvaW50
ZXIob2Zmc2V0ICsgY29kZWMua1N0cnVjdEhlYWRlclNpemUgKyAxNiwgOCwgbmV3IGNvZGVjLlBv
aW50ZXJUbyhVc2JJbnRlcmZhY2VJbmZvKSwgZmFsc2UsIFswXSwgMCk7Ci0gICAgaWYgKGVyciAh
PT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQotICAgICAgICByZXR1cm4gZXJyOwot
Ci0KLSAgICAvLyB2YWxpZGF0ZSBVc2JDb25maWd1cmF0aW9uSW5mby5leHRyYURhdGEKLSAgICBl
cnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlQXJyYXlQb2ludGVyKG9mZnNldCArIGNvZGVj
LmtTdHJ1Y3RIZWFkZXJTaXplICsgMjQsIDEsIGNvZGVjLlVpbnQ4LCBmYWxzZSwgWzBdLCAwKTsK
LSAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCi0gICAgICAg
IHJldHVybiBlcnI7Ci0KLSAgICByZXR1cm4gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05F
OwotICB9OwotCi0gIFVzYkNvbmZpZ3VyYXRpb25JbmZvLmVuY29kZWRTaXplID0gY29kZWMua1N0
cnVjdEhlYWRlclNpemUgKyAzMjsKLQotICBVc2JDb25maWd1cmF0aW9uSW5mby5kZWNvZGUgPSBm
dW5jdGlvbihkZWNvZGVyKSB7Ci0gICAgdmFyIHBhY2tlZDsKLSAgICB2YXIgdmFsID0gbmV3IFVz
YkNvbmZpZ3VyYXRpb25JbmZvKCk7Ci0gICAgdmFyIG51bWJlck9mQnl0ZXMgPSBkZWNvZGVyLnJl
YWRVaW50MzIoKTsKLSAgICB2YXIgdmVyc2lvbiA9IGRlY29kZXIucmVhZFVpbnQzMigpOwotICAg
IHZhbC5jb25maWd1cmF0aW9uVmFsdWUgPSBkZWNvZGVyLmRlY29kZVN0cnVjdChjb2RlYy5VaW50
OCk7Ci0gICAgcGFja2VkID0gZGVjb2Rlci5yZWFkVWludDgoKTsKLSAgICB2YWwuc2VsZlBvd2Vy
ZWQgPSAocGFja2VkID4+IDApICYgMSA/IHRydWUgOiBmYWxzZTsKLSAgICB2YWwucmVtb3RlV2Fr
ZXVwID0gKHBhY2tlZCA+PiAxKSAmIDEgPyB0cnVlIDogZmFsc2U7Ci0gICAgdmFsLm1heGltdW1Q
b3dlciA9IGRlY29kZXIuZGVjb2RlU3RydWN0KGNvZGVjLlVpbnQ4KTsKLSAgICBkZWNvZGVyLnNr
aXAoMSk7Ci0gICAgZGVjb2Rlci5za2lwKDEpOwotICAgIGRlY29kZXIuc2tpcCgxKTsKLSAgICBk
ZWNvZGVyLnNraXAoMSk7Ci0gICAgZGVjb2Rlci5za2lwKDEpOwotICAgIHZhbC5jb25maWd1cmF0
aW9uTmFtZSA9IGRlY29kZXIuZGVjb2RlU3RydWN0UG9pbnRlcihzdHJpbmcxNiQuU3RyaW5nMTYp
OwotICAgIHZhbC5pbnRlcmZhY2VzID0gZGVjb2Rlci5kZWNvZGVBcnJheVBvaW50ZXIobmV3IGNv
ZGVjLlBvaW50ZXJUbyhVc2JJbnRlcmZhY2VJbmZvKSk7Ci0gICAgdmFsLmV4dHJhRGF0YSA9IGRl
Y29kZXIuZGVjb2RlQXJyYXlQb2ludGVyKGNvZGVjLlVpbnQ4KTsKLSAgICByZXR1cm4gdmFsOwot
ICB9OwotCi0gIFVzYkNvbmZpZ3VyYXRpb25JbmZvLmVuY29kZSA9IGZ1bmN0aW9uKGVuY29kZXIs
IHZhbCkgewotICAgIHZhciBwYWNrZWQ7Ci0gICAgZW5jb2Rlci53cml0ZVVpbnQzMihVc2JDb25m
aWd1cmF0aW9uSW5mby5lbmNvZGVkU2l6ZSk7Ci0gICAgZW5jb2Rlci53cml0ZVVpbnQzMigwKTsK
LSAgICBlbmNvZGVyLmVuY29kZVN0cnVjdChjb2RlYy5VaW50OCwgdmFsLmNvbmZpZ3VyYXRpb25W
YWx1ZSk7Ci0gICAgcGFja2VkID0gMDsKLSAgICBwYWNrZWQgfD0gKHZhbC5zZWxmUG93ZXJlZCAm
IDEpIDw8IDAKLSAgICBwYWNrZWQgfD0gKHZhbC5yZW1vdGVXYWtldXAgJiAxKSA8PCAxCi0gICAg
ZW5jb2Rlci53cml0ZVVpbnQ4KHBhY2tlZCk7Ci0gICAgZW5jb2Rlci5lbmNvZGVTdHJ1Y3QoY29k
ZWMuVWludDgsIHZhbC5tYXhpbXVtUG93ZXIpOwotICAgIGVuY29kZXIuc2tpcCgxKTsKLSAgICBl
bmNvZGVyLnNraXAoMSk7Ci0gICAgZW5jb2Rlci5za2lwKDEpOwotICAgIGVuY29kZXIuc2tpcCgx
KTsKLSAgICBlbmNvZGVyLnNraXAoMSk7Ci0gICAgZW5jb2Rlci5lbmNvZGVTdHJ1Y3RQb2ludGVy
KHN0cmluZzE2JC5TdHJpbmcxNiwgdmFsLmNvbmZpZ3VyYXRpb25OYW1lKTsKLSAgICBlbmNvZGVy
LmVuY29kZUFycmF5UG9pbnRlcihuZXcgY29kZWMuUG9pbnRlclRvKFVzYkludGVyZmFjZUluZm8p
LCB2YWwuaW50ZXJmYWNlcyk7Ci0gICAgZW5jb2Rlci5lbmNvZGVBcnJheVBvaW50ZXIoY29kZWMu
VWludDgsIHZhbC5leHRyYURhdGEpOwotICB9OwotICBmdW5jdGlvbiBVc2JEZXZpY2VJbmZvKHZh
bHVlcykgewotICAgIHRoaXMuaW5pdERlZmF1bHRzXygpOwotICAgIHRoaXMuaW5pdEZpZWxkc18o
dmFsdWVzKTsKLSAgfQotCi0KLSAgVXNiRGV2aWNlSW5mby5wcm90b3R5cGUuaW5pdERlZmF1bHRz
XyA9IGZ1bmN0aW9uKCkgewotICAgIHRoaXMuZ3VpZCA9IG51bGw7Ci0gICAgdGhpcy51c2JWZXJz
aW9uTWFqb3IgPSAwOwotICAgIHRoaXMudXNiVmVyc2lvbk1pbm9yID0gMDsKLSAgICB0aGlzLnVz
YlZlcnNpb25TdWJtaW5vciA9IDA7Ci0gICAgdGhpcy5jbGFzc0NvZGUgPSAwOwotICAgIHRoaXMu
c3ViY2xhc3NDb2RlID0gMDsKLSAgICB0aGlzLnByb3RvY29sQ29kZSA9IDA7Ci0gICAgdGhpcy52
ZW5kb3JJZCA9IDA7Ci0gICAgdGhpcy5idXNOdW1iZXIgPSAwOwotICAgIHRoaXMucG9ydE51bWJl
ciA9IDA7Ci0gICAgdGhpcy5wcm9kdWN0SWQgPSAwOwotICAgIHRoaXMuZGV2aWNlVmVyc2lvbk1h
am9yID0gMDsKLSAgICB0aGlzLmRldmljZVZlcnNpb25NaW5vciA9IDA7Ci0gICAgdGhpcy5kZXZp
Y2VWZXJzaW9uU3VibWlub3IgPSAwOwotICAgIHRoaXMuYWN0aXZlQ29uZmlndXJhdGlvbiA9IDA7
Ci0gICAgdGhpcy5tYW51ZmFjdHVyZXJOYW1lID0gbnVsbDsKLSAgICB0aGlzLnByb2R1Y3ROYW1l
ID0gbnVsbDsKLSAgICB0aGlzLnNlcmlhbE51bWJlciA9IG51bGw7Ci0gICAgdGhpcy53ZWJ1c2JM
YW5kaW5nUGFnZSA9IG51bGw7Ci0gICAgdGhpcy5jb25maWd1cmF0aW9ucyA9IG51bGw7Ci0gIH07
Ci0gIFVzYkRldmljZUluZm8ucHJvdG90eXBlLmluaXRGaWVsZHNfID0gZnVuY3Rpb24oZmllbGRz
KSB7Ci0gICAgZm9yKHZhciBmaWVsZCBpbiBmaWVsZHMpIHsKLSAgICAgICAgaWYgKHRoaXMuaGFz
T3duUHJvcGVydHkoZmllbGQpKQotICAgICAgICAgIHRoaXNbZmllbGRdID0gZmllbGRzW2ZpZWxk
XTsKLSAgICB9Ci0gIH07Ci0KLSAgVXNiRGV2aWNlSW5mby52YWxpZGF0ZSA9IGZ1bmN0aW9uKG1l
c3NhZ2VWYWxpZGF0b3IsIG9mZnNldCkgewotICAgIHZhciBlcnI7Ci0gICAgZXJyID0gbWVzc2Fn
ZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdEhlYWRlcihvZmZzZXQsIGNvZGVjLmtTdHJ1Y3RIZWFk
ZXJTaXplKTsKLSAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUp
Ci0gICAgICAgIHJldHVybiBlcnI7Ci0KLSAgICB2YXIga1ZlcnNpb25TaXplcyA9IFsKLSAgICAg
IHt2ZXJzaW9uOiAwLCBudW1CeXRlczogODB9Ci0gICAgXTsKLSAgICBlcnIgPSBtZXNzYWdlVmFs
aWRhdG9yLnZhbGlkYXRlU3RydWN0VmVyc2lvbihvZmZzZXQsIGtWZXJzaW9uU2l6ZXMpOwotICAg
IGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKLSAgICAgICAgcmV0
dXJuIGVycjsKLQotCi0gICAgLy8gdmFsaWRhdGUgVXNiRGV2aWNlSW5mby5ndWlkCi0gICAgZXJy
ID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cmluZ1BvaW50ZXIob2Zmc2V0ICsgY29kZWMu
a1N0cnVjdEhlYWRlclNpemUgKyAwLCBmYWxzZSkKLSAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3Iu
dmFsaWRhdGlvbkVycm9yLk5PTkUpCi0gICAgICAgIHJldHVybiBlcnI7Ci0KLQotCi0KLQotCi0K
LQotCi0KLQotCi0KLQotCi0gICAgLy8gdmFsaWRhdGUgVXNiRGV2aWNlSW5mby5tYW51ZmFjdHVy
ZXJOYW1lCi0gICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdFBvaW50ZXIo
b2Zmc2V0ICsgY29kZWMua1N0cnVjdEhlYWRlclNpemUgKyAzMiwgc3RyaW5nMTYkLlN0cmluZzE2
LCB0cnVlKTsKLSAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUp
Ci0gICAgICAgIHJldHVybiBlcnI7Ci0KLQotICAgIC8vIHZhbGlkYXRlIFVzYkRldmljZUluZm8u
cHJvZHVjdE5hbWUKLSAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0UG9p
bnRlcihvZmZzZXQgKyBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDQwLCBzdHJpbmcxNiQuU3Ry
aW5nMTYsIHRydWUpOwotICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3Iu
Tk9ORSkKLSAgICAgICAgcmV0dXJuIGVycjsKLQotCi0gICAgLy8gdmFsaWRhdGUgVXNiRGV2aWNl
SW5mby5zZXJpYWxOdW1iZXIKLSAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3Ry
dWN0UG9pbnRlcihvZmZzZXQgKyBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDQ4LCBzdHJpbmcx
NiQuU3RyaW5nMTYsIHRydWUpOwotICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9u
RXJyb3IuTk9ORSkKLSAgICAgICAgcmV0dXJuIGVycjsKLQotCi0gICAgLy8gdmFsaWRhdGUgVXNi
RGV2aWNlSW5mby53ZWJ1c2JMYW5kaW5nUGFnZQotICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3Iu
dmFsaWRhdGVTdHJ1Y3RQb2ludGVyKG9mZnNldCArIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsg
NTYsIHVybCQuVXJsLCB0cnVlKTsKLSAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlv
bkVycm9yLk5PTkUpCi0gICAgICAgIHJldHVybiBlcnI7Ci0KLQotCi0gICAgLy8gdmFsaWRhdGUg
VXNiRGV2aWNlSW5mby5jb25maWd1cmF0aW9ucwotICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3Iu
dmFsaWRhdGVBcnJheVBvaW50ZXIob2Zmc2V0ICsgY29kZWMua1N0cnVjdEhlYWRlclNpemUgKyA2
NCwgOCwgbmV3IGNvZGVjLlBvaW50ZXJUbyhVc2JDb25maWd1cmF0aW9uSW5mbyksIGZhbHNlLCBb
MF0sIDApOwotICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkK
LSAgICAgICAgcmV0dXJuIGVycjsKLQotICAgIHJldHVybiB2YWxpZGF0b3IudmFsaWRhdGlvbkVy
cm9yLk5PTkU7Ci0gIH07Ci0KLSAgVXNiRGV2aWNlSW5mby5lbmNvZGVkU2l6ZSA9IGNvZGVjLmtT
dHJ1Y3RIZWFkZXJTaXplICsgNzI7Ci0KLSAgVXNiRGV2aWNlSW5mby5kZWNvZGUgPSBmdW5jdGlv
bihkZWNvZGVyKSB7Ci0gICAgdmFyIHBhY2tlZDsKLSAgICB2YXIgdmFsID0gbmV3IFVzYkRldmlj
ZUluZm8oKTsKLSAgICB2YXIgbnVtYmVyT2ZCeXRlcyA9IGRlY29kZXIucmVhZFVpbnQzMigpOwot
ICAgIHZhciB2ZXJzaW9uID0gZGVjb2Rlci5yZWFkVWludDMyKCk7Ci0gICAgdmFsLmd1aWQgPSBk
ZWNvZGVyLmRlY29kZVN0cnVjdChjb2RlYy5TdHJpbmcpOwotICAgIHZhbC51c2JWZXJzaW9uTWFq
b3IgPSBkZWNvZGVyLmRlY29kZVN0cnVjdChjb2RlYy5VaW50OCk7Ci0gICAgdmFsLnVzYlZlcnNp
b25NaW5vciA9IGRlY29kZXIuZGVjb2RlU3RydWN0KGNvZGVjLlVpbnQ4KTsKLSAgICB2YWwudXNi
VmVyc2lvblN1Ym1pbm9yID0gZGVjb2Rlci5kZWNvZGVTdHJ1Y3QoY29kZWMuVWludDgpOwotICAg
IHZhbC5jbGFzc0NvZGUgPSBkZWNvZGVyLmRlY29kZVN0cnVjdChjb2RlYy5VaW50OCk7Ci0gICAg
dmFsLnN1YmNsYXNzQ29kZSA9IGRlY29kZXIuZGVjb2RlU3RydWN0KGNvZGVjLlVpbnQ4KTsKLSAg
ICB2YWwucHJvdG9jb2xDb2RlID0gZGVjb2Rlci5kZWNvZGVTdHJ1Y3QoY29kZWMuVWludDgpOwot
ICAgIHZhbC52ZW5kb3JJZCA9IGRlY29kZXIuZGVjb2RlU3RydWN0KGNvZGVjLlVpbnQxNik7Ci0g
ICAgdmFsLmJ1c051bWJlciA9IGRlY29kZXIuZGVjb2RlU3RydWN0KGNvZGVjLlVpbnQzMik7Ci0g
ICAgdmFsLnBvcnROdW1iZXIgPSBkZWNvZGVyLmRlY29kZVN0cnVjdChjb2RlYy5VaW50MzIpOwot
ICAgIHZhbC5wcm9kdWN0SWQgPSBkZWNvZGVyLmRlY29kZVN0cnVjdChjb2RlYy5VaW50MTYpOwot
ICAgIHZhbC5kZXZpY2VWZXJzaW9uTWFqb3IgPSBkZWNvZGVyLmRlY29kZVN0cnVjdChjb2RlYy5V
aW50OCk7Ci0gICAgdmFsLmRldmljZVZlcnNpb25NaW5vciA9IGRlY29kZXIuZGVjb2RlU3RydWN0
KGNvZGVjLlVpbnQ4KTsKLSAgICB2YWwuZGV2aWNlVmVyc2lvblN1Ym1pbm9yID0gZGVjb2Rlci5k
ZWNvZGVTdHJ1Y3QoY29kZWMuVWludDgpOwotICAgIHZhbC5hY3RpdmVDb25maWd1cmF0aW9uID0g
ZGVjb2Rlci5kZWNvZGVTdHJ1Y3QoY29kZWMuVWludDgpOwotICAgIGRlY29kZXIuc2tpcCgxKTsK
LSAgICBkZWNvZGVyLnNraXAoMSk7Ci0gICAgdmFsLm1hbnVmYWN0dXJlck5hbWUgPSBkZWNvZGVy
LmRlY29kZVN0cnVjdFBvaW50ZXIoc3RyaW5nMTYkLlN0cmluZzE2KTsKLSAgICB2YWwucHJvZHVj
dE5hbWUgPSBkZWNvZGVyLmRlY29kZVN0cnVjdFBvaW50ZXIoc3RyaW5nMTYkLlN0cmluZzE2KTsK
LSAgICB2YWwuc2VyaWFsTnVtYmVyID0gZGVjb2Rlci5kZWNvZGVTdHJ1Y3RQb2ludGVyKHN0cmlu
ZzE2JC5TdHJpbmcxNik7Ci0gICAgdmFsLndlYnVzYkxhbmRpbmdQYWdlID0gZGVjb2Rlci5kZWNv
ZGVTdHJ1Y3RQb2ludGVyKHVybCQuVXJsKTsKLSAgICB2YWwuY29uZmlndXJhdGlvbnMgPSBkZWNv
ZGVyLmRlY29kZUFycmF5UG9pbnRlcihuZXcgY29kZWMuUG9pbnRlclRvKFVzYkNvbmZpZ3VyYXRp
b25JbmZvKSk7Ci0gICAgcmV0dXJuIHZhbDsKLSAgfTsKLQotICBVc2JEZXZpY2VJbmZvLmVuY29k
ZSA9IGZ1bmN0aW9uKGVuY29kZXIsIHZhbCkgewotICAgIHZhciBwYWNrZWQ7Ci0gICAgZW5jb2Rl
ci53cml0ZVVpbnQzMihVc2JEZXZpY2VJbmZvLmVuY29kZWRTaXplKTsKLSAgICBlbmNvZGVyLndy
aXRlVWludDMyKDApOwotICAgIGVuY29kZXIuZW5jb2RlU3RydWN0KGNvZGVjLlN0cmluZywgdmFs
Lmd1aWQpOwotICAgIGVuY29kZXIuZW5jb2RlU3RydWN0KGNvZGVjLlVpbnQ4LCB2YWwudXNiVmVy
c2lvbk1ham9yKTsKLSAgICBlbmNvZGVyLmVuY29kZVN0cnVjdChjb2RlYy5VaW50OCwgdmFsLnVz
YlZlcnNpb25NaW5vcik7Ci0gICAgZW5jb2Rlci5lbmNvZGVTdHJ1Y3QoY29kZWMuVWludDgsIHZh
bC51c2JWZXJzaW9uU3VibWlub3IpOwotICAgIGVuY29kZXIuZW5jb2RlU3RydWN0KGNvZGVjLlVp
bnQ4LCB2YWwuY2xhc3NDb2RlKTsKLSAgICBlbmNvZGVyLmVuY29kZVN0cnVjdChjb2RlYy5VaW50
OCwgdmFsLnN1YmNsYXNzQ29kZSk7Ci0gICAgZW5jb2Rlci5lbmNvZGVTdHJ1Y3QoY29kZWMuVWlu
dDgsIHZhbC5wcm90b2NvbENvZGUpOwotICAgIGVuY29kZXIuZW5jb2RlU3RydWN0KGNvZGVjLlVp
bnQxNiwgdmFsLnZlbmRvcklkKTsKLSAgICBlbmNvZGVyLmVuY29kZVN0cnVjdChjb2RlYy5VaW50
MzIsIHZhbC5idXNOdW1iZXIpOwotICAgIGVuY29kZXIuZW5jb2RlU3RydWN0KGNvZGVjLlVpbnQz
MiwgdmFsLnBvcnROdW1iZXIpOwotICAgIGVuY29kZXIuZW5jb2RlU3RydWN0KGNvZGVjLlVpbnQx
NiwgdmFsLnByb2R1Y3RJZCk7Ci0gICAgZW5jb2Rlci5lbmNvZGVTdHJ1Y3QoY29kZWMuVWludDgs
IHZhbC5kZXZpY2VWZXJzaW9uTWFqb3IpOwotICAgIGVuY29kZXIuZW5jb2RlU3RydWN0KGNvZGVj
LlVpbnQ4LCB2YWwuZGV2aWNlVmVyc2lvbk1pbm9yKTsKLSAgICBlbmNvZGVyLmVuY29kZVN0cnVj
dChjb2RlYy5VaW50OCwgdmFsLmRldmljZVZlcnNpb25TdWJtaW5vcik7Ci0gICAgZW5jb2Rlci5l
bmNvZGVTdHJ1Y3QoY29kZWMuVWludDgsIHZhbC5hY3RpdmVDb25maWd1cmF0aW9uKTsKLSAgICBl
bmNvZGVyLnNraXAoMSk7Ci0gICAgZW5jb2Rlci5za2lwKDEpOwotICAgIGVuY29kZXIuZW5jb2Rl
U3RydWN0UG9pbnRlcihzdHJpbmcxNiQuU3RyaW5nMTYsIHZhbC5tYW51ZmFjdHVyZXJOYW1lKTsK
LSAgICBlbmNvZGVyLmVuY29kZVN0cnVjdFBvaW50ZXIoc3RyaW5nMTYkLlN0cmluZzE2LCB2YWwu
cHJvZHVjdE5hbWUpOwotICAgIGVuY29kZXIuZW5jb2RlU3RydWN0UG9pbnRlcihzdHJpbmcxNiQu
U3RyaW5nMTYsIHZhbC5zZXJpYWxOdW1iZXIpOwotICAgIGVuY29kZXIuZW5jb2RlU3RydWN0UG9p
bnRlcih1cmwkLlVybCwgdmFsLndlYnVzYkxhbmRpbmdQYWdlKTsKLSAgICBlbmNvZGVyLmVuY29k
ZUFycmF5UG9pbnRlcihuZXcgY29kZWMuUG9pbnRlclRvKFVzYkNvbmZpZ3VyYXRpb25JbmZvKSwg
dmFsLmNvbmZpZ3VyYXRpb25zKTsKLSAgfTsKLSAgZnVuY3Rpb24gVXNiQ29udHJvbFRyYW5zZmVy
UGFyYW1zKHZhbHVlcykgewotICAgIHRoaXMuaW5pdERlZmF1bHRzXygpOwotICAgIHRoaXMuaW5p
dEZpZWxkc18odmFsdWVzKTsKLSAgfQotCi0KLSAgVXNiQ29udHJvbFRyYW5zZmVyUGFyYW1zLnBy
b3RvdHlwZS5pbml0RGVmYXVsdHNfID0gZnVuY3Rpb24oKSB7Ci0gICAgdGhpcy50eXBlID0gMDsK
LSAgICB0aGlzLnJlY2lwaWVudCA9IDA7Ci0gICAgdGhpcy5yZXF1ZXN0ID0gMDsKLSAgICB0aGlz
LnZhbHVlID0gMDsKLSAgICB0aGlzLmluZGV4ID0gMDsKLSAgfTsKLSAgVXNiQ29udHJvbFRyYW5z
ZmVyUGFyYW1zLnByb3RvdHlwZS5pbml0RmllbGRzXyA9IGZ1bmN0aW9uKGZpZWxkcykgewotICAg
IGZvcih2YXIgZmllbGQgaW4gZmllbGRzKSB7Ci0gICAgICAgIGlmICh0aGlzLmhhc093blByb3Bl
cnR5KGZpZWxkKSkKLSAgICAgICAgICB0aGlzW2ZpZWxkXSA9IGZpZWxkc1tmaWVsZF07Ci0gICAg
fQotICB9OwotCi0gIFVzYkNvbnRyb2xUcmFuc2ZlclBhcmFtcy52YWxpZGF0ZSA9IGZ1bmN0aW9u
KG1lc3NhZ2VWYWxpZGF0b3IsIG9mZnNldCkgewotICAgIHZhciBlcnI7Ci0gICAgZXJyID0gbWVz
c2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdEhlYWRlcihvZmZzZXQsIGNvZGVjLmtTdHJ1Y3RI
ZWFkZXJTaXplKTsKLSAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5P
TkUpCi0gICAgICAgIHJldHVybiBlcnI7Ci0KLSAgICB2YXIga1ZlcnNpb25TaXplcyA9IFsKLSAg
ICAgIHt2ZXJzaW9uOiAwLCBudW1CeXRlczogMjR9Ci0gICAgXTsKLSAgICBlcnIgPSBtZXNzYWdl
VmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0VmVyc2lvbihvZmZzZXQsIGtWZXJzaW9uU2l6ZXMpOwot
ICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKLSAgICAgICAg
cmV0dXJuIGVycjsKLQotCi0gICAgLy8gdmFsaWRhdGUgVXNiQ29udHJvbFRyYW5zZmVyUGFyYW1z
LnR5cGUKLSAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlRW51bShvZmZzZXQgKyBj
b2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDAsIFVzYkNvbnRyb2xUcmFuc2ZlclR5cGUpOwotICAg
IGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKLSAgICAgICAgcmV0
dXJuIGVycjsKLQotCi0gICAgLy8gdmFsaWRhdGUgVXNiQ29udHJvbFRyYW5zZmVyUGFyYW1zLnJl
Y2lwaWVudAotICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVFbnVtKG9mZnNldCAr
IGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgNCwgVXNiQ29udHJvbFRyYW5zZmVyUmVjaXBpZW50
KTsKLSAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCi0gICAg
ICAgIHJldHVybiBlcnI7Ci0KLQotCi0KLSAgICByZXR1cm4gdmFsaWRhdG9yLnZhbGlkYXRpb25F
cnJvci5OT05FOwotICB9OwotCi0gIFVzYkNvbnRyb2xUcmFuc2ZlclBhcmFtcy5lbmNvZGVkU2l6
ZSA9IGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgMTY7Ci0KLSAgVXNiQ29udHJvbFRyYW5zZmVy
UGFyYW1zLmRlY29kZSA9IGZ1bmN0aW9uKGRlY29kZXIpIHsKLSAgICB2YXIgcGFja2VkOwotICAg
IHZhciB2YWwgPSBuZXcgVXNiQ29udHJvbFRyYW5zZmVyUGFyYW1zKCk7Ci0gICAgdmFyIG51bWJl
ck9mQnl0ZXMgPSBkZWNvZGVyLnJlYWRVaW50MzIoKTsKLSAgICB2YXIgdmVyc2lvbiA9IGRlY29k
ZXIucmVhZFVpbnQzMigpOwotICAgIHZhbC50eXBlID0gZGVjb2Rlci5kZWNvZGVTdHJ1Y3QoY29k
ZWMuSW50MzIpOwotICAgIHZhbC5yZWNpcGllbnQgPSBkZWNvZGVyLmRlY29kZVN0cnVjdChjb2Rl
Yy5JbnQzMik7Ci0gICAgdmFsLnJlcXVlc3QgPSBkZWNvZGVyLmRlY29kZVN0cnVjdChjb2RlYy5V
aW50OCk7Ci0gICAgZGVjb2Rlci5za2lwKDEpOwotICAgIHZhbC52YWx1ZSA9IGRlY29kZXIuZGVj
b2RlU3RydWN0KGNvZGVjLlVpbnQxNik7Ci0gICAgdmFsLmluZGV4ID0gZGVjb2Rlci5kZWNvZGVT
dHJ1Y3QoY29kZWMuVWludDE2KTsKLSAgICBkZWNvZGVyLnNraXAoMSk7Ci0gICAgZGVjb2Rlci5z
a2lwKDEpOwotICAgIHJldHVybiB2YWw7Ci0gIH07Ci0KLSAgVXNiQ29udHJvbFRyYW5zZmVyUGFy
YW1zLmVuY29kZSA9IGZ1bmN0aW9uKGVuY29kZXIsIHZhbCkgewotICAgIHZhciBwYWNrZWQ7Ci0g
ICAgZW5jb2Rlci53cml0ZVVpbnQzMihVc2JDb250cm9sVHJhbnNmZXJQYXJhbXMuZW5jb2RlZFNp
emUpOwotICAgIGVuY29kZXIud3JpdGVVaW50MzIoMCk7Ci0gICAgZW5jb2Rlci5lbmNvZGVTdHJ1
Y3QoY29kZWMuSW50MzIsIHZhbC50eXBlKTsKLSAgICBlbmNvZGVyLmVuY29kZVN0cnVjdChjb2Rl
Yy5JbnQzMiwgdmFsLnJlY2lwaWVudCk7Ci0gICAgZW5jb2Rlci5lbmNvZGVTdHJ1Y3QoY29kZWMu
VWludDgsIHZhbC5yZXF1ZXN0KTsKLSAgICBlbmNvZGVyLnNraXAoMSk7Ci0gICAgZW5jb2Rlci5l
bmNvZGVTdHJ1Y3QoY29kZWMuVWludDE2LCB2YWwudmFsdWUpOwotICAgIGVuY29kZXIuZW5jb2Rl
U3RydWN0KGNvZGVjLlVpbnQxNiwgdmFsLmluZGV4KTsKLSAgICBlbmNvZGVyLnNraXAoMSk7Ci0g
ICAgZW5jb2Rlci5za2lwKDEpOwotICB9OwotICBmdW5jdGlvbiBVc2JJc29jaHJvbm91c1BhY2tl
dCh2YWx1ZXMpIHsKLSAgICB0aGlzLmluaXREZWZhdWx0c18oKTsKLSAgICB0aGlzLmluaXRGaWVs
ZHNfKHZhbHVlcyk7Ci0gIH0KLQotCi0gIFVzYklzb2Nocm9ub3VzUGFja2V0LnByb3RvdHlwZS5p
bml0RGVmYXVsdHNfID0gZnVuY3Rpb24oKSB7Ci0gICAgdGhpcy5sZW5ndGggPSAwOwotICAgIHRo
aXMudHJhbnNmZXJyZWRMZW5ndGggPSAwOwotICAgIHRoaXMuc3RhdHVzID0gMDsKLSAgfTsKLSAg
VXNiSXNvY2hyb25vdXNQYWNrZXQucHJvdG90eXBlLmluaXRGaWVsZHNfID0gZnVuY3Rpb24oZmll
bGRzKSB7Ci0gICAgZm9yKHZhciBmaWVsZCBpbiBmaWVsZHMpIHsKLSAgICAgICAgaWYgKHRoaXMu
aGFzT3duUHJvcGVydHkoZmllbGQpKQotICAgICAgICAgIHRoaXNbZmllbGRdID0gZmllbGRzW2Zp
ZWxkXTsKLSAgICB9Ci0gIH07Ci0KLSAgVXNiSXNvY2hyb25vdXNQYWNrZXQudmFsaWRhdGUgPSBm
dW5jdGlvbihtZXNzYWdlVmFsaWRhdG9yLCBvZmZzZXQpIHsKLSAgICB2YXIgZXJyOwotICAgIGVy
ciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RIZWFkZXIob2Zmc2V0LCBjb2RlYy5r
U3RydWN0SGVhZGVyU2l6ZSk7Ci0gICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25F
cnJvci5OT05FKQotICAgICAgICByZXR1cm4gZXJyOwotCi0gICAgdmFyIGtWZXJzaW9uU2l6ZXMg
PSBbCi0gICAgICB7dmVyc2lvbjogMCwgbnVtQnl0ZXM6IDI0fQotICAgIF07Ci0gICAgZXJyID0g
bWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdFZlcnNpb24ob2Zmc2V0LCBrVmVyc2lvblNp
emVzKTsKLSAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCi0g
ICAgICAgIHJldHVybiBlcnI7Ci0KLQotCi0KLSAgICAvLyB2YWxpZGF0ZSBVc2JJc29jaHJvbm91
c1BhY2tldC5zdGF0dXMKLSAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlRW51bShv
ZmZzZXQgKyBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDgsIFVzYlRyYW5zZmVyU3RhdHVzKTsK
LSAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCi0gICAgICAg
IHJldHVybiBlcnI7Ci0KLSAgICByZXR1cm4gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05F
OwotICB9OwotCi0gIFVzYklzb2Nocm9ub3VzUGFja2V0LmVuY29kZWRTaXplID0gY29kZWMua1N0
cnVjdEhlYWRlclNpemUgKyAxNjsKLQotICBVc2JJc29jaHJvbm91c1BhY2tldC5kZWNvZGUgPSBm
dW5jdGlvbihkZWNvZGVyKSB7Ci0gICAgdmFyIHBhY2tlZDsKLSAgICB2YXIgdmFsID0gbmV3IFVz
Yklzb2Nocm9ub3VzUGFja2V0KCk7Ci0gICAgdmFyIG51bWJlck9mQnl0ZXMgPSBkZWNvZGVyLnJl
YWRVaW50MzIoKTsKLSAgICB2YXIgdmVyc2lvbiA9IGRlY29kZXIucmVhZFVpbnQzMigpOwotICAg
IHZhbC5sZW5ndGggPSBkZWNvZGVyLmRlY29kZVN0cnVjdChjb2RlYy5VaW50MzIpOwotICAgIHZh
bC50cmFuc2ZlcnJlZExlbmd0aCA9IGRlY29kZXIuZGVjb2RlU3RydWN0KGNvZGVjLlVpbnQzMik7
Ci0gICAgdmFsLnN0YXR1cyA9IGRlY29kZXIuZGVjb2RlU3RydWN0KGNvZGVjLkludDMyKTsKLSAg
ICBkZWNvZGVyLnNraXAoMSk7Ci0gICAgZGVjb2Rlci5za2lwKDEpOwotICAgIGRlY29kZXIuc2tp
cCgxKTsKLSAgICBkZWNvZGVyLnNraXAoMSk7Ci0gICAgcmV0dXJuIHZhbDsKLSAgfTsKLQotICBV
c2JJc29jaHJvbm91c1BhY2tldC5lbmNvZGUgPSBmdW5jdGlvbihlbmNvZGVyLCB2YWwpIHsKLSAg
ICB2YXIgcGFja2VkOwotICAgIGVuY29kZXIud3JpdGVVaW50MzIoVXNiSXNvY2hyb25vdXNQYWNr
ZXQuZW5jb2RlZFNpemUpOwotICAgIGVuY29kZXIud3JpdGVVaW50MzIoMCk7Ci0gICAgZW5jb2Rl
ci5lbmNvZGVTdHJ1Y3QoY29kZWMuVWludDMyLCB2YWwubGVuZ3RoKTsKLSAgICBlbmNvZGVyLmVu
Y29kZVN0cnVjdChjb2RlYy5VaW50MzIsIHZhbC50cmFuc2ZlcnJlZExlbmd0aCk7Ci0gICAgZW5j
b2Rlci5lbmNvZGVTdHJ1Y3QoY29kZWMuSW50MzIsIHZhbC5zdGF0dXMpOwotICAgIGVuY29kZXIu
c2tpcCgxKTsKLSAgICBlbmNvZGVyLnNraXAoMSk7Ci0gICAgZW5jb2Rlci5za2lwKDEpOwotICAg
IGVuY29kZXIuc2tpcCgxKTsKLSAgfTsKLSAgZnVuY3Rpb24gVXNiRGV2aWNlX09wZW5fUGFyYW1z
KHZhbHVlcykgewotICAgIHRoaXMuaW5pdERlZmF1bHRzXygpOwotICAgIHRoaXMuaW5pdEZpZWxk
c18odmFsdWVzKTsKLSAgfQotCi0KLSAgVXNiRGV2aWNlX09wZW5fUGFyYW1zLnByb3RvdHlwZS5p
bml0RGVmYXVsdHNfID0gZnVuY3Rpb24oKSB7Ci0gIH07Ci0gIFVzYkRldmljZV9PcGVuX1BhcmFt
cy5wcm90b3R5cGUuaW5pdEZpZWxkc18gPSBmdW5jdGlvbihmaWVsZHMpIHsKLSAgICBmb3IodmFy
IGZpZWxkIGluIGZpZWxkcykgewotICAgICAgICBpZiAodGhpcy5oYXNPd25Qcm9wZXJ0eShmaWVs
ZCkpCi0gICAgICAgICAgdGhpc1tmaWVsZF0gPSBmaWVsZHNbZmllbGRdOwotICAgIH0KLSAgfTsK
LQotICBVc2JEZXZpY2VfT3Blbl9QYXJhbXMudmFsaWRhdGUgPSBmdW5jdGlvbihtZXNzYWdlVmFs
aWRhdG9yLCBvZmZzZXQpIHsKLSAgICB2YXIgZXJyOwotICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0
b3IudmFsaWRhdGVTdHJ1Y3RIZWFkZXIob2Zmc2V0LCBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSk7
Ci0gICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQotICAgICAg
ICByZXR1cm4gZXJyOwotCi0gICAgdmFyIGtWZXJzaW9uU2l6ZXMgPSBbCi0gICAgICB7dmVyc2lv
bjogMCwgbnVtQnl0ZXM6IDh9Ci0gICAgXTsKLSAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZh
bGlkYXRlU3RydWN0VmVyc2lvbihvZmZzZXQsIGtWZXJzaW9uU2l6ZXMpOwotICAgIGlmIChlcnIg
IT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKLSAgICAgICAgcmV0dXJuIGVycjsK
LQotICAgIHJldHVybiB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkU7Ci0gIH07Ci0KLSAg
VXNiRGV2aWNlX09wZW5fUGFyYW1zLmVuY29kZWRTaXplID0gY29kZWMua1N0cnVjdEhlYWRlclNp
emUgKyAwOwotCi0gIFVzYkRldmljZV9PcGVuX1BhcmFtcy5kZWNvZGUgPSBmdW5jdGlvbihkZWNv
ZGVyKSB7Ci0gICAgdmFyIHBhY2tlZDsKLSAgICB2YXIgdmFsID0gbmV3IFVzYkRldmljZV9PcGVu
X1BhcmFtcygpOwotICAgIHZhciBudW1iZXJPZkJ5dGVzID0gZGVjb2Rlci5yZWFkVWludDMyKCk7
Ci0gICAgdmFyIHZlcnNpb24gPSBkZWNvZGVyLnJlYWRVaW50MzIoKTsKLSAgICByZXR1cm4gdmFs
OwotICB9OwotCi0gIFVzYkRldmljZV9PcGVuX1BhcmFtcy5lbmNvZGUgPSBmdW5jdGlvbihlbmNv
ZGVyLCB2YWwpIHsKLSAgICB2YXIgcGFja2VkOwotICAgIGVuY29kZXIud3JpdGVVaW50MzIoVXNi
RGV2aWNlX09wZW5fUGFyYW1zLmVuY29kZWRTaXplKTsKLSAgICBlbmNvZGVyLndyaXRlVWludDMy
KDApOwotICB9OwotICBmdW5jdGlvbiBVc2JEZXZpY2VfT3Blbl9SZXNwb25zZVBhcmFtcyh2YWx1
ZXMpIHsKLSAgICB0aGlzLmluaXREZWZhdWx0c18oKTsKLSAgICB0aGlzLmluaXRGaWVsZHNfKHZh
bHVlcyk7Ci0gIH0KLQotCi0gIFVzYkRldmljZV9PcGVuX1Jlc3BvbnNlUGFyYW1zLnByb3RvdHlw
ZS5pbml0RGVmYXVsdHNfID0gZnVuY3Rpb24oKSB7Ci0gICAgdGhpcy5lcnJvciA9IDA7Ci0gIH07
Ci0gIFVzYkRldmljZV9PcGVuX1Jlc3BvbnNlUGFyYW1zLnByb3RvdHlwZS5pbml0RmllbGRzXyA9
IGZ1bmN0aW9uKGZpZWxkcykgewotICAgIGZvcih2YXIgZmllbGQgaW4gZmllbGRzKSB7Ci0gICAg
ICAgIGlmICh0aGlzLmhhc093blByb3BlcnR5KGZpZWxkKSkKLSAgICAgICAgICB0aGlzW2ZpZWxk
XSA9IGZpZWxkc1tmaWVsZF07Ci0gICAgfQotICB9OwotCi0gIFVzYkRldmljZV9PcGVuX1Jlc3Bv
bnNlUGFyYW1zLnZhbGlkYXRlID0gZnVuY3Rpb24obWVzc2FnZVZhbGlkYXRvciwgb2Zmc2V0KSB7
Ci0gICAgdmFyIGVycjsKLSAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0
SGVhZGVyKG9mZnNldCwgY29kZWMua1N0cnVjdEhlYWRlclNpemUpOwotICAgIGlmIChlcnIgIT09
IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKLSAgICAgICAgcmV0dXJuIGVycjsKLQot
ICAgIHZhciBrVmVyc2lvblNpemVzID0gWwotICAgICAge3ZlcnNpb246IDAsIG51bUJ5dGVzOiAx
Nn0KLSAgICBdOwotICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RWZXJz
aW9uKG9mZnNldCwga1ZlcnNpb25TaXplcyk7Ci0gICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZh
bGlkYXRpb25FcnJvci5OT05FKQotICAgICAgICByZXR1cm4gZXJyOwotCi0KLSAgICAvLyB2YWxp
ZGF0ZSBVc2JEZXZpY2VfT3Blbl9SZXNwb25zZVBhcmFtcy5lcnJvcgotICAgIGVyciA9IG1lc3Nh
Z2VWYWxpZGF0b3IudmFsaWRhdGVFbnVtKG9mZnNldCArIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXpl
ICsgMCwgVXNiT3BlbkRldmljZUVycm9yKTsKLSAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFs
aWRhdGlvbkVycm9yLk5PTkUpCi0gICAgICAgIHJldHVybiBlcnI7Ci0KLSAgICByZXR1cm4gdmFs
aWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FOwotICB9OwotCi0gIFVzYkRldmljZV9PcGVuX1Jl
c3BvbnNlUGFyYW1zLmVuY29kZWRTaXplID0gY29kZWMua1N0cnVjdEhlYWRlclNpemUgKyA4Owot
Ci0gIFVzYkRldmljZV9PcGVuX1Jlc3BvbnNlUGFyYW1zLmRlY29kZSA9IGZ1bmN0aW9uKGRlY29k
ZXIpIHsKLSAgICB2YXIgcGFja2VkOwotICAgIHZhciB2YWwgPSBuZXcgVXNiRGV2aWNlX09wZW5f
UmVzcG9uc2VQYXJhbXMoKTsKLSAgICB2YXIgbnVtYmVyT2ZCeXRlcyA9IGRlY29kZXIucmVhZFVp
bnQzMigpOwotICAgIHZhciB2ZXJzaW9uID0gZGVjb2Rlci5yZWFkVWludDMyKCk7Ci0gICAgdmFs
LmVycm9yID0gZGVjb2Rlci5kZWNvZGVTdHJ1Y3QoY29kZWMuSW50MzIpOwotICAgIGRlY29kZXIu
c2tpcCgxKTsKLSAgICBkZWNvZGVyLnNraXAoMSk7Ci0gICAgZGVjb2Rlci5za2lwKDEpOwotICAg
IGRlY29kZXIuc2tpcCgxKTsKLSAgICByZXR1cm4gdmFsOwotICB9OwotCi0gIFVzYkRldmljZV9P
cGVuX1Jlc3BvbnNlUGFyYW1zLmVuY29kZSA9IGZ1bmN0aW9uKGVuY29kZXIsIHZhbCkgewotICAg
IHZhciBwYWNrZWQ7Ci0gICAgZW5jb2Rlci53cml0ZVVpbnQzMihVc2JEZXZpY2VfT3Blbl9SZXNw
b25zZVBhcmFtcy5lbmNvZGVkU2l6ZSk7Ci0gICAgZW5jb2Rlci53cml0ZVVpbnQzMigwKTsKLSAg
ICBlbmNvZGVyLmVuY29kZVN0cnVjdChjb2RlYy5JbnQzMiwgdmFsLmVycm9yKTsKLSAgICBlbmNv
ZGVyLnNraXAoMSk7Ci0gICAgZW5jb2Rlci5za2lwKDEpOwotICAgIGVuY29kZXIuc2tpcCgxKTsK
LSAgICBlbmNvZGVyLnNraXAoMSk7Ci0gIH07Ci0gIGZ1bmN0aW9uIFVzYkRldmljZV9DbG9zZV9Q
YXJhbXModmFsdWVzKSB7Ci0gICAgdGhpcy5pbml0RGVmYXVsdHNfKCk7Ci0gICAgdGhpcy5pbml0
RmllbGRzXyh2YWx1ZXMpOwotICB9Ci0KLQotICBVc2JEZXZpY2VfQ2xvc2VfUGFyYW1zLnByb3Rv
dHlwZS5pbml0RGVmYXVsdHNfID0gZnVuY3Rpb24oKSB7Ci0gIH07Ci0gIFVzYkRldmljZV9DbG9z
ZV9QYXJhbXMucHJvdG90eXBlLmluaXRGaWVsZHNfID0gZnVuY3Rpb24oZmllbGRzKSB7Ci0gICAg
Zm9yKHZhciBmaWVsZCBpbiBmaWVsZHMpIHsKLSAgICAgICAgaWYgKHRoaXMuaGFzT3duUHJvcGVy
dHkoZmllbGQpKQotICAgICAgICAgIHRoaXNbZmllbGRdID0gZmllbGRzW2ZpZWxkXTsKLSAgICB9
Ci0gIH07Ci0KLSAgVXNiRGV2aWNlX0Nsb3NlX1BhcmFtcy52YWxpZGF0ZSA9IGZ1bmN0aW9uKG1l
c3NhZ2VWYWxpZGF0b3IsIG9mZnNldCkgewotICAgIHZhciBlcnI7Ci0gICAgZXJyID0gbWVzc2Fn
ZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdEhlYWRlcihvZmZzZXQsIGNvZGVjLmtTdHJ1Y3RIZWFk
ZXJTaXplKTsKLSAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUp
Ci0gICAgICAgIHJldHVybiBlcnI7Ci0KLSAgICB2YXIga1ZlcnNpb25TaXplcyA9IFsKLSAgICAg
IHt2ZXJzaW9uOiAwLCBudW1CeXRlczogOH0KLSAgICBdOwotICAgIGVyciA9IG1lc3NhZ2VWYWxp
ZGF0b3IudmFsaWRhdGVTdHJ1Y3RWZXJzaW9uKG9mZnNldCwga1ZlcnNpb25TaXplcyk7Ci0gICAg
aWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQotICAgICAgICByZXR1
cm4gZXJyOwotCi0gICAgcmV0dXJuIHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORTsKLSAg
fTsKLQotICBVc2JEZXZpY2VfQ2xvc2VfUGFyYW1zLmVuY29kZWRTaXplID0gY29kZWMua1N0cnVj
dEhlYWRlclNpemUgKyAwOwotCi0gIFVzYkRldmljZV9DbG9zZV9QYXJhbXMuZGVjb2RlID0gZnVu
Y3Rpb24oZGVjb2RlcikgewotICAgIHZhciBwYWNrZWQ7Ci0gICAgdmFyIHZhbCA9IG5ldyBVc2JE
ZXZpY2VfQ2xvc2VfUGFyYW1zKCk7Ci0gICAgdmFyIG51bWJlck9mQnl0ZXMgPSBkZWNvZGVyLnJl
YWRVaW50MzIoKTsKLSAgICB2YXIgdmVyc2lvbiA9IGRlY29kZXIucmVhZFVpbnQzMigpOwotICAg
IHJldHVybiB2YWw7Ci0gIH07Ci0KLSAgVXNiRGV2aWNlX0Nsb3NlX1BhcmFtcy5lbmNvZGUgPSBm
dW5jdGlvbihlbmNvZGVyLCB2YWwpIHsKLSAgICB2YXIgcGFja2VkOwotICAgIGVuY29kZXIud3Jp
dGVVaW50MzIoVXNiRGV2aWNlX0Nsb3NlX1BhcmFtcy5lbmNvZGVkU2l6ZSk7Ci0gICAgZW5jb2Rl
ci53cml0ZVVpbnQzMigwKTsKLSAgfTsKLSAgZnVuY3Rpb24gVXNiRGV2aWNlX0Nsb3NlX1Jlc3Bv
bnNlUGFyYW1zKHZhbHVlcykgewotICAgIHRoaXMuaW5pdERlZmF1bHRzXygpOwotICAgIHRoaXMu
aW5pdEZpZWxkc18odmFsdWVzKTsKLSAgfQotCi0KLSAgVXNiRGV2aWNlX0Nsb3NlX1Jlc3BvbnNl
UGFyYW1zLnByb3RvdHlwZS5pbml0RGVmYXVsdHNfID0gZnVuY3Rpb24oKSB7Ci0gIH07Ci0gIFVz
YkRldmljZV9DbG9zZV9SZXNwb25zZVBhcmFtcy5wcm90b3R5cGUuaW5pdEZpZWxkc18gPSBmdW5j
dGlvbihmaWVsZHMpIHsKLSAgICBmb3IodmFyIGZpZWxkIGluIGZpZWxkcykgewotICAgICAgICBp
ZiAodGhpcy5oYXNPd25Qcm9wZXJ0eShmaWVsZCkpCi0gICAgICAgICAgdGhpc1tmaWVsZF0gPSBm
aWVsZHNbZmllbGRdOwotICAgIH0KLSAgfTsKLQotICBVc2JEZXZpY2VfQ2xvc2VfUmVzcG9uc2VQ
YXJhbXMudmFsaWRhdGUgPSBmdW5jdGlvbihtZXNzYWdlVmFsaWRhdG9yLCBvZmZzZXQpIHsKLSAg
ICB2YXIgZXJyOwotICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RIZWFk
ZXIob2Zmc2V0LCBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSk7Ci0gICAgaWYgKGVyciAhPT0gdmFs
aWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQotICAgICAgICByZXR1cm4gZXJyOwotCi0gICAg
dmFyIGtWZXJzaW9uU2l6ZXMgPSBbCi0gICAgICB7dmVyc2lvbjogMCwgbnVtQnl0ZXM6IDh9Ci0g
ICAgXTsKLSAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0VmVyc2lvbihv
ZmZzZXQsIGtWZXJzaW9uU2l6ZXMpOwotICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0
aW9uRXJyb3IuTk9ORSkKLSAgICAgICAgcmV0dXJuIGVycjsKLQotICAgIHJldHVybiB2YWxpZGF0
b3IudmFsaWRhdGlvbkVycm9yLk5PTkU7Ci0gIH07Ci0KLSAgVXNiRGV2aWNlX0Nsb3NlX1Jlc3Bv
bnNlUGFyYW1zLmVuY29kZWRTaXplID0gY29kZWMua1N0cnVjdEhlYWRlclNpemUgKyAwOwotCi0g
IFVzYkRldmljZV9DbG9zZV9SZXNwb25zZVBhcmFtcy5kZWNvZGUgPSBmdW5jdGlvbihkZWNvZGVy
KSB7Ci0gICAgdmFyIHBhY2tlZDsKLSAgICB2YXIgdmFsID0gbmV3IFVzYkRldmljZV9DbG9zZV9S
ZXNwb25zZVBhcmFtcygpOwotICAgIHZhciBudW1iZXJPZkJ5dGVzID0gZGVjb2Rlci5yZWFkVWlu
dDMyKCk7Ci0gICAgdmFyIHZlcnNpb24gPSBkZWNvZGVyLnJlYWRVaW50MzIoKTsKLSAgICByZXR1
cm4gdmFsOwotICB9OwotCi0gIFVzYkRldmljZV9DbG9zZV9SZXNwb25zZVBhcmFtcy5lbmNvZGUg
PSBmdW5jdGlvbihlbmNvZGVyLCB2YWwpIHsKLSAgICB2YXIgcGFja2VkOwotICAgIGVuY29kZXIu
d3JpdGVVaW50MzIoVXNiRGV2aWNlX0Nsb3NlX1Jlc3BvbnNlUGFyYW1zLmVuY29kZWRTaXplKTsK
LSAgICBlbmNvZGVyLndyaXRlVWludDMyKDApOwotICB9OwotICBmdW5jdGlvbiBVc2JEZXZpY2Vf
U2V0Q29uZmlndXJhdGlvbl9QYXJhbXModmFsdWVzKSB7Ci0gICAgdGhpcy5pbml0RGVmYXVsdHNf
KCk7Ci0gICAgdGhpcy5pbml0RmllbGRzXyh2YWx1ZXMpOwotICB9Ci0KLQotICBVc2JEZXZpY2Vf
U2V0Q29uZmlndXJhdGlvbl9QYXJhbXMucHJvdG90eXBlLmluaXREZWZhdWx0c18gPSBmdW5jdGlv
bigpIHsKLSAgICB0aGlzLnZhbHVlID0gMDsKLSAgfTsKLSAgVXNiRGV2aWNlX1NldENvbmZpZ3Vy
YXRpb25fUGFyYW1zLnByb3RvdHlwZS5pbml0RmllbGRzXyA9IGZ1bmN0aW9uKGZpZWxkcykgewot
ICAgIGZvcih2YXIgZmllbGQgaW4gZmllbGRzKSB7Ci0gICAgICAgIGlmICh0aGlzLmhhc093blBy
b3BlcnR5KGZpZWxkKSkKLSAgICAgICAgICB0aGlzW2ZpZWxkXSA9IGZpZWxkc1tmaWVsZF07Ci0g
ICAgfQotICB9OwotCi0gIFVzYkRldmljZV9TZXRDb25maWd1cmF0aW9uX1BhcmFtcy52YWxpZGF0
ZSA9IGZ1bmN0aW9uKG1lc3NhZ2VWYWxpZGF0b3IsIG9mZnNldCkgewotICAgIHZhciBlcnI7Ci0g
ICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdEhlYWRlcihvZmZzZXQsIGNv
ZGVjLmtTdHJ1Y3RIZWFkZXJTaXplKTsKLSAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRh
dGlvbkVycm9yLk5PTkUpCi0gICAgICAgIHJldHVybiBlcnI7Ci0KLSAgICB2YXIga1ZlcnNpb25T
aXplcyA9IFsKLSAgICAgIHt2ZXJzaW9uOiAwLCBudW1CeXRlczogMTZ9Ci0gICAgXTsKLSAgICBl
cnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0VmVyc2lvbihvZmZzZXQsIGtWZXJz
aW9uU2l6ZXMpOwotICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9O
RSkKLSAgICAgICAgcmV0dXJuIGVycjsKLQotCi0gICAgcmV0dXJuIHZhbGlkYXRvci52YWxpZGF0
aW9uRXJyb3IuTk9ORTsKLSAgfTsKLQotICBVc2JEZXZpY2VfU2V0Q29uZmlndXJhdGlvbl9QYXJh
bXMuZW5jb2RlZFNpemUgPSBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDg7Ci0KLSAgVXNiRGV2
aWNlX1NldENvbmZpZ3VyYXRpb25fUGFyYW1zLmRlY29kZSA9IGZ1bmN0aW9uKGRlY29kZXIpIHsK
LSAgICB2YXIgcGFja2VkOwotICAgIHZhciB2YWwgPSBuZXcgVXNiRGV2aWNlX1NldENvbmZpZ3Vy
YXRpb25fUGFyYW1zKCk7Ci0gICAgdmFyIG51bWJlck9mQnl0ZXMgPSBkZWNvZGVyLnJlYWRVaW50
MzIoKTsKLSAgICB2YXIgdmVyc2lvbiA9IGRlY29kZXIucmVhZFVpbnQzMigpOwotICAgIHZhbC52
YWx1ZSA9IGRlY29kZXIuZGVjb2RlU3RydWN0KGNvZGVjLlVpbnQ4KTsKLSAgICBkZWNvZGVyLnNr
aXAoMSk7Ci0gICAgZGVjb2Rlci5za2lwKDEpOwotICAgIGRlY29kZXIuc2tpcCgxKTsKLSAgICBk
ZWNvZGVyLnNraXAoMSk7Ci0gICAgZGVjb2Rlci5za2lwKDEpOwotICAgIGRlY29kZXIuc2tpcCgx
KTsKLSAgICBkZWNvZGVyLnNraXAoMSk7Ci0gICAgcmV0dXJuIHZhbDsKLSAgfTsKLQotICBVc2JE
ZXZpY2VfU2V0Q29uZmlndXJhdGlvbl9QYXJhbXMuZW5jb2RlID0gZnVuY3Rpb24oZW5jb2Rlciwg
dmFsKSB7Ci0gICAgdmFyIHBhY2tlZDsKLSAgICBlbmNvZGVyLndyaXRlVWludDMyKFVzYkRldmlj
ZV9TZXRDb25maWd1cmF0aW9uX1BhcmFtcy5lbmNvZGVkU2l6ZSk7Ci0gICAgZW5jb2Rlci53cml0
ZVVpbnQzMigwKTsKLSAgICBlbmNvZGVyLmVuY29kZVN0cnVjdChjb2RlYy5VaW50OCwgdmFsLnZh
bHVlKTsKLSAgICBlbmNvZGVyLnNraXAoMSk7Ci0gICAgZW5jb2Rlci5za2lwKDEpOwotICAgIGVu
Y29kZXIuc2tpcCgxKTsKLSAgICBlbmNvZGVyLnNraXAoMSk7Ci0gICAgZW5jb2Rlci5za2lwKDEp
OwotICAgIGVuY29kZXIuc2tpcCgxKTsKLSAgICBlbmNvZGVyLnNraXAoMSk7Ci0gIH07Ci0gIGZ1
bmN0aW9uIFVzYkRldmljZV9TZXRDb25maWd1cmF0aW9uX1Jlc3BvbnNlUGFyYW1zKHZhbHVlcykg
ewotICAgIHRoaXMuaW5pdERlZmF1bHRzXygpOwotICAgIHRoaXMuaW5pdEZpZWxkc18odmFsdWVz
KTsKLSAgfQotCi0KLSAgVXNiRGV2aWNlX1NldENvbmZpZ3VyYXRpb25fUmVzcG9uc2VQYXJhbXMu
cHJvdG90eXBlLmluaXREZWZhdWx0c18gPSBmdW5jdGlvbigpIHsKLSAgICB0aGlzLnN1Y2Nlc3Mg
PSBmYWxzZTsKLSAgfTsKLSAgVXNiRGV2aWNlX1NldENvbmZpZ3VyYXRpb25fUmVzcG9uc2VQYXJh
bXMucHJvdG90eXBlLmluaXRGaWVsZHNfID0gZnVuY3Rpb24oZmllbGRzKSB7Ci0gICAgZm9yKHZh
ciBmaWVsZCBpbiBmaWVsZHMpIHsKLSAgICAgICAgaWYgKHRoaXMuaGFzT3duUHJvcGVydHkoZmll
bGQpKQotICAgICAgICAgIHRoaXNbZmllbGRdID0gZmllbGRzW2ZpZWxkXTsKLSAgICB9Ci0gIH07
Ci0KLSAgVXNiRGV2aWNlX1NldENvbmZpZ3VyYXRpb25fUmVzcG9uc2VQYXJhbXMudmFsaWRhdGUg
PSBmdW5jdGlvbihtZXNzYWdlVmFsaWRhdG9yLCBvZmZzZXQpIHsKLSAgICB2YXIgZXJyOwotICAg
IGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RIZWFkZXIob2Zmc2V0LCBjb2Rl
Yy5rU3RydWN0SGVhZGVyU2l6ZSk7Ci0gICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRp
b25FcnJvci5OT05FKQotICAgICAgICByZXR1cm4gZXJyOwotCi0gICAgdmFyIGtWZXJzaW9uU2l6
ZXMgPSBbCi0gICAgICB7dmVyc2lvbjogMCwgbnVtQnl0ZXM6IDE2fQotICAgIF07Ci0gICAgZXJy
ID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdFZlcnNpb24ob2Zmc2V0LCBrVmVyc2lv
blNpemVzKTsKLSAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUp
Ci0gICAgICAgIHJldHVybiBlcnI7Ci0KLQotICAgIHJldHVybiB2YWxpZGF0b3IudmFsaWRhdGlv
bkVycm9yLk5PTkU7Ci0gIH07Ci0KLSAgVXNiRGV2aWNlX1NldENvbmZpZ3VyYXRpb25fUmVzcG9u
c2VQYXJhbXMuZW5jb2RlZFNpemUgPSBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDg7Ci0KLSAg
VXNiRGV2aWNlX1NldENvbmZpZ3VyYXRpb25fUmVzcG9uc2VQYXJhbXMuZGVjb2RlID0gZnVuY3Rp
b24oZGVjb2RlcikgewotICAgIHZhciBwYWNrZWQ7Ci0gICAgdmFyIHZhbCA9IG5ldyBVc2JEZXZp
Y2VfU2V0Q29uZmlndXJhdGlvbl9SZXNwb25zZVBhcmFtcygpOwotICAgIHZhciBudW1iZXJPZkJ5
dGVzID0gZGVjb2Rlci5yZWFkVWludDMyKCk7Ci0gICAgdmFyIHZlcnNpb24gPSBkZWNvZGVyLnJl
YWRVaW50MzIoKTsKLSAgICBwYWNrZWQgPSBkZWNvZGVyLnJlYWRVaW50OCgpOwotICAgIHZhbC5z
dWNjZXNzID0gKHBhY2tlZCA+PiAwKSAmIDEgPyB0cnVlIDogZmFsc2U7Ci0gICAgZGVjb2Rlci5z
a2lwKDEpOwotICAgIGRlY29kZXIuc2tpcCgxKTsKLSAgICBkZWNvZGVyLnNraXAoMSk7Ci0gICAg
ZGVjb2Rlci5za2lwKDEpOwotICAgIGRlY29kZXIuc2tpcCgxKTsKLSAgICBkZWNvZGVyLnNraXAo
MSk7Ci0gICAgZGVjb2Rlci5za2lwKDEpOwotICAgIHJldHVybiB2YWw7Ci0gIH07Ci0KLSAgVXNi
RGV2aWNlX1NldENvbmZpZ3VyYXRpb25fUmVzcG9uc2VQYXJhbXMuZW5jb2RlID0gZnVuY3Rpb24o
ZW5jb2RlciwgdmFsKSB7Ci0gICAgdmFyIHBhY2tlZDsKLSAgICBlbmNvZGVyLndyaXRlVWludDMy
KFVzYkRldmljZV9TZXRDb25maWd1cmF0aW9uX1Jlc3BvbnNlUGFyYW1zLmVuY29kZWRTaXplKTsK
LSAgICBlbmNvZGVyLndyaXRlVWludDMyKDApOwotICAgIHBhY2tlZCA9IDA7Ci0gICAgcGFja2Vk
IHw9ICh2YWwuc3VjY2VzcyAmIDEpIDw8IDAKLSAgICBlbmNvZGVyLndyaXRlVWludDgocGFja2Vk
KTsKLSAgICBlbmNvZGVyLnNraXAoMSk7Ci0gICAgZW5jb2Rlci5za2lwKDEpOwotICAgIGVuY29k
ZXIuc2tpcCgxKTsKLSAgICBlbmNvZGVyLnNraXAoMSk7Ci0gICAgZW5jb2Rlci5za2lwKDEpOwot
ICAgIGVuY29kZXIuc2tpcCgxKTsKLSAgICBlbmNvZGVyLnNraXAoMSk7Ci0gIH07Ci0gIGZ1bmN0
aW9uIFVzYkRldmljZV9DbGFpbUludGVyZmFjZV9QYXJhbXModmFsdWVzKSB7Ci0gICAgdGhpcy5p
bml0RGVmYXVsdHNfKCk7Ci0gICAgdGhpcy5pbml0RmllbGRzXyh2YWx1ZXMpOwotICB9Ci0KLQot
ICBVc2JEZXZpY2VfQ2xhaW1JbnRlcmZhY2VfUGFyYW1zLnByb3RvdHlwZS5pbml0RGVmYXVsdHNf
ID0gZnVuY3Rpb24oKSB7Ci0gICAgdGhpcy5pbnRlcmZhY2VOdW1iZXIgPSAwOwotICB9OwotICBV
c2JEZXZpY2VfQ2xhaW1JbnRlcmZhY2VfUGFyYW1zLnByb3RvdHlwZS5pbml0RmllbGRzXyA9IGZ1
bmN0aW9uKGZpZWxkcykgewotICAgIGZvcih2YXIgZmllbGQgaW4gZmllbGRzKSB7Ci0gICAgICAg
IGlmICh0aGlzLmhhc093blByb3BlcnR5KGZpZWxkKSkKLSAgICAgICAgICB0aGlzW2ZpZWxkXSA9
IGZpZWxkc1tmaWVsZF07Ci0gICAgfQotICB9OwotCi0gIFVzYkRldmljZV9DbGFpbUludGVyZmFj
ZV9QYXJhbXMudmFsaWRhdGUgPSBmdW5jdGlvbihtZXNzYWdlVmFsaWRhdG9yLCBvZmZzZXQpIHsK
LSAgICB2YXIgZXJyOwotICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RI
ZWFkZXIob2Zmc2V0LCBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSk7Ci0gICAgaWYgKGVyciAhPT0g
dmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQotICAgICAgICByZXR1cm4gZXJyOwotCi0g
ICAgdmFyIGtWZXJzaW9uU2l6ZXMgPSBbCi0gICAgICB7dmVyc2lvbjogMCwgbnVtQnl0ZXM6IDE2
fQotICAgIF07Ci0gICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdFZlcnNp
b24ob2Zmc2V0LCBrVmVyc2lvblNpemVzKTsKLSAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFs
aWRhdGlvbkVycm9yLk5PTkUpCi0gICAgICAgIHJldHVybiBlcnI7Ci0KLQotICAgIHJldHVybiB2
YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkU7Ci0gIH07Ci0KLSAgVXNiRGV2aWNlX0NsYWlt
SW50ZXJmYWNlX1BhcmFtcy5lbmNvZGVkU2l6ZSA9IGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsg
ODsKLQotICBVc2JEZXZpY2VfQ2xhaW1JbnRlcmZhY2VfUGFyYW1zLmRlY29kZSA9IGZ1bmN0aW9u
KGRlY29kZXIpIHsKLSAgICB2YXIgcGFja2VkOwotICAgIHZhciB2YWwgPSBuZXcgVXNiRGV2aWNl
X0NsYWltSW50ZXJmYWNlX1BhcmFtcygpOwotICAgIHZhciBudW1iZXJPZkJ5dGVzID0gZGVjb2Rl
ci5yZWFkVWludDMyKCk7Ci0gICAgdmFyIHZlcnNpb24gPSBkZWNvZGVyLnJlYWRVaW50MzIoKTsK
LSAgICB2YWwuaW50ZXJmYWNlTnVtYmVyID0gZGVjb2Rlci5kZWNvZGVTdHJ1Y3QoY29kZWMuVWlu
dDgpOwotICAgIGRlY29kZXIuc2tpcCgxKTsKLSAgICBkZWNvZGVyLnNraXAoMSk7Ci0gICAgZGVj
b2Rlci5za2lwKDEpOwotICAgIGRlY29kZXIuc2tpcCgxKTsKLSAgICBkZWNvZGVyLnNraXAoMSk7
Ci0gICAgZGVjb2Rlci5za2lwKDEpOwotICAgIGRlY29kZXIuc2tpcCgxKTsKLSAgICByZXR1cm4g
dmFsOwotICB9OwotCi0gIFVzYkRldmljZV9DbGFpbUludGVyZmFjZV9QYXJhbXMuZW5jb2RlID0g
ZnVuY3Rpb24oZW5jb2RlciwgdmFsKSB7Ci0gICAgdmFyIHBhY2tlZDsKLSAgICBlbmNvZGVyLndy
aXRlVWludDMyKFVzYkRldmljZV9DbGFpbUludGVyZmFjZV9QYXJhbXMuZW5jb2RlZFNpemUpOwot
ICAgIGVuY29kZXIud3JpdGVVaW50MzIoMCk7Ci0gICAgZW5jb2Rlci5lbmNvZGVTdHJ1Y3QoY29k
ZWMuVWludDgsIHZhbC5pbnRlcmZhY2VOdW1iZXIpOwotICAgIGVuY29kZXIuc2tpcCgxKTsKLSAg
ICBlbmNvZGVyLnNraXAoMSk7Ci0gICAgZW5jb2Rlci5za2lwKDEpOwotICAgIGVuY29kZXIuc2tp
cCgxKTsKLSAgICBlbmNvZGVyLnNraXAoMSk7Ci0gICAgZW5jb2Rlci5za2lwKDEpOwotICAgIGVu
Y29kZXIuc2tpcCgxKTsKLSAgfTsKLSAgZnVuY3Rpb24gVXNiRGV2aWNlX0NsYWltSW50ZXJmYWNl
X1Jlc3BvbnNlUGFyYW1zKHZhbHVlcykgewotICAgIHRoaXMuaW5pdERlZmF1bHRzXygpOwotICAg
IHRoaXMuaW5pdEZpZWxkc18odmFsdWVzKTsKLSAgfQotCi0KLSAgVXNiRGV2aWNlX0NsYWltSW50
ZXJmYWNlX1Jlc3BvbnNlUGFyYW1zLnByb3RvdHlwZS5pbml0RGVmYXVsdHNfID0gZnVuY3Rpb24o
KSB7Ci0gICAgdGhpcy5zdWNjZXNzID0gZmFsc2U7Ci0gIH07Ci0gIFVzYkRldmljZV9DbGFpbUlu
dGVyZmFjZV9SZXNwb25zZVBhcmFtcy5wcm90b3R5cGUuaW5pdEZpZWxkc18gPSBmdW5jdGlvbihm
aWVsZHMpIHsKLSAgICBmb3IodmFyIGZpZWxkIGluIGZpZWxkcykgewotICAgICAgICBpZiAodGhp
cy5oYXNPd25Qcm9wZXJ0eShmaWVsZCkpCi0gICAgICAgICAgdGhpc1tmaWVsZF0gPSBmaWVsZHNb
ZmllbGRdOwotICAgIH0KLSAgfTsKLQotICBVc2JEZXZpY2VfQ2xhaW1JbnRlcmZhY2VfUmVzcG9u
c2VQYXJhbXMudmFsaWRhdGUgPSBmdW5jdGlvbihtZXNzYWdlVmFsaWRhdG9yLCBvZmZzZXQpIHsK
LSAgICB2YXIgZXJyOwotICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RI
ZWFkZXIob2Zmc2V0LCBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSk7Ci0gICAgaWYgKGVyciAhPT0g
dmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQotICAgICAgICByZXR1cm4gZXJyOwotCi0g
ICAgdmFyIGtWZXJzaW9uU2l6ZXMgPSBbCi0gICAgICB7dmVyc2lvbjogMCwgbnVtQnl0ZXM6IDE2
fQotICAgIF07Ci0gICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdFZlcnNp
b24ob2Zmc2V0LCBrVmVyc2lvblNpemVzKTsKLSAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFs
aWRhdGlvbkVycm9yLk5PTkUpCi0gICAgICAgIHJldHVybiBlcnI7Ci0KLQotICAgIHJldHVybiB2
YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkU7Ci0gIH07Ci0KLSAgVXNiRGV2aWNlX0NsYWlt
SW50ZXJmYWNlX1Jlc3BvbnNlUGFyYW1zLmVuY29kZWRTaXplID0gY29kZWMua1N0cnVjdEhlYWRl
clNpemUgKyA4OwotCi0gIFVzYkRldmljZV9DbGFpbUludGVyZmFjZV9SZXNwb25zZVBhcmFtcy5k
ZWNvZGUgPSBmdW5jdGlvbihkZWNvZGVyKSB7Ci0gICAgdmFyIHBhY2tlZDsKLSAgICB2YXIgdmFs
ID0gbmV3IFVzYkRldmljZV9DbGFpbUludGVyZmFjZV9SZXNwb25zZVBhcmFtcygpOwotICAgIHZh
ciBudW1iZXJPZkJ5dGVzID0gZGVjb2Rlci5yZWFkVWludDMyKCk7Ci0gICAgdmFyIHZlcnNpb24g
PSBkZWNvZGVyLnJlYWRVaW50MzIoKTsKLSAgICBwYWNrZWQgPSBkZWNvZGVyLnJlYWRVaW50OCgp
OwotICAgIHZhbC5zdWNjZXNzID0gKHBhY2tlZCA+PiAwKSAmIDEgPyB0cnVlIDogZmFsc2U7Ci0g
ICAgZGVjb2Rlci5za2lwKDEpOwotICAgIGRlY29kZXIuc2tpcCgxKTsKLSAgICBkZWNvZGVyLnNr
aXAoMSk7Ci0gICAgZGVjb2Rlci5za2lwKDEpOwotICAgIGRlY29kZXIuc2tpcCgxKTsKLSAgICBk
ZWNvZGVyLnNraXAoMSk7Ci0gICAgZGVjb2Rlci5za2lwKDEpOwotICAgIHJldHVybiB2YWw7Ci0g
IH07Ci0KLSAgVXNiRGV2aWNlX0NsYWltSW50ZXJmYWNlX1Jlc3BvbnNlUGFyYW1zLmVuY29kZSA9
IGZ1bmN0aW9uKGVuY29kZXIsIHZhbCkgewotICAgIHZhciBwYWNrZWQ7Ci0gICAgZW5jb2Rlci53
cml0ZVVpbnQzMihVc2JEZXZpY2VfQ2xhaW1JbnRlcmZhY2VfUmVzcG9uc2VQYXJhbXMuZW5jb2Rl
ZFNpemUpOwotICAgIGVuY29kZXIud3JpdGVVaW50MzIoMCk7Ci0gICAgcGFja2VkID0gMDsKLSAg
ICBwYWNrZWQgfD0gKHZhbC5zdWNjZXNzICYgMSkgPDwgMAotICAgIGVuY29kZXIud3JpdGVVaW50
OChwYWNrZWQpOwotICAgIGVuY29kZXIuc2tpcCgxKTsKLSAgICBlbmNvZGVyLnNraXAoMSk7Ci0g
ICAgZW5jb2Rlci5za2lwKDEpOwotICAgIGVuY29kZXIuc2tpcCgxKTsKLSAgICBlbmNvZGVyLnNr
aXAoMSk7Ci0gICAgZW5jb2Rlci5za2lwKDEpOwotICAgIGVuY29kZXIuc2tpcCgxKTsKLSAgfTsK
LSAgZnVuY3Rpb24gVXNiRGV2aWNlX1JlbGVhc2VJbnRlcmZhY2VfUGFyYW1zKHZhbHVlcykgewot
ICAgIHRoaXMuaW5pdERlZmF1bHRzXygpOwotICAgIHRoaXMuaW5pdEZpZWxkc18odmFsdWVzKTsK
LSAgfQotCi0KLSAgVXNiRGV2aWNlX1JlbGVhc2VJbnRlcmZhY2VfUGFyYW1zLnByb3RvdHlwZS5p
bml0RGVmYXVsdHNfID0gZnVuY3Rpb24oKSB7Ci0gICAgdGhpcy5pbnRlcmZhY2VOdW1iZXIgPSAw
OwotICB9OwotICBVc2JEZXZpY2VfUmVsZWFzZUludGVyZmFjZV9QYXJhbXMucHJvdG90eXBlLmlu
aXRGaWVsZHNfID0gZnVuY3Rpb24oZmllbGRzKSB7Ci0gICAgZm9yKHZhciBmaWVsZCBpbiBmaWVs
ZHMpIHsKLSAgICAgICAgaWYgKHRoaXMuaGFzT3duUHJvcGVydHkoZmllbGQpKQotICAgICAgICAg
IHRoaXNbZmllbGRdID0gZmllbGRzW2ZpZWxkXTsKLSAgICB9Ci0gIH07Ci0KLSAgVXNiRGV2aWNl
X1JlbGVhc2VJbnRlcmZhY2VfUGFyYW1zLnZhbGlkYXRlID0gZnVuY3Rpb24obWVzc2FnZVZhbGlk
YXRvciwgb2Zmc2V0KSB7Ci0gICAgdmFyIGVycjsKLSAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9y
LnZhbGlkYXRlU3RydWN0SGVhZGVyKG9mZnNldCwgY29kZWMua1N0cnVjdEhlYWRlclNpemUpOwot
ICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKLSAgICAgICAg
cmV0dXJuIGVycjsKLQotICAgIHZhciBrVmVyc2lvblNpemVzID0gWwotICAgICAge3ZlcnNpb246
IDAsIG51bUJ5dGVzOiAxNn0KLSAgICBdOwotICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFs
aWRhdGVTdHJ1Y3RWZXJzaW9uKG9mZnNldCwga1ZlcnNpb25TaXplcyk7Ci0gICAgaWYgKGVyciAh
PT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQotICAgICAgICByZXR1cm4gZXJyOwot
Ci0KLSAgICByZXR1cm4gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FOwotICB9OwotCi0g
IFVzYkRldmljZV9SZWxlYXNlSW50ZXJmYWNlX1BhcmFtcy5lbmNvZGVkU2l6ZSA9IGNvZGVjLmtT
dHJ1Y3RIZWFkZXJTaXplICsgODsKLQotICBVc2JEZXZpY2VfUmVsZWFzZUludGVyZmFjZV9QYXJh
bXMuZGVjb2RlID0gZnVuY3Rpb24oZGVjb2RlcikgewotICAgIHZhciBwYWNrZWQ7Ci0gICAgdmFy
IHZhbCA9IG5ldyBVc2JEZXZpY2VfUmVsZWFzZUludGVyZmFjZV9QYXJhbXMoKTsKLSAgICB2YXIg
bnVtYmVyT2ZCeXRlcyA9IGRlY29kZXIucmVhZFVpbnQzMigpOwotICAgIHZhciB2ZXJzaW9uID0g
ZGVjb2Rlci5yZWFkVWludDMyKCk7Ci0gICAgdmFsLmludGVyZmFjZU51bWJlciA9IGRlY29kZXIu
ZGVjb2RlU3RydWN0KGNvZGVjLlVpbnQ4KTsKLSAgICBkZWNvZGVyLnNraXAoMSk7Ci0gICAgZGVj
b2Rlci5za2lwKDEpOwotICAgIGRlY29kZXIuc2tpcCgxKTsKLSAgICBkZWNvZGVyLnNraXAoMSk7
Ci0gICAgZGVjb2Rlci5za2lwKDEpOwotICAgIGRlY29kZXIuc2tpcCgxKTsKLSAgICBkZWNvZGVy
LnNraXAoMSk7Ci0gICAgcmV0dXJuIHZhbDsKLSAgfTsKLQotICBVc2JEZXZpY2VfUmVsZWFzZUlu
dGVyZmFjZV9QYXJhbXMuZW5jb2RlID0gZnVuY3Rpb24oZW5jb2RlciwgdmFsKSB7Ci0gICAgdmFy
IHBhY2tlZDsKLSAgICBlbmNvZGVyLndyaXRlVWludDMyKFVzYkRldmljZV9SZWxlYXNlSW50ZXJm
YWNlX1BhcmFtcy5lbmNvZGVkU2l6ZSk7Ci0gICAgZW5jb2Rlci53cml0ZVVpbnQzMigwKTsKLSAg
ICBlbmNvZGVyLmVuY29kZVN0cnVjdChjb2RlYy5VaW50OCwgdmFsLmludGVyZmFjZU51bWJlcik7
Ci0gICAgZW5jb2Rlci5za2lwKDEpOwotICAgIGVuY29kZXIuc2tpcCgxKTsKLSAgICBlbmNvZGVy
LnNraXAoMSk7Ci0gICAgZW5jb2Rlci5za2lwKDEpOwotICAgIGVuY29kZXIuc2tpcCgxKTsKLSAg
ICBlbmNvZGVyLnNraXAoMSk7Ci0gICAgZW5jb2Rlci5za2lwKDEpOwotICB9OwotICBmdW5jdGlv
biBVc2JEZXZpY2VfUmVsZWFzZUludGVyZmFjZV9SZXNwb25zZVBhcmFtcyh2YWx1ZXMpIHsKLSAg
ICB0aGlzLmluaXREZWZhdWx0c18oKTsKLSAgICB0aGlzLmluaXRGaWVsZHNfKHZhbHVlcyk7Ci0g
IH0KLQotCi0gIFVzYkRldmljZV9SZWxlYXNlSW50ZXJmYWNlX1Jlc3BvbnNlUGFyYW1zLnByb3Rv
dHlwZS5pbml0RGVmYXVsdHNfID0gZnVuY3Rpb24oKSB7Ci0gICAgdGhpcy5zdWNjZXNzID0gZmFs
c2U7Ci0gIH07Ci0gIFVzYkRldmljZV9SZWxlYXNlSW50ZXJmYWNlX1Jlc3BvbnNlUGFyYW1zLnBy
b3RvdHlwZS5pbml0RmllbGRzXyA9IGZ1bmN0aW9uKGZpZWxkcykgewotICAgIGZvcih2YXIgZmll
bGQgaW4gZmllbGRzKSB7Ci0gICAgICAgIGlmICh0aGlzLmhhc093blByb3BlcnR5KGZpZWxkKSkK
LSAgICAgICAgICB0aGlzW2ZpZWxkXSA9IGZpZWxkc1tmaWVsZF07Ci0gICAgfQotICB9OwotCi0g
IFVzYkRldmljZV9SZWxlYXNlSW50ZXJmYWNlX1Jlc3BvbnNlUGFyYW1zLnZhbGlkYXRlID0gZnVu
Y3Rpb24obWVzc2FnZVZhbGlkYXRvciwgb2Zmc2V0KSB7Ci0gICAgdmFyIGVycjsKLSAgICBlcnIg
PSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0SGVhZGVyKG9mZnNldCwgY29kZWMua1N0
cnVjdEhlYWRlclNpemUpOwotICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJy
b3IuTk9ORSkKLSAgICAgICAgcmV0dXJuIGVycjsKLQotICAgIHZhciBrVmVyc2lvblNpemVzID0g
WwotICAgICAge3ZlcnNpb246IDAsIG51bUJ5dGVzOiAxNn0KLSAgICBdOwotICAgIGVyciA9IG1l
c3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RWZXJzaW9uKG9mZnNldCwga1ZlcnNpb25TaXpl
cyk7Ci0gICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQotICAg
ICAgICByZXR1cm4gZXJyOwotCi0KLSAgICByZXR1cm4gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJv
ci5OT05FOwotICB9OwotCi0gIFVzYkRldmljZV9SZWxlYXNlSW50ZXJmYWNlX1Jlc3BvbnNlUGFy
YW1zLmVuY29kZWRTaXplID0gY29kZWMua1N0cnVjdEhlYWRlclNpemUgKyA4OwotCi0gIFVzYkRl
dmljZV9SZWxlYXNlSW50ZXJmYWNlX1Jlc3BvbnNlUGFyYW1zLmRlY29kZSA9IGZ1bmN0aW9uKGRl
Y29kZXIpIHsKLSAgICB2YXIgcGFja2VkOwotICAgIHZhciB2YWwgPSBuZXcgVXNiRGV2aWNlX1Jl
bGVhc2VJbnRlcmZhY2VfUmVzcG9uc2VQYXJhbXMoKTsKLSAgICB2YXIgbnVtYmVyT2ZCeXRlcyA9
IGRlY29kZXIucmVhZFVpbnQzMigpOwotICAgIHZhciB2ZXJzaW9uID0gZGVjb2Rlci5yZWFkVWlu
dDMyKCk7Ci0gICAgcGFja2VkID0gZGVjb2Rlci5yZWFkVWludDgoKTsKLSAgICB2YWwuc3VjY2Vz
cyA9IChwYWNrZWQgPj4gMCkgJiAxID8gdHJ1ZSA6IGZhbHNlOwotICAgIGRlY29kZXIuc2tpcCgx
KTsKLSAgICBkZWNvZGVyLnNraXAoMSk7Ci0gICAgZGVjb2Rlci5za2lwKDEpOwotICAgIGRlY29k
ZXIuc2tpcCgxKTsKLSAgICBkZWNvZGVyLnNraXAoMSk7Ci0gICAgZGVjb2Rlci5za2lwKDEpOwot
ICAgIGRlY29kZXIuc2tpcCgxKTsKLSAgICByZXR1cm4gdmFsOwotICB9OwotCi0gIFVzYkRldmlj
ZV9SZWxlYXNlSW50ZXJmYWNlX1Jlc3BvbnNlUGFyYW1zLmVuY29kZSA9IGZ1bmN0aW9uKGVuY29k
ZXIsIHZhbCkgewotICAgIHZhciBwYWNrZWQ7Ci0gICAgZW5jb2Rlci53cml0ZVVpbnQzMihVc2JE
ZXZpY2VfUmVsZWFzZUludGVyZmFjZV9SZXNwb25zZVBhcmFtcy5lbmNvZGVkU2l6ZSk7Ci0gICAg
ZW5jb2Rlci53cml0ZVVpbnQzMigwKTsKLSAgICBwYWNrZWQgPSAwOwotICAgIHBhY2tlZCB8PSAo
dmFsLnN1Y2Nlc3MgJiAxKSA8PCAwCi0gICAgZW5jb2Rlci53cml0ZVVpbnQ4KHBhY2tlZCk7Ci0g
ICAgZW5jb2Rlci5za2lwKDEpOwotICAgIGVuY29kZXIuc2tpcCgxKTsKLSAgICBlbmNvZGVyLnNr
aXAoMSk7Ci0gICAgZW5jb2Rlci5za2lwKDEpOwotICAgIGVuY29kZXIuc2tpcCgxKTsKLSAgICBl
bmNvZGVyLnNraXAoMSk7Ci0gICAgZW5jb2Rlci5za2lwKDEpOwotICB9OwotICBmdW5jdGlvbiBV
c2JEZXZpY2VfU2V0SW50ZXJmYWNlQWx0ZXJuYXRlU2V0dGluZ19QYXJhbXModmFsdWVzKSB7Ci0g
ICAgdGhpcy5pbml0RGVmYXVsdHNfKCk7Ci0gICAgdGhpcy5pbml0RmllbGRzXyh2YWx1ZXMpOwot
ICB9Ci0KLQotICBVc2JEZXZpY2VfU2V0SW50ZXJmYWNlQWx0ZXJuYXRlU2V0dGluZ19QYXJhbXMu
cHJvdG90eXBlLmluaXREZWZhdWx0c18gPSBmdW5jdGlvbigpIHsKLSAgICB0aGlzLmludGVyZmFj
ZU51bWJlciA9IDA7Ci0gICAgdGhpcy5hbHRlcm5hdGVTZXR0aW5nID0gMDsKLSAgfTsKLSAgVXNi
RGV2aWNlX1NldEludGVyZmFjZUFsdGVybmF0ZVNldHRpbmdfUGFyYW1zLnByb3RvdHlwZS5pbml0
RmllbGRzXyA9IGZ1bmN0aW9uKGZpZWxkcykgewotICAgIGZvcih2YXIgZmllbGQgaW4gZmllbGRz
KSB7Ci0gICAgICAgIGlmICh0aGlzLmhhc093blByb3BlcnR5KGZpZWxkKSkKLSAgICAgICAgICB0
aGlzW2ZpZWxkXSA9IGZpZWxkc1tmaWVsZF07Ci0gICAgfQotICB9OwotCi0gIFVzYkRldmljZV9T
ZXRJbnRlcmZhY2VBbHRlcm5hdGVTZXR0aW5nX1BhcmFtcy52YWxpZGF0ZSA9IGZ1bmN0aW9uKG1l
c3NhZ2VWYWxpZGF0b3IsIG9mZnNldCkgewotICAgIHZhciBlcnI7Ci0gICAgZXJyID0gbWVzc2Fn
ZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdEhlYWRlcihvZmZzZXQsIGNvZGVjLmtTdHJ1Y3RIZWFk
ZXJTaXplKTsKLSAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUp
Ci0gICAgICAgIHJldHVybiBlcnI7Ci0KLSAgICB2YXIga1ZlcnNpb25TaXplcyA9IFsKLSAgICAg
IHt2ZXJzaW9uOiAwLCBudW1CeXRlczogMTZ9Ci0gICAgXTsKLSAgICBlcnIgPSBtZXNzYWdlVmFs
aWRhdG9yLnZhbGlkYXRlU3RydWN0VmVyc2lvbihvZmZzZXQsIGtWZXJzaW9uU2l6ZXMpOwotICAg
IGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKLSAgICAgICAgcmV0
dXJuIGVycjsKLQotCi0KLSAgICByZXR1cm4gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05F
OwotICB9OwotCi0gIFVzYkRldmljZV9TZXRJbnRlcmZhY2VBbHRlcm5hdGVTZXR0aW5nX1BhcmFt
cy5lbmNvZGVkU2l6ZSA9IGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgODsKLQotICBVc2JEZXZp
Y2VfU2V0SW50ZXJmYWNlQWx0ZXJuYXRlU2V0dGluZ19QYXJhbXMuZGVjb2RlID0gZnVuY3Rpb24o
ZGVjb2RlcikgewotICAgIHZhciBwYWNrZWQ7Ci0gICAgdmFyIHZhbCA9IG5ldyBVc2JEZXZpY2Vf
U2V0SW50ZXJmYWNlQWx0ZXJuYXRlU2V0dGluZ19QYXJhbXMoKTsKLSAgICB2YXIgbnVtYmVyT2ZC
eXRlcyA9IGRlY29kZXIucmVhZFVpbnQzMigpOwotICAgIHZhciB2ZXJzaW9uID0gZGVjb2Rlci5y
ZWFkVWludDMyKCk7Ci0gICAgdmFsLmludGVyZmFjZU51bWJlciA9IGRlY29kZXIuZGVjb2RlU3Ry
dWN0KGNvZGVjLlVpbnQ4KTsKLSAgICB2YWwuYWx0ZXJuYXRlU2V0dGluZyA9IGRlY29kZXIuZGVj
b2RlU3RydWN0KGNvZGVjLlVpbnQ4KTsKLSAgICBkZWNvZGVyLnNraXAoMSk7Ci0gICAgZGVjb2Rl
ci5za2lwKDEpOwotICAgIGRlY29kZXIuc2tpcCgxKTsKLSAgICBkZWNvZGVyLnNraXAoMSk7Ci0g
ICAgZGVjb2Rlci5za2lwKDEpOwotICAgIGRlY29kZXIuc2tpcCgxKTsKLSAgICByZXR1cm4gdmFs
OwotICB9OwotCi0gIFVzYkRldmljZV9TZXRJbnRlcmZhY2VBbHRlcm5hdGVTZXR0aW5nX1BhcmFt
cy5lbmNvZGUgPSBmdW5jdGlvbihlbmNvZGVyLCB2YWwpIHsKLSAgICB2YXIgcGFja2VkOwotICAg
IGVuY29kZXIud3JpdGVVaW50MzIoVXNiRGV2aWNlX1NldEludGVyZmFjZUFsdGVybmF0ZVNldHRp
bmdfUGFyYW1zLmVuY29kZWRTaXplKTsKLSAgICBlbmNvZGVyLndyaXRlVWludDMyKDApOwotICAg
IGVuY29kZXIuZW5jb2RlU3RydWN0KGNvZGVjLlVpbnQ4LCB2YWwuaW50ZXJmYWNlTnVtYmVyKTsK
LSAgICBlbmNvZGVyLmVuY29kZVN0cnVjdChjb2RlYy5VaW50OCwgdmFsLmFsdGVybmF0ZVNldHRp
bmcpOwotICAgIGVuY29kZXIuc2tpcCgxKTsKLSAgICBlbmNvZGVyLnNraXAoMSk7Ci0gICAgZW5j
b2Rlci5za2lwKDEpOwotICAgIGVuY29kZXIuc2tpcCgxKTsKLSAgICBlbmNvZGVyLnNraXAoMSk7
Ci0gICAgZW5jb2Rlci5za2lwKDEpOwotICB9OwotICBmdW5jdGlvbiBVc2JEZXZpY2VfU2V0SW50
ZXJmYWNlQWx0ZXJuYXRlU2V0dGluZ19SZXNwb25zZVBhcmFtcyh2YWx1ZXMpIHsKLSAgICB0aGlz
LmluaXREZWZhdWx0c18oKTsKLSAgICB0aGlzLmluaXRGaWVsZHNfKHZhbHVlcyk7Ci0gIH0KLQot
Ci0gIFVzYkRldmljZV9TZXRJbnRlcmZhY2VBbHRlcm5hdGVTZXR0aW5nX1Jlc3BvbnNlUGFyYW1z
LnByb3RvdHlwZS5pbml0RGVmYXVsdHNfID0gZnVuY3Rpb24oKSB7Ci0gICAgdGhpcy5zdWNjZXNz
ID0gZmFsc2U7Ci0gIH07Ci0gIFVzYkRldmljZV9TZXRJbnRlcmZhY2VBbHRlcm5hdGVTZXR0aW5n
X1Jlc3BvbnNlUGFyYW1zLnByb3RvdHlwZS5pbml0RmllbGRzXyA9IGZ1bmN0aW9uKGZpZWxkcykg
ewotICAgIGZvcih2YXIgZmllbGQgaW4gZmllbGRzKSB7Ci0gICAgICAgIGlmICh0aGlzLmhhc093
blByb3BlcnR5KGZpZWxkKSkKLSAgICAgICAgICB0aGlzW2ZpZWxkXSA9IGZpZWxkc1tmaWVsZF07
Ci0gICAgfQotICB9OwotCi0gIFVzYkRldmljZV9TZXRJbnRlcmZhY2VBbHRlcm5hdGVTZXR0aW5n
X1Jlc3BvbnNlUGFyYW1zLnZhbGlkYXRlID0gZnVuY3Rpb24obWVzc2FnZVZhbGlkYXRvciwgb2Zm
c2V0KSB7Ci0gICAgdmFyIGVycjsKLSAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRl
U3RydWN0SGVhZGVyKG9mZnNldCwgY29kZWMua1N0cnVjdEhlYWRlclNpemUpOwotICAgIGlmIChl
cnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKLSAgICAgICAgcmV0dXJuIGVy
cjsKLQotICAgIHZhciBrVmVyc2lvblNpemVzID0gWwotICAgICAge3ZlcnNpb246IDAsIG51bUJ5
dGVzOiAxNn0KLSAgICBdOwotICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1
Y3RWZXJzaW9uKG9mZnNldCwga1ZlcnNpb25TaXplcyk7Ci0gICAgaWYgKGVyciAhPT0gdmFsaWRh
dG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQotICAgICAgICByZXR1cm4gZXJyOwotCi0KLSAgICBy
ZXR1cm4gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FOwotICB9OwotCi0gIFVzYkRldmlj
ZV9TZXRJbnRlcmZhY2VBbHRlcm5hdGVTZXR0aW5nX1Jlc3BvbnNlUGFyYW1zLmVuY29kZWRTaXpl
ID0gY29kZWMua1N0cnVjdEhlYWRlclNpemUgKyA4OwotCi0gIFVzYkRldmljZV9TZXRJbnRlcmZh
Y2VBbHRlcm5hdGVTZXR0aW5nX1Jlc3BvbnNlUGFyYW1zLmRlY29kZSA9IGZ1bmN0aW9uKGRlY29k
ZXIpIHsKLSAgICB2YXIgcGFja2VkOwotICAgIHZhciB2YWwgPSBuZXcgVXNiRGV2aWNlX1NldElu
dGVyZmFjZUFsdGVybmF0ZVNldHRpbmdfUmVzcG9uc2VQYXJhbXMoKTsKLSAgICB2YXIgbnVtYmVy
T2ZCeXRlcyA9IGRlY29kZXIucmVhZFVpbnQzMigpOwotICAgIHZhciB2ZXJzaW9uID0gZGVjb2Rl
ci5yZWFkVWludDMyKCk7Ci0gICAgcGFja2VkID0gZGVjb2Rlci5yZWFkVWludDgoKTsKLSAgICB2
YWwuc3VjY2VzcyA9IChwYWNrZWQgPj4gMCkgJiAxID8gdHJ1ZSA6IGZhbHNlOwotICAgIGRlY29k
ZXIuc2tpcCgxKTsKLSAgICBkZWNvZGVyLnNraXAoMSk7Ci0gICAgZGVjb2Rlci5za2lwKDEpOwot
ICAgIGRlY29kZXIuc2tpcCgxKTsKLSAgICBkZWNvZGVyLnNraXAoMSk7Ci0gICAgZGVjb2Rlci5z
a2lwKDEpOwotICAgIGRlY29kZXIuc2tpcCgxKTsKLSAgICByZXR1cm4gdmFsOwotICB9OwotCi0g
IFVzYkRldmljZV9TZXRJbnRlcmZhY2VBbHRlcm5hdGVTZXR0aW5nX1Jlc3BvbnNlUGFyYW1zLmVu
Y29kZSA9IGZ1bmN0aW9uKGVuY29kZXIsIHZhbCkgewotICAgIHZhciBwYWNrZWQ7Ci0gICAgZW5j
b2Rlci53cml0ZVVpbnQzMihVc2JEZXZpY2VfU2V0SW50ZXJmYWNlQWx0ZXJuYXRlU2V0dGluZ19S
ZXNwb25zZVBhcmFtcy5lbmNvZGVkU2l6ZSk7Ci0gICAgZW5jb2Rlci53cml0ZVVpbnQzMigwKTsK
LSAgICBwYWNrZWQgPSAwOwotICAgIHBhY2tlZCB8PSAodmFsLnN1Y2Nlc3MgJiAxKSA8PCAwCi0g
ICAgZW5jb2Rlci53cml0ZVVpbnQ4KHBhY2tlZCk7Ci0gICAgZW5jb2Rlci5za2lwKDEpOwotICAg
IGVuY29kZXIuc2tpcCgxKTsKLSAgICBlbmNvZGVyLnNraXAoMSk7Ci0gICAgZW5jb2Rlci5za2lw
KDEpOwotICAgIGVuY29kZXIuc2tpcCgxKTsKLSAgICBlbmNvZGVyLnNraXAoMSk7Ci0gICAgZW5j
b2Rlci5za2lwKDEpOwotICB9OwotICBmdW5jdGlvbiBVc2JEZXZpY2VfUmVzZXRfUGFyYW1zKHZh
bHVlcykgewotICAgIHRoaXMuaW5pdERlZmF1bHRzXygpOwotICAgIHRoaXMuaW5pdEZpZWxkc18o
dmFsdWVzKTsKLSAgfQotCi0KLSAgVXNiRGV2aWNlX1Jlc2V0X1BhcmFtcy5wcm90b3R5cGUuaW5p
dERlZmF1bHRzXyA9IGZ1bmN0aW9uKCkgewotICB9OwotICBVc2JEZXZpY2VfUmVzZXRfUGFyYW1z
LnByb3RvdHlwZS5pbml0RmllbGRzXyA9IGZ1bmN0aW9uKGZpZWxkcykgewotICAgIGZvcih2YXIg
ZmllbGQgaW4gZmllbGRzKSB7Ci0gICAgICAgIGlmICh0aGlzLmhhc093blByb3BlcnR5KGZpZWxk
KSkKLSAgICAgICAgICB0aGlzW2ZpZWxkXSA9IGZpZWxkc1tmaWVsZF07Ci0gICAgfQotICB9Owot
Ci0gIFVzYkRldmljZV9SZXNldF9QYXJhbXMudmFsaWRhdGUgPSBmdW5jdGlvbihtZXNzYWdlVmFs
aWRhdG9yLCBvZmZzZXQpIHsKLSAgICB2YXIgZXJyOwotICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0
b3IudmFsaWRhdGVTdHJ1Y3RIZWFkZXIob2Zmc2V0LCBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSk7
Ci0gICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQotICAgICAg
ICByZXR1cm4gZXJyOwotCi0gICAgdmFyIGtWZXJzaW9uU2l6ZXMgPSBbCi0gICAgICB7dmVyc2lv
bjogMCwgbnVtQnl0ZXM6IDh9Ci0gICAgXTsKLSAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZh
bGlkYXRlU3RydWN0VmVyc2lvbihvZmZzZXQsIGtWZXJzaW9uU2l6ZXMpOwotICAgIGlmIChlcnIg
IT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKLSAgICAgICAgcmV0dXJuIGVycjsK
LQotICAgIHJldHVybiB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkU7Ci0gIH07Ci0KLSAg
VXNiRGV2aWNlX1Jlc2V0X1BhcmFtcy5lbmNvZGVkU2l6ZSA9IGNvZGVjLmtTdHJ1Y3RIZWFkZXJT
aXplICsgMDsKLQotICBVc2JEZXZpY2VfUmVzZXRfUGFyYW1zLmRlY29kZSA9IGZ1bmN0aW9uKGRl
Y29kZXIpIHsKLSAgICB2YXIgcGFja2VkOwotICAgIHZhciB2YWwgPSBuZXcgVXNiRGV2aWNlX1Jl
c2V0X1BhcmFtcygpOwotICAgIHZhciBudW1iZXJPZkJ5dGVzID0gZGVjb2Rlci5yZWFkVWludDMy
KCk7Ci0gICAgdmFyIHZlcnNpb24gPSBkZWNvZGVyLnJlYWRVaW50MzIoKTsKLSAgICByZXR1cm4g
dmFsOwotICB9OwotCi0gIFVzYkRldmljZV9SZXNldF9QYXJhbXMuZW5jb2RlID0gZnVuY3Rpb24o
ZW5jb2RlciwgdmFsKSB7Ci0gICAgdmFyIHBhY2tlZDsKLSAgICBlbmNvZGVyLndyaXRlVWludDMy
KFVzYkRldmljZV9SZXNldF9QYXJhbXMuZW5jb2RlZFNpemUpOwotICAgIGVuY29kZXIud3JpdGVV
aW50MzIoMCk7Ci0gIH07Ci0gIGZ1bmN0aW9uIFVzYkRldmljZV9SZXNldF9SZXNwb25zZVBhcmFt
cyh2YWx1ZXMpIHsKLSAgICB0aGlzLmluaXREZWZhdWx0c18oKTsKLSAgICB0aGlzLmluaXRGaWVs
ZHNfKHZhbHVlcyk7Ci0gIH0KLQotCi0gIFVzYkRldmljZV9SZXNldF9SZXNwb25zZVBhcmFtcy5w
cm90b3R5cGUuaW5pdERlZmF1bHRzXyA9IGZ1bmN0aW9uKCkgewotICAgIHRoaXMuc3VjY2VzcyA9
IGZhbHNlOwotICB9OwotICBVc2JEZXZpY2VfUmVzZXRfUmVzcG9uc2VQYXJhbXMucHJvdG90eXBl
LmluaXRGaWVsZHNfID0gZnVuY3Rpb24oZmllbGRzKSB7Ci0gICAgZm9yKHZhciBmaWVsZCBpbiBm
aWVsZHMpIHsKLSAgICAgICAgaWYgKHRoaXMuaGFzT3duUHJvcGVydHkoZmllbGQpKQotICAgICAg
ICAgIHRoaXNbZmllbGRdID0gZmllbGRzW2ZpZWxkXTsKLSAgICB9Ci0gIH07Ci0KLSAgVXNiRGV2
aWNlX1Jlc2V0X1Jlc3BvbnNlUGFyYW1zLnZhbGlkYXRlID0gZnVuY3Rpb24obWVzc2FnZVZhbGlk
YXRvciwgb2Zmc2V0KSB7Ci0gICAgdmFyIGVycjsKLSAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9y
LnZhbGlkYXRlU3RydWN0SGVhZGVyKG9mZnNldCwgY29kZWMua1N0cnVjdEhlYWRlclNpemUpOwot
ICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKLSAgICAgICAg
cmV0dXJuIGVycjsKLQotICAgIHZhciBrVmVyc2lvblNpemVzID0gWwotICAgICAge3ZlcnNpb246
IDAsIG51bUJ5dGVzOiAxNn0KLSAgICBdOwotICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFs
aWRhdGVTdHJ1Y3RWZXJzaW9uKG9mZnNldCwga1ZlcnNpb25TaXplcyk7Ci0gICAgaWYgKGVyciAh
PT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQotICAgICAgICByZXR1cm4gZXJyOwot
Ci0KLSAgICByZXR1cm4gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FOwotICB9OwotCi0g
IFVzYkRldmljZV9SZXNldF9SZXNwb25zZVBhcmFtcy5lbmNvZGVkU2l6ZSA9IGNvZGVjLmtTdHJ1
Y3RIZWFkZXJTaXplICsgODsKLQotICBVc2JEZXZpY2VfUmVzZXRfUmVzcG9uc2VQYXJhbXMuZGVj
b2RlID0gZnVuY3Rpb24oZGVjb2RlcikgewotICAgIHZhciBwYWNrZWQ7Ci0gICAgdmFyIHZhbCA9
IG5ldyBVc2JEZXZpY2VfUmVzZXRfUmVzcG9uc2VQYXJhbXMoKTsKLSAgICB2YXIgbnVtYmVyT2ZC
eXRlcyA9IGRlY29kZXIucmVhZFVpbnQzMigpOwotICAgIHZhciB2ZXJzaW9uID0gZGVjb2Rlci5y
ZWFkVWludDMyKCk7Ci0gICAgcGFja2VkID0gZGVjb2Rlci5yZWFkVWludDgoKTsKLSAgICB2YWwu
c3VjY2VzcyA9IChwYWNrZWQgPj4gMCkgJiAxID8gdHJ1ZSA6IGZhbHNlOwotICAgIGRlY29kZXIu
c2tpcCgxKTsKLSAgICBkZWNvZGVyLnNraXAoMSk7Ci0gICAgZGVjb2Rlci5za2lwKDEpOwotICAg
IGRlY29kZXIuc2tpcCgxKTsKLSAgICBkZWNvZGVyLnNraXAoMSk7Ci0gICAgZGVjb2Rlci5za2lw
KDEpOwotICAgIGRlY29kZXIuc2tpcCgxKTsKLSAgICByZXR1cm4gdmFsOwotICB9OwotCi0gIFVz
YkRldmljZV9SZXNldF9SZXNwb25zZVBhcmFtcy5lbmNvZGUgPSBmdW5jdGlvbihlbmNvZGVyLCB2
YWwpIHsKLSAgICB2YXIgcGFja2VkOwotICAgIGVuY29kZXIud3JpdGVVaW50MzIoVXNiRGV2aWNl
X1Jlc2V0X1Jlc3BvbnNlUGFyYW1zLmVuY29kZWRTaXplKTsKLSAgICBlbmNvZGVyLndyaXRlVWlu
dDMyKDApOwotICAgIHBhY2tlZCA9IDA7Ci0gICAgcGFja2VkIHw9ICh2YWwuc3VjY2VzcyAmIDEp
IDw8IDAKLSAgICBlbmNvZGVyLndyaXRlVWludDgocGFja2VkKTsKLSAgICBlbmNvZGVyLnNraXAo
MSk7Ci0gICAgZW5jb2Rlci5za2lwKDEpOwotICAgIGVuY29kZXIuc2tpcCgxKTsKLSAgICBlbmNv
ZGVyLnNraXAoMSk7Ci0gICAgZW5jb2Rlci5za2lwKDEpOwotICAgIGVuY29kZXIuc2tpcCgxKTsK
LSAgICBlbmNvZGVyLnNraXAoMSk7Ci0gIH07Ci0gIGZ1bmN0aW9uIFVzYkRldmljZV9DbGVhckhh
bHRfUGFyYW1zKHZhbHVlcykgewotICAgIHRoaXMuaW5pdERlZmF1bHRzXygpOwotICAgIHRoaXMu
aW5pdEZpZWxkc18odmFsdWVzKTsKLSAgfQotCi0KLSAgVXNiRGV2aWNlX0NsZWFySGFsdF9QYXJh
bXMucHJvdG90eXBlLmluaXREZWZhdWx0c18gPSBmdW5jdGlvbigpIHsKLSAgICB0aGlzLmVuZHBv
aW50ID0gMDsKLSAgfTsKLSAgVXNiRGV2aWNlX0NsZWFySGFsdF9QYXJhbXMucHJvdG90eXBlLmlu
aXRGaWVsZHNfID0gZnVuY3Rpb24oZmllbGRzKSB7Ci0gICAgZm9yKHZhciBmaWVsZCBpbiBmaWVs
ZHMpIHsKLSAgICAgICAgaWYgKHRoaXMuaGFzT3duUHJvcGVydHkoZmllbGQpKQotICAgICAgICAg
IHRoaXNbZmllbGRdID0gZmllbGRzW2ZpZWxkXTsKLSAgICB9Ci0gIH07Ci0KLSAgVXNiRGV2aWNl
X0NsZWFySGFsdF9QYXJhbXMudmFsaWRhdGUgPSBmdW5jdGlvbihtZXNzYWdlVmFsaWRhdG9yLCBv
ZmZzZXQpIHsKLSAgICB2YXIgZXJyOwotICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRh
dGVTdHJ1Y3RIZWFkZXIob2Zmc2V0LCBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSk7Ci0gICAgaWYg
KGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQotICAgICAgICByZXR1cm4g
ZXJyOwotCi0gICAgdmFyIGtWZXJzaW9uU2l6ZXMgPSBbCi0gICAgICB7dmVyc2lvbjogMCwgbnVt
Qnl0ZXM6IDE2fQotICAgIF07Ci0gICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0
cnVjdFZlcnNpb24ob2Zmc2V0LCBrVmVyc2lvblNpemVzKTsKLSAgICBpZiAoZXJyICE9PSB2YWxp
ZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCi0gICAgICAgIHJldHVybiBlcnI7Ci0KLQotICAg
IHJldHVybiB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkU7Ci0gIH07Ci0KLSAgVXNiRGV2
aWNlX0NsZWFySGFsdF9QYXJhbXMuZW5jb2RlZFNpemUgPSBjb2RlYy5rU3RydWN0SGVhZGVyU2l6
ZSArIDg7Ci0KLSAgVXNiRGV2aWNlX0NsZWFySGFsdF9QYXJhbXMuZGVjb2RlID0gZnVuY3Rpb24o
ZGVjb2RlcikgewotICAgIHZhciBwYWNrZWQ7Ci0gICAgdmFyIHZhbCA9IG5ldyBVc2JEZXZpY2Vf
Q2xlYXJIYWx0X1BhcmFtcygpOwotICAgIHZhciBudW1iZXJPZkJ5dGVzID0gZGVjb2Rlci5yZWFk
VWludDMyKCk7Ci0gICAgdmFyIHZlcnNpb24gPSBkZWNvZGVyLnJlYWRVaW50MzIoKTsKLSAgICB2
YWwuZW5kcG9pbnQgPSBkZWNvZGVyLmRlY29kZVN0cnVjdChjb2RlYy5VaW50OCk7Ci0gICAgZGVj
b2Rlci5za2lwKDEpOwotICAgIGRlY29kZXIuc2tpcCgxKTsKLSAgICBkZWNvZGVyLnNraXAoMSk7
Ci0gICAgZGVjb2Rlci5za2lwKDEpOwotICAgIGRlY29kZXIuc2tpcCgxKTsKLSAgICBkZWNvZGVy
LnNraXAoMSk7Ci0gICAgZGVjb2Rlci5za2lwKDEpOwotICAgIHJldHVybiB2YWw7Ci0gIH07Ci0K
LSAgVXNiRGV2aWNlX0NsZWFySGFsdF9QYXJhbXMuZW5jb2RlID0gZnVuY3Rpb24oZW5jb2Rlciwg
dmFsKSB7Ci0gICAgdmFyIHBhY2tlZDsKLSAgICBlbmNvZGVyLndyaXRlVWludDMyKFVzYkRldmlj
ZV9DbGVhckhhbHRfUGFyYW1zLmVuY29kZWRTaXplKTsKLSAgICBlbmNvZGVyLndyaXRlVWludDMy
KDApOwotICAgIGVuY29kZXIuZW5jb2RlU3RydWN0KGNvZGVjLlVpbnQ4LCB2YWwuZW5kcG9pbnQp
OwotICAgIGVuY29kZXIuc2tpcCgxKTsKLSAgICBlbmNvZGVyLnNraXAoMSk7Ci0gICAgZW5jb2Rl
ci5za2lwKDEpOwotICAgIGVuY29kZXIuc2tpcCgxKTsKLSAgICBlbmNvZGVyLnNraXAoMSk7Ci0g
ICAgZW5jb2Rlci5za2lwKDEpOwotICAgIGVuY29kZXIuc2tpcCgxKTsKLSAgfTsKLSAgZnVuY3Rp
b24gVXNiRGV2aWNlX0NsZWFySGFsdF9SZXNwb25zZVBhcmFtcyh2YWx1ZXMpIHsKLSAgICB0aGlz
LmluaXREZWZhdWx0c18oKTsKLSAgICB0aGlzLmluaXRGaWVsZHNfKHZhbHVlcyk7Ci0gIH0KLQot
Ci0gIFVzYkRldmljZV9DbGVhckhhbHRfUmVzcG9uc2VQYXJhbXMucHJvdG90eXBlLmluaXREZWZh
dWx0c18gPSBmdW5jdGlvbigpIHsKLSAgICB0aGlzLnN1Y2Nlc3MgPSBmYWxzZTsKLSAgfTsKLSAg
VXNiRGV2aWNlX0NsZWFySGFsdF9SZXNwb25zZVBhcmFtcy5wcm90b3R5cGUuaW5pdEZpZWxkc18g
PSBmdW5jdGlvbihmaWVsZHMpIHsKLSAgICBmb3IodmFyIGZpZWxkIGluIGZpZWxkcykgewotICAg
ICAgICBpZiAodGhpcy5oYXNPd25Qcm9wZXJ0eShmaWVsZCkpCi0gICAgICAgICAgdGhpc1tmaWVs
ZF0gPSBmaWVsZHNbZmllbGRdOwotICAgIH0KLSAgfTsKLQotICBVc2JEZXZpY2VfQ2xlYXJIYWx0
X1Jlc3BvbnNlUGFyYW1zLnZhbGlkYXRlID0gZnVuY3Rpb24obWVzc2FnZVZhbGlkYXRvciwgb2Zm
c2V0KSB7Ci0gICAgdmFyIGVycjsKLSAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRl
U3RydWN0SGVhZGVyKG9mZnNldCwgY29kZWMua1N0cnVjdEhlYWRlclNpemUpOwotICAgIGlmIChl
cnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKLSAgICAgICAgcmV0dXJuIGVy
cjsKLQotICAgIHZhciBrVmVyc2lvblNpemVzID0gWwotICAgICAge3ZlcnNpb246IDAsIG51bUJ5
dGVzOiAxNn0KLSAgICBdOwotICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1
Y3RWZXJzaW9uKG9mZnNldCwga1ZlcnNpb25TaXplcyk7Ci0gICAgaWYgKGVyciAhPT0gdmFsaWRh
dG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQotICAgICAgICByZXR1cm4gZXJyOwotCi0KLSAgICBy
ZXR1cm4gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FOwotICB9OwotCi0gIFVzYkRldmlj
ZV9DbGVhckhhbHRfUmVzcG9uc2VQYXJhbXMuZW5jb2RlZFNpemUgPSBjb2RlYy5rU3RydWN0SGVh
ZGVyU2l6ZSArIDg7Ci0KLSAgVXNiRGV2aWNlX0NsZWFySGFsdF9SZXNwb25zZVBhcmFtcy5kZWNv
ZGUgPSBmdW5jdGlvbihkZWNvZGVyKSB7Ci0gICAgdmFyIHBhY2tlZDsKLSAgICB2YXIgdmFsID0g
bmV3IFVzYkRldmljZV9DbGVhckhhbHRfUmVzcG9uc2VQYXJhbXMoKTsKLSAgICB2YXIgbnVtYmVy
T2ZCeXRlcyA9IGRlY29kZXIucmVhZFVpbnQzMigpOwotICAgIHZhciB2ZXJzaW9uID0gZGVjb2Rl
ci5yZWFkVWludDMyKCk7Ci0gICAgcGFja2VkID0gZGVjb2Rlci5yZWFkVWludDgoKTsKLSAgICB2
YWwuc3VjY2VzcyA9IChwYWNrZWQgPj4gMCkgJiAxID8gdHJ1ZSA6IGZhbHNlOwotICAgIGRlY29k
ZXIuc2tpcCgxKTsKLSAgICBkZWNvZGVyLnNraXAoMSk7Ci0gICAgZGVjb2Rlci5za2lwKDEpOwot
ICAgIGRlY29kZXIuc2tpcCgxKTsKLSAgICBkZWNvZGVyLnNraXAoMSk7Ci0gICAgZGVjb2Rlci5z
a2lwKDEpOwotICAgIGRlY29kZXIuc2tpcCgxKTsKLSAgICByZXR1cm4gdmFsOwotICB9OwotCi0g
IFVzYkRldmljZV9DbGVhckhhbHRfUmVzcG9uc2VQYXJhbXMuZW5jb2RlID0gZnVuY3Rpb24oZW5j
b2RlciwgdmFsKSB7Ci0gICAgdmFyIHBhY2tlZDsKLSAgICBlbmNvZGVyLndyaXRlVWludDMyKFVz
YkRldmljZV9DbGVhckhhbHRfUmVzcG9uc2VQYXJhbXMuZW5jb2RlZFNpemUpOwotICAgIGVuY29k
ZXIud3JpdGVVaW50MzIoMCk7Ci0gICAgcGFja2VkID0gMDsKLSAgICBwYWNrZWQgfD0gKHZhbC5z
dWNjZXNzICYgMSkgPDwgMAotICAgIGVuY29kZXIud3JpdGVVaW50OChwYWNrZWQpOwotICAgIGVu
Y29kZXIuc2tpcCgxKTsKLSAgICBlbmNvZGVyLnNraXAoMSk7Ci0gICAgZW5jb2Rlci5za2lwKDEp
OwotICAgIGVuY29kZXIuc2tpcCgxKTsKLSAgICBlbmNvZGVyLnNraXAoMSk7Ci0gICAgZW5jb2Rl
ci5za2lwKDEpOwotICAgIGVuY29kZXIuc2tpcCgxKTsKLSAgfTsKLSAgZnVuY3Rpb24gVXNiRGV2
aWNlX0NvbnRyb2xUcmFuc2ZlckluX1BhcmFtcyh2YWx1ZXMpIHsKLSAgICB0aGlzLmluaXREZWZh
dWx0c18oKTsKLSAgICB0aGlzLmluaXRGaWVsZHNfKHZhbHVlcyk7Ci0gIH0KLQotCi0gIFVzYkRl
dmljZV9Db250cm9sVHJhbnNmZXJJbl9QYXJhbXMucHJvdG90eXBlLmluaXREZWZhdWx0c18gPSBm
dW5jdGlvbigpIHsKLSAgICB0aGlzLnBhcmFtcyA9IG51bGw7Ci0gICAgdGhpcy5sZW5ndGggPSAw
OwotICAgIHRoaXMudGltZW91dCA9IDA7Ci0gIH07Ci0gIFVzYkRldmljZV9Db250cm9sVHJhbnNm
ZXJJbl9QYXJhbXMucHJvdG90eXBlLmluaXRGaWVsZHNfID0gZnVuY3Rpb24oZmllbGRzKSB7Ci0g
ICAgZm9yKHZhciBmaWVsZCBpbiBmaWVsZHMpIHsKLSAgICAgICAgaWYgKHRoaXMuaGFzT3duUHJv
cGVydHkoZmllbGQpKQotICAgICAgICAgIHRoaXNbZmllbGRdID0gZmllbGRzW2ZpZWxkXTsKLSAg
ICB9Ci0gIH07Ci0KLSAgVXNiRGV2aWNlX0NvbnRyb2xUcmFuc2ZlckluX1BhcmFtcy52YWxpZGF0
ZSA9IGZ1bmN0aW9uKG1lc3NhZ2VWYWxpZGF0b3IsIG9mZnNldCkgewotICAgIHZhciBlcnI7Ci0g
ICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdEhlYWRlcihvZmZzZXQsIGNv
ZGVjLmtTdHJ1Y3RIZWFkZXJTaXplKTsKLSAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRh
dGlvbkVycm9yLk5PTkUpCi0gICAgICAgIHJldHVybiBlcnI7Ci0KLSAgICB2YXIga1ZlcnNpb25T
aXplcyA9IFsKLSAgICAgIHt2ZXJzaW9uOiAwLCBudW1CeXRlczogMjR9Ci0gICAgXTsKLSAgICBl
cnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0VmVyc2lvbihvZmZzZXQsIGtWZXJz
aW9uU2l6ZXMpOwotICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9O
RSkKLSAgICAgICAgcmV0dXJuIGVycjsKLQotCi0gICAgLy8gdmFsaWRhdGUgVXNiRGV2aWNlX0Nv
bnRyb2xUcmFuc2ZlckluX1BhcmFtcy5wYXJhbXMKLSAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9y
LnZhbGlkYXRlU3RydWN0UG9pbnRlcihvZmZzZXQgKyBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSAr
IDAsIFVzYkNvbnRyb2xUcmFuc2ZlclBhcmFtcywgZmFsc2UpOwotICAgIGlmIChlcnIgIT09IHZh
bGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKLSAgICAgICAgcmV0dXJuIGVycjsKLQotCi0K
LSAgICByZXR1cm4gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FOwotICB9OwotCi0gIFVz
YkRldmljZV9Db250cm9sVHJhbnNmZXJJbl9QYXJhbXMuZW5jb2RlZFNpemUgPSBjb2RlYy5rU3Ry
dWN0SGVhZGVyU2l6ZSArIDE2OwotCi0gIFVzYkRldmljZV9Db250cm9sVHJhbnNmZXJJbl9QYXJh
bXMuZGVjb2RlID0gZnVuY3Rpb24oZGVjb2RlcikgewotICAgIHZhciBwYWNrZWQ7Ci0gICAgdmFy
IHZhbCA9IG5ldyBVc2JEZXZpY2VfQ29udHJvbFRyYW5zZmVySW5fUGFyYW1zKCk7Ci0gICAgdmFy
IG51bWJlck9mQnl0ZXMgPSBkZWNvZGVyLnJlYWRVaW50MzIoKTsKLSAgICB2YXIgdmVyc2lvbiA9
IGRlY29kZXIucmVhZFVpbnQzMigpOwotICAgIHZhbC5wYXJhbXMgPSBkZWNvZGVyLmRlY29kZVN0
cnVjdFBvaW50ZXIoVXNiQ29udHJvbFRyYW5zZmVyUGFyYW1zKTsKLSAgICB2YWwubGVuZ3RoID0g
ZGVjb2Rlci5kZWNvZGVTdHJ1Y3QoY29kZWMuVWludDMyKTsKLSAgICB2YWwudGltZW91dCA9IGRl
Y29kZXIuZGVjb2RlU3RydWN0KGNvZGVjLlVpbnQzMik7Ci0gICAgcmV0dXJuIHZhbDsKLSAgfTsK
LQotICBVc2JEZXZpY2VfQ29udHJvbFRyYW5zZmVySW5fUGFyYW1zLmVuY29kZSA9IGZ1bmN0aW9u
KGVuY29kZXIsIHZhbCkgewotICAgIHZhciBwYWNrZWQ7Ci0gICAgZW5jb2Rlci53cml0ZVVpbnQz
MihVc2JEZXZpY2VfQ29udHJvbFRyYW5zZmVySW5fUGFyYW1zLmVuY29kZWRTaXplKTsKLSAgICBl
bmNvZGVyLndyaXRlVWludDMyKDApOwotICAgIGVuY29kZXIuZW5jb2RlU3RydWN0UG9pbnRlcihV
c2JDb250cm9sVHJhbnNmZXJQYXJhbXMsIHZhbC5wYXJhbXMpOwotICAgIGVuY29kZXIuZW5jb2Rl
U3RydWN0KGNvZGVjLlVpbnQzMiwgdmFsLmxlbmd0aCk7Ci0gICAgZW5jb2Rlci5lbmNvZGVTdHJ1
Y3QoY29kZWMuVWludDMyLCB2YWwudGltZW91dCk7Ci0gIH07Ci0gIGZ1bmN0aW9uIFVzYkRldmlj
ZV9Db250cm9sVHJhbnNmZXJJbl9SZXNwb25zZVBhcmFtcyh2YWx1ZXMpIHsKLSAgICB0aGlzLmlu
aXREZWZhdWx0c18oKTsKLSAgICB0aGlzLmluaXRGaWVsZHNfKHZhbHVlcyk7Ci0gIH0KLQotCi0g
IFVzYkRldmljZV9Db250cm9sVHJhbnNmZXJJbl9SZXNwb25zZVBhcmFtcy5wcm90b3R5cGUuaW5p
dERlZmF1bHRzXyA9IGZ1bmN0aW9uKCkgewotICAgIHRoaXMuc3RhdHVzID0gMDsKLSAgICB0aGlz
LmRhdGEgPSBudWxsOwotICB9OwotICBVc2JEZXZpY2VfQ29udHJvbFRyYW5zZmVySW5fUmVzcG9u
c2VQYXJhbXMucHJvdG90eXBlLmluaXRGaWVsZHNfID0gZnVuY3Rpb24oZmllbGRzKSB7Ci0gICAg
Zm9yKHZhciBmaWVsZCBpbiBmaWVsZHMpIHsKLSAgICAgICAgaWYgKHRoaXMuaGFzT3duUHJvcGVy
dHkoZmllbGQpKQotICAgICAgICAgIHRoaXNbZmllbGRdID0gZmllbGRzW2ZpZWxkXTsKLSAgICB9
Ci0gIH07Ci0KLSAgVXNiRGV2aWNlX0NvbnRyb2xUcmFuc2ZlckluX1Jlc3BvbnNlUGFyYW1zLnZh
bGlkYXRlID0gZnVuY3Rpb24obWVzc2FnZVZhbGlkYXRvciwgb2Zmc2V0KSB7Ci0gICAgdmFyIGVy
cjsKLSAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0SGVhZGVyKG9mZnNl
dCwgY29kZWMua1N0cnVjdEhlYWRlclNpemUpOwotICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52
YWxpZGF0aW9uRXJyb3IuTk9ORSkKLSAgICAgICAgcmV0dXJuIGVycjsKLQotICAgIHZhciBrVmVy
c2lvblNpemVzID0gWwotICAgICAge3ZlcnNpb246IDAsIG51bUJ5dGVzOiAyNH0KLSAgICBdOwot
ICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RWZXJzaW9uKG9mZnNldCwg
a1ZlcnNpb25TaXplcyk7Ci0gICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJv
ci5OT05FKQotICAgICAgICByZXR1cm4gZXJyOwotCi0KLSAgICAvLyB2YWxpZGF0ZSBVc2JEZXZp
Y2VfQ29udHJvbFRyYW5zZmVySW5fUmVzcG9uc2VQYXJhbXMuc3RhdHVzCi0gICAgZXJyID0gbWVz
c2FnZVZhbGlkYXRvci52YWxpZGF0ZUVudW0ob2Zmc2V0ICsgY29kZWMua1N0cnVjdEhlYWRlclNp
emUgKyAwLCBVc2JUcmFuc2ZlclN0YXR1cyk7Ci0gICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZh
bGlkYXRpb25FcnJvci5OT05FKQotICAgICAgICByZXR1cm4gZXJyOwotCi0KLSAgICAvLyB2YWxp
ZGF0ZSBVc2JEZXZpY2VfQ29udHJvbFRyYW5zZmVySW5fUmVzcG9uc2VQYXJhbXMuZGF0YQotICAg
IGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVBcnJheVBvaW50ZXIob2Zmc2V0ICsgY29k
ZWMua1N0cnVjdEhlYWRlclNpemUgKyA4LCAxLCBjb2RlYy5VaW50OCwgZmFsc2UsIFswXSwgMCk7
Ci0gICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQotICAgICAg
ICByZXR1cm4gZXJyOwotCi0gICAgcmV0dXJuIHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9O
RTsKLSAgfTsKLQotICBVc2JEZXZpY2VfQ29udHJvbFRyYW5zZmVySW5fUmVzcG9uc2VQYXJhbXMu
ZW5jb2RlZFNpemUgPSBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDE2OwotCi0gIFVzYkRldmlj
ZV9Db250cm9sVHJhbnNmZXJJbl9SZXNwb25zZVBhcmFtcy5kZWNvZGUgPSBmdW5jdGlvbihkZWNv
ZGVyKSB7Ci0gICAgdmFyIHBhY2tlZDsKLSAgICB2YXIgdmFsID0gbmV3IFVzYkRldmljZV9Db250
cm9sVHJhbnNmZXJJbl9SZXNwb25zZVBhcmFtcygpOwotICAgIHZhciBudW1iZXJPZkJ5dGVzID0g
ZGVjb2Rlci5yZWFkVWludDMyKCk7Ci0gICAgdmFyIHZlcnNpb24gPSBkZWNvZGVyLnJlYWRVaW50
MzIoKTsKLSAgICB2YWwuc3RhdHVzID0gZGVjb2Rlci5kZWNvZGVTdHJ1Y3QoY29kZWMuSW50MzIp
OwotICAgIGRlY29kZXIuc2tpcCgxKTsKLSAgICBkZWNvZGVyLnNraXAoMSk7Ci0gICAgZGVjb2Rl
ci5za2lwKDEpOwotICAgIGRlY29kZXIuc2tpcCgxKTsKLSAgICB2YWwuZGF0YSA9IGRlY29kZXIu
ZGVjb2RlQXJyYXlQb2ludGVyKGNvZGVjLlVpbnQ4KTsKLSAgICByZXR1cm4gdmFsOwotICB9Owot
Ci0gIFVzYkRldmljZV9Db250cm9sVHJhbnNmZXJJbl9SZXNwb25zZVBhcmFtcy5lbmNvZGUgPSBm
dW5jdGlvbihlbmNvZGVyLCB2YWwpIHsKLSAgICB2YXIgcGFja2VkOwotICAgIGVuY29kZXIud3Jp
dGVVaW50MzIoVXNiRGV2aWNlX0NvbnRyb2xUcmFuc2ZlckluX1Jlc3BvbnNlUGFyYW1zLmVuY29k
ZWRTaXplKTsKLSAgICBlbmNvZGVyLndyaXRlVWludDMyKDApOwotICAgIGVuY29kZXIuZW5jb2Rl
U3RydWN0KGNvZGVjLkludDMyLCB2YWwuc3RhdHVzKTsKLSAgICBlbmNvZGVyLnNraXAoMSk7Ci0g
ICAgZW5jb2Rlci5za2lwKDEpOwotICAgIGVuY29kZXIuc2tpcCgxKTsKLSAgICBlbmNvZGVyLnNr
aXAoMSk7Ci0gICAgZW5jb2Rlci5lbmNvZGVBcnJheVBvaW50ZXIoY29kZWMuVWludDgsIHZhbC5k
YXRhKTsKLSAgfTsKLSAgZnVuY3Rpb24gVXNiRGV2aWNlX0NvbnRyb2xUcmFuc2Zlck91dF9QYXJh
bXModmFsdWVzKSB7Ci0gICAgdGhpcy5pbml0RGVmYXVsdHNfKCk7Ci0gICAgdGhpcy5pbml0Rmll
bGRzXyh2YWx1ZXMpOwotICB9Ci0KLQotICBVc2JEZXZpY2VfQ29udHJvbFRyYW5zZmVyT3V0X1Bh
cmFtcy5wcm90b3R5cGUuaW5pdERlZmF1bHRzXyA9IGZ1bmN0aW9uKCkgewotICAgIHRoaXMucGFy
YW1zID0gbnVsbDsKLSAgICB0aGlzLmRhdGEgPSBudWxsOwotICAgIHRoaXMudGltZW91dCA9IDA7
Ci0gIH07Ci0gIFVzYkRldmljZV9Db250cm9sVHJhbnNmZXJPdXRfUGFyYW1zLnByb3RvdHlwZS5p
bml0RmllbGRzXyA9IGZ1bmN0aW9uKGZpZWxkcykgewotICAgIGZvcih2YXIgZmllbGQgaW4gZmll
bGRzKSB7Ci0gICAgICAgIGlmICh0aGlzLmhhc093blByb3BlcnR5KGZpZWxkKSkKLSAgICAgICAg
ICB0aGlzW2ZpZWxkXSA9IGZpZWxkc1tmaWVsZF07Ci0gICAgfQotICB9OwotCi0gIFVzYkRldmlj
ZV9Db250cm9sVHJhbnNmZXJPdXRfUGFyYW1zLnZhbGlkYXRlID0gZnVuY3Rpb24obWVzc2FnZVZh
bGlkYXRvciwgb2Zmc2V0KSB7Ci0gICAgdmFyIGVycjsKLSAgICBlcnIgPSBtZXNzYWdlVmFsaWRh
dG9yLnZhbGlkYXRlU3RydWN0SGVhZGVyKG9mZnNldCwgY29kZWMua1N0cnVjdEhlYWRlclNpemUp
OwotICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKLSAgICAg
ICAgcmV0dXJuIGVycjsKLQotICAgIHZhciBrVmVyc2lvblNpemVzID0gWwotICAgICAge3ZlcnNp
b246IDAsIG51bUJ5dGVzOiAzMn0KLSAgICBdOwotICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3Iu
dmFsaWRhdGVTdHJ1Y3RWZXJzaW9uKG9mZnNldCwga1ZlcnNpb25TaXplcyk7Ci0gICAgaWYgKGVy
ciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQotICAgICAgICByZXR1cm4gZXJy
OwotCi0KLSAgICAvLyB2YWxpZGF0ZSBVc2JEZXZpY2VfQ29udHJvbFRyYW5zZmVyT3V0X1BhcmFt
cy5wYXJhbXMKLSAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0UG9pbnRl
cihvZmZzZXQgKyBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDAsIFVzYkNvbnRyb2xUcmFuc2Zl
clBhcmFtcywgZmFsc2UpOwotICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJy
b3IuTk9ORSkKLSAgICAgICAgcmV0dXJuIGVycjsKLQotCi0gICAgLy8gdmFsaWRhdGUgVXNiRGV2
aWNlX0NvbnRyb2xUcmFuc2Zlck91dF9QYXJhbXMuZGF0YQotICAgIGVyciA9IG1lc3NhZ2VWYWxp
ZGF0b3IudmFsaWRhdGVBcnJheVBvaW50ZXIob2Zmc2V0ICsgY29kZWMua1N0cnVjdEhlYWRlclNp
emUgKyA4LCAxLCBjb2RlYy5VaW50OCwgZmFsc2UsIFswXSwgMCk7Ci0gICAgaWYgKGVyciAhPT0g
dmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQotICAgICAgICByZXR1cm4gZXJyOwotCi0K
LSAgICByZXR1cm4gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FOwotICB9OwotCi0gIFVz
YkRldmljZV9Db250cm9sVHJhbnNmZXJPdXRfUGFyYW1zLmVuY29kZWRTaXplID0gY29kZWMua1N0
cnVjdEhlYWRlclNpemUgKyAyNDsKLQotICBVc2JEZXZpY2VfQ29udHJvbFRyYW5zZmVyT3V0X1Bh
cmFtcy5kZWNvZGUgPSBmdW5jdGlvbihkZWNvZGVyKSB7Ci0gICAgdmFyIHBhY2tlZDsKLSAgICB2
YXIgdmFsID0gbmV3IFVzYkRldmljZV9Db250cm9sVHJhbnNmZXJPdXRfUGFyYW1zKCk7Ci0gICAg
dmFyIG51bWJlck9mQnl0ZXMgPSBkZWNvZGVyLnJlYWRVaW50MzIoKTsKLSAgICB2YXIgdmVyc2lv
biA9IGRlY29kZXIucmVhZFVpbnQzMigpOwotICAgIHZhbC5wYXJhbXMgPSBkZWNvZGVyLmRlY29k
ZVN0cnVjdFBvaW50ZXIoVXNiQ29udHJvbFRyYW5zZmVyUGFyYW1zKTsKLSAgICB2YWwuZGF0YSA9
IGRlY29kZXIuZGVjb2RlQXJyYXlQb2ludGVyKGNvZGVjLlVpbnQ4KTsKLSAgICB2YWwudGltZW91
dCA9IGRlY29kZXIuZGVjb2RlU3RydWN0KGNvZGVjLlVpbnQzMik7Ci0gICAgZGVjb2Rlci5za2lw
KDEpOwotICAgIGRlY29kZXIuc2tpcCgxKTsKLSAgICBkZWNvZGVyLnNraXAoMSk7Ci0gICAgZGVj
b2Rlci5za2lwKDEpOwotICAgIHJldHVybiB2YWw7Ci0gIH07Ci0KLSAgVXNiRGV2aWNlX0NvbnRy
b2xUcmFuc2Zlck91dF9QYXJhbXMuZW5jb2RlID0gZnVuY3Rpb24oZW5jb2RlciwgdmFsKSB7Ci0g
ICAgdmFyIHBhY2tlZDsKLSAgICBlbmNvZGVyLndyaXRlVWludDMyKFVzYkRldmljZV9Db250cm9s
VHJhbnNmZXJPdXRfUGFyYW1zLmVuY29kZWRTaXplKTsKLSAgICBlbmNvZGVyLndyaXRlVWludDMy
KDApOwotICAgIGVuY29kZXIuZW5jb2RlU3RydWN0UG9pbnRlcihVc2JDb250cm9sVHJhbnNmZXJQ
YXJhbXMsIHZhbC5wYXJhbXMpOwotICAgIGVuY29kZXIuZW5jb2RlQXJyYXlQb2ludGVyKGNvZGVj
LlVpbnQ4LCB2YWwuZGF0YSk7Ci0gICAgZW5jb2Rlci5lbmNvZGVTdHJ1Y3QoY29kZWMuVWludDMy
LCB2YWwudGltZW91dCk7Ci0gICAgZW5jb2Rlci5za2lwKDEpOwotICAgIGVuY29kZXIuc2tpcCgx
KTsKLSAgICBlbmNvZGVyLnNraXAoMSk7Ci0gICAgZW5jb2Rlci5za2lwKDEpOwotICB9OwotICBm
dW5jdGlvbiBVc2JEZXZpY2VfQ29udHJvbFRyYW5zZmVyT3V0X1Jlc3BvbnNlUGFyYW1zKHZhbHVl
cykgewotICAgIHRoaXMuaW5pdERlZmF1bHRzXygpOwotICAgIHRoaXMuaW5pdEZpZWxkc18odmFs
dWVzKTsKLSAgfQotCi0KLSAgVXNiRGV2aWNlX0NvbnRyb2xUcmFuc2Zlck91dF9SZXNwb25zZVBh
cmFtcy5wcm90b3R5cGUuaW5pdERlZmF1bHRzXyA9IGZ1bmN0aW9uKCkgewotICAgIHRoaXMuc3Rh
dHVzID0gMDsKLSAgfTsKLSAgVXNiRGV2aWNlX0NvbnRyb2xUcmFuc2Zlck91dF9SZXNwb25zZVBh
cmFtcy5wcm90b3R5cGUuaW5pdEZpZWxkc18gPSBmdW5jdGlvbihmaWVsZHMpIHsKLSAgICBmb3Io
dmFyIGZpZWxkIGluIGZpZWxkcykgewotICAgICAgICBpZiAodGhpcy5oYXNPd25Qcm9wZXJ0eShm
aWVsZCkpCi0gICAgICAgICAgdGhpc1tmaWVsZF0gPSBmaWVsZHNbZmllbGRdOwotICAgIH0KLSAg
fTsKLQotICBVc2JEZXZpY2VfQ29udHJvbFRyYW5zZmVyT3V0X1Jlc3BvbnNlUGFyYW1zLnZhbGlk
YXRlID0gZnVuY3Rpb24obWVzc2FnZVZhbGlkYXRvciwgb2Zmc2V0KSB7Ci0gICAgdmFyIGVycjsK
LSAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0SGVhZGVyKG9mZnNldCwg
Y29kZWMua1N0cnVjdEhlYWRlclNpemUpOwotICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxp
ZGF0aW9uRXJyb3IuTk9ORSkKLSAgICAgICAgcmV0dXJuIGVycjsKLQotICAgIHZhciBrVmVyc2lv
blNpemVzID0gWwotICAgICAge3ZlcnNpb246IDAsIG51bUJ5dGVzOiAxNn0KLSAgICBdOwotICAg
IGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RWZXJzaW9uKG9mZnNldCwga1Zl
cnNpb25TaXplcyk7Ci0gICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5O
T05FKQotICAgICAgICByZXR1cm4gZXJyOwotCi0KLSAgICAvLyB2YWxpZGF0ZSBVc2JEZXZpY2Vf
Q29udHJvbFRyYW5zZmVyT3V0X1Jlc3BvbnNlUGFyYW1zLnN0YXR1cwotICAgIGVyciA9IG1lc3Nh
Z2VWYWxpZGF0b3IudmFsaWRhdGVFbnVtKG9mZnNldCArIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXpl
ICsgMCwgVXNiVHJhbnNmZXJTdGF0dXMpOwotICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxp
ZGF0aW9uRXJyb3IuTk9ORSkKLSAgICAgICAgcmV0dXJuIGVycjsKLQotICAgIHJldHVybiB2YWxp
ZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkU7Ci0gIH07Ci0KLSAgVXNiRGV2aWNlX0NvbnRyb2xU
cmFuc2Zlck91dF9SZXNwb25zZVBhcmFtcy5lbmNvZGVkU2l6ZSA9IGNvZGVjLmtTdHJ1Y3RIZWFk
ZXJTaXplICsgODsKLQotICBVc2JEZXZpY2VfQ29udHJvbFRyYW5zZmVyT3V0X1Jlc3BvbnNlUGFy
YW1zLmRlY29kZSA9IGZ1bmN0aW9uKGRlY29kZXIpIHsKLSAgICB2YXIgcGFja2VkOwotICAgIHZh
ciB2YWwgPSBuZXcgVXNiRGV2aWNlX0NvbnRyb2xUcmFuc2Zlck91dF9SZXNwb25zZVBhcmFtcygp
OwotICAgIHZhciBudW1iZXJPZkJ5dGVzID0gZGVjb2Rlci5yZWFkVWludDMyKCk7Ci0gICAgdmFy
IHZlcnNpb24gPSBkZWNvZGVyLnJlYWRVaW50MzIoKTsKLSAgICB2YWwuc3RhdHVzID0gZGVjb2Rl
ci5kZWNvZGVTdHJ1Y3QoY29kZWMuSW50MzIpOwotICAgIGRlY29kZXIuc2tpcCgxKTsKLSAgICBk
ZWNvZGVyLnNraXAoMSk7Ci0gICAgZGVjb2Rlci5za2lwKDEpOwotICAgIGRlY29kZXIuc2tpcCgx
KTsKLSAgICByZXR1cm4gdmFsOwotICB9OwotCi0gIFVzYkRldmljZV9Db250cm9sVHJhbnNmZXJP
dXRfUmVzcG9uc2VQYXJhbXMuZW5jb2RlID0gZnVuY3Rpb24oZW5jb2RlciwgdmFsKSB7Ci0gICAg
dmFyIHBhY2tlZDsKLSAgICBlbmNvZGVyLndyaXRlVWludDMyKFVzYkRldmljZV9Db250cm9sVHJh
bnNmZXJPdXRfUmVzcG9uc2VQYXJhbXMuZW5jb2RlZFNpemUpOwotICAgIGVuY29kZXIud3JpdGVV
aW50MzIoMCk7Ci0gICAgZW5jb2Rlci5lbmNvZGVTdHJ1Y3QoY29kZWMuSW50MzIsIHZhbC5zdGF0
dXMpOwotICAgIGVuY29kZXIuc2tpcCgxKTsKLSAgICBlbmNvZGVyLnNraXAoMSk7Ci0gICAgZW5j
b2Rlci5za2lwKDEpOwotICAgIGVuY29kZXIuc2tpcCgxKTsKLSAgfTsKLSAgZnVuY3Rpb24gVXNi
RGV2aWNlX0dlbmVyaWNUcmFuc2ZlckluX1BhcmFtcyh2YWx1ZXMpIHsKLSAgICB0aGlzLmluaXRE
ZWZhdWx0c18oKTsKLSAgICB0aGlzLmluaXRGaWVsZHNfKHZhbHVlcyk7Ci0gIH0KLQotCi0gIFVz
YkRldmljZV9HZW5lcmljVHJhbnNmZXJJbl9QYXJhbXMucHJvdG90eXBlLmluaXREZWZhdWx0c18g
PSBmdW5jdGlvbigpIHsKLSAgICB0aGlzLmVuZHBvaW50TnVtYmVyID0gMDsKLSAgICB0aGlzLmxl
bmd0aCA9IDA7Ci0gICAgdGhpcy50aW1lb3V0ID0gMDsKLSAgfTsKLSAgVXNiRGV2aWNlX0dlbmVy
aWNUcmFuc2ZlckluX1BhcmFtcy5wcm90b3R5cGUuaW5pdEZpZWxkc18gPSBmdW5jdGlvbihmaWVs
ZHMpIHsKLSAgICBmb3IodmFyIGZpZWxkIGluIGZpZWxkcykgewotICAgICAgICBpZiAodGhpcy5o
YXNPd25Qcm9wZXJ0eShmaWVsZCkpCi0gICAgICAgICAgdGhpc1tmaWVsZF0gPSBmaWVsZHNbZmll
bGRdOwotICAgIH0KLSAgfTsKLQotICBVc2JEZXZpY2VfR2VuZXJpY1RyYW5zZmVySW5fUGFyYW1z
LnZhbGlkYXRlID0gZnVuY3Rpb24obWVzc2FnZVZhbGlkYXRvciwgb2Zmc2V0KSB7Ci0gICAgdmFy
IGVycjsKLSAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0SGVhZGVyKG9m
ZnNldCwgY29kZWMua1N0cnVjdEhlYWRlclNpemUpOwotICAgIGlmIChlcnIgIT09IHZhbGlkYXRv
ci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKLSAgICAgICAgcmV0dXJuIGVycjsKLQotICAgIHZhciBr
VmVyc2lvblNpemVzID0gWwotICAgICAge3ZlcnNpb246IDAsIG51bUJ5dGVzOiAyNH0KLSAgICBd
OwotICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RWZXJzaW9uKG9mZnNl
dCwga1ZlcnNpb25TaXplcyk7Ci0gICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25F
cnJvci5OT05FKQotICAgICAgICByZXR1cm4gZXJyOwotCi0KLQotCi0gICAgcmV0dXJuIHZhbGlk
YXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORTsKLSAgfTsKLQotICBVc2JEZXZpY2VfR2VuZXJpY1Ry
YW5zZmVySW5fUGFyYW1zLmVuY29kZWRTaXplID0gY29kZWMua1N0cnVjdEhlYWRlclNpemUgKyAx
NjsKLQotICBVc2JEZXZpY2VfR2VuZXJpY1RyYW5zZmVySW5fUGFyYW1zLmRlY29kZSA9IGZ1bmN0
aW9uKGRlY29kZXIpIHsKLSAgICB2YXIgcGFja2VkOwotICAgIHZhciB2YWwgPSBuZXcgVXNiRGV2
aWNlX0dlbmVyaWNUcmFuc2ZlckluX1BhcmFtcygpOwotICAgIHZhciBudW1iZXJPZkJ5dGVzID0g
ZGVjb2Rlci5yZWFkVWludDMyKCk7Ci0gICAgdmFyIHZlcnNpb24gPSBkZWNvZGVyLnJlYWRVaW50
MzIoKTsKLSAgICB2YWwuZW5kcG9pbnROdW1iZXIgPSBkZWNvZGVyLmRlY29kZVN0cnVjdChjb2Rl
Yy5VaW50OCk7Ci0gICAgZGVjb2Rlci5za2lwKDEpOwotICAgIGRlY29kZXIuc2tpcCgxKTsKLSAg
ICBkZWNvZGVyLnNraXAoMSk7Ci0gICAgdmFsLmxlbmd0aCA9IGRlY29kZXIuZGVjb2RlU3RydWN0
KGNvZGVjLlVpbnQzMik7Ci0gICAgdmFsLnRpbWVvdXQgPSBkZWNvZGVyLmRlY29kZVN0cnVjdChj
b2RlYy5VaW50MzIpOwotICAgIGRlY29kZXIuc2tpcCgxKTsKLSAgICBkZWNvZGVyLnNraXAoMSk7
Ci0gICAgZGVjb2Rlci5za2lwKDEpOwotICAgIGRlY29kZXIuc2tpcCgxKTsKLSAgICByZXR1cm4g
dmFsOwotICB9OwotCi0gIFVzYkRldmljZV9HZW5lcmljVHJhbnNmZXJJbl9QYXJhbXMuZW5jb2Rl
ID0gZnVuY3Rpb24oZW5jb2RlciwgdmFsKSB7Ci0gICAgdmFyIHBhY2tlZDsKLSAgICBlbmNvZGVy
LndyaXRlVWludDMyKFVzYkRldmljZV9HZW5lcmljVHJhbnNmZXJJbl9QYXJhbXMuZW5jb2RlZFNp
emUpOwotICAgIGVuY29kZXIud3JpdGVVaW50MzIoMCk7Ci0gICAgZW5jb2Rlci5lbmNvZGVTdHJ1
Y3QoY29kZWMuVWludDgsIHZhbC5lbmRwb2ludE51bWJlcik7Ci0gICAgZW5jb2Rlci5za2lwKDEp
OwotICAgIGVuY29kZXIuc2tpcCgxKTsKLSAgICBlbmNvZGVyLnNraXAoMSk7Ci0gICAgZW5jb2Rl
ci5lbmNvZGVTdHJ1Y3QoY29kZWMuVWludDMyLCB2YWwubGVuZ3RoKTsKLSAgICBlbmNvZGVyLmVu
Y29kZVN0cnVjdChjb2RlYy5VaW50MzIsIHZhbC50aW1lb3V0KTsKLSAgICBlbmNvZGVyLnNraXAo
MSk7Ci0gICAgZW5jb2Rlci5za2lwKDEpOwotICAgIGVuY29kZXIuc2tpcCgxKTsKLSAgICBlbmNv
ZGVyLnNraXAoMSk7Ci0gIH07Ci0gIGZ1bmN0aW9uIFVzYkRldmljZV9HZW5lcmljVHJhbnNmZXJJ
bl9SZXNwb25zZVBhcmFtcyh2YWx1ZXMpIHsKLSAgICB0aGlzLmluaXREZWZhdWx0c18oKTsKLSAg
ICB0aGlzLmluaXRGaWVsZHNfKHZhbHVlcyk7Ci0gIH0KLQotCi0gIFVzYkRldmljZV9HZW5lcmlj
VHJhbnNmZXJJbl9SZXNwb25zZVBhcmFtcy5wcm90b3R5cGUuaW5pdERlZmF1bHRzXyA9IGZ1bmN0
aW9uKCkgewotICAgIHRoaXMuc3RhdHVzID0gMDsKLSAgICB0aGlzLmRhdGEgPSBudWxsOwotICB9
OwotICBVc2JEZXZpY2VfR2VuZXJpY1RyYW5zZmVySW5fUmVzcG9uc2VQYXJhbXMucHJvdG90eXBl
LmluaXRGaWVsZHNfID0gZnVuY3Rpb24oZmllbGRzKSB7Ci0gICAgZm9yKHZhciBmaWVsZCBpbiBm
aWVsZHMpIHsKLSAgICAgICAgaWYgKHRoaXMuaGFzT3duUHJvcGVydHkoZmllbGQpKQotICAgICAg
ICAgIHRoaXNbZmllbGRdID0gZmllbGRzW2ZpZWxkXTsKLSAgICB9Ci0gIH07Ci0KLSAgVXNiRGV2
aWNlX0dlbmVyaWNUcmFuc2ZlckluX1Jlc3BvbnNlUGFyYW1zLnZhbGlkYXRlID0gZnVuY3Rpb24o
bWVzc2FnZVZhbGlkYXRvciwgb2Zmc2V0KSB7Ci0gICAgdmFyIGVycjsKLSAgICBlcnIgPSBtZXNz
YWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0SGVhZGVyKG9mZnNldCwgY29kZWMua1N0cnVjdEhl
YWRlclNpemUpOwotICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9O
RSkKLSAgICAgICAgcmV0dXJuIGVycjsKLQotICAgIHZhciBrVmVyc2lvblNpemVzID0gWwotICAg
ICAge3ZlcnNpb246IDAsIG51bUJ5dGVzOiAyNH0KLSAgICBdOwotICAgIGVyciA9IG1lc3NhZ2VW
YWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RWZXJzaW9uKG9mZnNldCwga1ZlcnNpb25TaXplcyk7Ci0g
ICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQotICAgICAgICBy
ZXR1cm4gZXJyOwotCi0KLSAgICAvLyB2YWxpZGF0ZSBVc2JEZXZpY2VfR2VuZXJpY1RyYW5zZmVy
SW5fUmVzcG9uc2VQYXJhbXMuc3RhdHVzCi0gICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxp
ZGF0ZUVudW0ob2Zmc2V0ICsgY29kZWMua1N0cnVjdEhlYWRlclNpemUgKyAwLCBVc2JUcmFuc2Zl
clN0YXR1cyk7Ci0gICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05F
KQotICAgICAgICByZXR1cm4gZXJyOwotCi0KLSAgICAvLyB2YWxpZGF0ZSBVc2JEZXZpY2VfR2Vu
ZXJpY1RyYW5zZmVySW5fUmVzcG9uc2VQYXJhbXMuZGF0YQotICAgIGVyciA9IG1lc3NhZ2VWYWxp
ZGF0b3IudmFsaWRhdGVBcnJheVBvaW50ZXIob2Zmc2V0ICsgY29kZWMua1N0cnVjdEhlYWRlclNp
emUgKyA4LCAxLCBjb2RlYy5VaW50OCwgZmFsc2UsIFswXSwgMCk7Ci0gICAgaWYgKGVyciAhPT0g
dmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQotICAgICAgICByZXR1cm4gZXJyOwotCi0g
ICAgcmV0dXJuIHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORTsKLSAgfTsKLQotICBVc2JE
ZXZpY2VfR2VuZXJpY1RyYW5zZmVySW5fUmVzcG9uc2VQYXJhbXMuZW5jb2RlZFNpemUgPSBjb2Rl
Yy5rU3RydWN0SGVhZGVyU2l6ZSArIDE2OwotCi0gIFVzYkRldmljZV9HZW5lcmljVHJhbnNmZXJJ
bl9SZXNwb25zZVBhcmFtcy5kZWNvZGUgPSBmdW5jdGlvbihkZWNvZGVyKSB7Ci0gICAgdmFyIHBh
Y2tlZDsKLSAgICB2YXIgdmFsID0gbmV3IFVzYkRldmljZV9HZW5lcmljVHJhbnNmZXJJbl9SZXNw
b25zZVBhcmFtcygpOwotICAgIHZhciBudW1iZXJPZkJ5dGVzID0gZGVjb2Rlci5yZWFkVWludDMy
KCk7Ci0gICAgdmFyIHZlcnNpb24gPSBkZWNvZGVyLnJlYWRVaW50MzIoKTsKLSAgICB2YWwuc3Rh
dHVzID0gZGVjb2Rlci5kZWNvZGVTdHJ1Y3QoY29kZWMuSW50MzIpOwotICAgIGRlY29kZXIuc2tp
cCgxKTsKLSAgICBkZWNvZGVyLnNraXAoMSk7Ci0gICAgZGVjb2Rlci5za2lwKDEpOwotICAgIGRl
Y29kZXIuc2tpcCgxKTsKLSAgICB2YWwuZGF0YSA9IGRlY29kZXIuZGVjb2RlQXJyYXlQb2ludGVy
KGNvZGVjLlVpbnQ4KTsKLSAgICByZXR1cm4gdmFsOwotICB9OwotCi0gIFVzYkRldmljZV9HZW5l
cmljVHJhbnNmZXJJbl9SZXNwb25zZVBhcmFtcy5lbmNvZGUgPSBmdW5jdGlvbihlbmNvZGVyLCB2
YWwpIHsKLSAgICB2YXIgcGFja2VkOwotICAgIGVuY29kZXIud3JpdGVVaW50MzIoVXNiRGV2aWNl
X0dlbmVyaWNUcmFuc2ZlckluX1Jlc3BvbnNlUGFyYW1zLmVuY29kZWRTaXplKTsKLSAgICBlbmNv
ZGVyLndyaXRlVWludDMyKDApOwotICAgIGVuY29kZXIuZW5jb2RlU3RydWN0KGNvZGVjLkludDMy
LCB2YWwuc3RhdHVzKTsKLSAgICBlbmNvZGVyLnNraXAoMSk7Ci0gICAgZW5jb2Rlci5za2lwKDEp
OwotICAgIGVuY29kZXIuc2tpcCgxKTsKLSAgICBlbmNvZGVyLnNraXAoMSk7Ci0gICAgZW5jb2Rl
ci5lbmNvZGVBcnJheVBvaW50ZXIoY29kZWMuVWludDgsIHZhbC5kYXRhKTsKLSAgfTsKLSAgZnVu
Y3Rpb24gVXNiRGV2aWNlX0dlbmVyaWNUcmFuc2Zlck91dF9QYXJhbXModmFsdWVzKSB7Ci0gICAg
dGhpcy5pbml0RGVmYXVsdHNfKCk7Ci0gICAgdGhpcy5pbml0RmllbGRzXyh2YWx1ZXMpOwotICB9
Ci0KLQotICBVc2JEZXZpY2VfR2VuZXJpY1RyYW5zZmVyT3V0X1BhcmFtcy5wcm90b3R5cGUuaW5p
dERlZmF1bHRzXyA9IGZ1bmN0aW9uKCkgewotICAgIHRoaXMuZW5kcG9pbnROdW1iZXIgPSAwOwot
ICAgIHRoaXMudGltZW91dCA9IDA7Ci0gICAgdGhpcy5kYXRhID0gbnVsbDsKLSAgfTsKLSAgVXNi
RGV2aWNlX0dlbmVyaWNUcmFuc2Zlck91dF9QYXJhbXMucHJvdG90eXBlLmluaXRGaWVsZHNfID0g
ZnVuY3Rpb24oZmllbGRzKSB7Ci0gICAgZm9yKHZhciBmaWVsZCBpbiBmaWVsZHMpIHsKLSAgICAg
ICAgaWYgKHRoaXMuaGFzT3duUHJvcGVydHkoZmllbGQpKQotICAgICAgICAgIHRoaXNbZmllbGRd
ID0gZmllbGRzW2ZpZWxkXTsKLSAgICB9Ci0gIH07Ci0KLSAgVXNiRGV2aWNlX0dlbmVyaWNUcmFu
c2Zlck91dF9QYXJhbXMudmFsaWRhdGUgPSBmdW5jdGlvbihtZXNzYWdlVmFsaWRhdG9yLCBvZmZz
ZXQpIHsKLSAgICB2YXIgZXJyOwotICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVT
dHJ1Y3RIZWFkZXIob2Zmc2V0LCBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSk7Ci0gICAgaWYgKGVy
ciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQotICAgICAgICByZXR1cm4gZXJy
OwotCi0gICAgdmFyIGtWZXJzaW9uU2l6ZXMgPSBbCi0gICAgICB7dmVyc2lvbjogMCwgbnVtQnl0
ZXM6IDI0fQotICAgIF07Ci0gICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVj
dFZlcnNpb24ob2Zmc2V0LCBrVmVyc2lvblNpemVzKTsKLSAgICBpZiAoZXJyICE9PSB2YWxpZGF0
b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCi0gICAgICAgIHJldHVybiBlcnI7Ci0KLQotCi0gICAg
Ly8gdmFsaWRhdGUgVXNiRGV2aWNlX0dlbmVyaWNUcmFuc2Zlck91dF9QYXJhbXMuZGF0YQotICAg
IGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVBcnJheVBvaW50ZXIob2Zmc2V0ICsgY29k
ZWMua1N0cnVjdEhlYWRlclNpemUgKyA4LCAxLCBjb2RlYy5VaW50OCwgZmFsc2UsIFswXSwgMCk7
Ci0gICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQotICAgICAg
ICByZXR1cm4gZXJyOwotCi0KLSAgICByZXR1cm4gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5O
T05FOwotICB9OwotCi0gIFVzYkRldmljZV9HZW5lcmljVHJhbnNmZXJPdXRfUGFyYW1zLmVuY29k
ZWRTaXplID0gY29kZWMua1N0cnVjdEhlYWRlclNpemUgKyAxNjsKLQotICBVc2JEZXZpY2VfR2Vu
ZXJpY1RyYW5zZmVyT3V0X1BhcmFtcy5kZWNvZGUgPSBmdW5jdGlvbihkZWNvZGVyKSB7Ci0gICAg
dmFyIHBhY2tlZDsKLSAgICB2YXIgdmFsID0gbmV3IFVzYkRldmljZV9HZW5lcmljVHJhbnNmZXJP
dXRfUGFyYW1zKCk7Ci0gICAgdmFyIG51bWJlck9mQnl0ZXMgPSBkZWNvZGVyLnJlYWRVaW50MzIo
KTsKLSAgICB2YXIgdmVyc2lvbiA9IGRlY29kZXIucmVhZFVpbnQzMigpOwotICAgIHZhbC5lbmRw
b2ludE51bWJlciA9IGRlY29kZXIuZGVjb2RlU3RydWN0KGNvZGVjLlVpbnQ4KTsKLSAgICBkZWNv
ZGVyLnNraXAoMSk7Ci0gICAgZGVjb2Rlci5za2lwKDEpOwotICAgIGRlY29kZXIuc2tpcCgxKTsK
LSAgICB2YWwudGltZW91dCA9IGRlY29kZXIuZGVjb2RlU3RydWN0KGNvZGVjLlVpbnQzMik7Ci0g
ICAgdmFsLmRhdGEgPSBkZWNvZGVyLmRlY29kZUFycmF5UG9pbnRlcihjb2RlYy5VaW50OCk7Ci0g
ICAgcmV0dXJuIHZhbDsKLSAgfTsKLQotICBVc2JEZXZpY2VfR2VuZXJpY1RyYW5zZmVyT3V0X1Bh
cmFtcy5lbmNvZGUgPSBmdW5jdGlvbihlbmNvZGVyLCB2YWwpIHsKLSAgICB2YXIgcGFja2VkOwot
ICAgIGVuY29kZXIud3JpdGVVaW50MzIoVXNiRGV2aWNlX0dlbmVyaWNUcmFuc2Zlck91dF9QYXJh
bXMuZW5jb2RlZFNpemUpOwotICAgIGVuY29kZXIud3JpdGVVaW50MzIoMCk7Ci0gICAgZW5jb2Rl
ci5lbmNvZGVTdHJ1Y3QoY29kZWMuVWludDgsIHZhbC5lbmRwb2ludE51bWJlcik7Ci0gICAgZW5j
b2Rlci5za2lwKDEpOwotICAgIGVuY29kZXIuc2tpcCgxKTsKLSAgICBlbmNvZGVyLnNraXAoMSk7
Ci0gICAgZW5jb2Rlci5lbmNvZGVTdHJ1Y3QoY29kZWMuVWludDMyLCB2YWwudGltZW91dCk7Ci0g
ICAgZW5jb2Rlci5lbmNvZGVBcnJheVBvaW50ZXIoY29kZWMuVWludDgsIHZhbC5kYXRhKTsKLSAg
fTsKLSAgZnVuY3Rpb24gVXNiRGV2aWNlX0dlbmVyaWNUcmFuc2Zlck91dF9SZXNwb25zZVBhcmFt
cyh2YWx1ZXMpIHsKLSAgICB0aGlzLmluaXREZWZhdWx0c18oKTsKLSAgICB0aGlzLmluaXRGaWVs
ZHNfKHZhbHVlcyk7Ci0gIH0KLQotCi0gIFVzYkRldmljZV9HZW5lcmljVHJhbnNmZXJPdXRfUmVz
cG9uc2VQYXJhbXMucHJvdG90eXBlLmluaXREZWZhdWx0c18gPSBmdW5jdGlvbigpIHsKLSAgICB0
aGlzLnN0YXR1cyA9IDA7Ci0gIH07Ci0gIFVzYkRldmljZV9HZW5lcmljVHJhbnNmZXJPdXRfUmVz
cG9uc2VQYXJhbXMucHJvdG90eXBlLmluaXRGaWVsZHNfID0gZnVuY3Rpb24oZmllbGRzKSB7Ci0g
ICAgZm9yKHZhciBmaWVsZCBpbiBmaWVsZHMpIHsKLSAgICAgICAgaWYgKHRoaXMuaGFzT3duUHJv
cGVydHkoZmllbGQpKQotICAgICAgICAgIHRoaXNbZmllbGRdID0gZmllbGRzW2ZpZWxkXTsKLSAg
ICB9Ci0gIH07Ci0KLSAgVXNiRGV2aWNlX0dlbmVyaWNUcmFuc2Zlck91dF9SZXNwb25zZVBhcmFt
cy52YWxpZGF0ZSA9IGZ1bmN0aW9uKG1lc3NhZ2VWYWxpZGF0b3IsIG9mZnNldCkgewotICAgIHZh
ciBlcnI7Ci0gICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdEhlYWRlcihv
ZmZzZXQsIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplKTsKLSAgICBpZiAoZXJyICE9PSB2YWxpZGF0
b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCi0gICAgICAgIHJldHVybiBlcnI7Ci0KLSAgICB2YXIg
a1ZlcnNpb25TaXplcyA9IFsKLSAgICAgIHt2ZXJzaW9uOiAwLCBudW1CeXRlczogMTZ9Ci0gICAg
XTsKLSAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0VmVyc2lvbihvZmZz
ZXQsIGtWZXJzaW9uU2l6ZXMpOwotICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9u
RXJyb3IuTk9ORSkKLSAgICAgICAgcmV0dXJuIGVycjsKLQotCi0gICAgLy8gdmFsaWRhdGUgVXNi
RGV2aWNlX0dlbmVyaWNUcmFuc2Zlck91dF9SZXNwb25zZVBhcmFtcy5zdGF0dXMKLSAgICBlcnIg
PSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlRW51bShvZmZzZXQgKyBjb2RlYy5rU3RydWN0SGVh
ZGVyU2l6ZSArIDAsIFVzYlRyYW5zZmVyU3RhdHVzKTsKLSAgICBpZiAoZXJyICE9PSB2YWxpZGF0
b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCi0gICAgICAgIHJldHVybiBlcnI7Ci0KLSAgICByZXR1
cm4gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FOwotICB9OwotCi0gIFVzYkRldmljZV9H
ZW5lcmljVHJhbnNmZXJPdXRfUmVzcG9uc2VQYXJhbXMuZW5jb2RlZFNpemUgPSBjb2RlYy5rU3Ry
dWN0SGVhZGVyU2l6ZSArIDg7Ci0KLSAgVXNiRGV2aWNlX0dlbmVyaWNUcmFuc2Zlck91dF9SZXNw
b25zZVBhcmFtcy5kZWNvZGUgPSBmdW5jdGlvbihkZWNvZGVyKSB7Ci0gICAgdmFyIHBhY2tlZDsK
LSAgICB2YXIgdmFsID0gbmV3IFVzYkRldmljZV9HZW5lcmljVHJhbnNmZXJPdXRfUmVzcG9uc2VQ
YXJhbXMoKTsKLSAgICB2YXIgbnVtYmVyT2ZCeXRlcyA9IGRlY29kZXIucmVhZFVpbnQzMigpOwot
ICAgIHZhciB2ZXJzaW9uID0gZGVjb2Rlci5yZWFkVWludDMyKCk7Ci0gICAgdmFsLnN0YXR1cyA9
IGRlY29kZXIuZGVjb2RlU3RydWN0KGNvZGVjLkludDMyKTsKLSAgICBkZWNvZGVyLnNraXAoMSk7
Ci0gICAgZGVjb2Rlci5za2lwKDEpOwotICAgIGRlY29kZXIuc2tpcCgxKTsKLSAgICBkZWNvZGVy
LnNraXAoMSk7Ci0gICAgcmV0dXJuIHZhbDsKLSAgfTsKLQotICBVc2JEZXZpY2VfR2VuZXJpY1Ry
YW5zZmVyT3V0X1Jlc3BvbnNlUGFyYW1zLmVuY29kZSA9IGZ1bmN0aW9uKGVuY29kZXIsIHZhbCkg
ewotICAgIHZhciBwYWNrZWQ7Ci0gICAgZW5jb2Rlci53cml0ZVVpbnQzMihVc2JEZXZpY2VfR2Vu
ZXJpY1RyYW5zZmVyT3V0X1Jlc3BvbnNlUGFyYW1zLmVuY29kZWRTaXplKTsKLSAgICBlbmNvZGVy
LndyaXRlVWludDMyKDApOwotICAgIGVuY29kZXIuZW5jb2RlU3RydWN0KGNvZGVjLkludDMyLCB2
YWwuc3RhdHVzKTsKLSAgICBlbmNvZGVyLnNraXAoMSk7Ci0gICAgZW5jb2Rlci5za2lwKDEpOwot
ICAgIGVuY29kZXIuc2tpcCgxKTsKLSAgICBlbmNvZGVyLnNraXAoMSk7Ci0gIH07Ci0gIGZ1bmN0
aW9uIFVzYkRldmljZV9Jc29jaHJvbm91c1RyYW5zZmVySW5fUGFyYW1zKHZhbHVlcykgewotICAg
IHRoaXMuaW5pdERlZmF1bHRzXygpOwotICAgIHRoaXMuaW5pdEZpZWxkc18odmFsdWVzKTsKLSAg
fQotCi0KLSAgVXNiRGV2aWNlX0lzb2Nocm9ub3VzVHJhbnNmZXJJbl9QYXJhbXMucHJvdG90eXBl
LmluaXREZWZhdWx0c18gPSBmdW5jdGlvbigpIHsKLSAgICB0aGlzLmVuZHBvaW50TnVtYmVyID0g
MDsKLSAgICB0aGlzLnRpbWVvdXQgPSAwOwotICAgIHRoaXMucGFja2V0TGVuZ3RocyA9IG51bGw7
Ci0gIH07Ci0gIFVzYkRldmljZV9Jc29jaHJvbm91c1RyYW5zZmVySW5fUGFyYW1zLnByb3RvdHlw
ZS5pbml0RmllbGRzXyA9IGZ1bmN0aW9uKGZpZWxkcykgewotICAgIGZvcih2YXIgZmllbGQgaW4g
ZmllbGRzKSB7Ci0gICAgICAgIGlmICh0aGlzLmhhc093blByb3BlcnR5KGZpZWxkKSkKLSAgICAg
ICAgICB0aGlzW2ZpZWxkXSA9IGZpZWxkc1tmaWVsZF07Ci0gICAgfQotICB9OwotCi0gIFVzYkRl
dmljZV9Jc29jaHJvbm91c1RyYW5zZmVySW5fUGFyYW1zLnZhbGlkYXRlID0gZnVuY3Rpb24obWVz
c2FnZVZhbGlkYXRvciwgb2Zmc2V0KSB7Ci0gICAgdmFyIGVycjsKLSAgICBlcnIgPSBtZXNzYWdl
VmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0SGVhZGVyKG9mZnNldCwgY29kZWMua1N0cnVjdEhlYWRl
clNpemUpOwotICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkK
LSAgICAgICAgcmV0dXJuIGVycjsKLQotICAgIHZhciBrVmVyc2lvblNpemVzID0gWwotICAgICAg
e3ZlcnNpb246IDAsIG51bUJ5dGVzOiAyNH0KLSAgICBdOwotICAgIGVyciA9IG1lc3NhZ2VWYWxp
ZGF0b3IudmFsaWRhdGVTdHJ1Y3RWZXJzaW9uKG9mZnNldCwga1ZlcnNpb25TaXplcyk7Ci0gICAg
aWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQotICAgICAgICByZXR1
cm4gZXJyOwotCi0KLQotICAgIC8vIHZhbGlkYXRlIFVzYkRldmljZV9Jc29jaHJvbm91c1RyYW5z
ZmVySW5fUGFyYW1zLnBhY2tldExlbmd0aHMKLSAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZh
bGlkYXRlQXJyYXlQb2ludGVyKG9mZnNldCArIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgOCwg
NCwgY29kZWMuVWludDMyLCBmYWxzZSwgWzBdLCAwKTsKLSAgICBpZiAoZXJyICE9PSB2YWxpZGF0
b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCi0gICAgICAgIHJldHVybiBlcnI7Ci0KLQotICAgIHJl
dHVybiB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkU7Ci0gIH07Ci0KLSAgVXNiRGV2aWNl
X0lzb2Nocm9ub3VzVHJhbnNmZXJJbl9QYXJhbXMuZW5jb2RlZFNpemUgPSBjb2RlYy5rU3RydWN0
SGVhZGVyU2l6ZSArIDE2OwotCi0gIFVzYkRldmljZV9Jc29jaHJvbm91c1RyYW5zZmVySW5fUGFy
YW1zLmRlY29kZSA9IGZ1bmN0aW9uKGRlY29kZXIpIHsKLSAgICB2YXIgcGFja2VkOwotICAgIHZh
ciB2YWwgPSBuZXcgVXNiRGV2aWNlX0lzb2Nocm9ub3VzVHJhbnNmZXJJbl9QYXJhbXMoKTsKLSAg
ICB2YXIgbnVtYmVyT2ZCeXRlcyA9IGRlY29kZXIucmVhZFVpbnQzMigpOwotICAgIHZhciB2ZXJz
aW9uID0gZGVjb2Rlci5yZWFkVWludDMyKCk7Ci0gICAgdmFsLmVuZHBvaW50TnVtYmVyID0gZGVj
b2Rlci5kZWNvZGVTdHJ1Y3QoY29kZWMuVWludDgpOwotICAgIGRlY29kZXIuc2tpcCgxKTsKLSAg
ICBkZWNvZGVyLnNraXAoMSk7Ci0gICAgZGVjb2Rlci5za2lwKDEpOwotICAgIHZhbC50aW1lb3V0
ID0gZGVjb2Rlci5kZWNvZGVTdHJ1Y3QoY29kZWMuVWludDMyKTsKLSAgICB2YWwucGFja2V0TGVu
Z3RocyA9IGRlY29kZXIuZGVjb2RlQXJyYXlQb2ludGVyKGNvZGVjLlVpbnQzMik7Ci0gICAgcmV0
dXJuIHZhbDsKLSAgfTsKLQotICBVc2JEZXZpY2VfSXNvY2hyb25vdXNUcmFuc2ZlckluX1BhcmFt
cy5lbmNvZGUgPSBmdW5jdGlvbihlbmNvZGVyLCB2YWwpIHsKLSAgICB2YXIgcGFja2VkOwotICAg
IGVuY29kZXIud3JpdGVVaW50MzIoVXNiRGV2aWNlX0lzb2Nocm9ub3VzVHJhbnNmZXJJbl9QYXJh
bXMuZW5jb2RlZFNpemUpOwotICAgIGVuY29kZXIud3JpdGVVaW50MzIoMCk7Ci0gICAgZW5jb2Rl
ci5lbmNvZGVTdHJ1Y3QoY29kZWMuVWludDgsIHZhbC5lbmRwb2ludE51bWJlcik7Ci0gICAgZW5j
b2Rlci5za2lwKDEpOwotICAgIGVuY29kZXIuc2tpcCgxKTsKLSAgICBlbmNvZGVyLnNraXAoMSk7
Ci0gICAgZW5jb2Rlci5lbmNvZGVTdHJ1Y3QoY29kZWMuVWludDMyLCB2YWwudGltZW91dCk7Ci0g
ICAgZW5jb2Rlci5lbmNvZGVBcnJheVBvaW50ZXIoY29kZWMuVWludDMyLCB2YWwucGFja2V0TGVu
Z3Rocyk7Ci0gIH07Ci0gIGZ1bmN0aW9uIFVzYkRldmljZV9Jc29jaHJvbm91c1RyYW5zZmVySW5f
UmVzcG9uc2VQYXJhbXModmFsdWVzKSB7Ci0gICAgdGhpcy5pbml0RGVmYXVsdHNfKCk7Ci0gICAg
dGhpcy5pbml0RmllbGRzXyh2YWx1ZXMpOwotICB9Ci0KLQotICBVc2JEZXZpY2VfSXNvY2hyb25v
dXNUcmFuc2ZlckluX1Jlc3BvbnNlUGFyYW1zLnByb3RvdHlwZS5pbml0RGVmYXVsdHNfID0gZnVu
Y3Rpb24oKSB7Ci0gICAgdGhpcy5kYXRhID0gbnVsbDsKLSAgICB0aGlzLnBhY2tldHMgPSBudWxs
OwotICB9OwotICBVc2JEZXZpY2VfSXNvY2hyb25vdXNUcmFuc2ZlckluX1Jlc3BvbnNlUGFyYW1z
LnByb3RvdHlwZS5pbml0RmllbGRzXyA9IGZ1bmN0aW9uKGZpZWxkcykgewotICAgIGZvcih2YXIg
ZmllbGQgaW4gZmllbGRzKSB7Ci0gICAgICAgIGlmICh0aGlzLmhhc093blByb3BlcnR5KGZpZWxk
KSkKLSAgICAgICAgICB0aGlzW2ZpZWxkXSA9IGZpZWxkc1tmaWVsZF07Ci0gICAgfQotICB9Owot
Ci0gIFVzYkRldmljZV9Jc29jaHJvbm91c1RyYW5zZmVySW5fUmVzcG9uc2VQYXJhbXMudmFsaWRh
dGUgPSBmdW5jdGlvbihtZXNzYWdlVmFsaWRhdG9yLCBvZmZzZXQpIHsKLSAgICB2YXIgZXJyOwot
ICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RIZWFkZXIob2Zmc2V0LCBj
b2RlYy5rU3RydWN0SGVhZGVyU2l6ZSk7Ci0gICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlk
YXRpb25FcnJvci5OT05FKQotICAgICAgICByZXR1cm4gZXJyOwotCi0gICAgdmFyIGtWZXJzaW9u
U2l6ZXMgPSBbCi0gICAgICB7dmVyc2lvbjogMCwgbnVtQnl0ZXM6IDI0fQotICAgIF07Ci0gICAg
ZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdFZlcnNpb24ob2Zmc2V0LCBrVmVy
c2lvblNpemVzKTsKLSAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5P
TkUpCi0gICAgICAgIHJldHVybiBlcnI7Ci0KLQotICAgIC8vIHZhbGlkYXRlIFVzYkRldmljZV9J
c29jaHJvbm91c1RyYW5zZmVySW5fUmVzcG9uc2VQYXJhbXMuZGF0YQotICAgIGVyciA9IG1lc3Nh
Z2VWYWxpZGF0b3IudmFsaWRhdGVBcnJheVBvaW50ZXIob2Zmc2V0ICsgY29kZWMua1N0cnVjdEhl
YWRlclNpemUgKyAwLCAxLCBjb2RlYy5VaW50OCwgZmFsc2UsIFswXSwgMCk7Ci0gICAgaWYgKGVy
ciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQotICAgICAgICByZXR1cm4gZXJy
OwotCi0KLSAgICAvLyB2YWxpZGF0ZSBVc2JEZXZpY2VfSXNvY2hyb25vdXNUcmFuc2ZlckluX1Jl
c3BvbnNlUGFyYW1zLnBhY2tldHMKLSAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRl
QXJyYXlQb2ludGVyKG9mZnNldCArIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgOCwgOCwgbmV3
IGNvZGVjLlBvaW50ZXJUbyhVc2JJc29jaHJvbm91c1BhY2tldCksIGZhbHNlLCBbMF0sIDApOwot
ICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKLSAgICAgICAg
cmV0dXJuIGVycjsKLQotICAgIHJldHVybiB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkU7
Ci0gIH07Ci0KLSAgVXNiRGV2aWNlX0lzb2Nocm9ub3VzVHJhbnNmZXJJbl9SZXNwb25zZVBhcmFt
cy5lbmNvZGVkU2l6ZSA9IGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgMTY7Ci0KLSAgVXNiRGV2
aWNlX0lzb2Nocm9ub3VzVHJhbnNmZXJJbl9SZXNwb25zZVBhcmFtcy5kZWNvZGUgPSBmdW5jdGlv
bihkZWNvZGVyKSB7Ci0gICAgdmFyIHBhY2tlZDsKLSAgICB2YXIgdmFsID0gbmV3IFVzYkRldmlj
ZV9Jc29jaHJvbm91c1RyYW5zZmVySW5fUmVzcG9uc2VQYXJhbXMoKTsKLSAgICB2YXIgbnVtYmVy
T2ZCeXRlcyA9IGRlY29kZXIucmVhZFVpbnQzMigpOwotICAgIHZhciB2ZXJzaW9uID0gZGVjb2Rl
ci5yZWFkVWludDMyKCk7Ci0gICAgdmFsLmRhdGEgPSBkZWNvZGVyLmRlY29kZUFycmF5UG9pbnRl
cihjb2RlYy5VaW50OCk7Ci0gICAgdmFsLnBhY2tldHMgPSBkZWNvZGVyLmRlY29kZUFycmF5UG9p
bnRlcihuZXcgY29kZWMuUG9pbnRlclRvKFVzYklzb2Nocm9ub3VzUGFja2V0KSk7Ci0gICAgcmV0
dXJuIHZhbDsKLSAgfTsKLQotICBVc2JEZXZpY2VfSXNvY2hyb25vdXNUcmFuc2ZlckluX1Jlc3Bv
bnNlUGFyYW1zLmVuY29kZSA9IGZ1bmN0aW9uKGVuY29kZXIsIHZhbCkgewotICAgIHZhciBwYWNr
ZWQ7Ci0gICAgZW5jb2Rlci53cml0ZVVpbnQzMihVc2JEZXZpY2VfSXNvY2hyb25vdXNUcmFuc2Zl
ckluX1Jlc3BvbnNlUGFyYW1zLmVuY29kZWRTaXplKTsKLSAgICBlbmNvZGVyLndyaXRlVWludDMy
KDApOwotICAgIGVuY29kZXIuZW5jb2RlQXJyYXlQb2ludGVyKGNvZGVjLlVpbnQ4LCB2YWwuZGF0
YSk7Ci0gICAgZW5jb2Rlci5lbmNvZGVBcnJheVBvaW50ZXIobmV3IGNvZGVjLlBvaW50ZXJUbyhV
c2JJc29jaHJvbm91c1BhY2tldCksIHZhbC5wYWNrZXRzKTsKLSAgfTsKLSAgZnVuY3Rpb24gVXNi
RGV2aWNlX0lzb2Nocm9ub3VzVHJhbnNmZXJPdXRfUGFyYW1zKHZhbHVlcykgewotICAgIHRoaXMu
aW5pdERlZmF1bHRzXygpOwotICAgIHRoaXMuaW5pdEZpZWxkc18odmFsdWVzKTsKLSAgfQotCi0K
LSAgVXNiRGV2aWNlX0lzb2Nocm9ub3VzVHJhbnNmZXJPdXRfUGFyYW1zLnByb3RvdHlwZS5pbml0
RGVmYXVsdHNfID0gZnVuY3Rpb24oKSB7Ci0gICAgdGhpcy5lbmRwb2ludE51bWJlciA9IDA7Ci0g
ICAgdGhpcy50aW1lb3V0ID0gMDsKLSAgICB0aGlzLmRhdGEgPSBudWxsOwotICAgIHRoaXMucGFj
a2V0TGVuZ3RocyA9IG51bGw7Ci0gIH07Ci0gIFVzYkRldmljZV9Jc29jaHJvbm91c1RyYW5zZmVy
T3V0X1BhcmFtcy5wcm90b3R5cGUuaW5pdEZpZWxkc18gPSBmdW5jdGlvbihmaWVsZHMpIHsKLSAg
ICBmb3IodmFyIGZpZWxkIGluIGZpZWxkcykgewotICAgICAgICBpZiAodGhpcy5oYXNPd25Qcm9w
ZXJ0eShmaWVsZCkpCi0gICAgICAgICAgdGhpc1tmaWVsZF0gPSBmaWVsZHNbZmllbGRdOwotICAg
IH0KLSAgfTsKLQotICBVc2JEZXZpY2VfSXNvY2hyb25vdXNUcmFuc2Zlck91dF9QYXJhbXMudmFs
aWRhdGUgPSBmdW5jdGlvbihtZXNzYWdlVmFsaWRhdG9yLCBvZmZzZXQpIHsKLSAgICB2YXIgZXJy
OwotICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RIZWFkZXIob2Zmc2V0
LCBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSk7Ci0gICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZh
bGlkYXRpb25FcnJvci5OT05FKQotICAgICAgICByZXR1cm4gZXJyOwotCi0gICAgdmFyIGtWZXJz
aW9uU2l6ZXMgPSBbCi0gICAgICB7dmVyc2lvbjogMCwgbnVtQnl0ZXM6IDMyfQotICAgIF07Ci0g
ICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdFZlcnNpb24ob2Zmc2V0LCBr
VmVyc2lvblNpemVzKTsKLSAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9y
Lk5PTkUpCi0gICAgICAgIHJldHVybiBlcnI7Ci0KLQotCi0gICAgLy8gdmFsaWRhdGUgVXNiRGV2
aWNlX0lzb2Nocm9ub3VzVHJhbnNmZXJPdXRfUGFyYW1zLmRhdGEKLSAgICBlcnIgPSBtZXNzYWdl
VmFsaWRhdG9yLnZhbGlkYXRlQXJyYXlQb2ludGVyKG9mZnNldCArIGNvZGVjLmtTdHJ1Y3RIZWFk
ZXJTaXplICsgOCwgMSwgY29kZWMuVWludDgsIGZhbHNlLCBbMF0sIDApOwotICAgIGlmIChlcnIg
IT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKLSAgICAgICAgcmV0dXJuIGVycjsK
LQotCi0gICAgLy8gdmFsaWRhdGUgVXNiRGV2aWNlX0lzb2Nocm9ub3VzVHJhbnNmZXJPdXRfUGFy
YW1zLnBhY2tldExlbmd0aHMKLSAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlQXJy
YXlQb2ludGVyKG9mZnNldCArIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgMTYsIDQsIGNvZGVj
LlVpbnQzMiwgZmFsc2UsIFswXSwgMCk7Ci0gICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlk
YXRpb25FcnJvci5OT05FKQotICAgICAgICByZXR1cm4gZXJyOwotCi0KLSAgICByZXR1cm4gdmFs
aWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FOwotICB9OwotCi0gIFVzYkRldmljZV9Jc29jaHJv
bm91c1RyYW5zZmVyT3V0X1BhcmFtcy5lbmNvZGVkU2l6ZSA9IGNvZGVjLmtTdHJ1Y3RIZWFkZXJT
aXplICsgMjQ7Ci0KLSAgVXNiRGV2aWNlX0lzb2Nocm9ub3VzVHJhbnNmZXJPdXRfUGFyYW1zLmRl
Y29kZSA9IGZ1bmN0aW9uKGRlY29kZXIpIHsKLSAgICB2YXIgcGFja2VkOwotICAgIHZhciB2YWwg
PSBuZXcgVXNiRGV2aWNlX0lzb2Nocm9ub3VzVHJhbnNmZXJPdXRfUGFyYW1zKCk7Ci0gICAgdmFy
IG51bWJlck9mQnl0ZXMgPSBkZWNvZGVyLnJlYWRVaW50MzIoKTsKLSAgICB2YXIgdmVyc2lvbiA9
IGRlY29kZXIucmVhZFVpbnQzMigpOwotICAgIHZhbC5lbmRwb2ludE51bWJlciA9IGRlY29kZXIu
ZGVjb2RlU3RydWN0KGNvZGVjLlVpbnQ4KTsKLSAgICBkZWNvZGVyLnNraXAoMSk7Ci0gICAgZGVj
b2Rlci5za2lwKDEpOwotICAgIGRlY29kZXIuc2tpcCgxKTsKLSAgICB2YWwudGltZW91dCA9IGRl
Y29kZXIuZGVjb2RlU3RydWN0KGNvZGVjLlVpbnQzMik7Ci0gICAgdmFsLmRhdGEgPSBkZWNvZGVy
LmRlY29kZUFycmF5UG9pbnRlcihjb2RlYy5VaW50OCk7Ci0gICAgdmFsLnBhY2tldExlbmd0aHMg
PSBkZWNvZGVyLmRlY29kZUFycmF5UG9pbnRlcihjb2RlYy5VaW50MzIpOwotICAgIHJldHVybiB2
YWw7Ci0gIH07Ci0KLSAgVXNiRGV2aWNlX0lzb2Nocm9ub3VzVHJhbnNmZXJPdXRfUGFyYW1zLmVu
Y29kZSA9IGZ1bmN0aW9uKGVuY29kZXIsIHZhbCkgewotICAgIHZhciBwYWNrZWQ7Ci0gICAgZW5j
b2Rlci53cml0ZVVpbnQzMihVc2JEZXZpY2VfSXNvY2hyb25vdXNUcmFuc2Zlck91dF9QYXJhbXMu
ZW5jb2RlZFNpemUpOwotICAgIGVuY29kZXIud3JpdGVVaW50MzIoMCk7Ci0gICAgZW5jb2Rlci5l
bmNvZGVTdHJ1Y3QoY29kZWMuVWludDgsIHZhbC5lbmRwb2ludE51bWJlcik7Ci0gICAgZW5jb2Rl
ci5za2lwKDEpOwotICAgIGVuY29kZXIuc2tpcCgxKTsKLSAgICBlbmNvZGVyLnNraXAoMSk7Ci0g
ICAgZW5jb2Rlci5lbmNvZGVTdHJ1Y3QoY29kZWMuVWludDMyLCB2YWwudGltZW91dCk7Ci0gICAg
ZW5jb2Rlci5lbmNvZGVBcnJheVBvaW50ZXIoY29kZWMuVWludDgsIHZhbC5kYXRhKTsKLSAgICBl
bmNvZGVyLmVuY29kZUFycmF5UG9pbnRlcihjb2RlYy5VaW50MzIsIHZhbC5wYWNrZXRMZW5ndGhz
KTsKLSAgfTsKLSAgZnVuY3Rpb24gVXNiRGV2aWNlX0lzb2Nocm9ub3VzVHJhbnNmZXJPdXRfUmVz
cG9uc2VQYXJhbXModmFsdWVzKSB7Ci0gICAgdGhpcy5pbml0RGVmYXVsdHNfKCk7Ci0gICAgdGhp
cy5pbml0RmllbGRzXyh2YWx1ZXMpOwotICB9Ci0KLQotICBVc2JEZXZpY2VfSXNvY2hyb25vdXNU
cmFuc2Zlck91dF9SZXNwb25zZVBhcmFtcy5wcm90b3R5cGUuaW5pdERlZmF1bHRzXyA9IGZ1bmN0
aW9uKCkgewotICAgIHRoaXMucGFja2V0cyA9IG51bGw7Ci0gIH07Ci0gIFVzYkRldmljZV9Jc29j
aHJvbm91c1RyYW5zZmVyT3V0X1Jlc3BvbnNlUGFyYW1zLnByb3RvdHlwZS5pbml0RmllbGRzXyA9
IGZ1bmN0aW9uKGZpZWxkcykgewotICAgIGZvcih2YXIgZmllbGQgaW4gZmllbGRzKSB7Ci0gICAg
ICAgIGlmICh0aGlzLmhhc093blByb3BlcnR5KGZpZWxkKSkKLSAgICAgICAgICB0aGlzW2ZpZWxk
XSA9IGZpZWxkc1tmaWVsZF07Ci0gICAgfQotICB9OwotCi0gIFVzYkRldmljZV9Jc29jaHJvbm91
c1RyYW5zZmVyT3V0X1Jlc3BvbnNlUGFyYW1zLnZhbGlkYXRlID0gZnVuY3Rpb24obWVzc2FnZVZh
bGlkYXRvciwgb2Zmc2V0KSB7Ci0gICAgdmFyIGVycjsKLSAgICBlcnIgPSBtZXNzYWdlVmFsaWRh
dG9yLnZhbGlkYXRlU3RydWN0SGVhZGVyKG9mZnNldCwgY29kZWMua1N0cnVjdEhlYWRlclNpemUp
OwotICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKLSAgICAg
ICAgcmV0dXJuIGVycjsKLQotICAgIHZhciBrVmVyc2lvblNpemVzID0gWwotICAgICAge3ZlcnNp
b246IDAsIG51bUJ5dGVzOiAxNn0KLSAgICBdOwotICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3Iu
dmFsaWRhdGVTdHJ1Y3RWZXJzaW9uKG9mZnNldCwga1ZlcnNpb25TaXplcyk7Ci0gICAgaWYgKGVy
ciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQotICAgICAgICByZXR1cm4gZXJy
OwotCi0KLSAgICAvLyB2YWxpZGF0ZSBVc2JEZXZpY2VfSXNvY2hyb25vdXNUcmFuc2Zlck91dF9S
ZXNwb25zZVBhcmFtcy5wYWNrZXRzCi0gICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0
ZUFycmF5UG9pbnRlcihvZmZzZXQgKyBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDAsIDgsIG5l
dyBjb2RlYy5Qb2ludGVyVG8oVXNiSXNvY2hyb25vdXNQYWNrZXQpLCBmYWxzZSwgWzBdLCAwKTsK
LSAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCi0gICAgICAg
IHJldHVybiBlcnI7Ci0KLSAgICByZXR1cm4gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05F
OwotICB9OwotCi0gIFVzYkRldmljZV9Jc29jaHJvbm91c1RyYW5zZmVyT3V0X1Jlc3BvbnNlUGFy
YW1zLmVuY29kZWRTaXplID0gY29kZWMua1N0cnVjdEhlYWRlclNpemUgKyA4OwotCi0gIFVzYkRl
dmljZV9Jc29jaHJvbm91c1RyYW5zZmVyT3V0X1Jlc3BvbnNlUGFyYW1zLmRlY29kZSA9IGZ1bmN0
aW9uKGRlY29kZXIpIHsKLSAgICB2YXIgcGFja2VkOwotICAgIHZhciB2YWwgPSBuZXcgVXNiRGV2
aWNlX0lzb2Nocm9ub3VzVHJhbnNmZXJPdXRfUmVzcG9uc2VQYXJhbXMoKTsKLSAgICB2YXIgbnVt
YmVyT2ZCeXRlcyA9IGRlY29kZXIucmVhZFVpbnQzMigpOwotICAgIHZhciB2ZXJzaW9uID0gZGVj
b2Rlci5yZWFkVWludDMyKCk7Ci0gICAgdmFsLnBhY2tldHMgPSBkZWNvZGVyLmRlY29kZUFycmF5
UG9pbnRlcihuZXcgY29kZWMuUG9pbnRlclRvKFVzYklzb2Nocm9ub3VzUGFja2V0KSk7Ci0gICAg
cmV0dXJuIHZhbDsKLSAgfTsKLQotICBVc2JEZXZpY2VfSXNvY2hyb25vdXNUcmFuc2Zlck91dF9S
ZXNwb25zZVBhcmFtcy5lbmNvZGUgPSBmdW5jdGlvbihlbmNvZGVyLCB2YWwpIHsKLSAgICB2YXIg
cGFja2VkOwotICAgIGVuY29kZXIud3JpdGVVaW50MzIoVXNiRGV2aWNlX0lzb2Nocm9ub3VzVHJh
bnNmZXJPdXRfUmVzcG9uc2VQYXJhbXMuZW5jb2RlZFNpemUpOwotICAgIGVuY29kZXIud3JpdGVV
aW50MzIoMCk7Ci0gICAgZW5jb2Rlci5lbmNvZGVBcnJheVBvaW50ZXIobmV3IGNvZGVjLlBvaW50
ZXJUbyhVc2JJc29jaHJvbm91c1BhY2tldCksIHZhbC5wYWNrZXRzKTsKLSAgfTsKLSAgZnVuY3Rp
b24gVXNiRGV2aWNlQ2xpZW50X09uRGV2aWNlT3BlbmVkX1BhcmFtcyh2YWx1ZXMpIHsKLSAgICB0
aGlzLmluaXREZWZhdWx0c18oKTsKLSAgICB0aGlzLmluaXRGaWVsZHNfKHZhbHVlcyk7Ci0gIH0K
LQotCi0gIFVzYkRldmljZUNsaWVudF9PbkRldmljZU9wZW5lZF9QYXJhbXMucHJvdG90eXBlLmlu
aXREZWZhdWx0c18gPSBmdW5jdGlvbigpIHsKLSAgfTsKLSAgVXNiRGV2aWNlQ2xpZW50X09uRGV2
aWNlT3BlbmVkX1BhcmFtcy5wcm90b3R5cGUuaW5pdEZpZWxkc18gPSBmdW5jdGlvbihmaWVsZHMp
IHsKLSAgICBmb3IodmFyIGZpZWxkIGluIGZpZWxkcykgewotICAgICAgICBpZiAodGhpcy5oYXNP
d25Qcm9wZXJ0eShmaWVsZCkpCi0gICAgICAgICAgdGhpc1tmaWVsZF0gPSBmaWVsZHNbZmllbGRd
OwotICAgIH0KLSAgfTsKLQotICBVc2JEZXZpY2VDbGllbnRfT25EZXZpY2VPcGVuZWRfUGFyYW1z
LnZhbGlkYXRlID0gZnVuY3Rpb24obWVzc2FnZVZhbGlkYXRvciwgb2Zmc2V0KSB7Ci0gICAgdmFy
IGVycjsKLSAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0SGVhZGVyKG9m
ZnNldCwgY29kZWMua1N0cnVjdEhlYWRlclNpemUpOwotICAgIGlmIChlcnIgIT09IHZhbGlkYXRv
ci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKLSAgICAgICAgcmV0dXJuIGVycjsKLQotICAgIHZhciBr
VmVyc2lvblNpemVzID0gWwotICAgICAge3ZlcnNpb246IDAsIG51bUJ5dGVzOiA4fQotICAgIF07
Ci0gICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdFZlcnNpb24ob2Zmc2V0
LCBrVmVyc2lvblNpemVzKTsKLSAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVy
cm9yLk5PTkUpCi0gICAgICAgIHJldHVybiBlcnI7Ci0KLSAgICByZXR1cm4gdmFsaWRhdG9yLnZh
bGlkYXRpb25FcnJvci5OT05FOwotICB9OwotCi0gIFVzYkRldmljZUNsaWVudF9PbkRldmljZU9w
ZW5lZF9QYXJhbXMuZW5jb2RlZFNpemUgPSBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDA7Ci0K
LSAgVXNiRGV2aWNlQ2xpZW50X09uRGV2aWNlT3BlbmVkX1BhcmFtcy5kZWNvZGUgPSBmdW5jdGlv
bihkZWNvZGVyKSB7Ci0gICAgdmFyIHBhY2tlZDsKLSAgICB2YXIgdmFsID0gbmV3IFVzYkRldmlj
ZUNsaWVudF9PbkRldmljZU9wZW5lZF9QYXJhbXMoKTsKLSAgICB2YXIgbnVtYmVyT2ZCeXRlcyA9
IGRlY29kZXIucmVhZFVpbnQzMigpOwotICAgIHZhciB2ZXJzaW9uID0gZGVjb2Rlci5yZWFkVWlu
dDMyKCk7Ci0gICAgcmV0dXJuIHZhbDsKLSAgfTsKLQotICBVc2JEZXZpY2VDbGllbnRfT25EZXZp
Y2VPcGVuZWRfUGFyYW1zLmVuY29kZSA9IGZ1bmN0aW9uKGVuY29kZXIsIHZhbCkgewotICAgIHZh
ciBwYWNrZWQ7Ci0gICAgZW5jb2Rlci53cml0ZVVpbnQzMihVc2JEZXZpY2VDbGllbnRfT25EZXZp
Y2VPcGVuZWRfUGFyYW1zLmVuY29kZWRTaXplKTsKLSAgICBlbmNvZGVyLndyaXRlVWludDMyKDAp
OwotICB9OwotICBmdW5jdGlvbiBVc2JEZXZpY2VDbGllbnRfT25EZXZpY2VDbG9zZWRfUGFyYW1z
KHZhbHVlcykgewotICAgIHRoaXMuaW5pdERlZmF1bHRzXygpOwotICAgIHRoaXMuaW5pdEZpZWxk
c18odmFsdWVzKTsKLSAgfQotCi0KLSAgVXNiRGV2aWNlQ2xpZW50X09uRGV2aWNlQ2xvc2VkX1Bh
cmFtcy5wcm90b3R5cGUuaW5pdERlZmF1bHRzXyA9IGZ1bmN0aW9uKCkgewotICB9OwotICBVc2JE
ZXZpY2VDbGllbnRfT25EZXZpY2VDbG9zZWRfUGFyYW1zLnByb3RvdHlwZS5pbml0RmllbGRzXyA9
IGZ1bmN0aW9uKGZpZWxkcykgewotICAgIGZvcih2YXIgZmllbGQgaW4gZmllbGRzKSB7Ci0gICAg
ICAgIGlmICh0aGlzLmhhc093blByb3BlcnR5KGZpZWxkKSkKLSAgICAgICAgICB0aGlzW2ZpZWxk
XSA9IGZpZWxkc1tmaWVsZF07Ci0gICAgfQotICB9OwotCi0gIFVzYkRldmljZUNsaWVudF9PbkRl
dmljZUNsb3NlZF9QYXJhbXMudmFsaWRhdGUgPSBmdW5jdGlvbihtZXNzYWdlVmFsaWRhdG9yLCBv
ZmZzZXQpIHsKLSAgICB2YXIgZXJyOwotICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRh
dGVTdHJ1Y3RIZWFkZXIob2Zmc2V0LCBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSk7Ci0gICAgaWYg
KGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQotICAgICAgICByZXR1cm4g
ZXJyOwotCi0gICAgdmFyIGtWZXJzaW9uU2l6ZXMgPSBbCi0gICAgICB7dmVyc2lvbjogMCwgbnVt
Qnl0ZXM6IDh9Ci0gICAgXTsKLSAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3Ry
dWN0VmVyc2lvbihvZmZzZXQsIGtWZXJzaW9uU2l6ZXMpOwotICAgIGlmIChlcnIgIT09IHZhbGlk
YXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKLSAgICAgICAgcmV0dXJuIGVycjsKLQotICAgIHJl
dHVybiB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkU7Ci0gIH07Ci0KLSAgVXNiRGV2aWNl
Q2xpZW50X09uRGV2aWNlQ2xvc2VkX1BhcmFtcy5lbmNvZGVkU2l6ZSA9IGNvZGVjLmtTdHJ1Y3RI
ZWFkZXJTaXplICsgMDsKLQotICBVc2JEZXZpY2VDbGllbnRfT25EZXZpY2VDbG9zZWRfUGFyYW1z
LmRlY29kZSA9IGZ1bmN0aW9uKGRlY29kZXIpIHsKLSAgICB2YXIgcGFja2VkOwotICAgIHZhciB2
YWwgPSBuZXcgVXNiRGV2aWNlQ2xpZW50X09uRGV2aWNlQ2xvc2VkX1BhcmFtcygpOwotICAgIHZh
ciBudW1iZXJPZkJ5dGVzID0gZGVjb2Rlci5yZWFkVWludDMyKCk7Ci0gICAgdmFyIHZlcnNpb24g
PSBkZWNvZGVyLnJlYWRVaW50MzIoKTsKLSAgICByZXR1cm4gdmFsOwotICB9OwotCi0gIFVzYkRl
dmljZUNsaWVudF9PbkRldmljZUNsb3NlZF9QYXJhbXMuZW5jb2RlID0gZnVuY3Rpb24oZW5jb2Rl
ciwgdmFsKSB7Ci0gICAgdmFyIHBhY2tlZDsKLSAgICBlbmNvZGVyLndyaXRlVWludDMyKFVzYkRl
dmljZUNsaWVudF9PbkRldmljZUNsb3NlZF9QYXJhbXMuZW5jb2RlZFNpemUpOwotICAgIGVuY29k
ZXIud3JpdGVVaW50MzIoMCk7Ci0gIH07Ci0gIHZhciBrVXNiRGV2aWNlX09wZW5fTmFtZSA9IDA7
Ci0gIHZhciBrVXNiRGV2aWNlX0Nsb3NlX05hbWUgPSAxOwotICB2YXIga1VzYkRldmljZV9TZXRD
b25maWd1cmF0aW9uX05hbWUgPSAyOwotICB2YXIga1VzYkRldmljZV9DbGFpbUludGVyZmFjZV9O
YW1lID0gMzsKLSAgdmFyIGtVc2JEZXZpY2VfUmVsZWFzZUludGVyZmFjZV9OYW1lID0gNDsKLSAg
dmFyIGtVc2JEZXZpY2VfU2V0SW50ZXJmYWNlQWx0ZXJuYXRlU2V0dGluZ19OYW1lID0gNTsKLSAg
dmFyIGtVc2JEZXZpY2VfUmVzZXRfTmFtZSA9IDY7Ci0gIHZhciBrVXNiRGV2aWNlX0NsZWFySGFs
dF9OYW1lID0gNzsKLSAgdmFyIGtVc2JEZXZpY2VfQ29udHJvbFRyYW5zZmVySW5fTmFtZSA9IDg7
Ci0gIHZhciBrVXNiRGV2aWNlX0NvbnRyb2xUcmFuc2Zlck91dF9OYW1lID0gOTsKLSAgdmFyIGtV
c2JEZXZpY2VfR2VuZXJpY1RyYW5zZmVySW5fTmFtZSA9IDEwOwotICB2YXIga1VzYkRldmljZV9H
ZW5lcmljVHJhbnNmZXJPdXRfTmFtZSA9IDExOwotICB2YXIga1VzYkRldmljZV9Jc29jaHJvbm91
c1RyYW5zZmVySW5fTmFtZSA9IDEyOwotICB2YXIga1VzYkRldmljZV9Jc29jaHJvbm91c1RyYW5z
ZmVyT3V0X05hbWUgPSAxMzsKLQotICBmdW5jdGlvbiBVc2JEZXZpY2VQdHIoaGFuZGxlT3JQdHJJ
bmZvKSB7Ci0gICAgdGhpcy5wdHIgPSBuZXcgYmluZGluZ3MuSW50ZXJmYWNlUHRyQ29udHJvbGxl
cihVc2JEZXZpY2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBoYW5kbGVPclB0ckluZm8pOwotICB9Ci0KLSAgZnVuY3Rpb24gVXNiRGV2aWNlQXNz
b2NpYXRlZFB0cihhc3NvY2lhdGVkSW50ZXJmYWNlUHRySW5mbykgewotICAgIHRoaXMucHRyID0g
bmV3IGFzc29jaWF0ZWRCaW5kaW5ncy5Bc3NvY2lhdGVkSW50ZXJmYWNlUHRyQ29udHJvbGxlcigK
LSAgICAgICAgVXNiRGV2aWNlLCBhc3NvY2lhdGVkSW50ZXJmYWNlUHRySW5mbyk7Ci0gIH0KLQot
ICBVc2JEZXZpY2VBc3NvY2lhdGVkUHRyLnByb3RvdHlwZSA9Ci0gICAgICBPYmplY3QuY3JlYXRl
KFVzYkRldmljZVB0ci5wcm90b3R5cGUpOwotICBVc2JEZXZpY2VBc3NvY2lhdGVkUHRyLnByb3Rv
dHlwZS5jb25zdHJ1Y3RvciA9Ci0gICAgICBVc2JEZXZpY2VBc3NvY2lhdGVkUHRyOwotCi0gIGZ1
bmN0aW9uIFVzYkRldmljZVByb3h5KHJlY2VpdmVyKSB7Ci0gICAgdGhpcy5yZWNlaXZlcl8gPSBy
ZWNlaXZlcjsKLSAgfQotICBVc2JEZXZpY2VQdHIucHJvdG90eXBlLm9wZW4gPSBmdW5jdGlvbigp
IHsKLSAgICByZXR1cm4gVXNiRGV2aWNlUHJveHkucHJvdG90eXBlLm9wZW4KLSAgICAgICAgLmFw
cGx5KHRoaXMucHRyLmdldFByb3h5KCksIGFyZ3VtZW50cyk7Ci0gIH07Ci0KLSAgVXNiRGV2aWNl
UHJveHkucHJvdG90eXBlLm9wZW4gPSBmdW5jdGlvbigpIHsKLSAgICB2YXIgcGFyYW1zXyA9IG5l
dyBVc2JEZXZpY2VfT3Blbl9QYXJhbXMoKTsKLSAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rp
b24ocmVzb2x2ZSwgcmVqZWN0KSB7Ci0gICAgICB2YXIgYnVpbGRlciA9IG5ldyBjb2RlYy5NZXNz
YWdlVjFCdWlsZGVyKAotICAgICAgICAgIGtVc2JEZXZpY2VfT3Blbl9OYW1lLAotICAgICAgICAg
IGNvZGVjLmFsaWduKFVzYkRldmljZV9PcGVuX1BhcmFtcy5lbmNvZGVkU2l6ZSksCi0gICAgICAg
ICAgY29kZWMua01lc3NhZ2VFeHBlY3RzUmVzcG9uc2UsIDApOwotICAgICAgYnVpbGRlci5lbmNv
ZGVTdHJ1Y3QoVXNiRGV2aWNlX09wZW5fUGFyYW1zLCBwYXJhbXNfKTsKLSAgICAgIHZhciBtZXNz
YWdlID0gYnVpbGRlci5maW5pc2goKTsKLSAgICAgIHRoaXMucmVjZWl2ZXJfLmFjY2VwdEFuZEV4
cGVjdFJlc3BvbnNlKG1lc3NhZ2UpLnRoZW4oZnVuY3Rpb24obWVzc2FnZSkgewotICAgICAgICB2
YXIgcmVhZGVyID0gbmV3IGNvZGVjLk1lc3NhZ2VSZWFkZXIobWVzc2FnZSk7Ci0gICAgICAgIHZh
ciByZXNwb25zZVBhcmFtcyA9Ci0gICAgICAgICAgICByZWFkZXIuZGVjb2RlU3RydWN0KFVzYkRl
dmljZV9PcGVuX1Jlc3BvbnNlUGFyYW1zKTsKLSAgICAgICAgcmVzb2x2ZShyZXNwb25zZVBhcmFt
cyk7Ci0gICAgICB9KS5jYXRjaChmdW5jdGlvbihyZXN1bHQpIHsKLSAgICAgICAgcmVqZWN0KEVy
cm9yKCJDb25uZWN0aW9uIGVycm9yOiAiICsgcmVzdWx0KSk7Ci0gICAgICB9KTsKLSAgICB9LmJp
bmQodGhpcykpOwotICB9OwotICBVc2JEZXZpY2VQdHIucHJvdG90eXBlLmNsb3NlID0gZnVuY3Rp
b24oKSB7Ci0gICAgcmV0dXJuIFVzYkRldmljZVByb3h5LnByb3RvdHlwZS5jbG9zZQotICAgICAg
ICAuYXBwbHkodGhpcy5wdHIuZ2V0UHJveHkoKSwgYXJndW1lbnRzKTsKLSAgfTsKLQotICBVc2JE
ZXZpY2VQcm94eS5wcm90b3R5cGUuY2xvc2UgPSBmdW5jdGlvbigpIHsKLSAgICB2YXIgcGFyYW1z
XyA9IG5ldyBVc2JEZXZpY2VfQ2xvc2VfUGFyYW1zKCk7Ci0gICAgcmV0dXJuIG5ldyBQcm9taXNl
KGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkgewotICAgICAgdmFyIGJ1aWxkZXIgPSBuZXcgY29k
ZWMuTWVzc2FnZVYxQnVpbGRlcigKLSAgICAgICAgICBrVXNiRGV2aWNlX0Nsb3NlX05hbWUsCi0g
ICAgICAgICAgY29kZWMuYWxpZ24oVXNiRGV2aWNlX0Nsb3NlX1BhcmFtcy5lbmNvZGVkU2l6ZSks
Ci0gICAgICAgICAgY29kZWMua01lc3NhZ2VFeHBlY3RzUmVzcG9uc2UsIDApOwotICAgICAgYnVp
bGRlci5lbmNvZGVTdHJ1Y3QoVXNiRGV2aWNlX0Nsb3NlX1BhcmFtcywgcGFyYW1zXyk7Ci0gICAg
ICB2YXIgbWVzc2FnZSA9IGJ1aWxkZXIuZmluaXNoKCk7Ci0gICAgICB0aGlzLnJlY2VpdmVyXy5h
Y2NlcHRBbmRFeHBlY3RSZXNwb25zZShtZXNzYWdlKS50aGVuKGZ1bmN0aW9uKG1lc3NhZ2UpIHsK
LSAgICAgICAgdmFyIHJlYWRlciA9IG5ldyBjb2RlYy5NZXNzYWdlUmVhZGVyKG1lc3NhZ2UpOwot
ICAgICAgICB2YXIgcmVzcG9uc2VQYXJhbXMgPQotICAgICAgICAgICAgcmVhZGVyLmRlY29kZVN0
cnVjdChVc2JEZXZpY2VfQ2xvc2VfUmVzcG9uc2VQYXJhbXMpOwotICAgICAgICByZXNvbHZlKHJl
c3BvbnNlUGFyYW1zKTsKLSAgICAgIH0pLmNhdGNoKGZ1bmN0aW9uKHJlc3VsdCkgewotICAgICAg
ICByZWplY3QoRXJyb3IoIkNvbm5lY3Rpb24gZXJyb3I6ICIgKyByZXN1bHQpKTsKLSAgICAgIH0p
OwotICAgIH0uYmluZCh0aGlzKSk7Ci0gIH07Ci0gIFVzYkRldmljZVB0ci5wcm90b3R5cGUuc2V0
Q29uZmlndXJhdGlvbiA9IGZ1bmN0aW9uKCkgewotICAgIHJldHVybiBVc2JEZXZpY2VQcm94eS5w
cm90b3R5cGUuc2V0Q29uZmlndXJhdGlvbgotICAgICAgICAuYXBwbHkodGhpcy5wdHIuZ2V0UHJv
eHkoKSwgYXJndW1lbnRzKTsKLSAgfTsKLQotICBVc2JEZXZpY2VQcm94eS5wcm90b3R5cGUuc2V0
Q29uZmlndXJhdGlvbiA9IGZ1bmN0aW9uKHZhbHVlKSB7Ci0gICAgdmFyIHBhcmFtc18gPSBuZXcg
VXNiRGV2aWNlX1NldENvbmZpZ3VyYXRpb25fUGFyYW1zKCk7Ci0gICAgcGFyYW1zXy52YWx1ZSA9
IHZhbHVlOwotICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3Qp
IHsKLSAgICAgIHZhciBidWlsZGVyID0gbmV3IGNvZGVjLk1lc3NhZ2VWMUJ1aWxkZXIoCi0gICAg
ICAgICAga1VzYkRldmljZV9TZXRDb25maWd1cmF0aW9uX05hbWUsCi0gICAgICAgICAgY29kZWMu
YWxpZ24oVXNiRGV2aWNlX1NldENvbmZpZ3VyYXRpb25fUGFyYW1zLmVuY29kZWRTaXplKSwKLSAg
ICAgICAgICBjb2RlYy5rTWVzc2FnZUV4cGVjdHNSZXNwb25zZSwgMCk7Ci0gICAgICBidWlsZGVy
LmVuY29kZVN0cnVjdChVc2JEZXZpY2VfU2V0Q29uZmlndXJhdGlvbl9QYXJhbXMsIHBhcmFtc18p
OwotICAgICAgdmFyIG1lc3NhZ2UgPSBidWlsZGVyLmZpbmlzaCgpOwotICAgICAgdGhpcy5yZWNl
aXZlcl8uYWNjZXB0QW5kRXhwZWN0UmVzcG9uc2UobWVzc2FnZSkudGhlbihmdW5jdGlvbihtZXNz
YWdlKSB7Ci0gICAgICAgIHZhciByZWFkZXIgPSBuZXcgY29kZWMuTWVzc2FnZVJlYWRlcihtZXNz
YWdlKTsKLSAgICAgICAgdmFyIHJlc3BvbnNlUGFyYW1zID0KLSAgICAgICAgICAgIHJlYWRlci5k
ZWNvZGVTdHJ1Y3QoVXNiRGV2aWNlX1NldENvbmZpZ3VyYXRpb25fUmVzcG9uc2VQYXJhbXMpOwot
ICAgICAgICByZXNvbHZlKHJlc3BvbnNlUGFyYW1zKTsKLSAgICAgIH0pLmNhdGNoKGZ1bmN0aW9u
KHJlc3VsdCkgewotICAgICAgICByZWplY3QoRXJyb3IoIkNvbm5lY3Rpb24gZXJyb3I6ICIgKyBy
ZXN1bHQpKTsKLSAgICAgIH0pOwotICAgIH0uYmluZCh0aGlzKSk7Ci0gIH07Ci0gIFVzYkRldmlj
ZVB0ci5wcm90b3R5cGUuY2xhaW1JbnRlcmZhY2UgPSBmdW5jdGlvbigpIHsKLSAgICByZXR1cm4g
VXNiRGV2aWNlUHJveHkucHJvdG90eXBlLmNsYWltSW50ZXJmYWNlCi0gICAgICAgIC5hcHBseSh0
aGlzLnB0ci5nZXRQcm94eSgpLCBhcmd1bWVudHMpOwotICB9OwotCi0gIFVzYkRldmljZVByb3h5
LnByb3RvdHlwZS5jbGFpbUludGVyZmFjZSA9IGZ1bmN0aW9uKGludGVyZmFjZU51bWJlcikgewot
ICAgIHZhciBwYXJhbXNfID0gbmV3IFVzYkRldmljZV9DbGFpbUludGVyZmFjZV9QYXJhbXMoKTsK
LSAgICBwYXJhbXNfLmludGVyZmFjZU51bWJlciA9IGludGVyZmFjZU51bWJlcjsKLSAgICByZXR1
cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7Ci0gICAgICB2YXIgYnVp
bGRlciA9IG5ldyBjb2RlYy5NZXNzYWdlVjFCdWlsZGVyKAotICAgICAgICAgIGtVc2JEZXZpY2Vf
Q2xhaW1JbnRlcmZhY2VfTmFtZSwKLSAgICAgICAgICBjb2RlYy5hbGlnbihVc2JEZXZpY2VfQ2xh
aW1JbnRlcmZhY2VfUGFyYW1zLmVuY29kZWRTaXplKSwKLSAgICAgICAgICBjb2RlYy5rTWVzc2Fn
ZUV4cGVjdHNSZXNwb25zZSwgMCk7Ci0gICAgICBidWlsZGVyLmVuY29kZVN0cnVjdChVc2JEZXZp
Y2VfQ2xhaW1JbnRlcmZhY2VfUGFyYW1zLCBwYXJhbXNfKTsKLSAgICAgIHZhciBtZXNzYWdlID0g
YnVpbGRlci5maW5pc2goKTsKLSAgICAgIHRoaXMucmVjZWl2ZXJfLmFjY2VwdEFuZEV4cGVjdFJl
c3BvbnNlKG1lc3NhZ2UpLnRoZW4oZnVuY3Rpb24obWVzc2FnZSkgewotICAgICAgICB2YXIgcmVh
ZGVyID0gbmV3IGNvZGVjLk1lc3NhZ2VSZWFkZXIobWVzc2FnZSk7Ci0gICAgICAgIHZhciByZXNw
b25zZVBhcmFtcyA9Ci0gICAgICAgICAgICByZWFkZXIuZGVjb2RlU3RydWN0KFVzYkRldmljZV9D
bGFpbUludGVyZmFjZV9SZXNwb25zZVBhcmFtcyk7Ci0gICAgICAgIHJlc29sdmUocmVzcG9uc2VQ
YXJhbXMpOwotICAgICAgfSkuY2F0Y2goZnVuY3Rpb24ocmVzdWx0KSB7Ci0gICAgICAgIHJlamVj
dChFcnJvcigiQ29ubmVjdGlvbiBlcnJvcjogIiArIHJlc3VsdCkpOwotICAgICAgfSk7Ci0gICAg
fS5iaW5kKHRoaXMpKTsKLSAgfTsKLSAgVXNiRGV2aWNlUHRyLnByb3RvdHlwZS5yZWxlYXNlSW50
ZXJmYWNlID0gZnVuY3Rpb24oKSB7Ci0gICAgcmV0dXJuIFVzYkRldmljZVByb3h5LnByb3RvdHlw
ZS5yZWxlYXNlSW50ZXJmYWNlCi0gICAgICAgIC5hcHBseSh0aGlzLnB0ci5nZXRQcm94eSgpLCBh
cmd1bWVudHMpOwotICB9OwotCi0gIFVzYkRldmljZVByb3h5LnByb3RvdHlwZS5yZWxlYXNlSW50
ZXJmYWNlID0gZnVuY3Rpb24oaW50ZXJmYWNlTnVtYmVyKSB7Ci0gICAgdmFyIHBhcmFtc18gPSBu
ZXcgVXNiRGV2aWNlX1JlbGVhc2VJbnRlcmZhY2VfUGFyYW1zKCk7Ci0gICAgcGFyYW1zXy5pbnRl
cmZhY2VOdW1iZXIgPSBpbnRlcmZhY2VOdW1iZXI7Ci0gICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1
bmN0aW9uKHJlc29sdmUsIHJlamVjdCkgewotICAgICAgdmFyIGJ1aWxkZXIgPSBuZXcgY29kZWMu
TWVzc2FnZVYxQnVpbGRlcigKLSAgICAgICAgICBrVXNiRGV2aWNlX1JlbGVhc2VJbnRlcmZhY2Vf
TmFtZSwKLSAgICAgICAgICBjb2RlYy5hbGlnbihVc2JEZXZpY2VfUmVsZWFzZUludGVyZmFjZV9Q
YXJhbXMuZW5jb2RlZFNpemUpLAotICAgICAgICAgIGNvZGVjLmtNZXNzYWdlRXhwZWN0c1Jlc3Bv
bnNlLCAwKTsKLSAgICAgIGJ1aWxkZXIuZW5jb2RlU3RydWN0KFVzYkRldmljZV9SZWxlYXNlSW50
ZXJmYWNlX1BhcmFtcywgcGFyYW1zXyk7Ci0gICAgICB2YXIgbWVzc2FnZSA9IGJ1aWxkZXIuZmlu
aXNoKCk7Ci0gICAgICB0aGlzLnJlY2VpdmVyXy5hY2NlcHRBbmRFeHBlY3RSZXNwb25zZShtZXNz
YWdlKS50aGVuKGZ1bmN0aW9uKG1lc3NhZ2UpIHsKLSAgICAgICAgdmFyIHJlYWRlciA9IG5ldyBj
b2RlYy5NZXNzYWdlUmVhZGVyKG1lc3NhZ2UpOwotICAgICAgICB2YXIgcmVzcG9uc2VQYXJhbXMg
PQotICAgICAgICAgICAgcmVhZGVyLmRlY29kZVN0cnVjdChVc2JEZXZpY2VfUmVsZWFzZUludGVy
ZmFjZV9SZXNwb25zZVBhcmFtcyk7Ci0gICAgICAgIHJlc29sdmUocmVzcG9uc2VQYXJhbXMpOwot
ICAgICAgfSkuY2F0Y2goZnVuY3Rpb24ocmVzdWx0KSB7Ci0gICAgICAgIHJlamVjdChFcnJvcigi
Q29ubmVjdGlvbiBlcnJvcjogIiArIHJlc3VsdCkpOwotICAgICAgfSk7Ci0gICAgfS5iaW5kKHRo
aXMpKTsKLSAgfTsKLSAgVXNiRGV2aWNlUHRyLnByb3RvdHlwZS5zZXRJbnRlcmZhY2VBbHRlcm5h
dGVTZXR0aW5nID0gZnVuY3Rpb24oKSB7Ci0gICAgcmV0dXJuIFVzYkRldmljZVByb3h5LnByb3Rv
dHlwZS5zZXRJbnRlcmZhY2VBbHRlcm5hdGVTZXR0aW5nCi0gICAgICAgIC5hcHBseSh0aGlzLnB0
ci5nZXRQcm94eSgpLCBhcmd1bWVudHMpOwotICB9OwotCi0gIFVzYkRldmljZVByb3h5LnByb3Rv
dHlwZS5zZXRJbnRlcmZhY2VBbHRlcm5hdGVTZXR0aW5nID0gZnVuY3Rpb24oaW50ZXJmYWNlTnVt
YmVyLCBhbHRlcm5hdGVTZXR0aW5nKSB7Ci0gICAgdmFyIHBhcmFtc18gPSBuZXcgVXNiRGV2aWNl
X1NldEludGVyZmFjZUFsdGVybmF0ZVNldHRpbmdfUGFyYW1zKCk7Ci0gICAgcGFyYW1zXy5pbnRl
cmZhY2VOdW1iZXIgPSBpbnRlcmZhY2VOdW1iZXI7Ci0gICAgcGFyYW1zXy5hbHRlcm5hdGVTZXR0
aW5nID0gYWx0ZXJuYXRlU2V0dGluZzsKLSAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24o
cmVzb2x2ZSwgcmVqZWN0KSB7Ci0gICAgICB2YXIgYnVpbGRlciA9IG5ldyBjb2RlYy5NZXNzYWdl
VjFCdWlsZGVyKAotICAgICAgICAgIGtVc2JEZXZpY2VfU2V0SW50ZXJmYWNlQWx0ZXJuYXRlU2V0
dGluZ19OYW1lLAotICAgICAgICAgIGNvZGVjLmFsaWduKFVzYkRldmljZV9TZXRJbnRlcmZhY2VB
bHRlcm5hdGVTZXR0aW5nX1BhcmFtcy5lbmNvZGVkU2l6ZSksCi0gICAgICAgICAgY29kZWMua01l
c3NhZ2VFeHBlY3RzUmVzcG9uc2UsIDApOwotICAgICAgYnVpbGRlci5lbmNvZGVTdHJ1Y3QoVXNi
RGV2aWNlX1NldEludGVyZmFjZUFsdGVybmF0ZVNldHRpbmdfUGFyYW1zLCBwYXJhbXNfKTsKLSAg
ICAgIHZhciBtZXNzYWdlID0gYnVpbGRlci5maW5pc2goKTsKLSAgICAgIHRoaXMucmVjZWl2ZXJf
LmFjY2VwdEFuZEV4cGVjdFJlc3BvbnNlKG1lc3NhZ2UpLnRoZW4oZnVuY3Rpb24obWVzc2FnZSkg
ewotICAgICAgICB2YXIgcmVhZGVyID0gbmV3IGNvZGVjLk1lc3NhZ2VSZWFkZXIobWVzc2FnZSk7
Ci0gICAgICAgIHZhciByZXNwb25zZVBhcmFtcyA9Ci0gICAgICAgICAgICByZWFkZXIuZGVjb2Rl
U3RydWN0KFVzYkRldmljZV9TZXRJbnRlcmZhY2VBbHRlcm5hdGVTZXR0aW5nX1Jlc3BvbnNlUGFy
YW1zKTsKLSAgICAgICAgcmVzb2x2ZShyZXNwb25zZVBhcmFtcyk7Ci0gICAgICB9KS5jYXRjaChm
dW5jdGlvbihyZXN1bHQpIHsKLSAgICAgICAgcmVqZWN0KEVycm9yKCJDb25uZWN0aW9uIGVycm9y
OiAiICsgcmVzdWx0KSk7Ci0gICAgICB9KTsKLSAgICB9LmJpbmQodGhpcykpOwotICB9OwotICBV
c2JEZXZpY2VQdHIucHJvdG90eXBlLnJlc2V0ID0gZnVuY3Rpb24oKSB7Ci0gICAgcmV0dXJuIFVz
YkRldmljZVByb3h5LnByb3RvdHlwZS5yZXNldAotICAgICAgICAuYXBwbHkodGhpcy5wdHIuZ2V0
UHJveHkoKSwgYXJndW1lbnRzKTsKLSAgfTsKLQotICBVc2JEZXZpY2VQcm94eS5wcm90b3R5cGUu
cmVzZXQgPSBmdW5jdGlvbigpIHsKLSAgICB2YXIgcGFyYW1zXyA9IG5ldyBVc2JEZXZpY2VfUmVz
ZXRfUGFyYW1zKCk7Ci0gICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJl
amVjdCkgewotICAgICAgdmFyIGJ1aWxkZXIgPSBuZXcgY29kZWMuTWVzc2FnZVYxQnVpbGRlcigK
LSAgICAgICAgICBrVXNiRGV2aWNlX1Jlc2V0X05hbWUsCi0gICAgICAgICAgY29kZWMuYWxpZ24o
VXNiRGV2aWNlX1Jlc2V0X1BhcmFtcy5lbmNvZGVkU2l6ZSksCi0gICAgICAgICAgY29kZWMua01l
c3NhZ2VFeHBlY3RzUmVzcG9uc2UsIDApOwotICAgICAgYnVpbGRlci5lbmNvZGVTdHJ1Y3QoVXNi
RGV2aWNlX1Jlc2V0X1BhcmFtcywgcGFyYW1zXyk7Ci0gICAgICB2YXIgbWVzc2FnZSA9IGJ1aWxk
ZXIuZmluaXNoKCk7Ci0gICAgICB0aGlzLnJlY2VpdmVyXy5hY2NlcHRBbmRFeHBlY3RSZXNwb25z
ZShtZXNzYWdlKS50aGVuKGZ1bmN0aW9uKG1lc3NhZ2UpIHsKLSAgICAgICAgdmFyIHJlYWRlciA9
IG5ldyBjb2RlYy5NZXNzYWdlUmVhZGVyKG1lc3NhZ2UpOwotICAgICAgICB2YXIgcmVzcG9uc2VQ
YXJhbXMgPQotICAgICAgICAgICAgcmVhZGVyLmRlY29kZVN0cnVjdChVc2JEZXZpY2VfUmVzZXRf
UmVzcG9uc2VQYXJhbXMpOwotICAgICAgICByZXNvbHZlKHJlc3BvbnNlUGFyYW1zKTsKLSAgICAg
IH0pLmNhdGNoKGZ1bmN0aW9uKHJlc3VsdCkgewotICAgICAgICByZWplY3QoRXJyb3IoIkNvbm5l
Y3Rpb24gZXJyb3I6ICIgKyByZXN1bHQpKTsKLSAgICAgIH0pOwotICAgIH0uYmluZCh0aGlzKSk7
Ci0gIH07Ci0gIFVzYkRldmljZVB0ci5wcm90b3R5cGUuY2xlYXJIYWx0ID0gZnVuY3Rpb24oKSB7
Ci0gICAgcmV0dXJuIFVzYkRldmljZVByb3h5LnByb3RvdHlwZS5jbGVhckhhbHQKLSAgICAgICAg
LmFwcGx5KHRoaXMucHRyLmdldFByb3h5KCksIGFyZ3VtZW50cyk7Ci0gIH07Ci0KLSAgVXNiRGV2
aWNlUHJveHkucHJvdG90eXBlLmNsZWFySGFsdCA9IGZ1bmN0aW9uKGVuZHBvaW50KSB7Ci0gICAg
dmFyIHBhcmFtc18gPSBuZXcgVXNiRGV2aWNlX0NsZWFySGFsdF9QYXJhbXMoKTsKLSAgICBwYXJh
bXNfLmVuZHBvaW50ID0gZW5kcG9pbnQ7Ci0gICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9u
KHJlc29sdmUsIHJlamVjdCkgewotICAgICAgdmFyIGJ1aWxkZXIgPSBuZXcgY29kZWMuTWVzc2Fn
ZVYxQnVpbGRlcigKLSAgICAgICAgICBrVXNiRGV2aWNlX0NsZWFySGFsdF9OYW1lLAotICAgICAg
ICAgIGNvZGVjLmFsaWduKFVzYkRldmljZV9DbGVhckhhbHRfUGFyYW1zLmVuY29kZWRTaXplKSwK
LSAgICAgICAgICBjb2RlYy5rTWVzc2FnZUV4cGVjdHNSZXNwb25zZSwgMCk7Ci0gICAgICBidWls
ZGVyLmVuY29kZVN0cnVjdChVc2JEZXZpY2VfQ2xlYXJIYWx0X1BhcmFtcywgcGFyYW1zXyk7Ci0g
ICAgICB2YXIgbWVzc2FnZSA9IGJ1aWxkZXIuZmluaXNoKCk7Ci0gICAgICB0aGlzLnJlY2VpdmVy
Xy5hY2NlcHRBbmRFeHBlY3RSZXNwb25zZShtZXNzYWdlKS50aGVuKGZ1bmN0aW9uKG1lc3NhZ2Up
IHsKLSAgICAgICAgdmFyIHJlYWRlciA9IG5ldyBjb2RlYy5NZXNzYWdlUmVhZGVyKG1lc3NhZ2Up
OwotICAgICAgICB2YXIgcmVzcG9uc2VQYXJhbXMgPQotICAgICAgICAgICAgcmVhZGVyLmRlY29k
ZVN0cnVjdChVc2JEZXZpY2VfQ2xlYXJIYWx0X1Jlc3BvbnNlUGFyYW1zKTsKLSAgICAgICAgcmVz
b2x2ZShyZXNwb25zZVBhcmFtcyk7Ci0gICAgICB9KS5jYXRjaChmdW5jdGlvbihyZXN1bHQpIHsK
LSAgICAgICAgcmVqZWN0KEVycm9yKCJDb25uZWN0aW9uIGVycm9yOiAiICsgcmVzdWx0KSk7Ci0g
ICAgICB9KTsKLSAgICB9LmJpbmQodGhpcykpOwotICB9OwotICBVc2JEZXZpY2VQdHIucHJvdG90
eXBlLmNvbnRyb2xUcmFuc2ZlckluID0gZnVuY3Rpb24oKSB7Ci0gICAgcmV0dXJuIFVzYkRldmlj
ZVByb3h5LnByb3RvdHlwZS5jb250cm9sVHJhbnNmZXJJbgotICAgICAgICAuYXBwbHkodGhpcy5w
dHIuZ2V0UHJveHkoKSwgYXJndW1lbnRzKTsKLSAgfTsKLQotICBVc2JEZXZpY2VQcm94eS5wcm90
b3R5cGUuY29udHJvbFRyYW5zZmVySW4gPSBmdW5jdGlvbihwYXJhbXMsIGxlbmd0aCwgdGltZW91
dCkgewotICAgIHZhciBwYXJhbXNfID0gbmV3IFVzYkRldmljZV9Db250cm9sVHJhbnNmZXJJbl9Q
YXJhbXMoKTsKLSAgICBwYXJhbXNfLnBhcmFtcyA9IHBhcmFtczsKLSAgICBwYXJhbXNfLmxlbmd0
aCA9IGxlbmd0aDsKLSAgICBwYXJhbXNfLnRpbWVvdXQgPSB0aW1lb3V0OwotICAgIHJldHVybiBu
ZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3QpIHsKLSAgICAgIHZhciBidWlsZGVy
ID0gbmV3IGNvZGVjLk1lc3NhZ2VWMUJ1aWxkZXIoCi0gICAgICAgICAga1VzYkRldmljZV9Db250
cm9sVHJhbnNmZXJJbl9OYW1lLAotICAgICAgICAgIGNvZGVjLmFsaWduKFVzYkRldmljZV9Db250
cm9sVHJhbnNmZXJJbl9QYXJhbXMuZW5jb2RlZFNpemUpLAotICAgICAgICAgIGNvZGVjLmtNZXNz
YWdlRXhwZWN0c1Jlc3BvbnNlLCAwKTsKLSAgICAgIGJ1aWxkZXIuZW5jb2RlU3RydWN0KFVzYkRl
dmljZV9Db250cm9sVHJhbnNmZXJJbl9QYXJhbXMsIHBhcmFtc18pOwotICAgICAgdmFyIG1lc3Nh
Z2UgPSBidWlsZGVyLmZpbmlzaCgpOwotICAgICAgdGhpcy5yZWNlaXZlcl8uYWNjZXB0QW5kRXhw
ZWN0UmVzcG9uc2UobWVzc2FnZSkudGhlbihmdW5jdGlvbihtZXNzYWdlKSB7Ci0gICAgICAgIHZh
ciByZWFkZXIgPSBuZXcgY29kZWMuTWVzc2FnZVJlYWRlcihtZXNzYWdlKTsKLSAgICAgICAgdmFy
IHJlc3BvbnNlUGFyYW1zID0KLSAgICAgICAgICAgIHJlYWRlci5kZWNvZGVTdHJ1Y3QoVXNiRGV2
aWNlX0NvbnRyb2xUcmFuc2ZlckluX1Jlc3BvbnNlUGFyYW1zKTsKLSAgICAgICAgcmVzb2x2ZShy
ZXNwb25zZVBhcmFtcyk7Ci0gICAgICB9KS5jYXRjaChmdW5jdGlvbihyZXN1bHQpIHsKLSAgICAg
ICAgcmVqZWN0KEVycm9yKCJDb25uZWN0aW9uIGVycm9yOiAiICsgcmVzdWx0KSk7Ci0gICAgICB9
KTsKLSAgICB9LmJpbmQodGhpcykpOwotICB9OwotICBVc2JEZXZpY2VQdHIucHJvdG90eXBlLmNv
bnRyb2xUcmFuc2Zlck91dCA9IGZ1bmN0aW9uKCkgewotICAgIHJldHVybiBVc2JEZXZpY2VQcm94
eS5wcm90b3R5cGUuY29udHJvbFRyYW5zZmVyT3V0Ci0gICAgICAgIC5hcHBseSh0aGlzLnB0ci5n
ZXRQcm94eSgpLCBhcmd1bWVudHMpOwotICB9OwotCi0gIFVzYkRldmljZVByb3h5LnByb3RvdHlw
ZS5jb250cm9sVHJhbnNmZXJPdXQgPSBmdW5jdGlvbihwYXJhbXMsIGRhdGEsIHRpbWVvdXQpIHsK
LSAgICB2YXIgcGFyYW1zXyA9IG5ldyBVc2JEZXZpY2VfQ29udHJvbFRyYW5zZmVyT3V0X1BhcmFt
cygpOwotICAgIHBhcmFtc18ucGFyYW1zID0gcGFyYW1zOwotICAgIHBhcmFtc18uZGF0YSA9IGRh
dGE7Ci0gICAgcGFyYW1zXy50aW1lb3V0ID0gdGltZW91dDsKLSAgICByZXR1cm4gbmV3IFByb21p
c2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7Ci0gICAgICB2YXIgYnVpbGRlciA9IG5ldyBj
b2RlYy5NZXNzYWdlVjFCdWlsZGVyKAotICAgICAgICAgIGtVc2JEZXZpY2VfQ29udHJvbFRyYW5z
ZmVyT3V0X05hbWUsCi0gICAgICAgICAgY29kZWMuYWxpZ24oVXNiRGV2aWNlX0NvbnRyb2xUcmFu
c2Zlck91dF9QYXJhbXMuZW5jb2RlZFNpemUpLAotICAgICAgICAgIGNvZGVjLmtNZXNzYWdlRXhw
ZWN0c1Jlc3BvbnNlLCAwKTsKLSAgICAgIGJ1aWxkZXIuZW5jb2RlU3RydWN0KFVzYkRldmljZV9D
b250cm9sVHJhbnNmZXJPdXRfUGFyYW1zLCBwYXJhbXNfKTsKLSAgICAgIHZhciBtZXNzYWdlID0g
YnVpbGRlci5maW5pc2goKTsKLSAgICAgIHRoaXMucmVjZWl2ZXJfLmFjY2VwdEFuZEV4cGVjdFJl
c3BvbnNlKG1lc3NhZ2UpLnRoZW4oZnVuY3Rpb24obWVzc2FnZSkgewotICAgICAgICB2YXIgcmVh
ZGVyID0gbmV3IGNvZGVjLk1lc3NhZ2VSZWFkZXIobWVzc2FnZSk7Ci0gICAgICAgIHZhciByZXNw
b25zZVBhcmFtcyA9Ci0gICAgICAgICAgICByZWFkZXIuZGVjb2RlU3RydWN0KFVzYkRldmljZV9D
b250cm9sVHJhbnNmZXJPdXRfUmVzcG9uc2VQYXJhbXMpOwotICAgICAgICByZXNvbHZlKHJlc3Bv
bnNlUGFyYW1zKTsKLSAgICAgIH0pLmNhdGNoKGZ1bmN0aW9uKHJlc3VsdCkgewotICAgICAgICBy
ZWplY3QoRXJyb3IoIkNvbm5lY3Rpb24gZXJyb3I6ICIgKyByZXN1bHQpKTsKLSAgICAgIH0pOwot
ICAgIH0uYmluZCh0aGlzKSk7Ci0gIH07Ci0gIFVzYkRldmljZVB0ci5wcm90b3R5cGUuZ2VuZXJp
Y1RyYW5zZmVySW4gPSBmdW5jdGlvbigpIHsKLSAgICByZXR1cm4gVXNiRGV2aWNlUHJveHkucHJv
dG90eXBlLmdlbmVyaWNUcmFuc2ZlckluCi0gICAgICAgIC5hcHBseSh0aGlzLnB0ci5nZXRQcm94
eSgpLCBhcmd1bWVudHMpOwotICB9OwotCi0gIFVzYkRldmljZVByb3h5LnByb3RvdHlwZS5nZW5l
cmljVHJhbnNmZXJJbiA9IGZ1bmN0aW9uKGVuZHBvaW50TnVtYmVyLCBsZW5ndGgsIHRpbWVvdXQp
IHsKLSAgICB2YXIgcGFyYW1zXyA9IG5ldyBVc2JEZXZpY2VfR2VuZXJpY1RyYW5zZmVySW5fUGFy
YW1zKCk7Ci0gICAgcGFyYW1zXy5lbmRwb2ludE51bWJlciA9IGVuZHBvaW50TnVtYmVyOwotICAg
IHBhcmFtc18ubGVuZ3RoID0gbGVuZ3RoOwotICAgIHBhcmFtc18udGltZW91dCA9IHRpbWVvdXQ7
Ci0gICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkgewotICAg
ICAgdmFyIGJ1aWxkZXIgPSBuZXcgY29kZWMuTWVzc2FnZVYxQnVpbGRlcigKLSAgICAgICAgICBr
VXNiRGV2aWNlX0dlbmVyaWNUcmFuc2ZlckluX05hbWUsCi0gICAgICAgICAgY29kZWMuYWxpZ24o
VXNiRGV2aWNlX0dlbmVyaWNUcmFuc2ZlckluX1BhcmFtcy5lbmNvZGVkU2l6ZSksCi0gICAgICAg
ICAgY29kZWMua01lc3NhZ2VFeHBlY3RzUmVzcG9uc2UsIDApOwotICAgICAgYnVpbGRlci5lbmNv
ZGVTdHJ1Y3QoVXNiRGV2aWNlX0dlbmVyaWNUcmFuc2ZlckluX1BhcmFtcywgcGFyYW1zXyk7Ci0g
ICAgICB2YXIgbWVzc2FnZSA9IGJ1aWxkZXIuZmluaXNoKCk7Ci0gICAgICB0aGlzLnJlY2VpdmVy
Xy5hY2NlcHRBbmRFeHBlY3RSZXNwb25zZShtZXNzYWdlKS50aGVuKGZ1bmN0aW9uKG1lc3NhZ2Up
IHsKLSAgICAgICAgdmFyIHJlYWRlciA9IG5ldyBjb2RlYy5NZXNzYWdlUmVhZGVyKG1lc3NhZ2Up
OwotICAgICAgICB2YXIgcmVzcG9uc2VQYXJhbXMgPQotICAgICAgICAgICAgcmVhZGVyLmRlY29k
ZVN0cnVjdChVc2JEZXZpY2VfR2VuZXJpY1RyYW5zZmVySW5fUmVzcG9uc2VQYXJhbXMpOwotICAg
ICAgICByZXNvbHZlKHJlc3BvbnNlUGFyYW1zKTsKLSAgICAgIH0pLmNhdGNoKGZ1bmN0aW9uKHJl
c3VsdCkgewotICAgICAgICByZWplY3QoRXJyb3IoIkNvbm5lY3Rpb24gZXJyb3I6ICIgKyByZXN1
bHQpKTsKLSAgICAgIH0pOwotICAgIH0uYmluZCh0aGlzKSk7Ci0gIH07Ci0gIFVzYkRldmljZVB0
ci5wcm90b3R5cGUuZ2VuZXJpY1RyYW5zZmVyT3V0ID0gZnVuY3Rpb24oKSB7Ci0gICAgcmV0dXJu
IFVzYkRldmljZVByb3h5LnByb3RvdHlwZS5nZW5lcmljVHJhbnNmZXJPdXQKLSAgICAgICAgLmFw
cGx5KHRoaXMucHRyLmdldFByb3h5KCksIGFyZ3VtZW50cyk7Ci0gIH07Ci0KLSAgVXNiRGV2aWNl
UHJveHkucHJvdG90eXBlLmdlbmVyaWNUcmFuc2Zlck91dCA9IGZ1bmN0aW9uKGVuZHBvaW50TnVt
YmVyLCBkYXRhLCB0aW1lb3V0KSB7Ci0gICAgdmFyIHBhcmFtc18gPSBuZXcgVXNiRGV2aWNlX0dl
bmVyaWNUcmFuc2Zlck91dF9QYXJhbXMoKTsKLSAgICBwYXJhbXNfLmVuZHBvaW50TnVtYmVyID0g
ZW5kcG9pbnROdW1iZXI7Ci0gICAgcGFyYW1zXy5kYXRhID0gZGF0YTsKLSAgICBwYXJhbXNfLnRp
bWVvdXQgPSB0aW1lb3V0OwotICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZl
LCByZWplY3QpIHsKLSAgICAgIHZhciBidWlsZGVyID0gbmV3IGNvZGVjLk1lc3NhZ2VWMUJ1aWxk
ZXIoCi0gICAgICAgICAga1VzYkRldmljZV9HZW5lcmljVHJhbnNmZXJPdXRfTmFtZSwKLSAgICAg
ICAgICBjb2RlYy5hbGlnbihVc2JEZXZpY2VfR2VuZXJpY1RyYW5zZmVyT3V0X1BhcmFtcy5lbmNv
ZGVkU2l6ZSksCi0gICAgICAgICAgY29kZWMua01lc3NhZ2VFeHBlY3RzUmVzcG9uc2UsIDApOwot
ICAgICAgYnVpbGRlci5lbmNvZGVTdHJ1Y3QoVXNiRGV2aWNlX0dlbmVyaWNUcmFuc2Zlck91dF9Q
YXJhbXMsIHBhcmFtc18pOwotICAgICAgdmFyIG1lc3NhZ2UgPSBidWlsZGVyLmZpbmlzaCgpOwot
ICAgICAgdGhpcy5yZWNlaXZlcl8uYWNjZXB0QW5kRXhwZWN0UmVzcG9uc2UobWVzc2FnZSkudGhl
bihmdW5jdGlvbihtZXNzYWdlKSB7Ci0gICAgICAgIHZhciByZWFkZXIgPSBuZXcgY29kZWMuTWVz
c2FnZVJlYWRlcihtZXNzYWdlKTsKLSAgICAgICAgdmFyIHJlc3BvbnNlUGFyYW1zID0KLSAgICAg
ICAgICAgIHJlYWRlci5kZWNvZGVTdHJ1Y3QoVXNiRGV2aWNlX0dlbmVyaWNUcmFuc2Zlck91dF9S
ZXNwb25zZVBhcmFtcyk7Ci0gICAgICAgIHJlc29sdmUocmVzcG9uc2VQYXJhbXMpOwotICAgICAg
fSkuY2F0Y2goZnVuY3Rpb24ocmVzdWx0KSB7Ci0gICAgICAgIHJlamVjdChFcnJvcigiQ29ubmVj
dGlvbiBlcnJvcjogIiArIHJlc3VsdCkpOwotICAgICAgfSk7Ci0gICAgfS5iaW5kKHRoaXMpKTsK
LSAgfTsKLSAgVXNiRGV2aWNlUHRyLnByb3RvdHlwZS5pc29jaHJvbm91c1RyYW5zZmVySW4gPSBm
dW5jdGlvbigpIHsKLSAgICByZXR1cm4gVXNiRGV2aWNlUHJveHkucHJvdG90eXBlLmlzb2Nocm9u
b3VzVHJhbnNmZXJJbgotICAgICAgICAuYXBwbHkodGhpcy5wdHIuZ2V0UHJveHkoKSwgYXJndW1l
bnRzKTsKLSAgfTsKLQotICBVc2JEZXZpY2VQcm94eS5wcm90b3R5cGUuaXNvY2hyb25vdXNUcmFu
c2ZlckluID0gZnVuY3Rpb24oZW5kcG9pbnROdW1iZXIsIHBhY2tldExlbmd0aHMsIHRpbWVvdXQp
IHsKLSAgICB2YXIgcGFyYW1zXyA9IG5ldyBVc2JEZXZpY2VfSXNvY2hyb25vdXNUcmFuc2Zlcklu
X1BhcmFtcygpOwotICAgIHBhcmFtc18uZW5kcG9pbnROdW1iZXIgPSBlbmRwb2ludE51bWJlcjsK
LSAgICBwYXJhbXNfLnBhY2tldExlbmd0aHMgPSBwYWNrZXRMZW5ndGhzOwotICAgIHBhcmFtc18u
dGltZW91dCA9IHRpbWVvdXQ7Ci0gICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29s
dmUsIHJlamVjdCkgewotICAgICAgdmFyIGJ1aWxkZXIgPSBuZXcgY29kZWMuTWVzc2FnZVYxQnVp
bGRlcigKLSAgICAgICAgICBrVXNiRGV2aWNlX0lzb2Nocm9ub3VzVHJhbnNmZXJJbl9OYW1lLAot
ICAgICAgICAgIGNvZGVjLmFsaWduKFVzYkRldmljZV9Jc29jaHJvbm91c1RyYW5zZmVySW5fUGFy
YW1zLmVuY29kZWRTaXplKSwKLSAgICAgICAgICBjb2RlYy5rTWVzc2FnZUV4cGVjdHNSZXNwb25z
ZSwgMCk7Ci0gICAgICBidWlsZGVyLmVuY29kZVN0cnVjdChVc2JEZXZpY2VfSXNvY2hyb25vdXNU
cmFuc2ZlckluX1BhcmFtcywgcGFyYW1zXyk7Ci0gICAgICB2YXIgbWVzc2FnZSA9IGJ1aWxkZXIu
ZmluaXNoKCk7Ci0gICAgICB0aGlzLnJlY2VpdmVyXy5hY2NlcHRBbmRFeHBlY3RSZXNwb25zZSht
ZXNzYWdlKS50aGVuKGZ1bmN0aW9uKG1lc3NhZ2UpIHsKLSAgICAgICAgdmFyIHJlYWRlciA9IG5l
dyBjb2RlYy5NZXNzYWdlUmVhZGVyKG1lc3NhZ2UpOwotICAgICAgICB2YXIgcmVzcG9uc2VQYXJh
bXMgPQotICAgICAgICAgICAgcmVhZGVyLmRlY29kZVN0cnVjdChVc2JEZXZpY2VfSXNvY2hyb25v
dXNUcmFuc2ZlckluX1Jlc3BvbnNlUGFyYW1zKTsKLSAgICAgICAgcmVzb2x2ZShyZXNwb25zZVBh
cmFtcyk7Ci0gICAgICB9KS5jYXRjaChmdW5jdGlvbihyZXN1bHQpIHsKLSAgICAgICAgcmVqZWN0
KEVycm9yKCJDb25uZWN0aW9uIGVycm9yOiAiICsgcmVzdWx0KSk7Ci0gICAgICB9KTsKLSAgICB9
LmJpbmQodGhpcykpOwotICB9OwotICBVc2JEZXZpY2VQdHIucHJvdG90eXBlLmlzb2Nocm9ub3Vz
VHJhbnNmZXJPdXQgPSBmdW5jdGlvbigpIHsKLSAgICByZXR1cm4gVXNiRGV2aWNlUHJveHkucHJv
dG90eXBlLmlzb2Nocm9ub3VzVHJhbnNmZXJPdXQKLSAgICAgICAgLmFwcGx5KHRoaXMucHRyLmdl
dFByb3h5KCksIGFyZ3VtZW50cyk7Ci0gIH07Ci0KLSAgVXNiRGV2aWNlUHJveHkucHJvdG90eXBl
Lmlzb2Nocm9ub3VzVHJhbnNmZXJPdXQgPSBmdW5jdGlvbihlbmRwb2ludE51bWJlciwgZGF0YSwg
cGFja2V0TGVuZ3RocywgdGltZW91dCkgewotICAgIHZhciBwYXJhbXNfID0gbmV3IFVzYkRldmlj
ZV9Jc29jaHJvbm91c1RyYW5zZmVyT3V0X1BhcmFtcygpOwotICAgIHBhcmFtc18uZW5kcG9pbnRO
dW1iZXIgPSBlbmRwb2ludE51bWJlcjsKLSAgICBwYXJhbXNfLmRhdGEgPSBkYXRhOwotICAgIHBh
cmFtc18ucGFja2V0TGVuZ3RocyA9IHBhY2tldExlbmd0aHM7Ci0gICAgcGFyYW1zXy50aW1lb3V0
ID0gdGltZW91dDsKLSAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVq
ZWN0KSB7Ci0gICAgICB2YXIgYnVpbGRlciA9IG5ldyBjb2RlYy5NZXNzYWdlVjFCdWlsZGVyKAot
ICAgICAgICAgIGtVc2JEZXZpY2VfSXNvY2hyb25vdXNUcmFuc2Zlck91dF9OYW1lLAotICAgICAg
ICAgIGNvZGVjLmFsaWduKFVzYkRldmljZV9Jc29jaHJvbm91c1RyYW5zZmVyT3V0X1BhcmFtcy5l
bmNvZGVkU2l6ZSksCi0gICAgICAgICAgY29kZWMua01lc3NhZ2VFeHBlY3RzUmVzcG9uc2UsIDAp
OwotICAgICAgYnVpbGRlci5lbmNvZGVTdHJ1Y3QoVXNiRGV2aWNlX0lzb2Nocm9ub3VzVHJhbnNm
ZXJPdXRfUGFyYW1zLCBwYXJhbXNfKTsKLSAgICAgIHZhciBtZXNzYWdlID0gYnVpbGRlci5maW5p
c2goKTsKLSAgICAgIHRoaXMucmVjZWl2ZXJfLmFjY2VwdEFuZEV4cGVjdFJlc3BvbnNlKG1lc3Nh
Z2UpLnRoZW4oZnVuY3Rpb24obWVzc2FnZSkgewotICAgICAgICB2YXIgcmVhZGVyID0gbmV3IGNv
ZGVjLk1lc3NhZ2VSZWFkZXIobWVzc2FnZSk7Ci0gICAgICAgIHZhciByZXNwb25zZVBhcmFtcyA9
Ci0gICAgICAgICAgICByZWFkZXIuZGVjb2RlU3RydWN0KFVzYkRldmljZV9Jc29jaHJvbm91c1Ry
YW5zZmVyT3V0X1Jlc3BvbnNlUGFyYW1zKTsKLSAgICAgICAgcmVzb2x2ZShyZXNwb25zZVBhcmFt
cyk7Ci0gICAgICB9KS5jYXRjaChmdW5jdGlvbihyZXN1bHQpIHsKLSAgICAgICAgcmVqZWN0KEVy
cm9yKCJDb25uZWN0aW9uIGVycm9yOiAiICsgcmVzdWx0KSk7Ci0gICAgICB9KTsKLSAgICB9LmJp
bmQodGhpcykpOwotICB9OwotCi0gIGZ1bmN0aW9uIFVzYkRldmljZVN0dWIoZGVsZWdhdGUpIHsK
LSAgICB0aGlzLmRlbGVnYXRlXyA9IGRlbGVnYXRlOwotICB9Ci0gIFVzYkRldmljZVN0dWIucHJv
dG90eXBlLm9wZW4gPSBmdW5jdGlvbigpIHsKLSAgICByZXR1cm4gdGhpcy5kZWxlZ2F0ZV8gJiYg
dGhpcy5kZWxlZ2F0ZV8ub3BlbiAmJiB0aGlzLmRlbGVnYXRlXy5vcGVuKCk7Ci0gIH0KLSAgVXNi
RGV2aWNlU3R1Yi5wcm90b3R5cGUuY2xvc2UgPSBmdW5jdGlvbigpIHsKLSAgICByZXR1cm4gdGhp
cy5kZWxlZ2F0ZV8gJiYgdGhpcy5kZWxlZ2F0ZV8uY2xvc2UgJiYgdGhpcy5kZWxlZ2F0ZV8uY2xv
c2UoKTsKLSAgfQotICBVc2JEZXZpY2VTdHViLnByb3RvdHlwZS5zZXRDb25maWd1cmF0aW9uID0g
ZnVuY3Rpb24odmFsdWUpIHsKLSAgICByZXR1cm4gdGhpcy5kZWxlZ2F0ZV8gJiYgdGhpcy5kZWxl
Z2F0ZV8uc2V0Q29uZmlndXJhdGlvbiAmJiB0aGlzLmRlbGVnYXRlXy5zZXRDb25maWd1cmF0aW9u
KHZhbHVlKTsKLSAgfQotICBVc2JEZXZpY2VTdHViLnByb3RvdHlwZS5jbGFpbUludGVyZmFjZSA9
IGZ1bmN0aW9uKGludGVyZmFjZU51bWJlcikgewotICAgIHJldHVybiB0aGlzLmRlbGVnYXRlXyAm
JiB0aGlzLmRlbGVnYXRlXy5jbGFpbUludGVyZmFjZSAmJiB0aGlzLmRlbGVnYXRlXy5jbGFpbUlu
dGVyZmFjZShpbnRlcmZhY2VOdW1iZXIpOwotICB9Ci0gIFVzYkRldmljZVN0dWIucHJvdG90eXBl
LnJlbGVhc2VJbnRlcmZhY2UgPSBmdW5jdGlvbihpbnRlcmZhY2VOdW1iZXIpIHsKLSAgICByZXR1
cm4gdGhpcy5kZWxlZ2F0ZV8gJiYgdGhpcy5kZWxlZ2F0ZV8ucmVsZWFzZUludGVyZmFjZSAmJiB0
aGlzLmRlbGVnYXRlXy5yZWxlYXNlSW50ZXJmYWNlKGludGVyZmFjZU51bWJlcik7Ci0gIH0KLSAg
VXNiRGV2aWNlU3R1Yi5wcm90b3R5cGUuc2V0SW50ZXJmYWNlQWx0ZXJuYXRlU2V0dGluZyA9IGZ1
bmN0aW9uKGludGVyZmFjZU51bWJlciwgYWx0ZXJuYXRlU2V0dGluZykgewotICAgIHJldHVybiB0
aGlzLmRlbGVnYXRlXyAmJiB0aGlzLmRlbGVnYXRlXy5zZXRJbnRlcmZhY2VBbHRlcm5hdGVTZXR0
aW5nICYmIHRoaXMuZGVsZWdhdGVfLnNldEludGVyZmFjZUFsdGVybmF0ZVNldHRpbmcoaW50ZXJm
YWNlTnVtYmVyLCBhbHRlcm5hdGVTZXR0aW5nKTsKLSAgfQotICBVc2JEZXZpY2VTdHViLnByb3Rv
dHlwZS5yZXNldCA9IGZ1bmN0aW9uKCkgewotICAgIHJldHVybiB0aGlzLmRlbGVnYXRlXyAmJiB0
aGlzLmRlbGVnYXRlXy5yZXNldCAmJiB0aGlzLmRlbGVnYXRlXy5yZXNldCgpOwotICB9Ci0gIFVz
YkRldmljZVN0dWIucHJvdG90eXBlLmNsZWFySGFsdCA9IGZ1bmN0aW9uKGVuZHBvaW50KSB7Ci0g
ICAgcmV0dXJuIHRoaXMuZGVsZWdhdGVfICYmIHRoaXMuZGVsZWdhdGVfLmNsZWFySGFsdCAmJiB0
aGlzLmRlbGVnYXRlXy5jbGVhckhhbHQoZW5kcG9pbnQpOwotICB9Ci0gIFVzYkRldmljZVN0dWIu
cHJvdG90eXBlLmNvbnRyb2xUcmFuc2ZlckluID0gZnVuY3Rpb24ocGFyYW1zLCBsZW5ndGgsIHRp
bWVvdXQpIHsKLSAgICByZXR1cm4gdGhpcy5kZWxlZ2F0ZV8gJiYgdGhpcy5kZWxlZ2F0ZV8uY29u
dHJvbFRyYW5zZmVySW4gJiYgdGhpcy5kZWxlZ2F0ZV8uY29udHJvbFRyYW5zZmVySW4ocGFyYW1z
LCBsZW5ndGgsIHRpbWVvdXQpOwotICB9Ci0gIFVzYkRldmljZVN0dWIucHJvdG90eXBlLmNvbnRy
b2xUcmFuc2Zlck91dCA9IGZ1bmN0aW9uKHBhcmFtcywgZGF0YSwgdGltZW91dCkgewotICAgIHJl
dHVybiB0aGlzLmRlbGVnYXRlXyAmJiB0aGlzLmRlbGVnYXRlXy5jb250cm9sVHJhbnNmZXJPdXQg
JiYgdGhpcy5kZWxlZ2F0ZV8uY29udHJvbFRyYW5zZmVyT3V0KHBhcmFtcywgZGF0YSwgdGltZW91
dCk7Ci0gIH0KLSAgVXNiRGV2aWNlU3R1Yi5wcm90b3R5cGUuZ2VuZXJpY1RyYW5zZmVySW4gPSBm
dW5jdGlvbihlbmRwb2ludE51bWJlciwgbGVuZ3RoLCB0aW1lb3V0KSB7Ci0gICAgcmV0dXJuIHRo
aXMuZGVsZWdhdGVfICYmIHRoaXMuZGVsZWdhdGVfLmdlbmVyaWNUcmFuc2ZlckluICYmIHRoaXMu
ZGVsZWdhdGVfLmdlbmVyaWNUcmFuc2ZlckluKGVuZHBvaW50TnVtYmVyLCBsZW5ndGgsIHRpbWVv
dXQpOwotICB9Ci0gIFVzYkRldmljZVN0dWIucHJvdG90eXBlLmdlbmVyaWNUcmFuc2Zlck91dCA9
IGZ1bmN0aW9uKGVuZHBvaW50TnVtYmVyLCBkYXRhLCB0aW1lb3V0KSB7Ci0gICAgcmV0dXJuIHRo
aXMuZGVsZWdhdGVfICYmIHRoaXMuZGVsZWdhdGVfLmdlbmVyaWNUcmFuc2Zlck91dCAmJiB0aGlz
LmRlbGVnYXRlXy5nZW5lcmljVHJhbnNmZXJPdXQoZW5kcG9pbnROdW1iZXIsIGRhdGEsIHRpbWVv
dXQpOwotICB9Ci0gIFVzYkRldmljZVN0dWIucHJvdG90eXBlLmlzb2Nocm9ub3VzVHJhbnNmZXJJ
biA9IGZ1bmN0aW9uKGVuZHBvaW50TnVtYmVyLCBwYWNrZXRMZW5ndGhzLCB0aW1lb3V0KSB7Ci0g
ICAgcmV0dXJuIHRoaXMuZGVsZWdhdGVfICYmIHRoaXMuZGVsZWdhdGVfLmlzb2Nocm9ub3VzVHJh
bnNmZXJJbiAmJiB0aGlzLmRlbGVnYXRlXy5pc29jaHJvbm91c1RyYW5zZmVySW4oZW5kcG9pbnRO
dW1iZXIsIHBhY2tldExlbmd0aHMsIHRpbWVvdXQpOwotICB9Ci0gIFVzYkRldmljZVN0dWIucHJv
dG90eXBlLmlzb2Nocm9ub3VzVHJhbnNmZXJPdXQgPSBmdW5jdGlvbihlbmRwb2ludE51bWJlciwg
ZGF0YSwgcGFja2V0TGVuZ3RocywgdGltZW91dCkgewotICAgIHJldHVybiB0aGlzLmRlbGVnYXRl
XyAmJiB0aGlzLmRlbGVnYXRlXy5pc29jaHJvbm91c1RyYW5zZmVyT3V0ICYmIHRoaXMuZGVsZWdh
dGVfLmlzb2Nocm9ub3VzVHJhbnNmZXJPdXQoZW5kcG9pbnROdW1iZXIsIGRhdGEsIHBhY2tldExl
bmd0aHMsIHRpbWVvdXQpOwotICB9Ci0KLSAgVXNiRGV2aWNlU3R1Yi5wcm90b3R5cGUuYWNjZXB0
ID0gZnVuY3Rpb24obWVzc2FnZSkgewotICAgIHZhciByZWFkZXIgPSBuZXcgY29kZWMuTWVzc2Fn
ZVJlYWRlcihtZXNzYWdlKTsKLSAgICBzd2l0Y2ggKHJlYWRlci5tZXNzYWdlTmFtZSkgewotICAg
IGRlZmF1bHQ6Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICB9OwotCi0gIFVzYkRldmlj
ZVN0dWIucHJvdG90eXBlLmFjY2VwdFdpdGhSZXNwb25kZXIgPQotICAgICAgZnVuY3Rpb24obWVz
c2FnZSwgcmVzcG9uZGVyKSB7Ci0gICAgdmFyIHJlYWRlciA9IG5ldyBjb2RlYy5NZXNzYWdlUmVh
ZGVyKG1lc3NhZ2UpOwotICAgIHN3aXRjaCAocmVhZGVyLm1lc3NhZ2VOYW1lKSB7Ci0gICAgY2Fz
ZSBrVXNiRGV2aWNlX09wZW5fTmFtZToKLSAgICAgIHZhciBwYXJhbXMgPSByZWFkZXIuZGVjb2Rl
U3RydWN0KFVzYkRldmljZV9PcGVuX1BhcmFtcyk7Ci0gICAgICB0aGlzLm9wZW4oKS50aGVuKGZ1
bmN0aW9uKHJlc3BvbnNlKSB7Ci0gICAgICAgIHZhciByZXNwb25zZVBhcmFtcyA9Ci0gICAgICAg
ICAgICBuZXcgVXNiRGV2aWNlX09wZW5fUmVzcG9uc2VQYXJhbXMoKTsKLSAgICAgICAgcmVzcG9u
c2VQYXJhbXMuZXJyb3IgPSByZXNwb25zZS5lcnJvcjsKLSAgICAgICAgdmFyIGJ1aWxkZXIgPSBu
ZXcgY29kZWMuTWVzc2FnZVYxQnVpbGRlcigKLSAgICAgICAgICAgIGtVc2JEZXZpY2VfT3Blbl9O
YW1lLAotICAgICAgICAgICAgY29kZWMuYWxpZ24oVXNiRGV2aWNlX09wZW5fUmVzcG9uc2VQYXJh
bXMuZW5jb2RlZFNpemUpLAotICAgICAgICAgICAgY29kZWMua01lc3NhZ2VJc1Jlc3BvbnNlLCBy
ZWFkZXIucmVxdWVzdElEKTsKLSAgICAgICAgYnVpbGRlci5lbmNvZGVTdHJ1Y3QoVXNiRGV2aWNl
X09wZW5fUmVzcG9uc2VQYXJhbXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3Bv
bnNlUGFyYW1zKTsKLSAgICAgICAgdmFyIG1lc3NhZ2UgPSBidWlsZGVyLmZpbmlzaCgpOwotICAg
ICAgICByZXNwb25kZXIuYWNjZXB0KG1lc3NhZ2UpOwotICAgICAgfSk7Ci0gICAgICByZXR1cm4g
dHJ1ZTsKLSAgICBjYXNlIGtVc2JEZXZpY2VfQ2xvc2VfTmFtZToKLSAgICAgIHZhciBwYXJhbXMg
PSByZWFkZXIuZGVjb2RlU3RydWN0KFVzYkRldmljZV9DbG9zZV9QYXJhbXMpOwotICAgICAgdGhp
cy5jbG9zZSgpLnRoZW4oZnVuY3Rpb24ocmVzcG9uc2UpIHsKLSAgICAgICAgdmFyIHJlc3BvbnNl
UGFyYW1zID0KLSAgICAgICAgICAgIG5ldyBVc2JEZXZpY2VfQ2xvc2VfUmVzcG9uc2VQYXJhbXMo
KTsKLSAgICAgICAgdmFyIGJ1aWxkZXIgPSBuZXcgY29kZWMuTWVzc2FnZVYxQnVpbGRlcigKLSAg
ICAgICAgICAgIGtVc2JEZXZpY2VfQ2xvc2VfTmFtZSwKLSAgICAgICAgICAgIGNvZGVjLmFsaWdu
KFVzYkRldmljZV9DbG9zZV9SZXNwb25zZVBhcmFtcy5lbmNvZGVkU2l6ZSksCi0gICAgICAgICAg
ICBjb2RlYy5rTWVzc2FnZUlzUmVzcG9uc2UsIHJlYWRlci5yZXF1ZXN0SUQpOwotICAgICAgICBi
dWlsZGVyLmVuY29kZVN0cnVjdChVc2JEZXZpY2VfQ2xvc2VfUmVzcG9uc2VQYXJhbXMsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlUGFyYW1zKTsKLSAgICAgICAgdmFyIG1l
c3NhZ2UgPSBidWlsZGVyLmZpbmlzaCgpOwotICAgICAgICByZXNwb25kZXIuYWNjZXB0KG1lc3Nh
Z2UpOwotICAgICAgfSk7Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICBjYXNlIGtVc2JEZXZpY2Vf
U2V0Q29uZmlndXJhdGlvbl9OYW1lOgotICAgICAgdmFyIHBhcmFtcyA9IHJlYWRlci5kZWNvZGVT
dHJ1Y3QoVXNiRGV2aWNlX1NldENvbmZpZ3VyYXRpb25fUGFyYW1zKTsKLSAgICAgIHRoaXMuc2V0
Q29uZmlndXJhdGlvbihwYXJhbXMudmFsdWUpLnRoZW4oZnVuY3Rpb24ocmVzcG9uc2UpIHsKLSAg
ICAgICAgdmFyIHJlc3BvbnNlUGFyYW1zID0KLSAgICAgICAgICAgIG5ldyBVc2JEZXZpY2VfU2V0
Q29uZmlndXJhdGlvbl9SZXNwb25zZVBhcmFtcygpOwotICAgICAgICByZXNwb25zZVBhcmFtcy5z
dWNjZXNzID0gcmVzcG9uc2Uuc3VjY2VzczsKLSAgICAgICAgdmFyIGJ1aWxkZXIgPSBuZXcgY29k
ZWMuTWVzc2FnZVYxQnVpbGRlcigKLSAgICAgICAgICAgIGtVc2JEZXZpY2VfU2V0Q29uZmlndXJh
dGlvbl9OYW1lLAotICAgICAgICAgICAgY29kZWMuYWxpZ24oVXNiRGV2aWNlX1NldENvbmZpZ3Vy
YXRpb25fUmVzcG9uc2VQYXJhbXMuZW5jb2RlZFNpemUpLAotICAgICAgICAgICAgY29kZWMua01l
c3NhZ2VJc1Jlc3BvbnNlLCByZWFkZXIucmVxdWVzdElEKTsKLSAgICAgICAgYnVpbGRlci5lbmNv
ZGVTdHJ1Y3QoVXNiRGV2aWNlX1NldENvbmZpZ3VyYXRpb25fUmVzcG9uc2VQYXJhbXMsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlUGFyYW1zKTsKLSAgICAgICAgdmFyIG1l
c3NhZ2UgPSBidWlsZGVyLmZpbmlzaCgpOwotICAgICAgICByZXNwb25kZXIuYWNjZXB0KG1lc3Nh
Z2UpOwotICAgICAgfSk7Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICBjYXNlIGtVc2JEZXZpY2Vf
Q2xhaW1JbnRlcmZhY2VfTmFtZToKLSAgICAgIHZhciBwYXJhbXMgPSByZWFkZXIuZGVjb2RlU3Ry
dWN0KFVzYkRldmljZV9DbGFpbUludGVyZmFjZV9QYXJhbXMpOwotICAgICAgdGhpcy5jbGFpbUlu
dGVyZmFjZShwYXJhbXMuaW50ZXJmYWNlTnVtYmVyKS50aGVuKGZ1bmN0aW9uKHJlc3BvbnNlKSB7
Ci0gICAgICAgIHZhciByZXNwb25zZVBhcmFtcyA9Ci0gICAgICAgICAgICBuZXcgVXNiRGV2aWNl
X0NsYWltSW50ZXJmYWNlX1Jlc3BvbnNlUGFyYW1zKCk7Ci0gICAgICAgIHJlc3BvbnNlUGFyYW1z
LnN1Y2Nlc3MgPSByZXNwb25zZS5zdWNjZXNzOwotICAgICAgICB2YXIgYnVpbGRlciA9IG5ldyBj
b2RlYy5NZXNzYWdlVjFCdWlsZGVyKAotICAgICAgICAgICAga1VzYkRldmljZV9DbGFpbUludGVy
ZmFjZV9OYW1lLAotICAgICAgICAgICAgY29kZWMuYWxpZ24oVXNiRGV2aWNlX0NsYWltSW50ZXJm
YWNlX1Jlc3BvbnNlUGFyYW1zLmVuY29kZWRTaXplKSwKLSAgICAgICAgICAgIGNvZGVjLmtNZXNz
YWdlSXNSZXNwb25zZSwgcmVhZGVyLnJlcXVlc3RJRCk7Ci0gICAgICAgIGJ1aWxkZXIuZW5jb2Rl
U3RydWN0KFVzYkRldmljZV9DbGFpbUludGVyZmFjZV9SZXNwb25zZVBhcmFtcywKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2VQYXJhbXMpOwotICAgICAgICB2YXIgbWVzc2Fn
ZSA9IGJ1aWxkZXIuZmluaXNoKCk7Ci0gICAgICAgIHJlc3BvbmRlci5hY2NlcHQobWVzc2FnZSk7
Ci0gICAgICB9KTsKLSAgICAgIHJldHVybiB0cnVlOwotICAgIGNhc2Uga1VzYkRldmljZV9SZWxl
YXNlSW50ZXJmYWNlX05hbWU6Ci0gICAgICB2YXIgcGFyYW1zID0gcmVhZGVyLmRlY29kZVN0cnVj
dChVc2JEZXZpY2VfUmVsZWFzZUludGVyZmFjZV9QYXJhbXMpOwotICAgICAgdGhpcy5yZWxlYXNl
SW50ZXJmYWNlKHBhcmFtcy5pbnRlcmZhY2VOdW1iZXIpLnRoZW4oZnVuY3Rpb24ocmVzcG9uc2Up
IHsKLSAgICAgICAgdmFyIHJlc3BvbnNlUGFyYW1zID0KLSAgICAgICAgICAgIG5ldyBVc2JEZXZp
Y2VfUmVsZWFzZUludGVyZmFjZV9SZXNwb25zZVBhcmFtcygpOwotICAgICAgICByZXNwb25zZVBh
cmFtcy5zdWNjZXNzID0gcmVzcG9uc2Uuc3VjY2VzczsKLSAgICAgICAgdmFyIGJ1aWxkZXIgPSBu
ZXcgY29kZWMuTWVzc2FnZVYxQnVpbGRlcigKLSAgICAgICAgICAgIGtVc2JEZXZpY2VfUmVsZWFz
ZUludGVyZmFjZV9OYW1lLAotICAgICAgICAgICAgY29kZWMuYWxpZ24oVXNiRGV2aWNlX1JlbGVh
c2VJbnRlcmZhY2VfUmVzcG9uc2VQYXJhbXMuZW5jb2RlZFNpemUpLAotICAgICAgICAgICAgY29k
ZWMua01lc3NhZ2VJc1Jlc3BvbnNlLCByZWFkZXIucmVxdWVzdElEKTsKLSAgICAgICAgYnVpbGRl
ci5lbmNvZGVTdHJ1Y3QoVXNiRGV2aWNlX1JlbGVhc2VJbnRlcmZhY2VfUmVzcG9uc2VQYXJhbXMs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlUGFyYW1zKTsKLSAgICAgICAg
dmFyIG1lc3NhZ2UgPSBidWlsZGVyLmZpbmlzaCgpOwotICAgICAgICByZXNwb25kZXIuYWNjZXB0
KG1lc3NhZ2UpOwotICAgICAgfSk7Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICBjYXNlIGtVc2JE
ZXZpY2VfU2V0SW50ZXJmYWNlQWx0ZXJuYXRlU2V0dGluZ19OYW1lOgotICAgICAgdmFyIHBhcmFt
cyA9IHJlYWRlci5kZWNvZGVTdHJ1Y3QoVXNiRGV2aWNlX1NldEludGVyZmFjZUFsdGVybmF0ZVNl
dHRpbmdfUGFyYW1zKTsKLSAgICAgIHRoaXMuc2V0SW50ZXJmYWNlQWx0ZXJuYXRlU2V0dGluZyhw
YXJhbXMuaW50ZXJmYWNlTnVtYmVyLCBwYXJhbXMuYWx0ZXJuYXRlU2V0dGluZykudGhlbihmdW5j
dGlvbihyZXNwb25zZSkgewotICAgICAgICB2YXIgcmVzcG9uc2VQYXJhbXMgPQotICAgICAgICAg
ICAgbmV3IFVzYkRldmljZV9TZXRJbnRlcmZhY2VBbHRlcm5hdGVTZXR0aW5nX1Jlc3BvbnNlUGFy
YW1zKCk7Ci0gICAgICAgIHJlc3BvbnNlUGFyYW1zLnN1Y2Nlc3MgPSByZXNwb25zZS5zdWNjZXNz
OwotICAgICAgICB2YXIgYnVpbGRlciA9IG5ldyBjb2RlYy5NZXNzYWdlVjFCdWlsZGVyKAotICAg
ICAgICAgICAga1VzYkRldmljZV9TZXRJbnRlcmZhY2VBbHRlcm5hdGVTZXR0aW5nX05hbWUsCi0g
ICAgICAgICAgICBjb2RlYy5hbGlnbihVc2JEZXZpY2VfU2V0SW50ZXJmYWNlQWx0ZXJuYXRlU2V0
dGluZ19SZXNwb25zZVBhcmFtcy5lbmNvZGVkU2l6ZSksCi0gICAgICAgICAgICBjb2RlYy5rTWVz
c2FnZUlzUmVzcG9uc2UsIHJlYWRlci5yZXF1ZXN0SUQpOwotICAgICAgICBidWlsZGVyLmVuY29k
ZVN0cnVjdChVc2JEZXZpY2VfU2V0SW50ZXJmYWNlQWx0ZXJuYXRlU2V0dGluZ19SZXNwb25zZVBh
cmFtcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2VQYXJhbXMpOwotICAg
ICAgICB2YXIgbWVzc2FnZSA9IGJ1aWxkZXIuZmluaXNoKCk7Ci0gICAgICAgIHJlc3BvbmRlci5h
Y2NlcHQobWVzc2FnZSk7Ci0gICAgICB9KTsKLSAgICAgIHJldHVybiB0cnVlOwotICAgIGNhc2Ug
a1VzYkRldmljZV9SZXNldF9OYW1lOgotICAgICAgdmFyIHBhcmFtcyA9IHJlYWRlci5kZWNvZGVT
dHJ1Y3QoVXNiRGV2aWNlX1Jlc2V0X1BhcmFtcyk7Ci0gICAgICB0aGlzLnJlc2V0KCkudGhlbihm
dW5jdGlvbihyZXNwb25zZSkgewotICAgICAgICB2YXIgcmVzcG9uc2VQYXJhbXMgPQotICAgICAg
ICAgICAgbmV3IFVzYkRldmljZV9SZXNldF9SZXNwb25zZVBhcmFtcygpOwotICAgICAgICByZXNw
b25zZVBhcmFtcy5zdWNjZXNzID0gcmVzcG9uc2Uuc3VjY2VzczsKLSAgICAgICAgdmFyIGJ1aWxk
ZXIgPSBuZXcgY29kZWMuTWVzc2FnZVYxQnVpbGRlcigKLSAgICAgICAgICAgIGtVc2JEZXZpY2Vf
UmVzZXRfTmFtZSwKLSAgICAgICAgICAgIGNvZGVjLmFsaWduKFVzYkRldmljZV9SZXNldF9SZXNw
b25zZVBhcmFtcy5lbmNvZGVkU2l6ZSksCi0gICAgICAgICAgICBjb2RlYy5rTWVzc2FnZUlzUmVz
cG9uc2UsIHJlYWRlci5yZXF1ZXN0SUQpOwotICAgICAgICBidWlsZGVyLmVuY29kZVN0cnVjdChV
c2JEZXZpY2VfUmVzZXRfUmVzcG9uc2VQYXJhbXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHJlc3BvbnNlUGFyYW1zKTsKLSAgICAgICAgdmFyIG1lc3NhZ2UgPSBidWlsZGVyLmZpbmlz
aCgpOwotICAgICAgICByZXNwb25kZXIuYWNjZXB0KG1lc3NhZ2UpOwotICAgICAgfSk7Ci0gICAg
ICByZXR1cm4gdHJ1ZTsKLSAgICBjYXNlIGtVc2JEZXZpY2VfQ2xlYXJIYWx0X05hbWU6Ci0gICAg
ICB2YXIgcGFyYW1zID0gcmVhZGVyLmRlY29kZVN0cnVjdChVc2JEZXZpY2VfQ2xlYXJIYWx0X1Bh
cmFtcyk7Ci0gICAgICB0aGlzLmNsZWFySGFsdChwYXJhbXMuZW5kcG9pbnQpLnRoZW4oZnVuY3Rp
b24ocmVzcG9uc2UpIHsKLSAgICAgICAgdmFyIHJlc3BvbnNlUGFyYW1zID0KLSAgICAgICAgICAg
IG5ldyBVc2JEZXZpY2VfQ2xlYXJIYWx0X1Jlc3BvbnNlUGFyYW1zKCk7Ci0gICAgICAgIHJlc3Bv
bnNlUGFyYW1zLnN1Y2Nlc3MgPSByZXNwb25zZS5zdWNjZXNzOwotICAgICAgICB2YXIgYnVpbGRl
ciA9IG5ldyBjb2RlYy5NZXNzYWdlVjFCdWlsZGVyKAotICAgICAgICAgICAga1VzYkRldmljZV9D
bGVhckhhbHRfTmFtZSwKLSAgICAgICAgICAgIGNvZGVjLmFsaWduKFVzYkRldmljZV9DbGVhckhh
bHRfUmVzcG9uc2VQYXJhbXMuZW5jb2RlZFNpemUpLAotICAgICAgICAgICAgY29kZWMua01lc3Nh
Z2VJc1Jlc3BvbnNlLCByZWFkZXIucmVxdWVzdElEKTsKLSAgICAgICAgYnVpbGRlci5lbmNvZGVT
dHJ1Y3QoVXNiRGV2aWNlX0NsZWFySGFsdF9SZXNwb25zZVBhcmFtcywKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcmVzcG9uc2VQYXJhbXMpOwotICAgICAgICB2YXIgbWVzc2FnZSA9IGJ1
aWxkZXIuZmluaXNoKCk7Ci0gICAgICAgIHJlc3BvbmRlci5hY2NlcHQobWVzc2FnZSk7Ci0gICAg
ICB9KTsKLSAgICAgIHJldHVybiB0cnVlOwotICAgIGNhc2Uga1VzYkRldmljZV9Db250cm9sVHJh
bnNmZXJJbl9OYW1lOgotICAgICAgdmFyIHBhcmFtcyA9IHJlYWRlci5kZWNvZGVTdHJ1Y3QoVXNi
RGV2aWNlX0NvbnRyb2xUcmFuc2ZlckluX1BhcmFtcyk7Ci0gICAgICB0aGlzLmNvbnRyb2xUcmFu
c2ZlckluKHBhcmFtcy5wYXJhbXMsIHBhcmFtcy5sZW5ndGgsIHBhcmFtcy50aW1lb3V0KS50aGVu
KGZ1bmN0aW9uKHJlc3BvbnNlKSB7Ci0gICAgICAgIHZhciByZXNwb25zZVBhcmFtcyA9Ci0gICAg
ICAgICAgICBuZXcgVXNiRGV2aWNlX0NvbnRyb2xUcmFuc2ZlckluX1Jlc3BvbnNlUGFyYW1zKCk7
Ci0gICAgICAgIHJlc3BvbnNlUGFyYW1zLnN0YXR1cyA9IHJlc3BvbnNlLnN0YXR1czsKLSAgICAg
ICAgcmVzcG9uc2VQYXJhbXMuZGF0YSA9IHJlc3BvbnNlLmRhdGE7Ci0gICAgICAgIHZhciBidWls
ZGVyID0gbmV3IGNvZGVjLk1lc3NhZ2VWMUJ1aWxkZXIoCi0gICAgICAgICAgICBrVXNiRGV2aWNl
X0NvbnRyb2xUcmFuc2ZlckluX05hbWUsCi0gICAgICAgICAgICBjb2RlYy5hbGlnbihVc2JEZXZp
Y2VfQ29udHJvbFRyYW5zZmVySW5fUmVzcG9uc2VQYXJhbXMuZW5jb2RlZFNpemUpLAotICAgICAg
ICAgICAgY29kZWMua01lc3NhZ2VJc1Jlc3BvbnNlLCByZWFkZXIucmVxdWVzdElEKTsKLSAgICAg
ICAgYnVpbGRlci5lbmNvZGVTdHJ1Y3QoVXNiRGV2aWNlX0NvbnRyb2xUcmFuc2ZlckluX1Jlc3Bv
bnNlUGFyYW1zLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zZVBhcmFtcyk7
Ci0gICAgICAgIHZhciBtZXNzYWdlID0gYnVpbGRlci5maW5pc2goKTsKLSAgICAgICAgcmVzcG9u
ZGVyLmFjY2VwdChtZXNzYWdlKTsKLSAgICAgIH0pOwotICAgICAgcmV0dXJuIHRydWU7Ci0gICAg
Y2FzZSBrVXNiRGV2aWNlX0NvbnRyb2xUcmFuc2Zlck91dF9OYW1lOgotICAgICAgdmFyIHBhcmFt
cyA9IHJlYWRlci5kZWNvZGVTdHJ1Y3QoVXNiRGV2aWNlX0NvbnRyb2xUcmFuc2Zlck91dF9QYXJh
bXMpOwotICAgICAgdGhpcy5jb250cm9sVHJhbnNmZXJPdXQocGFyYW1zLnBhcmFtcywgcGFyYW1z
LmRhdGEsIHBhcmFtcy50aW1lb3V0KS50aGVuKGZ1bmN0aW9uKHJlc3BvbnNlKSB7Ci0gICAgICAg
IHZhciByZXNwb25zZVBhcmFtcyA9Ci0gICAgICAgICAgICBuZXcgVXNiRGV2aWNlX0NvbnRyb2xU
cmFuc2Zlck91dF9SZXNwb25zZVBhcmFtcygpOwotICAgICAgICByZXNwb25zZVBhcmFtcy5zdGF0
dXMgPSByZXNwb25zZS5zdGF0dXM7Ci0gICAgICAgIHZhciBidWlsZGVyID0gbmV3IGNvZGVjLk1l
c3NhZ2VWMUJ1aWxkZXIoCi0gICAgICAgICAgICBrVXNiRGV2aWNlX0NvbnRyb2xUcmFuc2Zlck91
dF9OYW1lLAotICAgICAgICAgICAgY29kZWMuYWxpZ24oVXNiRGV2aWNlX0NvbnRyb2xUcmFuc2Zl
ck91dF9SZXNwb25zZVBhcmFtcy5lbmNvZGVkU2l6ZSksCi0gICAgICAgICAgICBjb2RlYy5rTWVz
c2FnZUlzUmVzcG9uc2UsIHJlYWRlci5yZXF1ZXN0SUQpOwotICAgICAgICBidWlsZGVyLmVuY29k
ZVN0cnVjdChVc2JEZXZpY2VfQ29udHJvbFRyYW5zZmVyT3V0X1Jlc3BvbnNlUGFyYW1zLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zZVBhcmFtcyk7Ci0gICAgICAgIHZhciBt
ZXNzYWdlID0gYnVpbGRlci5maW5pc2goKTsKLSAgICAgICAgcmVzcG9uZGVyLmFjY2VwdChtZXNz
YWdlKTsKLSAgICAgIH0pOwotICAgICAgcmV0dXJuIHRydWU7Ci0gICAgY2FzZSBrVXNiRGV2aWNl
X0dlbmVyaWNUcmFuc2ZlckluX05hbWU6Ci0gICAgICB2YXIgcGFyYW1zID0gcmVhZGVyLmRlY29k
ZVN0cnVjdChVc2JEZXZpY2VfR2VuZXJpY1RyYW5zZmVySW5fUGFyYW1zKTsKLSAgICAgIHRoaXMu
Z2VuZXJpY1RyYW5zZmVySW4ocGFyYW1zLmVuZHBvaW50TnVtYmVyLCBwYXJhbXMubGVuZ3RoLCBw
YXJhbXMudGltZW91dCkudGhlbihmdW5jdGlvbihyZXNwb25zZSkgewotICAgICAgICB2YXIgcmVz
cG9uc2VQYXJhbXMgPQotICAgICAgICAgICAgbmV3IFVzYkRldmljZV9HZW5lcmljVHJhbnNmZXJJ
bl9SZXNwb25zZVBhcmFtcygpOwotICAgICAgICByZXNwb25zZVBhcmFtcy5zdGF0dXMgPSByZXNw
b25zZS5zdGF0dXM7Ci0gICAgICAgIHJlc3BvbnNlUGFyYW1zLmRhdGEgPSByZXNwb25zZS5kYXRh
OwotICAgICAgICB2YXIgYnVpbGRlciA9IG5ldyBjb2RlYy5NZXNzYWdlVjFCdWlsZGVyKAotICAg
ICAgICAgICAga1VzYkRldmljZV9HZW5lcmljVHJhbnNmZXJJbl9OYW1lLAotICAgICAgICAgICAg
Y29kZWMuYWxpZ24oVXNiRGV2aWNlX0dlbmVyaWNUcmFuc2ZlckluX1Jlc3BvbnNlUGFyYW1zLmVu
Y29kZWRTaXplKSwKLSAgICAgICAgICAgIGNvZGVjLmtNZXNzYWdlSXNSZXNwb25zZSwgcmVhZGVy
LnJlcXVlc3RJRCk7Ci0gICAgICAgIGJ1aWxkZXIuZW5jb2RlU3RydWN0KFVzYkRldmljZV9HZW5l
cmljVHJhbnNmZXJJbl9SZXNwb25zZVBhcmFtcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcmVzcG9uc2VQYXJhbXMpOwotICAgICAgICB2YXIgbWVzc2FnZSA9IGJ1aWxkZXIuZmluaXNo
KCk7Ci0gICAgICAgIHJlc3BvbmRlci5hY2NlcHQobWVzc2FnZSk7Ci0gICAgICB9KTsKLSAgICAg
IHJldHVybiB0cnVlOwotICAgIGNhc2Uga1VzYkRldmljZV9HZW5lcmljVHJhbnNmZXJPdXRfTmFt
ZToKLSAgICAgIHZhciBwYXJhbXMgPSByZWFkZXIuZGVjb2RlU3RydWN0KFVzYkRldmljZV9HZW5l
cmljVHJhbnNmZXJPdXRfUGFyYW1zKTsKLSAgICAgIHRoaXMuZ2VuZXJpY1RyYW5zZmVyT3V0KHBh
cmFtcy5lbmRwb2ludE51bWJlciwgcGFyYW1zLmRhdGEsIHBhcmFtcy50aW1lb3V0KS50aGVuKGZ1
bmN0aW9uKHJlc3BvbnNlKSB7Ci0gICAgICAgIHZhciByZXNwb25zZVBhcmFtcyA9Ci0gICAgICAg
ICAgICBuZXcgVXNiRGV2aWNlX0dlbmVyaWNUcmFuc2Zlck91dF9SZXNwb25zZVBhcmFtcygpOwot
ICAgICAgICByZXNwb25zZVBhcmFtcy5zdGF0dXMgPSByZXNwb25zZS5zdGF0dXM7Ci0gICAgICAg
IHZhciBidWlsZGVyID0gbmV3IGNvZGVjLk1lc3NhZ2VWMUJ1aWxkZXIoCi0gICAgICAgICAgICBr
VXNiRGV2aWNlX0dlbmVyaWNUcmFuc2Zlck91dF9OYW1lLAotICAgICAgICAgICAgY29kZWMuYWxp
Z24oVXNiRGV2aWNlX0dlbmVyaWNUcmFuc2Zlck91dF9SZXNwb25zZVBhcmFtcy5lbmNvZGVkU2l6
ZSksCi0gICAgICAgICAgICBjb2RlYy5rTWVzc2FnZUlzUmVzcG9uc2UsIHJlYWRlci5yZXF1ZXN0
SUQpOwotICAgICAgICBidWlsZGVyLmVuY29kZVN0cnVjdChVc2JEZXZpY2VfR2VuZXJpY1RyYW5z
ZmVyT3V0X1Jlc3BvbnNlUGFyYW1zLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNw
b25zZVBhcmFtcyk7Ci0gICAgICAgIHZhciBtZXNzYWdlID0gYnVpbGRlci5maW5pc2goKTsKLSAg
ICAgICAgcmVzcG9uZGVyLmFjY2VwdChtZXNzYWdlKTsKLSAgICAgIH0pOwotICAgICAgcmV0dXJu
IHRydWU7Ci0gICAgY2FzZSBrVXNiRGV2aWNlX0lzb2Nocm9ub3VzVHJhbnNmZXJJbl9OYW1lOgot
ICAgICAgdmFyIHBhcmFtcyA9IHJlYWRlci5kZWNvZGVTdHJ1Y3QoVXNiRGV2aWNlX0lzb2Nocm9u
b3VzVHJhbnNmZXJJbl9QYXJhbXMpOwotICAgICAgdGhpcy5pc29jaHJvbm91c1RyYW5zZmVySW4o
cGFyYW1zLmVuZHBvaW50TnVtYmVyLCBwYXJhbXMucGFja2V0TGVuZ3RocywgcGFyYW1zLnRpbWVv
dXQpLnRoZW4oZnVuY3Rpb24ocmVzcG9uc2UpIHsKLSAgICAgICAgdmFyIHJlc3BvbnNlUGFyYW1z
ID0KLSAgICAgICAgICAgIG5ldyBVc2JEZXZpY2VfSXNvY2hyb25vdXNUcmFuc2ZlckluX1Jlc3Bv
bnNlUGFyYW1zKCk7Ci0gICAgICAgIHJlc3BvbnNlUGFyYW1zLmRhdGEgPSByZXNwb25zZS5kYXRh
OwotICAgICAgICByZXNwb25zZVBhcmFtcy5wYWNrZXRzID0gcmVzcG9uc2UucGFja2V0czsKLSAg
ICAgICAgdmFyIGJ1aWxkZXIgPSBuZXcgY29kZWMuTWVzc2FnZVYxQnVpbGRlcigKLSAgICAgICAg
ICAgIGtVc2JEZXZpY2VfSXNvY2hyb25vdXNUcmFuc2ZlckluX05hbWUsCi0gICAgICAgICAgICBj
b2RlYy5hbGlnbihVc2JEZXZpY2VfSXNvY2hyb25vdXNUcmFuc2ZlckluX1Jlc3BvbnNlUGFyYW1z
LmVuY29kZWRTaXplKSwKLSAgICAgICAgICAgIGNvZGVjLmtNZXNzYWdlSXNSZXNwb25zZSwgcmVh
ZGVyLnJlcXVlc3RJRCk7Ci0gICAgICAgIGJ1aWxkZXIuZW5jb2RlU3RydWN0KFVzYkRldmljZV9J
c29jaHJvbm91c1RyYW5zZmVySW5fUmVzcG9uc2VQYXJhbXMsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHJlc3BvbnNlUGFyYW1zKTsKLSAgICAgICAgdmFyIG1lc3NhZ2UgPSBidWlsZGVy
LmZpbmlzaCgpOwotICAgICAgICByZXNwb25kZXIuYWNjZXB0KG1lc3NhZ2UpOwotICAgICAgfSk7
Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICBjYXNlIGtVc2JEZXZpY2VfSXNvY2hyb25vdXNUcmFu
c2Zlck91dF9OYW1lOgotICAgICAgdmFyIHBhcmFtcyA9IHJlYWRlci5kZWNvZGVTdHJ1Y3QoVXNi
RGV2aWNlX0lzb2Nocm9ub3VzVHJhbnNmZXJPdXRfUGFyYW1zKTsKLSAgICAgIHRoaXMuaXNvY2hy
b25vdXNUcmFuc2Zlck91dChwYXJhbXMuZW5kcG9pbnROdW1iZXIsIHBhcmFtcy5kYXRhLCBwYXJh
bXMucGFja2V0TGVuZ3RocywgcGFyYW1zLnRpbWVvdXQpLnRoZW4oZnVuY3Rpb24ocmVzcG9uc2Up
IHsKLSAgICAgICAgdmFyIHJlc3BvbnNlUGFyYW1zID0KLSAgICAgICAgICAgIG5ldyBVc2JEZXZp
Y2VfSXNvY2hyb25vdXNUcmFuc2Zlck91dF9SZXNwb25zZVBhcmFtcygpOwotICAgICAgICByZXNw
b25zZVBhcmFtcy5wYWNrZXRzID0gcmVzcG9uc2UucGFja2V0czsKLSAgICAgICAgdmFyIGJ1aWxk
ZXIgPSBuZXcgY29kZWMuTWVzc2FnZVYxQnVpbGRlcigKLSAgICAgICAgICAgIGtVc2JEZXZpY2Vf
SXNvY2hyb25vdXNUcmFuc2Zlck91dF9OYW1lLAotICAgICAgICAgICAgY29kZWMuYWxpZ24oVXNi
RGV2aWNlX0lzb2Nocm9ub3VzVHJhbnNmZXJPdXRfUmVzcG9uc2VQYXJhbXMuZW5jb2RlZFNpemUp
LAotICAgICAgICAgICAgY29kZWMua01lc3NhZ2VJc1Jlc3BvbnNlLCByZWFkZXIucmVxdWVzdElE
KTsKLSAgICAgICAgYnVpbGRlci5lbmNvZGVTdHJ1Y3QoVXNiRGV2aWNlX0lzb2Nocm9ub3VzVHJh
bnNmZXJPdXRfUmVzcG9uc2VQYXJhbXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJl
c3BvbnNlUGFyYW1zKTsKLSAgICAgICAgdmFyIG1lc3NhZ2UgPSBidWlsZGVyLmZpbmlzaCgpOwot
ICAgICAgICByZXNwb25kZXIuYWNjZXB0KG1lc3NhZ2UpOwotICAgICAgfSk7Ci0gICAgICByZXR1
cm4gdHJ1ZTsKLSAgICBkZWZhdWx0OgotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgfTsK
LQotICBmdW5jdGlvbiB2YWxpZGF0ZVVzYkRldmljZVJlcXVlc3QobWVzc2FnZVZhbGlkYXRvcikg
ewotICAgIHZhciBtZXNzYWdlID0gbWVzc2FnZVZhbGlkYXRvci5tZXNzYWdlOwotICAgIHZhciBw
YXJhbXNDbGFzcyA9IG51bGw7Ci0gICAgc3dpdGNoIChtZXNzYWdlLmdldE5hbWUoKSkgewotICAg
ICAgY2FzZSBrVXNiRGV2aWNlX09wZW5fTmFtZToKLSAgICAgICAgaWYgKG1lc3NhZ2UuZXhwZWN0
c1Jlc3BvbnNlKCkpCi0gICAgICAgICAgcGFyYW1zQ2xhc3MgPSBVc2JEZXZpY2VfT3Blbl9QYXJh
bXM7Ci0gICAgICBicmVhazsKLSAgICAgIGNhc2Uga1VzYkRldmljZV9DbG9zZV9OYW1lOgotICAg
ICAgICBpZiAobWVzc2FnZS5leHBlY3RzUmVzcG9uc2UoKSkKLSAgICAgICAgICBwYXJhbXNDbGFz
cyA9IFVzYkRldmljZV9DbG9zZV9QYXJhbXM7Ci0gICAgICBicmVhazsKLSAgICAgIGNhc2Uga1Vz
YkRldmljZV9TZXRDb25maWd1cmF0aW9uX05hbWU6Ci0gICAgICAgIGlmIChtZXNzYWdlLmV4cGVj
dHNSZXNwb25zZSgpKQotICAgICAgICAgIHBhcmFtc0NsYXNzID0gVXNiRGV2aWNlX1NldENvbmZp
Z3VyYXRpb25fUGFyYW1zOwotICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIGtVc2JEZXZpY2VfQ2xh
aW1JbnRlcmZhY2VfTmFtZToKLSAgICAgICAgaWYgKG1lc3NhZ2UuZXhwZWN0c1Jlc3BvbnNlKCkp
Ci0gICAgICAgICAgcGFyYW1zQ2xhc3MgPSBVc2JEZXZpY2VfQ2xhaW1JbnRlcmZhY2VfUGFyYW1z
OwotICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIGtVc2JEZXZpY2VfUmVsZWFzZUludGVyZmFjZV9O
YW1lOgotICAgICAgICBpZiAobWVzc2FnZS5leHBlY3RzUmVzcG9uc2UoKSkKLSAgICAgICAgICBw
YXJhbXNDbGFzcyA9IFVzYkRldmljZV9SZWxlYXNlSW50ZXJmYWNlX1BhcmFtczsKLSAgICAgIGJy
ZWFrOwotICAgICAgY2FzZSBrVXNiRGV2aWNlX1NldEludGVyZmFjZUFsdGVybmF0ZVNldHRpbmdf
TmFtZToKLSAgICAgICAgaWYgKG1lc3NhZ2UuZXhwZWN0c1Jlc3BvbnNlKCkpCi0gICAgICAgICAg
cGFyYW1zQ2xhc3MgPSBVc2JEZXZpY2VfU2V0SW50ZXJmYWNlQWx0ZXJuYXRlU2V0dGluZ19QYXJh
bXM7Ci0gICAgICBicmVhazsKLSAgICAgIGNhc2Uga1VzYkRldmljZV9SZXNldF9OYW1lOgotICAg
ICAgICBpZiAobWVzc2FnZS5leHBlY3RzUmVzcG9uc2UoKSkKLSAgICAgICAgICBwYXJhbXNDbGFz
cyA9IFVzYkRldmljZV9SZXNldF9QYXJhbXM7Ci0gICAgICBicmVhazsKLSAgICAgIGNhc2Uga1Vz
YkRldmljZV9DbGVhckhhbHRfTmFtZToKLSAgICAgICAgaWYgKG1lc3NhZ2UuZXhwZWN0c1Jlc3Bv
bnNlKCkpCi0gICAgICAgICAgcGFyYW1zQ2xhc3MgPSBVc2JEZXZpY2VfQ2xlYXJIYWx0X1BhcmFt
czsKLSAgICAgIGJyZWFrOwotICAgICAgY2FzZSBrVXNiRGV2aWNlX0NvbnRyb2xUcmFuc2Zlcklu
X05hbWU6Ci0gICAgICAgIGlmIChtZXNzYWdlLmV4cGVjdHNSZXNwb25zZSgpKQotICAgICAgICAg
IHBhcmFtc0NsYXNzID0gVXNiRGV2aWNlX0NvbnRyb2xUcmFuc2ZlckluX1BhcmFtczsKLSAgICAg
IGJyZWFrOwotICAgICAgY2FzZSBrVXNiRGV2aWNlX0NvbnRyb2xUcmFuc2Zlck91dF9OYW1lOgot
ICAgICAgICBpZiAobWVzc2FnZS5leHBlY3RzUmVzcG9uc2UoKSkKLSAgICAgICAgICBwYXJhbXND
bGFzcyA9IFVzYkRldmljZV9Db250cm9sVHJhbnNmZXJPdXRfUGFyYW1zOwotICAgICAgYnJlYWs7
Ci0gICAgICBjYXNlIGtVc2JEZXZpY2VfR2VuZXJpY1RyYW5zZmVySW5fTmFtZToKLSAgICAgICAg
aWYgKG1lc3NhZ2UuZXhwZWN0c1Jlc3BvbnNlKCkpCi0gICAgICAgICAgcGFyYW1zQ2xhc3MgPSBV
c2JEZXZpY2VfR2VuZXJpY1RyYW5zZmVySW5fUGFyYW1zOwotICAgICAgYnJlYWs7Ci0gICAgICBj
YXNlIGtVc2JEZXZpY2VfR2VuZXJpY1RyYW5zZmVyT3V0X05hbWU6Ci0gICAgICAgIGlmIChtZXNz
YWdlLmV4cGVjdHNSZXNwb25zZSgpKQotICAgICAgICAgIHBhcmFtc0NsYXNzID0gVXNiRGV2aWNl
X0dlbmVyaWNUcmFuc2Zlck91dF9QYXJhbXM7Ci0gICAgICBicmVhazsKLSAgICAgIGNhc2Uga1Vz
YkRldmljZV9Jc29jaHJvbm91c1RyYW5zZmVySW5fTmFtZToKLSAgICAgICAgaWYgKG1lc3NhZ2Uu
ZXhwZWN0c1Jlc3BvbnNlKCkpCi0gICAgICAgICAgcGFyYW1zQ2xhc3MgPSBVc2JEZXZpY2VfSXNv
Y2hyb25vdXNUcmFuc2ZlckluX1BhcmFtczsKLSAgICAgIGJyZWFrOwotICAgICAgY2FzZSBrVXNi
RGV2aWNlX0lzb2Nocm9ub3VzVHJhbnNmZXJPdXRfTmFtZToKLSAgICAgICAgaWYgKG1lc3NhZ2Uu
ZXhwZWN0c1Jlc3BvbnNlKCkpCi0gICAgICAgICAgcGFyYW1zQ2xhc3MgPSBVc2JEZXZpY2VfSXNv
Y2hyb25vdXNUcmFuc2Zlck91dF9QYXJhbXM7Ci0gICAgICBicmVhazsKLSAgICB9Ci0gICAgaWYg
KHBhcmFtc0NsYXNzID09PSBudWxsKQotICAgICAgcmV0dXJuIHZhbGlkYXRvci52YWxpZGF0aW9u
RXJyb3IuTk9ORTsKLSAgICByZXR1cm4gcGFyYW1zQ2xhc3MudmFsaWRhdGUobWVzc2FnZVZhbGlk
YXRvciwgbWVzc2FnZVZhbGlkYXRvci5tZXNzYWdlLmdldEhlYWRlck51bUJ5dGVzKCkpOwotICB9
Ci0KLSAgZnVuY3Rpb24gdmFsaWRhdGVVc2JEZXZpY2VSZXNwb25zZShtZXNzYWdlVmFsaWRhdG9y
KSB7Ci0gICB2YXIgbWVzc2FnZSA9IG1lc3NhZ2VWYWxpZGF0b3IubWVzc2FnZTsKLSAgIHZhciBw
YXJhbXNDbGFzcyA9IG51bGw7Ci0gICBzd2l0Y2ggKG1lc3NhZ2UuZ2V0TmFtZSgpKSB7Ci0gICAg
ICBjYXNlIGtVc2JEZXZpY2VfT3Blbl9OYW1lOgotICAgICAgICBpZiAobWVzc2FnZS5pc1Jlc3Bv
bnNlKCkpCi0gICAgICAgICAgcGFyYW1zQ2xhc3MgPSBVc2JEZXZpY2VfT3Blbl9SZXNwb25zZVBh
cmFtczsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIGtVc2JEZXZpY2VfQ2xvc2VfTmFtZToK
LSAgICAgICAgaWYgKG1lc3NhZ2UuaXNSZXNwb25zZSgpKQotICAgICAgICAgIHBhcmFtc0NsYXNz
ID0gVXNiRGV2aWNlX0Nsb3NlX1Jlc3BvbnNlUGFyYW1zOwotICAgICAgICBicmVhazsKLSAgICAg
IGNhc2Uga1VzYkRldmljZV9TZXRDb25maWd1cmF0aW9uX05hbWU6Ci0gICAgICAgIGlmIChtZXNz
YWdlLmlzUmVzcG9uc2UoKSkKLSAgICAgICAgICBwYXJhbXNDbGFzcyA9IFVzYkRldmljZV9TZXRD
b25maWd1cmF0aW9uX1Jlc3BvbnNlUGFyYW1zOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2Ug
a1VzYkRldmljZV9DbGFpbUludGVyZmFjZV9OYW1lOgotICAgICAgICBpZiAobWVzc2FnZS5pc1Jl
c3BvbnNlKCkpCi0gICAgICAgICAgcGFyYW1zQ2xhc3MgPSBVc2JEZXZpY2VfQ2xhaW1JbnRlcmZh
Y2VfUmVzcG9uc2VQYXJhbXM7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBrVXNiRGV2aWNl
X1JlbGVhc2VJbnRlcmZhY2VfTmFtZToKLSAgICAgICAgaWYgKG1lc3NhZ2UuaXNSZXNwb25zZSgp
KQotICAgICAgICAgIHBhcmFtc0NsYXNzID0gVXNiRGV2aWNlX1JlbGVhc2VJbnRlcmZhY2VfUmVz
cG9uc2VQYXJhbXM7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBrVXNiRGV2aWNlX1NldElu
dGVyZmFjZUFsdGVybmF0ZVNldHRpbmdfTmFtZToKLSAgICAgICAgaWYgKG1lc3NhZ2UuaXNSZXNw
b25zZSgpKQotICAgICAgICAgIHBhcmFtc0NsYXNzID0gVXNiRGV2aWNlX1NldEludGVyZmFjZUFs
dGVybmF0ZVNldHRpbmdfUmVzcG9uc2VQYXJhbXM7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2Fz
ZSBrVXNiRGV2aWNlX1Jlc2V0X05hbWU6Ci0gICAgICAgIGlmIChtZXNzYWdlLmlzUmVzcG9uc2Uo
KSkKLSAgICAgICAgICBwYXJhbXNDbGFzcyA9IFVzYkRldmljZV9SZXNldF9SZXNwb25zZVBhcmFt
czsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIGtVc2JEZXZpY2VfQ2xlYXJIYWx0X05hbWU6
Ci0gICAgICAgIGlmIChtZXNzYWdlLmlzUmVzcG9uc2UoKSkKLSAgICAgICAgICBwYXJhbXNDbGFz
cyA9IFVzYkRldmljZV9DbGVhckhhbHRfUmVzcG9uc2VQYXJhbXM7Ci0gICAgICAgIGJyZWFrOwot
ICAgICAgY2FzZSBrVXNiRGV2aWNlX0NvbnRyb2xUcmFuc2ZlckluX05hbWU6Ci0gICAgICAgIGlm
IChtZXNzYWdlLmlzUmVzcG9uc2UoKSkKLSAgICAgICAgICBwYXJhbXNDbGFzcyA9IFVzYkRldmlj
ZV9Db250cm9sVHJhbnNmZXJJbl9SZXNwb25zZVBhcmFtczsKLSAgICAgICAgYnJlYWs7Ci0gICAg
ICBjYXNlIGtVc2JEZXZpY2VfQ29udHJvbFRyYW5zZmVyT3V0X05hbWU6Ci0gICAgICAgIGlmICht
ZXNzYWdlLmlzUmVzcG9uc2UoKSkKLSAgICAgICAgICBwYXJhbXNDbGFzcyA9IFVzYkRldmljZV9D
b250cm9sVHJhbnNmZXJPdXRfUmVzcG9uc2VQYXJhbXM7Ci0gICAgICAgIGJyZWFrOwotICAgICAg
Y2FzZSBrVXNiRGV2aWNlX0dlbmVyaWNUcmFuc2ZlckluX05hbWU6Ci0gICAgICAgIGlmIChtZXNz
YWdlLmlzUmVzcG9uc2UoKSkKLSAgICAgICAgICBwYXJhbXNDbGFzcyA9IFVzYkRldmljZV9HZW5l
cmljVHJhbnNmZXJJbl9SZXNwb25zZVBhcmFtczsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNl
IGtVc2JEZXZpY2VfR2VuZXJpY1RyYW5zZmVyT3V0X05hbWU6Ci0gICAgICAgIGlmIChtZXNzYWdl
LmlzUmVzcG9uc2UoKSkKLSAgICAgICAgICBwYXJhbXNDbGFzcyA9IFVzYkRldmljZV9HZW5lcmlj
VHJhbnNmZXJPdXRfUmVzcG9uc2VQYXJhbXM7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBr
VXNiRGV2aWNlX0lzb2Nocm9ub3VzVHJhbnNmZXJJbl9OYW1lOgotICAgICAgICBpZiAobWVzc2Fn
ZS5pc1Jlc3BvbnNlKCkpCi0gICAgICAgICAgcGFyYW1zQ2xhc3MgPSBVc2JEZXZpY2VfSXNvY2hy
b25vdXNUcmFuc2ZlckluX1Jlc3BvbnNlUGFyYW1zOwotICAgICAgICBicmVhazsKLSAgICAgIGNh
c2Uga1VzYkRldmljZV9Jc29jaHJvbm91c1RyYW5zZmVyT3V0X05hbWU6Ci0gICAgICAgIGlmICht
ZXNzYWdlLmlzUmVzcG9uc2UoKSkKLSAgICAgICAgICBwYXJhbXNDbGFzcyA9IFVzYkRldmljZV9J
c29jaHJvbm91c1RyYW5zZmVyT3V0X1Jlc3BvbnNlUGFyYW1zOwotICAgICAgICBicmVhazsKLSAg
ICB9Ci0gICAgaWYgKHBhcmFtc0NsYXNzID09PSBudWxsKQotICAgICAgcmV0dXJuIHZhbGlkYXRv
ci52YWxpZGF0aW9uRXJyb3IuTk9ORTsKLSAgICByZXR1cm4gcGFyYW1zQ2xhc3MudmFsaWRhdGUo
bWVzc2FnZVZhbGlkYXRvciwgbWVzc2FnZVZhbGlkYXRvci5tZXNzYWdlLmdldEhlYWRlck51bUJ5
dGVzKCkpOwotICB9Ci0KLSAgdmFyIFVzYkRldmljZSA9IHsKLSAgICBuYW1lOiAnZGV2aWNlLm1v
am9tLlVzYkRldmljZScsCi0gICAga1ZlcnNpb246IDAsCi0gICAgcHRyQ2xhc3M6IFVzYkRldmlj
ZVB0ciwKLSAgICBwcm94eUNsYXNzOiBVc2JEZXZpY2VQcm94eSwKLSAgICBzdHViQ2xhc3M6IFVz
YkRldmljZVN0dWIsCi0gICAgdmFsaWRhdGVSZXF1ZXN0OiB2YWxpZGF0ZVVzYkRldmljZVJlcXVl
c3QsCi0gICAgdmFsaWRhdGVSZXNwb25zZTogdmFsaWRhdGVVc2JEZXZpY2VSZXNwb25zZSwKLSAg
fTsKLSAgVXNiRGV2aWNlU3R1Yi5wcm90b3R5cGUudmFsaWRhdG9yID0gdmFsaWRhdGVVc2JEZXZp
Y2VSZXF1ZXN0OwotICBVc2JEZXZpY2VQcm94eS5wcm90b3R5cGUudmFsaWRhdG9yID0gdmFsaWRh
dGVVc2JEZXZpY2VSZXNwb25zZTsKLSAgdmFyIGtVc2JEZXZpY2VDbGllbnRfT25EZXZpY2VPcGVu
ZWRfTmFtZSA9IDA7Ci0gIHZhciBrVXNiRGV2aWNlQ2xpZW50X09uRGV2aWNlQ2xvc2VkX05hbWUg
PSAxOwotCi0gIGZ1bmN0aW9uIFVzYkRldmljZUNsaWVudFB0cihoYW5kbGVPclB0ckluZm8pIHsK
LSAgICB0aGlzLnB0ciA9IG5ldyBiaW5kaW5ncy5JbnRlcmZhY2VQdHJDb250cm9sbGVyKFVzYkRl
dmljZUNsaWVudCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGhhbmRsZU9yUHRySW5mbyk7Ci0gIH0KLQotICBmdW5jdGlvbiBVc2JEZXZpY2VDbGll
bnRBc3NvY2lhdGVkUHRyKGFzc29jaWF0ZWRJbnRlcmZhY2VQdHJJbmZvKSB7Ci0gICAgdGhpcy5w
dHIgPSBuZXcgYXNzb2NpYXRlZEJpbmRpbmdzLkFzc29jaWF0ZWRJbnRlcmZhY2VQdHJDb250cm9s
bGVyKAotICAgICAgICBVc2JEZXZpY2VDbGllbnQsIGFzc29jaWF0ZWRJbnRlcmZhY2VQdHJJbmZv
KTsKLSAgfQotCi0gIFVzYkRldmljZUNsaWVudEFzc29jaWF0ZWRQdHIucHJvdG90eXBlID0KLSAg
ICAgIE9iamVjdC5jcmVhdGUoVXNiRGV2aWNlQ2xpZW50UHRyLnByb3RvdHlwZSk7Ci0gIFVzYkRl
dmljZUNsaWVudEFzc29jaWF0ZWRQdHIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0KLSAgICAgIFVz
YkRldmljZUNsaWVudEFzc29jaWF0ZWRQdHI7Ci0KLSAgZnVuY3Rpb24gVXNiRGV2aWNlQ2xpZW50
UHJveHkocmVjZWl2ZXIpIHsKLSAgICB0aGlzLnJlY2VpdmVyXyA9IHJlY2VpdmVyOwotICB9Ci0g
IFVzYkRldmljZUNsaWVudFB0ci5wcm90b3R5cGUub25EZXZpY2VPcGVuZWQgPSBmdW5jdGlvbigp
IHsKLSAgICByZXR1cm4gVXNiRGV2aWNlQ2xpZW50UHJveHkucHJvdG90eXBlLm9uRGV2aWNlT3Bl
bmVkCi0gICAgICAgIC5hcHBseSh0aGlzLnB0ci5nZXRQcm94eSgpLCBhcmd1bWVudHMpOwotICB9
OwotCi0gIFVzYkRldmljZUNsaWVudFByb3h5LnByb3RvdHlwZS5vbkRldmljZU9wZW5lZCA9IGZ1
bmN0aW9uKCkgewotICAgIHZhciBwYXJhbXNfID0gbmV3IFVzYkRldmljZUNsaWVudF9PbkRldmlj
ZU9wZW5lZF9QYXJhbXMoKTsKLSAgICB2YXIgYnVpbGRlciA9IG5ldyBjb2RlYy5NZXNzYWdlVjBC
dWlsZGVyKAotICAgICAgICBrVXNiRGV2aWNlQ2xpZW50X09uRGV2aWNlT3BlbmVkX05hbWUsCi0g
ICAgICAgIGNvZGVjLmFsaWduKFVzYkRldmljZUNsaWVudF9PbkRldmljZU9wZW5lZF9QYXJhbXMu
ZW5jb2RlZFNpemUpKTsKLSAgICBidWlsZGVyLmVuY29kZVN0cnVjdChVc2JEZXZpY2VDbGllbnRf
T25EZXZpY2VPcGVuZWRfUGFyYW1zLCBwYXJhbXNfKTsKLSAgICB2YXIgbWVzc2FnZSA9IGJ1aWxk
ZXIuZmluaXNoKCk7Ci0gICAgdGhpcy5yZWNlaXZlcl8uYWNjZXB0KG1lc3NhZ2UpOwotICB9Owot
ICBVc2JEZXZpY2VDbGllbnRQdHIucHJvdG90eXBlLm9uRGV2aWNlQ2xvc2VkID0gZnVuY3Rpb24o
KSB7Ci0gICAgcmV0dXJuIFVzYkRldmljZUNsaWVudFByb3h5LnByb3RvdHlwZS5vbkRldmljZUNs
b3NlZAotICAgICAgICAuYXBwbHkodGhpcy5wdHIuZ2V0UHJveHkoKSwgYXJndW1lbnRzKTsKLSAg
fTsKLQotICBVc2JEZXZpY2VDbGllbnRQcm94eS5wcm90b3R5cGUub25EZXZpY2VDbG9zZWQgPSBm
dW5jdGlvbigpIHsKLSAgICB2YXIgcGFyYW1zXyA9IG5ldyBVc2JEZXZpY2VDbGllbnRfT25EZXZp
Y2VDbG9zZWRfUGFyYW1zKCk7Ci0gICAgdmFyIGJ1aWxkZXIgPSBuZXcgY29kZWMuTWVzc2FnZVYw
QnVpbGRlcigKLSAgICAgICAga1VzYkRldmljZUNsaWVudF9PbkRldmljZUNsb3NlZF9OYW1lLAot
ICAgICAgICBjb2RlYy5hbGlnbihVc2JEZXZpY2VDbGllbnRfT25EZXZpY2VDbG9zZWRfUGFyYW1z
LmVuY29kZWRTaXplKSk7Ci0gICAgYnVpbGRlci5lbmNvZGVTdHJ1Y3QoVXNiRGV2aWNlQ2xpZW50
X09uRGV2aWNlQ2xvc2VkX1BhcmFtcywgcGFyYW1zXyk7Ci0gICAgdmFyIG1lc3NhZ2UgPSBidWls
ZGVyLmZpbmlzaCgpOwotICAgIHRoaXMucmVjZWl2ZXJfLmFjY2VwdChtZXNzYWdlKTsKLSAgfTsK
LQotICBmdW5jdGlvbiBVc2JEZXZpY2VDbGllbnRTdHViKGRlbGVnYXRlKSB7Ci0gICAgdGhpcy5k
ZWxlZ2F0ZV8gPSBkZWxlZ2F0ZTsKLSAgfQotICBVc2JEZXZpY2VDbGllbnRTdHViLnByb3RvdHlw
ZS5vbkRldmljZU9wZW5lZCA9IGZ1bmN0aW9uKCkgewotICAgIHJldHVybiB0aGlzLmRlbGVnYXRl
XyAmJiB0aGlzLmRlbGVnYXRlXy5vbkRldmljZU9wZW5lZCAmJiB0aGlzLmRlbGVnYXRlXy5vbkRl
dmljZU9wZW5lZCgpOwotICB9Ci0gIFVzYkRldmljZUNsaWVudFN0dWIucHJvdG90eXBlLm9uRGV2
aWNlQ2xvc2VkID0gZnVuY3Rpb24oKSB7Ci0gICAgcmV0dXJuIHRoaXMuZGVsZWdhdGVfICYmIHRo
aXMuZGVsZWdhdGVfLm9uRGV2aWNlQ2xvc2VkICYmIHRoaXMuZGVsZWdhdGVfLm9uRGV2aWNlQ2xv
c2VkKCk7Ci0gIH0KLQotICBVc2JEZXZpY2VDbGllbnRTdHViLnByb3RvdHlwZS5hY2NlcHQgPSBm
dW5jdGlvbihtZXNzYWdlKSB7Ci0gICAgdmFyIHJlYWRlciA9IG5ldyBjb2RlYy5NZXNzYWdlUmVh
ZGVyKG1lc3NhZ2UpOwotICAgIHN3aXRjaCAocmVhZGVyLm1lc3NhZ2VOYW1lKSB7Ci0gICAgY2Fz
ZSBrVXNiRGV2aWNlQ2xpZW50X09uRGV2aWNlT3BlbmVkX05hbWU6Ci0gICAgICB2YXIgcGFyYW1z
ID0gcmVhZGVyLmRlY29kZVN0cnVjdChVc2JEZXZpY2VDbGllbnRfT25EZXZpY2VPcGVuZWRfUGFy
YW1zKTsKLSAgICAgIHRoaXMub25EZXZpY2VPcGVuZWQoKTsKLSAgICAgIHJldHVybiB0cnVlOwot
ICAgIGNhc2Uga1VzYkRldmljZUNsaWVudF9PbkRldmljZUNsb3NlZF9OYW1lOgotICAgICAgdmFy
IHBhcmFtcyA9IHJlYWRlci5kZWNvZGVTdHJ1Y3QoVXNiRGV2aWNlQ2xpZW50X09uRGV2aWNlQ2xv
c2VkX1BhcmFtcyk7Ci0gICAgICB0aGlzLm9uRGV2aWNlQ2xvc2VkKCk7Ci0gICAgICByZXR1cm4g
dHJ1ZTsKLSAgICBkZWZhdWx0OgotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgfTsKLQot
ICBVc2JEZXZpY2VDbGllbnRTdHViLnByb3RvdHlwZS5hY2NlcHRXaXRoUmVzcG9uZGVyID0KLSAg
ICAgIGZ1bmN0aW9uKG1lc3NhZ2UsIHJlc3BvbmRlcikgewotICAgIHZhciByZWFkZXIgPSBuZXcg
Y29kZWMuTWVzc2FnZVJlYWRlcihtZXNzYWdlKTsKLSAgICBzd2l0Y2ggKHJlYWRlci5tZXNzYWdl
TmFtZSkgewotICAgIGRlZmF1bHQ6Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICB9Owot
Ci0gIGZ1bmN0aW9uIHZhbGlkYXRlVXNiRGV2aWNlQ2xpZW50UmVxdWVzdChtZXNzYWdlVmFsaWRh
dG9yKSB7Ci0gICAgdmFyIG1lc3NhZ2UgPSBtZXNzYWdlVmFsaWRhdG9yLm1lc3NhZ2U7Ci0gICAg
dmFyIHBhcmFtc0NsYXNzID0gbnVsbDsKLSAgICBzd2l0Y2ggKG1lc3NhZ2UuZ2V0TmFtZSgpKSB7
Ci0gICAgICBjYXNlIGtVc2JEZXZpY2VDbGllbnRfT25EZXZpY2VPcGVuZWRfTmFtZToKLSAgICAg
ICAgaWYgKCFtZXNzYWdlLmV4cGVjdHNSZXNwb25zZSgpICYmICFtZXNzYWdlLmlzUmVzcG9uc2Uo
KSkKLSAgICAgICAgICBwYXJhbXNDbGFzcyA9IFVzYkRldmljZUNsaWVudF9PbkRldmljZU9wZW5l
ZF9QYXJhbXM7Ci0gICAgICBicmVhazsKLSAgICAgIGNhc2Uga1VzYkRldmljZUNsaWVudF9PbkRl
dmljZUNsb3NlZF9OYW1lOgotICAgICAgICBpZiAoIW1lc3NhZ2UuZXhwZWN0c1Jlc3BvbnNlKCkg
JiYgIW1lc3NhZ2UuaXNSZXNwb25zZSgpKQotICAgICAgICAgIHBhcmFtc0NsYXNzID0gVXNiRGV2
aWNlQ2xpZW50X09uRGV2aWNlQ2xvc2VkX1BhcmFtczsKLSAgICAgIGJyZWFrOwotICAgIH0KLSAg
ICBpZiAocGFyYW1zQ2xhc3MgPT09IG51bGwpCi0gICAgICByZXR1cm4gdmFsaWRhdG9yLnZhbGlk
YXRpb25FcnJvci5OT05FOwotICAgIHJldHVybiBwYXJhbXNDbGFzcy52YWxpZGF0ZShtZXNzYWdl
VmFsaWRhdG9yLCBtZXNzYWdlVmFsaWRhdG9yLm1lc3NhZ2UuZ2V0SGVhZGVyTnVtQnl0ZXMoKSk7
Ci0gIH0KLQotICBmdW5jdGlvbiB2YWxpZGF0ZVVzYkRldmljZUNsaWVudFJlc3BvbnNlKG1lc3Nh
Z2VWYWxpZGF0b3IpIHsKLSAgICByZXR1cm4gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05F
OwotICB9Ci0KLSAgdmFyIFVzYkRldmljZUNsaWVudCA9IHsKLSAgICBuYW1lOiAnZGV2aWNlLm1v
am9tLlVzYkRldmljZUNsaWVudCcsCi0gICAga1ZlcnNpb246IDAsCi0gICAgcHRyQ2xhc3M6IFVz
YkRldmljZUNsaWVudFB0ciwKLSAgICBwcm94eUNsYXNzOiBVc2JEZXZpY2VDbGllbnRQcm94eSwK
LSAgICBzdHViQ2xhc3M6IFVzYkRldmljZUNsaWVudFN0dWIsCi0gICAgdmFsaWRhdGVSZXF1ZXN0
OiB2YWxpZGF0ZVVzYkRldmljZUNsaWVudFJlcXVlc3QsCi0gICAgdmFsaWRhdGVSZXNwb25zZTog
bnVsbCwKLSAgfTsKLSAgVXNiRGV2aWNlQ2xpZW50U3R1Yi5wcm90b3R5cGUudmFsaWRhdG9yID0g
dmFsaWRhdGVVc2JEZXZpY2VDbGllbnRSZXF1ZXN0OwotICBVc2JEZXZpY2VDbGllbnRQcm94eS5w
cm90b3R5cGUudmFsaWRhdG9yID0gbnVsbDsKLSAgZXhwb3J0cy5Vc2JPcGVuRGV2aWNlRXJyb3Ig
PSBVc2JPcGVuRGV2aWNlRXJyb3I7Ci0gIGV4cG9ydHMuVXNiVHJhbnNmZXJEaXJlY3Rpb24gPSBV
c2JUcmFuc2ZlckRpcmVjdGlvbjsKLSAgZXhwb3J0cy5Vc2JDb250cm9sVHJhbnNmZXJUeXBlID0g
VXNiQ29udHJvbFRyYW5zZmVyVHlwZTsKLSAgZXhwb3J0cy5Vc2JDb250cm9sVHJhbnNmZXJSZWNp
cGllbnQgPSBVc2JDb250cm9sVHJhbnNmZXJSZWNpcGllbnQ7Ci0gIGV4cG9ydHMuVXNiVHJhbnNm
ZXJUeXBlID0gVXNiVHJhbnNmZXJUeXBlOwotICBleHBvcnRzLlVzYlN5bmNocm9uaXphdGlvblR5
cGUgPSBVc2JTeW5jaHJvbml6YXRpb25UeXBlOwotICBleHBvcnRzLlVzYlVzYWdlVHlwZSA9IFVz
YlVzYWdlVHlwZTsKLSAgZXhwb3J0cy5Vc2JUcmFuc2ZlclN0YXR1cyA9IFVzYlRyYW5zZmVyU3Rh
dHVzOwotICBleHBvcnRzLlVzYkVuZHBvaW50SW5mbyA9IFVzYkVuZHBvaW50SW5mbzsKLSAgZXhw
b3J0cy5Vc2JBbHRlcm5hdGVJbnRlcmZhY2VJbmZvID0gVXNiQWx0ZXJuYXRlSW50ZXJmYWNlSW5m
bzsKLSAgZXhwb3J0cy5Vc2JJbnRlcmZhY2VJbmZvID0gVXNiSW50ZXJmYWNlSW5mbzsKLSAgZXhw
b3J0cy5Vc2JDb25maWd1cmF0aW9uSW5mbyA9IFVzYkNvbmZpZ3VyYXRpb25JbmZvOwotICBleHBv
cnRzLlVzYkRldmljZUluZm8gPSBVc2JEZXZpY2VJbmZvOwotICBleHBvcnRzLlVzYkNvbnRyb2xU
cmFuc2ZlclBhcmFtcyA9IFVzYkNvbnRyb2xUcmFuc2ZlclBhcmFtczsKLSAgZXhwb3J0cy5Vc2JJ
c29jaHJvbm91c1BhY2tldCA9IFVzYklzb2Nocm9ub3VzUGFja2V0OwotICBleHBvcnRzLlVzYkRl
dmljZSA9IFVzYkRldmljZTsKLSAgZXhwb3J0cy5Vc2JEZXZpY2VQdHIgPSBVc2JEZXZpY2VQdHI7
Ci0gIGV4cG9ydHMuVXNiRGV2aWNlQXNzb2NpYXRlZFB0ciA9IFVzYkRldmljZUFzc29jaWF0ZWRQ
dHI7Ci0gIGV4cG9ydHMuVXNiRGV2aWNlQ2xpZW50ID0gVXNiRGV2aWNlQ2xpZW50OwotICBleHBv
cnRzLlVzYkRldmljZUNsaWVudFB0ciA9IFVzYkRldmljZUNsaWVudFB0cjsKLSAgZXhwb3J0cy5V
c2JEZXZpY2VDbGllbnRBc3NvY2lhdGVkUHRyID0gVXNiRGV2aWNlQ2xpZW50QXNzb2NpYXRlZFB0
cjsKLX0pKCk7CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRm
b3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS9kZXZpY2UubW9qb20uanMuaGVhZGVycyBiL0xh
eW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9t
aXVtL2RldmljZS5tb2pvbS5qcy5oZWFkZXJzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCA2ODA1YzMyM2RmNWE5NzUyMzE2NDhiODMwZTMzY2UxODNjM2NiYmQzLi4wMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3cz
Yy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL2RldmljZS5tb2pvbS5qcy5o
ZWFkZXJzCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotQ29udGVudC1UeXBlOiB0ZXh0L2ph
dmFzY3JpcHQ7IGNoYXJzZXQ9dXRmLTgKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2ltcG9ydGVk
L3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL2RldmljZV9lbnVtZXJh
dGlvbl9vcHRpb25zLm1vam9tLmpzIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0
Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vZGV2aWNlX2VudW1lcmF0aW9uX29wdGlvbnMu
bW9qb20uanMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVhNzc1YWQzNjg3OGYyYzJh
M2NmMDVkYjU1Njk3Yjg1MWUyYTRkYjcuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAKLS0tIGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0
cy9yZXNvdXJjZXMvY2hyb21pdW0vZGV2aWNlX2VudW1lcmF0aW9uX29wdGlvbnMubW9qb20uanMK
KysrIC9kZXYvbnVsbApAQCAtMSwxODQgKzAsMCBAQAotLy8gQ29weXJpZ2h0IDIwMTQgVGhlIENo
cm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3Vy
Y2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0v
LyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotCi0ndXNlIHN0cmljdCc7Ci0KLShmdW5jdGlv
bigpIHsKLSAgdmFyIG1vam9tSWQgPSAnZGV2aWNlL3VzYi9wdWJsaWMvbW9qb20vZGV2aWNlX2Vu
dW1lcmF0aW9uX29wdGlvbnMubW9qb20nOwotICBpZiAobW9qby5pbnRlcm5hbC5pc01vam9tTG9h
ZGVkKG1vam9tSWQpKSB7Ci0gICAgY29uc29sZS53YXJuKCdUaGUgZm9sbG93aW5nIG1vam9tIGlz
IGxvYWRlZCBtdWx0aXBsZSB0aW1lczogJyArIG1vam9tSWQpOwotICAgIHJldHVybjsKLSAgfQot
ICBtb2pvLmludGVybmFsLm1hcmtNb2pvbUxvYWRlZChtb2pvbUlkKTsKLSAgdmFyIGJpbmRpbmdz
ID0gbW9qbzsKLSAgdmFyIGFzc29jaWF0ZWRCaW5kaW5ncyA9IG1vam87Ci0gIHZhciBjb2RlYyA9
IG1vam8uaW50ZXJuYWw7Ci0gIHZhciB2YWxpZGF0b3IgPSBtb2pvLmludGVybmFsOwotCi0gIHZh
ciBleHBvcnRzID0gbW9qby5pbnRlcm5hbC5leHBvc2VOYW1lc3BhY2UoJ2RldmljZS5tb2pvbScp
OwotICB2YXIgc3RyaW5nMTYkID0KLSAgICAgIG1vam8uaW50ZXJuYWwuZXhwb3NlTmFtZXNwYWNl
KCdtb2pvQmFzZS5tb2pvbScpOwotICBpZiAobW9qby5jb25maWcuYXV0b0xvYWRNb2pvbURlcHMp
IHsKLSAgICBtb2pvLmludGVybmFsLmxvYWRNb2pvbUlmTmVjZXNzYXJ5KAotICAgICAgICAnbW9q
by9wdWJsaWMvbW9qb20vYmFzZS9zdHJpbmcxNi5tb2pvbScsICcuLi8uLi8uLi8uLi9tb2pvL3B1
YmxpYy9tb2pvbS9iYXNlL3N0cmluZzE2Lm1vam9tLmpzJyk7Ci0gIH0KLQotCi0KLSAgZnVuY3Rp
b24gVXNiRGV2aWNlRmlsdGVyKHZhbHVlcykgewotICAgIHRoaXMuaW5pdERlZmF1bHRzXygpOwot
ICAgIHRoaXMuaW5pdEZpZWxkc18odmFsdWVzKTsKLSAgfQotCi0KLSAgVXNiRGV2aWNlRmlsdGVy
LnByb3RvdHlwZS5pbml0RGVmYXVsdHNfID0gZnVuY3Rpb24oKSB7Ci0gICAgdGhpcy5oYXNWZW5k
b3JJZCA9IGZhbHNlOwotICAgIHRoaXMuaGFzUHJvZHVjdElkID0gZmFsc2U7Ci0gICAgdGhpcy5o
YXNDbGFzc0NvZGUgPSBmYWxzZTsKLSAgICB0aGlzLmhhc1N1YmNsYXNzQ29kZSA9IGZhbHNlOwot
ICAgIHRoaXMuaGFzUHJvdG9jb2xDb2RlID0gZmFsc2U7Ci0gICAgdGhpcy5jbGFzc0NvZGUgPSAw
OwotICAgIHRoaXMudmVuZG9ySWQgPSAwOwotICAgIHRoaXMucHJvZHVjdElkID0gMDsKLSAgICB0
aGlzLnN1YmNsYXNzQ29kZSA9IDA7Ci0gICAgdGhpcy5wcm90b2NvbENvZGUgPSAwOwotICAgIHRo
aXMuc2VyaWFsTnVtYmVyID0gbnVsbDsKLSAgfTsKLSAgVXNiRGV2aWNlRmlsdGVyLnByb3RvdHlw
ZS5pbml0RmllbGRzXyA9IGZ1bmN0aW9uKGZpZWxkcykgewotICAgIGZvcih2YXIgZmllbGQgaW4g
ZmllbGRzKSB7Ci0gICAgICAgIGlmICh0aGlzLmhhc093blByb3BlcnR5KGZpZWxkKSkKLSAgICAg
ICAgICB0aGlzW2ZpZWxkXSA9IGZpZWxkc1tmaWVsZF07Ci0gICAgfQotICB9OwotCi0gIFVzYkRl
dmljZUZpbHRlci52YWxpZGF0ZSA9IGZ1bmN0aW9uKG1lc3NhZ2VWYWxpZGF0b3IsIG9mZnNldCkg
ewotICAgIHZhciBlcnI7Ci0gICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVj
dEhlYWRlcihvZmZzZXQsIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplKTsKLSAgICBpZiAoZXJyICE9
PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCi0gICAgICAgIHJldHVybiBlcnI7Ci0K
LSAgICB2YXIga1ZlcnNpb25TaXplcyA9IFsKLSAgICAgIHt2ZXJzaW9uOiAwLCBudW1CeXRlczog
MjR9Ci0gICAgXTsKLSAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0VmVy
c2lvbihvZmZzZXQsIGtWZXJzaW9uU2l6ZXMpOwotICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52
YWxpZGF0aW9uRXJyb3IuTk9ORSkKLSAgICAgICAgcmV0dXJuIGVycjsKLQotCi0KLQotCi0KLQot
Ci0KLQotCi0KLSAgICAvLyB2YWxpZGF0ZSBVc2JEZXZpY2VGaWx0ZXIuc2VyaWFsTnVtYmVyCi0g
ICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdFBvaW50ZXIob2Zmc2V0ICsg
Y29kZWMua1N0cnVjdEhlYWRlclNpemUgKyA4LCBzdHJpbmcxNiQuU3RyaW5nMTYsIHRydWUpOwot
ICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKLSAgICAgICAg
cmV0dXJuIGVycjsKLQotICAgIHJldHVybiB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkU7
Ci0gIH07Ci0KLSAgVXNiRGV2aWNlRmlsdGVyLmVuY29kZWRTaXplID0gY29kZWMua1N0cnVjdEhl
YWRlclNpemUgKyAxNjsKLQotICBVc2JEZXZpY2VGaWx0ZXIuZGVjb2RlID0gZnVuY3Rpb24oZGVj
b2RlcikgewotICAgIHZhciBwYWNrZWQ7Ci0gICAgdmFyIHZhbCA9IG5ldyBVc2JEZXZpY2VGaWx0
ZXIoKTsKLSAgICB2YXIgbnVtYmVyT2ZCeXRlcyA9IGRlY29kZXIucmVhZFVpbnQzMigpOwotICAg
IHZhciB2ZXJzaW9uID0gZGVjb2Rlci5yZWFkVWludDMyKCk7Ci0gICAgcGFja2VkID0gZGVjb2Rl
ci5yZWFkVWludDgoKTsKLSAgICB2YWwuaGFzVmVuZG9ySWQgPSAocGFja2VkID4+IDApICYgMSA/
IHRydWUgOiBmYWxzZTsKLSAgICB2YWwuaGFzUHJvZHVjdElkID0gKHBhY2tlZCA+PiAxKSAmIDEg
PyB0cnVlIDogZmFsc2U7Ci0gICAgdmFsLmhhc0NsYXNzQ29kZSA9IChwYWNrZWQgPj4gMikgJiAx
ID8gdHJ1ZSA6IGZhbHNlOwotICAgIHZhbC5oYXNTdWJjbGFzc0NvZGUgPSAocGFja2VkID4+IDMp
ICYgMSA/IHRydWUgOiBmYWxzZTsKLSAgICB2YWwuaGFzUHJvdG9jb2xDb2RlID0gKHBhY2tlZCA+
PiA0KSAmIDEgPyB0cnVlIDogZmFsc2U7Ci0gICAgdmFsLmNsYXNzQ29kZSA9IGRlY29kZXIuZGVj
b2RlU3RydWN0KGNvZGVjLlVpbnQ4KTsKLSAgICB2YWwudmVuZG9ySWQgPSBkZWNvZGVyLmRlY29k
ZVN0cnVjdChjb2RlYy5VaW50MTYpOwotICAgIHZhbC5wcm9kdWN0SWQgPSBkZWNvZGVyLmRlY29k
ZVN0cnVjdChjb2RlYy5VaW50MTYpOwotICAgIHZhbC5zdWJjbGFzc0NvZGUgPSBkZWNvZGVyLmRl
Y29kZVN0cnVjdChjb2RlYy5VaW50OCk7Ci0gICAgdmFsLnByb3RvY29sQ29kZSA9IGRlY29kZXIu
ZGVjb2RlU3RydWN0KGNvZGVjLlVpbnQ4KTsKLSAgICB2YWwuc2VyaWFsTnVtYmVyID0gZGVjb2Rl
ci5kZWNvZGVTdHJ1Y3RQb2ludGVyKHN0cmluZzE2JC5TdHJpbmcxNik7Ci0gICAgcmV0dXJuIHZh
bDsKLSAgfTsKLQotICBVc2JEZXZpY2VGaWx0ZXIuZW5jb2RlID0gZnVuY3Rpb24oZW5jb2Rlciwg
dmFsKSB7Ci0gICAgdmFyIHBhY2tlZDsKLSAgICBlbmNvZGVyLndyaXRlVWludDMyKFVzYkRldmlj
ZUZpbHRlci5lbmNvZGVkU2l6ZSk7Ci0gICAgZW5jb2Rlci53cml0ZVVpbnQzMigwKTsKLSAgICBw
YWNrZWQgPSAwOwotICAgIHBhY2tlZCB8PSAodmFsLmhhc1ZlbmRvcklkICYgMSkgPDwgMAotICAg
IHBhY2tlZCB8PSAodmFsLmhhc1Byb2R1Y3RJZCAmIDEpIDw8IDEKLSAgICBwYWNrZWQgfD0gKHZh
bC5oYXNDbGFzc0NvZGUgJiAxKSA8PCAyCi0gICAgcGFja2VkIHw9ICh2YWwuaGFzU3ViY2xhc3ND
b2RlICYgMSkgPDwgMwotICAgIHBhY2tlZCB8PSAodmFsLmhhc1Byb3RvY29sQ29kZSAmIDEpIDw8
IDQKLSAgICBlbmNvZGVyLndyaXRlVWludDgocGFja2VkKTsKLSAgICBlbmNvZGVyLmVuY29kZVN0
cnVjdChjb2RlYy5VaW50OCwgdmFsLmNsYXNzQ29kZSk7Ci0gICAgZW5jb2Rlci5lbmNvZGVTdHJ1
Y3QoY29kZWMuVWludDE2LCB2YWwudmVuZG9ySWQpOwotICAgIGVuY29kZXIuZW5jb2RlU3RydWN0
KGNvZGVjLlVpbnQxNiwgdmFsLnByb2R1Y3RJZCk7Ci0gICAgZW5jb2Rlci5lbmNvZGVTdHJ1Y3Qo
Y29kZWMuVWludDgsIHZhbC5zdWJjbGFzc0NvZGUpOwotICAgIGVuY29kZXIuZW5jb2RlU3RydWN0
KGNvZGVjLlVpbnQ4LCB2YWwucHJvdG9jb2xDb2RlKTsKLSAgICBlbmNvZGVyLmVuY29kZVN0cnVj
dFBvaW50ZXIoc3RyaW5nMTYkLlN0cmluZzE2LCB2YWwuc2VyaWFsTnVtYmVyKTsKLSAgfTsKLSAg
ZnVuY3Rpb24gVXNiRW51bWVyYXRpb25PcHRpb25zKHZhbHVlcykgewotICAgIHRoaXMuaW5pdERl
ZmF1bHRzXygpOwotICAgIHRoaXMuaW5pdEZpZWxkc18odmFsdWVzKTsKLSAgfQotCi0KLSAgVXNi
RW51bWVyYXRpb25PcHRpb25zLnByb3RvdHlwZS5pbml0RGVmYXVsdHNfID0gZnVuY3Rpb24oKSB7
Ci0gICAgdGhpcy5maWx0ZXJzID0gbnVsbDsKLSAgfTsKLSAgVXNiRW51bWVyYXRpb25PcHRpb25z
LnByb3RvdHlwZS5pbml0RmllbGRzXyA9IGZ1bmN0aW9uKGZpZWxkcykgewotICAgIGZvcih2YXIg
ZmllbGQgaW4gZmllbGRzKSB7Ci0gICAgICAgIGlmICh0aGlzLmhhc093blByb3BlcnR5KGZpZWxk
KSkKLSAgICAgICAgICB0aGlzW2ZpZWxkXSA9IGZpZWxkc1tmaWVsZF07Ci0gICAgfQotICB9Owot
Ci0gIFVzYkVudW1lcmF0aW9uT3B0aW9ucy52YWxpZGF0ZSA9IGZ1bmN0aW9uKG1lc3NhZ2VWYWxp
ZGF0b3IsIG9mZnNldCkgewotICAgIHZhciBlcnI7Ci0gICAgZXJyID0gbWVzc2FnZVZhbGlkYXRv
ci52YWxpZGF0ZVN0cnVjdEhlYWRlcihvZmZzZXQsIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplKTsK
LSAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCi0gICAgICAg
IHJldHVybiBlcnI7Ci0KLSAgICB2YXIga1ZlcnNpb25TaXplcyA9IFsKLSAgICAgIHt2ZXJzaW9u
OiAwLCBudW1CeXRlczogMTZ9Ci0gICAgXTsKLSAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZh
bGlkYXRlU3RydWN0VmVyc2lvbihvZmZzZXQsIGtWZXJzaW9uU2l6ZXMpOwotICAgIGlmIChlcnIg
IT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKLSAgICAgICAgcmV0dXJuIGVycjsK
LQotCi0gICAgLy8gdmFsaWRhdGUgVXNiRW51bWVyYXRpb25PcHRpb25zLmZpbHRlcnMKLSAgICBl
cnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlQXJyYXlQb2ludGVyKG9mZnNldCArIGNvZGVj
LmtTdHJ1Y3RIZWFkZXJTaXplICsgMCwgOCwgbmV3IGNvZGVjLlBvaW50ZXJUbyhVc2JEZXZpY2VG
aWx0ZXIpLCBmYWxzZSwgWzBdLCAwKTsKLSAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRh
dGlvbkVycm9yLk5PTkUpCi0gICAgICAgIHJldHVybiBlcnI7Ci0KLSAgICByZXR1cm4gdmFsaWRh
dG9yLnZhbGlkYXRpb25FcnJvci5OT05FOwotICB9OwotCi0gIFVzYkVudW1lcmF0aW9uT3B0aW9u
cy5lbmNvZGVkU2l6ZSA9IGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgODsKLQotICBVc2JFbnVt
ZXJhdGlvbk9wdGlvbnMuZGVjb2RlID0gZnVuY3Rpb24oZGVjb2RlcikgewotICAgIHZhciBwYWNr
ZWQ7Ci0gICAgdmFyIHZhbCA9IG5ldyBVc2JFbnVtZXJhdGlvbk9wdGlvbnMoKTsKLSAgICB2YXIg
bnVtYmVyT2ZCeXRlcyA9IGRlY29kZXIucmVhZFVpbnQzMigpOwotICAgIHZhciB2ZXJzaW9uID0g
ZGVjb2Rlci5yZWFkVWludDMyKCk7Ci0gICAgdmFsLmZpbHRlcnMgPSBkZWNvZGVyLmRlY29kZUFy
cmF5UG9pbnRlcihuZXcgY29kZWMuUG9pbnRlclRvKFVzYkRldmljZUZpbHRlcikpOwotICAgIHJl
dHVybiB2YWw7Ci0gIH07Ci0KLSAgVXNiRW51bWVyYXRpb25PcHRpb25zLmVuY29kZSA9IGZ1bmN0
aW9uKGVuY29kZXIsIHZhbCkgewotICAgIHZhciBwYWNrZWQ7Ci0gICAgZW5jb2Rlci53cml0ZVVp
bnQzMihVc2JFbnVtZXJhdGlvbk9wdGlvbnMuZW5jb2RlZFNpemUpOwotICAgIGVuY29kZXIud3Jp
dGVVaW50MzIoMCk7Ci0gICAgZW5jb2Rlci5lbmNvZGVBcnJheVBvaW50ZXIobmV3IGNvZGVjLlBv
aW50ZXJUbyhVc2JEZXZpY2VGaWx0ZXIpLCB2YWwuZmlsdGVycyk7Ci0gIH07Ci0gIGV4cG9ydHMu
VXNiRGV2aWNlRmlsdGVyID0gVXNiRGV2aWNlRmlsdGVyOwotICBleHBvcnRzLlVzYkVudW1lcmF0
aW9uT3B0aW9ucyA9IFVzYkVudW1lcmF0aW9uT3B0aW9uczsKLX0pKCk7ClwgTm8gbmV3bGluZSBh
dCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1w
bGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vZGV2aWNlX2VudW1lcmF0aW9uX29wdGlv
bnMubW9qb20uanMuaGVhZGVycyBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZv
cm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL2RldmljZV9lbnVtZXJhdGlvbl9vcHRpb25zLm1v
am9tLmpzLmhlYWRlcnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZjNjFhMzRhNGVj
MmU3NTA5NmRiMGViOWY3NzQ4YjE0MmYwZGI3YmIuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAKLS0tIGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9y
bS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vZGV2aWNlX2VudW1lcmF0aW9uX29wdGlvbnMubW9q
b20uanMuaGVhZGVycworKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLUNvbnRlbnQtVHlwZTog
dGV4dC9qYXZhc2NyaXB0OyBjaGFyc2V0PXV0Zi04ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmls
ZQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0
cy9yZXNvdXJjZXMvY2hyb21pdW0vZGV2aWNlX21hbmFnZXJfY2xpZW50Lm1vam9tLmpzIGIvTGF5
b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21p
dW0vZGV2aWNlX21hbmFnZXJfY2xpZW50Lm1vam9tLmpzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCA0MzlmNjQ2NTc0ZGZhNzg1ZDhmNGQxNTk5NDU5N2VkMTU2ZGFlNjk1Li4wMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL0xheW91dFRlc3RzL2ltcG9y
dGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL2RldmljZV9tYW5h
Z2VyX2NsaWVudC5tb2pvbS5qcworKysgL2Rldi9udWxsCkBAIC0xLDI2MiArMCwwIEBACi0vLyBD
b3B5cmlnaHQgMjAxNCBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxp
Y2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLSd1c2Ug
c3RyaWN0JzsKLQotKGZ1bmN0aW9uKCkgewotICB2YXIgbW9qb21JZCA9ICdkZXZpY2UvdXNiL3B1
YmxpYy9tb2pvbS9kZXZpY2VfbWFuYWdlcl9jbGllbnQubW9qb20nOwotICBpZiAobW9qby5pbnRl
cm5hbC5pc01vam9tTG9hZGVkKG1vam9tSWQpKSB7Ci0gICAgY29uc29sZS53YXJuKCdUaGUgZm9s
bG93aW5nIG1vam9tIGlzIGxvYWRlZCBtdWx0aXBsZSB0aW1lczogJyArIG1vam9tSWQpOwotICAg
IHJldHVybjsKLSAgfQotICBtb2pvLmludGVybmFsLm1hcmtNb2pvbUxvYWRlZChtb2pvbUlkKTsK
LSAgdmFyIGJpbmRpbmdzID0gbW9qbzsKLSAgdmFyIGFzc29jaWF0ZWRCaW5kaW5ncyA9IG1vam87
Ci0gIHZhciBjb2RlYyA9IG1vam8uaW50ZXJuYWw7Ci0gIHZhciB2YWxpZGF0b3IgPSBtb2pvLmlu
dGVybmFsOwotCi0gIHZhciBleHBvcnRzID0gbW9qby5pbnRlcm5hbC5leHBvc2VOYW1lc3BhY2Uo
J2RldmljZS5tb2pvbScpOwotICB2YXIgZGV2aWNlJCA9Ci0gICAgICBtb2pvLmludGVybmFsLmV4
cG9zZU5hbWVzcGFjZSgnZGV2aWNlLm1vam9tJyk7Ci0gIGlmIChtb2pvLmNvbmZpZy5hdXRvTG9h
ZE1vam9tRGVwcykgewotICAgIG1vam8uaW50ZXJuYWwubG9hZE1vam9tSWZOZWNlc3NhcnkoCi0g
ICAgICAgICdkZXZpY2UvdXNiL3B1YmxpYy9tb2pvbS9kZXZpY2UubW9qb20nLCAnZGV2aWNlLm1v
am9tLmpzJyk7Ci0gIH0KLQotCi0KLSAgZnVuY3Rpb24gVXNiRGV2aWNlTWFuYWdlckNsaWVudF9P
bkRldmljZUFkZGVkX1BhcmFtcyh2YWx1ZXMpIHsKLSAgICB0aGlzLmluaXREZWZhdWx0c18oKTsK
LSAgICB0aGlzLmluaXRGaWVsZHNfKHZhbHVlcyk7Ci0gIH0KLQotCi0gIFVzYkRldmljZU1hbmFn
ZXJDbGllbnRfT25EZXZpY2VBZGRlZF9QYXJhbXMucHJvdG90eXBlLmluaXREZWZhdWx0c18gPSBm
dW5jdGlvbigpIHsKLSAgICB0aGlzLmRldmljZUluZm8gPSBudWxsOwotICB9OwotICBVc2JEZXZp
Y2VNYW5hZ2VyQ2xpZW50X09uRGV2aWNlQWRkZWRfUGFyYW1zLnByb3RvdHlwZS5pbml0RmllbGRz
XyA9IGZ1bmN0aW9uKGZpZWxkcykgewotICAgIGZvcih2YXIgZmllbGQgaW4gZmllbGRzKSB7Ci0g
ICAgICAgIGlmICh0aGlzLmhhc093blByb3BlcnR5KGZpZWxkKSkKLSAgICAgICAgICB0aGlzW2Zp
ZWxkXSA9IGZpZWxkc1tmaWVsZF07Ci0gICAgfQotICB9OwotCi0gIFVzYkRldmljZU1hbmFnZXJD
bGllbnRfT25EZXZpY2VBZGRlZF9QYXJhbXMudmFsaWRhdGUgPSBmdW5jdGlvbihtZXNzYWdlVmFs
aWRhdG9yLCBvZmZzZXQpIHsKLSAgICB2YXIgZXJyOwotICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0
b3IudmFsaWRhdGVTdHJ1Y3RIZWFkZXIob2Zmc2V0LCBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSk7
Ci0gICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQotICAgICAg
ICByZXR1cm4gZXJyOwotCi0gICAgdmFyIGtWZXJzaW9uU2l6ZXMgPSBbCi0gICAgICB7dmVyc2lv
bjogMCwgbnVtQnl0ZXM6IDE2fQotICAgIF07Ci0gICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52
YWxpZGF0ZVN0cnVjdFZlcnNpb24ob2Zmc2V0LCBrVmVyc2lvblNpemVzKTsKLSAgICBpZiAoZXJy
ICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCi0gICAgICAgIHJldHVybiBlcnI7
Ci0KLQotICAgIC8vIHZhbGlkYXRlIFVzYkRldmljZU1hbmFnZXJDbGllbnRfT25EZXZpY2VBZGRl
ZF9QYXJhbXMuZGV2aWNlSW5mbwotICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVT
dHJ1Y3RQb2ludGVyKG9mZnNldCArIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgMCwgZGV2aWNl
JC5Vc2JEZXZpY2VJbmZvLCBmYWxzZSk7Ci0gICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlk
YXRpb25FcnJvci5OT05FKQotICAgICAgICByZXR1cm4gZXJyOwotCi0gICAgcmV0dXJuIHZhbGlk
YXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORTsKLSAgfTsKLQotICBVc2JEZXZpY2VNYW5hZ2VyQ2xp
ZW50X09uRGV2aWNlQWRkZWRfUGFyYW1zLmVuY29kZWRTaXplID0gY29kZWMua1N0cnVjdEhlYWRl
clNpemUgKyA4OwotCi0gIFVzYkRldmljZU1hbmFnZXJDbGllbnRfT25EZXZpY2VBZGRlZF9QYXJh
bXMuZGVjb2RlID0gZnVuY3Rpb24oZGVjb2RlcikgewotICAgIHZhciBwYWNrZWQ7Ci0gICAgdmFy
IHZhbCA9IG5ldyBVc2JEZXZpY2VNYW5hZ2VyQ2xpZW50X09uRGV2aWNlQWRkZWRfUGFyYW1zKCk7
Ci0gICAgdmFyIG51bWJlck9mQnl0ZXMgPSBkZWNvZGVyLnJlYWRVaW50MzIoKTsKLSAgICB2YXIg
dmVyc2lvbiA9IGRlY29kZXIucmVhZFVpbnQzMigpOwotICAgIHZhbC5kZXZpY2VJbmZvID0gZGVj
b2Rlci5kZWNvZGVTdHJ1Y3RQb2ludGVyKGRldmljZSQuVXNiRGV2aWNlSW5mbyk7Ci0gICAgcmV0
dXJuIHZhbDsKLSAgfTsKLQotICBVc2JEZXZpY2VNYW5hZ2VyQ2xpZW50X09uRGV2aWNlQWRkZWRf
UGFyYW1zLmVuY29kZSA9IGZ1bmN0aW9uKGVuY29kZXIsIHZhbCkgewotICAgIHZhciBwYWNrZWQ7
Ci0gICAgZW5jb2Rlci53cml0ZVVpbnQzMihVc2JEZXZpY2VNYW5hZ2VyQ2xpZW50X09uRGV2aWNl
QWRkZWRfUGFyYW1zLmVuY29kZWRTaXplKTsKLSAgICBlbmNvZGVyLndyaXRlVWludDMyKDApOwot
ICAgIGVuY29kZXIuZW5jb2RlU3RydWN0UG9pbnRlcihkZXZpY2UkLlVzYkRldmljZUluZm8sIHZh
bC5kZXZpY2VJbmZvKTsKLSAgfTsKLSAgZnVuY3Rpb24gVXNiRGV2aWNlTWFuYWdlckNsaWVudF9P
bkRldmljZVJlbW92ZWRfUGFyYW1zKHZhbHVlcykgewotICAgIHRoaXMuaW5pdERlZmF1bHRzXygp
OwotICAgIHRoaXMuaW5pdEZpZWxkc18odmFsdWVzKTsKLSAgfQotCi0KLSAgVXNiRGV2aWNlTWFu
YWdlckNsaWVudF9PbkRldmljZVJlbW92ZWRfUGFyYW1zLnByb3RvdHlwZS5pbml0RGVmYXVsdHNf
ID0gZnVuY3Rpb24oKSB7Ci0gICAgdGhpcy5kZXZpY2VJbmZvID0gbnVsbDsKLSAgfTsKLSAgVXNi
RGV2aWNlTWFuYWdlckNsaWVudF9PbkRldmljZVJlbW92ZWRfUGFyYW1zLnByb3RvdHlwZS5pbml0
RmllbGRzXyA9IGZ1bmN0aW9uKGZpZWxkcykgewotICAgIGZvcih2YXIgZmllbGQgaW4gZmllbGRz
KSB7Ci0gICAgICAgIGlmICh0aGlzLmhhc093blByb3BlcnR5KGZpZWxkKSkKLSAgICAgICAgICB0
aGlzW2ZpZWxkXSA9IGZpZWxkc1tmaWVsZF07Ci0gICAgfQotICB9OwotCi0gIFVzYkRldmljZU1h
bmFnZXJDbGllbnRfT25EZXZpY2VSZW1vdmVkX1BhcmFtcy52YWxpZGF0ZSA9IGZ1bmN0aW9uKG1l
c3NhZ2VWYWxpZGF0b3IsIG9mZnNldCkgewotICAgIHZhciBlcnI7Ci0gICAgZXJyID0gbWVzc2Fn
ZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdEhlYWRlcihvZmZzZXQsIGNvZGVjLmtTdHJ1Y3RIZWFk
ZXJTaXplKTsKLSAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUp
Ci0gICAgICAgIHJldHVybiBlcnI7Ci0KLSAgICB2YXIga1ZlcnNpb25TaXplcyA9IFsKLSAgICAg
IHt2ZXJzaW9uOiAwLCBudW1CeXRlczogMTZ9Ci0gICAgXTsKLSAgICBlcnIgPSBtZXNzYWdlVmFs
aWRhdG9yLnZhbGlkYXRlU3RydWN0VmVyc2lvbihvZmZzZXQsIGtWZXJzaW9uU2l6ZXMpOwotICAg
IGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKLSAgICAgICAgcmV0
dXJuIGVycjsKLQotCi0gICAgLy8gdmFsaWRhdGUgVXNiRGV2aWNlTWFuYWdlckNsaWVudF9PbkRl
dmljZVJlbW92ZWRfUGFyYW1zLmRldmljZUluZm8KLSAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9y
LnZhbGlkYXRlU3RydWN0UG9pbnRlcihvZmZzZXQgKyBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSAr
IDAsIGRldmljZSQuVXNiRGV2aWNlSW5mbywgZmFsc2UpOwotICAgIGlmIChlcnIgIT09IHZhbGlk
YXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKLSAgICAgICAgcmV0dXJuIGVycjsKLQotICAgIHJl
dHVybiB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkU7Ci0gIH07Ci0KLSAgVXNiRGV2aWNl
TWFuYWdlckNsaWVudF9PbkRldmljZVJlbW92ZWRfUGFyYW1zLmVuY29kZWRTaXplID0gY29kZWMu
a1N0cnVjdEhlYWRlclNpemUgKyA4OwotCi0gIFVzYkRldmljZU1hbmFnZXJDbGllbnRfT25EZXZp
Y2VSZW1vdmVkX1BhcmFtcy5kZWNvZGUgPSBmdW5jdGlvbihkZWNvZGVyKSB7Ci0gICAgdmFyIHBh
Y2tlZDsKLSAgICB2YXIgdmFsID0gbmV3IFVzYkRldmljZU1hbmFnZXJDbGllbnRfT25EZXZpY2VS
ZW1vdmVkX1BhcmFtcygpOwotICAgIHZhciBudW1iZXJPZkJ5dGVzID0gZGVjb2Rlci5yZWFkVWlu
dDMyKCk7Ci0gICAgdmFyIHZlcnNpb24gPSBkZWNvZGVyLnJlYWRVaW50MzIoKTsKLSAgICB2YWwu
ZGV2aWNlSW5mbyA9IGRlY29kZXIuZGVjb2RlU3RydWN0UG9pbnRlcihkZXZpY2UkLlVzYkRldmlj
ZUluZm8pOwotICAgIHJldHVybiB2YWw7Ci0gIH07Ci0KLSAgVXNiRGV2aWNlTWFuYWdlckNsaWVu
dF9PbkRldmljZVJlbW92ZWRfUGFyYW1zLmVuY29kZSA9IGZ1bmN0aW9uKGVuY29kZXIsIHZhbCkg
ewotICAgIHZhciBwYWNrZWQ7Ci0gICAgZW5jb2Rlci53cml0ZVVpbnQzMihVc2JEZXZpY2VNYW5h
Z2VyQ2xpZW50X09uRGV2aWNlUmVtb3ZlZF9QYXJhbXMuZW5jb2RlZFNpemUpOwotICAgIGVuY29k
ZXIud3JpdGVVaW50MzIoMCk7Ci0gICAgZW5jb2Rlci5lbmNvZGVTdHJ1Y3RQb2ludGVyKGRldmlj
ZSQuVXNiRGV2aWNlSW5mbywgdmFsLmRldmljZUluZm8pOwotICB9OwotICB2YXIga1VzYkRldmlj
ZU1hbmFnZXJDbGllbnRfT25EZXZpY2VBZGRlZF9OYW1lID0gMDsKLSAgdmFyIGtVc2JEZXZpY2VN
YW5hZ2VyQ2xpZW50X09uRGV2aWNlUmVtb3ZlZF9OYW1lID0gMTsKLQotICBmdW5jdGlvbiBVc2JE
ZXZpY2VNYW5hZ2VyQ2xpZW50UHRyKGhhbmRsZU9yUHRySW5mbykgewotICAgIHRoaXMucHRyID0g
bmV3IGJpbmRpbmdzLkludGVyZmFjZVB0ckNvbnRyb2xsZXIoVXNiRGV2aWNlTWFuYWdlckNsaWVu
dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhh
bmRsZU9yUHRySW5mbyk7Ci0gIH0KLQotICBmdW5jdGlvbiBVc2JEZXZpY2VNYW5hZ2VyQ2xpZW50
QXNzb2NpYXRlZFB0cihhc3NvY2lhdGVkSW50ZXJmYWNlUHRySW5mbykgewotICAgIHRoaXMucHRy
ID0gbmV3IGFzc29jaWF0ZWRCaW5kaW5ncy5Bc3NvY2lhdGVkSW50ZXJmYWNlUHRyQ29udHJvbGxl
cigKLSAgICAgICAgVXNiRGV2aWNlTWFuYWdlckNsaWVudCwgYXNzb2NpYXRlZEludGVyZmFjZVB0
ckluZm8pOwotICB9Ci0KLSAgVXNiRGV2aWNlTWFuYWdlckNsaWVudEFzc29jaWF0ZWRQdHIucHJv
dG90eXBlID0KLSAgICAgIE9iamVjdC5jcmVhdGUoVXNiRGV2aWNlTWFuYWdlckNsaWVudFB0ci5w
cm90b3R5cGUpOwotICBVc2JEZXZpY2VNYW5hZ2VyQ2xpZW50QXNzb2NpYXRlZFB0ci5wcm90b3R5
cGUuY29uc3RydWN0b3IgPQotICAgICAgVXNiRGV2aWNlTWFuYWdlckNsaWVudEFzc29jaWF0ZWRQ
dHI7Ci0KLSAgZnVuY3Rpb24gVXNiRGV2aWNlTWFuYWdlckNsaWVudFByb3h5KHJlY2VpdmVyKSB7
Ci0gICAgdGhpcy5yZWNlaXZlcl8gPSByZWNlaXZlcjsKLSAgfQotICBVc2JEZXZpY2VNYW5hZ2Vy
Q2xpZW50UHRyLnByb3RvdHlwZS5vbkRldmljZUFkZGVkID0gZnVuY3Rpb24oKSB7Ci0gICAgcmV0
dXJuIFVzYkRldmljZU1hbmFnZXJDbGllbnRQcm94eS5wcm90b3R5cGUub25EZXZpY2VBZGRlZAot
ICAgICAgICAuYXBwbHkodGhpcy5wdHIuZ2V0UHJveHkoKSwgYXJndW1lbnRzKTsKLSAgfTsKLQot
ICBVc2JEZXZpY2VNYW5hZ2VyQ2xpZW50UHJveHkucHJvdG90eXBlLm9uRGV2aWNlQWRkZWQgPSBm
dW5jdGlvbihkZXZpY2VJbmZvKSB7Ci0gICAgdmFyIHBhcmFtc18gPSBuZXcgVXNiRGV2aWNlTWFu
YWdlckNsaWVudF9PbkRldmljZUFkZGVkX1BhcmFtcygpOwotICAgIHBhcmFtc18uZGV2aWNlSW5m
byA9IGRldmljZUluZm87Ci0gICAgdmFyIGJ1aWxkZXIgPSBuZXcgY29kZWMuTWVzc2FnZVYwQnVp
bGRlcigKLSAgICAgICAga1VzYkRldmljZU1hbmFnZXJDbGllbnRfT25EZXZpY2VBZGRlZF9OYW1l
LAotICAgICAgICBjb2RlYy5hbGlnbihVc2JEZXZpY2VNYW5hZ2VyQ2xpZW50X09uRGV2aWNlQWRk
ZWRfUGFyYW1zLmVuY29kZWRTaXplKSk7Ci0gICAgYnVpbGRlci5lbmNvZGVTdHJ1Y3QoVXNiRGV2
aWNlTWFuYWdlckNsaWVudF9PbkRldmljZUFkZGVkX1BhcmFtcywgcGFyYW1zXyk7Ci0gICAgdmFy
IG1lc3NhZ2UgPSBidWlsZGVyLmZpbmlzaCgpOwotICAgIHRoaXMucmVjZWl2ZXJfLmFjY2VwdCht
ZXNzYWdlKTsKLSAgfTsKLSAgVXNiRGV2aWNlTWFuYWdlckNsaWVudFB0ci5wcm90b3R5cGUub25E
ZXZpY2VSZW1vdmVkID0gZnVuY3Rpb24oKSB7Ci0gICAgcmV0dXJuIFVzYkRldmljZU1hbmFnZXJD
bGllbnRQcm94eS5wcm90b3R5cGUub25EZXZpY2VSZW1vdmVkCi0gICAgICAgIC5hcHBseSh0aGlz
LnB0ci5nZXRQcm94eSgpLCBhcmd1bWVudHMpOwotICB9OwotCi0gIFVzYkRldmljZU1hbmFnZXJD
bGllbnRQcm94eS5wcm90b3R5cGUub25EZXZpY2VSZW1vdmVkID0gZnVuY3Rpb24oZGV2aWNlSW5m
bykgewotICAgIHZhciBwYXJhbXNfID0gbmV3IFVzYkRldmljZU1hbmFnZXJDbGllbnRfT25EZXZp
Y2VSZW1vdmVkX1BhcmFtcygpOwotICAgIHBhcmFtc18uZGV2aWNlSW5mbyA9IGRldmljZUluZm87
Ci0gICAgdmFyIGJ1aWxkZXIgPSBuZXcgY29kZWMuTWVzc2FnZVYwQnVpbGRlcigKLSAgICAgICAg
a1VzYkRldmljZU1hbmFnZXJDbGllbnRfT25EZXZpY2VSZW1vdmVkX05hbWUsCi0gICAgICAgIGNv
ZGVjLmFsaWduKFVzYkRldmljZU1hbmFnZXJDbGllbnRfT25EZXZpY2VSZW1vdmVkX1BhcmFtcy5l
bmNvZGVkU2l6ZSkpOwotICAgIGJ1aWxkZXIuZW5jb2RlU3RydWN0KFVzYkRldmljZU1hbmFnZXJD
bGllbnRfT25EZXZpY2VSZW1vdmVkX1BhcmFtcywgcGFyYW1zXyk7Ci0gICAgdmFyIG1lc3NhZ2Ug
PSBidWlsZGVyLmZpbmlzaCgpOwotICAgIHRoaXMucmVjZWl2ZXJfLmFjY2VwdChtZXNzYWdlKTsK
LSAgfTsKLQotICBmdW5jdGlvbiBVc2JEZXZpY2VNYW5hZ2VyQ2xpZW50U3R1YihkZWxlZ2F0ZSkg
ewotICAgIHRoaXMuZGVsZWdhdGVfID0gZGVsZWdhdGU7Ci0gIH0KLSAgVXNiRGV2aWNlTWFuYWdl
ckNsaWVudFN0dWIucHJvdG90eXBlLm9uRGV2aWNlQWRkZWQgPSBmdW5jdGlvbihkZXZpY2VJbmZv
KSB7Ci0gICAgcmV0dXJuIHRoaXMuZGVsZWdhdGVfICYmIHRoaXMuZGVsZWdhdGVfLm9uRGV2aWNl
QWRkZWQgJiYgdGhpcy5kZWxlZ2F0ZV8ub25EZXZpY2VBZGRlZChkZXZpY2VJbmZvKTsKLSAgfQot
ICBVc2JEZXZpY2VNYW5hZ2VyQ2xpZW50U3R1Yi5wcm90b3R5cGUub25EZXZpY2VSZW1vdmVkID0g
ZnVuY3Rpb24oZGV2aWNlSW5mbykgewotICAgIHJldHVybiB0aGlzLmRlbGVnYXRlXyAmJiB0aGlz
LmRlbGVnYXRlXy5vbkRldmljZVJlbW92ZWQgJiYgdGhpcy5kZWxlZ2F0ZV8ub25EZXZpY2VSZW1v
dmVkKGRldmljZUluZm8pOwotICB9Ci0KLSAgVXNiRGV2aWNlTWFuYWdlckNsaWVudFN0dWIucHJv
dG90eXBlLmFjY2VwdCA9IGZ1bmN0aW9uKG1lc3NhZ2UpIHsKLSAgICB2YXIgcmVhZGVyID0gbmV3
IGNvZGVjLk1lc3NhZ2VSZWFkZXIobWVzc2FnZSk7Ci0gICAgc3dpdGNoIChyZWFkZXIubWVzc2Fn
ZU5hbWUpIHsKLSAgICBjYXNlIGtVc2JEZXZpY2VNYW5hZ2VyQ2xpZW50X09uRGV2aWNlQWRkZWRf
TmFtZToKLSAgICAgIHZhciBwYXJhbXMgPSByZWFkZXIuZGVjb2RlU3RydWN0KFVzYkRldmljZU1h
bmFnZXJDbGllbnRfT25EZXZpY2VBZGRlZF9QYXJhbXMpOwotICAgICAgdGhpcy5vbkRldmljZUFk
ZGVkKHBhcmFtcy5kZXZpY2VJbmZvKTsKLSAgICAgIHJldHVybiB0cnVlOwotICAgIGNhc2Uga1Vz
YkRldmljZU1hbmFnZXJDbGllbnRfT25EZXZpY2VSZW1vdmVkX05hbWU6Ci0gICAgICB2YXIgcGFy
YW1zID0gcmVhZGVyLmRlY29kZVN0cnVjdChVc2JEZXZpY2VNYW5hZ2VyQ2xpZW50X09uRGV2aWNl
UmVtb3ZlZF9QYXJhbXMpOwotICAgICAgdGhpcy5vbkRldmljZVJlbW92ZWQocGFyYW1zLmRldmlj
ZUluZm8pOwotICAgICAgcmV0dXJuIHRydWU7Ci0gICAgZGVmYXVsdDoKLSAgICAgIHJldHVybiBm
YWxzZTsKLSAgICB9Ci0gIH07Ci0KLSAgVXNiRGV2aWNlTWFuYWdlckNsaWVudFN0dWIucHJvdG90
eXBlLmFjY2VwdFdpdGhSZXNwb25kZXIgPQotICAgICAgZnVuY3Rpb24obWVzc2FnZSwgcmVzcG9u
ZGVyKSB7Ci0gICAgdmFyIHJlYWRlciA9IG5ldyBjb2RlYy5NZXNzYWdlUmVhZGVyKG1lc3NhZ2Up
OwotICAgIHN3aXRjaCAocmVhZGVyLm1lc3NhZ2VOYW1lKSB7Ci0gICAgZGVmYXVsdDoKLSAgICAg
IHJldHVybiBmYWxzZTsKLSAgICB9Ci0gIH07Ci0KLSAgZnVuY3Rpb24gdmFsaWRhdGVVc2JEZXZp
Y2VNYW5hZ2VyQ2xpZW50UmVxdWVzdChtZXNzYWdlVmFsaWRhdG9yKSB7Ci0gICAgdmFyIG1lc3Nh
Z2UgPSBtZXNzYWdlVmFsaWRhdG9yLm1lc3NhZ2U7Ci0gICAgdmFyIHBhcmFtc0NsYXNzID0gbnVs
bDsKLSAgICBzd2l0Y2ggKG1lc3NhZ2UuZ2V0TmFtZSgpKSB7Ci0gICAgICBjYXNlIGtVc2JEZXZp
Y2VNYW5hZ2VyQ2xpZW50X09uRGV2aWNlQWRkZWRfTmFtZToKLSAgICAgICAgaWYgKCFtZXNzYWdl
LmV4cGVjdHNSZXNwb25zZSgpICYmICFtZXNzYWdlLmlzUmVzcG9uc2UoKSkKLSAgICAgICAgICBw
YXJhbXNDbGFzcyA9IFVzYkRldmljZU1hbmFnZXJDbGllbnRfT25EZXZpY2VBZGRlZF9QYXJhbXM7
Ci0gICAgICBicmVhazsKLSAgICAgIGNhc2Uga1VzYkRldmljZU1hbmFnZXJDbGllbnRfT25EZXZp
Y2VSZW1vdmVkX05hbWU6Ci0gICAgICAgIGlmICghbWVzc2FnZS5leHBlY3RzUmVzcG9uc2UoKSAm
JiAhbWVzc2FnZS5pc1Jlc3BvbnNlKCkpCi0gICAgICAgICAgcGFyYW1zQ2xhc3MgPSBVc2JEZXZp
Y2VNYW5hZ2VyQ2xpZW50X09uRGV2aWNlUmVtb3ZlZF9QYXJhbXM7Ci0gICAgICBicmVhazsKLSAg
ICB9Ci0gICAgaWYgKHBhcmFtc0NsYXNzID09PSBudWxsKQotICAgICAgcmV0dXJuIHZhbGlkYXRv
ci52YWxpZGF0aW9uRXJyb3IuTk9ORTsKLSAgICByZXR1cm4gcGFyYW1zQ2xhc3MudmFsaWRhdGUo
bWVzc2FnZVZhbGlkYXRvciwgbWVzc2FnZVZhbGlkYXRvci5tZXNzYWdlLmdldEhlYWRlck51bUJ5
dGVzKCkpOwotICB9Ci0KLSAgZnVuY3Rpb24gdmFsaWRhdGVVc2JEZXZpY2VNYW5hZ2VyQ2xpZW50
UmVzcG9uc2UobWVzc2FnZVZhbGlkYXRvcikgewotICAgIHJldHVybiB2YWxpZGF0b3IudmFsaWRh
dGlvbkVycm9yLk5PTkU7Ci0gIH0KLQotICB2YXIgVXNiRGV2aWNlTWFuYWdlckNsaWVudCA9IHsK
LSAgICBuYW1lOiAnZGV2aWNlLm1vam9tLlVzYkRldmljZU1hbmFnZXJDbGllbnQnLAotICAgIGtW
ZXJzaW9uOiAwLAotICAgIHB0ckNsYXNzOiBVc2JEZXZpY2VNYW5hZ2VyQ2xpZW50UHRyLAotICAg
IHByb3h5Q2xhc3M6IFVzYkRldmljZU1hbmFnZXJDbGllbnRQcm94eSwKLSAgICBzdHViQ2xhc3M6
IFVzYkRldmljZU1hbmFnZXJDbGllbnRTdHViLAotICAgIHZhbGlkYXRlUmVxdWVzdDogdmFsaWRh
dGVVc2JEZXZpY2VNYW5hZ2VyQ2xpZW50UmVxdWVzdCwKLSAgICB2YWxpZGF0ZVJlc3BvbnNlOiBu
dWxsLAotICB9OwotICBVc2JEZXZpY2VNYW5hZ2VyQ2xpZW50U3R1Yi5wcm90b3R5cGUudmFsaWRh
dG9yID0gdmFsaWRhdGVVc2JEZXZpY2VNYW5hZ2VyQ2xpZW50UmVxdWVzdDsKLSAgVXNiRGV2aWNl
TWFuYWdlckNsaWVudFByb3h5LnByb3RvdHlwZS52YWxpZGF0b3IgPSBudWxsOwotICBleHBvcnRz
LlVzYkRldmljZU1hbmFnZXJDbGllbnQgPSBVc2JEZXZpY2VNYW5hZ2VyQ2xpZW50OwotICBleHBv
cnRzLlVzYkRldmljZU1hbmFnZXJDbGllbnRQdHIgPSBVc2JEZXZpY2VNYW5hZ2VyQ2xpZW50UHRy
OwotICBleHBvcnRzLlVzYkRldmljZU1hbmFnZXJDbGllbnRBc3NvY2lhdGVkUHRyID0gVXNiRGV2
aWNlTWFuYWdlckNsaWVudEFzc29jaWF0ZWRQdHI7Ci19KSgpOwpcIE5vIG5ld2xpbmUgYXQgZW5k
IG9mIGZpbGUKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZv
cm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL2RldmljZV9tYW5hZ2VyX2NsaWVudC5tb2pvbS5q
cy5oZWFkZXJzIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9y
ZXNvdXJjZXMvY2hyb21pdW0vZGV2aWNlX21hbmFnZXJfY2xpZW50Lm1vam9tLmpzLmhlYWRlcnMK
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZjNjFhMzRhNGVjMmU3NTA5NmRiMGViOWY3
NzQ4YjE0MmYwZGI3YmIuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAK
LS0tIGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJj
ZXMvY2hyb21pdW0vZGV2aWNlX21hbmFnZXJfY2xpZW50Lm1vam9tLmpzLmhlYWRlcnMKKysrIC9k
ZXYvbnVsbApAQCAtMSArMCwwIEBACi1Db250ZW50LVR5cGU6IHRleHQvamF2YXNjcmlwdDsgY2hh
cnNldD11dGYtOApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL0xheW91
dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVt
L2VuYWJsZS1oeXBlcmxpbmstYXVkaXRpbmcuanMgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mv
d2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS9lbmFibGUtaHlwZXJsaW5rLWF1
ZGl0aW5nLmpzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNjNmNjUxMmYwOWE5MDIy
MDk0MDk3NWI5NDc0ZmVjYWJmMjgzN2M3Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwCi0tLSBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVz
dHMvcmVzb3VyY2VzL2Nocm9taXVtL2VuYWJsZS1oeXBlcmxpbmstYXVkaXRpbmcuanMKKysrIC9k
ZXYvbnVsbApAQCAtMSwyICswLDAgQEAKLWlmICh3aW5kb3cudGVzdFJ1bm5lcikKLSAgdGVzdFJ1
bm5lci5vdmVycmlkZVByZWZlcmVuY2UoIldlYktpdEh5cGVybGlua0F1ZGl0aW5nRW5hYmxlZCIs
IDEpOwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10
ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vZ2VuZXJpY19zZW5zb3JfbW9ja3MuanMgYi9MYXlvdXRU
ZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS9n
ZW5lcmljX3NlbnNvcl9tb2Nrcy5qcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmUy
ZjcwYmUzNGViZGVlYjc0ZGRhYzVlNWZhNGIzOTY4NGIwZTNiNS4uMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2Vi
LXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS9nZW5lcmljX3NlbnNvcl9tb2Nrcy5q
cworKysgL2Rldi9udWxsCkBAIC0xLDM5NSArMCwwIEBACi0ndXNlIHN0cmljdCc7Ci0KLS8vIEEg
InNsaWRpbmcgd2luZG93IiB0aGF0IGl0ZXJhdGVzIG92ZXIgfGRhdGF8IGFuZCByZXR1cm5zIG9u
ZSBpdGVtIGF0IGEKLS8vIHRpbWUsIGFkdmFuY2luZyBhbmQgd3JhcHBpbmcgYXJvdW5kIGFzIG5l
ZWRlZC4gfGRhdGF8IG11c3QgYmUgYW4gYXJyYXkgb2YKLS8vIGFycmF5cy4KLWNsYXNzIFJpbmdC
dWZmZXIgewotICBjb25zdHJ1Y3RvcihkYXRhKSB7Ci0gICAgdGhpcy5idWZmZXJQb3NpdGlvbl8g
PSAwOwotICAgIC8vIFZhbGlkYXRlIHxkYXRhfCdzIGZvcm1hdCBhbmQgZGVlcC1jb3B5IGV2ZXJ5
IGVsZW1lbnQuCi0gICAgdGhpcy5kYXRhXyA9IEFycmF5LmZyb20oZGF0YSwgZWxlbWVudCA9PiB7
Ci0gICAgICBpZiAoIUFycmF5LmlzQXJyYXkoZWxlbWVudCkpIHsKLSAgICAgICAgdGhyb3cgbmV3
IFR5cGVFcnJvcignRXZlcnkgfGRhdGF8IGVsZW1lbnQgbXVzdCBiZSBhbiBhcnJheS4nKTsKLSAg
ICAgIH0KLSAgICAgIHJldHVybiBBcnJheS5mcm9tKGVsZW1lbnQpOwotICAgIH0pCi0gIH0KLQot
ICBuZXh0KCkgewotICAgIGNvbnN0IHZhbHVlID0gdGhpcy5kYXRhX1t0aGlzLmJ1ZmZlclBvc2l0
aW9uX107Ci0gICAgdGhpcy5idWZmZXJQb3NpdGlvbl8gPSAodGhpcy5idWZmZXJQb3NpdGlvbl8g
KyAxKSAlIHRoaXMuZGF0YV8ubGVuZ3RoOwotICAgIHJldHVybiB7IGRvbmU6IGZhbHNlLCB2YWx1
ZTogdmFsdWUgfTsKLSAgfQotCi0gIHZhbHVlKCkgewotICAgIHJldHVybiB0aGlzLmRhdGFfW3Ro
aXMuYnVmZmVyUG9zaXRpb25fXTsKLSAgfQotCi0gIFtTeW1ib2wuaXRlcmF0b3JdKCkgewotICAg
IHJldHVybiB0aGlzOwotICB9Ci19Ci0KLXZhciBHZW5lcmljU2Vuc29yVGVzdCA9ICgoKSA9PiB7
Ci0gIC8vIERlZmF1bHQgc2Vuc29yIGZyZXF1ZW5jeSBpbiBkZWZhdWx0IGNvbmZpZ3VyYXRpb25z
LgotICBjb25zdCBERUZBVUxUX0ZSRVFVRU5DWSA9IDU7Ci0KLSAgLy8gQ2xhc3MgdGhhdCBtb2Nr
cyBTZW5zb3IgaW50ZXJmYWNlIGRlZmluZWQgaW4KLSAgLy8gaHR0cHM6Ly9jcy5jaHJvbWl1bS5v
cmcvY2hyb21pdW0vc3JjL3NlcnZpY2VzL2RldmljZS9wdWJsaWMvbW9qb20vc2Vuc29yLm1vam9t
Ci0gIGNsYXNzIE1vY2tTZW5zb3IgewotICAgIGNvbnN0cnVjdG9yKHNlbnNvclJlcXVlc3QsIGhh
bmRsZSwgb2Zmc2V0LCBzaXplLCByZXBvcnRpbmdNb2RlKSB7Ci0gICAgICB0aGlzLmNsaWVudF8g
PSBudWxsOwotICAgICAgdGhpcy5zdGFydFNob3VsZEZhaWxfID0gZmFsc2U7Ci0gICAgICB0aGlz
Lm5vdGlmeU9uUmVhZGluZ0NoYW5nZV8gPSB0cnVlOwotICAgICAgdGhpcy5yZXBvcnRpbmdNb2Rl
XyA9IHJlcG9ydGluZ01vZGU7Ci0gICAgICB0aGlzLnNlbnNvclJlYWRpbmdUaW1lcklkXyA9IG51
bGw7Ci0gICAgICB0aGlzLnJlYWRpbmdEYXRhXyA9IG51bGw7Ci0gICAgICB0aGlzLnJlcXVlc3Rl
ZEZyZXF1ZW5jaWVzXyA9IFtdOwotICAgICAgbGV0IHJ2ID0gaGFuZGxlLm1hcEJ1ZmZlcihvZmZz
ZXQsIHNpemUpOwotICAgICAgYXNzZXJ0X2VxdWFscyhydi5yZXN1bHQsIE1vam8uUkVTVUxUX09L
LCAiRmFpbGVkIHRvIG1hcCBzaGFyZWQgYnVmZmVyIik7Ci0gICAgICB0aGlzLmJ1ZmZlcl8gPSBu
ZXcgRmxvYXQ2NEFycmF5KHJ2LmJ1ZmZlcik7Ci0gICAgICB0aGlzLmJ1ZmZlcl8uZmlsbCgwKTsK
LSAgICAgIHRoaXMuYmluZGluZ18gPSBuZXcgbW9qby5CaW5kaW5nKGRldmljZS5tb2pvbS5TZW5z
b3IsIHRoaXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZW5zb3JS
ZXF1ZXN0KTsKLSAgICAgIHRoaXMuYmluZGluZ18uc2V0Q29ubmVjdGlvbkVycm9ySGFuZGxlcigo
KSA9PiB7Ci0gICAgICAgIHRoaXMucmVzZXQoKTsKLSAgICAgIH0pOwotICAgIH0KLQotICAgIC8v
IFJldHVybnMgZGVmYXVsdCBjb25maWd1cmF0aW9uLgotICAgIGFzeW5jIGdldERlZmF1bHRDb25m
aWd1cmF0aW9uKCkgewotICAgICAgcmV0dXJuIHsgZnJlcXVlbmN5OiBERUZBVUxUX0ZSRVFVRU5D
WSB9OwotICAgIH0KLQotICAgIC8vIEFkZHMgY29uZmlndXJhdGlvbiBmb3IgdGhlIHNlbnNvciBh
bmQgc3RhcnRzIHJlcG9ydGluZyBmYWtlIGRhdGEKLSAgICAvLyB0aHJvdWdoIHNldFNlbnNvclJl
YWRpbmcgZnVuY3Rpb24uCi0gICAgYXN5bmMgYWRkQ29uZmlndXJhdGlvbihjb25maWd1cmF0aW9u
KSB7Ci0gICAgICBhc3NlcnRfbm90X2VxdWFscyhjb25maWd1cmF0aW9uLCBudWxsLCAiSW52YWxp
ZCBzZW5zb3IgY29uZmlndXJhdGlvbi4iKTsKLQotICAgICAgdGhpcy5yZXF1ZXN0ZWRGcmVxdWVu
Y2llc18ucHVzaChjb25maWd1cmF0aW9uLmZyZXF1ZW5jeSk7Ci0gICAgICAvLyBTb3J0IHVzaW5n
IGRlc2NlbmRpbmcgb3JkZXIuCi0gICAgICB0aGlzLnJlcXVlc3RlZEZyZXF1ZW5jaWVzXy5zb3J0
KAotICAgICAgICAgIChmaXJzdCwgc2Vjb25kKSA9PiB7IHJldHVybiBzZWNvbmQgLSBmaXJzdCB9
KTsKLQotICAgICAgaWYgKCF0aGlzLnN0YXJ0U2hvdWxkRmFpbF8gKQotICAgICAgICB0aGlzLnN0
YXJ0UmVhZGluZygpOwotCi0gICAgICByZXR1cm4geyBzdWNjZXNzOiAhdGhpcy5zdGFydFNob3Vs
ZEZhaWxfIH07Ci0gICAgfQotCi0gICAgLy8gUmVtb3ZlcyBzZW5zb3IgY29uZmlndXJhdGlvbiBm
cm9tIHRoZSBsaXN0IG9mIGFjdGl2ZSBjb25maWd1cmF0aW9ucyBhbmQKLSAgICAvLyBzdG9wcyBu
b3RpZmljYXRpb24gYWJvdXQgc2Vuc29yIHJlYWRpbmcgY2hhbmdlcyBpZgotICAgIC8vIHJlcXVl
c3RlZEZyZXF1ZW5jaWVzXyBpcyBlbXB0eS4KLSAgICByZW1vdmVDb25maWd1cmF0aW9uKGNvbmZp
Z3VyYXRpb24pIHsKLSAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5yZXF1ZXN0ZWRGcmVxdWVuY2ll
c18uaW5kZXhPZihjb25maWd1cmF0aW9uLmZyZXF1ZW5jeSk7Ci0gICAgICBpZiAoaW5kZXggPT0g
LTEpCi0gICAgICAgIHJldHVybjsKLQotICAgICAgdGhpcy5yZXF1ZXN0ZWRGcmVxdWVuY2llc18u
c3BsaWNlKGluZGV4LCAxKTsKLSAgICAgIGlmICh0aGlzLnJlcXVlc3RlZEZyZXF1ZW5jaWVzXy5s
ZW5ndGggPT09IDApCi0gICAgICAgIHRoaXMuc3RvcFJlYWRpbmcoKTsKLSAgICB9Ci0KLSAgICAv
LyBDb25maWd1cmVSZWFkaW5nQ2hhbmdlTm90aWZpY2F0aW9ucyhib29sIGVuYWJsZWQpCi0gICAg
Ly8gQ29uZmlndXJlcyB3aGV0aGVyIHRvIHJlcG9ydCBhIHJlYWRpbmcgY2hhbmdlIHdoZW4gaW4g
T05fQ0hBTkdFCi0gICAgLy8gcmVwb3J0aW5nIG1vZGUuCi0gICAgY29uZmlndXJlUmVhZGluZ0No
YW5nZU5vdGlmaWNhdGlvbnMobm90aWZ5T25SZWFkaW5nQ2hhbmdlKSB7Ci0gICAgICB0aGlzLm5v
dGlmeU9uUmVhZGluZ0NoYW5nZV8gPSBub3RpZnlPblJlYWRpbmdDaGFuZ2U7Ci0gICAgfQotCi0g
ICAgLy8gTW9jayBmdW5jdGlvbnMKLQotICAgIC8vIFJlc2V0cyBtb2NrIFNlbnNvciBzdGF0ZS4K
LSAgICByZXNldCgpIHsKLSAgICAgIHRoaXMuc3RvcFJlYWRpbmcoKTsKLSAgICAgIHRoaXMuc3Rh
cnRTaG91bGRGYWlsXyA9IGZhbHNlOwotICAgICAgdGhpcy5yZXF1ZXN0ZWRGcmVxdWVuY2llc18g
PSBbXTsKLSAgICAgIHRoaXMubm90aWZ5T25SZWFkaW5nQ2hhbmdlXyA9IHRydWU7Ci0gICAgICB0
aGlzLnJlYWRpbmdEYXRhXyA9IG51bGw7Ci0gICAgICB0aGlzLmJ1ZmZlcl8uZmlsbCgwKTsKLSAg
ICAgIHRoaXMuYmluZGluZ18uY2xvc2UoKTsKLSAgICB9Ci0KLSAgICAvLyBTZXRzIGZha2UgZGF0
YSB0aGF0IGlzIHVzZWQgdG8gZGVsaXZlciBzZW5zb3IgcmVhZGluZyB1cGRhdGVzLgotICAgIGFz
eW5jIHNldFNlbnNvclJlYWRpbmcocmVhZGluZ0RhdGEpIHsKLSAgICAgIHRoaXMucmVhZGluZ0Rh
dGFfID0gbmV3IFJpbmdCdWZmZXIocmVhZGluZ0RhdGEpOwotICAgICAgcmV0dXJuIHRoaXM7Ci0g
ICAgfQotCi0gICAgLy8gVGhpcyBpcyBhIHdvcmthcm91bmQgdG8gYWNjb21tb2RhdGUgQmxpbmsn
cyBEZXZpY2UgT3JpZW50YXRpb24KLSAgICAvLyBpbXBsZW1lbnRhdGlvbi4gSW4gZ2VuZXJhbCwg
YWxsIHRlc3RzIHNob3VsZCB1c2Ugc2V0U2Vuc29yUmVhZGluZygpCi0gICAgLy8gaW5zdGVhZC4K
LSAgICBzZXRTZW5zb3JSZWFkaW5nSW1tZWRpYXRlbHkocmVhZGluZ0RhdGEpIHsKLSAgICAgIHRo
aXMuc2V0U2Vuc29yUmVhZGluZyhyZWFkaW5nRGF0YSk7Ci0KLSAgICAgIGNvbnN0IHJlYWRpbmcg
PSB0aGlzLnJlYWRpbmdEYXRhXy52YWx1ZSgpOwotICAgICAgdGhpcy5idWZmZXJfLnNldChyZWFk
aW5nLCAyKTsKLSAgICAgIHRoaXMuYnVmZmVyX1sxXSA9IHdpbmRvdy5wZXJmb3JtYW5jZS5ub3co
KSAqIDAuMDAxOwotICAgIH0KLQotICAgIC8vIFNldHMgZmxhZyB0aGF0IGZvcmNlcyBzZW5zb3Ig
dG8gZmFpbCB3aGVuIGFkZENvbmZpZ3VyYXRpb24gaXMgaW52b2tlZC4KLSAgICBzZXRTdGFydFNo
b3VsZEZhaWwoc2hvdWxkRmFpbCkgewotICAgICAgdGhpcy5zdGFydFNob3VsZEZhaWxfID0gc2hv
dWxkRmFpbDsKLSAgICB9Ci0KLSAgICBzdGFydFJlYWRpbmcoKSB7Ci0gICAgICBpZiAodGhpcy5y
ZWFkaW5nRGF0YV8gIT0gbnVsbCkgewotICAgICAgICB0aGlzLnN0b3BSZWFkaW5nKCk7Ci0gICAg
ICB9Ci0gICAgICBsZXQgbWF4RnJlcXVlbmN5VXNlZCA9IHRoaXMucmVxdWVzdGVkRnJlcXVlbmNp
ZXNfWzBdOwotICAgICAgbGV0IHRpbWVvdXQgPSAoMSAvIG1heEZyZXF1ZW5jeVVzZWQpICogMTAw
MDsKLSAgICAgIHRoaXMuc2Vuc29yUmVhZGluZ1RpbWVySWRfID0gd2luZG93LnNldEludGVydmFs
KCgpID0+IHsKLSAgICAgICAgaWYgKHRoaXMucmVhZGluZ0RhdGFfKSB7Ci0gICAgICAgICAgLy8g
fGJ1ZmZlcl98IGlzIGEgVHlwZWRBcnJheSwgc28gd2UgbmVlZCB0byBtYWtlIHN1cmUgcGFzcyBh
bgotICAgICAgICAgIC8vIGFycmF5IHRvIHNldCgpLgotICAgICAgICAgIGNvbnN0IHJlYWRpbmcg
PSB0aGlzLnJlYWRpbmdEYXRhXy5uZXh0KCkudmFsdWU7Ci0gICAgICAgICAgYXNzZXJ0X3RydWUo
QXJyYXkuaXNBcnJheShyZWFkaW5nKSwgIlRoZSByZWFkaW5ncyBwYXNzZWQgdG8gIiArCi0gICAg
ICAgICAgICAgICJzZXRTZW5zb3JSZWFkaW5nKCkgbXVzdCBiZSBhcnJheXMuIik7Ci0gICAgICAg
ICAgdGhpcy5idWZmZXJfLnNldChyZWFkaW5nLCAyKTsKLSAgICAgICAgfQotICAgICAgICAvLyBG
b3IgYWxsIHRlc3RzIHNlbnNvciByZWFkaW5nIHNob3VsZCBoYXZlIG1vbm90b25pY2FsbHkKLSAg
ICAgICAgLy8gaW5jcmVhc2luZyB0aW1lc3RhbXAgaW4gc2Vjb25kcy4KLSAgICAgICAgdGhpcy5i
dWZmZXJfWzFdID0gd2luZG93LnBlcmZvcm1hbmNlLm5vdygpICogMC4wMDE7Ci0gICAgICAgIGlm
ICh0aGlzLnJlcG9ydGluZ01vZGVfID09PSBkZXZpY2UubW9qb20uUmVwb3J0aW5nTW9kZS5PTl9D
SEFOR0UgJiYKLSAgICAgICAgICAgIHRoaXMubm90aWZ5T25SZWFkaW5nQ2hhbmdlXykgewotICAg
ICAgICAgIHRoaXMuY2xpZW50Xy5zZW5zb3JSZWFkaW5nQ2hhbmdlZCgpOwotICAgICAgICB9Ci0g
ICAgICB9LCB0aW1lb3V0KTsKLSAgICB9Ci0KLSAgICBzdG9wUmVhZGluZygpIHsKLSAgICAgIGlm
ICh0aGlzLnNlbnNvclJlYWRpbmdUaW1lcklkXyAhPSBudWxsKSB7Ci0gICAgICAgIHdpbmRvdy5j
bGVhckludGVydmFsKHRoaXMuc2Vuc29yUmVhZGluZ1RpbWVySWRfKTsKLSAgICAgICAgdGhpcy5z
ZW5zb3JSZWFkaW5nVGltZXJJZF8gPSBudWxsOwotICAgICAgfQotICAgIH0KLQotICAgIGdldFNh
bXBsaW5nRnJlcXVlbmN5KCkgewotICAgICAgIGFzc2VydF90cnVlKHRoaXMucmVxdWVzdGVkRnJl
cXVlbmNpZXNfLmxlbmd0aCA+IDApOwotICAgICAgIHJldHVybiB0aGlzLnJlcXVlc3RlZEZyZXF1
ZW5jaWVzX1swXTsKLSAgICB9Ci0gIH0KLQotICAvLyBDbGFzcyB0aGF0IG1vY2tzIFNlbnNvclBy
b3ZpZGVyIGludGVyZmFjZSBkZWZpbmVkIGluCi0gIC8vIGh0dHBzOi8vY3MuY2hyb21pdW0ub3Jn
L2Nocm9taXVtL3NyYy9zZXJ2aWNlcy9kZXZpY2UvcHVibGljL21vam9tL3NlbnNvcl9wcm92aWRl
ci5tb2pvbQotICBjbGFzcyBNb2NrU2Vuc29yUHJvdmlkZXIgewotICAgIGNvbnN0cnVjdG9yKCkg
ewotICAgICAgdGhpcy5yZWFkaW5nU2l6ZUluQnl0ZXNfID0KLSAgICAgICAgICBkZXZpY2UubW9q
b20uU2Vuc29ySW5pdFBhcmFtcy5SRUFEX0JVRkZFUl9TSVpFX0ZPUl9URVNUUzsKLSAgICAgIHRo
aXMuc2hhcmVkQnVmZmVyU2l6ZUluQnl0ZXNfID0gdGhpcy5yZWFkaW5nU2l6ZUluQnl0ZXNfICoK
LSAgICAgICAgICAgICAgKGRldmljZS5tb2pvbS5TZW5zb3JUeXBlLk1BWF9WQUxVRSArIDEpOwot
ICAgICAgY29uc3QgcnYgPSBNb2pvLmNyZWF0ZVNoYXJlZEJ1ZmZlcih0aGlzLnNoYXJlZEJ1ZmZl
clNpemVJbkJ5dGVzXyk7Ci0gICAgICBhc3NlcnRfZXF1YWxzKHJ2LnJlc3VsdCwgTW9qby5SRVNV
TFRfT0ssICJGYWlsZWQgdG8gY3JlYXRlIGJ1ZmZlciIpOwotICAgICAgdGhpcy5zaGFyZWRCdWZm
ZXJIYW5kbGVfID0gcnYuaGFuZGxlOwotICAgICAgdGhpcy5hY3RpdmVTZW5zb3JzXyA9IG5ldyBN
YXAoKTsKLSAgICAgIHRoaXMucmVzb2x2ZUZ1bmNzXyA9IG5ldyBNYXAoKTsKLSAgICAgIHRoaXMu
Z2V0U2Vuc29yU2hvdWxkRmFpbF8gPSBuZXcgTWFwKCk7Ci0gICAgICB0aGlzLnBlcm1pc3Npb25z
RGVuaWVkXyA9IG5ldyBNYXAoKTsKLSAgICAgIHRoaXMubWF4RnJlcXVlbmN5XyA9IDYwOwotICAg
ICAgdGhpcy5taW5GcmVxdWVuY3lfID0gMTsKLSAgICAgIHRoaXMubW9qb21TZW5zb3JUeXBlXyA9
IG5ldyBNYXAoWwotICAgICAgICBbJ0FjY2VsZXJvbWV0ZXInLCBkZXZpY2UubW9qb20uU2Vuc29y
VHlwZS5BQ0NFTEVST01FVEVSXSwKLSAgICAgICAgWydMaW5lYXJBY2NlbGVyYXRpb25TZW5zb3In
LAotICAgICAgICAgICAgZGV2aWNlLm1vam9tLlNlbnNvclR5cGUuTElORUFSX0FDQ0VMRVJBVElP
Tl0sCi0gICAgICAgIFsnQW1iaWVudExpZ2h0U2Vuc29yJywgZGV2aWNlLm1vam9tLlNlbnNvclR5
cGUuQU1CSUVOVF9MSUdIVF0sCi0gICAgICAgIFsnR3lyb3Njb3BlJywgZGV2aWNlLm1vam9tLlNl
bnNvclR5cGUuR1lST1NDT1BFXSwKLSAgICAgICAgWydNYWduZXRvbWV0ZXInLCBkZXZpY2UubW9q
b20uU2Vuc29yVHlwZS5NQUdORVRPTUVURVJdLAotICAgICAgICBbJ0Fic29sdXRlT3JpZW50YXRp
b25TZW5zb3InLAotICAgICAgICAgICAgZGV2aWNlLm1vam9tLlNlbnNvclR5cGUuQUJTT0xVVEVf
T1JJRU5UQVRJT05fUVVBVEVSTklPTl0sCi0gICAgICAgIFsnQWJzb2x1dGVPcmllbnRhdGlvbkV1
bGVyQW5nbGVzJywKLSAgICAgICAgICAgIGRldmljZS5tb2pvbS5TZW5zb3JUeXBlLkFCU09MVVRF
X09SSUVOVEFUSU9OX0VVTEVSX0FOR0xFU10sCi0gICAgICAgIFsnUmVsYXRpdmVPcmllbnRhdGlv
blNlbnNvcicsCi0gICAgICAgICAgICBkZXZpY2UubW9qb20uU2Vuc29yVHlwZS5SRUxBVElWRV9P
UklFTlRBVElPTl9RVUFURVJOSU9OXSwKLSAgICAgICAgWydSZWxhdGl2ZU9yaWVudGF0aW9uRXVs
ZXJBbmdsZXMnLAotICAgICAgICAgICAgZGV2aWNlLm1vam9tLlNlbnNvclR5cGUuUkVMQVRJVkVf
T1JJRU5UQVRJT05fRVVMRVJfQU5HTEVTXSwKLSAgICAgICAgWydQcm94aW1pdHlTZW5zb3InLCBk
ZXZpY2UubW9qb20uU2Vuc29yVHlwZS5QUk9YSU1JVFldCi0gICAgICBdKTsKLSAgICAgIHRoaXMu
YmluZGluZ18gPSBuZXcgbW9qby5CaW5kaW5nKGRldmljZS5tb2pvbS5TZW5zb3JQcm92aWRlciwg
dGhpcyk7Ci0KLSAgICAgIHRoaXMuaW50ZXJjZXB0b3JfID0KLSAgICAgICAgICBuZXcgTW9qb0lu
dGVyZmFjZUludGVyY2VwdG9yKGRldmljZS5tb2pvbS5TZW5zb3JQcm92aWRlci5uYW1lKTsKLSAg
ICAgIHRoaXMuaW50ZXJjZXB0b3JfLm9uaW50ZXJmYWNlcmVxdWVzdCA9IGUgPT4gewotICAgICAg
ICB0aGlzLmJpbmRUb1BpcGUoZS5oYW5kbGUpOwotICAgICAgfTsKLSAgICAgIHRoaXMuaW50ZXJj
ZXB0b3JfLnN0YXJ0KCk7Ci0gICAgfQotCi0gICAgLy8gUmV0dXJucyBpbml0aWFsaXplZCBTZW5z
b3IgcHJveHkgdG8gdGhlIGNsaWVudC4KLSAgICBhc3luYyBnZXRTZW5zb3IodHlwZSkgewotICAg
ICAgaWYgKHRoaXMuZ2V0U2Vuc29yU2hvdWxkRmFpbF8uZ2V0KHR5cGUpKSB7Ci0gICAgICAgIHJl
dHVybiB7cmVzdWx0OiBkZXZpY2UubW9qb20uU2Vuc29yQ3JlYXRpb25SZXN1bHQuRVJST1JfTk9U
X0FWQUlMQUJMRSwKLSAgICAgICAgICAgICAgICBpbml0UGFyYW1zOiBudWxsfTsKLSAgICAgIH0K
LSAgICAgIGlmICh0aGlzLnBlcm1pc3Npb25zRGVuaWVkXy5nZXQodHlwZSkpIHsKLSAgICAgICAg
cmV0dXJuIHtyZXN1bHQ6IGRldmljZS5tb2pvbS5TZW5zb3JDcmVhdGlvblJlc3VsdC5FUlJPUl9O
T1RfQUxMT1dFRCwKLSAgICAgICAgICAgICAgICBpbml0UGFyYW1zOiBudWxsfTsKLSAgICAgIH0K
LQotICAgICAgY29uc3Qgb2Zmc2V0ID0gdHlwZSAqIHRoaXMucmVhZGluZ1NpemVJbkJ5dGVzXzsK
LSAgICAgIGNvbnN0IHJlcG9ydGluZ01vZGUgPSBkZXZpY2UubW9qb20uUmVwb3J0aW5nTW9kZS5P
Tl9DSEFOR0U7Ci0KLSAgICAgIGNvbnN0IHNlbnNvclB0ciA9IG5ldyBkZXZpY2UubW9qb20uU2Vu
c29yUHRyKCk7Ci0gICAgICBpZiAoIXRoaXMuYWN0aXZlU2Vuc29yc18uaGFzKHR5cGUpKSB7Ci0g
ICAgICAgIGNvbnN0IG1vY2tTZW5zb3IgPSBuZXcgTW9ja1NlbnNvcigKLSAgICAgICAgICAgIG1v
am8ubWFrZVJlcXVlc3Qoc2Vuc29yUHRyKSwgdGhpcy5zaGFyZWRCdWZmZXJIYW5kbGVfLCBvZmZz
ZXQsCi0gICAgICAgICAgICB0aGlzLnJlYWRpbmdTaXplSW5CeXRlc18sIHJlcG9ydGluZ01vZGUp
OwotICAgICAgICB0aGlzLmFjdGl2ZVNlbnNvcnNfLnNldCh0eXBlLCBtb2NrU2Vuc29yKTsKLSAg
ICAgICAgdGhpcy5hY3RpdmVTZW5zb3JzXy5nZXQodHlwZSkuY2xpZW50XyA9Ci0gICAgICAgICAg
ICBuZXcgZGV2aWNlLm1vam9tLlNlbnNvckNsaWVudFB0cigpOwotICAgICAgfQotCi0gICAgICBj
b25zdCBydiA9IHRoaXMuc2hhcmVkQnVmZmVySGFuZGxlXy5kdXBsaWNhdGVCdWZmZXJIYW5kbGUo
KTsKLQotICAgICAgYXNzZXJ0X2VxdWFscyhydi5yZXN1bHQsIE1vam8uUkVTVUxUX09LKTsKLQot
ICAgICAgY29uc3QgZGVmYXVsdENvbmZpZyA9IHsgZnJlcXVlbmN5OiBERUZBVUxUX0ZSRVFVRU5D
WSB9OwotICAgICAgLy8gQ29uc2lkZXIgc2Vuc29yIHRyYWl0cyB0byBtZWV0IGFzc2VydGlvbnMg
aW4gQysrIGNvZGUgKHNlZQotICAgICAgLy8gc2VydmljZXMvZGV2aWNlL3B1YmxpYy9jcHAvZ2Vu
ZXJpY19zZW5zb3Ivc2Vuc29yX3RyYWl0cy5oKQotICAgICAgaWYgKHR5cGUgPT0gZGV2aWNlLm1v
am9tLlNlbnNvclR5cGUuQU1CSUVOVF9MSUdIVCB8fAotICAgICAgICAgIHR5cGUgPT0gZGV2aWNl
Lm1vam9tLlNlbnNvclR5cGUuTUFHTkVUT01FVEVSKSB7Ci0gICAgICAgIHRoaXMubWF4RnJlcXVl
bmN5XyA9IE1hdGgubWluKDEwLCB0aGlzLm1heEZyZXF1ZW5jeV8pOwotICAgICAgfQotCi0gICAg
ICAvLyBDaHJvbWl1bSBhcHBsaWVzIHNvbWUgcm91bmRpbmcgYW5kIG90aGVyIHByaXZhY3ktcmVs
YXRlZCBtZWFzdXJlcyB0aGF0Ci0gICAgICAvLyBjYW4gY2F1c2UgQUxTIG5vdCB0byByZXBvcnQg
YSByZWFkaW5nIHdoZW4gaXQgaGFzIG5vdCBjaGFuZ2VkIGJleW9uZCBhCi0gICAgICAvLyBjZXJ0
YWluIHRocmVzaG9sZCBjb21wYXJlZCB0byB0aGUgcHJldmlvdXMgaWxsdW1pbmFuY2UgdmFsdWUu
IE1ha2UKLSAgICAgIC8vIGVhY2ggcmVhZGluZyByZXR1cm4gYSBkaWZmZXJlbnQgdmFsdWUgdGhh
dCBpcyBzaWduaWZpY2FudGx5IGRpZmZlcmVudAotICAgICAgLy8gZnJvbSB0aGUgcHJldmlvdXMg
b25lIHdoZW4gc2V0U2Vuc29yUmVhZGluZygpIGlzIG5vdCBjYWxsZWQgYnkgY2xpZW50Ci0gICAg
ICAvLyBjb2RlIChlLmcuIHJ1bl9nZW5lcmljX3NlbnNvcl9pZnJhbWVfdGVzdHMoKSkuCi0gICAg
ICBpZiAodHlwZSA9PSBkZXZpY2UubW9qb20uU2Vuc29yVHlwZS5BTUJJRU5UX0xJR0hUKSB7Ci0g
ICAgICAgIHRoaXMuYWN0aXZlU2Vuc29yc18uZ2V0KHR5cGUpLnNldFNlbnNvclJlYWRpbmcoWwot
ICAgICAgICAgIFt3aW5kb3cucGVyZm9ybWFuY2Uubm93KCkgKiAxMDBdLAotICAgICAgICAgIFso
d2luZG93LnBlcmZvcm1hbmNlLm5vdygpICsgNTApICogMTAwXQotICAgICAgICBdKTsKLSAgICAg
IH0KLQotICAgICAgY29uc3QgaW5pdFBhcmFtcyA9IG5ldyBkZXZpY2UubW9qb20uU2Vuc29ySW5p
dFBhcmFtcyh7Ci0gICAgICAgIHNlbnNvcjogc2Vuc29yUHRyLAotICAgICAgICBjbGllbnRSZWNl
aXZlcjogbW9qby5tYWtlUmVxdWVzdCh0aGlzLmFjdGl2ZVNlbnNvcnNfLmdldCh0eXBlKS5jbGll
bnRfKSwKLSAgICAgICAgbWVtb3J5OiBydi5oYW5kbGUsCi0gICAgICAgIGJ1ZmZlck9mZnNldDog
b2Zmc2V0LAotICAgICAgICBtb2RlOiByZXBvcnRpbmdNb2RlLAotICAgICAgICBkZWZhdWx0Q29u
ZmlndXJhdGlvbjogZGVmYXVsdENvbmZpZywKLSAgICAgICAgbWluaW11bUZyZXF1ZW5jeTogdGhp
cy5taW5GcmVxdWVuY3lfLAotICAgICAgICBtYXhpbXVtRnJlcXVlbmN5OiB0aGlzLm1heEZyZXF1
ZW5jeV8KLSAgICAgIH0pOwotCi0gICAgICBpZiAodGhpcy5yZXNvbHZlRnVuY3NfLmhhcyh0eXBl
KSkgewotICAgICAgICBmb3IgKGxldCByZXNvbHZlRnVuYyBvZiB0aGlzLnJlc29sdmVGdW5jc18u
Z2V0KHR5cGUpKSB7Ci0gICAgICAgICAgcmVzb2x2ZUZ1bmModGhpcy5hY3RpdmVTZW5zb3JzXy5n
ZXQodHlwZSkpOwotICAgICAgICB9Ci0gICAgICAgIHRoaXMucmVzb2x2ZUZ1bmNzXy5kZWxldGUo
dHlwZSk7Ci0gICAgICB9Ci0KLSAgICAgIHJldHVybiB7cmVzdWx0OiBkZXZpY2UubW9qb20uU2Vu
c29yQ3JlYXRpb25SZXN1bHQuU1VDQ0VTUywKLSAgICAgICAgICAgICAgaW5pdFBhcmFtczogaW5p
dFBhcmFtc307Ci0gICAgfQotCi0gICAgLy8gQmluZHMgb2JqZWN0IHRvIG1vam8gbWVzc2FnZSBw
aXBlCi0gICAgYmluZFRvUGlwZShwaXBlKSB7Ci0gICAgICB0aGlzLmJpbmRpbmdfLmJpbmQocGlw
ZSk7Ci0gICAgICB0aGlzLmJpbmRpbmdfLnNldENvbm5lY3Rpb25FcnJvckhhbmRsZXIoKCkgPT4g
ewotICAgICAgICB0aGlzLnJlc2V0KCk7Ci0gICAgICB9KTsKLSAgICB9Ci0KLSAgICAvLyBNb2Nr
IGZ1bmN0aW9ucwotCi0gICAgLy8gUmVzZXRzIHN0YXRlIG9mIG1vY2sgU2Vuc29yUHJvdmlkZXIg
YmV0d2VlbiB0ZXN0IHJ1bnMuCi0gICAgcmVzZXQoKSB7Ci0gICAgICBmb3IgKGNvbnN0IHNlbnNv
ciBvZiB0aGlzLmFjdGl2ZVNlbnNvcnNfLnZhbHVlcygpKSB7Ci0gICAgICAgIHNlbnNvci5yZXNl
dCgpOwotICAgICAgfQotICAgICAgdGhpcy5hY3RpdmVTZW5zb3JzXy5jbGVhcigpOwotICAgICAg
dGhpcy5yZXNvbHZlRnVuY3NfLmNsZWFyKCk7Ci0gICAgICB0aGlzLmdldFNlbnNvclNob3VsZEZh
aWxfLmNsZWFyKCk7Ci0gICAgICB0aGlzLnBlcm1pc3Npb25zRGVuaWVkXy5jbGVhcigpOwotICAg
ICAgdGhpcy5tYXhGcmVxdWVuY3lfID0gNjA7Ci0gICAgICB0aGlzLm1pbkZyZXF1ZW5jeV8gPSAx
OwotICAgICAgdGhpcy5iaW5kaW5nXy5jbG9zZSgpOwotICAgICAgdGhpcy5pbnRlcmNlcHRvcl8u
c3RvcCgpOwotICAgIH0KLQotICAgIC8vIFNldHMgZmxhZyB0aGF0IGZvcmNlcyBtb2NrIFNlbnNv
clByb3ZpZGVyIHRvIGZhaWwgd2hlbiBnZXRTZW5zb3IoKSBpcwotICAgIC8vIGludm9rZWQuCi0g
ICAgc2V0R2V0U2Vuc29yU2hvdWxkRmFpbChzZW5zb3JUeXBlLCBzaG91bGRGYWlsKSB7Ci0gICAg
ICB0aGlzLmdldFNlbnNvclNob3VsZEZhaWxfLnNldCh0aGlzLm1vam9tU2Vuc29yVHlwZV8uZ2V0
KHNlbnNvclR5cGUpLAotICAgICAgICAgIHNob3VsZEZhaWwpOwotICAgIH0KLQotICAgIHNldFBl
cm1pc3Npb25zRGVuaWVkKHNlbnNvclR5cGUsIHBlcm1pc3Npb25zRGVuaWVkKSB7Ci0gICAgICB0
aGlzLnBlcm1pc3Npb25zRGVuaWVkXy5zZXQodGhpcy5tb2pvbVNlbnNvclR5cGVfLmdldChzZW5z
b3JUeXBlKSwKLSAgICAgICAgICBwZXJtaXNzaW9uc0RlbmllZCk7Ci0gICAgfQotCi0gICAgLy8g
UmV0dXJucyBtb2NrIHNlbnNvciB0aGF0IHdhcyBjcmVhdGVkIGluIGdldFNlbnNvciB0byB0aGUg
bGF5b3V0IHRlc3QuCi0gICAgZ2V0Q3JlYXRlZFNlbnNvcihzZW5zb3JUeXBlKSB7Ci0gICAgICBj
b25zdCB0eXBlID0gdGhpcy5tb2pvbVNlbnNvclR5cGVfLmdldChzZW5zb3JUeXBlKTsKLSAgICAg
IGFzc2VydF9lcXVhbHModHlwZW9mIHR5cGUsICJudW1iZXIiLCAiQSBzZW5zb3IgdHlwZSBtdXN0
IGJlIHNwZWNpZmllZC4iKTsKLQotICAgICAgaWYgKHRoaXMuYWN0aXZlU2Vuc29yc18uaGFzKHR5
cGUpKSB7Ci0gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodGhpcy5hY3RpdmVTZW5zb3Jz
Xy5nZXQodHlwZSkpOwotICAgICAgfQotCi0gICAgICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2
ZSA9PiB7Ci0gICAgICAgIGlmICghdGhpcy5yZXNvbHZlRnVuY3NfLmhhcyh0eXBlKSkgewotICAg
ICAgICAgIHRoaXMucmVzb2x2ZUZ1bmNzXy5zZXQodHlwZSwgW10pOwotICAgICAgICB9Ci0gICAg
ICAgIHRoaXMucmVzb2x2ZUZ1bmNzXy5nZXQodHlwZSkucHVzaChyZXNvbHZlKTsKLSAgICAgIH0p
OwotICAgIH0KLQotICAgIC8vIFNldHMgdGhlIG1heGltdW0gZnJlcXVlbmN5IGZvciBhIGNvbmNy
ZXRlIHNlbnNvci4KLSAgICBzZXRNYXhpbXVtU3VwcG9ydGVkRnJlcXVlbmN5KGZyZXF1ZW5jeSkg
ewotICAgICAgdGhpcy5tYXhGcmVxdWVuY3lfID0gZnJlcXVlbmN5OwotICAgIH0KLQotICAgIC8v
IFNldHMgdGhlIG1pbmltdW0gZnJlcXVlbmN5IGZvciBhIGNvbmNyZXRlIHNlbnNvci4KLSAgICBz
ZXRNaW5pbXVtU3VwcG9ydGVkRnJlcXVlbmN5KGZyZXF1ZW5jeSkgewotICAgICAgdGhpcy5taW5G
cmVxdWVuY3lfID0gZnJlcXVlbmN5OwotICAgIH0KLSAgfQotCi0gIGxldCB0ZXN0SW50ZXJuYWwg
PSB7Ci0gICAgaW5pdGlhbGl6ZWQ6IGZhbHNlLAotICAgIHNlbnNvclByb3ZpZGVyOiBudWxsCi0g
IH0KLQotICBjbGFzcyBHZW5lcmljU2Vuc29yVGVzdENocm9taXVtIHsKLSAgICBjb25zdHJ1Y3Rv
cigpIHsKLSAgICAgIE9iamVjdC5mcmVlemUodGhpcyk7IC8vIE1ha2UgaXQgaW1tdXRhYmxlLgot
ICAgIH0KLQotICAgIGFzeW5jIGluaXRpYWxpemUoKSB7Ci0gICAgICBpZiAodGVzdEludGVybmFs
LmluaXRpYWxpemVkKQotICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0NhbGwgcmVzZXQoKSBiZWZv
cmUgaW5pdGlhbGl6ZSgpLicpOwotCi0gICAgICAvLyBHcmFudCBzZW5zb3IgcGVybWlzc2lvbnMg
Zm9yIENocm9taXVtIHRlc3Rkcml2ZXIuCi0gICAgICBmb3IgKGNvbnN0IGVudHJ5IG9mIFsnYWNj
ZWxlcm9tZXRlcicsICdneXJvc2NvcGUnLAotICAgICAgICAgICdtYWduZXRvbWV0ZXInLCAnYW1i
aWVudC1saWdodC1zZW5zb3InXSkgewotICAgICAgICBhd2FpdCB0ZXN0X2RyaXZlci5zZXRfcGVy
bWlzc2lvbih7IG5hbWU6IGVudHJ5IH0sICdncmFudGVkJywgZmFsc2UpOwotICAgICAgfTsKLQot
ICAgICAgdGVzdEludGVybmFsLnNlbnNvclByb3ZpZGVyID0gbmV3IE1vY2tTZW5zb3JQcm92aWRl
cjsKLSAgICAgIHRlc3RJbnRlcm5hbC5pbml0aWFsaXplZCA9IHRydWU7Ci0gICAgfQotICAgIC8v
IFJlc2V0cyBzdGF0ZSBvZiBzZW5zb3IgbW9ja3MgYmV0d2VlbiB0ZXN0IHJ1bnMuCi0gICAgYXN5
bmMgcmVzZXQoKSB7Ci0gICAgICBpZiAoIXRlc3RJbnRlcm5hbC5pbml0aWFsaXplZCkKLSAgICAg
ICAgdGhyb3cgbmV3IEVycm9yKCdDYWxsIGluaXRpYWxpemUoKSBiZWZvcmUgcmVzZXQoKS4nKTsK
LSAgICAgIHRlc3RJbnRlcm5hbC5zZW5zb3JQcm92aWRlci5yZXNldCgpOwotICAgICAgdGVzdElu
dGVybmFsLnNlbnNvclByb3ZpZGVyID0gbnVsbDsKLSAgICAgIHRlc3RJbnRlcm5hbC5pbml0aWFs
aXplZCA9IGZhbHNlOwotCi0gICAgICAvLyBXYWl0IGZvciBhbiBldmVudCBsb29wIGl0ZXJhdGlv
biB0byBsZXQgYW55IHBlbmRpbmcgbW9qbyBjb21tYW5kcyBpbgotICAgICAgLy8gdGhlIHNlbnNv
ciBwcm92aWRlciBmaW5pc2guCi0gICAgICBhd2FpdCBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHNl
dFRpbWVvdXQocmVzb2x2ZSwgMCkpOwotICAgIH0KLQotICAgIGdldFNlbnNvclByb3ZpZGVyKCkg
ewotICAgICAgcmV0dXJuIHRlc3RJbnRlcm5hbC5zZW5zb3JQcm92aWRlcjsKLSAgICB9Ci0gIH0K
LQotICByZXR1cm4gR2VuZXJpY1NlbnNvclRlc3RDaHJvbWl1bTsKLX0pKCk7CmRpZmYgLS1naXQg
YS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9j
aHJvbWl1bS9nZW5lcmljX3NlbnNvcl9tb2Nrcy5qcy5oZWFkZXJzIGIvTGF5b3V0VGVzdHMvaW1w
b3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vZ2VuZXJpY19z
ZW5zb3JfbW9ja3MuanMuaGVhZGVycwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjgw
NWMzMjNkZjVhOTc1MjMxNjQ4YjgzMGUzM2NlMTgzYzNjYmJkMy4uMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2Vi
LXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS9nZW5lcmljX3NlbnNvcl9tb2Nrcy5q
cy5oZWFkZXJzCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotQ29udGVudC1UeXBlOiB0ZXh0
L2phdmFzY3JpcHQ7IGNoYXJzZXQ9dXRmLTgKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2ltcG9y
dGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL2ltYWdlX2NhcHR1
cmUtbW9qb20uanMuaGVhZGVycyBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZv
cm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL2ltYWdlX2NhcHR1cmUtbW9qb20uanMuaGVhZGVy
cwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmM2MWEzNGE0ZWMyZTc1MDk2ZGIwZWI5
Zjc3NDhiMTQyZjBkYjdiYi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MAotLS0gYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291
cmNlcy9jaHJvbWl1bS9pbWFnZV9jYXB0dXJlLW1vam9tLmpzLmhlYWRlcnMKKysrIC9kZXYvbnVs
bApAQCAtMSArMCwwIEBACi1Db250ZW50LVR5cGU6IHRleHQvamF2YXNjcmlwdDsgY2hhcnNldD11
dGYtOApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL0xheW91dFRlc3Rz
L2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL2ltYWdl
X2NhcHR1cmUubW9qb20uanMgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3Jt
LXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS9pbWFnZV9jYXB0dXJlLm1vam9tLmpzCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMTQ1ZDdhMzQwMjU0M2ExODIyOTYyOWRhMDEzM2RlYTgx
ZGQzNzU1Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL0xh
eW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9t
aXVtL2ltYWdlX2NhcHR1cmUubW9qb20uanMKKysrIC9kZXYvbnVsbApAQCAtMSwxNDAzICswLDAg
QEAKLS8vIENvcHlyaWdodCAyMDE0IFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qt
c3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4K
LQotJ3VzZSBzdHJpY3QnOwotCi0oZnVuY3Rpb24oKSB7Ci0gIHZhciBtb2pvbUlkID0gJ21lZGlh
L2NhcHR1cmUvbW9qb20vaW1hZ2VfY2FwdHVyZS5tb2pvbSc7Ci0gIGlmIChtb2pvLmludGVybmFs
LmlzTW9qb21Mb2FkZWQobW9qb21JZCkpIHsKLSAgICBjb25zb2xlLndhcm4oJ1RoZSBmb2xsb3dp
bmcgbW9qb20gaXMgbG9hZGVkIG11bHRpcGxlIHRpbWVzOiAnICsgbW9qb21JZCk7Ci0gICAgcmV0
dXJuOwotICB9Ci0gIG1vam8uaW50ZXJuYWwubWFya01vam9tTG9hZGVkKG1vam9tSWQpOwotICB2
YXIgYmluZGluZ3MgPSBtb2pvOwotICB2YXIgYXNzb2NpYXRlZEJpbmRpbmdzID0gbW9qbzsKLSAg
dmFyIGNvZGVjID0gbW9qby5pbnRlcm5hbDsKLSAgdmFyIHZhbGlkYXRvciA9IG1vam8uaW50ZXJu
YWw7Ci0KLSAgdmFyIGV4cG9ydHMgPSBtb2pvLmludGVybmFsLmV4cG9zZU5hbWVzcGFjZSgnbWVk
aWEubW9qb20nKTsKLQotCi0gIHZhciBNZXRlcmluZ01vZGUgPSB7fTsKLSAgTWV0ZXJpbmdNb2Rl
Lk5PTkUgPSAwOwotICBNZXRlcmluZ01vZGUuTUFOVUFMID0gTWV0ZXJpbmdNb2RlLk5PTkUgKyAx
OwotICBNZXRlcmluZ01vZGUuU0lOR0xFX1NIT1QgPSBNZXRlcmluZ01vZGUuTUFOVUFMICsgMTsK
LSAgTWV0ZXJpbmdNb2RlLkNPTlRJTlVPVVMgPSBNZXRlcmluZ01vZGUuU0lOR0xFX1NIT1QgKyAx
OwotICBNZXRlcmluZ01vZGUuTUlOX1ZBTFVFID0gMCwKLSAgTWV0ZXJpbmdNb2RlLk1BWF9WQUxV
RSA9IDMsCi0KLSAgTWV0ZXJpbmdNb2RlLmlzS25vd25FbnVtVmFsdWUgPSBmdW5jdGlvbih2YWx1
ZSkgewotICAgIHN3aXRjaCAodmFsdWUpIHsKLSAgICBjYXNlIDA6Ci0gICAgY2FzZSAxOgotICAg
IGNhc2UgMjoKLSAgICBjYXNlIDM6Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgcmV0
dXJuIGZhbHNlOwotICB9OwotCi0gIE1ldGVyaW5nTW9kZS52YWxpZGF0ZSA9IGZ1bmN0aW9uKGVu
dW1WYWx1ZSkgewotICAgIHZhciBpc0V4dGVuc2libGUgPSBmYWxzZTsKLSAgICBpZiAoaXNFeHRl
bnNpYmxlIHx8IHRoaXMuaXNLbm93bkVudW1WYWx1ZShlbnVtVmFsdWUpKQotICAgICAgcmV0dXJu
IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORTsKLQotICAgIHJldHVybiB2YWxpZGF0b3Iu
dmFsaWRhdGlvbkVycm9yLlVOS05PV05fRU5VTV9WQUxVRTsKLSAgfTsKLSAgdmFyIFJlZEV5ZVJl
ZHVjdGlvbiA9IHt9OwotICBSZWRFeWVSZWR1Y3Rpb24uTkVWRVIgPSAwOwotICBSZWRFeWVSZWR1
Y3Rpb24uQUxXQVlTID0gUmVkRXllUmVkdWN0aW9uLk5FVkVSICsgMTsKLSAgUmVkRXllUmVkdWN0
aW9uLkNPTlRST0xMQUJMRSA9IFJlZEV5ZVJlZHVjdGlvbi5BTFdBWVMgKyAxOwotICBSZWRFeWVS
ZWR1Y3Rpb24uTUlOX1ZBTFVFID0gMCwKLSAgUmVkRXllUmVkdWN0aW9uLk1BWF9WQUxVRSA9IDIs
Ci0KLSAgUmVkRXllUmVkdWN0aW9uLmlzS25vd25FbnVtVmFsdWUgPSBmdW5jdGlvbih2YWx1ZSkg
ewotICAgIHN3aXRjaCAodmFsdWUpIHsKLSAgICBjYXNlIDA6Ci0gICAgY2FzZSAxOgotICAgIGNh
c2UgMjoKLSAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci0gIH07
Ci0KLSAgUmVkRXllUmVkdWN0aW9uLnZhbGlkYXRlID0gZnVuY3Rpb24oZW51bVZhbHVlKSB7Ci0g
ICAgdmFyIGlzRXh0ZW5zaWJsZSA9IGZhbHNlOwotICAgIGlmIChpc0V4dGVuc2libGUgfHwgdGhp
cy5pc0tub3duRW51bVZhbHVlKGVudW1WYWx1ZSkpCi0gICAgICByZXR1cm4gdmFsaWRhdG9yLnZh
bGlkYXRpb25FcnJvci5OT05FOwotCi0gICAgcmV0dXJuIHZhbGlkYXRvci52YWxpZGF0aW9uRXJy
b3IuVU5LTk9XTl9FTlVNX1ZBTFVFOwotICB9OwotICB2YXIgRmlsbExpZ2h0TW9kZSA9IHt9Owot
ICBGaWxsTGlnaHRNb2RlLk9GRiA9IDA7Ci0gIEZpbGxMaWdodE1vZGUuQVVUTyA9IEZpbGxMaWdo
dE1vZGUuT0ZGICsgMTsKLSAgRmlsbExpZ2h0TW9kZS5GTEFTSCA9IEZpbGxMaWdodE1vZGUuQVVU
TyArIDE7Ci0gIEZpbGxMaWdodE1vZGUuTUlOX1ZBTFVFID0gMCwKLSAgRmlsbExpZ2h0TW9kZS5N
QVhfVkFMVUUgPSAyLAotCi0gIEZpbGxMaWdodE1vZGUuaXNLbm93bkVudW1WYWx1ZSA9IGZ1bmN0
aW9uKHZhbHVlKSB7Ci0gICAgc3dpdGNoICh2YWx1ZSkgewotICAgIGNhc2UgMDoKLSAgICBjYXNl
IDE6Ci0gICAgY2FzZSAyOgotICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIHJldHVybiBm
YWxzZTsKLSAgfTsKLQotICBGaWxsTGlnaHRNb2RlLnZhbGlkYXRlID0gZnVuY3Rpb24oZW51bVZh
bHVlKSB7Ci0gICAgdmFyIGlzRXh0ZW5zaWJsZSA9IGZhbHNlOwotICAgIGlmIChpc0V4dGVuc2li
bGUgfHwgdGhpcy5pc0tub3duRW51bVZhbHVlKGVudW1WYWx1ZSkpCi0gICAgICByZXR1cm4gdmFs
aWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FOwotCi0gICAgcmV0dXJuIHZhbGlkYXRvci52YWxp
ZGF0aW9uRXJyb3IuVU5LTk9XTl9FTlVNX1ZBTFVFOwotICB9OwotCi0gIGZ1bmN0aW9uIFJhbmdl
KHZhbHVlcykgewotICAgIHRoaXMuaW5pdERlZmF1bHRzXygpOwotICAgIHRoaXMuaW5pdEZpZWxk
c18odmFsdWVzKTsKLSAgfQotCi0KLSAgUmFuZ2UucHJvdG90eXBlLmluaXREZWZhdWx0c18gPSBm
dW5jdGlvbigpIHsKLSAgICB0aGlzLm1heCA9IDA7Ci0gICAgdGhpcy5taW4gPSAwOwotICAgIHRo
aXMuY3VycmVudCA9IDA7Ci0gICAgdGhpcy5zdGVwID0gMDsKLSAgfTsKLSAgUmFuZ2UucHJvdG90
eXBlLmluaXRGaWVsZHNfID0gZnVuY3Rpb24oZmllbGRzKSB7Ci0gICAgZm9yKHZhciBmaWVsZCBp
biBmaWVsZHMpIHsKLSAgICAgICAgaWYgKHRoaXMuaGFzT3duUHJvcGVydHkoZmllbGQpKQotICAg
ICAgICAgIHRoaXNbZmllbGRdID0gZmllbGRzW2ZpZWxkXTsKLSAgICB9Ci0gIH07Ci0KLSAgUmFu
Z2UudmFsaWRhdGUgPSBmdW5jdGlvbihtZXNzYWdlVmFsaWRhdG9yLCBvZmZzZXQpIHsKLSAgICB2
YXIgZXJyOwotICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RIZWFkZXIo
b2Zmc2V0LCBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSk7Ci0gICAgaWYgKGVyciAhPT0gdmFsaWRh
dG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQotICAgICAgICByZXR1cm4gZXJyOwotCi0gICAgdmFy
IGtWZXJzaW9uU2l6ZXMgPSBbCi0gICAgICB7dmVyc2lvbjogMCwgbnVtQnl0ZXM6IDQwfQotICAg
IF07Ci0gICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdFZlcnNpb24ob2Zm
c2V0LCBrVmVyc2lvblNpemVzKTsKLSAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlv
bkVycm9yLk5PTkUpCi0gICAgICAgIHJldHVybiBlcnI7Ci0KLQotCi0KLQotICAgIHJldHVybiB2
YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkU7Ci0gIH07Ci0KLSAgUmFuZ2UuZW5jb2RlZFNp
emUgPSBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDMyOwotCi0gIFJhbmdlLmRlY29kZSA9IGZ1
bmN0aW9uKGRlY29kZXIpIHsKLSAgICB2YXIgcGFja2VkOwotICAgIHZhciB2YWwgPSBuZXcgUmFu
Z2UoKTsKLSAgICB2YXIgbnVtYmVyT2ZCeXRlcyA9IGRlY29kZXIucmVhZFVpbnQzMigpOwotICAg
IHZhciB2ZXJzaW9uID0gZGVjb2Rlci5yZWFkVWludDMyKCk7Ci0gICAgdmFsLm1heCA9IGRlY29k
ZXIuZGVjb2RlU3RydWN0KGNvZGVjLkRvdWJsZSk7Ci0gICAgdmFsLm1pbiA9IGRlY29kZXIuZGVj
b2RlU3RydWN0KGNvZGVjLkRvdWJsZSk7Ci0gICAgdmFsLmN1cnJlbnQgPSBkZWNvZGVyLmRlY29k
ZVN0cnVjdChjb2RlYy5Eb3VibGUpOwotICAgIHZhbC5zdGVwID0gZGVjb2Rlci5kZWNvZGVTdHJ1
Y3QoY29kZWMuRG91YmxlKTsKLSAgICByZXR1cm4gdmFsOwotICB9OwotCi0gIFJhbmdlLmVuY29k
ZSA9IGZ1bmN0aW9uKGVuY29kZXIsIHZhbCkgewotICAgIHZhciBwYWNrZWQ7Ci0gICAgZW5jb2Rl
ci53cml0ZVVpbnQzMihSYW5nZS5lbmNvZGVkU2l6ZSk7Ci0gICAgZW5jb2Rlci53cml0ZVVpbnQz
MigwKTsKLSAgICBlbmNvZGVyLmVuY29kZVN0cnVjdChjb2RlYy5Eb3VibGUsIHZhbC5tYXgpOwot
ICAgIGVuY29kZXIuZW5jb2RlU3RydWN0KGNvZGVjLkRvdWJsZSwgdmFsLm1pbik7Ci0gICAgZW5j
b2Rlci5lbmNvZGVTdHJ1Y3QoY29kZWMuRG91YmxlLCB2YWwuY3VycmVudCk7Ci0gICAgZW5jb2Rl
ci5lbmNvZGVTdHJ1Y3QoY29kZWMuRG91YmxlLCB2YWwuc3RlcCk7Ci0gIH07Ci0gIGZ1bmN0aW9u
IFBob3RvU3RhdGUodmFsdWVzKSB7Ci0gICAgdGhpcy5pbml0RGVmYXVsdHNfKCk7Ci0gICAgdGhp
cy5pbml0RmllbGRzXyh2YWx1ZXMpOwotICB9Ci0KLQotICBQaG90b1N0YXRlLnByb3RvdHlwZS5p
bml0RGVmYXVsdHNfID0gZnVuY3Rpb24oKSB7Ci0gICAgdGhpcy5zdXBwb3J0ZWRXaGl0ZUJhbGFu
Y2VNb2RlcyA9IG51bGw7Ci0gICAgdGhpcy5jdXJyZW50V2hpdGVCYWxhbmNlTW9kZSA9IDA7Ci0g
ICAgdGhpcy5jdXJyZW50RXhwb3N1cmVNb2RlID0gMDsKLSAgICB0aGlzLnN1cHBvcnRlZEV4cG9z
dXJlTW9kZXMgPSBudWxsOwotICAgIHRoaXMuc3VwcG9ydGVkRm9jdXNNb2RlcyA9IG51bGw7Ci0g
ICAgdGhpcy5jdXJyZW50Rm9jdXNNb2RlID0gMDsKLSAgICB0aGlzLnN1cHBvcnRzVG9yY2ggPSBm
YWxzZTsKLSAgICB0aGlzLnRvcmNoID0gZmFsc2U7Ci0gICAgdGhpcy5wb2ludHNPZkludGVyZXN0
ID0gbnVsbDsKLSAgICB0aGlzLmV4cG9zdXJlQ29tcGVuc2F0aW9uID0gbnVsbDsKLSAgICB0aGlz
LmV4cG9zdXJlVGltZSA9IG51bGw7Ci0gICAgdGhpcy5jb2xvclRlbXBlcmF0dXJlID0gbnVsbDsK
LSAgICB0aGlzLmlzbyA9IG51bGw7Ci0gICAgdGhpcy5icmlnaHRuZXNzID0gbnVsbDsKLSAgICB0
aGlzLmNvbnRyYXN0ID0gbnVsbDsKLSAgICB0aGlzLnNhdHVyYXRpb24gPSBudWxsOwotICAgIHRo
aXMuc2hhcnBuZXNzID0gbnVsbDsKLSAgICB0aGlzLmZvY3VzRGlzdGFuY2UgPSBudWxsOwotICAg
IHRoaXMucGFuID0gbnVsbDsKLSAgICB0aGlzLnRpbHQgPSBudWxsOwotICAgIHRoaXMuem9vbSA9
IG51bGw7Ci0gICAgdGhpcy5yZWRFeWVSZWR1Y3Rpb24gPSAwOwotICAgIHRoaXMuaGVpZ2h0ID0g
bnVsbDsKLSAgICB0aGlzLndpZHRoID0gbnVsbDsKLSAgICB0aGlzLmZpbGxMaWdodE1vZGUgPSBu
dWxsOwotICB9OwotICBQaG90b1N0YXRlLnByb3RvdHlwZS5pbml0RmllbGRzXyA9IGZ1bmN0aW9u
KGZpZWxkcykgewotICAgIGZvcih2YXIgZmllbGQgaW4gZmllbGRzKSB7Ci0gICAgICAgIGlmICh0
aGlzLmhhc093blByb3BlcnR5KGZpZWxkKSkKLSAgICAgICAgICB0aGlzW2ZpZWxkXSA9IGZpZWxk
c1tmaWVsZF07Ci0gICAgfQotICB9OwotCi0gIFBob3RvU3RhdGUudmFsaWRhdGUgPSBmdW5jdGlv
bihtZXNzYWdlVmFsaWRhdG9yLCBvZmZzZXQpIHsKLSAgICB2YXIgZXJyOwotICAgIGVyciA9IG1l
c3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RIZWFkZXIob2Zmc2V0LCBjb2RlYy5rU3RydWN0
SGVhZGVyU2l6ZSk7Ci0gICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5O
T05FKQotICAgICAgICByZXR1cm4gZXJyOwotCi0gICAgdmFyIGtWZXJzaW9uU2l6ZXMgPSBbCi0g
ICAgICB7dmVyc2lvbjogMCwgbnVtQnl0ZXM6IDE4NH0KLSAgICBdOwotICAgIGVyciA9IG1lc3Nh
Z2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RWZXJzaW9uKG9mZnNldCwga1ZlcnNpb25TaXplcyk7
Ci0gICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQotICAgICAg
ICByZXR1cm4gZXJyOwotCi0KLSAgICAvLyB2YWxpZGF0ZSBQaG90b1N0YXRlLnN1cHBvcnRlZFdo
aXRlQmFsYW5jZU1vZGVzCi0gICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZUFycmF5
UG9pbnRlcihvZmZzZXQgKyBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDAsIDQsIG5ldyBjb2Rl
Yy5FbnVtKE1ldGVyaW5nTW9kZSksIGZhbHNlLCBbMF0sIDApOwotICAgIGlmIChlcnIgIT09IHZh
bGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKLSAgICAgICAgcmV0dXJuIGVycjsKLQotCi0g
ICAgLy8gdmFsaWRhdGUgUGhvdG9TdGF0ZS5jdXJyZW50V2hpdGVCYWxhbmNlTW9kZQotICAgIGVy
ciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVFbnVtKG9mZnNldCArIGNvZGVjLmtTdHJ1Y3RI
ZWFkZXJTaXplICsgOCwgTWV0ZXJpbmdNb2RlKTsKLSAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3Iu
dmFsaWRhdGlvbkVycm9yLk5PTkUpCi0gICAgICAgIHJldHVybiBlcnI7Ci0KLQotICAgIC8vIHZh
bGlkYXRlIFBob3RvU3RhdGUuc3VwcG9ydGVkRXhwb3N1cmVNb2RlcwotICAgIGVyciA9IG1lc3Nh
Z2VWYWxpZGF0b3IudmFsaWRhdGVBcnJheVBvaW50ZXIob2Zmc2V0ICsgY29kZWMua1N0cnVjdEhl
YWRlclNpemUgKyAxNiwgNCwgbmV3IGNvZGVjLkVudW0oTWV0ZXJpbmdNb2RlKSwgZmFsc2UsIFsw
XSwgMCk7Ci0gICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQot
ICAgICAgICByZXR1cm4gZXJyOwotCi0KLSAgICAvLyB2YWxpZGF0ZSBQaG90b1N0YXRlLmN1cnJl
bnRFeHBvc3VyZU1vZGUKLSAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlRW51bShv
ZmZzZXQgKyBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDEyLCBNZXRlcmluZ01vZGUpOwotICAg
IGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKLSAgICAgICAgcmV0
dXJuIGVycjsKLQotCi0gICAgLy8gdmFsaWRhdGUgUGhvdG9TdGF0ZS5zdXBwb3J0ZWRGb2N1c01v
ZGVzCi0gICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZUFycmF5UG9pbnRlcihvZmZz
ZXQgKyBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDI0LCA0LCBuZXcgY29kZWMuRW51bShNZXRl
cmluZ01vZGUpLCBmYWxzZSwgWzBdLCAwKTsKLSAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFs
aWRhdGlvbkVycm9yLk5PTkUpCi0gICAgICAgIHJldHVybiBlcnI7Ci0KLQotICAgIC8vIHZhbGlk
YXRlIFBob3RvU3RhdGUuY3VycmVudEZvY3VzTW9kZQotICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0
b3IudmFsaWRhdGVFbnVtKG9mZnNldCArIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgMzIsIE1l
dGVyaW5nTW9kZSk7Ci0gICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5O
T05FKQotICAgICAgICByZXR1cm4gZXJyOwotCi0KLSAgICAvLyB2YWxpZGF0ZSBQaG90b1N0YXRl
LnBvaW50c09mSW50ZXJlc3QKLSAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlQXJy
YXlQb2ludGVyKG9mZnNldCArIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgNDAsIDgsIG5ldyBj
b2RlYy5Qb2ludGVyVG8oUG9pbnQyRCksIGZhbHNlLCBbMF0sIDApOwotICAgIGlmIChlcnIgIT09
IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKLSAgICAgICAgcmV0dXJuIGVycjsKLQot
Ci0gICAgLy8gdmFsaWRhdGUgUGhvdG9TdGF0ZS5leHBvc3VyZUNvbXBlbnNhdGlvbgotICAgIGVy
ciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RQb2ludGVyKG9mZnNldCArIGNvZGVj
LmtTdHJ1Y3RIZWFkZXJTaXplICsgNDgsIFJhbmdlLCBmYWxzZSk7Ci0gICAgaWYgKGVyciAhPT0g
dmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQotICAgICAgICByZXR1cm4gZXJyOwotCi0K
LSAgICAvLyB2YWxpZGF0ZSBQaG90b1N0YXRlLmV4cG9zdXJlVGltZQotICAgIGVyciA9IG1lc3Nh
Z2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RQb2ludGVyKG9mZnNldCArIGNvZGVjLmtTdHJ1Y3RI
ZWFkZXJTaXplICsgNTYsIFJhbmdlLCBmYWxzZSk7Ci0gICAgaWYgKGVyciAhPT0gdmFsaWRhdG9y
LnZhbGlkYXRpb25FcnJvci5OT05FKQotICAgICAgICByZXR1cm4gZXJyOwotCi0KLSAgICAvLyB2
YWxpZGF0ZSBQaG90b1N0YXRlLmNvbG9yVGVtcGVyYXR1cmUKLSAgICBlcnIgPSBtZXNzYWdlVmFs
aWRhdG9yLnZhbGlkYXRlU3RydWN0UG9pbnRlcihvZmZzZXQgKyBjb2RlYy5rU3RydWN0SGVhZGVy
U2l6ZSArIDY0LCBSYW5nZSwgZmFsc2UpOwotICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxp
ZGF0aW9uRXJyb3IuTk9ORSkKLSAgICAgICAgcmV0dXJuIGVycjsKLQotCi0gICAgLy8gdmFsaWRh
dGUgUGhvdG9TdGF0ZS5pc28KLSAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3Ry
dWN0UG9pbnRlcihvZmZzZXQgKyBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDcyLCBSYW5nZSwg
ZmFsc2UpOwotICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkK
LSAgICAgICAgcmV0dXJuIGVycjsKLQotCi0gICAgLy8gdmFsaWRhdGUgUGhvdG9TdGF0ZS5icmln
aHRuZXNzCi0gICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdFBvaW50ZXIo
b2Zmc2V0ICsgY29kZWMua1N0cnVjdEhlYWRlclNpemUgKyA4MCwgUmFuZ2UsIGZhbHNlKTsKLSAg
ICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCi0gICAgICAgIHJl
dHVybiBlcnI7Ci0KLQotICAgIC8vIHZhbGlkYXRlIFBob3RvU3RhdGUuY29udHJhc3QKLSAgICBl
cnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0UG9pbnRlcihvZmZzZXQgKyBjb2Rl
Yy5rU3RydWN0SGVhZGVyU2l6ZSArIDg4LCBSYW5nZSwgZmFsc2UpOwotICAgIGlmIChlcnIgIT09
IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKLSAgICAgICAgcmV0dXJuIGVycjsKLQot
Ci0gICAgLy8gdmFsaWRhdGUgUGhvdG9TdGF0ZS5zYXR1cmF0aW9uCi0gICAgZXJyID0gbWVzc2Fn
ZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdFBvaW50ZXIob2Zmc2V0ICsgY29kZWMua1N0cnVjdEhl
YWRlclNpemUgKyA5NiwgUmFuZ2UsIGZhbHNlKTsKLSAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3Iu
dmFsaWRhdGlvbkVycm9yLk5PTkUpCi0gICAgICAgIHJldHVybiBlcnI7Ci0KLQotICAgIC8vIHZh
bGlkYXRlIFBob3RvU3RhdGUuc2hhcnBuZXNzCi0gICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52
YWxpZGF0ZVN0cnVjdFBvaW50ZXIob2Zmc2V0ICsgY29kZWMua1N0cnVjdEhlYWRlclNpemUgKyAx
MDQsIFJhbmdlLCBmYWxzZSk7Ci0gICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25F
cnJvci5OT05FKQotICAgICAgICByZXR1cm4gZXJyOwotCi0KLSAgICAvLyB2YWxpZGF0ZSBQaG90
b1N0YXRlLmZvY3VzRGlzdGFuY2UKLSAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRl
U3RydWN0UG9pbnRlcihvZmZzZXQgKyBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDExMiwgUmFu
Z2UsIGZhbHNlKTsKLSAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5P
TkUpCi0gICAgICAgIHJldHVybiBlcnI7Ci0KLQotICAgIC8vIHZhbGlkYXRlIFBob3RvU3RhdGUu
cGFuCi0gICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdFBvaW50ZXIob2Zm
c2V0ICsgY29kZWMua1N0cnVjdEhlYWRlclNpemUgKyAxMjAsIFJhbmdlLCBmYWxzZSk7Ci0gICAg
aWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQotICAgICAgICByZXR1
cm4gZXJyOwotCi0KLSAgICAvLyB2YWxpZGF0ZSBQaG90b1N0YXRlLnRpbHQKLSAgICBlcnIgPSBt
ZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0UG9pbnRlcihvZmZzZXQgKyBjb2RlYy5rU3Ry
dWN0SGVhZGVyU2l6ZSArIDEyOCwgUmFuZ2UsIGZhbHNlKTsKLSAgICBpZiAoZXJyICE9PSB2YWxp
ZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCi0gICAgICAgIHJldHVybiBlcnI7Ci0KLQotICAg
IC8vIHZhbGlkYXRlIFBob3RvU3RhdGUuem9vbQotICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3Iu
dmFsaWRhdGVTdHJ1Y3RQb2ludGVyKG9mZnNldCArIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsg
MTM2LCBSYW5nZSwgZmFsc2UpOwotICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9u
RXJyb3IuTk9ORSkKLSAgICAgICAgcmV0dXJuIGVycjsKLQotCi0KLQotICAgIC8vIHZhbGlkYXRl
IFBob3RvU3RhdGUucmVkRXllUmVkdWN0aW9uCi0gICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52
YWxpZGF0ZUVudW0ob2Zmc2V0ICsgY29kZWMua1N0cnVjdEhlYWRlclNpemUgKyAxNDQsIFJlZEV5
ZVJlZHVjdGlvbik7Ci0gICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5O
T05FKQotICAgICAgICByZXR1cm4gZXJyOwotCi0KLSAgICAvLyB2YWxpZGF0ZSBQaG90b1N0YXRl
LmhlaWdodAotICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RQb2ludGVy
KG9mZnNldCArIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgMTUyLCBSYW5nZSwgZmFsc2UpOwot
ICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKLSAgICAgICAg
cmV0dXJuIGVycjsKLQotCi0gICAgLy8gdmFsaWRhdGUgUGhvdG9TdGF0ZS53aWR0aAotICAgIGVy
ciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RQb2ludGVyKG9mZnNldCArIGNvZGVj
LmtTdHJ1Y3RIZWFkZXJTaXplICsgMTYwLCBSYW5nZSwgZmFsc2UpOwotICAgIGlmIChlcnIgIT09
IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKLSAgICAgICAgcmV0dXJuIGVycjsKLQot
Ci0gICAgLy8gdmFsaWRhdGUgUGhvdG9TdGF0ZS5maWxsTGlnaHRNb2RlCi0gICAgZXJyID0gbWVz
c2FnZVZhbGlkYXRvci52YWxpZGF0ZUFycmF5UG9pbnRlcihvZmZzZXQgKyBjb2RlYy5rU3RydWN0
SGVhZGVyU2l6ZSArIDE2OCwgNCwgbmV3IGNvZGVjLkVudW0oRmlsbExpZ2h0TW9kZSksIGZhbHNl
LCBbMF0sIDApOwotICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9O
RSkKLSAgICAgICAgcmV0dXJuIGVycjsKLQotICAgIHJldHVybiB2YWxpZGF0b3IudmFsaWRhdGlv
bkVycm9yLk5PTkU7Ci0gIH07Ci0KLSAgUGhvdG9TdGF0ZS5lbmNvZGVkU2l6ZSA9IGNvZGVjLmtT
dHJ1Y3RIZWFkZXJTaXplICsgMTc2OwotCi0gIFBob3RvU3RhdGUuZGVjb2RlID0gZnVuY3Rpb24o
ZGVjb2RlcikgewotICAgIHZhciBwYWNrZWQ7Ci0gICAgdmFyIHZhbCA9IG5ldyBQaG90b1N0YXRl
KCk7Ci0gICAgdmFyIG51bWJlck9mQnl0ZXMgPSBkZWNvZGVyLnJlYWRVaW50MzIoKTsKLSAgICB2
YXIgdmVyc2lvbiA9IGRlY29kZXIucmVhZFVpbnQzMigpOwotICAgIHZhbC5zdXBwb3J0ZWRXaGl0
ZUJhbGFuY2VNb2RlcyA9IGRlY29kZXIuZGVjb2RlQXJyYXlQb2ludGVyKG5ldyBjb2RlYy5FbnVt
KE1ldGVyaW5nTW9kZSkpOwotICAgIHZhbC5jdXJyZW50V2hpdGVCYWxhbmNlTW9kZSA9IGRlY29k
ZXIuZGVjb2RlU3RydWN0KGNvZGVjLkludDMyKTsKLSAgICB2YWwuY3VycmVudEV4cG9zdXJlTW9k
ZSA9IGRlY29kZXIuZGVjb2RlU3RydWN0KGNvZGVjLkludDMyKTsKLSAgICB2YWwuc3VwcG9ydGVk
RXhwb3N1cmVNb2RlcyA9IGRlY29kZXIuZGVjb2RlQXJyYXlQb2ludGVyKG5ldyBjb2RlYy5FbnVt
KE1ldGVyaW5nTW9kZSkpOwotICAgIHZhbC5zdXBwb3J0ZWRGb2N1c01vZGVzID0gZGVjb2Rlci5k
ZWNvZGVBcnJheVBvaW50ZXIobmV3IGNvZGVjLkVudW0oTWV0ZXJpbmdNb2RlKSk7Ci0gICAgdmFs
LmN1cnJlbnRGb2N1c01vZGUgPSBkZWNvZGVyLmRlY29kZVN0cnVjdChjb2RlYy5JbnQzMik7Ci0g
ICAgcGFja2VkID0gZGVjb2Rlci5yZWFkVWludDgoKTsKLSAgICB2YWwuc3VwcG9ydHNUb3JjaCA9
IChwYWNrZWQgPj4gMCkgJiAxID8gdHJ1ZSA6IGZhbHNlOwotICAgIHZhbC50b3JjaCA9IChwYWNr
ZWQgPj4gMSkgJiAxID8gdHJ1ZSA6IGZhbHNlOwotICAgIGRlY29kZXIuc2tpcCgxKTsKLSAgICBk
ZWNvZGVyLnNraXAoMSk7Ci0gICAgZGVjb2Rlci5za2lwKDEpOwotICAgIHZhbC5wb2ludHNPZklu
dGVyZXN0ID0gZGVjb2Rlci5kZWNvZGVBcnJheVBvaW50ZXIobmV3IGNvZGVjLlBvaW50ZXJUbyhQ
b2ludDJEKSk7Ci0gICAgdmFsLmV4cG9zdXJlQ29tcGVuc2F0aW9uID0gZGVjb2Rlci5kZWNvZGVT
dHJ1Y3RQb2ludGVyKFJhbmdlKTsKLSAgICB2YWwuZXhwb3N1cmVUaW1lID0gZGVjb2Rlci5kZWNv
ZGVTdHJ1Y3RQb2ludGVyKFJhbmdlKTsKLSAgICB2YWwuY29sb3JUZW1wZXJhdHVyZSA9IGRlY29k
ZXIuZGVjb2RlU3RydWN0UG9pbnRlcihSYW5nZSk7Ci0gICAgdmFsLmlzbyA9IGRlY29kZXIuZGVj
b2RlU3RydWN0UG9pbnRlcihSYW5nZSk7Ci0gICAgdmFsLmJyaWdodG5lc3MgPSBkZWNvZGVyLmRl
Y29kZVN0cnVjdFBvaW50ZXIoUmFuZ2UpOwotICAgIHZhbC5jb250cmFzdCA9IGRlY29kZXIuZGVj
b2RlU3RydWN0UG9pbnRlcihSYW5nZSk7Ci0gICAgdmFsLnNhdHVyYXRpb24gPSBkZWNvZGVyLmRl
Y29kZVN0cnVjdFBvaW50ZXIoUmFuZ2UpOwotICAgIHZhbC5zaGFycG5lc3MgPSBkZWNvZGVyLmRl
Y29kZVN0cnVjdFBvaW50ZXIoUmFuZ2UpOwotICAgIHZhbC5mb2N1c0Rpc3RhbmNlID0gZGVjb2Rl
ci5kZWNvZGVTdHJ1Y3RQb2ludGVyKFJhbmdlKTsKLSAgICB2YWwucGFuID0gZGVjb2Rlci5kZWNv
ZGVTdHJ1Y3RQb2ludGVyKFJhbmdlKTsKLSAgICB2YWwudGlsdCA9IGRlY29kZXIuZGVjb2RlU3Ry
dWN0UG9pbnRlcihSYW5nZSk7Ci0gICAgdmFsLnpvb20gPSBkZWNvZGVyLmRlY29kZVN0cnVjdFBv
aW50ZXIoUmFuZ2UpOwotICAgIHZhbC5yZWRFeWVSZWR1Y3Rpb24gPSBkZWNvZGVyLmRlY29kZVN0
cnVjdChjb2RlYy5JbnQzMik7Ci0gICAgZGVjb2Rlci5za2lwKDEpOwotICAgIGRlY29kZXIuc2tp
cCgxKTsKLSAgICBkZWNvZGVyLnNraXAoMSk7Ci0gICAgZGVjb2Rlci5za2lwKDEpOwotICAgIHZh
bC5oZWlnaHQgPSBkZWNvZGVyLmRlY29kZVN0cnVjdFBvaW50ZXIoUmFuZ2UpOwotICAgIHZhbC53
aWR0aCA9IGRlY29kZXIuZGVjb2RlU3RydWN0UG9pbnRlcihSYW5nZSk7Ci0gICAgdmFsLmZpbGxM
aWdodE1vZGUgPSBkZWNvZGVyLmRlY29kZUFycmF5UG9pbnRlcihuZXcgY29kZWMuRW51bShGaWxs
TGlnaHRNb2RlKSk7Ci0gICAgcmV0dXJuIHZhbDsKLSAgfTsKLQotICBQaG90b1N0YXRlLmVuY29k
ZSA9IGZ1bmN0aW9uKGVuY29kZXIsIHZhbCkgewotICAgIHZhciBwYWNrZWQ7Ci0gICAgZW5jb2Rl
ci53cml0ZVVpbnQzMihQaG90b1N0YXRlLmVuY29kZWRTaXplKTsKLSAgICBlbmNvZGVyLndyaXRl
VWludDMyKDApOwotICAgIGVuY29kZXIuZW5jb2RlQXJyYXlQb2ludGVyKG5ldyBjb2RlYy5FbnVt
KE1ldGVyaW5nTW9kZSksIHZhbC5zdXBwb3J0ZWRXaGl0ZUJhbGFuY2VNb2Rlcyk7Ci0gICAgZW5j
b2Rlci5lbmNvZGVTdHJ1Y3QoY29kZWMuSW50MzIsIHZhbC5jdXJyZW50V2hpdGVCYWxhbmNlTW9k
ZSk7Ci0gICAgZW5jb2Rlci5lbmNvZGVTdHJ1Y3QoY29kZWMuSW50MzIsIHZhbC5jdXJyZW50RXhw
b3N1cmVNb2RlKTsKLSAgICBlbmNvZGVyLmVuY29kZUFycmF5UG9pbnRlcihuZXcgY29kZWMuRW51
bShNZXRlcmluZ01vZGUpLCB2YWwuc3VwcG9ydGVkRXhwb3N1cmVNb2Rlcyk7Ci0gICAgZW5jb2Rl
ci5lbmNvZGVBcnJheVBvaW50ZXIobmV3IGNvZGVjLkVudW0oTWV0ZXJpbmdNb2RlKSwgdmFsLnN1
cHBvcnRlZEZvY3VzTW9kZXMpOwotICAgIGVuY29kZXIuZW5jb2RlU3RydWN0KGNvZGVjLkludDMy
LCB2YWwuY3VycmVudEZvY3VzTW9kZSk7Ci0gICAgcGFja2VkID0gMDsKLSAgICBwYWNrZWQgfD0g
KHZhbC5zdXBwb3J0c1RvcmNoICYgMSkgPDwgMAotICAgIHBhY2tlZCB8PSAodmFsLnRvcmNoICYg
MSkgPDwgMQotICAgIGVuY29kZXIud3JpdGVVaW50OChwYWNrZWQpOwotICAgIGVuY29kZXIuc2tp
cCgxKTsKLSAgICBlbmNvZGVyLnNraXAoMSk7Ci0gICAgZW5jb2Rlci5za2lwKDEpOwotICAgIGVu
Y29kZXIuZW5jb2RlQXJyYXlQb2ludGVyKG5ldyBjb2RlYy5Qb2ludGVyVG8oUG9pbnQyRCksIHZh
bC5wb2ludHNPZkludGVyZXN0KTsKLSAgICBlbmNvZGVyLmVuY29kZVN0cnVjdFBvaW50ZXIoUmFu
Z2UsIHZhbC5leHBvc3VyZUNvbXBlbnNhdGlvbik7Ci0gICAgZW5jb2Rlci5lbmNvZGVTdHJ1Y3RQ
b2ludGVyKFJhbmdlLCB2YWwuZXhwb3N1cmVUaW1lKTsKLSAgICBlbmNvZGVyLmVuY29kZVN0cnVj
dFBvaW50ZXIoUmFuZ2UsIHZhbC5jb2xvclRlbXBlcmF0dXJlKTsKLSAgICBlbmNvZGVyLmVuY29k
ZVN0cnVjdFBvaW50ZXIoUmFuZ2UsIHZhbC5pc28pOwotICAgIGVuY29kZXIuZW5jb2RlU3RydWN0
UG9pbnRlcihSYW5nZSwgdmFsLmJyaWdodG5lc3MpOwotICAgIGVuY29kZXIuZW5jb2RlU3RydWN0
UG9pbnRlcihSYW5nZSwgdmFsLmNvbnRyYXN0KTsKLSAgICBlbmNvZGVyLmVuY29kZVN0cnVjdFBv
aW50ZXIoUmFuZ2UsIHZhbC5zYXR1cmF0aW9uKTsKLSAgICBlbmNvZGVyLmVuY29kZVN0cnVjdFBv
aW50ZXIoUmFuZ2UsIHZhbC5zaGFycG5lc3MpOwotICAgIGVuY29kZXIuZW5jb2RlU3RydWN0UG9p
bnRlcihSYW5nZSwgdmFsLmZvY3VzRGlzdGFuY2UpOwotICAgIGVuY29kZXIuZW5jb2RlU3RydWN0
UG9pbnRlcihSYW5nZSwgdmFsLnBhbik7Ci0gICAgZW5jb2Rlci5lbmNvZGVTdHJ1Y3RQb2ludGVy
KFJhbmdlLCB2YWwudGlsdCk7Ci0gICAgZW5jb2Rlci5lbmNvZGVTdHJ1Y3RQb2ludGVyKFJhbmdl
LCB2YWwuem9vbSk7Ci0gICAgZW5jb2Rlci5lbmNvZGVTdHJ1Y3QoY29kZWMuSW50MzIsIHZhbC5y
ZWRFeWVSZWR1Y3Rpb24pOwotICAgIGVuY29kZXIuc2tpcCgxKTsKLSAgICBlbmNvZGVyLnNraXAo
MSk7Ci0gICAgZW5jb2Rlci5za2lwKDEpOwotICAgIGVuY29kZXIuc2tpcCgxKTsKLSAgICBlbmNv
ZGVyLmVuY29kZVN0cnVjdFBvaW50ZXIoUmFuZ2UsIHZhbC5oZWlnaHQpOwotICAgIGVuY29kZXIu
ZW5jb2RlU3RydWN0UG9pbnRlcihSYW5nZSwgdmFsLndpZHRoKTsKLSAgICBlbmNvZGVyLmVuY29k
ZUFycmF5UG9pbnRlcihuZXcgY29kZWMuRW51bShGaWxsTGlnaHRNb2RlKSwgdmFsLmZpbGxMaWdo
dE1vZGUpOwotICB9OwotICBmdW5jdGlvbiBQb2ludDJEKHZhbHVlcykgewotICAgIHRoaXMuaW5p
dERlZmF1bHRzXygpOwotICAgIHRoaXMuaW5pdEZpZWxkc18odmFsdWVzKTsKLSAgfQotCi0KLSAg
UG9pbnQyRC5wcm90b3R5cGUuaW5pdERlZmF1bHRzXyA9IGZ1bmN0aW9uKCkgewotICAgIHRoaXMu
eCA9IDA7Ci0gICAgdGhpcy55ID0gMDsKLSAgfTsKLSAgUG9pbnQyRC5wcm90b3R5cGUuaW5pdEZp
ZWxkc18gPSBmdW5jdGlvbihmaWVsZHMpIHsKLSAgICBmb3IodmFyIGZpZWxkIGluIGZpZWxkcykg
ewotICAgICAgICBpZiAodGhpcy5oYXNPd25Qcm9wZXJ0eShmaWVsZCkpCi0gICAgICAgICAgdGhp
c1tmaWVsZF0gPSBmaWVsZHNbZmllbGRdOwotICAgIH0KLSAgfTsKLQotICBQb2ludDJELnZhbGlk
YXRlID0gZnVuY3Rpb24obWVzc2FnZVZhbGlkYXRvciwgb2Zmc2V0KSB7Ci0gICAgdmFyIGVycjsK
LSAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0SGVhZGVyKG9mZnNldCwg
Y29kZWMua1N0cnVjdEhlYWRlclNpemUpOwotICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxp
ZGF0aW9uRXJyb3IuTk9ORSkKLSAgICAgICAgcmV0dXJuIGVycjsKLQotICAgIHZhciBrVmVyc2lv
blNpemVzID0gWwotICAgICAge3ZlcnNpb246IDAsIG51bUJ5dGVzOiAyNH0KLSAgICBdOwotICAg
IGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RWZXJzaW9uKG9mZnNldCwga1Zl
cnNpb25TaXplcyk7Ci0gICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5O
T05FKQotICAgICAgICByZXR1cm4gZXJyOwotCi0KLQotICAgIHJldHVybiB2YWxpZGF0b3IudmFs
aWRhdGlvbkVycm9yLk5PTkU7Ci0gIH07Ci0KLSAgUG9pbnQyRC5lbmNvZGVkU2l6ZSA9IGNvZGVj
LmtTdHJ1Y3RIZWFkZXJTaXplICsgMTY7Ci0KLSAgUG9pbnQyRC5kZWNvZGUgPSBmdW5jdGlvbihk
ZWNvZGVyKSB7Ci0gICAgdmFyIHBhY2tlZDsKLSAgICB2YXIgdmFsID0gbmV3IFBvaW50MkQoKTsK
LSAgICB2YXIgbnVtYmVyT2ZCeXRlcyA9IGRlY29kZXIucmVhZFVpbnQzMigpOwotICAgIHZhciB2
ZXJzaW9uID0gZGVjb2Rlci5yZWFkVWludDMyKCk7Ci0gICAgdmFsLnggPSBkZWNvZGVyLmRlY29k
ZVN0cnVjdChjb2RlYy5Eb3VibGUpOwotICAgIHZhbC55ID0gZGVjb2Rlci5kZWNvZGVTdHJ1Y3Qo
Y29kZWMuRG91YmxlKTsKLSAgICByZXR1cm4gdmFsOwotICB9OwotCi0gIFBvaW50MkQuZW5jb2Rl
ID0gZnVuY3Rpb24oZW5jb2RlciwgdmFsKSB7Ci0gICAgdmFyIHBhY2tlZDsKLSAgICBlbmNvZGVy
LndyaXRlVWludDMyKFBvaW50MkQuZW5jb2RlZFNpemUpOwotICAgIGVuY29kZXIud3JpdGVVaW50
MzIoMCk7Ci0gICAgZW5jb2Rlci5lbmNvZGVTdHJ1Y3QoY29kZWMuRG91YmxlLCB2YWwueCk7Ci0g
ICAgZW5jb2Rlci5lbmNvZGVTdHJ1Y3QoY29kZWMuRG91YmxlLCB2YWwueSk7Ci0gIH07Ci0gIGZ1
bmN0aW9uIFBob3RvU2V0dGluZ3ModmFsdWVzKSB7Ci0gICAgdGhpcy5pbml0RGVmYXVsdHNfKCk7
Ci0gICAgdGhpcy5pbml0RmllbGRzXyh2YWx1ZXMpOwotICB9Ci0KLQotICBQaG90b1NldHRpbmdz
LnByb3RvdHlwZS5pbml0RGVmYXVsdHNfID0gZnVuY3Rpb24oKSB7Ci0gICAgdGhpcy5oYXNXaGl0
ZUJhbGFuY2VNb2RlID0gZmFsc2U7Ci0gICAgdGhpcy5oYXNFeHBvc3VyZU1vZGUgPSBmYWxzZTsK
LSAgICB0aGlzLmhhc0ZvY3VzTW9kZSA9IGZhbHNlOwotICAgIHRoaXMuaGFzRXhwb3N1cmVDb21w
ZW5zYXRpb24gPSBmYWxzZTsKLSAgICB0aGlzLmhhc0V4cG9zdXJlVGltZSA9IGZhbHNlOwotICAg
IHRoaXMuaGFzQ29sb3JUZW1wZXJhdHVyZSA9IGZhbHNlOwotICAgIHRoaXMuaGFzSXNvID0gZmFs
c2U7Ci0gICAgdGhpcy5oYXNCcmlnaHRuZXNzID0gZmFsc2U7Ci0gICAgdGhpcy5oYXNDb250cmFz
dCA9IGZhbHNlOwotICAgIHRoaXMuaGFzU2F0dXJhdGlvbiA9IGZhbHNlOwotICAgIHRoaXMuaGFz
U2hhcnBuZXNzID0gZmFsc2U7Ci0gICAgdGhpcy5oYXNGb2N1c0Rpc3RhbmNlID0gZmFsc2U7Ci0g
ICAgdGhpcy5oYXNQYW4gPSBmYWxzZTsKLSAgICB0aGlzLmhhc1RpbHQgPSBmYWxzZTsKLSAgICB0
aGlzLmhhc1pvb20gPSBmYWxzZTsKLSAgICB0aGlzLmhhc1RvcmNoID0gZmFsc2U7Ci0gICAgdGhp
cy50b3JjaCA9IGZhbHNlOwotICAgIHRoaXMuaGFzRmlsbExpZ2h0TW9kZSA9IGZhbHNlOwotICAg
IHRoaXMuaGFzV2lkdGggPSBmYWxzZTsKLSAgICB0aGlzLmhhc0hlaWdodCA9IGZhbHNlOwotICAg
IHRoaXMuaGFzUmVkRXllUmVkdWN0aW9uID0gZmFsc2U7Ci0gICAgdGhpcy5yZWRFeWVSZWR1Y3Rp
b24gPSBmYWxzZTsKLSAgICB0aGlzLndoaXRlQmFsYW5jZU1vZGUgPSAwOwotICAgIHRoaXMuZXhw
b3N1cmVNb2RlID0gMDsKLSAgICB0aGlzLmZvY3VzTW9kZSA9IDA7Ci0gICAgdGhpcy5wb2ludHNP
ZkludGVyZXN0ID0gbnVsbDsKLSAgICB0aGlzLmV4cG9zdXJlQ29tcGVuc2F0aW9uID0gMDsKLSAg
ICB0aGlzLmV4cG9zdXJlVGltZSA9IDA7Ci0gICAgdGhpcy5jb2xvclRlbXBlcmF0dXJlID0gMDsK
LSAgICB0aGlzLmlzbyA9IDA7Ci0gICAgdGhpcy5icmlnaHRuZXNzID0gMDsKLSAgICB0aGlzLmNv
bnRyYXN0ID0gMDsKLSAgICB0aGlzLnNhdHVyYXRpb24gPSAwOwotICAgIHRoaXMuc2hhcnBuZXNz
ID0gMDsKLSAgICB0aGlzLmZvY3VzRGlzdGFuY2UgPSAwOwotICAgIHRoaXMucGFuID0gMDsKLSAg
ICB0aGlzLnRpbHQgPSAwOwotICAgIHRoaXMuem9vbSA9IDA7Ci0gICAgdGhpcy5maWxsTGlnaHRN
b2RlID0gMDsKLSAgICB0aGlzLndpZHRoID0gMDsKLSAgICB0aGlzLmhlaWdodCA9IDA7Ci0gIH07
Ci0gIFBob3RvU2V0dGluZ3MucHJvdG90eXBlLmluaXRGaWVsZHNfID0gZnVuY3Rpb24oZmllbGRz
KSB7Ci0gICAgZm9yKHZhciBmaWVsZCBpbiBmaWVsZHMpIHsKLSAgICAgICAgaWYgKHRoaXMuaGFz
T3duUHJvcGVydHkoZmllbGQpKQotICAgICAgICAgIHRoaXNbZmllbGRdID0gZmllbGRzW2ZpZWxk
XTsKLSAgICB9Ci0gIH07Ci0KLSAgUGhvdG9TZXR0aW5ncy52YWxpZGF0ZSA9IGZ1bmN0aW9uKG1l
c3NhZ2VWYWxpZGF0b3IsIG9mZnNldCkgewotICAgIHZhciBlcnI7Ci0gICAgZXJyID0gbWVzc2Fn
ZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdEhlYWRlcihvZmZzZXQsIGNvZGVjLmtTdHJ1Y3RIZWFk
ZXJTaXplKTsKLSAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUp
Ci0gICAgICAgIHJldHVybiBlcnI7Ci0KLSAgICB2YXIga1ZlcnNpb25TaXplcyA9IFsKLSAgICAg
IHt2ZXJzaW9uOiAwLCBudW1CeXRlczogMTUyfQotICAgIF07Ci0gICAgZXJyID0gbWVzc2FnZVZh
bGlkYXRvci52YWxpZGF0ZVN0cnVjdFZlcnNpb24ob2Zmc2V0LCBrVmVyc2lvblNpemVzKTsKLSAg
ICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCi0gICAgICAgIHJl
dHVybiBlcnI7Ci0KLQotCi0gICAgLy8gdmFsaWRhdGUgUGhvdG9TZXR0aW5ncy53aGl0ZUJhbGFu
Y2VNb2RlCi0gICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZUVudW0ob2Zmc2V0ICsg
Y29kZWMua1N0cnVjdEhlYWRlclNpemUgKyA0LCBNZXRlcmluZ01vZGUpOwotICAgIGlmIChlcnIg
IT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKLSAgICAgICAgcmV0dXJuIGVycjsK
LQotCi0KLSAgICAvLyB2YWxpZGF0ZSBQaG90b1NldHRpbmdzLmV4cG9zdXJlTW9kZQotICAgIGVy
ciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVFbnVtKG9mZnNldCArIGNvZGVjLmtTdHJ1Y3RI
ZWFkZXJTaXplICsgOCwgTWV0ZXJpbmdNb2RlKTsKLSAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3Iu
dmFsaWRhdGlvbkVycm9yLk5PTkUpCi0gICAgICAgIHJldHVybiBlcnI7Ci0KLQotCi0gICAgLy8g
dmFsaWRhdGUgUGhvdG9TZXR0aW5ncy5mb2N1c01vZGUKLSAgICBlcnIgPSBtZXNzYWdlVmFsaWRh
dG9yLnZhbGlkYXRlRW51bShvZmZzZXQgKyBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDEyLCBN
ZXRlcmluZ01vZGUpOwotICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3Iu
Tk9ORSkKLSAgICAgICAgcmV0dXJuIGVycjsKLQotCi0gICAgLy8gdmFsaWRhdGUgUGhvdG9TZXR0
aW5ncy5wb2ludHNPZkludGVyZXN0Ci0gICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0
ZUFycmF5UG9pbnRlcihvZmZzZXQgKyBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDE2LCA4LCBu
ZXcgY29kZWMuUG9pbnRlclRvKFBvaW50MkQpLCBmYWxzZSwgWzBdLCAwKTsKLSAgICBpZiAoZXJy
ICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCi0gICAgICAgIHJldHVybiBlcnI7
Ci0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0K
LQotICAgIC8vIHZhbGlkYXRlIFBob3RvU2V0dGluZ3MuZmlsbExpZ2h0TW9kZQotICAgIGVyciA9
IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVFbnVtKG9mZnNldCArIGNvZGVjLmtTdHJ1Y3RIZWFk
ZXJTaXplICsgMTIwLCBGaWxsTGlnaHRNb2RlKTsKLSAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3Iu
dmFsaWRhdGlvbkVycm9yLk5PTkUpCi0gICAgICAgIHJldHVybiBlcnI7Ci0KLQotCi0KLQotCi0K
LSAgICByZXR1cm4gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FOwotICB9OwotCi0gIFBo
b3RvU2V0dGluZ3MuZW5jb2RlZFNpemUgPSBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDE0NDsK
LQotICBQaG90b1NldHRpbmdzLmRlY29kZSA9IGZ1bmN0aW9uKGRlY29kZXIpIHsKLSAgICB2YXIg
cGFja2VkOwotICAgIHZhciB2YWwgPSBuZXcgUGhvdG9TZXR0aW5ncygpOwotICAgIHZhciBudW1i
ZXJPZkJ5dGVzID0gZGVjb2Rlci5yZWFkVWludDMyKCk7Ci0gICAgdmFyIHZlcnNpb24gPSBkZWNv
ZGVyLnJlYWRVaW50MzIoKTsKLSAgICBwYWNrZWQgPSBkZWNvZGVyLnJlYWRVaW50OCgpOwotICAg
IHZhbC5oYXNXaGl0ZUJhbGFuY2VNb2RlID0gKHBhY2tlZCA+PiAwKSAmIDEgPyB0cnVlIDogZmFs
c2U7Ci0gICAgdmFsLmhhc0V4cG9zdXJlTW9kZSA9IChwYWNrZWQgPj4gMSkgJiAxID8gdHJ1ZSA6
IGZhbHNlOwotICAgIHZhbC5oYXNGb2N1c01vZGUgPSAocGFja2VkID4+IDIpICYgMSA/IHRydWUg
OiBmYWxzZTsKLSAgICB2YWwuaGFzRXhwb3N1cmVDb21wZW5zYXRpb24gPSAocGFja2VkID4+IDMp
ICYgMSA/IHRydWUgOiBmYWxzZTsKLSAgICB2YWwuaGFzRXhwb3N1cmVUaW1lID0gKHBhY2tlZCA+
PiA0KSAmIDEgPyB0cnVlIDogZmFsc2U7Ci0gICAgdmFsLmhhc0NvbG9yVGVtcGVyYXR1cmUgPSAo
cGFja2VkID4+IDUpICYgMSA/IHRydWUgOiBmYWxzZTsKLSAgICB2YWwuaGFzSXNvID0gKHBhY2tl
ZCA+PiA2KSAmIDEgPyB0cnVlIDogZmFsc2U7Ci0gICAgdmFsLmhhc0JyaWdodG5lc3MgPSAocGFj
a2VkID4+IDcpICYgMSA/IHRydWUgOiBmYWxzZTsKLSAgICBwYWNrZWQgPSBkZWNvZGVyLnJlYWRV
aW50OCgpOwotICAgIHZhbC5oYXNDb250cmFzdCA9IChwYWNrZWQgPj4gMCkgJiAxID8gdHJ1ZSA6
IGZhbHNlOwotICAgIHZhbC5oYXNTYXR1cmF0aW9uID0gKHBhY2tlZCA+PiAxKSAmIDEgPyB0cnVl
IDogZmFsc2U7Ci0gICAgdmFsLmhhc1NoYXJwbmVzcyA9IChwYWNrZWQgPj4gMikgJiAxID8gdHJ1
ZSA6IGZhbHNlOwotICAgIHZhbC5oYXNGb2N1c0Rpc3RhbmNlID0gKHBhY2tlZCA+PiAzKSAmIDEg
PyB0cnVlIDogZmFsc2U7Ci0gICAgdmFsLmhhc1BhbiA9IChwYWNrZWQgPj4gNCkgJiAxID8gdHJ1
ZSA6IGZhbHNlOwotICAgIHZhbC5oYXNUaWx0ID0gKHBhY2tlZCA+PiA1KSAmIDEgPyB0cnVlIDog
ZmFsc2U7Ci0gICAgdmFsLmhhc1pvb20gPSAocGFja2VkID4+IDYpICYgMSA/IHRydWUgOiBmYWxz
ZTsKLSAgICB2YWwuaGFzVG9yY2ggPSAocGFja2VkID4+IDcpICYgMSA/IHRydWUgOiBmYWxzZTsK
LSAgICBwYWNrZWQgPSBkZWNvZGVyLnJlYWRVaW50OCgpOwotICAgIHZhbC50b3JjaCA9IChwYWNr
ZWQgPj4gMCkgJiAxID8gdHJ1ZSA6IGZhbHNlOwotICAgIHZhbC5oYXNGaWxsTGlnaHRNb2RlID0g
KHBhY2tlZCA+PiAxKSAmIDEgPyB0cnVlIDogZmFsc2U7Ci0gICAgdmFsLmhhc1dpZHRoID0gKHBh
Y2tlZCA+PiAyKSAmIDEgPyB0cnVlIDogZmFsc2U7Ci0gICAgdmFsLmhhc0hlaWdodCA9IChwYWNr
ZWQgPj4gMykgJiAxID8gdHJ1ZSA6IGZhbHNlOwotICAgIHZhbC5oYXNSZWRFeWVSZWR1Y3Rpb24g
PSAocGFja2VkID4+IDQpICYgMSA/IHRydWUgOiBmYWxzZTsKLSAgICB2YWwucmVkRXllUmVkdWN0
aW9uID0gKHBhY2tlZCA+PiA1KSAmIDEgPyB0cnVlIDogZmFsc2U7Ci0gICAgZGVjb2Rlci5za2lw
KDEpOwotICAgIHZhbC53aGl0ZUJhbGFuY2VNb2RlID0gZGVjb2Rlci5kZWNvZGVTdHJ1Y3QoY29k
ZWMuSW50MzIpOwotICAgIHZhbC5leHBvc3VyZU1vZGUgPSBkZWNvZGVyLmRlY29kZVN0cnVjdChj
b2RlYy5JbnQzMik7Ci0gICAgdmFsLmZvY3VzTW9kZSA9IGRlY29kZXIuZGVjb2RlU3RydWN0KGNv
ZGVjLkludDMyKTsKLSAgICB2YWwucG9pbnRzT2ZJbnRlcmVzdCA9IGRlY29kZXIuZGVjb2RlQXJy
YXlQb2ludGVyKG5ldyBjb2RlYy5Qb2ludGVyVG8oUG9pbnQyRCkpOwotICAgIHZhbC5leHBvc3Vy
ZUNvbXBlbnNhdGlvbiA9IGRlY29kZXIuZGVjb2RlU3RydWN0KGNvZGVjLkRvdWJsZSk7Ci0gICAg
dmFsLmV4cG9zdXJlVGltZSA9IGRlY29kZXIuZGVjb2RlU3RydWN0KGNvZGVjLkRvdWJsZSk7Ci0g
ICAgdmFsLmNvbG9yVGVtcGVyYXR1cmUgPSBkZWNvZGVyLmRlY29kZVN0cnVjdChjb2RlYy5Eb3Vi
bGUpOwotICAgIHZhbC5pc28gPSBkZWNvZGVyLmRlY29kZVN0cnVjdChjb2RlYy5Eb3VibGUpOwot
ICAgIHZhbC5icmlnaHRuZXNzID0gZGVjb2Rlci5kZWNvZGVTdHJ1Y3QoY29kZWMuRG91YmxlKTsK
LSAgICB2YWwuY29udHJhc3QgPSBkZWNvZGVyLmRlY29kZVN0cnVjdChjb2RlYy5Eb3VibGUpOwot
ICAgIHZhbC5zYXR1cmF0aW9uID0gZGVjb2Rlci5kZWNvZGVTdHJ1Y3QoY29kZWMuRG91YmxlKTsK
LSAgICB2YWwuc2hhcnBuZXNzID0gZGVjb2Rlci5kZWNvZGVTdHJ1Y3QoY29kZWMuRG91YmxlKTsK
LSAgICB2YWwuZm9jdXNEaXN0YW5jZSA9IGRlY29kZXIuZGVjb2RlU3RydWN0KGNvZGVjLkRvdWJs
ZSk7Ci0gICAgdmFsLnBhbiA9IGRlY29kZXIuZGVjb2RlU3RydWN0KGNvZGVjLkRvdWJsZSk7Ci0g
ICAgdmFsLnRpbHQgPSBkZWNvZGVyLmRlY29kZVN0cnVjdChjb2RlYy5Eb3VibGUpOwotICAgIHZh
bC56b29tID0gZGVjb2Rlci5kZWNvZGVTdHJ1Y3QoY29kZWMuRG91YmxlKTsKLSAgICB2YWwuZmls
bExpZ2h0TW9kZSA9IGRlY29kZXIuZGVjb2RlU3RydWN0KGNvZGVjLkludDMyKTsKLSAgICBkZWNv
ZGVyLnNraXAoMSk7Ci0gICAgZGVjb2Rlci5za2lwKDEpOwotICAgIGRlY29kZXIuc2tpcCgxKTsK
LSAgICBkZWNvZGVyLnNraXAoMSk7Ci0gICAgdmFsLndpZHRoID0gZGVjb2Rlci5kZWNvZGVTdHJ1
Y3QoY29kZWMuRG91YmxlKTsKLSAgICB2YWwuaGVpZ2h0ID0gZGVjb2Rlci5kZWNvZGVTdHJ1Y3Qo
Y29kZWMuRG91YmxlKTsKLSAgICByZXR1cm4gdmFsOwotICB9OwotCi0gIFBob3RvU2V0dGluZ3Mu
ZW5jb2RlID0gZnVuY3Rpb24oZW5jb2RlciwgdmFsKSB7Ci0gICAgdmFyIHBhY2tlZDsKLSAgICBl
bmNvZGVyLndyaXRlVWludDMyKFBob3RvU2V0dGluZ3MuZW5jb2RlZFNpemUpOwotICAgIGVuY29k
ZXIud3JpdGVVaW50MzIoMCk7Ci0gICAgcGFja2VkID0gMDsKLSAgICBwYWNrZWQgfD0gKHZhbC5o
YXNXaGl0ZUJhbGFuY2VNb2RlICYgMSkgPDwgMAotICAgIHBhY2tlZCB8PSAodmFsLmhhc0V4cG9z
dXJlTW9kZSAmIDEpIDw8IDEKLSAgICBwYWNrZWQgfD0gKHZhbC5oYXNGb2N1c01vZGUgJiAxKSA8
PCAyCi0gICAgcGFja2VkIHw9ICh2YWwuaGFzRXhwb3N1cmVDb21wZW5zYXRpb24gJiAxKSA8PCAz
Ci0gICAgcGFja2VkIHw9ICh2YWwuaGFzRXhwb3N1cmVUaW1lICYgMSkgPDwgNAotICAgIHBhY2tl
ZCB8PSAodmFsLmhhc0NvbG9yVGVtcGVyYXR1cmUgJiAxKSA8PCA1Ci0gICAgcGFja2VkIHw9ICh2
YWwuaGFzSXNvICYgMSkgPDwgNgotICAgIHBhY2tlZCB8PSAodmFsLmhhc0JyaWdodG5lc3MgJiAx
KSA8PCA3Ci0gICAgZW5jb2Rlci53cml0ZVVpbnQ4KHBhY2tlZCk7Ci0gICAgcGFja2VkID0gMDsK
LSAgICBwYWNrZWQgfD0gKHZhbC5oYXNDb250cmFzdCAmIDEpIDw8IDAKLSAgICBwYWNrZWQgfD0g
KHZhbC5oYXNTYXR1cmF0aW9uICYgMSkgPDwgMQotICAgIHBhY2tlZCB8PSAodmFsLmhhc1NoYXJw
bmVzcyAmIDEpIDw8IDIKLSAgICBwYWNrZWQgfD0gKHZhbC5oYXNGb2N1c0Rpc3RhbmNlICYgMSkg
PDwgMwotICAgIHBhY2tlZCB8PSAodmFsLmhhc1BhbiAmIDEpIDw8IDQKLSAgICBwYWNrZWQgfD0g
KHZhbC5oYXNUaWx0ICYgMSkgPDwgNQotICAgIHBhY2tlZCB8PSAodmFsLmhhc1pvb20gJiAxKSA8
PCA2Ci0gICAgcGFja2VkIHw9ICh2YWwuaGFzVG9yY2ggJiAxKSA8PCA3Ci0gICAgZW5jb2Rlci53
cml0ZVVpbnQ4KHBhY2tlZCk7Ci0gICAgcGFja2VkID0gMDsKLSAgICBwYWNrZWQgfD0gKHZhbC50
b3JjaCAmIDEpIDw8IDAKLSAgICBwYWNrZWQgfD0gKHZhbC5oYXNGaWxsTGlnaHRNb2RlICYgMSkg
PDwgMQotICAgIHBhY2tlZCB8PSAodmFsLmhhc1dpZHRoICYgMSkgPDwgMgotICAgIHBhY2tlZCB8
PSAodmFsLmhhc0hlaWdodCAmIDEpIDw8IDMKLSAgICBwYWNrZWQgfD0gKHZhbC5oYXNSZWRFeWVS
ZWR1Y3Rpb24gJiAxKSA8PCA0Ci0gICAgcGFja2VkIHw9ICh2YWwucmVkRXllUmVkdWN0aW9uICYg
MSkgPDwgNQotICAgIGVuY29kZXIud3JpdGVVaW50OChwYWNrZWQpOwotICAgIGVuY29kZXIuc2tp
cCgxKTsKLSAgICBlbmNvZGVyLmVuY29kZVN0cnVjdChjb2RlYy5JbnQzMiwgdmFsLndoaXRlQmFs
YW5jZU1vZGUpOwotICAgIGVuY29kZXIuZW5jb2RlU3RydWN0KGNvZGVjLkludDMyLCB2YWwuZXhw
b3N1cmVNb2RlKTsKLSAgICBlbmNvZGVyLmVuY29kZVN0cnVjdChjb2RlYy5JbnQzMiwgdmFsLmZv
Y3VzTW9kZSk7Ci0gICAgZW5jb2Rlci5lbmNvZGVBcnJheVBvaW50ZXIobmV3IGNvZGVjLlBvaW50
ZXJUbyhQb2ludDJEKSwgdmFsLnBvaW50c09mSW50ZXJlc3QpOwotICAgIGVuY29kZXIuZW5jb2Rl
U3RydWN0KGNvZGVjLkRvdWJsZSwgdmFsLmV4cG9zdXJlQ29tcGVuc2F0aW9uKTsKLSAgICBlbmNv
ZGVyLmVuY29kZVN0cnVjdChjb2RlYy5Eb3VibGUsIHZhbC5leHBvc3VyZVRpbWUpOwotICAgIGVu
Y29kZXIuZW5jb2RlU3RydWN0KGNvZGVjLkRvdWJsZSwgdmFsLmNvbG9yVGVtcGVyYXR1cmUpOwot
ICAgIGVuY29kZXIuZW5jb2RlU3RydWN0KGNvZGVjLkRvdWJsZSwgdmFsLmlzbyk7Ci0gICAgZW5j
b2Rlci5lbmNvZGVTdHJ1Y3QoY29kZWMuRG91YmxlLCB2YWwuYnJpZ2h0bmVzcyk7Ci0gICAgZW5j
b2Rlci5lbmNvZGVTdHJ1Y3QoY29kZWMuRG91YmxlLCB2YWwuY29udHJhc3QpOwotICAgIGVuY29k
ZXIuZW5jb2RlU3RydWN0KGNvZGVjLkRvdWJsZSwgdmFsLnNhdHVyYXRpb24pOwotICAgIGVuY29k
ZXIuZW5jb2RlU3RydWN0KGNvZGVjLkRvdWJsZSwgdmFsLnNoYXJwbmVzcyk7Ci0gICAgZW5jb2Rl
ci5lbmNvZGVTdHJ1Y3QoY29kZWMuRG91YmxlLCB2YWwuZm9jdXNEaXN0YW5jZSk7Ci0gICAgZW5j
b2Rlci5lbmNvZGVTdHJ1Y3QoY29kZWMuRG91YmxlLCB2YWwucGFuKTsKLSAgICBlbmNvZGVyLmVu
Y29kZVN0cnVjdChjb2RlYy5Eb3VibGUsIHZhbC50aWx0KTsKLSAgICBlbmNvZGVyLmVuY29kZVN0
cnVjdChjb2RlYy5Eb3VibGUsIHZhbC56b29tKTsKLSAgICBlbmNvZGVyLmVuY29kZVN0cnVjdChj
b2RlYy5JbnQzMiwgdmFsLmZpbGxMaWdodE1vZGUpOwotICAgIGVuY29kZXIuc2tpcCgxKTsKLSAg
ICBlbmNvZGVyLnNraXAoMSk7Ci0gICAgZW5jb2Rlci5za2lwKDEpOwotICAgIGVuY29kZXIuc2tp
cCgxKTsKLSAgICBlbmNvZGVyLmVuY29kZVN0cnVjdChjb2RlYy5Eb3VibGUsIHZhbC53aWR0aCk7
Ci0gICAgZW5jb2Rlci5lbmNvZGVTdHJ1Y3QoY29kZWMuRG91YmxlLCB2YWwuaGVpZ2h0KTsKLSAg
fTsKLSAgZnVuY3Rpb24gQmxvYih2YWx1ZXMpIHsKLSAgICB0aGlzLmluaXREZWZhdWx0c18oKTsK
LSAgICB0aGlzLmluaXRGaWVsZHNfKHZhbHVlcyk7Ci0gIH0KLQotCi0gIEJsb2IucHJvdG90eXBl
LmluaXREZWZhdWx0c18gPSBmdW5jdGlvbigpIHsKLSAgICB0aGlzLm1pbWVUeXBlID0gbnVsbDsK
LSAgICB0aGlzLmRhdGEgPSBudWxsOwotICB9OwotICBCbG9iLnByb3RvdHlwZS5pbml0RmllbGRz
XyA9IGZ1bmN0aW9uKGZpZWxkcykgewotICAgIGZvcih2YXIgZmllbGQgaW4gZmllbGRzKSB7Ci0g
ICAgICAgIGlmICh0aGlzLmhhc093blByb3BlcnR5KGZpZWxkKSkKLSAgICAgICAgICB0aGlzW2Zp
ZWxkXSA9IGZpZWxkc1tmaWVsZF07Ci0gICAgfQotICB9OwotCi0gIEJsb2IudmFsaWRhdGUgPSBm
dW5jdGlvbihtZXNzYWdlVmFsaWRhdG9yLCBvZmZzZXQpIHsKLSAgICB2YXIgZXJyOwotICAgIGVy
ciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RIZWFkZXIob2Zmc2V0LCBjb2RlYy5r
U3RydWN0SGVhZGVyU2l6ZSk7Ci0gICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25F
cnJvci5OT05FKQotICAgICAgICByZXR1cm4gZXJyOwotCi0gICAgdmFyIGtWZXJzaW9uU2l6ZXMg
PSBbCi0gICAgICB7dmVyc2lvbjogMCwgbnVtQnl0ZXM6IDI0fQotICAgIF07Ci0gICAgZXJyID0g
bWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdFZlcnNpb24ob2Zmc2V0LCBrVmVyc2lvblNp
emVzKTsKLSAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCi0g
ICAgICAgIHJldHVybiBlcnI7Ci0KLQotICAgIC8vIHZhbGlkYXRlIEJsb2IubWltZVR5cGUKLSAg
ICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RyaW5nUG9pbnRlcihvZmZzZXQgKyBj
b2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDAsIGZhbHNlKQotICAgIGlmIChlcnIgIT09IHZhbGlk
YXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKLSAgICAgICAgcmV0dXJuIGVycjsKLQotCi0gICAg
Ly8gdmFsaWRhdGUgQmxvYi5kYXRhCi0gICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0
ZUFycmF5UG9pbnRlcihvZmZzZXQgKyBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDgsIDEsIGNv
ZGVjLlVpbnQ4LCBmYWxzZSwgWzBdLCAwKTsKLSAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFs
aWRhdGlvbkVycm9yLk5PTkUpCi0gICAgICAgIHJldHVybiBlcnI7Ci0KLSAgICByZXR1cm4gdmFs
aWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FOwotICB9OwotCi0gIEJsb2IuZW5jb2RlZFNpemUg
PSBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDE2OwotCi0gIEJsb2IuZGVjb2RlID0gZnVuY3Rp
b24oZGVjb2RlcikgewotICAgIHZhciBwYWNrZWQ7Ci0gICAgdmFyIHZhbCA9IG5ldyBCbG9iKCk7
Ci0gICAgdmFyIG51bWJlck9mQnl0ZXMgPSBkZWNvZGVyLnJlYWRVaW50MzIoKTsKLSAgICB2YXIg
dmVyc2lvbiA9IGRlY29kZXIucmVhZFVpbnQzMigpOwotICAgIHZhbC5taW1lVHlwZSA9IGRlY29k
ZXIuZGVjb2RlU3RydWN0KGNvZGVjLlN0cmluZyk7Ci0gICAgdmFsLmRhdGEgPSBkZWNvZGVyLmRl
Y29kZUFycmF5UG9pbnRlcihjb2RlYy5VaW50OCk7Ci0gICAgcmV0dXJuIHZhbDsKLSAgfTsKLQot
ICBCbG9iLmVuY29kZSA9IGZ1bmN0aW9uKGVuY29kZXIsIHZhbCkgewotICAgIHZhciBwYWNrZWQ7
Ci0gICAgZW5jb2Rlci53cml0ZVVpbnQzMihCbG9iLmVuY29kZWRTaXplKTsKLSAgICBlbmNvZGVy
LndyaXRlVWludDMyKDApOwotICAgIGVuY29kZXIuZW5jb2RlU3RydWN0KGNvZGVjLlN0cmluZywg
dmFsLm1pbWVUeXBlKTsKLSAgICBlbmNvZGVyLmVuY29kZUFycmF5UG9pbnRlcihjb2RlYy5VaW50
OCwgdmFsLmRhdGEpOwotICB9OwotICBmdW5jdGlvbiBJbWFnZUNhcHR1cmVfR2V0UGhvdG9TdGF0
ZV9QYXJhbXModmFsdWVzKSB7Ci0gICAgdGhpcy5pbml0RGVmYXVsdHNfKCk7Ci0gICAgdGhpcy5p
bml0RmllbGRzXyh2YWx1ZXMpOwotICB9Ci0KLQotICBJbWFnZUNhcHR1cmVfR2V0UGhvdG9TdGF0
ZV9QYXJhbXMucHJvdG90eXBlLmluaXREZWZhdWx0c18gPSBmdW5jdGlvbigpIHsKLSAgICB0aGlz
LnNvdXJjZUlkID0gbnVsbDsKLSAgfTsKLSAgSW1hZ2VDYXB0dXJlX0dldFBob3RvU3RhdGVfUGFy
YW1zLnByb3RvdHlwZS5pbml0RmllbGRzXyA9IGZ1bmN0aW9uKGZpZWxkcykgewotICAgIGZvcih2
YXIgZmllbGQgaW4gZmllbGRzKSB7Ci0gICAgICAgIGlmICh0aGlzLmhhc093blByb3BlcnR5KGZp
ZWxkKSkKLSAgICAgICAgICB0aGlzW2ZpZWxkXSA9IGZpZWxkc1tmaWVsZF07Ci0gICAgfQotICB9
OwotCi0gIEltYWdlQ2FwdHVyZV9HZXRQaG90b1N0YXRlX1BhcmFtcy52YWxpZGF0ZSA9IGZ1bmN0
aW9uKG1lc3NhZ2VWYWxpZGF0b3IsIG9mZnNldCkgewotICAgIHZhciBlcnI7Ci0gICAgZXJyID0g
bWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdEhlYWRlcihvZmZzZXQsIGNvZGVjLmtTdHJ1
Y3RIZWFkZXJTaXplKTsKLSAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9y
Lk5PTkUpCi0gICAgICAgIHJldHVybiBlcnI7Ci0KLSAgICB2YXIga1ZlcnNpb25TaXplcyA9IFsK
LSAgICAgIHt2ZXJzaW9uOiAwLCBudW1CeXRlczogMTZ9Ci0gICAgXTsKLSAgICBlcnIgPSBtZXNz
YWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0VmVyc2lvbihvZmZzZXQsIGtWZXJzaW9uU2l6ZXMp
OwotICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKLSAgICAg
ICAgcmV0dXJuIGVycjsKLQotCi0gICAgLy8gdmFsaWRhdGUgSW1hZ2VDYXB0dXJlX0dldFBob3Rv
U3RhdGVfUGFyYW1zLnNvdXJjZUlkCi0gICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0
ZVN0cmluZ1BvaW50ZXIob2Zmc2V0ICsgY29kZWMua1N0cnVjdEhlYWRlclNpemUgKyAwLCBmYWxz
ZSkKLSAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCi0gICAg
ICAgIHJldHVybiBlcnI7Ci0KLSAgICByZXR1cm4gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5O
T05FOwotICB9OwotCi0gIEltYWdlQ2FwdHVyZV9HZXRQaG90b1N0YXRlX1BhcmFtcy5lbmNvZGVk
U2l6ZSA9IGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgODsKLQotICBJbWFnZUNhcHR1cmVfR2V0
UGhvdG9TdGF0ZV9QYXJhbXMuZGVjb2RlID0gZnVuY3Rpb24oZGVjb2RlcikgewotICAgIHZhciBw
YWNrZWQ7Ci0gICAgdmFyIHZhbCA9IG5ldyBJbWFnZUNhcHR1cmVfR2V0UGhvdG9TdGF0ZV9QYXJh
bXMoKTsKLSAgICB2YXIgbnVtYmVyT2ZCeXRlcyA9IGRlY29kZXIucmVhZFVpbnQzMigpOwotICAg
IHZhciB2ZXJzaW9uID0gZGVjb2Rlci5yZWFkVWludDMyKCk7Ci0gICAgdmFsLnNvdXJjZUlkID0g
ZGVjb2Rlci5kZWNvZGVTdHJ1Y3QoY29kZWMuU3RyaW5nKTsKLSAgICByZXR1cm4gdmFsOwotICB9
OwotCi0gIEltYWdlQ2FwdHVyZV9HZXRQaG90b1N0YXRlX1BhcmFtcy5lbmNvZGUgPSBmdW5jdGlv
bihlbmNvZGVyLCB2YWwpIHsKLSAgICB2YXIgcGFja2VkOwotICAgIGVuY29kZXIud3JpdGVVaW50
MzIoSW1hZ2VDYXB0dXJlX0dldFBob3RvU3RhdGVfUGFyYW1zLmVuY29kZWRTaXplKTsKLSAgICBl
bmNvZGVyLndyaXRlVWludDMyKDApOwotICAgIGVuY29kZXIuZW5jb2RlU3RydWN0KGNvZGVjLlN0
cmluZywgdmFsLnNvdXJjZUlkKTsKLSAgfTsKLSAgZnVuY3Rpb24gSW1hZ2VDYXB0dXJlX0dldFBo
b3RvU3RhdGVfUmVzcG9uc2VQYXJhbXModmFsdWVzKSB7Ci0gICAgdGhpcy5pbml0RGVmYXVsdHNf
KCk7Ci0gICAgdGhpcy5pbml0RmllbGRzXyh2YWx1ZXMpOwotICB9Ci0KLQotICBJbWFnZUNhcHR1
cmVfR2V0UGhvdG9TdGF0ZV9SZXNwb25zZVBhcmFtcy5wcm90b3R5cGUuaW5pdERlZmF1bHRzXyA9
IGZ1bmN0aW9uKCkgewotICAgIHRoaXMuc3RhdGUgPSBudWxsOwotICB9OwotICBJbWFnZUNhcHR1
cmVfR2V0UGhvdG9TdGF0ZV9SZXNwb25zZVBhcmFtcy5wcm90b3R5cGUuaW5pdEZpZWxkc18gPSBm
dW5jdGlvbihmaWVsZHMpIHsKLSAgICBmb3IodmFyIGZpZWxkIGluIGZpZWxkcykgewotICAgICAg
ICBpZiAodGhpcy5oYXNPd25Qcm9wZXJ0eShmaWVsZCkpCi0gICAgICAgICAgdGhpc1tmaWVsZF0g
PSBmaWVsZHNbZmllbGRdOwotICAgIH0KLSAgfTsKLQotICBJbWFnZUNhcHR1cmVfR2V0UGhvdG9T
dGF0ZV9SZXNwb25zZVBhcmFtcy52YWxpZGF0ZSA9IGZ1bmN0aW9uKG1lc3NhZ2VWYWxpZGF0b3Is
IG9mZnNldCkgewotICAgIHZhciBlcnI7Ci0gICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxp
ZGF0ZVN0cnVjdEhlYWRlcihvZmZzZXQsIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplKTsKLSAgICBp
ZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCi0gICAgICAgIHJldHVy
biBlcnI7Ci0KLSAgICB2YXIga1ZlcnNpb25TaXplcyA9IFsKLSAgICAgIHt2ZXJzaW9uOiAwLCBu
dW1CeXRlczogMTZ9Ci0gICAgXTsKLSAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRl
U3RydWN0VmVyc2lvbihvZmZzZXQsIGtWZXJzaW9uU2l6ZXMpOwotICAgIGlmIChlcnIgIT09IHZh
bGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKLSAgICAgICAgcmV0dXJuIGVycjsKLQotCi0g
ICAgLy8gdmFsaWRhdGUgSW1hZ2VDYXB0dXJlX0dldFBob3RvU3RhdGVfUmVzcG9uc2VQYXJhbXMu
c3RhdGUKLSAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0UG9pbnRlcihv
ZmZzZXQgKyBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDAsIFBob3RvU3RhdGUsIGZhbHNlKTsK
LSAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCi0gICAgICAg
IHJldHVybiBlcnI7Ci0KLSAgICByZXR1cm4gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05F
OwotICB9OwotCi0gIEltYWdlQ2FwdHVyZV9HZXRQaG90b1N0YXRlX1Jlc3BvbnNlUGFyYW1zLmVu
Y29kZWRTaXplID0gY29kZWMua1N0cnVjdEhlYWRlclNpemUgKyA4OwotCi0gIEltYWdlQ2FwdHVy
ZV9HZXRQaG90b1N0YXRlX1Jlc3BvbnNlUGFyYW1zLmRlY29kZSA9IGZ1bmN0aW9uKGRlY29kZXIp
IHsKLSAgICB2YXIgcGFja2VkOwotICAgIHZhciB2YWwgPSBuZXcgSW1hZ2VDYXB0dXJlX0dldFBo
b3RvU3RhdGVfUmVzcG9uc2VQYXJhbXMoKTsKLSAgICB2YXIgbnVtYmVyT2ZCeXRlcyA9IGRlY29k
ZXIucmVhZFVpbnQzMigpOwotICAgIHZhciB2ZXJzaW9uID0gZGVjb2Rlci5yZWFkVWludDMyKCk7
Ci0gICAgdmFsLnN0YXRlID0gZGVjb2Rlci5kZWNvZGVTdHJ1Y3RQb2ludGVyKFBob3RvU3RhdGUp
OwotICAgIHJldHVybiB2YWw7Ci0gIH07Ci0KLSAgSW1hZ2VDYXB0dXJlX0dldFBob3RvU3RhdGVf
UmVzcG9uc2VQYXJhbXMuZW5jb2RlID0gZnVuY3Rpb24oZW5jb2RlciwgdmFsKSB7Ci0gICAgdmFy
IHBhY2tlZDsKLSAgICBlbmNvZGVyLndyaXRlVWludDMyKEltYWdlQ2FwdHVyZV9HZXRQaG90b1N0
YXRlX1Jlc3BvbnNlUGFyYW1zLmVuY29kZWRTaXplKTsKLSAgICBlbmNvZGVyLndyaXRlVWludDMy
KDApOwotICAgIGVuY29kZXIuZW5jb2RlU3RydWN0UG9pbnRlcihQaG90b1N0YXRlLCB2YWwuc3Rh
dGUpOwotICB9OwotICBmdW5jdGlvbiBJbWFnZUNhcHR1cmVfU2V0T3B0aW9uc19QYXJhbXModmFs
dWVzKSB7Ci0gICAgdGhpcy5pbml0RGVmYXVsdHNfKCk7Ci0gICAgdGhpcy5pbml0RmllbGRzXyh2
YWx1ZXMpOwotICB9Ci0KLQotICBJbWFnZUNhcHR1cmVfU2V0T3B0aW9uc19QYXJhbXMucHJvdG90
eXBlLmluaXREZWZhdWx0c18gPSBmdW5jdGlvbigpIHsKLSAgICB0aGlzLnNvdXJjZUlkID0gbnVs
bDsKLSAgICB0aGlzLnNldHRpbmdzID0gbnVsbDsKLSAgfTsKLSAgSW1hZ2VDYXB0dXJlX1NldE9w
dGlvbnNfUGFyYW1zLnByb3RvdHlwZS5pbml0RmllbGRzXyA9IGZ1bmN0aW9uKGZpZWxkcykgewot
ICAgIGZvcih2YXIgZmllbGQgaW4gZmllbGRzKSB7Ci0gICAgICAgIGlmICh0aGlzLmhhc093blBy
b3BlcnR5KGZpZWxkKSkKLSAgICAgICAgICB0aGlzW2ZpZWxkXSA9IGZpZWxkc1tmaWVsZF07Ci0g
ICAgfQotICB9OwotCi0gIEltYWdlQ2FwdHVyZV9TZXRPcHRpb25zX1BhcmFtcy52YWxpZGF0ZSA9
IGZ1bmN0aW9uKG1lc3NhZ2VWYWxpZGF0b3IsIG9mZnNldCkgewotICAgIHZhciBlcnI7Ci0gICAg
ZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdEhlYWRlcihvZmZzZXQsIGNvZGVj
LmtTdHJ1Y3RIZWFkZXJTaXplKTsKLSAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlv
bkVycm9yLk5PTkUpCi0gICAgICAgIHJldHVybiBlcnI7Ci0KLSAgICB2YXIga1ZlcnNpb25TaXpl
cyA9IFsKLSAgICAgIHt2ZXJzaW9uOiAwLCBudW1CeXRlczogMjR9Ci0gICAgXTsKLSAgICBlcnIg
PSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0VmVyc2lvbihvZmZzZXQsIGtWZXJzaW9u
U2l6ZXMpOwotICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkK
LSAgICAgICAgcmV0dXJuIGVycjsKLQotCi0gICAgLy8gdmFsaWRhdGUgSW1hZ2VDYXB0dXJlX1Nl
dE9wdGlvbnNfUGFyYW1zLnNvdXJjZUlkCi0gICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxp
ZGF0ZVN0cmluZ1BvaW50ZXIob2Zmc2V0ICsgY29kZWMua1N0cnVjdEhlYWRlclNpemUgKyAwLCBm
YWxzZSkKLSAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCi0g
ICAgICAgIHJldHVybiBlcnI7Ci0KLQotICAgIC8vIHZhbGlkYXRlIEltYWdlQ2FwdHVyZV9TZXRP
cHRpb25zX1BhcmFtcy5zZXR0aW5ncwotICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRh
dGVTdHJ1Y3RQb2ludGVyKG9mZnNldCArIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgOCwgUGhv
dG9TZXR0aW5ncywgZmFsc2UpOwotICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9u
RXJyb3IuTk9ORSkKLSAgICAgICAgcmV0dXJuIGVycjsKLQotICAgIHJldHVybiB2YWxpZGF0b3Iu
dmFsaWRhdGlvbkVycm9yLk5PTkU7Ci0gIH07Ci0KLSAgSW1hZ2VDYXB0dXJlX1NldE9wdGlvbnNf
UGFyYW1zLmVuY29kZWRTaXplID0gY29kZWMua1N0cnVjdEhlYWRlclNpemUgKyAxNjsKLQotICBJ
bWFnZUNhcHR1cmVfU2V0T3B0aW9uc19QYXJhbXMuZGVjb2RlID0gZnVuY3Rpb24oZGVjb2Rlcikg
ewotICAgIHZhciBwYWNrZWQ7Ci0gICAgdmFyIHZhbCA9IG5ldyBJbWFnZUNhcHR1cmVfU2V0T3B0
aW9uc19QYXJhbXMoKTsKLSAgICB2YXIgbnVtYmVyT2ZCeXRlcyA9IGRlY29kZXIucmVhZFVpbnQz
MigpOwotICAgIHZhciB2ZXJzaW9uID0gZGVjb2Rlci5yZWFkVWludDMyKCk7Ci0gICAgdmFsLnNv
dXJjZUlkID0gZGVjb2Rlci5kZWNvZGVTdHJ1Y3QoY29kZWMuU3RyaW5nKTsKLSAgICB2YWwuc2V0
dGluZ3MgPSBkZWNvZGVyLmRlY29kZVN0cnVjdFBvaW50ZXIoUGhvdG9TZXR0aW5ncyk7Ci0gICAg
cmV0dXJuIHZhbDsKLSAgfTsKLQotICBJbWFnZUNhcHR1cmVfU2V0T3B0aW9uc19QYXJhbXMuZW5j
b2RlID0gZnVuY3Rpb24oZW5jb2RlciwgdmFsKSB7Ci0gICAgdmFyIHBhY2tlZDsKLSAgICBlbmNv
ZGVyLndyaXRlVWludDMyKEltYWdlQ2FwdHVyZV9TZXRPcHRpb25zX1BhcmFtcy5lbmNvZGVkU2l6
ZSk7Ci0gICAgZW5jb2Rlci53cml0ZVVpbnQzMigwKTsKLSAgICBlbmNvZGVyLmVuY29kZVN0cnVj
dChjb2RlYy5TdHJpbmcsIHZhbC5zb3VyY2VJZCk7Ci0gICAgZW5jb2Rlci5lbmNvZGVTdHJ1Y3RQ
b2ludGVyKFBob3RvU2V0dGluZ3MsIHZhbC5zZXR0aW5ncyk7Ci0gIH07Ci0gIGZ1bmN0aW9uIElt
YWdlQ2FwdHVyZV9TZXRPcHRpb25zX1Jlc3BvbnNlUGFyYW1zKHZhbHVlcykgewotICAgIHRoaXMu
aW5pdERlZmF1bHRzXygpOwotICAgIHRoaXMuaW5pdEZpZWxkc18odmFsdWVzKTsKLSAgfQotCi0K
LSAgSW1hZ2VDYXB0dXJlX1NldE9wdGlvbnNfUmVzcG9uc2VQYXJhbXMucHJvdG90eXBlLmluaXRE
ZWZhdWx0c18gPSBmdW5jdGlvbigpIHsKLSAgICB0aGlzLnN1Y2Nlc3MgPSBmYWxzZTsKLSAgfTsK
LSAgSW1hZ2VDYXB0dXJlX1NldE9wdGlvbnNfUmVzcG9uc2VQYXJhbXMucHJvdG90eXBlLmluaXRG
aWVsZHNfID0gZnVuY3Rpb24oZmllbGRzKSB7Ci0gICAgZm9yKHZhciBmaWVsZCBpbiBmaWVsZHMp
IHsKLSAgICAgICAgaWYgKHRoaXMuaGFzT3duUHJvcGVydHkoZmllbGQpKQotICAgICAgICAgIHRo
aXNbZmllbGRdID0gZmllbGRzW2ZpZWxkXTsKLSAgICB9Ci0gIH07Ci0KLSAgSW1hZ2VDYXB0dXJl
X1NldE9wdGlvbnNfUmVzcG9uc2VQYXJhbXMudmFsaWRhdGUgPSBmdW5jdGlvbihtZXNzYWdlVmFs
aWRhdG9yLCBvZmZzZXQpIHsKLSAgICB2YXIgZXJyOwotICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0
b3IudmFsaWRhdGVTdHJ1Y3RIZWFkZXIob2Zmc2V0LCBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSk7
Ci0gICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQotICAgICAg
ICByZXR1cm4gZXJyOwotCi0gICAgdmFyIGtWZXJzaW9uU2l6ZXMgPSBbCi0gICAgICB7dmVyc2lv
bjogMCwgbnVtQnl0ZXM6IDE2fQotICAgIF07Ci0gICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52
YWxpZGF0ZVN0cnVjdFZlcnNpb24ob2Zmc2V0LCBrVmVyc2lvblNpemVzKTsKLSAgICBpZiAoZXJy
ICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCi0gICAgICAgIHJldHVybiBlcnI7
Ci0KLQotICAgIHJldHVybiB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkU7Ci0gIH07Ci0K
LSAgSW1hZ2VDYXB0dXJlX1NldE9wdGlvbnNfUmVzcG9uc2VQYXJhbXMuZW5jb2RlZFNpemUgPSBj
b2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDg7Ci0KLSAgSW1hZ2VDYXB0dXJlX1NldE9wdGlvbnNf
UmVzcG9uc2VQYXJhbXMuZGVjb2RlID0gZnVuY3Rpb24oZGVjb2RlcikgewotICAgIHZhciBwYWNr
ZWQ7Ci0gICAgdmFyIHZhbCA9IG5ldyBJbWFnZUNhcHR1cmVfU2V0T3B0aW9uc19SZXNwb25zZVBh
cmFtcygpOwotICAgIHZhciBudW1iZXJPZkJ5dGVzID0gZGVjb2Rlci5yZWFkVWludDMyKCk7Ci0g
ICAgdmFyIHZlcnNpb24gPSBkZWNvZGVyLnJlYWRVaW50MzIoKTsKLSAgICBwYWNrZWQgPSBkZWNv
ZGVyLnJlYWRVaW50OCgpOwotICAgIHZhbC5zdWNjZXNzID0gKHBhY2tlZCA+PiAwKSAmIDEgPyB0
cnVlIDogZmFsc2U7Ci0gICAgZGVjb2Rlci5za2lwKDEpOwotICAgIGRlY29kZXIuc2tpcCgxKTsK
LSAgICBkZWNvZGVyLnNraXAoMSk7Ci0gICAgZGVjb2Rlci5za2lwKDEpOwotICAgIGRlY29kZXIu
c2tpcCgxKTsKLSAgICBkZWNvZGVyLnNraXAoMSk7Ci0gICAgZGVjb2Rlci5za2lwKDEpOwotICAg
IHJldHVybiB2YWw7Ci0gIH07Ci0KLSAgSW1hZ2VDYXB0dXJlX1NldE9wdGlvbnNfUmVzcG9uc2VQ
YXJhbXMuZW5jb2RlID0gZnVuY3Rpb24oZW5jb2RlciwgdmFsKSB7Ci0gICAgdmFyIHBhY2tlZDsK
LSAgICBlbmNvZGVyLndyaXRlVWludDMyKEltYWdlQ2FwdHVyZV9TZXRPcHRpb25zX1Jlc3BvbnNl
UGFyYW1zLmVuY29kZWRTaXplKTsKLSAgICBlbmNvZGVyLndyaXRlVWludDMyKDApOwotICAgIHBh
Y2tlZCA9IDA7Ci0gICAgcGFja2VkIHw9ICh2YWwuc3VjY2VzcyAmIDEpIDw8IDAKLSAgICBlbmNv
ZGVyLndyaXRlVWludDgocGFja2VkKTsKLSAgICBlbmNvZGVyLnNraXAoMSk7Ci0gICAgZW5jb2Rl
ci5za2lwKDEpOwotICAgIGVuY29kZXIuc2tpcCgxKTsKLSAgICBlbmNvZGVyLnNraXAoMSk7Ci0g
ICAgZW5jb2Rlci5za2lwKDEpOwotICAgIGVuY29kZXIuc2tpcCgxKTsKLSAgICBlbmNvZGVyLnNr
aXAoMSk7Ci0gIH07Ci0gIGZ1bmN0aW9uIEltYWdlQ2FwdHVyZV9UYWtlUGhvdG9fUGFyYW1zKHZh
bHVlcykgewotICAgIHRoaXMuaW5pdERlZmF1bHRzXygpOwotICAgIHRoaXMuaW5pdEZpZWxkc18o
dmFsdWVzKTsKLSAgfQotCi0KLSAgSW1hZ2VDYXB0dXJlX1Rha2VQaG90b19QYXJhbXMucHJvdG90
eXBlLmluaXREZWZhdWx0c18gPSBmdW5jdGlvbigpIHsKLSAgICB0aGlzLnNvdXJjZUlkID0gbnVs
bDsKLSAgfTsKLSAgSW1hZ2VDYXB0dXJlX1Rha2VQaG90b19QYXJhbXMucHJvdG90eXBlLmluaXRG
aWVsZHNfID0gZnVuY3Rpb24oZmllbGRzKSB7Ci0gICAgZm9yKHZhciBmaWVsZCBpbiBmaWVsZHMp
IHsKLSAgICAgICAgaWYgKHRoaXMuaGFzT3duUHJvcGVydHkoZmllbGQpKQotICAgICAgICAgIHRo
aXNbZmllbGRdID0gZmllbGRzW2ZpZWxkXTsKLSAgICB9Ci0gIH07Ci0KLSAgSW1hZ2VDYXB0dXJl
X1Rha2VQaG90b19QYXJhbXMudmFsaWRhdGUgPSBmdW5jdGlvbihtZXNzYWdlVmFsaWRhdG9yLCBv
ZmZzZXQpIHsKLSAgICB2YXIgZXJyOwotICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRh
dGVTdHJ1Y3RIZWFkZXIob2Zmc2V0LCBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSk7Ci0gICAgaWYg
KGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQotICAgICAgICByZXR1cm4g
ZXJyOwotCi0gICAgdmFyIGtWZXJzaW9uU2l6ZXMgPSBbCi0gICAgICB7dmVyc2lvbjogMCwgbnVt
Qnl0ZXM6IDE2fQotICAgIF07Ci0gICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0
cnVjdFZlcnNpb24ob2Zmc2V0LCBrVmVyc2lvblNpemVzKTsKLSAgICBpZiAoZXJyICE9PSB2YWxp
ZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCi0gICAgICAgIHJldHVybiBlcnI7Ci0KLQotICAg
IC8vIHZhbGlkYXRlIEltYWdlQ2FwdHVyZV9UYWtlUGhvdG9fUGFyYW1zLnNvdXJjZUlkCi0gICAg
ZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cmluZ1BvaW50ZXIob2Zmc2V0ICsgY29k
ZWMua1N0cnVjdEhlYWRlclNpemUgKyAwLCBmYWxzZSkKLSAgICBpZiAoZXJyICE9PSB2YWxpZGF0
b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCi0gICAgICAgIHJldHVybiBlcnI7Ci0KLSAgICByZXR1
cm4gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FOwotICB9OwotCi0gIEltYWdlQ2FwdHVy
ZV9UYWtlUGhvdG9fUGFyYW1zLmVuY29kZWRTaXplID0gY29kZWMua1N0cnVjdEhlYWRlclNpemUg
KyA4OwotCi0gIEltYWdlQ2FwdHVyZV9UYWtlUGhvdG9fUGFyYW1zLmRlY29kZSA9IGZ1bmN0aW9u
KGRlY29kZXIpIHsKLSAgICB2YXIgcGFja2VkOwotICAgIHZhciB2YWwgPSBuZXcgSW1hZ2VDYXB0
dXJlX1Rha2VQaG90b19QYXJhbXMoKTsKLSAgICB2YXIgbnVtYmVyT2ZCeXRlcyA9IGRlY29kZXIu
cmVhZFVpbnQzMigpOwotICAgIHZhciB2ZXJzaW9uID0gZGVjb2Rlci5yZWFkVWludDMyKCk7Ci0g
ICAgdmFsLnNvdXJjZUlkID0gZGVjb2Rlci5kZWNvZGVTdHJ1Y3QoY29kZWMuU3RyaW5nKTsKLSAg
ICByZXR1cm4gdmFsOwotICB9OwotCi0gIEltYWdlQ2FwdHVyZV9UYWtlUGhvdG9fUGFyYW1zLmVu
Y29kZSA9IGZ1bmN0aW9uKGVuY29kZXIsIHZhbCkgewotICAgIHZhciBwYWNrZWQ7Ci0gICAgZW5j
b2Rlci53cml0ZVVpbnQzMihJbWFnZUNhcHR1cmVfVGFrZVBob3RvX1BhcmFtcy5lbmNvZGVkU2l6
ZSk7Ci0gICAgZW5jb2Rlci53cml0ZVVpbnQzMigwKTsKLSAgICBlbmNvZGVyLmVuY29kZVN0cnVj
dChjb2RlYy5TdHJpbmcsIHZhbC5zb3VyY2VJZCk7Ci0gIH07Ci0gIGZ1bmN0aW9uIEltYWdlQ2Fw
dHVyZV9UYWtlUGhvdG9fUmVzcG9uc2VQYXJhbXModmFsdWVzKSB7Ci0gICAgdGhpcy5pbml0RGVm
YXVsdHNfKCk7Ci0gICAgdGhpcy5pbml0RmllbGRzXyh2YWx1ZXMpOwotICB9Ci0KLQotICBJbWFn
ZUNhcHR1cmVfVGFrZVBob3RvX1Jlc3BvbnNlUGFyYW1zLnByb3RvdHlwZS5pbml0RGVmYXVsdHNf
ID0gZnVuY3Rpb24oKSB7Ci0gICAgdGhpcy5ibG9iID0gbnVsbDsKLSAgfTsKLSAgSW1hZ2VDYXB0
dXJlX1Rha2VQaG90b19SZXNwb25zZVBhcmFtcy5wcm90b3R5cGUuaW5pdEZpZWxkc18gPSBmdW5j
dGlvbihmaWVsZHMpIHsKLSAgICBmb3IodmFyIGZpZWxkIGluIGZpZWxkcykgewotICAgICAgICBp
ZiAodGhpcy5oYXNPd25Qcm9wZXJ0eShmaWVsZCkpCi0gICAgICAgICAgdGhpc1tmaWVsZF0gPSBm
aWVsZHNbZmllbGRdOwotICAgIH0KLSAgfTsKLQotICBJbWFnZUNhcHR1cmVfVGFrZVBob3RvX1Jl
c3BvbnNlUGFyYW1zLnZhbGlkYXRlID0gZnVuY3Rpb24obWVzc2FnZVZhbGlkYXRvciwgb2Zmc2V0
KSB7Ci0gICAgdmFyIGVycjsKLSAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3Ry
dWN0SGVhZGVyKG9mZnNldCwgY29kZWMua1N0cnVjdEhlYWRlclNpemUpOwotICAgIGlmIChlcnIg
IT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKLSAgICAgICAgcmV0dXJuIGVycjsK
LQotICAgIHZhciBrVmVyc2lvblNpemVzID0gWwotICAgICAge3ZlcnNpb246IDAsIG51bUJ5dGVz
OiAxNn0KLSAgICBdOwotICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RW
ZXJzaW9uKG9mZnNldCwga1ZlcnNpb25TaXplcyk7Ci0gICAgaWYgKGVyciAhPT0gdmFsaWRhdG9y
LnZhbGlkYXRpb25FcnJvci5OT05FKQotICAgICAgICByZXR1cm4gZXJyOwotCi0KLSAgICAvLyB2
YWxpZGF0ZSBJbWFnZUNhcHR1cmVfVGFrZVBob3RvX1Jlc3BvbnNlUGFyYW1zLmJsb2IKLSAgICBl
cnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0UG9pbnRlcihvZmZzZXQgKyBjb2Rl
Yy5rU3RydWN0SGVhZGVyU2l6ZSArIDAsIEJsb2IsIGZhbHNlKTsKLSAgICBpZiAoZXJyICE9PSB2
YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCi0gICAgICAgIHJldHVybiBlcnI7Ci0KLSAg
ICByZXR1cm4gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FOwotICB9OwotCi0gIEltYWdl
Q2FwdHVyZV9UYWtlUGhvdG9fUmVzcG9uc2VQYXJhbXMuZW5jb2RlZFNpemUgPSBjb2RlYy5rU3Ry
dWN0SGVhZGVyU2l6ZSArIDg7Ci0KLSAgSW1hZ2VDYXB0dXJlX1Rha2VQaG90b19SZXNwb25zZVBh
cmFtcy5kZWNvZGUgPSBmdW5jdGlvbihkZWNvZGVyKSB7Ci0gICAgdmFyIHBhY2tlZDsKLSAgICB2
YXIgdmFsID0gbmV3IEltYWdlQ2FwdHVyZV9UYWtlUGhvdG9fUmVzcG9uc2VQYXJhbXMoKTsKLSAg
ICB2YXIgbnVtYmVyT2ZCeXRlcyA9IGRlY29kZXIucmVhZFVpbnQzMigpOwotICAgIHZhciB2ZXJz
aW9uID0gZGVjb2Rlci5yZWFkVWludDMyKCk7Ci0gICAgdmFsLmJsb2IgPSBkZWNvZGVyLmRlY29k
ZVN0cnVjdFBvaW50ZXIoQmxvYik7Ci0gICAgcmV0dXJuIHZhbDsKLSAgfTsKLQotICBJbWFnZUNh
cHR1cmVfVGFrZVBob3RvX1Jlc3BvbnNlUGFyYW1zLmVuY29kZSA9IGZ1bmN0aW9uKGVuY29kZXIs
IHZhbCkgewotICAgIHZhciBwYWNrZWQ7Ci0gICAgZW5jb2Rlci53cml0ZVVpbnQzMihJbWFnZUNh
cHR1cmVfVGFrZVBob3RvX1Jlc3BvbnNlUGFyYW1zLmVuY29kZWRTaXplKTsKLSAgICBlbmNvZGVy
LndyaXRlVWludDMyKDApOwotICAgIGVuY29kZXIuZW5jb2RlU3RydWN0UG9pbnRlcihCbG9iLCB2
YWwuYmxvYik7Ci0gIH07Ci0gIHZhciBrSW1hZ2VDYXB0dXJlX0dldFBob3RvU3RhdGVfTmFtZSA9
IDA7Ci0gIHZhciBrSW1hZ2VDYXB0dXJlX1NldE9wdGlvbnNfTmFtZSA9IDE7Ci0gIHZhciBrSW1h
Z2VDYXB0dXJlX1Rha2VQaG90b19OYW1lID0gMjsKLQotICBmdW5jdGlvbiBJbWFnZUNhcHR1cmVQ
dHIoaGFuZGxlT3JQdHJJbmZvKSB7Ci0gICAgdGhpcy5wdHIgPSBuZXcgYmluZGluZ3MuSW50ZXJm
YWNlUHRyQ29udHJvbGxlcihJbWFnZUNhcHR1cmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVPclB0ckluZm8pOwotICB9Ci0KLSAgZnVu
Y3Rpb24gSW1hZ2VDYXB0dXJlQXNzb2NpYXRlZFB0cihhc3NvY2lhdGVkSW50ZXJmYWNlUHRySW5m
bykgewotICAgIHRoaXMucHRyID0gbmV3IGFzc29jaWF0ZWRCaW5kaW5ncy5Bc3NvY2lhdGVkSW50
ZXJmYWNlUHRyQ29udHJvbGxlcigKLSAgICAgICAgSW1hZ2VDYXB0dXJlLCBhc3NvY2lhdGVkSW50
ZXJmYWNlUHRySW5mbyk7Ci0gIH0KLQotICBJbWFnZUNhcHR1cmVBc3NvY2lhdGVkUHRyLnByb3Rv
dHlwZSA9Ci0gICAgICBPYmplY3QuY3JlYXRlKEltYWdlQ2FwdHVyZVB0ci5wcm90b3R5cGUpOwot
ICBJbWFnZUNhcHR1cmVBc3NvY2lhdGVkUHRyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9Ci0gICAg
ICBJbWFnZUNhcHR1cmVBc3NvY2lhdGVkUHRyOwotCi0gIGZ1bmN0aW9uIEltYWdlQ2FwdHVyZVBy
b3h5KHJlY2VpdmVyKSB7Ci0gICAgdGhpcy5yZWNlaXZlcl8gPSByZWNlaXZlcjsKLSAgfQotICBJ
bWFnZUNhcHR1cmVQdHIucHJvdG90eXBlLmdldFBob3RvU3RhdGUgPSBmdW5jdGlvbigpIHsKLSAg
ICByZXR1cm4gSW1hZ2VDYXB0dXJlUHJveHkucHJvdG90eXBlLmdldFBob3RvU3RhdGUKLSAgICAg
ICAgLmFwcGx5KHRoaXMucHRyLmdldFByb3h5KCksIGFyZ3VtZW50cyk7Ci0gIH07Ci0KLSAgSW1h
Z2VDYXB0dXJlUHJveHkucHJvdG90eXBlLmdldFBob3RvU3RhdGUgPSBmdW5jdGlvbihzb3VyY2VJ
ZCkgewotICAgIHZhciBwYXJhbXNfID0gbmV3IEltYWdlQ2FwdHVyZV9HZXRQaG90b1N0YXRlX1Bh
cmFtcygpOwotICAgIHBhcmFtc18uc291cmNlSWQgPSBzb3VyY2VJZDsKLSAgICByZXR1cm4gbmV3
IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7Ci0gICAgICB2YXIgYnVpbGRlciA9
IG5ldyBjb2RlYy5NZXNzYWdlVjFCdWlsZGVyKAotICAgICAgICAgIGtJbWFnZUNhcHR1cmVfR2V0
UGhvdG9TdGF0ZV9OYW1lLAotICAgICAgICAgIGNvZGVjLmFsaWduKEltYWdlQ2FwdHVyZV9HZXRQ
aG90b1N0YXRlX1BhcmFtcy5lbmNvZGVkU2l6ZSksCi0gICAgICAgICAgY29kZWMua01lc3NhZ2VF
eHBlY3RzUmVzcG9uc2UsIDApOwotICAgICAgYnVpbGRlci5lbmNvZGVTdHJ1Y3QoSW1hZ2VDYXB0
dXJlX0dldFBob3RvU3RhdGVfUGFyYW1zLCBwYXJhbXNfKTsKLSAgICAgIHZhciBtZXNzYWdlID0g
YnVpbGRlci5maW5pc2goKTsKLSAgICAgIHRoaXMucmVjZWl2ZXJfLmFjY2VwdEFuZEV4cGVjdFJl
c3BvbnNlKG1lc3NhZ2UpLnRoZW4oZnVuY3Rpb24obWVzc2FnZSkgewotICAgICAgICB2YXIgcmVh
ZGVyID0gbmV3IGNvZGVjLk1lc3NhZ2VSZWFkZXIobWVzc2FnZSk7Ci0gICAgICAgIHZhciByZXNw
b25zZVBhcmFtcyA9Ci0gICAgICAgICAgICByZWFkZXIuZGVjb2RlU3RydWN0KEltYWdlQ2FwdHVy
ZV9HZXRQaG90b1N0YXRlX1Jlc3BvbnNlUGFyYW1zKTsKLSAgICAgICAgcmVzb2x2ZShyZXNwb25z
ZVBhcmFtcyk7Ci0gICAgICB9KS5jYXRjaChmdW5jdGlvbihyZXN1bHQpIHsKLSAgICAgICAgcmVq
ZWN0KEVycm9yKCJDb25uZWN0aW9uIGVycm9yOiAiICsgcmVzdWx0KSk7Ci0gICAgICB9KTsKLSAg
ICB9LmJpbmQodGhpcykpOwotICB9OwotICBJbWFnZUNhcHR1cmVQdHIucHJvdG90eXBlLnNldE9w
dGlvbnMgPSBmdW5jdGlvbigpIHsKLSAgICByZXR1cm4gSW1hZ2VDYXB0dXJlUHJveHkucHJvdG90
eXBlLnNldE9wdGlvbnMKLSAgICAgICAgLmFwcGx5KHRoaXMucHRyLmdldFByb3h5KCksIGFyZ3Vt
ZW50cyk7Ci0gIH07Ci0KLSAgSW1hZ2VDYXB0dXJlUHJveHkucHJvdG90eXBlLnNldE9wdGlvbnMg
PSBmdW5jdGlvbihzb3VyY2VJZCwgc2V0dGluZ3MpIHsKLSAgICB2YXIgcGFyYW1zXyA9IG5ldyBJ
bWFnZUNhcHR1cmVfU2V0T3B0aW9uc19QYXJhbXMoKTsKLSAgICBwYXJhbXNfLnNvdXJjZUlkID0g
c291cmNlSWQ7Ci0gICAgcGFyYW1zXy5zZXR0aW5ncyA9IHNldHRpbmdzOwotICAgIHJldHVybiBu
ZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3QpIHsKLSAgICAgIHZhciBidWlsZGVy
ID0gbmV3IGNvZGVjLk1lc3NhZ2VWMUJ1aWxkZXIoCi0gICAgICAgICAga0ltYWdlQ2FwdHVyZV9T
ZXRPcHRpb25zX05hbWUsCi0gICAgICAgICAgY29kZWMuYWxpZ24oSW1hZ2VDYXB0dXJlX1NldE9w
dGlvbnNfUGFyYW1zLmVuY29kZWRTaXplKSwKLSAgICAgICAgICBjb2RlYy5rTWVzc2FnZUV4cGVj
dHNSZXNwb25zZSwgMCk7Ci0gICAgICBidWlsZGVyLmVuY29kZVN0cnVjdChJbWFnZUNhcHR1cmVf
U2V0T3B0aW9uc19QYXJhbXMsIHBhcmFtc18pOwotICAgICAgdmFyIG1lc3NhZ2UgPSBidWlsZGVy
LmZpbmlzaCgpOwotICAgICAgdGhpcy5yZWNlaXZlcl8uYWNjZXB0QW5kRXhwZWN0UmVzcG9uc2Uo
bWVzc2FnZSkudGhlbihmdW5jdGlvbihtZXNzYWdlKSB7Ci0gICAgICAgIHZhciByZWFkZXIgPSBu
ZXcgY29kZWMuTWVzc2FnZVJlYWRlcihtZXNzYWdlKTsKLSAgICAgICAgdmFyIHJlc3BvbnNlUGFy
YW1zID0KLSAgICAgICAgICAgIHJlYWRlci5kZWNvZGVTdHJ1Y3QoSW1hZ2VDYXB0dXJlX1NldE9w
dGlvbnNfUmVzcG9uc2VQYXJhbXMpOwotICAgICAgICByZXNvbHZlKHJlc3BvbnNlUGFyYW1zKTsK
LSAgICAgIH0pLmNhdGNoKGZ1bmN0aW9uKHJlc3VsdCkgewotICAgICAgICByZWplY3QoRXJyb3Io
IkNvbm5lY3Rpb24gZXJyb3I6ICIgKyByZXN1bHQpKTsKLSAgICAgIH0pOwotICAgIH0uYmluZCh0
aGlzKSk7Ci0gIH07Ci0gIEltYWdlQ2FwdHVyZVB0ci5wcm90b3R5cGUudGFrZVBob3RvID0gZnVu
Y3Rpb24oKSB7Ci0gICAgcmV0dXJuIEltYWdlQ2FwdHVyZVByb3h5LnByb3RvdHlwZS50YWtlUGhv
dG8KLSAgICAgICAgLmFwcGx5KHRoaXMucHRyLmdldFByb3h5KCksIGFyZ3VtZW50cyk7Ci0gIH07
Ci0KLSAgSW1hZ2VDYXB0dXJlUHJveHkucHJvdG90eXBlLnRha2VQaG90byA9IGZ1bmN0aW9uKHNv
dXJjZUlkKSB7Ci0gICAgdmFyIHBhcmFtc18gPSBuZXcgSW1hZ2VDYXB0dXJlX1Rha2VQaG90b19Q
YXJhbXMoKTsKLSAgICBwYXJhbXNfLnNvdXJjZUlkID0gc291cmNlSWQ7Ci0gICAgcmV0dXJuIG5l
dyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkgewotICAgICAgdmFyIGJ1aWxkZXIg
PSBuZXcgY29kZWMuTWVzc2FnZVYxQnVpbGRlcigKLSAgICAgICAgICBrSW1hZ2VDYXB0dXJlX1Rh
a2VQaG90b19OYW1lLAotICAgICAgICAgIGNvZGVjLmFsaWduKEltYWdlQ2FwdHVyZV9UYWtlUGhv
dG9fUGFyYW1zLmVuY29kZWRTaXplKSwKLSAgICAgICAgICBjb2RlYy5rTWVzc2FnZUV4cGVjdHNS
ZXNwb25zZSwgMCk7Ci0gICAgICBidWlsZGVyLmVuY29kZVN0cnVjdChJbWFnZUNhcHR1cmVfVGFr
ZVBob3RvX1BhcmFtcywgcGFyYW1zXyk7Ci0gICAgICB2YXIgbWVzc2FnZSA9IGJ1aWxkZXIuZmlu
aXNoKCk7Ci0gICAgICB0aGlzLnJlY2VpdmVyXy5hY2NlcHRBbmRFeHBlY3RSZXNwb25zZShtZXNz
YWdlKS50aGVuKGZ1bmN0aW9uKG1lc3NhZ2UpIHsKLSAgICAgICAgdmFyIHJlYWRlciA9IG5ldyBj
b2RlYy5NZXNzYWdlUmVhZGVyKG1lc3NhZ2UpOwotICAgICAgICB2YXIgcmVzcG9uc2VQYXJhbXMg
PQotICAgICAgICAgICAgcmVhZGVyLmRlY29kZVN0cnVjdChJbWFnZUNhcHR1cmVfVGFrZVBob3Rv
X1Jlc3BvbnNlUGFyYW1zKTsKLSAgICAgICAgcmVzb2x2ZShyZXNwb25zZVBhcmFtcyk7Ci0gICAg
ICB9KS5jYXRjaChmdW5jdGlvbihyZXN1bHQpIHsKLSAgICAgICAgcmVqZWN0KEVycm9yKCJDb25u
ZWN0aW9uIGVycm9yOiAiICsgcmVzdWx0KSk7Ci0gICAgICB9KTsKLSAgICB9LmJpbmQodGhpcykp
OwotICB9OwotCi0gIGZ1bmN0aW9uIEltYWdlQ2FwdHVyZVN0dWIoZGVsZWdhdGUpIHsKLSAgICB0
aGlzLmRlbGVnYXRlXyA9IGRlbGVnYXRlOwotICB9Ci0gIEltYWdlQ2FwdHVyZVN0dWIucHJvdG90
eXBlLmdldFBob3RvU3RhdGUgPSBmdW5jdGlvbihzb3VyY2VJZCkgewotICAgIHJldHVybiB0aGlz
LmRlbGVnYXRlXyAmJiB0aGlzLmRlbGVnYXRlXy5nZXRQaG90b1N0YXRlICYmIHRoaXMuZGVsZWdh
dGVfLmdldFBob3RvU3RhdGUoc291cmNlSWQpOwotICB9Ci0gIEltYWdlQ2FwdHVyZVN0dWIucHJv
dG90eXBlLnNldE9wdGlvbnMgPSBmdW5jdGlvbihzb3VyY2VJZCwgc2V0dGluZ3MpIHsKLSAgICBy
ZXR1cm4gdGhpcy5kZWxlZ2F0ZV8gJiYgdGhpcy5kZWxlZ2F0ZV8uc2V0T3B0aW9ucyAmJiB0aGlz
LmRlbGVnYXRlXy5zZXRPcHRpb25zKHNvdXJjZUlkLCBzZXR0aW5ncyk7Ci0gIH0KLSAgSW1hZ2VD
YXB0dXJlU3R1Yi5wcm90b3R5cGUudGFrZVBob3RvID0gZnVuY3Rpb24oc291cmNlSWQpIHsKLSAg
ICByZXR1cm4gdGhpcy5kZWxlZ2F0ZV8gJiYgdGhpcy5kZWxlZ2F0ZV8udGFrZVBob3RvICYmIHRo
aXMuZGVsZWdhdGVfLnRha2VQaG90byhzb3VyY2VJZCk7Ci0gIH0KLQotICBJbWFnZUNhcHR1cmVT
dHViLnByb3RvdHlwZS5hY2NlcHQgPSBmdW5jdGlvbihtZXNzYWdlKSB7Ci0gICAgdmFyIHJlYWRl
ciA9IG5ldyBjb2RlYy5NZXNzYWdlUmVhZGVyKG1lc3NhZ2UpOwotICAgIHN3aXRjaCAocmVhZGVy
Lm1lc3NhZ2VOYW1lKSB7Ci0gICAgZGVmYXVsdDoKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9
Ci0gIH07Ci0KLSAgSW1hZ2VDYXB0dXJlU3R1Yi5wcm90b3R5cGUuYWNjZXB0V2l0aFJlc3BvbmRl
ciA9Ci0gICAgICBmdW5jdGlvbihtZXNzYWdlLCByZXNwb25kZXIpIHsKLSAgICB2YXIgcmVhZGVy
ID0gbmV3IGNvZGVjLk1lc3NhZ2VSZWFkZXIobWVzc2FnZSk7Ci0gICAgc3dpdGNoIChyZWFkZXIu
bWVzc2FnZU5hbWUpIHsKLSAgICBjYXNlIGtJbWFnZUNhcHR1cmVfR2V0UGhvdG9TdGF0ZV9OYW1l
OgotICAgICAgdmFyIHBhcmFtcyA9IHJlYWRlci5kZWNvZGVTdHJ1Y3QoSW1hZ2VDYXB0dXJlX0dl
dFBob3RvU3RhdGVfUGFyYW1zKTsKLSAgICAgIHRoaXMuZ2V0UGhvdG9TdGF0ZShwYXJhbXMuc291
cmNlSWQpLnRoZW4oZnVuY3Rpb24ocmVzcG9uc2UpIHsKLSAgICAgICAgdmFyIHJlc3BvbnNlUGFy
YW1zID0KLSAgICAgICAgICAgIG5ldyBJbWFnZUNhcHR1cmVfR2V0UGhvdG9TdGF0ZV9SZXNwb25z
ZVBhcmFtcygpOwotICAgICAgICByZXNwb25zZVBhcmFtcy5zdGF0ZSA9IHJlc3BvbnNlLnN0YXRl
OwotICAgICAgICB2YXIgYnVpbGRlciA9IG5ldyBjb2RlYy5NZXNzYWdlVjFCdWlsZGVyKAotICAg
ICAgICAgICAga0ltYWdlQ2FwdHVyZV9HZXRQaG90b1N0YXRlX05hbWUsCi0gICAgICAgICAgICBj
b2RlYy5hbGlnbihJbWFnZUNhcHR1cmVfR2V0UGhvdG9TdGF0ZV9SZXNwb25zZVBhcmFtcy5lbmNv
ZGVkU2l6ZSksCi0gICAgICAgICAgICBjb2RlYy5rTWVzc2FnZUlzUmVzcG9uc2UsIHJlYWRlci5y
ZXF1ZXN0SUQpOwotICAgICAgICBidWlsZGVyLmVuY29kZVN0cnVjdChJbWFnZUNhcHR1cmVfR2V0
UGhvdG9TdGF0ZV9SZXNwb25zZVBhcmFtcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
cmVzcG9uc2VQYXJhbXMpOwotICAgICAgICB2YXIgbWVzc2FnZSA9IGJ1aWxkZXIuZmluaXNoKCk7
Ci0gICAgICAgIHJlc3BvbmRlci5hY2NlcHQobWVzc2FnZSk7Ci0gICAgICB9KTsKLSAgICAgIHJl
dHVybiB0cnVlOwotICAgIGNhc2Uga0ltYWdlQ2FwdHVyZV9TZXRPcHRpb25zX05hbWU6Ci0gICAg
ICB2YXIgcGFyYW1zID0gcmVhZGVyLmRlY29kZVN0cnVjdChJbWFnZUNhcHR1cmVfU2V0T3B0aW9u
c19QYXJhbXMpOwotICAgICAgdGhpcy5zZXRPcHRpb25zKHBhcmFtcy5zb3VyY2VJZCwgcGFyYW1z
LnNldHRpbmdzKS50aGVuKGZ1bmN0aW9uKHJlc3BvbnNlKSB7Ci0gICAgICAgIHZhciByZXNwb25z
ZVBhcmFtcyA9Ci0gICAgICAgICAgICBuZXcgSW1hZ2VDYXB0dXJlX1NldE9wdGlvbnNfUmVzcG9u
c2VQYXJhbXMoKTsKLSAgICAgICAgcmVzcG9uc2VQYXJhbXMuc3VjY2VzcyA9IHJlc3BvbnNlLnN1
Y2Nlc3M7Ci0gICAgICAgIHZhciBidWlsZGVyID0gbmV3IGNvZGVjLk1lc3NhZ2VWMUJ1aWxkZXIo
Ci0gICAgICAgICAgICBrSW1hZ2VDYXB0dXJlX1NldE9wdGlvbnNfTmFtZSwKLSAgICAgICAgICAg
IGNvZGVjLmFsaWduKEltYWdlQ2FwdHVyZV9TZXRPcHRpb25zX1Jlc3BvbnNlUGFyYW1zLmVuY29k
ZWRTaXplKSwKLSAgICAgICAgICAgIGNvZGVjLmtNZXNzYWdlSXNSZXNwb25zZSwgcmVhZGVyLnJl
cXVlc3RJRCk7Ci0gICAgICAgIGJ1aWxkZXIuZW5jb2RlU3RydWN0KEltYWdlQ2FwdHVyZV9TZXRP
cHRpb25zX1Jlc3BvbnNlUGFyYW1zLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNw
b25zZVBhcmFtcyk7Ci0gICAgICAgIHZhciBtZXNzYWdlID0gYnVpbGRlci5maW5pc2goKTsKLSAg
ICAgICAgcmVzcG9uZGVyLmFjY2VwdChtZXNzYWdlKTsKLSAgICAgIH0pOwotICAgICAgcmV0dXJu
IHRydWU7Ci0gICAgY2FzZSBrSW1hZ2VDYXB0dXJlX1Rha2VQaG90b19OYW1lOgotICAgICAgdmFy
IHBhcmFtcyA9IHJlYWRlci5kZWNvZGVTdHJ1Y3QoSW1hZ2VDYXB0dXJlX1Rha2VQaG90b19QYXJh
bXMpOwotICAgICAgdGhpcy50YWtlUGhvdG8ocGFyYW1zLnNvdXJjZUlkKS50aGVuKGZ1bmN0aW9u
KHJlc3BvbnNlKSB7Ci0gICAgICAgIHZhciByZXNwb25zZVBhcmFtcyA9Ci0gICAgICAgICAgICBu
ZXcgSW1hZ2VDYXB0dXJlX1Rha2VQaG90b19SZXNwb25zZVBhcmFtcygpOwotICAgICAgICByZXNw
b25zZVBhcmFtcy5ibG9iID0gcmVzcG9uc2UuYmxvYjsKLSAgICAgICAgdmFyIGJ1aWxkZXIgPSBu
ZXcgY29kZWMuTWVzc2FnZVYxQnVpbGRlcigKLSAgICAgICAgICAgIGtJbWFnZUNhcHR1cmVfVGFr
ZVBob3RvX05hbWUsCi0gICAgICAgICAgICBjb2RlYy5hbGlnbihJbWFnZUNhcHR1cmVfVGFrZVBo
b3RvX1Jlc3BvbnNlUGFyYW1zLmVuY29kZWRTaXplKSwKLSAgICAgICAgICAgIGNvZGVjLmtNZXNz
YWdlSXNSZXNwb25zZSwgcmVhZGVyLnJlcXVlc3RJRCk7Ci0gICAgICAgIGJ1aWxkZXIuZW5jb2Rl
U3RydWN0KEltYWdlQ2FwdHVyZV9UYWtlUGhvdG9fUmVzcG9uc2VQYXJhbXMsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlUGFyYW1zKTsKLSAgICAgICAgdmFyIG1lc3NhZ2Ug
PSBidWlsZGVyLmZpbmlzaCgpOwotICAgICAgICByZXNwb25kZXIuYWNjZXB0KG1lc3NhZ2UpOwot
ICAgICAgfSk7Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICBkZWZhdWx0OgotICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIH0KLSAgfTsKLQotICBmdW5jdGlvbiB2YWxpZGF0ZUltYWdlQ2FwdHVyZVJl
cXVlc3QobWVzc2FnZVZhbGlkYXRvcikgewotICAgIHZhciBtZXNzYWdlID0gbWVzc2FnZVZhbGlk
YXRvci5tZXNzYWdlOwotICAgIHZhciBwYXJhbXNDbGFzcyA9IG51bGw7Ci0gICAgc3dpdGNoICht
ZXNzYWdlLmdldE5hbWUoKSkgewotICAgICAgY2FzZSBrSW1hZ2VDYXB0dXJlX0dldFBob3RvU3Rh
dGVfTmFtZToKLSAgICAgICAgaWYgKG1lc3NhZ2UuZXhwZWN0c1Jlc3BvbnNlKCkpCi0gICAgICAg
ICAgcGFyYW1zQ2xhc3MgPSBJbWFnZUNhcHR1cmVfR2V0UGhvdG9TdGF0ZV9QYXJhbXM7Ci0gICAg
ICBicmVhazsKLSAgICAgIGNhc2Uga0ltYWdlQ2FwdHVyZV9TZXRPcHRpb25zX05hbWU6Ci0gICAg
ICAgIGlmIChtZXNzYWdlLmV4cGVjdHNSZXNwb25zZSgpKQotICAgICAgICAgIHBhcmFtc0NsYXNz
ID0gSW1hZ2VDYXB0dXJlX1NldE9wdGlvbnNfUGFyYW1zOwotICAgICAgYnJlYWs7Ci0gICAgICBj
YXNlIGtJbWFnZUNhcHR1cmVfVGFrZVBob3RvX05hbWU6Ci0gICAgICAgIGlmIChtZXNzYWdlLmV4
cGVjdHNSZXNwb25zZSgpKQotICAgICAgICAgIHBhcmFtc0NsYXNzID0gSW1hZ2VDYXB0dXJlX1Rh
a2VQaG90b19QYXJhbXM7Ci0gICAgICBicmVhazsKLSAgICB9Ci0gICAgaWYgKHBhcmFtc0NsYXNz
ID09PSBudWxsKQotICAgICAgcmV0dXJuIHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORTsK
LSAgICByZXR1cm4gcGFyYW1zQ2xhc3MudmFsaWRhdGUobWVzc2FnZVZhbGlkYXRvciwgbWVzc2Fn
ZVZhbGlkYXRvci5tZXNzYWdlLmdldEhlYWRlck51bUJ5dGVzKCkpOwotICB9Ci0KLSAgZnVuY3Rp
b24gdmFsaWRhdGVJbWFnZUNhcHR1cmVSZXNwb25zZShtZXNzYWdlVmFsaWRhdG9yKSB7Ci0gICB2
YXIgbWVzc2FnZSA9IG1lc3NhZ2VWYWxpZGF0b3IubWVzc2FnZTsKLSAgIHZhciBwYXJhbXNDbGFz
cyA9IG51bGw7Ci0gICBzd2l0Y2ggKG1lc3NhZ2UuZ2V0TmFtZSgpKSB7Ci0gICAgICBjYXNlIGtJ
bWFnZUNhcHR1cmVfR2V0UGhvdG9TdGF0ZV9OYW1lOgotICAgICAgICBpZiAobWVzc2FnZS5pc1Jl
c3BvbnNlKCkpCi0gICAgICAgICAgcGFyYW1zQ2xhc3MgPSBJbWFnZUNhcHR1cmVfR2V0UGhvdG9T
dGF0ZV9SZXNwb25zZVBhcmFtczsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIGtJbWFnZUNh
cHR1cmVfU2V0T3B0aW9uc19OYW1lOgotICAgICAgICBpZiAobWVzc2FnZS5pc1Jlc3BvbnNlKCkp
Ci0gICAgICAgICAgcGFyYW1zQ2xhc3MgPSBJbWFnZUNhcHR1cmVfU2V0T3B0aW9uc19SZXNwb25z
ZVBhcmFtczsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIGtJbWFnZUNhcHR1cmVfVGFrZVBo
b3RvX05hbWU6Ci0gICAgICAgIGlmIChtZXNzYWdlLmlzUmVzcG9uc2UoKSkKLSAgICAgICAgICBw
YXJhbXNDbGFzcyA9IEltYWdlQ2FwdHVyZV9UYWtlUGhvdG9fUmVzcG9uc2VQYXJhbXM7Ci0gICAg
ICAgIGJyZWFrOwotICAgIH0KLSAgICBpZiAocGFyYW1zQ2xhc3MgPT09IG51bGwpCi0gICAgICBy
ZXR1cm4gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FOwotICAgIHJldHVybiBwYXJhbXND
bGFzcy52YWxpZGF0ZShtZXNzYWdlVmFsaWRhdG9yLCBtZXNzYWdlVmFsaWRhdG9yLm1lc3NhZ2Uu
Z2V0SGVhZGVyTnVtQnl0ZXMoKSk7Ci0gIH0KLQotICB2YXIgSW1hZ2VDYXB0dXJlID0gewotICAg
IG5hbWU6ICdtZWRpYS5tb2pvbS5JbWFnZUNhcHR1cmUnLAotICAgIGtWZXJzaW9uOiAwLAotICAg
IHB0ckNsYXNzOiBJbWFnZUNhcHR1cmVQdHIsCi0gICAgcHJveHlDbGFzczogSW1hZ2VDYXB0dXJl
UHJveHksCi0gICAgc3R1YkNsYXNzOiBJbWFnZUNhcHR1cmVTdHViLAotICAgIHZhbGlkYXRlUmVx
dWVzdDogdmFsaWRhdGVJbWFnZUNhcHR1cmVSZXF1ZXN0LAotICAgIHZhbGlkYXRlUmVzcG9uc2U6
IHZhbGlkYXRlSW1hZ2VDYXB0dXJlUmVzcG9uc2UsCi0gIH07Ci0gIEltYWdlQ2FwdHVyZVN0dWIu
cHJvdG90eXBlLnZhbGlkYXRvciA9IHZhbGlkYXRlSW1hZ2VDYXB0dXJlUmVxdWVzdDsKLSAgSW1h
Z2VDYXB0dXJlUHJveHkucHJvdG90eXBlLnZhbGlkYXRvciA9IHZhbGlkYXRlSW1hZ2VDYXB0dXJl
UmVzcG9uc2U7Ci0gIGV4cG9ydHMuTWV0ZXJpbmdNb2RlID0gTWV0ZXJpbmdNb2RlOwotICBleHBv
cnRzLlJlZEV5ZVJlZHVjdGlvbiA9IFJlZEV5ZVJlZHVjdGlvbjsKLSAgZXhwb3J0cy5GaWxsTGln
aHRNb2RlID0gRmlsbExpZ2h0TW9kZTsKLSAgZXhwb3J0cy5SYW5nZSA9IFJhbmdlOwotICBleHBv
cnRzLlBob3RvU3RhdGUgPSBQaG90b1N0YXRlOwotICBleHBvcnRzLlBvaW50MkQgPSBQb2ludDJE
OwotICBleHBvcnRzLlBob3RvU2V0dGluZ3MgPSBQaG90b1NldHRpbmdzOwotICBleHBvcnRzLkJs
b2IgPSBCbG9iOwotICBleHBvcnRzLkltYWdlQ2FwdHVyZSA9IEltYWdlQ2FwdHVyZTsKLSAgZXhw
b3J0cy5JbWFnZUNhcHR1cmVQdHIgPSBJbWFnZUNhcHR1cmVQdHI7Ci0gIGV4cG9ydHMuSW1hZ2VD
YXB0dXJlQXNzb2NpYXRlZFB0ciA9IEltYWdlQ2FwdHVyZUFzc29jaWF0ZWRQdHI7Ci19KSgpOwpc
IE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2ltcG9y
dGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL21vY2stYmFyY29k
ZWRldGVjdGlvbi5qcyBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVz
dHMvcmVzb3VyY2VzL2Nocm9taXVtL21vY2stYmFyY29kZWRldGVjdGlvbi5qcwpkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggYzExZjg3OWI1YjZlMGNlNDNiZmZlZjdmOGY1Y2FiZTZmYmE1
MTYzMi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9MYXlv
dXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1
bS9tb2NrLWJhcmNvZGVkZXRlY3Rpb24uanMKKysrIC9kZXYvbnVsbApAQCAtMSwxMzUgKzAsMCBA
QAotInVzZSBzdHJpY3QiOwotCi12YXIgQmFyY29kZURldGVjdGlvblRlc3QgPSAoKCkgPT4gewot
ICAvLyBDbGFzcyB0aGF0IG1vY2tzIEJhcmNvZGVEZXRlY3Rpb25Qcm92aWRlciBpbnRlcmZhY2Ug
ZGVmaW5lZCBpbgotICAvLyBodHRwczovL2NzLmNocm9taXVtLm9yZy9jaHJvbWl1bS9zcmMvc2Vy
dmljZXMvc2hhcGVfZGV0ZWN0aW9uL3B1YmxpYy9tb2pvbS9iYXJjb2RlZGV0ZWN0aW9uX3Byb3Zp
ZGVyLm1vam9tCi0gIGNsYXNzIE1vY2tCYXJjb2RlRGV0ZWN0aW9uUHJvdmlkZXIgewotICAgIGNv
bnN0cnVjdG9yKCkgewotICAgICAgdGhpcy5iaW5kaW5nU2V0XyA9IG5ldyBtb2pvLkJpbmRpbmdT
ZXQoCi0gICAgICAgICAgc2hhcGVEZXRlY3Rpb24ubW9qb20uQmFyY29kZURldGVjdGlvblByb3Zp
ZGVyKTsKLQotICAgICAgdGhpcy5pbnRlcmNlcHRvcl8gPSBuZXcgTW9qb0ludGVyZmFjZUludGVy
Y2VwdG9yKAotICAgICAgICAgIHNoYXBlRGV0ZWN0aW9uLm1vam9tLkJhcmNvZGVEZXRlY3Rpb25Q
cm92aWRlci5uYW1lKTsKLSAgICAgIHRoaXMuaW50ZXJjZXB0b3JfLm9uaW50ZXJmYWNlcmVxdWVz
dCA9IGUgPT4gewotICAgICAgICBpZiAodGhpcy5zaG91bGRfY2xvc2VfcGlwZV9vbl9yZXF1ZXN0
XykKLSAgICAgICAgICBlLmhhbmRsZS5jbG9zZSgpOwotICAgICAgICBlbHNlCi0gICAgICAgICAg
dGhpcy5iaW5kaW5nU2V0Xy5hZGRCaW5kaW5nKHRoaXMsIGUuaGFuZGxlKTsKLSAgICAgIH0KLSAg
ICAgIHRoaXMuaW50ZXJjZXB0b3JfLnN0YXJ0KCk7Ci0gICAgICB0aGlzLnNob3VsZF9jbG9zZV9w
aXBlX29uX3JlcXVlc3RfID0gZmFsc2U7Ci0gICAgfQotCi0gICAgY3JlYXRlQmFyY29kZURldGVj
dGlvbihyZXF1ZXN0LCBvcHRpb25zKSB7Ci0gICAgICB0aGlzLm1vY2tTZXJ2aWNlXyA9IG5ldyBN
b2NrQmFyY29kZURldGVjdGlvbihyZXF1ZXN0LCBvcHRpb25zKTsKLSAgICB9Ci0KLSAgICBlbnVt
ZXJhdGVTdXBwb3J0ZWRGb3JtYXRzKCkgewotICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh7
Ci0gICAgICAgIHN1cHBvcnRlZEZvcm1hdHM6IFsKLSAgICAgICAgICBzaGFwZURldGVjdGlvbi5t
b2pvbS5CYXJjb2RlRm9ybWF0LkFaVEVDLAotICAgICAgICAgIHNoYXBlRGV0ZWN0aW9uLm1vam9t
LkJhcmNvZGVGb3JtYXQuREFUQV9NQVRSSVgsCi0gICAgICAgICAgc2hhcGVEZXRlY3Rpb24ubW9q
b20uQmFyY29kZUZvcm1hdC5RUl9DT0RFLAotICAgICAgICBdCi0gICAgICB9KTsKLSAgICB9Ci0K
LSAgICBnZXRGcmFtZURhdGEoKSB7Ci0gICAgICByZXR1cm4gdGhpcy5tb2NrU2VydmljZV8uYnVm
ZmVyRGF0YV87Ci0gICAgfQotCi0gICAgZ2V0Rm9ybWF0cygpIHsKLSAgICAgcmV0dXJuIHRoaXMu
bW9ja1NlcnZpY2VfLm9wdGlvbnNfLmZvcm1hdHM7Ci0gICAgfQotCi0gICAgcmVzZXQoKSB7Ci0g
ICAgICB0aGlzLm1vY2tTZXJ2aWNlXyA9IG51bGw7Ci0gICAgICB0aGlzLnNob3VsZF9jbG9zZV9w
aXBlX29uX3JlcXVlc3RfID0gZmFsc2U7Ci0gICAgICB0aGlzLmJpbmRpbmdTZXRfLmNsb3NlQWxs
QmluZGluZ3MoKTsKLSAgICAgIHRoaXMuaW50ZXJjZXB0b3JfLnN0b3AoKTsKLSAgICB9Ci0KLSAg
ICAvLyBzaW11bGF0ZSBhICdubyBpbXBsZW1lbnRhdGlvbiBhdmFpbGFibGUnIGNhc2UKLSAgICBz
aW11bGF0ZU5vSW1wbGVtZW50YXRpb24oKSB7Ci0gICAgICB0aGlzLnNob3VsZF9jbG9zZV9waXBl
X29uX3JlcXVlc3RfID0gdHJ1ZTsKLSAgICB9Ci0gIH0KLQotICAvLyBDbGFzcyB0aGF0IG1vY2tz
IEJhcmNvZGVEZXRlY3Rpb24gaW50ZXJmYWNlIGRlZmluZWQgaW4KLSAgLy8gaHR0cHM6Ly9jcy5j
aHJvbWl1bS5vcmcvY2hyb21pdW0vc3JjL3NlcnZpY2VzL3NoYXBlX2RldGVjdGlvbi9wdWJsaWMv
bW9qb20vYmFyY29kZWRldGVjdGlvbi5tb2pvbQotICBjbGFzcyBNb2NrQmFyY29kZURldGVjdGlv
biB7Ci0gICAgY29uc3RydWN0b3IocmVxdWVzdCwgb3B0aW9ucykgewotICAgICAgdGhpcy5vcHRp
b25zXyA9IG9wdGlvbnM7Ci0gICAgICB0aGlzLmJpbmRpbmdfID0KLSAgICAgICAgICBuZXcgbW9q
by5CaW5kaW5nKHNoYXBlRGV0ZWN0aW9uLm1vam9tLkJhcmNvZGVEZXRlY3Rpb24sCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICB0aGlzLCByZXF1ZXN0KTsKLSAgICB9Ci0KLSAgICBkZXRlY3Qo
Yml0bWFwRGF0YSkgewotICAgICAgdGhpcy5idWZmZXJEYXRhXyA9Ci0gICAgICAgICAgbmV3IFVp
bnQzMkFycmF5KGdldEFycmF5QnVmZmVyRnJvbUJpZ0J1ZmZlcihiaXRtYXBEYXRhLnBpeGVsRGF0
YSkpOwotICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh7Ci0gICAgICAgIHJlc3VsdHM6IFsK
LSAgICAgICAgICB7Ci0gICAgICAgICAgICByYXdWYWx1ZSA6ICJjYXRzIiwKLSAgICAgICAgICAg
IGJvdW5kaW5nQm94OiB7IHg6IDEuMCwgeTogMS4wLCB3aWR0aDogMTAwLjAsIGhlaWdodDogMTAw
LjAgfSwKLSAgICAgICAgICAgIGZvcm1hdDogc2hhcGVEZXRlY3Rpb24ubW9qb20uQmFyY29kZUZv
cm1hdC5RUl9DT0RFLAotICAgICAgICAgICAgY29ybmVyUG9pbnRzOiBbCi0gICAgICAgICAgICAg
IHsgeDogMS4wLCB5OiAxLjAgfSwKLSAgICAgICAgICAgICAgeyB4OiAxMDEuMCwgeTogMS4wIH0s
Ci0gICAgICAgICAgICAgIHsgeDogMTAxLjAsIHk6IDEwMS4wIH0sCi0gICAgICAgICAgICAgIHsg
eDogMS4wLCB5OiAxMDEuMCB9Ci0gICAgICAgICAgICBdLAotICAgICAgICAgIH0sCi0gICAgICAg
ICAgewotICAgICAgICAgICAgcmF3VmFsdWUgOiAiZG9ncyIsCi0gICAgICAgICAgICBib3VuZGlu
Z0JveDogeyB4OiAyLjAsIHk6IDIuMCwgd2lkdGg6IDUwLjAsIGhlaWdodDogNTAuMCB9LAotICAg
ICAgICAgICAgZm9ybWF0OiBzaGFwZURldGVjdGlvbi5tb2pvbS5CYXJjb2RlRm9ybWF0LkNPREVf
MTI4LAotICAgICAgICAgICAgY29ybmVyUG9pbnRzOiBbCi0gICAgICAgICAgICAgIHsgeDogMi4w
LCB5OiAyLjAgfSwKLSAgICAgICAgICAgICAgeyB4OiA1Mi4wLCB5OiAyLjAgfSwKLSAgICAgICAg
ICAgICAgeyB4OiA1Mi4wLCB5OiA1Mi4wIH0sCi0gICAgICAgICAgICAgIHsgeDogMi4wLCB5OiA1
Mi4wIH0KLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgfSwKLSAgICAgICAgXSwKLSAgICAgIH0p
OwotICAgIH0KLSAgfQotCi0gIGxldCB0ZXN0SW50ZXJuYWwgPSB7Ci0gICAgaW5pdGlhbGl6ZWQ6
IGZhbHNlLAotICAgIE1vY2tCYXJjb2RlRGV0ZWN0aW9uUHJvdmlkZXI6IG51bGwKLSAgfQotCi0g
IGNsYXNzIEJhcmNvZGVEZXRlY3Rpb25UZXN0Q2hyb21pdW0gewotICAgIGNvbnN0cnVjdG9yKCkg
ewotICAgICAgT2JqZWN0LmZyZWV6ZSh0aGlzKTsgLy8gTWFrZSBpdCBpbW11dGFibGUuCi0gICAg
fQotCi0gICAgaW5pdGlhbGl6ZSgpIHsKLSAgICAgIGlmICh0ZXN0SW50ZXJuYWwuaW5pdGlhbGl6
ZWQpCi0gICAgICAgIHRocm93IG5ldyBFcnJvcignQ2FsbCByZXNldCgpIGJlZm9yZSBpbml0aWFs
aXplKCkuJyk7Ci0KLSAgICAgIHRlc3RJbnRlcm5hbC5Nb2NrQmFyY29kZURldGVjdGlvblByb3Zp
ZGVyID0gbmV3IE1vY2tCYXJjb2RlRGV0ZWN0aW9uUHJvdmlkZXI7Ci0gICAgICB0ZXN0SW50ZXJu
YWwuaW5pdGlhbGl6ZWQgPSB0cnVlOwotICAgIH0KLQotICAgIC8vIFJlc2V0cyBzdGF0ZSBvZiBi
YXJjb2RlIGRldGVjdGlvbiBtb2NrcyBiZXR3ZWVuIHRlc3QgcnVucy4KLSAgICBhc3luYyByZXNl
dCgpIHsKLSAgICAgIGlmICghdGVzdEludGVybmFsLmluaXRpYWxpemVkKQotICAgICAgICB0aHJv
dyBuZXcgRXJyb3IoJ0NhbGwgaW5pdGlhbGl6ZSgpIGJlZm9yZSByZXNldCgpLicpOwotICAgICAg
dGVzdEludGVybmFsLk1vY2tCYXJjb2RlRGV0ZWN0aW9uUHJvdmlkZXIucmVzZXQoKTsKLSAgICAg
IHRlc3RJbnRlcm5hbC5Nb2NrQmFyY29kZURldGVjdGlvblByb3ZpZGVyID0gbnVsbDsKLSAgICAg
IHRlc3RJbnRlcm5hbC5pbml0aWFsaXplZCA9IGZhbHNlOwotCi0gICAgICBhd2FpdCBuZXcgUHJv
bWlzZShyZXNvbHZlID0+IHNldFRpbWVvdXQocmVzb2x2ZSwgMCkpOwotICAgIH0KLQotICAgIE1v
Y2tCYXJjb2RlRGV0ZWN0aW9uUHJvdmlkZXIoKSB7Ci0gICAgICByZXR1cm4gdGVzdEludGVybmFs
Lk1vY2tCYXJjb2RlRGV0ZWN0aW9uUHJvdmlkZXI7Ci0gICAgfQotICB9Ci0KLSAgcmV0dXJuIEJh
cmNvZGVEZXRlY3Rpb25UZXN0Q2hyb21pdW07Ci19KSgpOwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVz
dHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vbW9j
ay1iYXJjb2RlZGV0ZWN0aW9uLmpzLmhlYWRlcnMgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mv
d2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS9tb2NrLWJhcmNvZGVkZXRlY3Rp
b24uanMuaGVhZGVycwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmM2MWEzNGE0ZWMy
ZTc1MDk2ZGIwZWI5Zjc3NDhiMTQyZjBkYjdiYi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMAotLS0gYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3Jt
LXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS9tb2NrLWJhcmNvZGVkZXRlY3Rpb24uanMuaGVhZGVy
cworKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLUNvbnRlbnQtVHlwZTogdGV4dC9qYXZhc2Ny
aXB0OyBjaGFyc2V0PXV0Zi04ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0
IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMv
Y2hyb21pdW0vbW9jay1mYWNlZGV0ZWN0aW9uLmpzIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNj
L3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vbW9jay1mYWNlZGV0ZWN0aW9u
LmpzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMjc1ZTRkZDJmNWUyNDk4OGU3MjNh
NzI4ZGJmNWJiNGFjYzRjNmNiLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwCi0tLSBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVz
b3VyY2VzL2Nocm9taXVtL21vY2stZmFjZWRldGVjdGlvbi5qcworKysgL2Rldi9udWxsCkBAIC0x
LDEzMSArMCwwIEBACi0idXNlIHN0cmljdCI7Ci0KLXZhciBGYWNlRGV0ZWN0aW9uVGVzdCA9ICgo
KSA9PiB7Ci0gIC8vIENsYXNzIHRoYXQgbW9ja3MgRmFjZURldGVjdGlvblByb3ZpZGVyIGludGVy
ZmFjZSBkZWZpbmVkIGluCi0gIC8vIGh0dHBzOi8vY3MuY2hyb21pdW0ub3JnL2Nocm9taXVtL3Ny
Yy9zZXJ2aWNlcy9zaGFwZV9kZXRlY3Rpb24vcHVibGljL21vam9tL2ZhY2VkZXRlY3Rpb25fcHJv
dmlkZXIubW9qb20KLSAgY2xhc3MgTW9ja0ZhY2VEZXRlY3Rpb25Qcm92aWRlciB7Ci0gICAgY29u
c3RydWN0b3IoKSB7Ci0gICAgICB0aGlzLmJpbmRpbmdTZXRfID0gbmV3IG1vam8uQmluZGluZ1Nl
dCgKLSAgICAgICAgc2hhcGVEZXRlY3Rpb24ubW9qb20uRmFjZURldGVjdGlvblByb3ZpZGVyKTsK
LQotICAgICAgdGhpcy5pbnRlcmNlcHRvcl8gPSBuZXcgTW9qb0ludGVyZmFjZUludGVyY2VwdG9y
KAotICAgICAgICAgIHNoYXBlRGV0ZWN0aW9uLm1vam9tLkZhY2VEZXRlY3Rpb25Qcm92aWRlci5u
YW1lKTsKLSAgICAgIHRoaXMuaW50ZXJjZXB0b3JfLm9uaW50ZXJmYWNlcmVxdWVzdCA9Ci0gICAg
ICAgICBlID0+IHRoaXMuYmluZGluZ1NldF8uYWRkQmluZGluZyh0aGlzLCBlLmhhbmRsZSk7Ci0g
ICAgICB0aGlzLmludGVyY2VwdG9yXy5zdGFydCgpOwotICAgIH0KLQotICAgIGNyZWF0ZUZhY2VE
ZXRlY3Rpb24ocmVxdWVzdCwgb3B0aW9ucykgewotICAgICAgdGhpcy5tb2NrU2VydmljZV8gPSBu
ZXcgTW9ja0ZhY2VEZXRlY3Rpb24ocmVxdWVzdCwgb3B0aW9ucyk7Ci0gICAgfQotCi0gICAgZ2V0
RnJhbWVEYXRhKCkgewotICAgICAgcmV0dXJuIHRoaXMubW9ja1NlcnZpY2VfLmJ1ZmZlckRhdGFf
OwotICAgIH0KLQotICAgIGdldE1heERldGVjdGVkRmFjZXMoKSB7Ci0gICAgIHJldHVybiB0aGlz
Lm1vY2tTZXJ2aWNlXy5tYXhEZXRlY3RlZEZhY2VzXzsKLSAgICB9Ci0KLSAgICBnZXRGYXN0TW9k
ZSAoKSB7Ci0gICAgICByZXR1cm4gdGhpcy5tb2NrU2VydmljZV8uZmFzdE1vZGVfOwotICAgIH0K
LQotICAgIHJlc2V0KCkgewotICAgICAgdGhpcy5tb2NrU2VydmljZV8gPSBudWxsOwotICAgICAg
dGhpcy5iaW5kaW5nU2V0Xy5jbG9zZUFsbEJpbmRpbmdzKCk7Ci0gICAgICB0aGlzLmludGVyY2Vw
dG9yXy5zdG9wKCk7Ci0gICAgfQotICB9Ci0KLSAgLy8gQ2xhc3MgdGhhdCBtb2NrcyBGYWNlRGV0
ZWN0aW9uIGludGVyZmFjZSBkZWZpbmVkIGluCi0gIC8vIGh0dHBzOi8vY3MuY2hyb21pdW0ub3Jn
L2Nocm9taXVtL3NyYy9zZXJ2aWNlcy9zaGFwZV9kZXRlY3Rpb24vcHVibGljL21vam9tL2ZhY2Vk
ZXRlY3Rpb24ubW9qb20KLSAgY2xhc3MgTW9ja0ZhY2VEZXRlY3Rpb24gewotICAgIGNvbnN0cnVj
dG9yKHJlcXVlc3QsIG9wdGlvbnMpIHsKLSAgICAgIHRoaXMubWF4RGV0ZWN0ZWRGYWNlc18gPSBv
cHRpb25zLm1heERldGVjdGVkRmFjZXM7Ci0gICAgICB0aGlzLmZhc3RNb2RlXyA9IG9wdGlvbnMu
ZmFzdE1vZGU7Ci0gICAgICB0aGlzLmJpbmRpbmdfID0KLSAgICAgICAgICBuZXcgbW9qby5CaW5k
aW5nKHNoYXBlRGV0ZWN0aW9uLm1vam9tLkZhY2VEZXRlY3Rpb24sCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICB0aGlzLCByZXF1ZXN0KTsKLSAgICB9Ci0KLSAgICBkZXRlY3QoYml0bWFwRGF0
YSkgewotICAgICAgdGhpcy5idWZmZXJEYXRhXyA9Ci0gICAgICAgICAgbmV3IFVpbnQzMkFycmF5
KGdldEFycmF5QnVmZmVyRnJvbUJpZ0J1ZmZlcihiaXRtYXBEYXRhLnBpeGVsRGF0YSkpOwotICAg
ICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh7Ci0gICAgICAgIHJlc3VsdHM6IFsKLSAgICAgICAg
ICB7Ci0gICAgICAgICAgICBib3VuZGluZ0JveDoge3g6IDEuMCwgeTogMS4wLCB3aWR0aDogMTAw
LjAsIGhlaWdodDogMTAwLjB9LAotICAgICAgICAgICAgbGFuZG1hcmtzOiBbewotICAgICAgICAg
ICAgICB0eXBlOiBzaGFwZURldGVjdGlvbi5tb2pvbS5MYW5kbWFya1R5cGUuRVlFLAotICAgICAg
ICAgICAgICBsb2NhdGlvbnM6IFt7eDogNC4wLCB5OiA1LjB9XQotICAgICAgICAgICAgfSwKLSAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgdHlwZTogc2hhcGVEZXRlY3Rpb24ubW9qb20uTGFu
ZG1hcmtUeXBlLkVZRSwKLSAgICAgICAgICAgICAgbG9jYXRpb25zOiBbCi0gICAgICAgICAgICAg
ICAge3g6IDQuMCwgeTogNS4wfSwge3g6IDUuMCwgeTogNC4wfSwge3g6IDYuMCwgeTogMy4wfSwK
LSAgICAgICAgICAgICAgICB7eDogNy4wLCB5OiA0LjB9LCB7eDogOC4wLCB5OiA1LjB9LCB7eDog
Ny4wLCB5OiA2LjB9LAotICAgICAgICAgICAgICAgIHt4OiA2LjAsIHk6IDcuMH0sIHt4OiA1LjAs
IHk6IDYuMH0KLSAgICAgICAgICAgICAgXQotICAgICAgICAgICAgfV0KLSAgICAgICAgICB9LAot
ICAgICAgICAgIHsKLSAgICAgICAgICAgIGJvdW5kaW5nQm94OiB7eDogMi4wLCB5OiAyLjAsIHdp
ZHRoOiAyMDAuMCwgaGVpZ2h0OiAyMDAuMH0sCi0gICAgICAgICAgICBsYW5kbWFya3M6IFt7Ci0g
ICAgICAgICAgICAgIHR5cGU6IHNoYXBlRGV0ZWN0aW9uLm1vam9tLkxhbmRtYXJrVHlwZS5OT1NF
LAotICAgICAgICAgICAgICBsb2NhdGlvbnM6IFt7eDogMTAwLjAsIHk6IDUwLjB9XQotICAgICAg
ICAgICAgfSwKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgdHlwZTogc2hhcGVEZXRlY3Rp
b24ubW9qb20uTGFuZG1hcmtUeXBlLk5PU0UsCi0gICAgICAgICAgICAgIGxvY2F0aW9uczogWwot
ICAgICAgICAgICAgICAgIHt4OiA4MC4wLCB5OiA1MC4wfSwge3g6IDcwLjAsIHk6IDYwLjB9LCB7
eDogNjAuMCwgeTogNzAuMH0sCi0gICAgICAgICAgICAgICAge3g6IDcwLjAsIHk6IDYwLjB9LCB7
eDogODAuMCwgeTogNzAuMH0sIHt4OiA5MC4wLCB5OiA4MC4wfSwKLSAgICAgICAgICAgICAgICB7
eDogMTAwLjAsIHk6IDcwLjB9LCB7eDogOTAuMCwgeTogNjAuMH0sIHt4OiA4MC4wLCB5OiA1MC4w
fQotICAgICAgICAgICAgICBdCi0gICAgICAgICAgICB9XQotICAgICAgICAgIH0sCi0gICAgICAg
ICAgewotICAgICAgICAgICAgYm91bmRpbmdCb3g6IHt4OiAzLjAsIHk6IDMuMCwgd2lkdGg6IDMw
MC4wLCBoZWlnaHQ6IDMwMC4wfSwKLSAgICAgICAgICAgIGxhbmRtYXJrczogW10KLSAgICAgICAg
ICB9LAotICAgICAgICBdCi0gICAgICB9KTsKLSAgICB9Ci0gIH0KLQotICBsZXQgdGVzdEludGVy
bmFsID0gewotICAgIGluaXRpYWxpemVkOiBmYWxzZSwKLSAgICBNb2NrRmFjZURldGVjdGlvblBy
b3ZpZGVyOiBudWxsCi0gIH0KLQotICBjbGFzcyBGYWNlRGV0ZWN0aW9uVGVzdENocm9taXVtIHsK
LSAgICBjb25zdHJ1Y3RvcigpIHsKLSAgICAgIE9iamVjdC5mcmVlemUodGhpcyk7IC8vIE1ha2Ug
aXQgaW1tdXRhYmxlLgotICAgIH0KLQotICAgIGluaXRpYWxpemUoKSB7Ci0gICAgICBpZiAodGVz
dEludGVybmFsLmluaXRpYWxpemVkKQotICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0NhbGwgcmVz
ZXQoKSBiZWZvcmUgaW5pdGlhbGl6ZSgpLicpOwotCi0gICAgICB0ZXN0SW50ZXJuYWwuTW9ja0Zh
Y2VEZXRlY3Rpb25Qcm92aWRlciA9IG5ldyBNb2NrRmFjZURldGVjdGlvblByb3ZpZGVyOwotICAg
ICAgdGVzdEludGVybmFsLmluaXRpYWxpemVkID0gdHJ1ZTsKLSAgICB9Ci0KLSAgICAvLyBSZXNl
dHMgc3RhdGUgb2YgZmFjZSBkZXRlY3Rpb24gbW9ja3MgYmV0d2VlbiB0ZXN0IHJ1bnMuCi0gICAg
YXN5bmMgcmVzZXQoKSB7Ci0gICAgICBpZiAoIXRlc3RJbnRlcm5hbC5pbml0aWFsaXplZCkKLSAg
ICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYWxsIGluaXRpYWxpemUoKSBiZWZvcmUgcmVzZXQoKS4n
KTsKLSAgICAgIHRlc3RJbnRlcm5hbC5Nb2NrRmFjZURldGVjdGlvblByb3ZpZGVyLnJlc2V0KCk7
Ci0gICAgICB0ZXN0SW50ZXJuYWwuTW9ja0ZhY2VEZXRlY3Rpb25Qcm92aWRlciA9IG51bGw7Ci0g
ICAgICB0ZXN0SW50ZXJuYWwuaW5pdGlhbGl6ZWQgPSBmYWxzZTsKLQotICAgICAgYXdhaXQgbmV3
IFByb21pc2UocmVzb2x2ZSA9PiBzZXRUaW1lb3V0KHJlc29sdmUsIDApKTsKLSAgICB9Ci0KLSAg
ICBNb2NrRmFjZURldGVjdGlvblByb3ZpZGVyKCkgewotICAgICAgcmV0dXJuIHRlc3RJbnRlcm5h
bC5Nb2NrRmFjZURldGVjdGlvblByb3ZpZGVyOwotICAgIH0KLSAgfQotCi0gIHJldHVybiBGYWNl
RGV0ZWN0aW9uVGVzdENocm9taXVtOwotfSkoKTsKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2lt
cG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL21vY2stZmFj
ZWRldGVjdGlvbi5qcy5oZWFkZXJzIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0
Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vbW9jay1mYWNlZGV0ZWN0aW9uLmpzLmhlYWRl
cnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZjNjFhMzRhNGVjMmU3NTA5NmRiMGVi
OWY3NzQ4YjE0MmYwZGI3YmIuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAKLS0tIGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNv
dXJjZXMvY2hyb21pdW0vbW9jay1mYWNlZGV0ZWN0aW9uLmpzLmhlYWRlcnMKKysrIC9kZXYvbnVs
bApAQCAtMSArMCwwIEBACi1Db250ZW50LVR5cGU6IHRleHQvamF2YXNjcmlwdDsgY2hhcnNldD11
dGYtOApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL0xheW91dFRlc3Rz
L2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL21vY2st
aW1hZ2VjYXB0dXJlLmpzIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10
ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vbW9jay1pbWFnZWNhcHR1cmUuanMKZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IGNlMmI5NjgzOTEzNDMzMzlhOTk1ODEwMGY1NjRmYTczZDVjMDE1
MDkuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvTGF5b3V0
VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0v
bW9jay1pbWFnZWNhcHR1cmUuanMKKysrIC9kZXYvbnVsbApAQCAtMSwyNjUgKzAsMCBAQAotInVz
ZSBzdHJpY3QiOwotCi12YXIgSW1hZ2VDYXB0dXJlVGVzdCA9ICgoKSA9PiB7Ci0gIC8vIENsYXNz
IHRoYXQgbW9ja3MgSW1hZ2VDYXB0dXJlIGludGVyZmFjZSBkZWZpbmVkIGluCi0gIC8vIGh0dHBz
Oi8vY3MuY2hyb21pdW0ub3JnL2Nocm9taXVtL3NyYy9tZWRpYS9jYXB0dXJlL21vam9tL2ltYWdl
X2NhcHR1cmUubW9qb20KLSAgY2xhc3MgTW9ja0ltYWdlQ2FwdHVyZSB7Ci0gICAgY29uc3RydWN0
b3IoKSB7Ci0gICAgICB0aGlzLmludGVyY2VwdG9yXyA9Ci0gICAgICAgICAgbmV3IE1vam9JbnRl
cmZhY2VJbnRlcmNlcHRvcihtZWRpYS5tb2pvbS5JbWFnZUNhcHR1cmUubmFtZSk7Ci0gICAgICB0
aGlzLmludGVyY2VwdG9yXy5vbmludGVyZmFjZXJlcXVlc3QgPQotICAgICAgICBlID0+IHRoaXMu
YmluZGluZ1NldF8uYWRkQmluZGluZyh0aGlzLCBlLmhhbmRsZSk7Ci0gICAgICB0aGlzLmludGVy
Y2VwdG9yXy5zdGFydCgpOwotCi0gICAgICB0aGlzLnN0YXRlXyA9IHsKLSAgICAgICAgc3RhdGU6
IHsKLSAgICAgICAgICBzdXBwb3J0ZWRXaGl0ZUJhbGFuY2VNb2RlczogWwotICAgICAgICAgICAg
bWVkaWEubW9qb20uTWV0ZXJpbmdNb2RlLlNJTkdMRV9TSE9ULAotICAgICAgICAgICAgbWVkaWEu
bW9qb20uTWV0ZXJpbmdNb2RlLkNPTlRJTlVPVVMKLSAgICAgICAgICBdLAotICAgICAgICAgIGN1
cnJlbnRXaGl0ZUJhbGFuY2VNb2RlOiBtZWRpYS5tb2pvbS5NZXRlcmluZ01vZGUuQ09OVElOVU9V
UywKLSAgICAgICAgICBzdXBwb3J0ZWRFeHBvc3VyZU1vZGVzOiBbCi0gICAgICAgICAgICBtZWRp
YS5tb2pvbS5NZXRlcmluZ01vZGUuTUFOVUFMLAotICAgICAgICAgICAgbWVkaWEubW9qb20uTWV0
ZXJpbmdNb2RlLlNJTkdMRV9TSE9ULAotICAgICAgICAgICAgbWVkaWEubW9qb20uTWV0ZXJpbmdN
b2RlLkNPTlRJTlVPVVMKLSAgICAgICAgICBdLAotICAgICAgICAgIGN1cnJlbnRFeHBvc3VyZU1v
ZGU6IG1lZGlhLm1vam9tLk1ldGVyaW5nTW9kZS5NQU5VQUwsCi0gICAgICAgICAgc3VwcG9ydGVk
Rm9jdXNNb2RlczogWwotICAgICAgICAgICAgbWVkaWEubW9qb20uTWV0ZXJpbmdNb2RlLk1BTlVB
TCwKLSAgICAgICAgICAgIG1lZGlhLm1vam9tLk1ldGVyaW5nTW9kZS5TSU5HTEVfU0hPVAotICAg
ICAgICAgIF0sCi0gICAgICAgICAgY3VycmVudEZvY3VzTW9kZTogbWVkaWEubW9qb20uTWV0ZXJp
bmdNb2RlLk1BTlVBTCwKLSAgICAgICAgICBwb2ludHNPZkludGVyZXN0OiBbewotICAgICAgICAg
ICAgeDogMC40LAotICAgICAgICAgICAgeTogMC42Ci0gICAgICAgICAgfV0sCi0KLSAgICAgICAg
ICBleHBvc3VyZUNvbXBlbnNhdGlvbjogewotICAgICAgICAgICAgbWluOiAtMjAwLjAsCi0gICAg
ICAgICAgICBtYXg6IDIwMC4wLAotICAgICAgICAgICAgY3VycmVudDogMzMuMCwKLSAgICAgICAg
ICAgIHN0ZXA6IDMzLjAKLSAgICAgICAgICB9LAotICAgICAgICAgIGV4cG9zdXJlVGltZTogewot
ICAgICAgICAgICAgbWluOiAxMDAuMCwKLSAgICAgICAgICAgIG1heDogMTAwMDAwLjAsCi0gICAg
ICAgICAgICBjdXJyZW50OiAxMDAwLjAsCi0gICAgICAgICAgICBzdGVwOiAxMDAuMAotICAgICAg
ICAgIH0sCi0gICAgICAgICAgY29sb3JUZW1wZXJhdHVyZTogewotICAgICAgICAgICAgbWluOiAy
NTAwLjAsCi0gICAgICAgICAgICBtYXg6IDY1MDAuMCwKLSAgICAgICAgICAgIGN1cnJlbnQ6IDYw
MDAuMCwKLSAgICAgICAgICAgIHN0ZXA6IDEwMDAuMAotICAgICAgICAgIH0sCi0gICAgICAgICAg
aXNvOiB7Ci0gICAgICAgICAgICBtaW46IDEwMC4wLAotICAgICAgICAgICAgbWF4OiAxMjAwMC4w
LAotICAgICAgICAgICAgY3VycmVudDogNDAwLjAsCi0gICAgICAgICAgICBzdGVwOiAxLjAKLSAg
ICAgICAgICB9LAotCi0gICAgICAgICAgYnJpZ2h0bmVzczogewotICAgICAgICAgICAgbWluOiAx
LjAsCi0gICAgICAgICAgICBtYXg6IDEwLjAsCi0gICAgICAgICAgICBjdXJyZW50OiA1LjAsCi0g
ICAgICAgICAgICBzdGVwOiAxLjAKLSAgICAgICAgICB9LAotICAgICAgICAgIGNvbnRyYXN0OiB7
Ci0gICAgICAgICAgICBtaW46IDIuMCwKLSAgICAgICAgICAgIG1heDogOS4wLAotICAgICAgICAg
ICAgY3VycmVudDogNS4wLAotICAgICAgICAgICAgc3RlcDogMS4wCi0gICAgICAgICAgfSwKLSAg
ICAgICAgICBzYXR1cmF0aW9uOiB7Ci0gICAgICAgICAgICBtaW46IDMuMCwKLSAgICAgICAgICAg
IG1heDogOC4wLAotICAgICAgICAgICAgY3VycmVudDogNi4wLAotICAgICAgICAgICAgc3RlcDog
MS4wCi0gICAgICAgICAgfSwKLSAgICAgICAgICBzaGFycG5lc3M6IHsKLSAgICAgICAgICAgIG1p
bjogNC4wLAotICAgICAgICAgICAgbWF4OiA3LjAsCi0gICAgICAgICAgICBjdXJyZW50OiA3LjAs
Ci0gICAgICAgICAgICBzdGVwOiAxLjAKLSAgICAgICAgICB9LAotCi0gICAgICAgICAgZm9jdXNE
aXN0YW5jZTogewotICAgICAgICAgICAgbWluOiAxLjAsCi0gICAgICAgICAgICBtYXg6IDEwLjAs
Ci0gICAgICAgICAgICBjdXJyZW50OiAzLjAsCi0gICAgICAgICAgICBzdGVwOiAxLjAKLSAgICAg
ICAgICB9LAotCi0gICAgICAgICAgcGFuOiB7Ci0gICAgICAgICAgICBtaW46IDAuMCwKLSAgICAg
ICAgICAgIG1heDogMTAuMCwKLSAgICAgICAgICAgIGN1cnJlbnQ6IDUuMCwKLSAgICAgICAgICAg
IHN0ZXA6IDIuMAotICAgICAgICAgIH0sCi0KLSAgICAgICAgICB0aWx0OiB7Ci0gICAgICAgICAg
ICBtaW46IDAuMCwKLSAgICAgICAgICAgIG1heDogMTAuMCwKLSAgICAgICAgICAgIGN1cnJlbnQ6
IDUuMCwKLSAgICAgICAgICAgIHN0ZXA6IDIuMAotICAgICAgICAgIH0sCi0KLSAgICAgICAgICB6
b29tOiB7Ci0gICAgICAgICAgICBtaW46IDAuMCwKLSAgICAgICAgICAgIG1heDogMTAuMCwKLSAg
ICAgICAgICAgIGN1cnJlbnQ6IDUuMCwKLSAgICAgICAgICAgIHN0ZXA6IDUuMAotICAgICAgICAg
IH0sCi0KLSAgICAgICAgICBzdXBwb3J0c1RvcmNoOiB0cnVlLAotICAgICAgICAgIHRvcmNoOiBm
YWxzZSwKLQotICAgICAgICAgIHJlZEV5ZVJlZHVjdGlvbjogbWVkaWEubW9qb20uUmVkRXllUmVk
dWN0aW9uLkNPTlRST0xMQUJMRSwKLSAgICAgICAgICBoZWlnaHQ6IHsKLSAgICAgICAgICAgIG1p
bjogMjQwLjAsCi0gICAgICAgICAgICBtYXg6IDI0NDguMCwKLSAgICAgICAgICAgIGN1cnJlbnQ6
IDI0MC4wLAotICAgICAgICAgICAgc3RlcDogMi4wCi0gICAgICAgICAgfSwKLSAgICAgICAgICB3
aWR0aDogewotICAgICAgICAgICAgbWluOiAzMjAuMCwKLSAgICAgICAgICAgIG1heDogMzI2NC4w
LAotICAgICAgICAgICAgY3VycmVudDogMzIwLjAsCi0gICAgICAgICAgICBzdGVwOiAzLjAKLSAg
ICAgICAgICB9LAotICAgICAgICAgIGZpbGxMaWdodE1vZGU6IFsKLSAgICAgICAgICAgIG1lZGlh
Lm1vam9tLkZpbGxMaWdodE1vZGUuQVVUTywgbWVkaWEubW9qb20uRmlsbExpZ2h0TW9kZS5GTEFT
SAotICAgICAgICAgIF0sCi0gICAgICAgIH0KLSAgICAgIH07Ci0gICAgICB0aGlzLnNldHRpbmdz
XyA9IG51bGw7Ci0gICAgICB0aGlzLmJpbmRpbmdTZXRfID0gbmV3IG1vam8uQmluZGluZ1NldCht
ZWRpYS5tb2pvbS5JbWFnZUNhcHR1cmUpOwotICAgIH0KLQotICAgIHJlc2V0KCkgewotICAgICAg
dGhpcy5iaW5kaW5nU2V0Xy5jbG9zZUFsbEJpbmRpbmdzKCk7Ci0gICAgICB0aGlzLmludGVyY2Vw
dG9yXy5zdG9wKCk7Ci0gICAgfQotCi0gICAgZ2V0UGhvdG9TdGF0ZShzb3VyY2VfaWQpIHsKLSAg
ICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodGhpcy5zdGF0ZV8pOwotICAgIH0KLQotICAgIHNl
dE9wdGlvbnMoc291cmNlX2lkLCBzZXR0aW5ncykgewotICAgICAgdGhpcy5zZXR0aW5nc18gPSBz
ZXR0aW5nczsKLSAgICAgIGlmIChzZXR0aW5ncy5oYXNJc28pCi0gICAgICAgIHRoaXMuc3RhdGVf
LnN0YXRlLmlzby5jdXJyZW50ID0gc2V0dGluZ3MuaXNvOwotICAgICAgaWYgKHNldHRpbmdzLmhh
c0hlaWdodCkKLSAgICAgICAgdGhpcy5zdGF0ZV8uc3RhdGUuaGVpZ2h0LmN1cnJlbnQgPSBzZXR0
aW5ncy5oZWlnaHQ7Ci0gICAgICBpZiAoc2V0dGluZ3MuaGFzV2lkdGgpCi0gICAgICAgIHRoaXMu
c3RhdGVfLnN0YXRlLndpZHRoLmN1cnJlbnQgPSBzZXR0aW5ncy53aWR0aDsKLSAgICAgIGlmIChz
ZXR0aW5ncy5oYXNQYW4pCi0gICAgICAgIHRoaXMuc3RhdGVfLnN0YXRlLnBhbi5jdXJyZW50ID0g
c2V0dGluZ3MucGFuOwotICAgICAgaWYgKHNldHRpbmdzLmhhc1RpbHQpCi0gICAgICAgIHRoaXMu
c3RhdGVfLnN0YXRlLnRpbHQuY3VycmVudCA9IHNldHRpbmdzLnRpbHQ7Ci0gICAgICBpZiAoc2V0
dGluZ3MuaGFzWm9vbSkKLSAgICAgICAgdGhpcy5zdGF0ZV8uc3RhdGUuem9vbS5jdXJyZW50ID0g
c2V0dGluZ3Muem9vbTsKLSAgICAgIGlmIChzZXR0aW5ncy5oYXNGb2N1c01vZGUpCi0gICAgICAg
IHRoaXMuc3RhdGVfLnN0YXRlLmN1cnJlbnRGb2N1c01vZGUgPSBzZXR0aW5ncy5mb2N1c01vZGU7
Ci0gICAgICBpZiAoc2V0dGluZ3MuaGFzRm9jdXNEaXN0YW5jZSkKLSAgICAgICAgdGhpcy5zdGF0
ZV8uc3RhdGUuZm9jdXNEaXN0YW5jZS5jdXJyZW50ID0gc2V0dGluZ3MuZm9jdXNEaXN0YW5jZTsK
LQotICAgICAgaWYgKHNldHRpbmdzLnBvaW50c09mSW50ZXJlc3QubGVuZ3RoID4gMCkgewotICAg
ICAgICB0aGlzLnN0YXRlXy5zdGF0ZS5wb2ludHNPZkludGVyZXN0ID0KLSAgICAgICAgICBzZXR0
aW5ncy5wb2ludHNPZkludGVyZXN0OwotICAgICAgfQotCi0gICAgICBpZiAoc2V0dGluZ3MuaGFz
RXhwb3N1cmVNb2RlKQotICAgICAgICB0aGlzLnN0YXRlXy5zdGF0ZS5jdXJyZW50RXhwb3N1cmVN
b2RlID0gc2V0dGluZ3MuZXhwb3N1cmVNb2RlOwotCi0gICAgICBpZiAoc2V0dGluZ3MuaGFzRXhw
b3N1cmVDb21wZW5zYXRpb24pIHsKLSAgICAgICAgdGhpcy5zdGF0ZV8uc3RhdGUuZXhwb3N1cmVD
b21wZW5zYXRpb24uY3VycmVudCA9Ci0gICAgICAgICAgc2V0dGluZ3MuZXhwb3N1cmVDb21wZW5z
YXRpb247Ci0gICAgICB9Ci0gICAgICBpZiAoc2V0dGluZ3MuaGFzRXhwb3N1cmVUaW1lKSB7Ci0g
ICAgICAgIHRoaXMuc3RhdGVfLnN0YXRlLmV4cG9zdXJlVGltZS5jdXJyZW50ID0KLSAgICAgICAg
ICBzZXR0aW5ncy5leHBvc3VyZVRpbWU7Ci0gICAgICB9Ci0gICAgICBpZiAoc2V0dGluZ3MuaGFz
V2hpdGVCYWxhbmNlTW9kZSkgewotICAgICAgICB0aGlzLnN0YXRlXy5zdGF0ZS5jdXJyZW50V2hp
dGVCYWxhbmNlTW9kZSA9Ci0gICAgICAgICAgc2V0dGluZ3Mud2hpdGVCYWxhbmNlTW9kZTsKLSAg
ICAgIH0KLSAgICAgIGlmIChzZXR0aW5ncy5oYXNGaWxsTGlnaHRNb2RlKQotICAgICAgICB0aGlz
LnN0YXRlXy5zdGF0ZS5maWxsTGlnaHRNb2RlID0gW3NldHRpbmdzLmZpbGxMaWdodE1vZGVdOwot
ICAgICAgaWYgKHNldHRpbmdzLmhhc1JlZEV5ZVJlZHVjdGlvbikKLSAgICAgICAgdGhpcy5zdGF0
ZV8uc3RhdGUucmVkRXllUmVkdWN0aW9uID0gc2V0dGluZ3MucmVkRXllUmVkdWN0aW9uOwotICAg
ICAgaWYgKHNldHRpbmdzLmhhc0NvbG9yVGVtcGVyYXR1cmUpIHsKLSAgICAgICAgdGhpcy5zdGF0
ZV8uc3RhdGUuY29sb3JUZW1wZXJhdHVyZS5jdXJyZW50ID0KLSAgICAgICAgICBzZXR0aW5ncy5j
b2xvclRlbXBlcmF0dXJlOwotICAgICAgfQotICAgICAgaWYgKHNldHRpbmdzLmhhc0JyaWdodG5l
c3MpCi0gICAgICAgIHRoaXMuc3RhdGVfLnN0YXRlLmJyaWdodG5lc3MuY3VycmVudCA9IHNldHRp
bmdzLmJyaWdodG5lc3M7Ci0gICAgICBpZiAoc2V0dGluZ3MuaGFzQ29udHJhc3QpCi0gICAgICAg
IHRoaXMuc3RhdGVfLnN0YXRlLmNvbnRyYXN0LmN1cnJlbnQgPSBzZXR0aW5ncy5jb250cmFzdDsK
LSAgICAgIGlmIChzZXR0aW5ncy5oYXNTYXR1cmF0aW9uKQotICAgICAgICB0aGlzLnN0YXRlXy5z
dGF0ZS5zYXR1cmF0aW9uLmN1cnJlbnQgPSBzZXR0aW5ncy5zYXR1cmF0aW9uOwotICAgICAgaWYg
KHNldHRpbmdzLmhhc1NoYXJwbmVzcykKLSAgICAgICAgdGhpcy5zdGF0ZV8uc3RhdGUuc2hhcnBu
ZXNzLmN1cnJlbnQgPSBzZXR0aW5ncy5zaGFycG5lc3M7Ci0KLSAgICAgIGlmIChzZXR0aW5ncy5o
YXNUb3JjaCkKLSAgICAgICAgdGhpcy5zdGF0ZV8uc3RhdGUudG9yY2ggPSBzZXR0aW5ncy50b3Jj
aDsKLQotICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh7Ci0gICAgICAgIHN1Y2Nlc3M6IHRy
dWUKLSAgICAgIH0pOwotICAgIH0KLQotICAgIHRha2VQaG90byhzb3VyY2VfaWQpIHsKLSAgICAg
IHJldHVybiBQcm9taXNlLnJlc29sdmUoewotICAgICAgICBibG9iOiB7Ci0gICAgICAgICAgbWlt
ZVR5cGU6ICdpbWFnZS9jYXQnLAotICAgICAgICAgIGRhdGE6IG5ldyBBcnJheSgyKQotICAgICAg
ICB9Ci0gICAgICB9KTsKLSAgICB9Ci0KLSAgICBzdGF0ZSgpIHsKLSAgICAgIHJldHVybiB0aGlz
LnN0YXRlXy5zdGF0ZTsKLSAgICB9Ci0KLSAgICBvcHRpb25zKCkgewotICAgICAgcmV0dXJuIHRo
aXMuc2V0dGluZ3NfOwotICAgIH0KLSAgfQotCi0gIGxldCB0ZXN0SW50ZXJuYWwgPSB7Ci0gICAg
aW5pdGlhbGl6ZWQ6IGZhbHNlLAotICAgIG1vY2tJbWFnZUNhcHR1cmU6IG51bGwKLSAgfQotCi0g
IGNsYXNzIEltYWdlQ2FwdHVyZVRlc3RDaHJvbWl1bSB7Ci0KLSAgICBjb25zdHJ1Y3RvcigpIHsK
LSAgICAgIE9iamVjdC5mcmVlemUodGhpcyk7IC8vIE1ha2UgaXQgaW1tdXRhYmxlLgotICAgIH0K
LQotICAgIGluaXRpYWxpemUoKSB7Ci0gICAgICBpZiAodGVzdEludGVybmFsLmluaXRpYWxpemVk
KQotICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0NhbGwgcmVzZXQoKSBiZWZvcmUgaW5pdGlhbGl6
ZSgpLicpOwotCi0gICAgICB0ZXN0SW50ZXJuYWwubW9ja0ltYWdlQ2FwdHVyZSA9IG5ldyBNb2Nr
SW1hZ2VDYXB0dXJlOwotICAgICAgdGVzdEludGVybmFsLmluaXRpYWxpemVkID0gdHJ1ZTsKLSAg
ICB9Ci0gICAgLy8gUmVzZXRzIHN0YXRlIG9mIGltYWdlIGNhcHR1cmUgbW9ja3MgYmV0d2VlbiB0
ZXN0IHJ1bnMuCi0gICAgYXN5bmMgcmVzZXQoKSB7Ci0gICAgICBpZiAoIXRlc3RJbnRlcm5hbC5p
bml0aWFsaXplZCkKLSAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYWxsIGluaXRpYWxpemUoKSBi
ZWZvcmUgcmVzZXQoKS4nKTsKLSAgICAgIHRlc3RJbnRlcm5hbC5tb2NrSW1hZ2VDYXB0dXJlLnJl
c2V0KCk7Ci0gICAgICB0ZXN0SW50ZXJuYWwubW9ja0ltYWdlQ2FwdHVyZSA9IG51bGw7Ci0gICAg
ICB0ZXN0SW50ZXJuYWwuaW5pdGlhbGl6ZWQgPSBmYWxzZTsKLQotICAgICAgYXdhaXQgbmV3IFBy
b21pc2UocmVzb2x2ZSA9PiBzZXRUaW1lb3V0KHJlc29sdmUsIDApKTsKLSAgICB9Ci0gICAgbW9j
a0ltYWdlQ2FwdHVyZSgpIHsKLSAgICAgIHJldHVybiB0ZXN0SW50ZXJuYWwubW9ja0ltYWdlQ2Fw
dHVyZTsKLSAgICB9Ci0gIH0KLQotICByZXR1cm4gSW1hZ2VDYXB0dXJlVGVzdENocm9taXVtOwot
fSkoKTsKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0t
dGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL21vY2stc2NyZWVuZW51bWVyYXRpb24uanMgYi9MYXlv
dXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1
bS9tb2NrLXNjcmVlbmVudW1lcmF0aW9uLmpzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCA1YTJkN2IxOGQyODIyOWQ5ZTBlM2U1M2EyMjAwNmEwODJkZTI1ZGVhLi4wMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3cz
Yy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL21vY2stc2NyZWVuZW51bWVy
YXRpb24uanMKKysrIC9kZXYvbnVsbApAQCAtMSw5MiArMCwwIEBACi0ndXNlIHN0cmljdCcKLQot
dmFyIFNjcmVlbkVudW1lcmF0aW9uVGVzdCA9ICgoKSA9PiB7Ci0KLSAgY2xhc3MgTW9ja1NjcmVl
bkVudW1lcmF0aW9uIHsKLSAgICBjb25zdHJ1Y3RvcigpIHsKLSAgICAgIHRoaXMuYmluZGluZ1Nl
dF8gPSBuZXcgbW9qby5CaW5kaW5nU2V0KGJsaW5rLm1vam9tLlNjcmVlbkVudW1lcmF0aW9uKTsK
LSAgICAgIHRoaXMuaW50ZXJjZXB0b3JfID0gbmV3IE1vam9JbnRlcmZhY2VJbnRlcmNlcHRvcihi
bGluay5tb2pvbS5TY3JlZW5FbnVtZXJhdGlvbi5uYW1lKTsKLSAgICAgIHRoaXMuaW50ZXJjZXB0
b3JfLm9uaW50ZXJmYWNlcmVxdWVzdCA9IGUgPT4gewotICAgICAgICB0aGlzLmJpbmRpbmdTZXRf
LmFkZEJpbmRpbmcodGhpcywgZS5oYW5kbGUpOwotICAgICAgfQotICAgICAgdGhpcy5yZXNldCgp
OwotICAgICAgdGhpcy5pbnRlcmNlcHRvcl8uc3RhcnQoKTsKLSAgICB9Ci0KLSAgICByZXNldCgp
IHsKLSAgICAgIHRoaXMuZGlzcGxheXNfID0gW107Ci0gICAgICB0aGlzLmludGVybmFsSWRfID0g
MDsKLSAgICAgIHRoaXMucHJpbWFyeUlkXyA9IDA7Ci0gICAgICB0aGlzLnN1Y2Nlc3NfID0gZmFs
c2U7Ci0gICAgfQotCi0gICAgc2V0SW50ZXJuYWxJZChpbnRlcm5hbElkKSB7Ci0gICAgICB0aGlz
LmludGVybmFsSWRfID0gaW50ZXJuYWxJZDsKLSAgICB9Ci0KLSAgICBzZXRQcmltYXJ5SWQocHJp
bWFyeUlkKSB7Ci0gICAgICB0aGlzLnByaW1hcnlJZF8gPSBwcmltYXJ5SWQ7Ci0gICAgfQotCi0g
ICAgc2V0U3VjY2VzcyhzdWNjZXNzKSB7Ci0gICAgICB0aGlzLnN1Y2Nlc3NfID0gc3VjY2VzczsK
LSAgICB9Ci0KLSAgICBhZGREaXNwbGF5KGRpc3BsYXkpIHsKLSAgICAgIHRoaXMuZGlzcGxheXNf
LnB1c2goZGlzcGxheSk7Ci0gICAgfQotCi0gICAgcmVtb3ZlRGlzcGxheShpZCkgewotICAgICAg
Zm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmRpc3BsYXlzXy5sZW5ndGg7IGkrKykgewotICAgICAg
ICBpZiAodGhpcy5kaXNwbGF5c19baV0uaWQgPT09IGlkKQotICAgICAgICAgIHRoaXMuZGlzcGxh
eXNfLnNwbGljZShpLDEpOwotICAgICAgfQotICAgIH0KLQotICAgIGFzeW5jIGdldERpc3BsYXlz
KCkgewotICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh7Ci0gICAgICAgIGRpc3BsYXlzOiB0
aGlzLmRpc3BsYXlzXywKLSAgICAgICAgaW50ZXJuYWxJZDogdGhpcy5pbnRlcm5hbElkXywKLSAg
ICAgICAgcHJpbWFyeUlkOiB0aGlzLnByaW1hcnlJZF8sCi0gICAgICAgIHN1Y2Nlc3M6IHRoaXMu
c3VjY2Vzc18sCi0gICAgICB9KTsKLSAgICB9Ci0gIH0KLQotICBsZXQgdGVzdEludGVybmFsID0g
ewotICAgIGluaXRpYWxpemVkOiBmYWxzZSwKLSAgICBtb2NrU2NyZWVuRW51bWVyYXRpb246IG51
bGwKLSAgfQotCi0gIGNsYXNzIFNjcmVlbkVudW1lcmF0aW9uVGVzdENocm9taXVtIHsKLSAgICBj
b25zdHJ1Y3RvcigpIHsKLSAgICAgIE9iamVjdC5mcmVlemUodGhpcyk7IC8vIE1ha2VzIGl0IGlt
bXV0YWJsZS4KLSAgICB9Ci0KLSAgICBhc3luYyBpbml0aWFsaXplKCkgewotICAgICAgaWYgKHRl
c3RJbnRlcm5hbC5pbml0aWFsaXplZCkKLSAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYWxsIHJl
c2V0KCkgYmVmb3JlIGluaXRpYWxpemUoKS4nKTsKLQotICAgICAgaWYgKHRlc3RJbnRlcm5hbC5t
b2NrU2NyZWVuRW51bWVyYXRpb24gPT0gbnVsbCkKLSAgICAgICAgdGVzdEludGVybmFsLm1vY2tT
Y3JlZW5FbnVtZXJhdGlvbiA9IG5ldyBNb2NrU2NyZWVuRW51bWVyYXRpb24oKTsKLSAgICAgIHRl
c3RJbnRlcm5hbC5pbml0aWFsaXplZCA9IHRydWU7Ci0gICAgfQotCi0gICAgYXN5bmMgcmVzZXQo
KSB7Ci0gICAgICBpZiAoIXRlc3RJbnRlcm5hbC5pbml0aWFsaXplZCkKLSAgICAgICAgdGhyb3cg
bmV3IEVycm9yKCdDYWxsIGluaXRpYWxpemUoKSBiZWZvcmUgcmVzZXQoKS4nKTsKLSAgICAgIHRl
c3RJbnRlcm5hbC5tb2NrU2NyZWVuRW51bWVyYXRpb24ucmVzZXQoKTsKLSAgICAgIHRlc3RJbnRl
cm5hbC5pbml0aWFsaXplZCA9IGZhbHNlOwotCi0gICAgICAvLyBXYWl0IGZvciBhbiBldmVudCBs
b29wIGl0ZXJhdGlvbiB0byBsZXQgYW55IHBlbmRpbmcgbW9qbyBjb21tYW5kcwotICAgICAgLy8g
dG8gZmluaXNoLgotICAgICAgYXdhaXQgbmV3IFByb21pc2UocmVzb2x2ZSA9PiBzZXRUaW1lb3V0
KHJlc29sdmUsIDApKTsKLSAgICB9Ci0KLSAgICBnZXRNb2NrU2NyZWVuRW51bWVyYXRpb24oKSB7
Ci0gICAgICByZXR1cm4gdGVzdEludGVybmFsLm1vY2tTY3JlZW5FbnVtZXJhdGlvbjsKLSAgICB9
Ci0gIH0KLQotICByZXR1cm4gU2NyZWVuRW51bWVyYXRpb25UZXN0Q2hyb21pdW07Ci19KSgpOwpk
aWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9y
ZXNvdXJjZXMvY2hyb21pdW0vbW9jay1zY3JlZW5lbnVtZXJhdGlvbi5qcy5oZWFkZXIgYi9MYXlv
dXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1
bS9tb2NrLXNjcmVlbmVudW1lcmF0aW9uLmpzLmhlYWRlcgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggNjgwNWMzMjNkZjVhOTc1MjMxNjQ4YjgzMGUzM2NlMTgzYzNjYmJkMy4uMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9MYXlvdXRUZXN0cy9pbXBv
cnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS9tb2NrLXNjcmVl
bmVudW1lcmF0aW9uLmpzLmhlYWRlcgorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLUNvbnRl
bnQtVHlwZTogdGV4dC9qYXZhc2NyaXB0OyBjaGFyc2V0PXV0Zi04CmRpZmYgLS1naXQgYS9MYXlv
dXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1
bS9tb2NrLXNtcy1yZWNlaXZlci5qcyBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxh
dGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL21vY2stc21zLXJlY2VpdmVyLmpzCmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNGFhOWE4NmYyYzhhMTUzMDNmOTZjYzk4NTliMmVj
MTQ2ZWIyZjU4Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBh
L0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2No
cm9taXVtL21vY2stc21zLXJlY2VpdmVyLmpzCisrKyAvZGV2L251bGwKQEAgLTEsNTEgKzAsMCBA
QAotJ3VzZSBzdHJpY3QnOwotCi1jb25zdCBTbXNQcm92aWRlciA9ICgoKSA9PiB7Ci0KLSAgY2xh
c3MgTW9ja1Ntc1JlY2VpdmVyIHsKLQotICAgIGNvbnN0cnVjdG9yKCkgewotICAgICAgdGhpcy5t
b2pvUmVjZWl2ZXJfID0gbmV3IGJsaW5rLm1vam9tLlNtc1JlY2VpdmVyUmVjZWl2ZXIodGhpcyk7
Ci0KLSAgICAgIHRoaXMuaW50ZXJjZXB0b3JfID0KLSAgICAgICAgICBuZXcgTW9qb0ludGVyZmFj
ZUludGVyY2VwdG9yKGJsaW5rLm1vam9tLlNtc1JlY2VpdmVyLiRpbnRlcmZhY2VOYW1lKTsKLQot
ICAgICAgdGhpcy5pbnRlcmNlcHRvcl8ub25pbnRlcmZhY2VyZXF1ZXN0ID0gKGUpID0+IHsKLSAg
ICAgICAgdGhpcy5tb2pvUmVjZWl2ZXJfLiQuYmluZEhhbmRsZShlLmhhbmRsZSk7Ci0gICAgICB9
Ci0gICAgICB0aGlzLmludGVyY2VwdG9yXy5zdGFydCgpOwotCi0gICAgICB0aGlzLnJldHVyblZh
bHVlc18gPSB7fTsKLSAgICB9Ci0KLSAgICBhc3luYyByZWNlaXZlKCkgewotICAgICAgbGV0IGNh
bGwgPSB0aGlzLnJldHVyblZhbHVlc18ucmVjZWl2ZSA/Ci0gICAgICAgICAgdGhpcy5yZXR1cm5W
YWx1ZXNfLnJlY2VpdmUuc2hpZnQoKSA6IG51bGw7Ci0gICAgICBpZiAoIWNhbGwpCi0gICAgICAg
IHJldHVybjsKLSAgICAgIHJldHVybiBjYWxsKCk7Ci0gICAgfQotCi0gICAgYXN5bmMgYWJvcnQo
KSB7fTsKLQotICAgIHB1c2hSZXR1cm5WYWx1ZXNGb3JUZXN0aW5nKGNhbGxOYW1lLCB2YWx1ZSkg
ewotICAgICAgdGhpcy5yZXR1cm5WYWx1ZXNfW2NhbGxOYW1lXSA9IHRoaXMucmV0dXJuVmFsdWVz
X1tjYWxsTmFtZV0gfHwgW107Ci0gICAgICB0aGlzLnJldHVyblZhbHVlc19bY2FsbE5hbWVdLnB1
c2godmFsdWUpOwotICAgICAgcmV0dXJuIHRoaXM7Ci0gICAgfQotICB9Ci0KLSAgY29uc3QgbW9j
a1Ntc1JlY2VpdmVyID0gbmV3IE1vY2tTbXNSZWNlaXZlcigpOwotCi0gIGNsYXNzIFNtc1Byb3Zp
ZGVyQ2hyb21pdW0gewotICAgIGNvbnN0cnVjdG9yKCkgewotICAgICAgT2JqZWN0LmZyZWV6ZSh0
aGlzKTsgLy8gTWFrZSBpdCBpbW11dGFibGUuCi0gICAgfQotCi0gICAgcHVzaFJldHVyblZhbHVl
c0ZvclRlc3RpbmcoY2FsbE5hbWUsIGNhbGxiYWNrKSB7Ci0gICAgICBtb2NrU21zUmVjZWl2ZXIu
cHVzaFJldHVyblZhbHVlc0ZvclRlc3RpbmcoY2FsbE5hbWUsIGNhbGxiYWNrKTsKLSAgICB9Ci0g
IH0KLQotICByZXR1cm4gU21zUHJvdmlkZXJDaHJvbWl1bTsKLX0pKCk7CmRpZmYgLS1naXQgYS9M
YXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9jaHJv
bWl1bS9tb2NrLXRleHRkZXRlY3Rpb24uanMgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2Vi
LXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS9tb2NrLXRleHRkZXRlY3Rpb24uanMK
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQyN2NlMzhkYTIxYTljZDAwZTExYWFiMzEz
NzA4ZjI3MTlkOGIwOTQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAK
LS0tIGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJj
ZXMvY2hyb21pdW0vbW9jay10ZXh0ZGV0ZWN0aW9uLmpzCisrKyAvZGV2L251bGwKQEAgLTEsOTMg
KzAsMCBAQAotInVzZSBzdHJpY3QiOwotdmFyIFRleHREZXRlY3Rpb25UZXN0ID0gKCgpID0+IHsK
LSAgLy8gQ2xhc3MgdGhhdCBtb2NrcyBUZXh0RGV0ZWN0aW9uIGludGVyZmFjZSBkZWZpbmVkIGlu
Ci0gIC8vIGh0dHBzOi8vY3MuY2hyb21pdW0ub3JnL2Nocm9taXVtL3NyYy9zZXJ2aWNlcy9zaGFw
ZV9kZXRlY3Rpb24vcHVibGljL21vam9tL3RleHRkZXRlY3Rpb24ubW9qb20KLSAgY2xhc3MgTW9j
a1RleHREZXRlY3Rpb24gewotICAgIGNvbnN0cnVjdG9yKCkgewotICAgICAgdGhpcy5iaW5kaW5n
U2V0XyA9Ci0gICAgICAgICAgbmV3IG1vam8uQmluZGluZ1NldChzaGFwZURldGVjdGlvbi5tb2pv
bS5UZXh0RGV0ZWN0aW9uKTsKLQotICAgICAgdGhpcy5pbnRlcmNlcHRvcl8gPQotICAgICAgICAg
IG5ldyBNb2pvSW50ZXJmYWNlSW50ZXJjZXB0b3Ioc2hhcGVEZXRlY3Rpb24ubW9qb20uVGV4dERl
dGVjdGlvbi5uYW1lKTsKLSAgICAgIHRoaXMuaW50ZXJjZXB0b3JfLm9uaW50ZXJmYWNlcmVxdWVz
dCA9Ci0gICAgICAgICAgZSA9PiB0aGlzLmJpbmRpbmdTZXRfLmFkZEJpbmRpbmcodGhpcywgZS5o
YW5kbGUpOwotICAgICAgdGhpcy5pbnRlcmNlcHRvcl8uc3RhcnQoKTsKLSAgICB9Ci0KLSAgICBk
ZXRlY3QoYml0bWFwRGF0YSkgewotICAgICAgdGhpcy5idWZmZXJEYXRhXyA9Ci0gICAgICAgICAg
bmV3IFVpbnQzMkFycmF5KGdldEFycmF5QnVmZmVyRnJvbUJpZ0J1ZmZlcihiaXRtYXBEYXRhLnBp
eGVsRGF0YSkpOwotICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh7Ci0gICAgICAgIHJlc3Vs
dHM6IFsKLSAgICAgICAgICB7Ci0gICAgICAgICAgICByYXdWYWx1ZSA6ICJjYXRzIiwKLSAgICAg
ICAgICAgIGJvdW5kaW5nQm94OiB7IHg6IDEuMCwgeTogMS4wLCB3aWR0aDogMTAwLjAsIGhlaWdo
dDogMTAwLjAgfSwKLSAgICAgICAgICAgIGNvcm5lclBvaW50czogWwotICAgICAgICAgICAgICB7
IHg6IDEuMCwgeTogMS4wIH0sCi0gICAgICAgICAgICAgIHsgeDogMTAxLjAsIHk6IDEuMCB9LAot
ICAgICAgICAgICAgICB7IHg6IDEwMS4wLCB5OiAxMDEuMCB9LAotICAgICAgICAgICAgICB7IHg6
IDEuMCwgeTogMTAxLjAgfQotICAgICAgICAgICAgXQotICAgICAgICAgIH0sCi0gICAgICAgICAg
ewotICAgICAgICAgICAgcmF3VmFsdWUgOiAiZG9ncyIsCi0gICAgICAgICAgICBib3VuZGluZ0Jv
eDogeyB4OiAyLjAsIHk6IDIuMCwgd2lkdGg6IDUwLjAsIGhlaWdodDogNTAuMCB9LAotICAgICAg
ICAgICAgY29ybmVyUG9pbnRzOiBbCi0gICAgICAgICAgICAgIHsgeDogMi4wLCB5OiAyLjAgfSwK
LSAgICAgICAgICAgICAgeyB4OiA1Mi4wLCB5OiAyLjAgfSwKLSAgICAgICAgICAgICAgeyB4OiA1
Mi4wLCB5OiA1Mi4wIH0sCi0gICAgICAgICAgICAgIHsgeDogMi4wLCB5OiA1Mi4wIH0KLSAgICAg
ICAgICAgIF0KLSAgICAgICAgICB9LAotICAgICAgICBdLAotICAgICAgfSk7Ci0gICAgfQotCi0g
ICAgZ2V0RnJhbWVEYXRhKCkgewotICAgICAgcmV0dXJuIHRoaXMuYnVmZmVyRGF0YV87Ci0gICAg
fQotCi0gICAgcmVzZXQoKSB7Ci0gICAgICB0aGlzLmJpbmRpbmdTZXRfLmNsb3NlQWxsQmluZGlu
Z3MoKTsKLSAgICAgIHRoaXMuaW50ZXJjZXB0b3JfLnN0b3AoKTsKLSAgICB9Ci0KLSAgfQotCi0g
IGxldCB0ZXN0SW50ZXJuYWwgPSB7Ci0gICAgaW5pdGlhbGl6ZWQ6IGZhbHNlLAotICAgIE1vY2tU
ZXh0RGV0ZWN0aW9uOiBudWxsCi0gIH0KLQotICBjbGFzcyBUZXh0RGV0ZWN0aW9uVGVzdENocm9t
aXVtIHsKLSAgICBjb25zdHJ1Y3RvcigpIHsKLSAgICAgIE9iamVjdC5mcmVlemUodGhpcyk7IC8v
IE1ha2UgaXQgaW1tdXRhYmxlLgotICAgIH0KLQotICAgIGluaXRpYWxpemUoKSB7Ci0gICAgICBp
ZiAodGVzdEludGVybmFsLmluaXRpYWxpemVkKQotICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nh
bGwgcmVzZXQoKSBiZWZvcmUgaW5pdGlhbGl6ZSgpLicpOwotCi0gICAgICB0ZXN0SW50ZXJuYWwu
TW9ja1RleHREZXRlY3Rpb24gPSBuZXcgTW9ja1RleHREZXRlY3Rpb247Ci0gICAgICB0ZXN0SW50
ZXJuYWwuaW5pdGlhbGl6ZWQgPSB0cnVlOwotICAgIH0KLQotICAgIC8vIFJlc2V0cyBzdGF0ZSBv
ZiB0ZXh0IGRldGVjdGlvbiBtb2NrcyBiZXR3ZWVuIHRlc3QgcnVucy4KLSAgICBhc3luYyByZXNl
dCgpIHsKLSAgICAgIGlmICghdGVzdEludGVybmFsLmluaXRpYWxpemVkKQotICAgICAgICB0aHJv
dyBuZXcgRXJyb3IoJ0NhbGwgaW5pdGlhbGl6ZSgpIGJlZm9yZSByZXNldCgpLicpOwotICAgICAg
dGVzdEludGVybmFsLk1vY2tUZXh0RGV0ZWN0aW9uLnJlc2V0KCk7Ci0gICAgICB0ZXN0SW50ZXJu
YWwuTW9ja1RleHREZXRlY3Rpb24gPSBudWxsOwotICAgICAgdGVzdEludGVybmFsLmluaXRpYWxp
emVkID0gZmFsc2U7Ci0KLSAgICAgIGF3YWl0IG5ldyBQcm9taXNlKHJlc29sdmUgPT4gc2V0VGlt
ZW91dChyZXNvbHZlLCAwKSk7Ci0gICAgfQotCi0gICAgTW9ja1RleHREZXRlY3Rpb24oKSB7Ci0g
ICAgICByZXR1cm4gdGVzdEludGVybmFsLk1vY2tUZXh0RGV0ZWN0aW9uOwotICAgIH0KLSAgfQot
Ci0gIHJldHVybiBUZXh0RGV0ZWN0aW9uVGVzdENocm9taXVtOwotCi19KSgpOwpkaWZmIC0tZ2l0
IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMv
Y2hyb21pdW0vbW9jay10ZXh0ZGV0ZWN0aW9uLmpzLmhlYWRlcnMgYi9MYXlvdXRUZXN0cy9pbXBv
cnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS9tb2NrLXRleHRk
ZXRlY3Rpb24uanMuaGVhZGVycwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmM2MWEz
NGE0ZWMyZTc1MDk2ZGIwZWI5Zjc3NDhiMTQyZjBkYjdiYi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBs
YXRmb3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS9tb2NrLXRleHRkZXRlY3Rpb24uanMuaGVh
ZGVycworKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLUNvbnRlbnQtVHlwZTogdGV4dC9qYXZh
c2NyaXB0OyBjaGFyc2V0PXV0Zi04ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0t
Z2l0IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJj
ZXMvY2hyb21pdW0vbW9qb19iaW5kaW5ncy5qcyBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93
ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL21vam9fYmluZGluZ3MuanMKZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDcwZjZjYWQ1ZTVmMDZmNGY2NGEwZmQ0Y2RjZDY5
M2ZjZWExMmJiNzguLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0t
IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMv
Y2hyb21pdW0vbW9qb19iaW5kaW5ncy5qcworKysgL2Rldi9udWxsCkBAIC0xLDUxNDYgKzAsMCBA
QAotLy8gQ29weXJpZ2h0IDIwMTcgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1z
dHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgot
Ci0ndXNlIHN0cmljdCc7Ci0KLWlmICgodHlwZW9mIG1vam8gIT09ICd1bmRlZmluZWQnKSAmJiBt
b2pvLmJpbmRpbmdzTGlicmFyeUluaXRpYWxpemVkKSB7Ci0gIHRocm93IG5ldyBFcnJvcignVGhl
IE1vam8gYmluZGluZ3MgbGlicmFyeSBoYXMgYmVlbiBpbml0aWFsaXplZC4nKTsKLX0KLQotdmFy
IG1vam8gPSBtb2pvIHx8IHt9OwotbW9qby5iaW5kaW5nc0xpYnJhcnlJbml0aWFsaXplZCA9IHRy
dWU7Ci0KLW1vam8uaW50ZXJuYWwgPSBtb2pvLmludGVybmFsIHx8IHt9OwotCi1tb2pvLmNvbmZp
ZyA9IG1vam8uY29uZmlnIHx8IHt9OwotaWYgKHR5cGVvZiBtb2pvLmNvbmZpZy5nbG9iYWwgPT09
ICd1bmRlZmluZWQnKSB7Ci0gIG1vam8uY29uZmlnLmdsb2JhbCA9IHRoaXM7Ci19Ci0KLWlmICh0
eXBlb2YgbW9qby5jb25maWcuYXV0b0xvYWRNb2pvbURlcHMgPT09ICd1bmRlZmluZWQnKSB7Ci0g
IC8vIFdoZXRoZXIgdG8gYXV0b21hdGljYWxseSBsb2FkIG1vam9tIGRlcGVuZGVuY2llcy4KLSAg
Ly8gRm9yIGV4YW1wbGUsIGlmIGZvby5tb2pvbSBpbXBvcnRzIGJhci5tb2pvbSwgfGF1dG9Mb2Fk
TW9qb21EZXBzfCBzZXQgdG8KLSAgLy8gdHJ1ZSBtZWFucyB0aGF0IGxvYWRpbmcgZm9vLm1vam9t
LmpzIHdpbGwgaW5zZXJ0IGEgPHNjcmlwdD4gdGFnIHRvIGxvYWQKLSAgLy8gYmFyLm1vam9tLmpz
LCBpZiBpdCBoYXNuJ3QgYmVlbiBsb2FkZWQuCi0gIC8vCi0gIC8vIFRoZSBVUkwgb2YgYmFyLm1v
am9tLmpzIGlzIGRldGVybWluZWQgYnkgdGhlIHJlbGF0aXZlIHBhdGggb2YgYmFyLm1vam9tCi0g
IC8vIChyZWxhdGl2ZSB0byB0aGUgcG9zaXRpb24gb2YgZm9vLm1vam9tIGF0IGJ1aWxkIHRpbWUp
IGFuZCB0aGUgVVJMIG9mCi0gIC8vIGZvby5tb2pvbS5qcy4gRm9yIGV4bXBsZSwgaWYgYXQgYnVp
bGQgdGltZSB0aGUgdHdvIG1vam9tIGZpbGVzIGFyZQotICAvLyBsb2NhdGVkIGF0OgotICAvLyAg
IGEvYi9jL2Zvby5tb2pvbQotICAvLyAgIGEvYi9kL2Jhci5tb2pvbQotICAvLyBhbmQgdGhlIFVS
TCBvZiBmb28ubW9qb20uanMgaXM6Ci0gIC8vICAgaHR0cDovL2V4YW1wbGUub3JnL3NjcmlwdHMv
Yi9jL2Zvby5tb2pvbS5qcwotICAvLyB0aGVuIHRoZSBVUkwgb2YgYmFyLm1vam9tLmpzIHdpbGwg
YmU6Ci0gIC8vICAgaHR0cDovL2V4YW1wbGUub3JnL3NjcmlwdHMvYi9kL2Jhci5tb2pvbS5qcwot
ICAvLwotICAvLyBJZiB5b3Ugd291bGQgbGlrZSBiYXIubW9qb20uanMgdG8gbGl2ZSBhdCBhIGRp
ZmZlcmVudCBsb2NhdGlvbiwgeW91IG5lZWQKLSAgLy8gdG8gdHVybiBvZmYgfGF1dG9Mb2FkTW9q
b21EZXBzfCBiZWZvcmUgbG9hZGluZyBmb28ubW9qb20uanMsIGFuZCBtYW51YWxseQotICAvLyBs
b2FkIGJhci5tb2pvbS5qcyB5b3Vyc2VsZi4gU2ltaWxhcmx5LCB5b3UgbmVlZCB0byB0dXJuIG9m
ZiB0aGUgb3B0aW9uIGlmCi0gIC8vIHlvdSBtZXJnZSBiYXIubW9qb20uanMgYW5kIGZvby5tb2pv
bS5qcyBpbnRvIGEgc2luZ2xlIGZpbGUuCi0gIC8vCi0gIC8vIFBlcmZvcm1hbmNlIHRpcDogQXZv
aWQgbG9hZGluZyB0aGUgc2FtZSBtb2pvbS5qcyBmaWxlIG11bHRpcGxlIHRpbWVzLgotICAvLyBB
c3N1bWUgdGhhdCB8YXV0b0xvYWRNb2pvbURlcHN8IGlzIHNldCB0byB0cnVlLAotICAvLwotICAv
LyA8IS0tCi0gIC8vIChUaGlzIGNvbW1lbnQgdGFnIGlzIG5lY2Vzc2FyeSBvbiBJT1MgdG8gYXZv
aWQgaW50ZXJwcmV0aW5nIHRoZSBjbG9zaW5nCi0gIC8vIHNjcmlwdCB0YWdzIGluIHRoZSBleGFt
cGxlLikKLSAgLy8KLSAgLy8gTm8gZHVwbGljYXRlIGxvYWRpbmc7IHJlY29tbWVuZGVkOgotICAv
LyA8c2NyaXB0IHNyYz0iaHR0cDovL2V4YW1wbGUub3JnL3NjcmlwdHMvYi9jL2Zvby5tb2pvbS5q
cyI+PC9zY3JpcHQ+Ci0gIC8vCi0gIC8vIE5vIGR1cGxpY2F0ZSBsb2FkaW5nLCBhbHRob3VnaCB1
bm5lY2Vzc2FyeToKLSAgLy8gPHNjcmlwdCBzcmM9Imh0dHA6Ly9leGFtcGxlLm9yZy9zY3JpcHRz
L2IvZC9iYXIubW9qb20uanMiPjwvc2NyaXB0PgotICAvLyA8c2NyaXB0IHNyYz0iaHR0cDovL2V4
YW1wbGUub3JnL3NjcmlwdHMvYi9jL2Zvby5tb2pvbS5qcyI+PC9zY3JpcHQ+Ci0gIC8vCi0gIC8v
IExvYWQgYmFyLm1vam9tLmpzIHR3aWNlOyBzaG91bGQgYmUgYXZvaWRlZDoKLSAgLy8gPHNjcmlw
dCBzcmM9Imh0dHA6Ly9leGFtcGxlLm9yZy9zY3JpcHRzL2IvYy9mb28ubW9qb20uanMiPjwvc2Ny
aXB0PgotICAvLyA8c2NyaXB0IHNyYz0iaHR0cDovL2V4YW1wbGUub3JnL3NjcmlwdHMvYi9kL2Jh
ci5tb2pvbS5qcyI+PC9zY3JpcHQ+Ci0gIC8vCi0gIC8vIC0tPgotICBtb2pvLmNvbmZpZy5hdXRv
TG9hZE1vam9tRGVwcyA9IHRydWU7Ci19Ci0KLShmdW5jdGlvbigpIHsKLSAgdmFyIGludGVybmFs
ID0gbW9qby5pbnRlcm5hbDsKLSAgdmFyIGNvbmZpZyA9IG1vam8uY29uZmlnOwotCi0gIHZhciBM
b2FkU3RhdGUgPSB7Ci0gICAgUEVORElOR19MT0FEOiAxLAotICAgIExPQURFRDogMgotICB9Owot
Ci0gIHZhciBtb2pvbVJlZ2lzdHJ5ID0gbmV3IE1hcCgpOwotCi0gIGZ1bmN0aW9uIGV4cG9zZU5h
bWVzcGFjZShuYW1lc3BhY2UpIHsKLSAgICB2YXIgY3VycmVudCA9IGNvbmZpZy5nbG9iYWw7Ci0g
ICAgdmFyIHBhcnRzID0gbmFtZXNwYWNlLnNwbGl0KCcuJyk7Ci0KLSAgICBmb3IgKHZhciBwYXJ0
OyBwYXJ0cy5sZW5ndGggJiYgKHBhcnQgPSBwYXJ0cy5zaGlmdCgpKTspIHsKLSAgICAgIGlmICgh
Y3VycmVudFtwYXJ0XSkgewotICAgICAgICBjdXJyZW50W3BhcnRdID0ge307Ci0gICAgICB9Ci0g
ICAgICBjdXJyZW50ID0gY3VycmVudFtwYXJ0XTsKLSAgICB9Ci0KLSAgICByZXR1cm4gY3VycmVu
dDsKLSAgfQotCi0gIGZ1bmN0aW9uIGlzTW9qb21QZW5kaW5nTG9hZChpZCkgewotICAgIHJldHVy
biBtb2pvbVJlZ2lzdHJ5LmdldChpZCkgPT09IExvYWRTdGF0ZS5QRU5ESU5HX0xPQUQ7Ci0gIH0K
LQotICBmdW5jdGlvbiBpc01vam9tTG9hZGVkKGlkKSB7Ci0gICAgcmV0dXJuIG1vam9tUmVnaXN0
cnkuZ2V0KGlkKSA9PT0gTG9hZFN0YXRlLkxPQURFRDsKLSAgfQotCi0gIGZ1bmN0aW9uIG1hcmtN
b2pvbVBlbmRpbmdMb2FkKGlkKSB7Ci0gICAgaWYgKGlzTW9qb21Mb2FkZWQoaWQpKSB7Ci0gICAg
ICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBmb2xsb3dpbmcgbW9qb20gZmlsZSBoYXMgYmVlbiBsb2Fk
ZWQ6ICcgKyBpZCk7Ci0gICAgfQotCi0gICAgbW9qb21SZWdpc3RyeS5zZXQoaWQsIExvYWRTdGF0
ZS5QRU5ESU5HX0xPQUQpOwotICB9Ci0KLSAgZnVuY3Rpb24gbWFya01vam9tTG9hZGVkKGlkKSB7
Ci0gICAgbW9qb21SZWdpc3RyeS5zZXQoaWQsIExvYWRTdGF0ZS5MT0FERUQpOwotICB9Ci0KLSAg
ZnVuY3Rpb24gbG9hZE1vam9tSWZOZWNlc3NhcnkoaWQsIHJlbGF0aXZlUGF0aCkgewotICAgIGlm
IChtb2pvbVJlZ2lzdHJ5LmhhcyhpZCkpIHsKLSAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBp
ZiAoY29uZmlnLmdsb2JhbC5kb2N1bWVudCA9PT0gdW5kZWZpbmVkKSB7Ci0gICAgICB0aHJvdyBu
ZXcgRXJyb3IoCi0gICAgICAgICAgJ01vam9tIGRlcGVuZGVuY3kgYXV0b2xvYWRpbmcgaXMgbm90
IGltcGxlbWVudGVkIGluIHdvcmtlcnMuICcgKwotICAgICAgICAgICdQbGVhc2Ugc2VlIGNvbmZp
ZyB2YXJpYWJsZSBtb2pvLmNvbmZpZy5hdXRvTG9hZE1vam9tRGVwcyBmb3IgbW9yZSAnICsKLSAg
ICAgICAgICAnZGV0YWlscy4nKTsKLSAgICB9Ci0KLSAgICBtYXJrTW9qb21QZW5kaW5nTG9hZChp
ZCk7Ci0gICAgdmFyIHVybCA9IG5ldyBVUkwocmVsYXRpdmVQYXRoLCBkb2N1bWVudC5jdXJyZW50
U2NyaXB0LnNyYykuaHJlZjsKLSAgICBjb25maWcuZ2xvYmFsLmRvY3VtZW50LndyaXRlKCc8c2Ny
aXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSInICsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHVybCArICciPjwnICsgJy9zY3JpcHQ+Jyk7Ci0gIH0KLQotICBpbnRlcm5h
bC5leHBvc2VOYW1lc3BhY2UgPSBleHBvc2VOYW1lc3BhY2U7Ci0gIGludGVybmFsLmlzTW9qb21Q
ZW5kaW5nTG9hZCA9IGlzTW9qb21QZW5kaW5nTG9hZDsKLSAgaW50ZXJuYWwuaXNNb2pvbUxvYWRl
ZCA9IGlzTW9qb21Mb2FkZWQ7Ci0gIGludGVybmFsLm1hcmtNb2pvbVBlbmRpbmdMb2FkID0gbWFy
a01vam9tUGVuZGluZ0xvYWQ7Ci0gIGludGVybmFsLm1hcmtNb2pvbUxvYWRlZCA9IG1hcmtNb2pv
bUxvYWRlZDsKLSAgaW50ZXJuYWwubG9hZE1vam9tSWZOZWNlc3NhcnkgPSBsb2FkTW9qb21JZk5l
Y2Vzc2FyeTsKLX0pKCk7Ci0vLyBDb3B5cmlnaHQgMjAxNyBUaGUgQ2hyb21pdW0gQXV0aG9ycy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVy
bmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBM
SUNFTlNFIGZpbGUuCi0KLShmdW5jdGlvbigpIHsKLSAgdmFyIGludGVybmFsID0gbW9qby5pbnRl
cm5hbDsKLQotICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotICAvLyB8b3V0cHV0fCBjb3VsZCBi
ZSBhbiBpbnRlcmZhY2UgcG9pbnRlciwgSW50ZXJmYWNlUHRySW5mbyBvcgotICAvLyBBc3NvY2lh
dGVkSW50ZXJmYWNlUHRySW5mby4KLSAgZnVuY3Rpb24gbWFrZVJlcXVlc3Qob3V0cHV0KSB7Ci0g
ICAgaWYgKG91dHB1dCBpbnN0YW5jZW9mIG1vam8uQXNzb2NpYXRlZEludGVyZmFjZVB0ckluZm8p
IHsKLSAgICAgIHZhciB7aGFuZGxlMCwgaGFuZGxlMX0gPSBpbnRlcm5hbC5jcmVhdGVQYWlyUGVu
ZGluZ0Fzc29jaWF0aW9uKCk7Ci0gICAgICBvdXRwdXQuaW50ZXJmYWNlRW5kcG9pbnRIYW5kbGUg
PSBoYW5kbGUwOwotICAgICAgb3V0cHV0LnZlcnNpb24gPSAwOwotCi0gICAgICByZXR1cm4gbmV3
IG1vam8uQXNzb2NpYXRlZEludGVyZmFjZVJlcXVlc3QoaGFuZGxlMSk7Ci0gICAgfQotCi0gICAg
aWYgKG91dHB1dCBpbnN0YW5jZW9mIG1vam8uSW50ZXJmYWNlUHRySW5mbykgewotICAgICAgdmFy
IHBpcGUgPSBNb2pvLmNyZWF0ZU1lc3NhZ2VQaXBlKCk7Ci0gICAgICBvdXRwdXQuaGFuZGxlID0g
cGlwZS5oYW5kbGUwOwotICAgICAgb3V0cHV0LnZlcnNpb24gPSAwOwotCi0gICAgICByZXR1cm4g
bmV3IG1vam8uSW50ZXJmYWNlUmVxdWVzdChwaXBlLmhhbmRsZTEpOwotICAgIH0KLQotICAgIHZh
ciBwaXBlID0gTW9qby5jcmVhdGVNZXNzYWdlUGlwZSgpOwotICAgIG91dHB1dC5wdHIuYmluZChu
ZXcgbW9qby5JbnRlcmZhY2VQdHJJbmZvKHBpcGUuaGFuZGxlMCwgMCkpOwotICAgIHJldHVybiBu
ZXcgbW9qby5JbnRlcmZhY2VSZXF1ZXN0KHBpcGUuaGFuZGxlMSk7Ci0gIH0KLQotICAvLyAtLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0KLQotICAvLyBPcGVyYXRpb25zIHVzZWQgdG8gc2V0dXAvY29uZmlndXJl
IGFuIGludGVyZmFjZSBwb2ludGVyLiBFeHBvc2VkIGFzIHRoZQotICAvLyB8cHRyfCBmaWVsZCBv
ZiBnZW5lcmF0ZWQgaW50ZXJmYWNlIHBvaW50ZXIgY2xhc3Nlcy4KLSAgLy8gfHB0ckluZm9Pckhh
bmRsZXwgY291bGQgYmUgb21pdHRlZCBhbmQgcGFzc2VkIGludG8gYmluZCgpIGxhdGVyLgotICBm
dW5jdGlvbiBJbnRlcmZhY2VQdHJDb250cm9sbGVyKGludGVyZmFjZVR5cGUsIHB0ckluZm9Pckhh
bmRsZSkgewotICAgIHRoaXMudmVyc2lvbiA9IDA7Ci0KLSAgICB0aGlzLmludGVyZmFjZVR5cGVf
ID0gaW50ZXJmYWNlVHlwZTsKLSAgICB0aGlzLnJvdXRlcl8gPSBudWxsOwotICAgIHRoaXMuaW50
ZXJmYWNlRW5kcG9pbnRDbGllbnRfID0gbnVsbDsKLSAgICB0aGlzLnByb3h5XyA9IG51bGw7Ci0K
LSAgICAvLyB8cm91dGVyX3wgYW5kIHxpbnRlcmZhY2VFbmRwb2ludENsaWVudF98IGFyZSBsYXpp
bHkgaW5pdGlhbGl6ZWQuCi0gICAgLy8gfGhhbmRsZV98IGlzIHZhbGlkIGJldHdlZW4gYmluZCgp
IGFuZAotICAgIC8vIHRoZSBpbml0aWFsaXphdGlvbiBvZiB8cm91dGVyX3wgYW5kIHxpbnRlcmZh
Y2VFbmRwb2ludENsaWVudF98LgotICAgIHRoaXMuaGFuZGxlXyA9IG51bGw7Ci0KLSAgICBpZiAo
cHRySW5mb09ySGFuZGxlKQotICAgICAgdGhpcy5iaW5kKHB0ckluZm9PckhhbmRsZSk7Ci0gIH0K
LQotICBJbnRlcmZhY2VQdHJDb250cm9sbGVyLnByb3RvdHlwZS5iaW5kID0gZnVuY3Rpb24ocHRy
SW5mb09ySGFuZGxlKSB7Ci0gICAgdGhpcy5yZXNldCgpOwotCi0gICAgaWYgKHB0ckluZm9Pckhh
bmRsZSBpbnN0YW5jZW9mIG1vam8uSW50ZXJmYWNlUHRySW5mbykgewotICAgICAgdGhpcy52ZXJz
aW9uID0gcHRySW5mb09ySGFuZGxlLnZlcnNpb247Ci0gICAgICB0aGlzLmhhbmRsZV8gPSBwdHJJ
bmZvT3JIYW5kbGUuaGFuZGxlOwotICAgIH0gZWxzZSB7Ci0gICAgICB0aGlzLmhhbmRsZV8gPSBw
dHJJbmZvT3JIYW5kbGU7Ci0gICAgfQotICB9OwotCi0gIEludGVyZmFjZVB0ckNvbnRyb2xsZXIu
cHJvdG90eXBlLmlzQm91bmQgPSBmdW5jdGlvbigpIHsKLSAgICByZXR1cm4gdGhpcy5pbnRlcmZh
Y2VFbmRwb2ludENsaWVudF8gIT09IG51bGwgfHwgdGhpcy5oYW5kbGVfICE9PSBudWxsOwotICB9
OwotCi0gIC8vIEFsdGhvdWdoIHVzZXJzIGNvdWxkIGp1c3QgZGlzY2FyZCB0aGUgb2JqZWN0LCBy
ZXNldCgpIGNsb3NlcyB0aGUgcGlwZQotICAvLyBpbW1lZGlhdGVseS4KLSAgSW50ZXJmYWNlUHRy
Q29udHJvbGxlci5wcm90b3R5cGUucmVzZXQgPSBmdW5jdGlvbigpIHsKLSAgICB0aGlzLnZlcnNp
b24gPSAwOwotICAgIGlmICh0aGlzLmludGVyZmFjZUVuZHBvaW50Q2xpZW50XykgewotICAgICAg
dGhpcy5pbnRlcmZhY2VFbmRwb2ludENsaWVudF8uY2xvc2UoKTsKLSAgICAgIHRoaXMuaW50ZXJm
YWNlRW5kcG9pbnRDbGllbnRfID0gbnVsbDsKLSAgICB9Ci0gICAgaWYgKHRoaXMucm91dGVyXykg
ewotICAgICAgdGhpcy5yb3V0ZXJfLmNsb3NlKCk7Ci0gICAgICB0aGlzLnJvdXRlcl8gPSBudWxs
OwotCi0gICAgICB0aGlzLnByb3h5XyA9IG51bGw7Ci0gICAgfQotICAgIGlmICh0aGlzLmhhbmRs
ZV8pIHsKLSAgICAgIHRoaXMuaGFuZGxlXy5jbG9zZSgpOwotICAgICAgdGhpcy5oYW5kbGVfID0g
bnVsbDsKLSAgICB9Ci0gIH07Ci0KLSAgSW50ZXJmYWNlUHRyQ29udHJvbGxlci5wcm90b3R5cGUu
cmVzZXRXaXRoUmVhc29uID0gZnVuY3Rpb24ocmVhc29uKSB7Ci0gICAgaWYgKHRoaXMuaXNCb3Vu
ZCgpKSB7Ci0gICAgICB0aGlzLmNvbmZpZ3VyZVByb3h5SWZOZWNlc3NhcnlfKCk7Ci0gICAgICB0
aGlzLmludGVyZmFjZUVuZHBvaW50Q2xpZW50Xy5jbG9zZShyZWFzb24pOwotICAgICAgdGhpcy5p
bnRlcmZhY2VFbmRwb2ludENsaWVudF8gPSBudWxsOwotICAgIH0KLSAgICB0aGlzLnJlc2V0KCk7
Ci0gIH07Ci0KLSAgSW50ZXJmYWNlUHRyQ29udHJvbGxlci5wcm90b3R5cGUuc2V0Q29ubmVjdGlv
bkVycm9ySGFuZGxlciA9IGZ1bmN0aW9uKAotICAgICAgY2FsbGJhY2spIHsKLSAgICBpZiAoIXRo
aXMuaXNCb3VuZCgpKQotICAgICAgdGhyb3cgbmV3IEVycm9yKCJDYW5ub3Qgc2V0IGNvbm5lY3Rp
b24gZXJyb3IgaGFuZGxlciBpZiBub3QgYm91bmQuIik7Ci0KLSAgICB0aGlzLmNvbmZpZ3VyZVBy
b3h5SWZOZWNlc3NhcnlfKCk7Ci0gICAgdGhpcy5pbnRlcmZhY2VFbmRwb2ludENsaWVudF8uc2V0
Q29ubmVjdGlvbkVycm9ySGFuZGxlcihjYWxsYmFjayk7Ci0gIH07Ci0KLSAgSW50ZXJmYWNlUHRy
Q29udHJvbGxlci5wcm90b3R5cGUucGFzc0ludGVyZmFjZSA9IGZ1bmN0aW9uKCkgewotICAgIHZh
ciByZXN1bHQ7Ci0gICAgaWYgKHRoaXMucm91dGVyXykgewotICAgICAgLy8gVE9ETyh5enNoZW4p
OiBGaXggUm91dGVyIGludGVyZmFjZSB0byBzdXBwb3J0IGV4dHJhY3RpbmcgaGFuZGxlLgotICAg
ICAgcmVzdWx0ID0gbmV3IG1vam8uSW50ZXJmYWNlUHRySW5mbygKLSAgICAgICAgICB0aGlzLnJv
dXRlcl8uY29ubmVjdG9yXy5oYW5kbGVfLCB0aGlzLnZlcnNpb24pOwotICAgICAgdGhpcy5yb3V0
ZXJfLmNvbm5lY3Rvcl8uaGFuZGxlXyA9IG51bGw7Ci0gICAgfSBlbHNlIHsKLSAgICAgIC8vIFRo
aXMgYWxzbyBoYW5kbGVzIHRoZSBjYXNlIHdoZW4gdGhpcyBvYmplY3QgaXMgbm90IGJvdW5kLgot
ICAgICAgcmVzdWx0ID0gbmV3IG1vam8uSW50ZXJmYWNlUHRySW5mbyh0aGlzLmhhbmRsZV8sIHRo
aXMudmVyc2lvbik7Ci0gICAgICB0aGlzLmhhbmRsZV8gPSBudWxsOwotICAgIH0KLQotICAgIHRo
aXMucmVzZXQoKTsKLSAgICByZXR1cm4gcmVzdWx0OwotICB9OwotCi0gIEludGVyZmFjZVB0ckNv
bnRyb2xsZXIucHJvdG90eXBlLmdldFByb3h5ID0gZnVuY3Rpb24oKSB7Ci0gICAgdGhpcy5jb25m
aWd1cmVQcm94eUlmTmVjZXNzYXJ5XygpOwotICAgIHJldHVybiB0aGlzLnByb3h5XzsKLSAgfTsK
LQotICBJbnRlcmZhY2VQdHJDb250cm9sbGVyLnByb3RvdHlwZS5jb25maWd1cmVQcm94eUlmTmVj
ZXNzYXJ5XyA9IGZ1bmN0aW9uKCkgewotICAgIGlmICghdGhpcy5oYW5kbGVfKQotICAgICAgcmV0
dXJuOwotCi0gICAgdGhpcy5yb3V0ZXJfID0gbmV3IGludGVybmFsLlJvdXRlcih0aGlzLmhhbmRs
ZV8sIHRydWUpOwotICAgIHRoaXMuaGFuZGxlXyA9IG51bGw7Ci0KLSAgICB0aGlzLmludGVyZmFj
ZUVuZHBvaW50Q2xpZW50XyA9IG5ldyBpbnRlcm5hbC5JbnRlcmZhY2VFbmRwb2ludENsaWVudCgK
LSAgICAgICAgdGhpcy5yb3V0ZXJfLmNyZWF0ZUxvY2FsRW5kcG9pbnRIYW5kbGUoaW50ZXJuYWwu
a01hc3RlckludGVyZmFjZUlkKSk7Ci0KLSAgICB0aGlzLmludGVyZmFjZUVuZHBvaW50Q2xpZW50
XyAuc2V0UGF5bG9hZFZhbGlkYXRvcnMoWwotICAgICAgICB0aGlzLmludGVyZmFjZVR5cGVfLnZh
bGlkYXRlUmVzcG9uc2VdKTsKLSAgICB0aGlzLnByb3h5XyA9IG5ldyB0aGlzLmludGVyZmFjZVR5
cGVfLnByb3h5Q2xhc3MoCi0gICAgICAgIHRoaXMuaW50ZXJmYWNlRW5kcG9pbnRDbGllbnRfKTsK
LSAgfTsKLQotICBJbnRlcmZhY2VQdHJDb250cm9sbGVyLnByb3RvdHlwZS5xdWVyeVZlcnNpb24g
PSBmdW5jdGlvbigpIHsKLSAgICBmdW5jdGlvbiBvblF1ZXJ5VmVyc2lvbih2ZXJzaW9uKSB7Ci0g
ICAgICB0aGlzLnZlcnNpb24gPSB2ZXJzaW9uOwotICAgICAgcmV0dXJuIHZlcnNpb247Ci0gICAg
fQotCi0gICAgdGhpcy5jb25maWd1cmVQcm94eUlmTmVjZXNzYXJ5XygpOwotICAgIHJldHVybiB0
aGlzLmludGVyZmFjZUVuZHBvaW50Q2xpZW50Xy5xdWVyeVZlcnNpb24oKS50aGVuKAotICAgICAg
b25RdWVyeVZlcnNpb24uYmluZCh0aGlzKSk7Ci0gIH07Ci0KLSAgSW50ZXJmYWNlUHRyQ29udHJv
bGxlci5wcm90b3R5cGUucmVxdWlyZVZlcnNpb24gPSBmdW5jdGlvbih2ZXJzaW9uKSB7Ci0gICAg
dGhpcy5jb25maWd1cmVQcm94eUlmTmVjZXNzYXJ5XygpOwotCi0gICAgaWYgKHRoaXMudmVyc2lv
biA+PSB2ZXJzaW9uKSB7Ci0gICAgICByZXR1cm47Ci0gICAgfQotICAgIHRoaXMudmVyc2lvbiA9
IHZlcnNpb247Ci0gICAgdGhpcy5pbnRlcmZhY2VFbmRwb2ludENsaWVudF8ucmVxdWlyZVZlcnNp
b24odmVyc2lvbik7Ci0gIH07Ci0KLSAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLSAgLy8gfHJl
cXVlc3R8IGNvdWxkIGJlIG9taXR0ZWQgYW5kIHBhc3NlZCBpbnRvIGJpbmQoKSBsYXRlci4KLSAg
Ly8KLSAgLy8gRXhhbXBsZToKLSAgLy8KLSAgLy8gICAgLy8gRm9vSW1wbCBpbXBsZW1lbnRzIG1v
am9tLkZvby4KLSAgLy8gICAgZnVuY3Rpb24gRm9vSW1wbCgpIHsgLi4uIH0KLSAgLy8gICAgRm9v
SW1wbC5wcm90b3R5cGUuZm9vTWV0aG9kMSA9IGZ1bmN0aW9uKCkgeyAuLi4gfQotICAvLyAgICBG
b29JbXBsLnByb3RvdHlwZS5mb29NZXRob2QyID0gZnVuY3Rpb24oKSB7IC4uLiB9Ci0gIC8vCi0g
IC8vICAgIHZhciBmb29QdHIgPSBuZXcgbW9qb20uRm9vUHRyKCk7Ci0gIC8vICAgIHZhciByZXF1
ZXN0ID0gbWFrZVJlcXVlc3QoZm9vUHRyKTsKLSAgLy8gICAgdmFyIGJpbmRpbmcgPSBuZXcgQmlu
ZGluZyhtb2pvbS5Gb28sIG5ldyBGb29JbXBsKCksIHJlcXVlc3QpOwotICAvLyAgICBmb29QdHIu
Zm9vTWV0aG9kMSgpOwotICBmdW5jdGlvbiBCaW5kaW5nKGludGVyZmFjZVR5cGUsIGltcGwsIHJl
cXVlc3RPckhhbmRsZSkgewotICAgIHRoaXMuaW50ZXJmYWNlVHlwZV8gPSBpbnRlcmZhY2VUeXBl
OwotICAgIHRoaXMuaW1wbF8gPSBpbXBsOwotICAgIHRoaXMucm91dGVyXyA9IG51bGw7Ci0gICAg
dGhpcy5pbnRlcmZhY2VFbmRwb2ludENsaWVudF8gPSBudWxsOwotICAgIHRoaXMuc3R1Yl8gPSBu
dWxsOwotCi0gICAgaWYgKHJlcXVlc3RPckhhbmRsZSkKLSAgICAgIHRoaXMuYmluZChyZXF1ZXN0
T3JIYW5kbGUpOwotICB9Ci0KLSAgQmluZGluZy5wcm90b3R5cGUuaXNCb3VuZCA9IGZ1bmN0aW9u
KCkgewotICAgIHJldHVybiB0aGlzLnJvdXRlcl8gIT09IG51bGw7Ci0gIH07Ci0KLSAgQmluZGlu
Zy5wcm90b3R5cGUuY3JlYXRlSW50ZXJmYWNlUHRyQW5kQmluZCA9IGZ1bmN0aW9uKCkgewotICAg
IHZhciBwdHIgPSBuZXcgdGhpcy5pbnRlcmZhY2VUeXBlXy5wdHJDbGFzcygpOwotICAgIC8vIFRP
RE8oeXpzaGVuKTogU2V0IHRoZSB2ZXJzaW9uIG9mIHRoZSBpbnRlcmZhY2UgcG9pbnRlci4KLSAg
ICB0aGlzLmJpbmQobWFrZVJlcXVlc3QocHRyKSk7Ci0gICAgcmV0dXJuIHB0cjsKLSAgfTsKLQot
ICBCaW5kaW5nLnByb3RvdHlwZS5iaW5kID0gZnVuY3Rpb24ocmVxdWVzdE9ySGFuZGxlKSB7Ci0g
ICAgdGhpcy5jbG9zZSgpOwotCi0gICAgdmFyIGhhbmRsZSA9IHJlcXVlc3RPckhhbmRsZSBpbnN0
YW5jZW9mIG1vam8uSW50ZXJmYWNlUmVxdWVzdCA/Ci0gICAgICAgIHJlcXVlc3RPckhhbmRsZS5o
YW5kbGUgOiByZXF1ZXN0T3JIYW5kbGU7Ci0gICAgaWYgKCEoaGFuZGxlIGluc3RhbmNlb2YgTW9q
b0hhbmRsZSkpCi0gICAgICByZXR1cm47Ci0KLSAgICB0aGlzLnJvdXRlcl8gPSBuZXcgaW50ZXJu
YWwuUm91dGVyKGhhbmRsZSk7Ci0KLSAgICB0aGlzLnN0dWJfID0gbmV3IHRoaXMuaW50ZXJmYWNl
VHlwZV8uc3R1YkNsYXNzKHRoaXMuaW1wbF8pOwotICAgIHRoaXMuaW50ZXJmYWNlRW5kcG9pbnRD
bGllbnRfID0gbmV3IGludGVybmFsLkludGVyZmFjZUVuZHBvaW50Q2xpZW50KAotICAgICAgICB0
aGlzLnJvdXRlcl8uY3JlYXRlTG9jYWxFbmRwb2ludEhhbmRsZShpbnRlcm5hbC5rTWFzdGVySW50
ZXJmYWNlSWQpLAotICAgICAgICB0aGlzLnN0dWJfLCB0aGlzLmludGVyZmFjZVR5cGVfLmtWZXJz
aW9uKTsKLQotICAgIHRoaXMuaW50ZXJmYWNlRW5kcG9pbnRDbGllbnRfIC5zZXRQYXlsb2FkVmFs
aWRhdG9ycyhbCi0gICAgICAgIHRoaXMuaW50ZXJmYWNlVHlwZV8udmFsaWRhdGVSZXF1ZXN0XSk7
Ci0gIH07Ci0KLSAgQmluZGluZy5wcm90b3R5cGUuY2xvc2UgPSBmdW5jdGlvbigpIHsKLSAgICBp
ZiAoIXRoaXMuaXNCb3VuZCgpKQotICAgICAgcmV0dXJuOwotCi0gICAgaWYgKHRoaXMuaW50ZXJm
YWNlRW5kcG9pbnRDbGllbnRfKSB7Ci0gICAgICB0aGlzLmludGVyZmFjZUVuZHBvaW50Q2xpZW50
Xy5jbG9zZSgpOwotICAgICAgdGhpcy5pbnRlcmZhY2VFbmRwb2ludENsaWVudF8gPSBudWxsOwot
ICAgIH0KLQotICAgIHRoaXMucm91dGVyXy5jbG9zZSgpOwotICAgIHRoaXMucm91dGVyXyA9IG51
bGw7Ci0gICAgdGhpcy5zdHViXyA9IG51bGw7Ci0gIH07Ci0KLSAgQmluZGluZy5wcm90b3R5cGUu
Y2xvc2VXaXRoUmVhc29uID0gZnVuY3Rpb24ocmVhc29uKSB7Ci0gICAgaWYgKHRoaXMuaW50ZXJm
YWNlRW5kcG9pbnRDbGllbnRfKSB7Ci0gICAgICB0aGlzLmludGVyZmFjZUVuZHBvaW50Q2xpZW50
Xy5jbG9zZShyZWFzb24pOwotICAgICAgdGhpcy5pbnRlcmZhY2VFbmRwb2ludENsaWVudF8gPSBu
dWxsOwotICAgIH0KLSAgICB0aGlzLmNsb3NlKCk7Ci0gIH07Ci0KLSAgQmluZGluZy5wcm90b3R5
cGUuc2V0Q29ubmVjdGlvbkVycm9ySGFuZGxlciA9IGZ1bmN0aW9uKGNhbGxiYWNrKSB7Ci0gICAg
aWYgKCF0aGlzLmlzQm91bmQoKSkgewotICAgICAgdGhyb3cgbmV3IEVycm9yKCJDYW5ub3Qgc2V0
IGNvbm5lY3Rpb24gZXJyb3IgaGFuZGxlciBpZiBub3QgYm91bmQuIik7Ci0gICAgfQotICAgIHRo
aXMuaW50ZXJmYWNlRW5kcG9pbnRDbGllbnRfLnNldENvbm5lY3Rpb25FcnJvckhhbmRsZXIoY2Fs
bGJhY2spOwotICB9OwotCi0gIEJpbmRpbmcucHJvdG90eXBlLnVuYmluZCA9IGZ1bmN0aW9uKCkg
ewotICAgIGlmICghdGhpcy5pc0JvdW5kKCkpCi0gICAgICByZXR1cm4gbmV3IG1vam8uSW50ZXJm
YWNlUmVxdWVzdChudWxsKTsKLQotICAgIHZhciByZXN1bHQgPSBuZXcgbW9qby5JbnRlcmZhY2VS
ZXF1ZXN0KHRoaXMucm91dGVyXy5jb25uZWN0b3JfLmhhbmRsZV8pOwotICAgIHRoaXMucm91dGVy
Xy5jb25uZWN0b3JfLmhhbmRsZV8gPSBudWxsOwotICAgIHRoaXMuY2xvc2UoKTsKLSAgICByZXR1
cm4gcmVzdWx0OwotICB9OwotCi0gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0gIGZ1bmN0aW9u
IEJpbmRpbmdTZXRFbnRyeShiaW5kaW5nU2V0LCBpbnRlcmZhY2VUeXBlLCBiaW5kaW5nVHlwZSwg
aW1wbCwKLSAgICAgIHJlcXVlc3RPckhhbmRsZSwgYmluZGluZ0lkKSB7Ci0gICAgdGhpcy5iaW5k
aW5nU2V0XyA9IGJpbmRpbmdTZXQ7Ci0gICAgdGhpcy5iaW5kaW5nSWRfID0gYmluZGluZ0lkOwot
ICAgIHRoaXMuYmluZGluZ18gPSBuZXcgYmluZGluZ1R5cGUoaW50ZXJmYWNlVHlwZSwgaW1wbCwK
LSAgICAgICAgcmVxdWVzdE9ySGFuZGxlKTsKLQotICAgIHRoaXMuYmluZGluZ18uc2V0Q29ubmVj
dGlvbkVycm9ySGFuZGxlcihmdW5jdGlvbihyZWFzb24pIHsKLSAgICAgIHRoaXMuYmluZGluZ1Nl
dF8ub25Db25uZWN0aW9uRXJyb3IoYmluZGluZ0lkLCByZWFzb24pOwotICAgIH0uYmluZCh0aGlz
KSk7Ci0gIH0KLQotICBCaW5kaW5nU2V0RW50cnkucHJvdG90eXBlLmNsb3NlID0gZnVuY3Rpb24o
KSB7Ci0gICAgdGhpcy5iaW5kaW5nXy5jbG9zZSgpOwotICB9OwotCi0gIGZ1bmN0aW9uIEJpbmRp
bmdTZXQoaW50ZXJmYWNlVHlwZSkgewotICAgIHRoaXMuaW50ZXJmYWNlVHlwZV8gPSBpbnRlcmZh
Y2VUeXBlOwotICAgIHRoaXMubmV4dEJpbmRpbmdJZF8gPSAwOwotICAgIHRoaXMuYmluZGluZ3Nf
ID0gbmV3IE1hcCgpOwotICAgIHRoaXMuZXJyb3JIYW5kbGVyXyA9IG51bGw7Ci0gICAgdGhpcy5i
aW5kaW5nVHlwZV8gPSBCaW5kaW5nOwotICB9Ci0KLSAgQmluZGluZ1NldC5wcm90b3R5cGUuaXNF
bXB0eSA9IGZ1bmN0aW9uKCkgewotICAgIHJldHVybiB0aGlzLmJpbmRpbmdzXy5zaXplID09IDA7
Ci0gIH07Ci0KLSAgQmluZGluZ1NldC5wcm90b3R5cGUuYWRkQmluZGluZyA9IGZ1bmN0aW9uKGlt
cGwsIHJlcXVlc3RPckhhbmRsZSkgewotICAgIHRoaXMuYmluZGluZ3NfLnNldCgKLSAgICAgICAg
dGhpcy5uZXh0QmluZGluZ0lkXywKLSAgICAgICAgbmV3IEJpbmRpbmdTZXRFbnRyeSh0aGlzLCB0
aGlzLmludGVyZmFjZVR5cGVfLCB0aGlzLmJpbmRpbmdUeXBlXywgaW1wbCwKLSAgICAgICAgICAg
IHJlcXVlc3RPckhhbmRsZSwgdGhpcy5uZXh0QmluZGluZ0lkXykpOwotICAgICsrdGhpcy5uZXh0
QmluZGluZ0lkXzsKLSAgfTsKLQotICBCaW5kaW5nU2V0LnByb3RvdHlwZS5jbG9zZUFsbEJpbmRp
bmdzID0gZnVuY3Rpb24oKSB7Ci0gICAgZm9yICh2YXIgZW50cnkgb2YgdGhpcy5iaW5kaW5nc18u
dmFsdWVzKCkpCi0gICAgICBlbnRyeS5jbG9zZSgpOwotICAgIHRoaXMuYmluZGluZ3NfLmNsZWFy
KCk7Ci0gIH07Ci0KLSAgQmluZGluZ1NldC5wcm90b3R5cGUuc2V0Q29ubmVjdGlvbkVycm9ySGFu
ZGxlciA9IGZ1bmN0aW9uKGNhbGxiYWNrKSB7Ci0gICAgdGhpcy5lcnJvckhhbmRsZXJfID0gY2Fs
bGJhY2s7Ci0gIH07Ci0KLSAgQmluZGluZ1NldC5wcm90b3R5cGUub25Db25uZWN0aW9uRXJyb3Ig
PSBmdW5jdGlvbihiaW5kaW5nSWQsIHJlYXNvbikgewotICAgIHRoaXMuYmluZGluZ3NfLmRlbGV0
ZShiaW5kaW5nSWQpOwotCi0gICAgaWYgKHRoaXMuZXJyb3JIYW5kbGVyXykKLSAgICAgIHRoaXMu
ZXJyb3JIYW5kbGVyXyhyZWFzb24pOwotICB9OwotCi0gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQot
Ci0gIC8vIE9wZXJhdGlvbnMgdXNlZCB0byBzZXR1cC9jb25maWd1cmUgYW4gYXNzb2NpYXRlZCBp
bnRlcmZhY2UgcG9pbnRlci4KLSAgLy8gRXhwb3NlZCBhcyB8cHRyfCBmaWVsZCBvZiBnZW5lcmF0
ZWQgYXNzb2NpYXRlZCBpbnRlcmZhY2UgcG9pbnRlciBjbGFzc2VzLgotICAvLyB8YXNzb2NpYXRl
ZFB0ckluZm98IGNvdWxkIGJlIG9taXR0ZWQgYW5kIHBhc3NlZCBpbnRvIGJpbmQoKSBsYXRlci4K
LSAgLy8KLSAgLy8gRXhhbXBsZToKLSAgLy8gICAgLy8gSW50ZWdlclNlbmRlckltcGwgaW1wbGVt
ZW50cyBtb2pvbS5JbnRlZ2VyU2VuZGVyCi0gIC8vICAgIGZ1bmN0aW9uIEludGVnZXJTZW5kZXJJ
bXBsKCkgeyAuLi4gfQotICAvLyAgICBJbnRlZ2VyU2VuZGVySW1wbC5wcm90b3R5cGUuZWNobyA9
IGZ1bmN0aW9uKCkgeyAuLi4gfQotICAvLwotICAvLyAgICAvLyBJbnRlZ2VyU2VuZGVyQ29ubmVj
dGlvbkltcGwgaW1wbGVtZW50cyBtb2pvbS5JbnRlZ2VyU2VuZGVyQ29ubmVjdGlvbgotICAvLyAg
ICBmdW5jdGlvbiBJbnRlZ2VyU2VuZGVyQ29ubmVjdGlvbkltcGwoKSB7Ci0gIC8vICAgICAgdGhp
cy5zZW5kZXJCaW5kaW5nXyA9IG51bGw7Ci0gIC8vICAgIH0KLSAgLy8gICAgSW50ZWdlclNlbmRl
ckNvbm5lY3Rpb25JbXBsLnByb3RvdHlwZS5nZXRTZW5kZXIgPSBmdW5jdGlvbigKLSAgLy8gICAg
ICAgIGFzc29jaWF0ZWRSZXF1ZXN0KSB7Ci0gIC8vICAgICAgdGhpcy5zZW5kZXJCaW5kaW5nXyA9
IG5ldyBBc3NvY2lhdGVkQmluZGluZyhtb2pvbS5JbnRlZ2VyU2VuZGVyLAotICAvLyAgICAgICAg
ICBuZXcgSW50ZWdlclNlbmRlckltcGwoKSwKLSAgLy8gICAgICAgICAgYXNzb2NpYXRlZFJlcXVl
c3QpOwotICAvLyAgICB9Ci0gIC8vCi0gIC8vICAgIHZhciBpbnRlZ2VyU2VuZGVyQ29ubmVjdGlv
biA9IG5ldyBtb2pvbS5JbnRlZ2VyU2VuZGVyQ29ubmVjdGlvblB0cigpOwotICAvLyAgICB2YXIg
aW50ZWdlclNlbmRlckNvbm5lY3Rpb25CaW5kaW5nID0gbmV3IEJpbmRpbmcoCi0gIC8vICAgICAg
ICBtb2pvbS5JbnRlZ2VyU2VuZGVyQ29ubmVjdGlvbiwKLSAgLy8gICAgICAgIG5ldyBJbnRlZ2Vy
U2VuZGVyQ29ubmVjdGlvbkltcGwoKSwKLSAgLy8gICAgICAgIG1vam8ubWFrZVJlcXVlc3QoaW50
ZWdlclNlbmRlckNvbm5lY3Rpb24pKTsKLSAgLy8KLSAgLy8gICAgLy8gQSBsb2NhbGx5LWNyZWF0
ZWQgYXNzb2NpYXRlZCBpbnRlcmZhY2UgcG9pbnRlciBjYW4gb25seSBiZSB1c2VkIHRvCi0gIC8v
ICAgIC8vIG1ha2UgY2FsbHMgd2hlbiB0aGUgY29ycmVzcG9uZGluZyBhc3NvY2lhdGVkIHJlcXVl
c3QgaXMgc2VudCBvdmVyCi0gIC8vICAgIC8vIGFub3RoZXIgaW50ZXJmYWNlIChlaXRoZXIgdGhl
IG1hc3RlciBpbnRlcmZhY2Ugb3IgYW5vdGhlcgotICAvLyAgICAvLyBhc3NvY2lhdGVkIGludGVy
ZmFjZSkuCi0gIC8vICAgIHZhciBhc3NvY2lhdGVkSW50ZXJmYWNlUHRySW5mbyA9IG5ldyBBc3Nv
Y2lhdGVkSW50ZXJmYWNlUHRySW5mbygpOwotICAvLyAgICB2YXIgYXNzb2NpYXRlZFJlcXVlc3Qg
PSBtYWtlUmVxdWVzdChpbnRlcmZhY2VQdHJJbmZvKTsKLSAgLy8KLSAgLy8gICAgaW50ZWdlclNl
bmRlckNvbm5lY3Rpb24uZ2V0U2VuZGVyKGFzc29jaWF0ZWRSZXF1ZXN0KTsKLSAgLy8KLSAgLy8g
ICAgLy8gQ3JlYXRlIGFuIGFzc29jaWF0ZWQgaW50ZXJmYWNlIGFuZCBiaW5kIHRoZSBhc3NvY2lh
dGVkIGhhbmRsZS4KLSAgLy8gICAgdmFyIGludGVnZXJTZW5kZXIgPSBuZXcgbW9qb20uQXNzb2Np
YXRlZEludGVnZXJTZW5kZXJQdHIoKTsKLSAgLy8gICAgaW50ZWdlclNlbmRlci5wdHIuYmluZChh
c3NvY2lhdGVkSW50ZXJmYWNlUHRySW5mbyk7Ci0gIC8vICAgIGludGVnZXJTZW5kZXIuZWNobygp
OwotCi0gIGZ1bmN0aW9uIEFzc29jaWF0ZWRJbnRlcmZhY2VQdHJDb250cm9sbGVyKGludGVyZmFj
ZVR5cGUsIGFzc29jaWF0ZWRQdHJJbmZvKSB7Ci0gICAgdGhpcy52ZXJzaW9uID0gMDsKLQotICAg
IHRoaXMuaW50ZXJmYWNlVHlwZV8gPSBpbnRlcmZhY2VUeXBlOwotICAgIHRoaXMuaW50ZXJmYWNl
RW5kcG9pbnRDbGllbnRfID0gbnVsbDsKLSAgICB0aGlzLnByb3h5XyA9IG51bGw7Ci0KLSAgICBp
ZiAoYXNzb2NpYXRlZFB0ckluZm8pIHsKLSAgICAgIHRoaXMuYmluZChhc3NvY2lhdGVkUHRySW5m
byk7Ci0gICAgfQotICB9Ci0KLSAgQXNzb2NpYXRlZEludGVyZmFjZVB0ckNvbnRyb2xsZXIucHJv
dG90eXBlLmJpbmQgPSBmdW5jdGlvbigKLSAgICAgIGFzc29jaWF0ZWRQdHJJbmZvKSB7Ci0gICAg
dGhpcy5yZXNldCgpOwotICAgIHRoaXMudmVyc2lvbiA9IGFzc29jaWF0ZWRQdHJJbmZvLnZlcnNp
b247Ci0KLSAgICB0aGlzLmludGVyZmFjZUVuZHBvaW50Q2xpZW50XyA9IG5ldyBpbnRlcm5hbC5J
bnRlcmZhY2VFbmRwb2ludENsaWVudCgKLSAgICAgICAgYXNzb2NpYXRlZFB0ckluZm8uaW50ZXJm
YWNlRW5kcG9pbnRIYW5kbGUpOwotCi0gICAgdGhpcy5pbnRlcmZhY2VFbmRwb2ludENsaWVudF8g
LnNldFBheWxvYWRWYWxpZGF0b3JzKFsKLSAgICAgICAgdGhpcy5pbnRlcmZhY2VUeXBlXy52YWxp
ZGF0ZVJlc3BvbnNlXSk7Ci0gICAgdGhpcy5wcm94eV8gPSBuZXcgdGhpcy5pbnRlcmZhY2VUeXBl
Xy5wcm94eUNsYXNzKAotICAgICAgICB0aGlzLmludGVyZmFjZUVuZHBvaW50Q2xpZW50Xyk7Ci0g
IH07Ci0KLSAgQXNzb2NpYXRlZEludGVyZmFjZVB0ckNvbnRyb2xsZXIucHJvdG90eXBlLmlzQm91
bmQgPSBmdW5jdGlvbigpIHsKLSAgICByZXR1cm4gdGhpcy5pbnRlcmZhY2VFbmRwb2ludENsaWVu
dF8gIT09IG51bGw7Ci0gIH07Ci0KLSAgQXNzb2NpYXRlZEludGVyZmFjZVB0ckNvbnRyb2xsZXIu
cHJvdG90eXBlLnJlc2V0ID0gZnVuY3Rpb24oKSB7Ci0gICAgdGhpcy52ZXJzaW9uID0gMDsKLSAg
ICBpZiAodGhpcy5pbnRlcmZhY2VFbmRwb2ludENsaWVudF8pIHsKLSAgICAgIHRoaXMuaW50ZXJm
YWNlRW5kcG9pbnRDbGllbnRfLmNsb3NlKCk7Ci0gICAgICB0aGlzLmludGVyZmFjZUVuZHBvaW50
Q2xpZW50XyA9IG51bGw7Ci0gICAgfQotICAgIGlmICh0aGlzLnByb3h5XykgewotICAgICAgdGhp
cy5wcm94eV8gPSBudWxsOwotICAgIH0KLSAgfTsKLQotICBBc3NvY2lhdGVkSW50ZXJmYWNlUHRy
Q29udHJvbGxlci5wcm90b3R5cGUucmVzZXRXaXRoUmVhc29uID0gZnVuY3Rpb24oCi0gICAgICBy
ZWFzb24pIHsKLSAgICBpZiAodGhpcy5pc0JvdW5kKCkpIHsKLSAgICAgIHRoaXMuaW50ZXJmYWNl
RW5kcG9pbnRDbGllbnRfLmNsb3NlKHJlYXNvbik7Ci0gICAgICB0aGlzLmludGVyZmFjZUVuZHBv
aW50Q2xpZW50XyA9IG51bGw7Ci0gICAgfQotICAgIHRoaXMucmVzZXQoKTsKLSAgfTsKLQotICAv
LyBJbmRpY2F0ZXMgd2hldGhlciBhbiBlcnJvciBoYXMgYmVlbiBlbmNvdW50ZXJlZC4gSWYgdHJ1
ZSwgbWV0aG9kIGNhbGxzCi0gIC8vIG9uIHRoaXMgaW50ZXJmYWNlIHdpbGwgYmUgZHJvcHBlZCAo
YW5kIG1heSBhbHJlYWR5IGhhdmUgYmVlbiBkcm9wcGVkKS4KLSAgQXNzb2NpYXRlZEludGVyZmFj
ZVB0ckNvbnRyb2xsZXIucHJvdG90eXBlLmdldEVuY291bnRlcmVkRXJyb3IgPSBmdW5jdGlvbigp
IHsKLSAgICByZXR1cm4gdGhpcy5pbnRlcmZhY2VFbmRwb2ludENsaWVudF8gPwotICAgICAgICB0
aGlzLmludGVyZmFjZUVuZHBvaW50Q2xpZW50Xy5nZXRFbmNvdW50ZXJlZEVycm9yKCkgOiBmYWxz
ZTsKLSAgfTsKLQotICBBc3NvY2lhdGVkSW50ZXJmYWNlUHRyQ29udHJvbGxlci5wcm90b3R5cGUu
c2V0Q29ubmVjdGlvbkVycm9ySGFuZGxlciA9Ci0gICAgICBmdW5jdGlvbihjYWxsYmFjaykgewot
ICAgIGlmICghdGhpcy5pc0JvdW5kKCkpIHsKLSAgICAgIHRocm93IG5ldyBFcnJvcigiQ2Fubm90
IHNldCBjb25uZWN0aW9uIGVycm9yIGhhbmRsZXIgaWYgbm90IGJvdW5kLiIpOwotICAgIH0KLQot
ICAgIHRoaXMuaW50ZXJmYWNlRW5kcG9pbnRDbGllbnRfLnNldENvbm5lY3Rpb25FcnJvckhhbmRs
ZXIoY2FsbGJhY2spOwotICB9OwotCi0gIEFzc29jaWF0ZWRJbnRlcmZhY2VQdHJDb250cm9sbGVy
LnByb3RvdHlwZS5wYXNzSW50ZXJmYWNlID0gZnVuY3Rpb24oKSB7Ci0gICAgaWYgKCF0aGlzLmlz
Qm91bmQoKSkgewotICAgICAgcmV0dXJuIG5ldyBtb2pvLkFzc29jaWF0ZWRJbnRlcmZhY2VQdHJJ
bmZvKG51bGwpOwotICAgIH0KLQotICAgIHZhciByZXN1bHQgPSBuZXcgbW9qby5Bc3NvY2lhdGVk
SW50ZXJmYWNlUHRySW5mbygKLSAgICAgICAgdGhpcy5pbnRlcmZhY2VFbmRwb2ludENsaWVudF8u
cGFzc0hhbmRsZSgpLCB0aGlzLnZlcnNpb24pOwotICAgIHRoaXMucmVzZXQoKTsKLSAgICByZXR1
cm4gcmVzdWx0OwotICB9OwotCi0gIEFzc29jaWF0ZWRJbnRlcmZhY2VQdHJDb250cm9sbGVyLnBy
b3RvdHlwZS5nZXRQcm94eSA9IGZ1bmN0aW9uKCkgewotICAgIHJldHVybiB0aGlzLnByb3h5XzsK
LSAgfTsKLQotICBBc3NvY2lhdGVkSW50ZXJmYWNlUHRyQ29udHJvbGxlci5wcm90b3R5cGUucXVl
cnlWZXJzaW9uID0gZnVuY3Rpb24oKSB7Ci0gICAgZnVuY3Rpb24gb25RdWVyeVZlcnNpb24odmVy
c2lvbikgewotICAgICAgdGhpcy52ZXJzaW9uID0gdmVyc2lvbjsKLSAgICAgIHJldHVybiB2ZXJz
aW9uOwotICAgIH0KLQotICAgIHJldHVybiB0aGlzLmludGVyZmFjZUVuZHBvaW50Q2xpZW50Xy5x
dWVyeVZlcnNpb24oKS50aGVuKAotICAgICAgb25RdWVyeVZlcnNpb24uYmluZCh0aGlzKSk7Ci0g
IH07Ci0KLSAgQXNzb2NpYXRlZEludGVyZmFjZVB0ckNvbnRyb2xsZXIucHJvdG90eXBlLnJlcXVp
cmVWZXJzaW9uID0gZnVuY3Rpb24oCi0gICAgICB2ZXJzaW9uKSB7Ci0gICAgaWYgKHRoaXMudmVy
c2lvbiA+PSB2ZXJzaW9uKSB7Ci0gICAgICByZXR1cm47Ci0gICAgfQotICAgIHRoaXMudmVyc2lv
biA9IHZlcnNpb247Ci0gICAgdGhpcy5pbnRlcmZhY2VFbmRwb2ludENsaWVudF8ucmVxdWlyZVZl
cnNpb24odmVyc2lvbik7Ci0gIH07Ci0KLSAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLSAgLy8g
fGFzc29jaWF0ZWRJbnRlcmZhY2VSZXF1ZXN0fCBjb3VsZCBiZSBvbWl0dGVkIGFuZCBwYXNzZWQg
aW50byBiaW5kKCkKLSAgLy8gbGF0ZXIuCi0gIGZ1bmN0aW9uIEFzc29jaWF0ZWRCaW5kaW5nKGlu
dGVyZmFjZVR5cGUsIGltcGwsIGFzc29jaWF0ZWRJbnRlcmZhY2VSZXF1ZXN0KSB7Ci0gICAgdGhp
cy5pbnRlcmZhY2VUeXBlXyA9IGludGVyZmFjZVR5cGU7Ci0gICAgdGhpcy5pbXBsXyA9IGltcGw7
Ci0gICAgdGhpcy5pbnRlcmZhY2VFbmRwb2ludENsaWVudF8gPSBudWxsOwotICAgIHRoaXMuc3R1
Yl8gPSBudWxsOwotCi0gICAgaWYgKGFzc29jaWF0ZWRJbnRlcmZhY2VSZXF1ZXN0KSB7Ci0gICAg
ICB0aGlzLmJpbmQoYXNzb2NpYXRlZEludGVyZmFjZVJlcXVlc3QpOwotICAgIH0KLSAgfQotCi0g
IEFzc29jaWF0ZWRCaW5kaW5nLnByb3RvdHlwZS5pc0JvdW5kID0gZnVuY3Rpb24oKSB7Ci0gICAg
cmV0dXJuIHRoaXMuaW50ZXJmYWNlRW5kcG9pbnRDbGllbnRfICE9PSBudWxsOwotICB9OwotCi0g
IEFzc29jaWF0ZWRCaW5kaW5nLnByb3RvdHlwZS5iaW5kID0gZnVuY3Rpb24oYXNzb2NpYXRlZElu
dGVyZmFjZVJlcXVlc3QpIHsKLSAgICB0aGlzLmNsb3NlKCk7Ci0KLSAgICB0aGlzLnN0dWJfID0g
bmV3IHRoaXMuaW50ZXJmYWNlVHlwZV8uc3R1YkNsYXNzKHRoaXMuaW1wbF8pOwotICAgIHRoaXMu
aW50ZXJmYWNlRW5kcG9pbnRDbGllbnRfID0gbmV3IGludGVybmFsLkludGVyZmFjZUVuZHBvaW50
Q2xpZW50KAotICAgICAgICBhc3NvY2lhdGVkSW50ZXJmYWNlUmVxdWVzdC5pbnRlcmZhY2VFbmRw
b2ludEhhbmRsZSwgdGhpcy5zdHViXywKLSAgICAgICAgdGhpcy5pbnRlcmZhY2VUeXBlXy5rVmVy
c2lvbik7Ci0KLSAgICB0aGlzLmludGVyZmFjZUVuZHBvaW50Q2xpZW50XyAuc2V0UGF5bG9hZFZh
bGlkYXRvcnMoWwotICAgICAgICB0aGlzLmludGVyZmFjZVR5cGVfLnZhbGlkYXRlUmVxdWVzdF0p
OwotICB9OwotCi0KLSAgQXNzb2NpYXRlZEJpbmRpbmcucHJvdG90eXBlLmNsb3NlID0gZnVuY3Rp
b24oKSB7Ci0gICAgaWYgKCF0aGlzLmlzQm91bmQoKSkgewotICAgICAgcmV0dXJuOwotICAgIH0K
LQotICAgIGlmICh0aGlzLmludGVyZmFjZUVuZHBvaW50Q2xpZW50XykgewotICAgICAgdGhpcy5p
bnRlcmZhY2VFbmRwb2ludENsaWVudF8uY2xvc2UoKTsKLSAgICAgIHRoaXMuaW50ZXJmYWNlRW5k
cG9pbnRDbGllbnRfID0gbnVsbDsKLSAgICB9Ci0KLSAgICB0aGlzLnN0dWJfID0gbnVsbDsKLSAg
fTsKLQotICBBc3NvY2lhdGVkQmluZGluZy5wcm90b3R5cGUuY2xvc2VXaXRoUmVhc29uID0gZnVu
Y3Rpb24ocmVhc29uKSB7Ci0gICAgaWYgKHRoaXMuaW50ZXJmYWNlRW5kcG9pbnRDbGllbnRfKSB7
Ci0gICAgICB0aGlzLmludGVyZmFjZUVuZHBvaW50Q2xpZW50Xy5jbG9zZShyZWFzb24pOwotICAg
ICAgdGhpcy5pbnRlcmZhY2VFbmRwb2ludENsaWVudF8gPSBudWxsOwotICAgIH0KLSAgICB0aGlz
LmNsb3NlKCk7Ci0gIH07Ci0KLSAgQXNzb2NpYXRlZEJpbmRpbmcucHJvdG90eXBlLnNldENvbm5l
Y3Rpb25FcnJvckhhbmRsZXIgPSBmdW5jdGlvbihjYWxsYmFjaykgewotICAgIGlmICghdGhpcy5p
c0JvdW5kKCkpIHsKLSAgICAgIHRocm93IG5ldyBFcnJvcigiQ2Fubm90IHNldCBjb25uZWN0aW9u
IGVycm9yIGhhbmRsZXIgaWYgbm90IGJvdW5kLiIpOwotICAgIH0KLSAgICB0aGlzLmludGVyZmFj
ZUVuZHBvaW50Q2xpZW50Xy5zZXRDb25uZWN0aW9uRXJyb3JIYW5kbGVyKGNhbGxiYWNrKTsKLSAg
fTsKLQotICBBc3NvY2lhdGVkQmluZGluZy5wcm90b3R5cGUudW5iaW5kID0gZnVuY3Rpb24oKSB7
Ci0gICAgaWYgKCF0aGlzLmlzQm91bmQoKSkgewotICAgICAgcmV0dXJuIG5ldyBtb2pvLkFzc29j
aWF0ZWRJbnRlcmZhY2VSZXF1ZXN0KG51bGwpOwotICAgIH0KLQotICAgIHZhciByZXN1bHQgPSBu
ZXcgbW9qby5Bc3NvY2lhdGVkSW50ZXJmYWNlUmVxdWVzdCgKLSAgICAgICAgdGhpcy5pbnRlcmZh
Y2VFbmRwb2ludENsaWVudF8ucGFzc0hhbmRsZSgpKTsKLSAgICB0aGlzLmNsb3NlKCk7Ci0gICAg
cmV0dXJuIHJlc3VsdDsKLSAgfTsKLQotICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotICBmdW5j
dGlvbiBBc3NvY2lhdGVkQmluZGluZ1NldChpbnRlcmZhY2VUeXBlKSB7Ci0gICAgbW9qby5CaW5k
aW5nU2V0LmNhbGwodGhpcywgaW50ZXJmYWNlVHlwZSk7Ci0gICAgdGhpcy5iaW5kaW5nVHlwZV8g
PSBBc3NvY2lhdGVkQmluZGluZzsKLSAgfQotCi0gIEFzc29jaWF0ZWRCaW5kaW5nU2V0LnByb3Rv
dHlwZSA9IE9iamVjdC5jcmVhdGUoQmluZGluZ1NldC5wcm90b3R5cGUpOwotICBBc3NvY2lhdGVk
QmluZGluZ1NldC5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBBc3NvY2lhdGVkQmluZGluZ1NldDsK
LQotICBtb2pvLm1ha2VSZXF1ZXN0ID0gbWFrZVJlcXVlc3Q7Ci0gIG1vam8uQXNzb2NpYXRlZElu
dGVyZmFjZVB0ckNvbnRyb2xsZXIgPSBBc3NvY2lhdGVkSW50ZXJmYWNlUHRyQ29udHJvbGxlcjsK
LSAgbW9qby5Bc3NvY2lhdGVkQmluZGluZyA9IEFzc29jaWF0ZWRCaW5kaW5nOwotICBtb2pvLkFz
c29jaWF0ZWRCaW5kaW5nU2V0ID0gQXNzb2NpYXRlZEJpbmRpbmdTZXQ7Ci0gIG1vam8uQmluZGlu
ZyA9IEJpbmRpbmc7Ci0gIG1vam8uQmluZGluZ1NldCA9IEJpbmRpbmdTZXQ7Ci0gIG1vam8uSW50
ZXJmYWNlUHRyQ29udHJvbGxlciA9IEludGVyZmFjZVB0ckNvbnRyb2xsZXI7Ci19KSgpOwotLy8g
Q29weXJpZ2h0IDIwMTYgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBs
aWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotCi0oZnVu
Y3Rpb24oKSB7Ci0gIHZhciBpbnRlcm5hbCA9IG1vam8uaW50ZXJuYWw7Ci0KLSAgLy8gQ29uc3Rh
bnRzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0KLSAgdmFyIGtJbnRlcmZhY2VJZE5hbWVzcGFjZU1hc2sgPSAweDgwMDAwMDAw
OwotICB2YXIga01hc3RlckludGVyZmFjZUlkID0gMHgwMDAwMDAwMDsKLSAgdmFyIGtJbnZhbGlk
SW50ZXJmYWNlSWQgPSAweEZGRkZGRkZGOwotCi0gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0g
IGZ1bmN0aW9uIEludGVyZmFjZVB0ckluZm8oaGFuZGxlLCB2ZXJzaW9uKSB7Ci0gICAgdGhpcy5o
YW5kbGUgPSBoYW5kbGU7Ci0gICAgdGhpcy52ZXJzaW9uID0gdmVyc2lvbjsKLSAgfQotCi0gIElu
dGVyZmFjZVB0ckluZm8ucHJvdG90eXBlLmlzVmFsaWQgPSBmdW5jdGlvbigpIHsKLSAgICByZXR1
cm4gdGhpcy5oYW5kbGUgaW5zdGFuY2VvZiBNb2pvSGFuZGxlOwotICB9OwotCi0gIEludGVyZmFj
ZVB0ckluZm8ucHJvdG90eXBlLmNsb3NlID0gZnVuY3Rpb24oKSB7Ci0gICAgaWYgKCF0aGlzLmlz
VmFsaWQoKSkKLSAgICAgIHJldHVybjsKLQotICAgIHRoaXMuaGFuZGxlLmNsb3NlKCk7Ci0gICAg
dGhpcy5oYW5kbGUgPSBudWxsOwotICAgIHRoaXMudmVyc2lvbiA9IDA7Ci0gIH07Ci0KLSAgZnVu
Y3Rpb24gQXNzb2NpYXRlZEludGVyZmFjZVB0ckluZm8oaW50ZXJmYWNlRW5kcG9pbnRIYW5kbGUs
IHZlcnNpb24pIHsKLSAgICB0aGlzLmludGVyZmFjZUVuZHBvaW50SGFuZGxlID0gaW50ZXJmYWNl
RW5kcG9pbnRIYW5kbGU7Ci0gICAgdGhpcy52ZXJzaW9uID0gdmVyc2lvbjsKLSAgfQotCi0gIEFz
c29jaWF0ZWRJbnRlcmZhY2VQdHJJbmZvLnByb3RvdHlwZS5pc1ZhbGlkID0gZnVuY3Rpb24oKSB7
Ci0gICAgcmV0dXJuIHRoaXMuaW50ZXJmYWNlRW5kcG9pbnRIYW5kbGUuaXNWYWxpZCgpOwotICB9
OwotCi0gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0gIGZ1bmN0aW9uIEludGVyZmFjZVJlcXVl
c3QoaGFuZGxlKSB7Ci0gICAgdGhpcy5oYW5kbGUgPSBoYW5kbGU7Ci0gIH0KLQotICBJbnRlcmZh
Y2VSZXF1ZXN0LnByb3RvdHlwZS5pc1ZhbGlkID0gZnVuY3Rpb24oKSB7Ci0gICAgcmV0dXJuIHRo
aXMuaGFuZGxlIGluc3RhbmNlb2YgTW9qb0hhbmRsZTsKLSAgfTsKLQotICBJbnRlcmZhY2VSZXF1
ZXN0LnByb3RvdHlwZS5jbG9zZSA9IGZ1bmN0aW9uKCkgewotICAgIGlmICghdGhpcy5pc1ZhbGlk
KCkpCi0gICAgICByZXR1cm47Ci0KLSAgICB0aGlzLmhhbmRsZS5jbG9zZSgpOwotICAgIHRoaXMu
aGFuZGxlID0gbnVsbDsKLSAgfTsKLQotICBmdW5jdGlvbiBBc3NvY2lhdGVkSW50ZXJmYWNlUmVx
dWVzdChpbnRlcmZhY2VFbmRwb2ludEhhbmRsZSkgewotICAgIHRoaXMuaW50ZXJmYWNlRW5kcG9p
bnRIYW5kbGUgPSBpbnRlcmZhY2VFbmRwb2ludEhhbmRsZTsKLSAgfQotCi0gIEFzc29jaWF0ZWRJ
bnRlcmZhY2VSZXF1ZXN0LnByb3RvdHlwZS5pc1ZhbGlkID0gZnVuY3Rpb24oKSB7Ci0gICAgcmV0
dXJuIHRoaXMuaW50ZXJmYWNlRW5kcG9pbnRIYW5kbGUuaXNWYWxpZCgpOwotICB9OwotCi0gIEFz
c29jaWF0ZWRJbnRlcmZhY2VSZXF1ZXN0LnByb3RvdHlwZS5yZXNldFdpdGhSZWFzb24gPSBmdW5j
dGlvbihyZWFzb24pIHsKLSAgICB0aGlzLmludGVyZmFjZUVuZHBvaW50SGFuZGxlLnJlc2V0KHJl
YXNvbik7Ci0gIH07Ci0KLSAgZnVuY3Rpb24gaXNNYXN0ZXJJbnRlcmZhY2VJZChpbnRlcmZhY2VJ
ZCkgewotICAgIHJldHVybiBpbnRlcmZhY2VJZCA9PT0ga01hc3RlckludGVyZmFjZUlkOwotICB9
Ci0KLSAgZnVuY3Rpb24gaXNWYWxpZEludGVyZmFjZUlkKGludGVyZmFjZUlkKSB7Ci0gICAgcmV0
dXJuIGludGVyZmFjZUlkICE9PSBrSW52YWxpZEludGVyZmFjZUlkOwotICB9Ci0KLSAgZnVuY3Rp
b24gaGFzSW50ZXJmYWNlSWROYW1lc3BhY2VCaXRTZXQoaW50ZXJmYWNlSWQpIHsKLSAgICBpZiAo
aW50ZXJmYWNlSWQgPj0gMiAqIGtJbnRlcmZhY2VJZE5hbWVzcGFjZU1hc2spIHsKLSAgICAgIHRo
cm93IG5ldyBFcnJvcigiSW50ZXJmYWNlIElEIHNob3VsZCBiZSBhIDMyLWJpdCB1bnNpZ25lZCBp
bnRlZ2VyLiIpOwotICAgIH0KLSAgICByZXR1cm4gaW50ZXJmYWNlSWQgPj0ga0ludGVyZmFjZUlk
TmFtZXNwYWNlTWFzazsKLSAgfQotCi0gIG1vam8uSW50ZXJmYWNlUHRySW5mbyA9IEludGVyZmFj
ZVB0ckluZm87Ci0gIG1vam8uSW50ZXJmYWNlUmVxdWVzdCA9IEludGVyZmFjZVJlcXVlc3Q7Ci0g
IG1vam8uQXNzb2NpYXRlZEludGVyZmFjZVB0ckluZm8gPSBBc3NvY2lhdGVkSW50ZXJmYWNlUHRy
SW5mbzsKLSAgbW9qby5Bc3NvY2lhdGVkSW50ZXJmYWNlUmVxdWVzdCA9IEFzc29jaWF0ZWRJbnRl
cmZhY2VSZXF1ZXN0OwotICBpbnRlcm5hbC5pc01hc3RlckludGVyZmFjZUlkID0gaXNNYXN0ZXJJ
bnRlcmZhY2VJZDsKLSAgaW50ZXJuYWwuaXNWYWxpZEludGVyZmFjZUlkID0gaXNWYWxpZEludGVy
ZmFjZUlkOwotICBpbnRlcm5hbC5oYXNJbnRlcmZhY2VJZE5hbWVzcGFjZUJpdFNldCA9IGhhc0lu
dGVyZmFjZUlkTmFtZXNwYWNlQml0U2V0OwotICBpbnRlcm5hbC5rSW52YWxpZEludGVyZmFjZUlk
ID0ga0ludmFsaWRJbnRlcmZhY2VJZDsKLSAgaW50ZXJuYWwua01hc3RlckludGVyZmFjZUlkID0g
a01hc3RlckludGVyZmFjZUlkOwotICBpbnRlcm5hbC5rSW50ZXJmYWNlSWROYW1lc3BhY2VNYXNr
ID0ga0ludGVyZmFjZUlkTmFtZXNwYWNlTWFzazsKLX0pKCk7Ci0vLyBDb3B5cmlnaHQgMjAxNCBU
aGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlz
IHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4g
YmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLShmdW5jdGlvbigpIHsKLSAgdmFy
IGludGVybmFsID0gbW9qby5pbnRlcm5hbDsKLQotICB2YXIga0hvc3RJc0xpdHRsZUVuZGlhbiA9
IChmdW5jdGlvbiAoKSB7Ci0gICAgdmFyIGVuZGlhbkFycmF5QnVmZmVyID0gbmV3IEFycmF5QnVm
ZmVyKDIpOwotICAgIHZhciBlbmRpYW5VaW50OEFycmF5ID0gbmV3IFVpbnQ4QXJyYXkoZW5kaWFu
QXJyYXlCdWZmZXIpOwotICAgIHZhciBlbmRpYW5VaW50MTZBcnJheSA9IG5ldyBVaW50MTZBcnJh
eShlbmRpYW5BcnJheUJ1ZmZlcik7Ci0gICAgZW5kaWFuVWludDE2QXJyYXlbMF0gPSAxOwotICAg
IHJldHVybiBlbmRpYW5VaW50OEFycmF5WzBdID09IDE7Ci0gIH0pKCk7Ci0KLSAgdmFyIGtIaWdo
V29yZE11bHRpcGxpZXIgPSAweDEwMDAwMDAwMDsKLQotICBmdW5jdGlvbiBCdWZmZXIoc2l6ZU9y
QXJyYXlCdWZmZXIpIHsKLSAgICBpZiAoc2l6ZU9yQXJyYXlCdWZmZXIgaW5zdGFuY2VvZiBBcnJh
eUJ1ZmZlcikKLSAgICAgIHRoaXMuYXJyYXlCdWZmZXIgPSBzaXplT3JBcnJheUJ1ZmZlcjsKLSAg
ICBlbHNlCi0gICAgICB0aGlzLmFycmF5QnVmZmVyID0gbmV3IEFycmF5QnVmZmVyKHNpemVPckFy
cmF5QnVmZmVyKTsKLQotICAgIHRoaXMuZGF0YVZpZXcgPSBuZXcgRGF0YVZpZXcodGhpcy5hcnJh
eUJ1ZmZlcik7Ci0gICAgdGhpcy5uZXh0ID0gMDsKLSAgfQotCi0gIE9iamVjdC5kZWZpbmVQcm9w
ZXJ0eShCdWZmZXIucHJvdG90eXBlLCAiYnl0ZUxlbmd0aCIsIHsKLSAgICBnZXQ6IGZ1bmN0aW9u
KCkgeyByZXR1cm4gdGhpcy5hcnJheUJ1ZmZlci5ieXRlTGVuZ3RoOyB9Ci0gIH0pOwotCi0gIEJ1
ZmZlci5wcm90b3R5cGUuYWxsb2MgPSBmdW5jdGlvbihzaXplKSB7Ci0gICAgdmFyIHBvaW50ZXIg
PSB0aGlzLm5leHQ7Ci0gICAgdGhpcy5uZXh0ICs9IHNpemU7Ci0gICAgaWYgKHRoaXMubmV4dCA+
IHRoaXMuYnl0ZUxlbmd0aCkgewotICAgICAgdmFyIG5ld1NpemUgPSAoMS41ICogKHRoaXMuYnl0
ZUxlbmd0aCArIHNpemUpKSB8IDA7Ci0gICAgICB0aGlzLmdyb3cobmV3U2l6ZSk7Ci0gICAgfQot
ICAgIHJldHVybiBwb2ludGVyOwotICB9OwotCi0gIGZ1bmN0aW9uIGNvcHlBcnJheUJ1ZmZlcihk
c3RBcnJheUJ1ZmZlciwgc3JjQXJyYXlCdWZmZXIpIHsKLSAgICAobmV3IFVpbnQ4QXJyYXkoZHN0
QXJyYXlCdWZmZXIpKS5zZXQobmV3IFVpbnQ4QXJyYXkoc3JjQXJyYXlCdWZmZXIpKTsKLSAgfQot
Ci0gIEJ1ZmZlci5wcm90b3R5cGUuZ3JvdyA9IGZ1bmN0aW9uKHNpemUpIHsKLSAgICB2YXIgbmV3
QXJyYXlCdWZmZXIgPSBuZXcgQXJyYXlCdWZmZXIoc2l6ZSk7Ci0gICAgY29weUFycmF5QnVmZmVy
KG5ld0FycmF5QnVmZmVyLCB0aGlzLmFycmF5QnVmZmVyKTsKLSAgICB0aGlzLmFycmF5QnVmZmVy
ID0gbmV3QXJyYXlCdWZmZXI7Ci0gICAgdGhpcy5kYXRhVmlldyA9IG5ldyBEYXRhVmlldyh0aGlz
LmFycmF5QnVmZmVyKTsKLSAgfTsKLQotICBCdWZmZXIucHJvdG90eXBlLnRyaW0gPSBmdW5jdGlv
bigpIHsKLSAgICB0aGlzLmFycmF5QnVmZmVyID0gdGhpcy5hcnJheUJ1ZmZlci5zbGljZSgwLCB0
aGlzLm5leHQpOwotICAgIHRoaXMuZGF0YVZpZXcgPSBuZXcgRGF0YVZpZXcodGhpcy5hcnJheUJ1
ZmZlcik7Ci0gIH07Ci0KLSAgQnVmZmVyLnByb3RvdHlwZS5nZXRVaW50OCA9IGZ1bmN0aW9uKG9m
ZnNldCkgewotICAgIHJldHVybiB0aGlzLmRhdGFWaWV3LmdldFVpbnQ4KG9mZnNldCk7Ci0gIH0K
LSAgQnVmZmVyLnByb3RvdHlwZS5nZXRVaW50MTYgPSBmdW5jdGlvbihvZmZzZXQpIHsKLSAgICBy
ZXR1cm4gdGhpcy5kYXRhVmlldy5nZXRVaW50MTYob2Zmc2V0LCBrSG9zdElzTGl0dGxlRW5kaWFu
KTsKLSAgfQotICBCdWZmZXIucHJvdG90eXBlLmdldFVpbnQzMiA9IGZ1bmN0aW9uKG9mZnNldCkg
ewotICAgIHJldHVybiB0aGlzLmRhdGFWaWV3LmdldFVpbnQzMihvZmZzZXQsIGtIb3N0SXNMaXR0
bGVFbmRpYW4pOwotICB9Ci0gIEJ1ZmZlci5wcm90b3R5cGUuZ2V0VWludDY0ID0gZnVuY3Rpb24o
b2Zmc2V0KSB7Ci0gICAgdmFyIGxvLCBoaTsKLSAgICBpZiAoa0hvc3RJc0xpdHRsZUVuZGlhbikg
ewotICAgICAgbG8gPSB0aGlzLmRhdGFWaWV3LmdldFVpbnQzMihvZmZzZXQsIGtIb3N0SXNMaXR0
bGVFbmRpYW4pOwotICAgICAgaGkgPSB0aGlzLmRhdGFWaWV3LmdldFVpbnQzMihvZmZzZXQgKyA0
LCBrSG9zdElzTGl0dGxlRW5kaWFuKTsKLSAgICB9IGVsc2UgewotICAgICAgaGkgPSB0aGlzLmRh
dGFWaWV3LmdldFVpbnQzMihvZmZzZXQsIGtIb3N0SXNMaXR0bGVFbmRpYW4pOwotICAgICAgbG8g
PSB0aGlzLmRhdGFWaWV3LmdldFVpbnQzMihvZmZzZXQgKyA0LCBrSG9zdElzTGl0dGxlRW5kaWFu
KTsKLSAgICB9Ci0gICAgcmV0dXJuIGxvICsgaGkgKiBrSGlnaFdvcmRNdWx0aXBsaWVyOwotICB9
Ci0KLSAgQnVmZmVyLnByb3RvdHlwZS5nZXRJbnQ4ID0gZnVuY3Rpb24ob2Zmc2V0KSB7Ci0gICAg
cmV0dXJuIHRoaXMuZGF0YVZpZXcuZ2V0SW50OChvZmZzZXQpOwotICB9Ci0gIEJ1ZmZlci5wcm90
b3R5cGUuZ2V0SW50MTYgPSBmdW5jdGlvbihvZmZzZXQpIHsKLSAgICByZXR1cm4gdGhpcy5kYXRh
Vmlldy5nZXRJbnQxNihvZmZzZXQsIGtIb3N0SXNMaXR0bGVFbmRpYW4pOwotICB9Ci0gIEJ1ZmZl
ci5wcm90b3R5cGUuZ2V0SW50MzIgPSBmdW5jdGlvbihvZmZzZXQpIHsKLSAgICByZXR1cm4gdGhp
cy5kYXRhVmlldy5nZXRJbnQzMihvZmZzZXQsIGtIb3N0SXNMaXR0bGVFbmRpYW4pOwotICB9Ci0g
IEJ1ZmZlci5wcm90b3R5cGUuZ2V0SW50NjQgPSBmdW5jdGlvbihvZmZzZXQpIHsKLSAgICB2YXIg
bG8sIGhpOwotICAgIGlmIChrSG9zdElzTGl0dGxlRW5kaWFuKSB7Ci0gICAgICBsbyA9IHRoaXMu
ZGF0YVZpZXcuZ2V0VWludDMyKG9mZnNldCwga0hvc3RJc0xpdHRsZUVuZGlhbik7Ci0gICAgICBo
aSA9IHRoaXMuZGF0YVZpZXcuZ2V0SW50MzIob2Zmc2V0ICsgNCwga0hvc3RJc0xpdHRsZUVuZGlh
bik7Ci0gICAgfSBlbHNlIHsKLSAgICAgIGhpID0gdGhpcy5kYXRhVmlldy5nZXRJbnQzMihvZmZz
ZXQsIGtIb3N0SXNMaXR0bGVFbmRpYW4pOwotICAgICAgbG8gPSB0aGlzLmRhdGFWaWV3LmdldFVp
bnQzMihvZmZzZXQgKyA0LCBrSG9zdElzTGl0dGxlRW5kaWFuKTsKLSAgICB9Ci0gICAgcmV0dXJu
IGxvICsgaGkgKiBrSGlnaFdvcmRNdWx0aXBsaWVyOwotICB9Ci0KLSAgQnVmZmVyLnByb3RvdHlw
ZS5nZXRGbG9hdDMyID0gZnVuY3Rpb24ob2Zmc2V0KSB7Ci0gICAgcmV0dXJuIHRoaXMuZGF0YVZp
ZXcuZ2V0RmxvYXQzMihvZmZzZXQsIGtIb3N0SXNMaXR0bGVFbmRpYW4pOwotICB9Ci0gIEJ1ZmZl
ci5wcm90b3R5cGUuZ2V0RmxvYXQ2NCA9IGZ1bmN0aW9uKG9mZnNldCkgewotICAgIHJldHVybiB0
aGlzLmRhdGFWaWV3LmdldEZsb2F0NjQob2Zmc2V0LCBrSG9zdElzTGl0dGxlRW5kaWFuKTsKLSAg
fQotCi0gIEJ1ZmZlci5wcm90b3R5cGUuc2V0VWludDggPSBmdW5jdGlvbihvZmZzZXQsIHZhbHVl
KSB7Ci0gICAgdGhpcy5kYXRhVmlldy5zZXRVaW50OChvZmZzZXQsIHZhbHVlKTsKLSAgfQotICBC
dWZmZXIucHJvdG90eXBlLnNldFVpbnQxNiA9IGZ1bmN0aW9uKG9mZnNldCwgdmFsdWUpIHsKLSAg
ICB0aGlzLmRhdGFWaWV3LnNldFVpbnQxNihvZmZzZXQsIHZhbHVlLCBrSG9zdElzTGl0dGxlRW5k
aWFuKTsKLSAgfQotICBCdWZmZXIucHJvdG90eXBlLnNldFVpbnQzMiA9IGZ1bmN0aW9uKG9mZnNl
dCwgdmFsdWUpIHsKLSAgICB0aGlzLmRhdGFWaWV3LnNldFVpbnQzMihvZmZzZXQsIHZhbHVlLCBr
SG9zdElzTGl0dGxlRW5kaWFuKTsKLSAgfQotICBCdWZmZXIucHJvdG90eXBlLnNldFVpbnQ2NCA9
IGZ1bmN0aW9uKG9mZnNldCwgdmFsdWUpIHsKLSAgICB2YXIgaGkgPSAodmFsdWUgLyBrSGlnaFdv
cmRNdWx0aXBsaWVyKSB8IDA7Ci0gICAgaWYgKGtIb3N0SXNMaXR0bGVFbmRpYW4pIHsKLSAgICAg
IHRoaXMuZGF0YVZpZXcuc2V0SW50MzIob2Zmc2V0LCB2YWx1ZSwga0hvc3RJc0xpdHRsZUVuZGlh
bik7Ci0gICAgICB0aGlzLmRhdGFWaWV3LnNldEludDMyKG9mZnNldCArIDQsIGhpLCBrSG9zdElz
TGl0dGxlRW5kaWFuKTsKLSAgICB9IGVsc2UgewotICAgICAgdGhpcy5kYXRhVmlldy5zZXRJbnQz
MihvZmZzZXQsIGhpLCBrSG9zdElzTGl0dGxlRW5kaWFuKTsKLSAgICAgIHRoaXMuZGF0YVZpZXcu
c2V0SW50MzIob2Zmc2V0ICsgNCwgdmFsdWUsIGtIb3N0SXNMaXR0bGVFbmRpYW4pOwotICAgIH0K
LSAgfQotCi0gIEJ1ZmZlci5wcm90b3R5cGUuc2V0SW50OCA9IGZ1bmN0aW9uKG9mZnNldCwgdmFs
dWUpIHsKLSAgICB0aGlzLmRhdGFWaWV3LnNldEludDgob2Zmc2V0LCB2YWx1ZSk7Ci0gIH0KLSAg
QnVmZmVyLnByb3RvdHlwZS5zZXRJbnQxNiA9IGZ1bmN0aW9uKG9mZnNldCwgdmFsdWUpIHsKLSAg
ICB0aGlzLmRhdGFWaWV3LnNldEludDE2KG9mZnNldCwgdmFsdWUsIGtIb3N0SXNMaXR0bGVFbmRp
YW4pOwotICB9Ci0gIEJ1ZmZlci5wcm90b3R5cGUuc2V0SW50MzIgPSBmdW5jdGlvbihvZmZzZXQs
IHZhbHVlKSB7Ci0gICAgdGhpcy5kYXRhVmlldy5zZXRJbnQzMihvZmZzZXQsIHZhbHVlLCBrSG9z
dElzTGl0dGxlRW5kaWFuKTsKLSAgfQotICBCdWZmZXIucHJvdG90eXBlLnNldEludDY0ID0gZnVu
Y3Rpb24ob2Zmc2V0LCB2YWx1ZSkgewotICAgIHZhciBoaSA9IE1hdGguZmxvb3IodmFsdWUgLyBr
SGlnaFdvcmRNdWx0aXBsaWVyKTsKLSAgICBpZiAoa0hvc3RJc0xpdHRsZUVuZGlhbikgewotICAg
ICAgdGhpcy5kYXRhVmlldy5zZXRJbnQzMihvZmZzZXQsIHZhbHVlLCBrSG9zdElzTGl0dGxlRW5k
aWFuKTsKLSAgICAgIHRoaXMuZGF0YVZpZXcuc2V0SW50MzIob2Zmc2V0ICsgNCwgaGksIGtIb3N0
SXNMaXR0bGVFbmRpYW4pOwotICAgIH0gZWxzZSB7Ci0gICAgICB0aGlzLmRhdGFWaWV3LnNldElu
dDMyKG9mZnNldCwgaGksIGtIb3N0SXNMaXR0bGVFbmRpYW4pOwotICAgICAgdGhpcy5kYXRhVmll
dy5zZXRJbnQzMihvZmZzZXQgKyA0LCB2YWx1ZSwga0hvc3RJc0xpdHRsZUVuZGlhbik7Ci0gICAg
fQotICB9Ci0KLSAgQnVmZmVyLnByb3RvdHlwZS5zZXRGbG9hdDMyID0gZnVuY3Rpb24ob2Zmc2V0
LCB2YWx1ZSkgewotICAgIHRoaXMuZGF0YVZpZXcuc2V0RmxvYXQzMihvZmZzZXQsIHZhbHVlLCBr
SG9zdElzTGl0dGxlRW5kaWFuKTsKLSAgfQotICBCdWZmZXIucHJvdG90eXBlLnNldEZsb2F0NjQg
PSBmdW5jdGlvbihvZmZzZXQsIHZhbHVlKSB7Ci0gICAgdGhpcy5kYXRhVmlldy5zZXRGbG9hdDY0
KG9mZnNldCwgdmFsdWUsIGtIb3N0SXNMaXR0bGVFbmRpYW4pOwotICB9Ci0KLSAgaW50ZXJuYWwu
QnVmZmVyID0gQnVmZmVyOwotfSkoKTsKLS8vIENvcHlyaWdodCAyMDE0IFRoZSBDaHJvbWl1bSBB
dXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUg
aXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQg
aW4gdGhlIExJQ0VOU0UgZmlsZS4KLQotKGZ1bmN0aW9uKCkgewotICB2YXIgaW50ZXJuYWwgPSBt
b2pvLmludGVybmFsOwotCi0gIHZhciBrRXJyb3JVbnNpZ25lZCA9ICJQYXNzaW5nIG5lZ2F0aXZl
IHZhbHVlIHRvIHVuc2lnbmVkIjsKLSAgdmFyIGtFcnJvckFycmF5ID0gIlBhc3Npbmcgbm9uIEFy
cmF5IGZvciBhcnJheSB0eXBlIjsKLSAgdmFyIGtFcnJvclN0cmluZyA9ICJQYXNzaW5nIG5vbiBT
dHJpbmcgZm9yIHN0cmluZyB0eXBlIjsKLSAgdmFyIGtFcnJvck1hcCA9ICJQYXNzaW5nIG5vbiBN
YXAgZm9yIG1hcCB0eXBlIjsKLQotICAvLyBNZW1vcnkgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0gIHZhciBrQWxp
Z25tZW50ID0gODsKLQotICBmdW5jdGlvbiBhbGlnbihzaXplKSB7Ci0gICAgcmV0dXJuIHNpemUg
KyAoa0FsaWdubWVudCAtIChzaXplICUga0FsaWdubWVudCkpICUga0FsaWdubWVudDsKLSAgfQot
Ci0gIGZ1bmN0aW9uIGlzQWxpZ25lZChvZmZzZXQpIHsKLSAgICByZXR1cm4gb2Zmc2V0ID49IDAg
JiYgKG9mZnNldCAlIGtBbGlnbm1lbnQpID09PSAwOwotICB9Ci0KLSAgLy8gQ29uc3RhbnRzIC0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0KLQotICB2YXIga0FycmF5SGVhZGVyU2l6ZSA9IDg7Ci0gIHZhciBrU3RydWN0SGVhZGVy
U2l6ZSA9IDg7Ci0gIHZhciBrTWVzc2FnZVYwSGVhZGVyU2l6ZSA9IDI0OwotICB2YXIga01lc3Nh
Z2VWMUhlYWRlclNpemUgPSAzMjsKLSAgdmFyIGtNZXNzYWdlVjJIZWFkZXJTaXplID0gNDg7Ci0g
IHZhciBrTWFwU3RydWN0UGF5bG9hZFNpemUgPSAxNjsKLQotICB2YXIga1N0cnVjdEhlYWRlck51
bUJ5dGVzT2Zmc2V0ID0gMDsKLSAgdmFyIGtTdHJ1Y3RIZWFkZXJWZXJzaW9uT2Zmc2V0ID0gNDsK
LQotICB2YXIga0VuY29kZWRJbnZhbGlkSGFuZGxlVmFsdWUgPSAweEZGRkZGRkZGOwotCi0gIC8v
IERlY29kZXIgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tCi0KLSAgZnVuY3Rpb24gRGVjb2RlcihidWZmZXIsIGhhbmRsZXMs
IGFzc29jaWF0ZWRFbmRwb2ludEhhbmRsZXMsIGJhc2UpIHsKLSAgICB0aGlzLmJ1ZmZlciA9IGJ1
ZmZlcjsKLSAgICB0aGlzLmhhbmRsZXMgPSBoYW5kbGVzOwotICAgIHRoaXMuYXNzb2NpYXRlZEVu
ZHBvaW50SGFuZGxlcyA9IGFzc29jaWF0ZWRFbmRwb2ludEhhbmRsZXM7Ci0gICAgdGhpcy5iYXNl
ID0gYmFzZTsKLSAgICB0aGlzLm5leHQgPSBiYXNlOwotICB9Ci0KLSAgRGVjb2Rlci5wcm90b3R5
cGUuYWxpZ24gPSBmdW5jdGlvbigpIHsKLSAgICB0aGlzLm5leHQgPSBhbGlnbih0aGlzLm5leHQp
OwotICB9OwotCi0gIERlY29kZXIucHJvdG90eXBlLnNraXAgPSBmdW5jdGlvbihvZmZzZXQpIHsK
LSAgICB0aGlzLm5leHQgKz0gb2Zmc2V0OwotICB9OwotCi0gIERlY29kZXIucHJvdG90eXBlLnJl
YWRJbnQ4ID0gZnVuY3Rpb24oKSB7Ci0gICAgdmFyIHJlc3VsdCA9IHRoaXMuYnVmZmVyLmdldElu
dDgodGhpcy5uZXh0KTsKLSAgICB0aGlzLm5leHQgKz0gMTsKLSAgICByZXR1cm4gcmVzdWx0Owot
ICB9OwotCi0gIERlY29kZXIucHJvdG90eXBlLnJlYWRVaW50OCA9IGZ1bmN0aW9uKCkgewotICAg
IHZhciByZXN1bHQgPSB0aGlzLmJ1ZmZlci5nZXRVaW50OCh0aGlzLm5leHQpOwotICAgIHRoaXMu
bmV4dCArPSAxOwotICAgIHJldHVybiByZXN1bHQ7Ci0gIH07Ci0KLSAgRGVjb2Rlci5wcm90b3R5
cGUucmVhZEludDE2ID0gZnVuY3Rpb24oKSB7Ci0gICAgdmFyIHJlc3VsdCA9IHRoaXMuYnVmZmVy
LmdldEludDE2KHRoaXMubmV4dCk7Ci0gICAgdGhpcy5uZXh0ICs9IDI7Ci0gICAgcmV0dXJuIHJl
c3VsdDsKLSAgfTsKLQotICBEZWNvZGVyLnByb3RvdHlwZS5yZWFkVWludDE2ID0gZnVuY3Rpb24o
KSB7Ci0gICAgdmFyIHJlc3VsdCA9IHRoaXMuYnVmZmVyLmdldFVpbnQxNih0aGlzLm5leHQpOwot
ICAgIHRoaXMubmV4dCArPSAyOwotICAgIHJldHVybiByZXN1bHQ7Ci0gIH07Ci0KLSAgRGVjb2Rl
ci5wcm90b3R5cGUucmVhZEludDMyID0gZnVuY3Rpb24oKSB7Ci0gICAgdmFyIHJlc3VsdCA9IHRo
aXMuYnVmZmVyLmdldEludDMyKHRoaXMubmV4dCk7Ci0gICAgdGhpcy5uZXh0ICs9IDQ7Ci0gICAg
cmV0dXJuIHJlc3VsdDsKLSAgfTsKLQotICBEZWNvZGVyLnByb3RvdHlwZS5yZWFkVWludDMyID0g
ZnVuY3Rpb24oKSB7Ci0gICAgdmFyIHJlc3VsdCA9IHRoaXMuYnVmZmVyLmdldFVpbnQzMih0aGlz
Lm5leHQpOwotICAgIHRoaXMubmV4dCArPSA0OwotICAgIHJldHVybiByZXN1bHQ7Ci0gIH07Ci0K
LSAgRGVjb2Rlci5wcm90b3R5cGUucmVhZEludDY0ID0gZnVuY3Rpb24oKSB7Ci0gICAgdmFyIHJl
c3VsdCA9IHRoaXMuYnVmZmVyLmdldEludDY0KHRoaXMubmV4dCk7Ci0gICAgdGhpcy5uZXh0ICs9
IDg7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLSAgfTsKLQotICBEZWNvZGVyLnByb3RvdHlwZS5yZWFk
VWludDY0ID0gZnVuY3Rpb24oKSB7Ci0gICAgdmFyIHJlc3VsdCA9IHRoaXMuYnVmZmVyLmdldFVp
bnQ2NCh0aGlzLm5leHQpOwotICAgIHRoaXMubmV4dCArPSA4OwotICAgIHJldHVybiByZXN1bHQ7
Ci0gIH07Ci0KLSAgRGVjb2Rlci5wcm90b3R5cGUucmVhZEZsb2F0ID0gZnVuY3Rpb24oKSB7Ci0g
ICAgdmFyIHJlc3VsdCA9IHRoaXMuYnVmZmVyLmdldEZsb2F0MzIodGhpcy5uZXh0KTsKLSAgICB0
aGlzLm5leHQgKz0gNDsKLSAgICByZXR1cm4gcmVzdWx0OwotICB9OwotCi0gIERlY29kZXIucHJv
dG90eXBlLnJlYWREb3VibGUgPSBmdW5jdGlvbigpIHsKLSAgICB2YXIgcmVzdWx0ID0gdGhpcy5i
dWZmZXIuZ2V0RmxvYXQ2NCh0aGlzLm5leHQpOwotICAgIHRoaXMubmV4dCArPSA4OwotICAgIHJl
dHVybiByZXN1bHQ7Ci0gIH07Ci0KLSAgRGVjb2Rlci5wcm90b3R5cGUuZGVjb2RlUG9pbnRlciA9
IGZ1bmN0aW9uKCkgewotICAgIC8vIFRPRE8oYWJhcnRoKTogVG8gY29ycmVjdGx5IGRlY29kZSBh
IHBvaW50ZXIsIHdlIG5lZWQgdG8ga25vdyB0aGUgcmVhbAotICAgIC8vIGJhc2UgYWRkcmVzcyBv
ZiB0aGUgYXJyYXkgYnVmZmVyLgotICAgIHZhciBvZmZzZXRQb2ludGVyID0gdGhpcy5uZXh0Owot
ICAgIHZhciBvZmZzZXQgPSB0aGlzLnJlYWRVaW50NjQoKTsKLSAgICBpZiAoIW9mZnNldCkKLSAg
ICAgIHJldHVybiAwOwotICAgIHJldHVybiBvZmZzZXRQb2ludGVyICsgb2Zmc2V0OwotICB9Owot
Ci0gIERlY29kZXIucHJvdG90eXBlLmRlY29kZUFuZENyZWF0ZURlY29kZXIgPSBmdW5jdGlvbihw
b2ludGVyKSB7Ci0gICAgcmV0dXJuIG5ldyBEZWNvZGVyKHRoaXMuYnVmZmVyLCB0aGlzLmhhbmRs
ZXMsCi0gICAgICAgIHRoaXMuYXNzb2NpYXRlZEVuZHBvaW50SGFuZGxlcywgcG9pbnRlcik7Ci0g
IH07Ci0KLSAgRGVjb2Rlci5wcm90b3R5cGUuZGVjb2RlSGFuZGxlID0gZnVuY3Rpb24oKSB7Ci0g
ICAgcmV0dXJuIHRoaXMuaGFuZGxlc1t0aGlzLnJlYWRVaW50MzIoKV0gfHwgbnVsbDsKLSAgfTsK
LQotICBEZWNvZGVyLnByb3RvdHlwZS5kZWNvZGVBc3NvY2lhdGVkRW5kcG9pbnRIYW5kbGUgPSBm
dW5jdGlvbigpIHsKLSAgICByZXR1cm4gdGhpcy5hc3NvY2lhdGVkRW5kcG9pbnRIYW5kbGVzW3Ro
aXMucmVhZFVpbnQzMigpXSB8fCBudWxsOwotICB9OwotCi0gIERlY29kZXIucHJvdG90eXBlLmRl
Y29kZVN0cmluZyA9IGZ1bmN0aW9uKCkgewotICAgIHZhciBudW1iZXJPZkJ5dGVzID0gdGhpcy5y
ZWFkVWludDMyKCk7Ci0gICAgdmFyIG51bWJlck9mRWxlbWVudHMgPSB0aGlzLnJlYWRVaW50MzIo
KTsKLSAgICB2YXIgYmFzZSA9IHRoaXMubmV4dDsKLSAgICB0aGlzLm5leHQgKz0gbnVtYmVyT2ZF
bGVtZW50czsKLSAgICByZXR1cm4gaW50ZXJuYWwuZGVjb2RlVXRmOFN0cmluZygKLSAgICAgICAg
bmV3IFVpbnQ4QXJyYXkodGhpcy5idWZmZXIuYXJyYXlCdWZmZXIsIGJhc2UsIG51bWJlck9mRWxl
bWVudHMpKTsKLSAgfTsKLQotICBEZWNvZGVyLnByb3RvdHlwZS5kZWNvZGVBcnJheSA9IGZ1bmN0
aW9uKGNscykgewotICAgIHZhciBudW1iZXJPZkJ5dGVzID0gdGhpcy5yZWFkVWludDMyKCk7Ci0g
ICAgdmFyIG51bWJlck9mRWxlbWVudHMgPSB0aGlzLnJlYWRVaW50MzIoKTsKLSAgICB2YXIgdmFs
ID0gbmV3IEFycmF5KG51bWJlck9mRWxlbWVudHMpOwotICAgIGlmIChjbHMgPT09IFBhY2tlZEJv
b2wpIHsKLSAgICAgIHZhciBieXRlOwotICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBudW1iZXJP
ZkVsZW1lbnRzOyArK2kpIHsKLSAgICAgICAgaWYgKGkgJSA4ID09PSAwKQotICAgICAgICAgIGJ5
dGUgPSB0aGlzLnJlYWRVaW50OCgpOwotICAgICAgICB2YWxbaV0gPSAoYnl0ZSAmICgxIDw8IGkg
JSA4KSkgPyB0cnVlIDogZmFsc2U7Ci0gICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgIGZvciAo
dmFyIGkgPSAwOyBpIDwgbnVtYmVyT2ZFbGVtZW50czsgKytpKSB7Ci0gICAgICAgIHZhbFtpXSA9
IGNscy5kZWNvZGUodGhpcyk7Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiB2YWw7Ci0gIH07
Ci0KLSAgRGVjb2Rlci5wcm90b3R5cGUuZGVjb2RlU3RydWN0ID0gZnVuY3Rpb24oY2xzKSB7Ci0g
ICAgcmV0dXJuIGNscy5kZWNvZGUodGhpcyk7Ci0gIH07Ci0KLSAgRGVjb2Rlci5wcm90b3R5cGUu
ZGVjb2RlU3RydWN0UG9pbnRlciA9IGZ1bmN0aW9uKGNscykgewotICAgIHZhciBwb2ludGVyID0g
dGhpcy5kZWNvZGVQb2ludGVyKCk7Ci0gICAgaWYgKCFwb2ludGVyKSB7Ci0gICAgICByZXR1cm4g
bnVsbDsKLSAgICB9Ci0gICAgcmV0dXJuIGNscy5kZWNvZGUodGhpcy5kZWNvZGVBbmRDcmVhdGVE
ZWNvZGVyKHBvaW50ZXIpKTsKLSAgfTsKLQotICBEZWNvZGVyLnByb3RvdHlwZS5kZWNvZGVBcnJh
eVBvaW50ZXIgPSBmdW5jdGlvbihjbHMpIHsKLSAgICB2YXIgcG9pbnRlciA9IHRoaXMuZGVjb2Rl
UG9pbnRlcigpOwotICAgIGlmICghcG9pbnRlcikgewotICAgICAgcmV0dXJuIG51bGw7Ci0gICAg
fQotICAgIHJldHVybiB0aGlzLmRlY29kZUFuZENyZWF0ZURlY29kZXIocG9pbnRlcikuZGVjb2Rl
QXJyYXkoY2xzKTsKLSAgfTsKLQotICBEZWNvZGVyLnByb3RvdHlwZS5kZWNvZGVTdHJpbmdQb2lu
dGVyID0gZnVuY3Rpb24oKSB7Ci0gICAgdmFyIHBvaW50ZXIgPSB0aGlzLmRlY29kZVBvaW50ZXIo
KTsKLSAgICBpZiAoIXBvaW50ZXIpIHsKLSAgICAgIHJldHVybiBudWxsOwotICAgIH0KLSAgICBy
ZXR1cm4gdGhpcy5kZWNvZGVBbmRDcmVhdGVEZWNvZGVyKHBvaW50ZXIpLmRlY29kZVN0cmluZygp
OwotICB9OwotCi0gIERlY29kZXIucHJvdG90eXBlLmRlY29kZU1hcCA9IGZ1bmN0aW9uKGtleUNs
YXNzLCB2YWx1ZUNsYXNzKSB7Ci0gICAgdGhpcy5za2lwKDQpOyAvLyBudW1iZXJPZkJ5dGVzCi0g
ICAgdGhpcy5za2lwKDQpOyAvLyB2ZXJzaW9uCi0gICAgdmFyIGtleXMgPSB0aGlzLmRlY29kZUFy
cmF5UG9pbnRlcihrZXlDbGFzcyk7Ci0gICAgdmFyIHZhbHVlcyA9IHRoaXMuZGVjb2RlQXJyYXlQ
b2ludGVyKHZhbHVlQ2xhc3MpOwotICAgIHZhciB2YWwgPSBuZXcgTWFwKCk7Ci0gICAgZm9yICh2
YXIgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKQotICAgICAgdmFsLnNldChrZXlzW2ldLCB2
YWx1ZXNbaV0pOwotICAgIHJldHVybiB2YWw7Ci0gIH07Ci0KLSAgRGVjb2Rlci5wcm90b3R5cGUu
ZGVjb2RlTWFwUG9pbnRlciA9IGZ1bmN0aW9uKGtleUNsYXNzLCB2YWx1ZUNsYXNzKSB7Ci0gICAg
dmFyIHBvaW50ZXIgPSB0aGlzLmRlY29kZVBvaW50ZXIoKTsKLSAgICBpZiAoIXBvaW50ZXIpIHsK
LSAgICAgIHJldHVybiBudWxsOwotICAgIH0KLSAgICB2YXIgZGVjb2RlciA9IHRoaXMuZGVjb2Rl
QW5kQ3JlYXRlRGVjb2Rlcihwb2ludGVyKTsKLSAgICByZXR1cm4gZGVjb2Rlci5kZWNvZGVNYXAo
a2V5Q2xhc3MsIHZhbHVlQ2xhc3MpOwotICB9OwotCi0gIC8vIEVuY29kZXIgLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0K
LSAgZnVuY3Rpb24gRW5jb2RlcihidWZmZXIsIGhhbmRsZXMsIGFzc29jaWF0ZWRFbmRwb2ludEhh
bmRsZXMsIGJhc2UpIHsKLSAgICB0aGlzLmJ1ZmZlciA9IGJ1ZmZlcjsKLSAgICB0aGlzLmhhbmRs
ZXMgPSBoYW5kbGVzOwotICAgIHRoaXMuYXNzb2NpYXRlZEVuZHBvaW50SGFuZGxlcyA9IGFzc29j
aWF0ZWRFbmRwb2ludEhhbmRsZXM7Ci0gICAgdGhpcy5iYXNlID0gYmFzZTsKLSAgICB0aGlzLm5l
eHQgPSBiYXNlOwotICB9Ci0KLSAgRW5jb2Rlci5wcm90b3R5cGUuYWxpZ24gPSBmdW5jdGlvbigp
IHsKLSAgICB0aGlzLm5leHQgPSBhbGlnbih0aGlzLm5leHQpOwotICB9OwotCi0gIEVuY29kZXIu
cHJvdG90eXBlLnNraXAgPSBmdW5jdGlvbihvZmZzZXQpIHsKLSAgICB0aGlzLm5leHQgKz0gb2Zm
c2V0OwotICB9OwotCi0gIEVuY29kZXIucHJvdG90eXBlLndyaXRlSW50OCA9IGZ1bmN0aW9uKHZh
bCkgewotICAgIHRoaXMuYnVmZmVyLnNldEludDgodGhpcy5uZXh0LCB2YWwpOwotICAgIHRoaXMu
bmV4dCArPSAxOwotICB9OwotCi0gIEVuY29kZXIucHJvdG90eXBlLndyaXRlVWludDggPSBmdW5j
dGlvbih2YWwpIHsKLSAgICBpZiAodmFsIDwgMCkgewotICAgICAgdGhyb3cgbmV3IEVycm9yKGtF
cnJvclVuc2lnbmVkKTsKLSAgICB9Ci0gICAgdGhpcy5idWZmZXIuc2V0VWludDgodGhpcy5uZXh0
LCB2YWwpOwotICAgIHRoaXMubmV4dCArPSAxOwotICB9OwotCi0gIEVuY29kZXIucHJvdG90eXBl
LndyaXRlSW50MTYgPSBmdW5jdGlvbih2YWwpIHsKLSAgICB0aGlzLmJ1ZmZlci5zZXRJbnQxNih0
aGlzLm5leHQsIHZhbCk7Ci0gICAgdGhpcy5uZXh0ICs9IDI7Ci0gIH07Ci0KLSAgRW5jb2Rlci5w
cm90b3R5cGUud3JpdGVVaW50MTYgPSBmdW5jdGlvbih2YWwpIHsKLSAgICBpZiAodmFsIDwgMCkg
ewotICAgICAgdGhyb3cgbmV3IEVycm9yKGtFcnJvclVuc2lnbmVkKTsKLSAgICB9Ci0gICAgdGhp
cy5idWZmZXIuc2V0VWludDE2KHRoaXMubmV4dCwgdmFsKTsKLSAgICB0aGlzLm5leHQgKz0gMjsK
LSAgfTsKLQotICBFbmNvZGVyLnByb3RvdHlwZS53cml0ZUludDMyID0gZnVuY3Rpb24odmFsKSB7
Ci0gICAgdGhpcy5idWZmZXIuc2V0SW50MzIodGhpcy5uZXh0LCB2YWwpOwotICAgIHRoaXMubmV4
dCArPSA0OwotICB9OwotCi0gIEVuY29kZXIucHJvdG90eXBlLndyaXRlVWludDMyID0gZnVuY3Rp
b24odmFsKSB7Ci0gICAgaWYgKHZhbCA8IDApIHsKLSAgICAgIHRocm93IG5ldyBFcnJvcihrRXJy
b3JVbnNpZ25lZCk7Ci0gICAgfQotICAgIHRoaXMuYnVmZmVyLnNldFVpbnQzMih0aGlzLm5leHQs
IHZhbCk7Ci0gICAgdGhpcy5uZXh0ICs9IDQ7Ci0gIH07Ci0KLSAgRW5jb2Rlci5wcm90b3R5cGUu
d3JpdGVJbnQ2NCA9IGZ1bmN0aW9uKHZhbCkgewotICAgIHRoaXMuYnVmZmVyLnNldEludDY0KHRo
aXMubmV4dCwgdmFsKTsKLSAgICB0aGlzLm5leHQgKz0gODsKLSAgfTsKLQotICBFbmNvZGVyLnBy
b3RvdHlwZS53cml0ZVVpbnQ2NCA9IGZ1bmN0aW9uKHZhbCkgewotICAgIGlmICh2YWwgPCAwKSB7
Ci0gICAgICB0aHJvdyBuZXcgRXJyb3Ioa0Vycm9yVW5zaWduZWQpOwotICAgIH0KLSAgICB0aGlz
LmJ1ZmZlci5zZXRVaW50NjQodGhpcy5uZXh0LCB2YWwpOwotICAgIHRoaXMubmV4dCArPSA4Owot
ICB9OwotCi0gIEVuY29kZXIucHJvdG90eXBlLndyaXRlRmxvYXQgPSBmdW5jdGlvbih2YWwpIHsK
LSAgICB0aGlzLmJ1ZmZlci5zZXRGbG9hdDMyKHRoaXMubmV4dCwgdmFsKTsKLSAgICB0aGlzLm5l
eHQgKz0gNDsKLSAgfTsKLQotICBFbmNvZGVyLnByb3RvdHlwZS53cml0ZURvdWJsZSA9IGZ1bmN0
aW9uKHZhbCkgewotICAgIHRoaXMuYnVmZmVyLnNldEZsb2F0NjQodGhpcy5uZXh0LCB2YWwpOwot
ICAgIHRoaXMubmV4dCArPSA4OwotICB9OwotCi0gIEVuY29kZXIucHJvdG90eXBlLmVuY29kZVBv
aW50ZXIgPSBmdW5jdGlvbihwb2ludGVyKSB7Ci0gICAgaWYgKCFwb2ludGVyKQotICAgICAgcmV0
dXJuIHRoaXMud3JpdGVVaW50NjQoMCk7Ci0gICAgLy8gVE9ETyhhYmFydGgpOiBUbyBjb3JyZWN0
bHkgZW5jb2RlIGEgcG9pbnRlciwgd2UgbmVlZCB0byBrbm93IHRoZSByZWFsCi0gICAgLy8gYmFz
ZSBhZGRyZXNzIG9mIHRoZSBhcnJheSBidWZmZXIuCi0gICAgdmFyIG9mZnNldCA9IHBvaW50ZXIg
LSB0aGlzLm5leHQ7Ci0gICAgdGhpcy53cml0ZVVpbnQ2NChvZmZzZXQpOwotICB9OwotCi0gIEVu
Y29kZXIucHJvdG90eXBlLmNyZWF0ZUFuZEVuY29kZUVuY29kZXIgPSBmdW5jdGlvbihzaXplKSB7
Ci0gICAgdmFyIHBvaW50ZXIgPSB0aGlzLmJ1ZmZlci5hbGxvYyhhbGlnbihzaXplKSk7Ci0gICAg
dGhpcy5lbmNvZGVQb2ludGVyKHBvaW50ZXIpOwotICAgIHJldHVybiBuZXcgRW5jb2Rlcih0aGlz
LmJ1ZmZlciwgdGhpcy5oYW5kbGVzLAotICAgICAgICB0aGlzLmFzc29jaWF0ZWRFbmRwb2ludEhh
bmRsZXMsIHBvaW50ZXIpOwotICB9OwotCi0gIEVuY29kZXIucHJvdG90eXBlLmVuY29kZUhhbmRs
ZSA9IGZ1bmN0aW9uKGhhbmRsZSkgewotICAgIGlmIChoYW5kbGUpIHsKLSAgICAgIHRoaXMuaGFu
ZGxlcy5wdXNoKGhhbmRsZSk7Ci0gICAgICB0aGlzLndyaXRlVWludDMyKHRoaXMuaGFuZGxlcy5s
ZW5ndGggLSAxKTsKLSAgICB9IGVsc2UgewotICAgICAgdGhpcy53cml0ZVVpbnQzMihrRW5jb2Rl
ZEludmFsaWRIYW5kbGVWYWx1ZSk7Ci0gICAgfQotICB9OwotCi0gIEVuY29kZXIucHJvdG90eXBl
LmVuY29kZUFzc29jaWF0ZWRFbmRwb2ludEhhbmRsZSA9IGZ1bmN0aW9uKGVuZHBvaW50SGFuZGxl
KSB7Ci0gICAgaWYgKGVuZHBvaW50SGFuZGxlKSB7Ci0gICAgICB0aGlzLmFzc29jaWF0ZWRFbmRw
b2ludEhhbmRsZXMucHVzaChlbmRwb2ludEhhbmRsZSk7Ci0gICAgICB0aGlzLndyaXRlVWludDMy
KHRoaXMuYXNzb2NpYXRlZEVuZHBvaW50SGFuZGxlcy5sZW5ndGggLSAxKTsKLSAgICB9IGVsc2Ug
ewotICAgICAgdGhpcy53cml0ZVVpbnQzMihrRW5jb2RlZEludmFsaWRIYW5kbGVWYWx1ZSk7Ci0g
ICAgfQotICB9OwotCi0gIEVuY29kZXIucHJvdG90eXBlLmVuY29kZVN0cmluZyA9IGZ1bmN0aW9u
KHZhbCkgewotICAgIHZhciBiYXNlID0gdGhpcy5uZXh0ICsga0FycmF5SGVhZGVyU2l6ZTsKLSAg
ICB2YXIgbnVtYmVyT2ZFbGVtZW50cyA9IGludGVybmFsLmVuY29kZVV0ZjhTdHJpbmcoCi0gICAg
ICAgIHZhbCwgbmV3IFVpbnQ4QXJyYXkodGhpcy5idWZmZXIuYXJyYXlCdWZmZXIsIGJhc2UpKTsK
LSAgICB2YXIgbnVtYmVyT2ZCeXRlcyA9IGtBcnJheUhlYWRlclNpemUgKyBudW1iZXJPZkVsZW1l
bnRzOwotICAgIHRoaXMud3JpdGVVaW50MzIobnVtYmVyT2ZCeXRlcyk7Ci0gICAgdGhpcy53cml0
ZVVpbnQzMihudW1iZXJPZkVsZW1lbnRzKTsKLSAgICB0aGlzLm5leHQgKz0gbnVtYmVyT2ZFbGVt
ZW50czsKLSAgfTsKLQotICBFbmNvZGVyLnByb3RvdHlwZS5lbmNvZGVBcnJheSA9Ci0gICAgICBm
dW5jdGlvbihjbHMsIHZhbCwgbnVtYmVyT2ZFbGVtZW50cywgZW5jb2RlZFNpemUpIHsKLSAgICBp
ZiAobnVtYmVyT2ZFbGVtZW50cyA9PT0gdW5kZWZpbmVkKQotICAgICAgbnVtYmVyT2ZFbGVtZW50
cyA9IHZhbC5sZW5ndGg7Ci0gICAgaWYgKGVuY29kZWRTaXplID09PSB1bmRlZmluZWQpCi0gICAg
ICBlbmNvZGVkU2l6ZSA9IGtBcnJheUhlYWRlclNpemUgKyBjbHMuZW5jb2RlZFNpemUgKiBudW1i
ZXJPZkVsZW1lbnRzOwotCi0gICAgdGhpcy53cml0ZVVpbnQzMihlbmNvZGVkU2l6ZSk7Ci0gICAg
dGhpcy53cml0ZVVpbnQzMihudW1iZXJPZkVsZW1lbnRzKTsKLQotICAgIGlmIChjbHMgPT09IFBh
Y2tlZEJvb2wpIHsKLSAgICAgIHZhciBieXRlID0gMDsKLSAgICAgIGZvciAoaSA9IDA7IGkgPCBu
dW1iZXJPZkVsZW1lbnRzOyArK2kpIHsKLSAgICAgICAgaWYgKHZhbFtpXSkKLSAgICAgICAgICBi
eXRlIHw9ICgxIDw8IGkgJSA4KTsKLSAgICAgICAgaWYgKGkgJSA4ID09PSA3IHx8IGkgPT0gbnVt
YmVyT2ZFbGVtZW50cyAtIDEpIHsKLSAgICAgICAgICBVaW50OC5lbmNvZGUodGhpcywgYnl0ZSk7
Ci0gICAgICAgICAgYnl0ZSA9IDA7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9IGVsc2Ugewot
ICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBudW1iZXJPZkVsZW1lbnRzOyArK2kpCi0gICAgICAg
IGNscy5lbmNvZGUodGhpcywgdmFsW2ldKTsKLSAgICB9Ci0gIH07Ci0KLSAgRW5jb2Rlci5wcm90
b3R5cGUuZW5jb2RlU3RydWN0ID0gZnVuY3Rpb24oY2xzLCB2YWwpIHsKLSAgICByZXR1cm4gY2xz
LmVuY29kZSh0aGlzLCB2YWwpOwotICB9OwotCi0gIEVuY29kZXIucHJvdG90eXBlLmVuY29kZVN0
cnVjdFBvaW50ZXIgPSBmdW5jdGlvbihjbHMsIHZhbCkgewotICAgIGlmICh2YWwgPT0gbnVsbCkg
ewotICAgICAgLy8gQWxzbyBoYW5kbGVzIHVuZGVmaW5lZCwgc2luY2UgdW5kZWZpbmVkID09IG51
bGwuCi0gICAgICB0aGlzLmVuY29kZVBvaW50ZXIodmFsKTsKLSAgICAgIHJldHVybjsKLSAgICB9
Ci0gICAgdmFyIGVuY29kZXIgPSB0aGlzLmNyZWF0ZUFuZEVuY29kZUVuY29kZXIoY2xzLmVuY29k
ZWRTaXplKTsKLSAgICBjbHMuZW5jb2RlKGVuY29kZXIsIHZhbCk7Ci0gIH07Ci0KLSAgRW5jb2Rl
ci5wcm90b3R5cGUuZW5jb2RlQXJyYXlQb2ludGVyID0gZnVuY3Rpb24oY2xzLCB2YWwpIHsKLSAg
ICBpZiAodmFsID09IG51bGwpIHsKLSAgICAgIC8vIEFsc28gaGFuZGxlcyB1bmRlZmluZWQsIHNp
bmNlIHVuZGVmaW5lZCA9PSBudWxsLgotICAgICAgdGhpcy5lbmNvZGVQb2ludGVyKHZhbCk7Ci0g
ICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgdmFyIG51bWJlck9mRWxlbWVudHMgPSB2YWwubGVu
Z3RoOwotICAgIGlmICghTnVtYmVyLmlzU2FmZUludGVnZXIobnVtYmVyT2ZFbGVtZW50cykgfHwg
bnVtYmVyT2ZFbGVtZW50cyA8IDApCi0gICAgICB0aHJvdyBuZXcgRXJyb3Ioa0Vycm9yQXJyYXkp
OwotCi0gICAgdmFyIGVuY29kZWRTaXplID0ga0FycmF5SGVhZGVyU2l6ZSArICgoY2xzID09PSBQ
YWNrZWRCb29sKSA/Ci0gICAgICAgIE1hdGguY2VpbChudW1iZXJPZkVsZW1lbnRzIC8gOCkgOiBj
bHMuZW5jb2RlZFNpemUgKiBudW1iZXJPZkVsZW1lbnRzKTsKLSAgICB2YXIgZW5jb2RlciA9IHRo
aXMuY3JlYXRlQW5kRW5jb2RlRW5jb2RlcihlbmNvZGVkU2l6ZSk7Ci0gICAgZW5jb2Rlci5lbmNv
ZGVBcnJheShjbHMsIHZhbCwgbnVtYmVyT2ZFbGVtZW50cywgZW5jb2RlZFNpemUpOwotICB9Owot
Ci0gIEVuY29kZXIucHJvdG90eXBlLmVuY29kZVN0cmluZ1BvaW50ZXIgPSBmdW5jdGlvbih2YWwp
IHsKLSAgICBpZiAodmFsID09IG51bGwpIHsKLSAgICAgIC8vIEFsc28gaGFuZGxlcyB1bmRlZmlu
ZWQsIHNpbmNlIHVuZGVmaW5lZCA9PSBudWxsLgotICAgICAgdGhpcy5lbmNvZGVQb2ludGVyKHZh
bCk7Ci0gICAgICByZXR1cm47Ci0gICAgfQotICAgIC8vIE9ubHkgYWNjZXB0cyBzdHJpbmcgcHJp
bWl2aXRlcywgbm90IFN0cmluZyBPYmplY3RzIGxpa2UgbmV3IFN0cmluZygiZm9vIikKLSAgICBp
ZiAodHlwZW9mKHZhbCkgIT09ICJzdHJpbmciKSB7Ci0gICAgICB0aHJvdyBuZXcgRXJyb3Ioa0Vy
cm9yU3RyaW5nKTsKLSAgICB9Ci0gICAgdmFyIGVuY29kZWRTaXplID0ga0FycmF5SGVhZGVyU2l6
ZSArIGludGVybmFsLnV0ZjhMZW5ndGgodmFsKTsKLSAgICB2YXIgZW5jb2RlciA9IHRoaXMuY3Jl
YXRlQW5kRW5jb2RlRW5jb2RlcihlbmNvZGVkU2l6ZSk7Ci0gICAgZW5jb2Rlci5lbmNvZGVTdHJp
bmcodmFsKTsKLSAgfTsKLQotICBFbmNvZGVyLnByb3RvdHlwZS5lbmNvZGVNYXAgPSBmdW5jdGlv
bihrZXlDbGFzcywgdmFsdWVDbGFzcywgdmFsKSB7Ci0gICAgdmFyIGtleXMgPSBuZXcgQXJyYXko
dmFsLnNpemUpOwotICAgIHZhciB2YWx1ZXMgPSBuZXcgQXJyYXkodmFsLnNpemUpOwotICAgIHZh
ciBpID0gMDsKLSAgICB2YWwuZm9yRWFjaChmdW5jdGlvbih2YWx1ZSwga2V5KSB7Ci0gICAgICB2
YWx1ZXNbaV0gPSB2YWx1ZTsKLSAgICAgIGtleXNbaSsrXSA9IGtleTsKLSAgICB9KTsKLSAgICB0
aGlzLndyaXRlVWludDMyKGtTdHJ1Y3RIZWFkZXJTaXplICsga01hcFN0cnVjdFBheWxvYWRTaXpl
KTsKLSAgICB0aGlzLndyaXRlVWludDMyKDApOyAgLy8gdmVyc2lvbgotICAgIHRoaXMuZW5jb2Rl
QXJyYXlQb2ludGVyKGtleUNsYXNzLCBrZXlzKTsKLSAgICB0aGlzLmVuY29kZUFycmF5UG9pbnRl
cih2YWx1ZUNsYXNzLCB2YWx1ZXMpOwotICB9Ci0KLSAgRW5jb2Rlci5wcm90b3R5cGUuZW5jb2Rl
TWFwUG9pbnRlciA9IGZ1bmN0aW9uKGtleUNsYXNzLCB2YWx1ZUNsYXNzLCB2YWwpIHsKLSAgICBp
ZiAodmFsID09IG51bGwpIHsKLSAgICAgIC8vIEFsc28gaGFuZGxlcyB1bmRlZmluZWQsIHNpbmNl
IHVuZGVmaW5lZCA9PSBudWxsLgotICAgICAgdGhpcy5lbmNvZGVQb2ludGVyKHZhbCk7Ci0gICAg
ICByZXR1cm47Ci0gICAgfQotICAgIGlmICghKHZhbCBpbnN0YW5jZW9mIE1hcCkpIHsKLSAgICAg
IHRocm93IG5ldyBFcnJvcihrRXJyb3JNYXApOwotICAgIH0KLSAgICB2YXIgZW5jb2RlZFNpemUg
PSBrU3RydWN0SGVhZGVyU2l6ZSArIGtNYXBTdHJ1Y3RQYXlsb2FkU2l6ZTsKLSAgICB2YXIgZW5j
b2RlciA9IHRoaXMuY3JlYXRlQW5kRW5jb2RlRW5jb2RlcihlbmNvZGVkU2l6ZSk7Ci0gICAgZW5j
b2Rlci5lbmNvZGVNYXAoa2V5Q2xhc3MsIHZhbHVlQ2xhc3MsIHZhbCk7Ci0gIH07Ci0KLSAgLy8g
TWVzc2FnZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0KLQotICB2YXIga01lc3NhZ2VJbnRlcmZhY2VJZE9mZnNldCA9IGtT
dHJ1Y3RIZWFkZXJTaXplOwotICB2YXIga01lc3NhZ2VOYW1lT2Zmc2V0ID0ga01lc3NhZ2VJbnRl
cmZhY2VJZE9mZnNldCArIDQ7Ci0gIHZhciBrTWVzc2FnZUZsYWdzT2Zmc2V0ID0ga01lc3NhZ2VO
YW1lT2Zmc2V0ICsgNDsKLSAgdmFyIGtNZXNzYWdlUmVxdWVzdElET2Zmc2V0ID0ga01lc3NhZ2VG
bGFnc09mZnNldCArIDg7Ci0gIHZhciBrTWVzc2FnZVBheWxvYWRJbnRlcmZhY2VJZHNQb2ludGVy
T2Zmc2V0ID0ga01lc3NhZ2VWMkhlYWRlclNpemUgLSA4OwotCi0gIHZhciBrTWVzc2FnZUV4cGVj
dHNSZXNwb25zZSA9IDEgPDwgMDsKLSAgdmFyIGtNZXNzYWdlSXNSZXNwb25zZSAgICAgID0gMSA8
PCAxOwotCi0gIGZ1bmN0aW9uIE1lc3NhZ2UoYnVmZmVyLCBoYW5kbGVzLCBhc3NvY2lhdGVkRW5k
cG9pbnRIYW5kbGVzKSB7Ci0gICAgaWYgKGFzc29jaWF0ZWRFbmRwb2ludEhhbmRsZXMgPT09IHVu
ZGVmaW5lZCkgewotICAgICAgYXNzb2NpYXRlZEVuZHBvaW50SGFuZGxlcyA9IFtdOwotICAgIH0K
LQotICAgIHRoaXMuYnVmZmVyID0gYnVmZmVyOwotICAgIHRoaXMuaGFuZGxlcyA9IGhhbmRsZXM7
Ci0gICAgdGhpcy5hc3NvY2lhdGVkRW5kcG9pbnRIYW5kbGVzID0gYXNzb2NpYXRlZEVuZHBvaW50
SGFuZGxlczsKLSAgfQotCi0gIE1lc3NhZ2UucHJvdG90eXBlLmdldEhlYWRlck51bUJ5dGVzID0g
ZnVuY3Rpb24oKSB7Ci0gICAgcmV0dXJuIHRoaXMuYnVmZmVyLmdldFVpbnQzMihrU3RydWN0SGVh
ZGVyTnVtQnl0ZXNPZmZzZXQpOwotICB9OwotCi0gIE1lc3NhZ2UucHJvdG90eXBlLmdldEhlYWRl
clZlcnNpb24gPSBmdW5jdGlvbigpIHsKLSAgICByZXR1cm4gdGhpcy5idWZmZXIuZ2V0VWludDMy
KGtTdHJ1Y3RIZWFkZXJWZXJzaW9uT2Zmc2V0KTsKLSAgfTsKLQotICBNZXNzYWdlLnByb3RvdHlw
ZS5nZXROYW1lID0gZnVuY3Rpb24oKSB7Ci0gICAgcmV0dXJuIHRoaXMuYnVmZmVyLmdldFVpbnQz
MihrTWVzc2FnZU5hbWVPZmZzZXQpOwotICB9OwotCi0gIE1lc3NhZ2UucHJvdG90eXBlLmdldEZs
YWdzID0gZnVuY3Rpb24oKSB7Ci0gICAgcmV0dXJuIHRoaXMuYnVmZmVyLmdldFVpbnQzMihrTWVz
c2FnZUZsYWdzT2Zmc2V0KTsKLSAgfTsKLQotICBNZXNzYWdlLnByb3RvdHlwZS5nZXRJbnRlcmZh
Y2VJZCA9IGZ1bmN0aW9uKCkgewotICAgIHJldHVybiB0aGlzLmJ1ZmZlci5nZXRVaW50MzIoa01l
c3NhZ2VJbnRlcmZhY2VJZE9mZnNldCk7Ci0gIH07Ci0KLSAgTWVzc2FnZS5wcm90b3R5cGUuZ2V0
UGF5bG9hZEludGVyZmFjZUlkcyA9IGZ1bmN0aW9uKCkgewotICAgIGlmICh0aGlzLmdldEhlYWRl
clZlcnNpb24oKSA8IDIpIHsKLSAgICAgIHJldHVybiBudWxsOwotICAgIH0KLQotICAgIHZhciBk
ZWNvZGVyID0gbmV3IERlY29kZXIodGhpcy5idWZmZXIsIHRoaXMuaGFuZGxlcywKLSAgICAgICAg
dGhpcy5hc3NvY2lhdGVkRW5kcG9pbnRIYW5kbGVzLAotICAgICAgICBrTWVzc2FnZVBheWxvYWRJ
bnRlcmZhY2VJZHNQb2ludGVyT2Zmc2V0KTsKLSAgICB2YXIgcGF5bG9hZEludGVyZmFjZUlkcyA9
IGRlY29kZXIuZGVjb2RlQXJyYXlQb2ludGVyKFVpbnQzMik7Ci0gICAgcmV0dXJuIHBheWxvYWRJ
bnRlcmZhY2VJZHM7Ci0gIH07Ci0KLSAgTWVzc2FnZS5wcm90b3R5cGUuaXNSZXNwb25zZSA9IGZ1
bmN0aW9uKCkgewotICAgIHJldHVybiAodGhpcy5nZXRGbGFncygpICYga01lc3NhZ2VJc1Jlc3Bv
bnNlKSAhPSAwOwotICB9OwotCi0gIE1lc3NhZ2UucHJvdG90eXBlLmV4cGVjdHNSZXNwb25zZSA9
IGZ1bmN0aW9uKCkgewotICAgIHJldHVybiAodGhpcy5nZXRGbGFncygpICYga01lc3NhZ2VFeHBl
Y3RzUmVzcG9uc2UpICE9IDA7Ci0gIH07Ci0KLSAgTWVzc2FnZS5wcm90b3R5cGUuc2V0UmVxdWVz
dElEID0gZnVuY3Rpb24ocmVxdWVzdElEKSB7Ci0gICAgLy8gVE9ETyhkYXJpbik6IFZlcmlmeSB0
aGF0IHNwYWNlIHdhcyByZXNlcnZlZCBmb3IgdGhpcyBmaWVsZCEKLSAgICB0aGlzLmJ1ZmZlci5z
ZXRVaW50NjQoa01lc3NhZ2VSZXF1ZXN0SURPZmZzZXQsIHJlcXVlc3RJRCk7Ci0gIH07Ci0KLSAg
TWVzc2FnZS5wcm90b3R5cGUuc2V0SW50ZXJmYWNlSWQgPSBmdW5jdGlvbihpbnRlcmZhY2VJZCkg
ewotICAgIHRoaXMuYnVmZmVyLnNldFVpbnQzMihrTWVzc2FnZUludGVyZmFjZUlkT2Zmc2V0LCBp
bnRlcmZhY2VJZCk7Ci0gIH07Ci0KLSAgTWVzc2FnZS5wcm90b3R5cGUuc2V0UGF5bG9hZEludGVy
ZmFjZUlkc18gPSBmdW5jdGlvbihwYXlsb2FkSW50ZXJmYWNlSWRzKSB7Ci0gICAgaWYgKHRoaXMu
Z2V0SGVhZGVyVmVyc2lvbigpIDwgMikgewotICAgICAgdGhyb3cgbmV3IEVycm9yKAotICAgICAg
ICAgICJWZXJzaW9uIG9mIG1lc3NhZ2UgZG9lcyBub3Qgc3VwcG9ydCBwYXlsb2FkIGludGVyZmFj
ZSBpZHMiKTsKLSAgICB9Ci0KLSAgICB2YXIgZGVjb2RlciA9IG5ldyBEZWNvZGVyKHRoaXMuYnVm
ZmVyLCB0aGlzLmhhbmRsZXMsCi0gICAgICAgIHRoaXMuYXNzb2NpYXRlZEVuZHBvaW50SGFuZGxl
cywKLSAgICAgICAga01lc3NhZ2VQYXlsb2FkSW50ZXJmYWNlSWRzUG9pbnRlck9mZnNldCk7Ci0g
ICAgdmFyIHBheWxvYWRJbnRlcmZhY2VJZHNPZmZzZXQgPSBkZWNvZGVyLmRlY29kZVBvaW50ZXIo
KTsKLSAgICB2YXIgZW5jb2RlciA9IG5ldyBFbmNvZGVyKHRoaXMuYnVmZmVyLCB0aGlzLmhhbmRs
ZXMsCi0gICAgICAgIHRoaXMuYXNzb2NpYXRlZEVuZHBvaW50SGFuZGxlcywKLSAgICAgICAgcGF5
bG9hZEludGVyZmFjZUlkc09mZnNldCk7Ci0gICAgZW5jb2Rlci5lbmNvZGVBcnJheShVaW50MzIs
IHBheWxvYWRJbnRlcmZhY2VJZHMpOwotICB9OwotCi0gIE1lc3NhZ2UucHJvdG90eXBlLnNlcmlh
bGl6ZUFzc29jaWF0ZWRFbmRwb2ludEhhbmRsZXMgPSBmdW5jdGlvbigKLSAgICAgIGFzc29jaWF0
ZWRHcm91cENvbnRyb2xsZXIpIHsKLSAgICBpZiAodGhpcy5hc3NvY2lhdGVkRW5kcG9pbnRIYW5k
bGVzLmxlbmd0aCA+IDApIHsKLSAgICAgIGlmICh0aGlzLmdldEhlYWRlclZlcnNpb24oKSA8IDIp
IHsKLSAgICAgICAgdGhyb3cgbmV3IEVycm9yKAotICAgICAgICAgICAgIlZlcnNpb24gb2YgbWVz
c2FnZSBkb2VzIG5vdCBzdXBwb3J0IGFzc29jaWF0ZWQgZW5kcG9pbnQgaGFuZGxlcyIpOwotICAg
ICAgfQotCi0gICAgICB2YXIgZGF0YSA9IFtdOwotICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0
aGlzLmFzc29jaWF0ZWRFbmRwb2ludEhhbmRsZXMubGVuZ3RoOyBpKyspIHsKLSAgICAgICAgdmFy
IGhhbmRsZSA9IHRoaXMuYXNzb2NpYXRlZEVuZHBvaW50SGFuZGxlc1tpXTsKLSAgICAgICAgZGF0
YS5wdXNoKGFzc29jaWF0ZWRHcm91cENvbnRyb2xsZXIuYXNzb2NpYXRlSW50ZXJmYWNlKGhhbmRs
ZSkpOwotICAgICAgfQotICAgICAgdGhpcy5hc3NvY2lhdGVkRW5kcG9pbnRIYW5kbGVzID0gW107
Ci0gICAgICB0aGlzLnNldFBheWxvYWRJbnRlcmZhY2VJZHNfKGRhdGEpOwotICAgIH0KLSAgfTsK
LQotICBNZXNzYWdlLnByb3RvdHlwZS5kZXNlcmlhbGl6ZUFzc29jaWF0ZWRFbmRwb2ludEhhbmRs
ZXMgPSBmdW5jdGlvbigKLSAgICAgIGFzc29jaWF0ZWRHcm91cENvbnRyb2xsZXIpIHsKLSAgICBp
ZiAodGhpcy5nZXRIZWFkZXJWZXJzaW9uKCkgPCAyKSB7Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAg
ICB9Ci0KLSAgICB0aGlzLmFzc29jaWF0ZWRFbmRwb2ludEhhbmRsZXMgPSBbXTsKLSAgICB2YXIg
aWRzID0gdGhpcy5nZXRQYXlsb2FkSW50ZXJmYWNlSWRzKCk7Ci0KLSAgICB2YXIgcmVzdWx0ID0g
dHJ1ZTsKLSAgICBmb3IgKHZhciBpID0gMDsgaSA8IGlkcy5sZW5ndGg7IGkrKykgewotICAgICAg
dmFyIGhhbmRsZSA9IGFzc29jaWF0ZWRHcm91cENvbnRyb2xsZXIuY3JlYXRlTG9jYWxFbmRwb2lu
dEhhbmRsZShpZHNbaV0pOwotICAgICAgaWYgKGludGVybmFsLmlzVmFsaWRJbnRlcmZhY2VJZChp
ZHNbaV0pICYmICFoYW5kbGUuaXNWYWxpZCgpKSB7Ci0gICAgICAgIC8vIHxpZHNbaV18IGl0c2Vs
ZiBpcyB2YWxpZCBidXQgaGFuZGxlIGNyZWF0aW9uIGZhaWxlZC4gSW4gdGhhdCBjYXNlLAotICAg
ICAgICAvLyBtYXJrIGRlc2VyaWFsaXphdGlvbiBhcyBmYWlsZWQgYnV0IGNvbnRpbnVlIHRvIGRl
c2VyaWFsaXplIHRoZQotICAgICAgICAvLyByZXN0IG9mIGhhbmRsZXMuCi0gICAgICAgIHJlc3Vs
dCA9IGZhbHNlOwotICAgICAgfQotICAgICAgdGhpcy5hc3NvY2lhdGVkRW5kcG9pbnRIYW5kbGVz
LnB1c2goaGFuZGxlKTsKLSAgICAgIGlkc1tpXSA9IGludGVybmFsLmtJbnZhbGlkSW50ZXJmYWNl
SWQ7Ci0gICAgfQotCi0gICAgdGhpcy5zZXRQYXlsb2FkSW50ZXJmYWNlSWRzXyhpZHMpOwotICAg
IHJldHVybiByZXN1bHQ7Ci0gIH07Ci0KLQotICAvLyBNZXNzYWdlVjBCdWlsZGVyIC0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0gIGZ1
bmN0aW9uIE1lc3NhZ2VWMEJ1aWxkZXIobWVzc2FnZU5hbWUsIHBheWxvYWRTaXplKSB7Ci0gICAg
Ly8gQ3VycmVudGx5LCB3ZSBkb24ndCBjb21wdXRlIHRoZSBwYXlsb2FkIHNpemUgY29ycmVjdGx5
IGFoZWFkIG9mIHRpbWUuCi0gICAgLy8gSW5zdGVhZCwgd2UgcmVzaXplIHRoZSBidWZmZXIgYXQg
dGhlIGVuZC4KLSAgICB2YXIgbnVtYmVyT2ZCeXRlcyA9IGtNZXNzYWdlVjBIZWFkZXJTaXplICsg
cGF5bG9hZFNpemU7Ci0gICAgdGhpcy5idWZmZXIgPSBuZXcgaW50ZXJuYWwuQnVmZmVyKG51bWJl
ck9mQnl0ZXMpOwotICAgIHRoaXMuaGFuZGxlcyA9IFtdOwotICAgIHZhciBlbmNvZGVyID0gdGhp
cy5jcmVhdGVFbmNvZGVyKGtNZXNzYWdlVjBIZWFkZXJTaXplKTsKLSAgICBlbmNvZGVyLndyaXRl
VWludDMyKGtNZXNzYWdlVjBIZWFkZXJTaXplKTsKLSAgICBlbmNvZGVyLndyaXRlVWludDMyKDAp
OyAgLy8gdmVyc2lvbi4KLSAgICBlbmNvZGVyLndyaXRlVWludDMyKDApOyAgLy8gaW50ZXJmYWNl
IElELgotICAgIGVuY29kZXIud3JpdGVVaW50MzIobWVzc2FnZU5hbWUpOwotICAgIGVuY29kZXIu
d3JpdGVVaW50MzIoMCk7ICAvLyBmbGFncy4KLSAgICBlbmNvZGVyLndyaXRlVWludDMyKDApOyAg
Ly8gcGFkZGluZy4KLSAgfQotCi0gIE1lc3NhZ2VWMEJ1aWxkZXIucHJvdG90eXBlLmNyZWF0ZUVu
Y29kZXIgPSBmdW5jdGlvbihzaXplKSB7Ci0gICAgdmFyIHBvaW50ZXIgPSB0aGlzLmJ1ZmZlci5h
bGxvYyhzaXplKTsKLSAgICByZXR1cm4gbmV3IEVuY29kZXIodGhpcy5idWZmZXIsIHRoaXMuaGFu
ZGxlcywgW10sIHBvaW50ZXIpOwotICB9OwotCi0gIE1lc3NhZ2VWMEJ1aWxkZXIucHJvdG90eXBl
LmVuY29kZVN0cnVjdCA9IGZ1bmN0aW9uKGNscywgdmFsKSB7Ci0gICAgY2xzLmVuY29kZSh0aGlz
LmNyZWF0ZUVuY29kZXIoY2xzLmVuY29kZWRTaXplKSwgdmFsKTsKLSAgfTsKLQotICBNZXNzYWdl
VjBCdWlsZGVyLnByb3RvdHlwZS5maW5pc2ggPSBmdW5jdGlvbigpIHsKLSAgICAvLyBUT0RPKGFi
YXJ0aCk6IFJhdGhlciB0aGFuIHJlc2l6aW5nIHRoZSBidWZmZXIgYXQgdGhlIGVuZCwgd2UgY291
bGQKLSAgICAvLyBjb21wdXRlIHRoZSBzaXplIHdlIG5lZWQgYWhlYWQgb2YgdGltZSwgbGlrZSB3
ZSBkbyBpbiBDKysuCi0gICAgdGhpcy5idWZmZXIudHJpbSgpOwotICAgIHZhciBtZXNzYWdlID0g
bmV3IE1lc3NhZ2UodGhpcy5idWZmZXIsIHRoaXMuaGFuZGxlcyk7Ci0gICAgdGhpcy5idWZmZXIg
PSBudWxsOwotICAgIHRoaXMuaGFuZGxlcyA9IG51bGw7Ci0gICAgdGhpcy5lbmNvZGVyID0gbnVs
bDsKLSAgICByZXR1cm4gbWVzc2FnZTsKLSAgfTsKLQotICAvLyBNZXNzYWdlVjFCdWlsZGVyIC0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLSAgZnVuY3Rp
b24gTWVzc2FnZVYxQnVpbGRlcihtZXNzYWdlTmFtZSwgcGF5bG9hZFNpemUsIGZsYWdzLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdElEKSB7Ci0gICAgLy8g
Q3VycmVudGx5LCB3ZSBkb24ndCBjb21wdXRlIHRoZSBwYXlsb2FkIHNpemUgY29ycmVjdGx5IGFo
ZWFkIG9mIHRpbWUuCi0gICAgLy8gSW5zdGVhZCwgd2UgcmVzaXplIHRoZSBidWZmZXIgYXQgdGhl
IGVuZC4KLSAgICB2YXIgbnVtYmVyT2ZCeXRlcyA9IGtNZXNzYWdlVjFIZWFkZXJTaXplICsgcGF5
bG9hZFNpemU7Ci0gICAgdGhpcy5idWZmZXIgPSBuZXcgaW50ZXJuYWwuQnVmZmVyKG51bWJlck9m
Qnl0ZXMpOwotICAgIHRoaXMuaGFuZGxlcyA9IFtdOwotICAgIHZhciBlbmNvZGVyID0gdGhpcy5j
cmVhdGVFbmNvZGVyKGtNZXNzYWdlVjFIZWFkZXJTaXplKTsKLSAgICBlbmNvZGVyLndyaXRlVWlu
dDMyKGtNZXNzYWdlVjFIZWFkZXJTaXplKTsKLSAgICBlbmNvZGVyLndyaXRlVWludDMyKDEpOyAg
Ly8gdmVyc2lvbi4KLSAgICBlbmNvZGVyLndyaXRlVWludDMyKDApOyAgLy8gaW50ZXJmYWNlIElE
LgotICAgIGVuY29kZXIud3JpdGVVaW50MzIobWVzc2FnZU5hbWUpOwotICAgIGVuY29kZXIud3Jp
dGVVaW50MzIoZmxhZ3MpOwotICAgIGVuY29kZXIud3JpdGVVaW50MzIoMCk7ICAvLyBwYWRkaW5n
LgotICAgIGVuY29kZXIud3JpdGVVaW50NjQocmVxdWVzdElEKTsKLSAgfQotCi0gIE1lc3NhZ2VW
MUJ1aWxkZXIucHJvdG90eXBlID0KLSAgICAgIE9iamVjdC5jcmVhdGUoTWVzc2FnZVYwQnVpbGRl
ci5wcm90b3R5cGUpOwotCi0gIE1lc3NhZ2VWMUJ1aWxkZXIucHJvdG90eXBlLmNvbnN0cnVjdG9y
ID0KLSAgICAgIE1lc3NhZ2VWMUJ1aWxkZXI7Ci0KLSAgLy8gTWVzc2FnZVYyIC0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLSAgZnVuY3Rpb24gTWVzc2Fn
ZVYyQnVpbGRlcihtZXNzYWdlTmFtZSwgcGF5bG9hZFNpemUsIGZsYWdzLCByZXF1ZXN0SUQpIHsK
LSAgICAvLyBDdXJyZW50bHksIHdlIGRvbid0IGNvbXB1dGUgdGhlIHBheWxvYWQgc2l6ZSBjb3Jy
ZWN0bHkgYWhlYWQgb2YgdGltZS4KLSAgICAvLyBJbnN0ZWFkLCB3ZSByZXNpemUgdGhlIGJ1ZmZl
ciBhdCB0aGUgZW5kLgotICAgIHZhciBudW1iZXJPZkJ5dGVzID0ga01lc3NhZ2VWMkhlYWRlclNp
emUgKyBwYXlsb2FkU2l6ZTsKLSAgICB0aGlzLmJ1ZmZlciA9IG5ldyBpbnRlcm5hbC5CdWZmZXIo
bnVtYmVyT2ZCeXRlcyk7Ci0gICAgdGhpcy5oYW5kbGVzID0gW107Ci0KLSAgICB0aGlzLnBheWxv
YWQgPSBudWxsOwotICAgIHRoaXMuYXNzb2NpYXRlZEVuZHBvaW50SGFuZGxlcyA9IFtdOwotCi0g
ICAgdGhpcy5lbmNvZGVyID0gdGhpcy5jcmVhdGVFbmNvZGVyKGtNZXNzYWdlVjJIZWFkZXJTaXpl
KTsKLSAgICB0aGlzLmVuY29kZXIud3JpdGVVaW50MzIoa01lc3NhZ2VWMkhlYWRlclNpemUpOwot
ICAgIHRoaXMuZW5jb2Rlci53cml0ZVVpbnQzMigyKTsgIC8vIHZlcnNpb24uCi0gICAgLy8gR2V0
cyBzZXQgdG8gYW4gYXBwcm9wcmlhdGUgaW50ZXJmYWNlSWQgZm9yIHRoZSBlbmRwb2ludCBieSB0
aGUgUm91dGVyLgotICAgIHRoaXMuZW5jb2Rlci53cml0ZVVpbnQzMigwKTsgIC8vIGludGVyZmFj
ZSBJRC4KLSAgICB0aGlzLmVuY29kZXIud3JpdGVVaW50MzIobWVzc2FnZU5hbWUpOwotICAgIHRo
aXMuZW5jb2Rlci53cml0ZVVpbnQzMihmbGFncyk7Ci0gICAgdGhpcy5lbmNvZGVyLndyaXRlVWlu
dDMyKDApOyAgLy8gcGFkZGluZy4KLSAgICB0aGlzLmVuY29kZXIud3JpdGVVaW50NjQocmVxdWVz
dElEKTsKLSAgfQotCi0gIE1lc3NhZ2VWMkJ1aWxkZXIucHJvdG90eXBlLmNyZWF0ZUVuY29kZXIg
PSBmdW5jdGlvbihzaXplKSB7Ci0gICAgdmFyIHBvaW50ZXIgPSB0aGlzLmJ1ZmZlci5hbGxvYyhz
aXplKTsKLSAgICByZXR1cm4gbmV3IEVuY29kZXIodGhpcy5idWZmZXIsIHRoaXMuaGFuZGxlcywK
LSAgICAgICAgdGhpcy5hc3NvY2lhdGVkRW5kcG9pbnRIYW5kbGVzLCBwb2ludGVyKTsKLSAgfTsK
LQotICBNZXNzYWdlVjJCdWlsZGVyLnByb3RvdHlwZS5zZXRQYXlsb2FkID0gZnVuY3Rpb24oY2xz
LCB2YWwpIHsKLSAgICB0aGlzLnBheWxvYWQgPSB7Y2xzOiBjbHMsIHZhbDogdmFsfTsKLSAgfTsK
LQotICBNZXNzYWdlVjJCdWlsZGVyLnByb3RvdHlwZS5maW5pc2ggPSBmdW5jdGlvbigpIHsKLSAg
ICBpZiAoIXRoaXMucGF5bG9hZCkgewotICAgICAgdGhyb3cgbmV3IEVycm9yKCJQYXlsb2FkIG5l
ZWRzIHRvIGJlIHNldCBiZWZvcmUgY2FsbGluZyBmaW5pc2giKTsKLSAgICB9Ci0KLSAgICB0aGlz
LmVuY29kZXIuZW5jb2RlU3RydWN0UG9pbnRlcih0aGlzLnBheWxvYWQuY2xzLCB0aGlzLnBheWxv
YWQudmFsKTsKLSAgICB0aGlzLmVuY29kZXIuZW5jb2RlQXJyYXlQb2ludGVyKFVpbnQzMiwKLSAg
ICAgICAgbmV3IEFycmF5KHRoaXMuYXNzb2NpYXRlZEVuZHBvaW50SGFuZGxlcy5sZW5ndGgpKTsK
LQotICAgIHRoaXMuYnVmZmVyLnRyaW0oKTsKLSAgICB2YXIgbWVzc2FnZSA9IG5ldyBNZXNzYWdl
KHRoaXMuYnVmZmVyLCB0aGlzLmhhbmRsZXMsCi0gICAgICAgIHRoaXMuYXNzb2NpYXRlZEVuZHBv
aW50SGFuZGxlcyk7Ci0gICAgdGhpcy5idWZmZXIgPSBudWxsOwotICAgIHRoaXMuaGFuZGxlcyA9
IG51bGw7Ci0gICAgdGhpcy5lbmNvZGVyID0gbnVsbDsKLSAgICB0aGlzLnBheWxvYWQgPSBudWxs
OwotICAgIHRoaXMuYXNzb2NpYXRlZEVuZHBvaW50SGFuZGxlcyA9IG51bGw7Ci0KLSAgICByZXR1
cm4gbWVzc2FnZTsKLSAgfTsKLQotICAvLyBNZXNzYWdlUmVhZGVyIC0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0gIGZ1bmN0aW9u
IE1lc3NhZ2VSZWFkZXIobWVzc2FnZSkgewotICAgIHRoaXMuZGVjb2RlciA9IG5ldyBEZWNvZGVy
KG1lc3NhZ2UuYnVmZmVyLCBtZXNzYWdlLmhhbmRsZXMsCi0gICAgICAgIG1lc3NhZ2UuYXNzb2Np
YXRlZEVuZHBvaW50SGFuZGxlcywgMCk7Ci0gICAgdmFyIG1lc3NhZ2VIZWFkZXJTaXplID0gdGhp
cy5kZWNvZGVyLnJlYWRVaW50MzIoKTsKLSAgICB0aGlzLnBheWxvYWRTaXplID0gbWVzc2FnZS5i
dWZmZXIuYnl0ZUxlbmd0aCAtIG1lc3NhZ2VIZWFkZXJTaXplOwotICAgIHZhciB2ZXJzaW9uID0g
dGhpcy5kZWNvZGVyLnJlYWRVaW50MzIoKTsKLSAgICB2YXIgaW50ZXJmYWNlX2lkID0gdGhpcy5k
ZWNvZGVyLnJlYWRVaW50MzIoKTsKLSAgICB0aGlzLm1lc3NhZ2VOYW1lID0gdGhpcy5kZWNvZGVy
LnJlYWRVaW50MzIoKTsKLSAgICB0aGlzLmZsYWdzID0gdGhpcy5kZWNvZGVyLnJlYWRVaW50MzIo
KTsKLSAgICAvLyBTa2lwIHRoZSBwYWRkaW5nLgotICAgIHRoaXMuZGVjb2Rlci5za2lwKDQpOwot
ICAgIGlmICh2ZXJzaW9uID49IDEpCi0gICAgICB0aGlzLnJlcXVlc3RJRCA9IHRoaXMuZGVjb2Rl
ci5yZWFkVWludDY0KCk7Ci0gICAgdGhpcy5kZWNvZGVyLnNraXAobWVzc2FnZUhlYWRlclNpemUg
LSB0aGlzLmRlY29kZXIubmV4dCk7Ci0gIH0KLQotICBNZXNzYWdlUmVhZGVyLnByb3RvdHlwZS5k
ZWNvZGVTdHJ1Y3QgPSBmdW5jdGlvbihjbHMpIHsKLSAgICByZXR1cm4gY2xzLmRlY29kZSh0aGlz
LmRlY29kZXIpOwotICB9OwotCi0gIC8vIEJ1aWx0LWluIHR5cGVzIC0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLSAgLy8gVGhpcyB0
eXBlIGlzIG9ubHkgdXNlZCB3aXRoIEFycmF5T2YoUGFja2VkQm9vbCkuCi0gIGZ1bmN0aW9uIFBh
Y2tlZEJvb2woKSB7Ci0gIH0KLQotICBmdW5jdGlvbiBJbnQ4KCkgewotICB9Ci0KLSAgSW50OC5l
bmNvZGVkU2l6ZSA9IDE7Ci0KLSAgSW50OC5kZWNvZGUgPSBmdW5jdGlvbihkZWNvZGVyKSB7Ci0g
ICAgcmV0dXJuIGRlY29kZXIucmVhZEludDgoKTsKLSAgfTsKLQotICBJbnQ4LmVuY29kZSA9IGZ1
bmN0aW9uKGVuY29kZXIsIHZhbCkgewotICAgIGVuY29kZXIud3JpdGVJbnQ4KHZhbCk7Ci0gIH07
Ci0KLSAgVWludDguZW5jb2RlID0gZnVuY3Rpb24oZW5jb2RlciwgdmFsKSB7Ci0gICAgZW5jb2Rl
ci53cml0ZVVpbnQ4KHZhbCk7Ci0gIH07Ci0KLSAgZnVuY3Rpb24gVWludDgoKSB7Ci0gIH0KLQot
ICBVaW50OC5lbmNvZGVkU2l6ZSA9IDE7Ci0KLSAgVWludDguZGVjb2RlID0gZnVuY3Rpb24oZGVj
b2RlcikgewotICAgIHJldHVybiBkZWNvZGVyLnJlYWRVaW50OCgpOwotICB9OwotCi0gIFVpbnQ4
LmVuY29kZSA9IGZ1bmN0aW9uKGVuY29kZXIsIHZhbCkgewotICAgIGVuY29kZXIud3JpdGVVaW50
OCh2YWwpOwotICB9OwotCi0gIGZ1bmN0aW9uIEludDE2KCkgewotICB9Ci0KLSAgSW50MTYuZW5j
b2RlZFNpemUgPSAyOwotCi0gIEludDE2LmRlY29kZSA9IGZ1bmN0aW9uKGRlY29kZXIpIHsKLSAg
ICByZXR1cm4gZGVjb2Rlci5yZWFkSW50MTYoKTsKLSAgfTsKLQotICBJbnQxNi5lbmNvZGUgPSBm
dW5jdGlvbihlbmNvZGVyLCB2YWwpIHsKLSAgICBlbmNvZGVyLndyaXRlSW50MTYodmFsKTsKLSAg
fTsKLQotICBmdW5jdGlvbiBVaW50MTYoKSB7Ci0gIH0KLQotICBVaW50MTYuZW5jb2RlZFNpemUg
PSAyOwotCi0gIFVpbnQxNi5kZWNvZGUgPSBmdW5jdGlvbihkZWNvZGVyKSB7Ci0gICAgcmV0dXJu
IGRlY29kZXIucmVhZFVpbnQxNigpOwotICB9OwotCi0gIFVpbnQxNi5lbmNvZGUgPSBmdW5jdGlv
bihlbmNvZGVyLCB2YWwpIHsKLSAgICBlbmNvZGVyLndyaXRlVWludDE2KHZhbCk7Ci0gIH07Ci0K
LSAgZnVuY3Rpb24gSW50MzIoKSB7Ci0gIH0KLQotICBJbnQzMi5lbmNvZGVkU2l6ZSA9IDQ7Ci0K
LSAgSW50MzIuZGVjb2RlID0gZnVuY3Rpb24oZGVjb2RlcikgewotICAgIHJldHVybiBkZWNvZGVy
LnJlYWRJbnQzMigpOwotICB9OwotCi0gIEludDMyLmVuY29kZSA9IGZ1bmN0aW9uKGVuY29kZXIs
IHZhbCkgewotICAgIGVuY29kZXIud3JpdGVJbnQzMih2YWwpOwotICB9OwotCi0gIGZ1bmN0aW9u
IFVpbnQzMigpIHsKLSAgfQotCi0gIFVpbnQzMi5lbmNvZGVkU2l6ZSA9IDQ7Ci0KLSAgVWludDMy
LmRlY29kZSA9IGZ1bmN0aW9uKGRlY29kZXIpIHsKLSAgICByZXR1cm4gZGVjb2Rlci5yZWFkVWlu
dDMyKCk7Ci0gIH07Ci0KLSAgVWludDMyLmVuY29kZSA9IGZ1bmN0aW9uKGVuY29kZXIsIHZhbCkg
ewotICAgIGVuY29kZXIud3JpdGVVaW50MzIodmFsKTsKLSAgfTsKLQotICBmdW5jdGlvbiBJbnQ2
NCgpIHsKLSAgfQotCi0gIEludDY0LmVuY29kZWRTaXplID0gODsKLQotICBJbnQ2NC5kZWNvZGUg
PSBmdW5jdGlvbihkZWNvZGVyKSB7Ci0gICAgcmV0dXJuIGRlY29kZXIucmVhZEludDY0KCk7Ci0g
IH07Ci0KLSAgSW50NjQuZW5jb2RlID0gZnVuY3Rpb24oZW5jb2RlciwgdmFsKSB7Ci0gICAgZW5j
b2Rlci53cml0ZUludDY0KHZhbCk7Ci0gIH07Ci0KLSAgZnVuY3Rpb24gVWludDY0KCkgewotICB9
Ci0KLSAgVWludDY0LmVuY29kZWRTaXplID0gODsKLQotICBVaW50NjQuZGVjb2RlID0gZnVuY3Rp
b24oZGVjb2RlcikgewotICAgIHJldHVybiBkZWNvZGVyLnJlYWRVaW50NjQoKTsKLSAgfTsKLQot
ICBVaW50NjQuZW5jb2RlID0gZnVuY3Rpb24oZW5jb2RlciwgdmFsKSB7Ci0gICAgZW5jb2Rlci53
cml0ZVVpbnQ2NCh2YWwpOwotICB9OwotCi0gIGZ1bmN0aW9uIFN0cmluZygpIHsKLSAgfTsKLQot
ICBTdHJpbmcuZW5jb2RlZFNpemUgPSA4OwotCi0gIFN0cmluZy5kZWNvZGUgPSBmdW5jdGlvbihk
ZWNvZGVyKSB7Ci0gICAgcmV0dXJuIGRlY29kZXIuZGVjb2RlU3RyaW5nUG9pbnRlcigpOwotICB9
OwotCi0gIFN0cmluZy5lbmNvZGUgPSBmdW5jdGlvbihlbmNvZGVyLCB2YWwpIHsKLSAgICBlbmNv
ZGVyLmVuY29kZVN0cmluZ1BvaW50ZXIodmFsKTsKLSAgfTsKLQotICBmdW5jdGlvbiBOdWxsYWJs
ZVN0cmluZygpIHsKLSAgfQotCi0gIE51bGxhYmxlU3RyaW5nLmVuY29kZWRTaXplID0gU3RyaW5n
LmVuY29kZWRTaXplOwotCi0gIE51bGxhYmxlU3RyaW5nLmRlY29kZSA9IFN0cmluZy5kZWNvZGU7
Ci0KLSAgTnVsbGFibGVTdHJpbmcuZW5jb2RlID0gU3RyaW5nLmVuY29kZTsKLQotICBmdW5jdGlv
biBGbG9hdCgpIHsKLSAgfQotCi0gIEZsb2F0LmVuY29kZWRTaXplID0gNDsKLQotICBGbG9hdC5k
ZWNvZGUgPSBmdW5jdGlvbihkZWNvZGVyKSB7Ci0gICAgcmV0dXJuIGRlY29kZXIucmVhZEZsb2F0
KCk7Ci0gIH07Ci0KLSAgRmxvYXQuZW5jb2RlID0gZnVuY3Rpb24oZW5jb2RlciwgdmFsKSB7Ci0g
ICAgZW5jb2Rlci53cml0ZUZsb2F0KHZhbCk7Ci0gIH07Ci0KLSAgZnVuY3Rpb24gRG91YmxlKCkg
ewotICB9Ci0KLSAgRG91YmxlLmVuY29kZWRTaXplID0gODsKLQotICBEb3VibGUuZGVjb2RlID0g
ZnVuY3Rpb24oZGVjb2RlcikgewotICAgIHJldHVybiBkZWNvZGVyLnJlYWREb3VibGUoKTsKLSAg
fTsKLQotICBEb3VibGUuZW5jb2RlID0gZnVuY3Rpb24oZW5jb2RlciwgdmFsKSB7Ci0gICAgZW5j
b2Rlci53cml0ZURvdWJsZSh2YWwpOwotICB9OwotCi0gIGZ1bmN0aW9uIEVudW0oY2xzKSB7Ci0g
ICAgdGhpcy5jbHMgPSBjbHM7Ci0gIH0KLQotICBFbnVtLnByb3RvdHlwZS5lbmNvZGVkU2l6ZSA9
IDQ7Ci0KLSAgRW51bS5wcm90b3R5cGUuZGVjb2RlID0gZnVuY3Rpb24oZGVjb2RlcikgewotICAg
IHJldHVybiBkZWNvZGVyLnJlYWRJbnQzMigpOwotICB9OwotCi0gIEVudW0ucHJvdG90eXBlLmVu
Y29kZSA9IGZ1bmN0aW9uKGVuY29kZXIsIHZhbCkgewotICAgIGVuY29kZXIud3JpdGVJbnQzMih2
YWwpOwotICB9OwotCi0gIGZ1bmN0aW9uIFBvaW50ZXJUbyhjbHMpIHsKLSAgICB0aGlzLmNscyA9
IGNsczsKLSAgfQotCi0gIFBvaW50ZXJUby5wcm90b3R5cGUuZW5jb2RlZFNpemUgPSA4OwotCi0g
IFBvaW50ZXJUby5wcm90b3R5cGUuZGVjb2RlID0gZnVuY3Rpb24oZGVjb2RlcikgewotICAgIHZh
ciBwb2ludGVyID0gZGVjb2Rlci5kZWNvZGVQb2ludGVyKCk7Ci0gICAgaWYgKCFwb2ludGVyKSB7
Ci0gICAgICByZXR1cm4gbnVsbDsKLSAgICB9Ci0gICAgcmV0dXJuIHRoaXMuY2xzLmRlY29kZShk
ZWNvZGVyLmRlY29kZUFuZENyZWF0ZURlY29kZXIocG9pbnRlcikpOwotICB9OwotCi0gIFBvaW50
ZXJUby5wcm90b3R5cGUuZW5jb2RlID0gZnVuY3Rpb24oZW5jb2RlciwgdmFsKSB7Ci0gICAgaWYg
KCF2YWwpIHsKLSAgICAgIGVuY29kZXIuZW5jb2RlUG9pbnRlcih2YWwpOwotICAgICAgcmV0dXJu
OwotICAgIH0KLSAgICB2YXIgb2JqZWN0RW5jb2RlciA9IGVuY29kZXIuY3JlYXRlQW5kRW5jb2Rl
RW5jb2Rlcih0aGlzLmNscy5lbmNvZGVkU2l6ZSk7Ci0gICAgdGhpcy5jbHMuZW5jb2RlKG9iamVj
dEVuY29kZXIsIHZhbCk7Ci0gIH07Ci0KLSAgZnVuY3Rpb24gTnVsbGFibGVQb2ludGVyVG8oY2xz
KSB7Ci0gICAgUG9pbnRlclRvLmNhbGwodGhpcywgY2xzKTsKLSAgfQotCi0gIE51bGxhYmxlUG9p
bnRlclRvLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoUG9pbnRlclRvLnByb3RvdHlwZSk7Ci0K
LSAgZnVuY3Rpb24gQXJyYXlPZihjbHMsIGxlbmd0aCkgewotICAgIHRoaXMuY2xzID0gY2xzOwot
ICAgIHRoaXMubGVuZ3RoID0gbGVuZ3RoIHx8IDA7Ci0gIH0KLQotICBBcnJheU9mLnByb3RvdHlw
ZS5lbmNvZGVkU2l6ZSA9IDg7Ci0KLSAgQXJyYXlPZi5wcm90b3R5cGUuZGltZW5zaW9ucyA9IGZ1
bmN0aW9uKCkgewotICAgIHJldHVybiBbdGhpcy5sZW5ndGhdLmNvbmNhdCgKLSAgICAgICh0aGlz
LmNscyBpbnN0YW5jZW9mIEFycmF5T2YpID8gdGhpcy5jbHMuZGltZW5zaW9ucygpIDogW10pOwot
ICB9Ci0KLSAgQXJyYXlPZi5wcm90b3R5cGUuZGVjb2RlID0gZnVuY3Rpb24oZGVjb2Rlcikgewot
ICAgIHJldHVybiBkZWNvZGVyLmRlY29kZUFycmF5UG9pbnRlcih0aGlzLmNscyk7Ci0gIH07Ci0K
LSAgQXJyYXlPZi5wcm90b3R5cGUuZW5jb2RlID0gZnVuY3Rpb24oZW5jb2RlciwgdmFsKSB7Ci0g
ICAgZW5jb2Rlci5lbmNvZGVBcnJheVBvaW50ZXIodGhpcy5jbHMsIHZhbCk7Ci0gIH07Ci0KLSAg
ZnVuY3Rpb24gTnVsbGFibGVBcnJheU9mKGNscykgewotICAgIEFycmF5T2YuY2FsbCh0aGlzLCBj
bHMpOwotICB9Ci0KLSAgTnVsbGFibGVBcnJheU9mLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUo
QXJyYXlPZi5wcm90b3R5cGUpOwotCi0gIGZ1bmN0aW9uIEhhbmRsZSgpIHsKLSAgfQotCi0gIEhh
bmRsZS5lbmNvZGVkU2l6ZSA9IDQ7Ci0KLSAgSGFuZGxlLmRlY29kZSA9IGZ1bmN0aW9uKGRlY29k
ZXIpIHsKLSAgICByZXR1cm4gZGVjb2Rlci5kZWNvZGVIYW5kbGUoKTsKLSAgfTsKLQotICBIYW5k
bGUuZW5jb2RlID0gZnVuY3Rpb24oZW5jb2RlciwgdmFsKSB7Ci0gICAgZW5jb2Rlci5lbmNvZGVI
YW5kbGUodmFsKTsKLSAgfTsKLQotICBmdW5jdGlvbiBOdWxsYWJsZUhhbmRsZSgpIHsKLSAgfQot
Ci0gIE51bGxhYmxlSGFuZGxlLmVuY29kZWRTaXplID0gSGFuZGxlLmVuY29kZWRTaXplOwotCi0g
IE51bGxhYmxlSGFuZGxlLmRlY29kZSA9IEhhbmRsZS5kZWNvZGU7Ci0KLSAgTnVsbGFibGVIYW5k
bGUuZW5jb2RlID0gSGFuZGxlLmVuY29kZTsKLQotICBmdW5jdGlvbiBJbnRlcmZhY2UoY2xzKSB7
Ci0gICAgdGhpcy5jbHMgPSBjbHM7Ci0gIH0KLQotICBJbnRlcmZhY2UucHJvdG90eXBlLmVuY29k
ZWRTaXplID0gODsKLQotICBJbnRlcmZhY2UucHJvdG90eXBlLmRlY29kZSA9IGZ1bmN0aW9uKGRl
Y29kZXIpIHsKLSAgICB2YXIgaW50ZXJmYWNlUHRySW5mbyA9IG5ldyBtb2pvLkludGVyZmFjZVB0
ckluZm8oCi0gICAgICAgIGRlY29kZXIuZGVjb2RlSGFuZGxlKCksIGRlY29kZXIucmVhZFVpbnQz
MigpKTsKLSAgICB2YXIgaW50ZXJmYWNlUHRyID0gbmV3IHRoaXMuY2xzKCk7Ci0gICAgaW50ZXJm
YWNlUHRyLnB0ci5iaW5kKGludGVyZmFjZVB0ckluZm8pOwotICAgIHJldHVybiBpbnRlcmZhY2VQ
dHI7Ci0gIH07Ci0KLSAgSW50ZXJmYWNlLnByb3RvdHlwZS5lbmNvZGUgPSBmdW5jdGlvbihlbmNv
ZGVyLCB2YWwpIHsKLSAgICB2YXIgaW50ZXJmYWNlUHRySW5mbyA9Ci0gICAgICAgIHZhbCA/IHZh
bC5wdHIucGFzc0ludGVyZmFjZSgpIDogbmV3IG1vam8uSW50ZXJmYWNlUHRySW5mbyhudWxsLCAw
KTsKLSAgICBlbmNvZGVyLmVuY29kZUhhbmRsZShpbnRlcmZhY2VQdHJJbmZvLmhhbmRsZSk7Ci0g
ICAgZW5jb2Rlci53cml0ZVVpbnQzMihpbnRlcmZhY2VQdHJJbmZvLnZlcnNpb24pOwotICB9Owot
Ci0gIGZ1bmN0aW9uIE51bGxhYmxlSW50ZXJmYWNlKGNscykgewotICAgIEludGVyZmFjZS5jYWxs
KHRoaXMsIGNscyk7Ci0gIH0KLQotICBOdWxsYWJsZUludGVyZmFjZS5wcm90b3R5cGUgPSBPYmpl
Y3QuY3JlYXRlKEludGVyZmFjZS5wcm90b3R5cGUpOwotCi0gIGZ1bmN0aW9uIEFzc29jaWF0ZWRJ
bnRlcmZhY2VQdHJJbmZvKCkgewotICB9Ci0KLSAgQXNzb2NpYXRlZEludGVyZmFjZVB0ckluZm8u
cHJvdG90eXBlLmVuY29kZWRTaXplID0gODsKLQotICBBc3NvY2lhdGVkSW50ZXJmYWNlUHRySW5m
by5kZWNvZGUgPSBmdW5jdGlvbihkZWNvZGVyKSB7Ci0gICAgcmV0dXJuIG5ldyBtb2pvLkFzc29j
aWF0ZWRJbnRlcmZhY2VQdHJJbmZvKAotICAgICAgZGVjb2Rlci5kZWNvZGVBc3NvY2lhdGVkRW5k
cG9pbnRIYW5kbGUoKSwgZGVjb2Rlci5yZWFkVWludDMyKCkpOwotICB9OwotCi0gIEFzc29jaWF0
ZWRJbnRlcmZhY2VQdHJJbmZvLmVuY29kZSA9IGZ1bmN0aW9uKGVuY29kZXIsIHZhbCkgewotICAg
IHZhciBhc3NvY2lhdGVkaW50ZXJmYWNlUHRySW5mbyA9Ci0gICAgICAgIHZhbCA/IHZhbCA6IG5l
dyBtb2pvLkFzc29jaWF0ZWRJbnRlcmZhY2VQdHJJbmZvKG51bGwsIDApOwotICAgIGVuY29kZXIu
ZW5jb2RlQXNzb2NpYXRlZEVuZHBvaW50SGFuZGxlKAotICAgICAgICBhc3NvY2lhdGVkaW50ZXJm
YWNlUHRySW5mby5pbnRlcmZhY2VFbmRwb2ludEhhbmRsZSk7Ci0gICAgZW5jb2Rlci53cml0ZVVp
bnQzMihhc3NvY2lhdGVkaW50ZXJmYWNlUHRySW5mby52ZXJzaW9uKTsKLSAgfTsKLQotICBmdW5j
dGlvbiBOdWxsYWJsZUFzc29jaWF0ZWRJbnRlcmZhY2VQdHJJbmZvKCkgewotICB9Ci0KLSAgTnVs
bGFibGVBc3NvY2lhdGVkSW50ZXJmYWNlUHRySW5mby5lbmNvZGVkU2l6ZSA9Ci0gICAgICBBc3Nv
Y2lhdGVkSW50ZXJmYWNlUHRySW5mby5lbmNvZGVkU2l6ZTsKLQotICBOdWxsYWJsZUFzc29jaWF0
ZWRJbnRlcmZhY2VQdHJJbmZvLmRlY29kZSA9Ci0gICAgICBBc3NvY2lhdGVkSW50ZXJmYWNlUHRy
SW5mby5kZWNvZGU7Ci0KLSAgTnVsbGFibGVBc3NvY2lhdGVkSW50ZXJmYWNlUHRySW5mby5lbmNv
ZGUgPQotICAgICAgQXNzb2NpYXRlZEludGVyZmFjZVB0ckluZm8uZW5jb2RlOwotCi0gIGZ1bmN0
aW9uIEludGVyZmFjZVJlcXVlc3QoKSB7Ci0gIH0KLQotICBJbnRlcmZhY2VSZXF1ZXN0LmVuY29k
ZWRTaXplID0gNDsKLQotICBJbnRlcmZhY2VSZXF1ZXN0LmRlY29kZSA9IGZ1bmN0aW9uKGRlY29k
ZXIpIHsKLSAgICByZXR1cm4gbmV3IG1vam8uSW50ZXJmYWNlUmVxdWVzdChkZWNvZGVyLmRlY29k
ZUhhbmRsZSgpKTsKLSAgfTsKLQotICBJbnRlcmZhY2VSZXF1ZXN0LmVuY29kZSA9IGZ1bmN0aW9u
KGVuY29kZXIsIHZhbCkgewotICAgIGVuY29kZXIuZW5jb2RlSGFuZGxlKHZhbCA/IHZhbC5oYW5k
bGUgOiBudWxsKTsKLSAgfTsKLQotICBmdW5jdGlvbiBOdWxsYWJsZUludGVyZmFjZVJlcXVlc3Qo
KSB7Ci0gIH0KLQotICBOdWxsYWJsZUludGVyZmFjZVJlcXVlc3QuZW5jb2RlZFNpemUgPSBJbnRl
cmZhY2VSZXF1ZXN0LmVuY29kZWRTaXplOwotCi0gIE51bGxhYmxlSW50ZXJmYWNlUmVxdWVzdC5k
ZWNvZGUgPSBJbnRlcmZhY2VSZXF1ZXN0LmRlY29kZTsKLQotICBOdWxsYWJsZUludGVyZmFjZVJl
cXVlc3QuZW5jb2RlID0gSW50ZXJmYWNlUmVxdWVzdC5lbmNvZGU7Ci0KLSAgZnVuY3Rpb24gQXNz
b2NpYXRlZEludGVyZmFjZVJlcXVlc3QoKSB7Ci0gIH0KLQotICBBc3NvY2lhdGVkSW50ZXJmYWNl
UmVxdWVzdC5kZWNvZGUgPSBmdW5jdGlvbihkZWNvZGVyKSB7Ci0gICAgdmFyIGhhbmRsZSA9IGRl
Y29kZXIuZGVjb2RlQXNzb2NpYXRlZEVuZHBvaW50SGFuZGxlKCk7Ci0gICAgcmV0dXJuIG5ldyBt
b2pvLkFzc29jaWF0ZWRJbnRlcmZhY2VSZXF1ZXN0KGhhbmRsZSk7Ci0gIH07Ci0KLSAgQXNzb2Np
YXRlZEludGVyZmFjZVJlcXVlc3QuZW5jb2RlID0gZnVuY3Rpb24oZW5jb2RlciwgdmFsKSB7Ci0g
ICAgZW5jb2Rlci5lbmNvZGVBc3NvY2lhdGVkRW5kcG9pbnRIYW5kbGUoCi0gICAgICAgIHZhbCA/
IHZhbC5pbnRlcmZhY2VFbmRwb2ludEhhbmRsZSA6IG51bGwpOwotICB9OwotCi0gIEFzc29jaWF0
ZWRJbnRlcmZhY2VSZXF1ZXN0LmVuY29kZWRTaXplID0gNDsKLQotICBmdW5jdGlvbiBOdWxsYWJs
ZUFzc29jaWF0ZWRJbnRlcmZhY2VSZXF1ZXN0KCkgewotICB9Ci0KLSAgTnVsbGFibGVBc3NvY2lh
dGVkSW50ZXJmYWNlUmVxdWVzdC5lbmNvZGVkU2l6ZSA9Ci0gICAgICBBc3NvY2lhdGVkSW50ZXJm
YWNlUmVxdWVzdC5lbmNvZGVkU2l6ZTsKLQotICBOdWxsYWJsZUFzc29jaWF0ZWRJbnRlcmZhY2VS
ZXF1ZXN0LmRlY29kZSA9Ci0gICAgICBBc3NvY2lhdGVkSW50ZXJmYWNlUmVxdWVzdC5kZWNvZGU7
Ci0KLSAgTnVsbGFibGVBc3NvY2lhdGVkSW50ZXJmYWNlUmVxdWVzdC5lbmNvZGUgPQotICAgICAg
QXNzb2NpYXRlZEludGVyZmFjZVJlcXVlc3QuZW5jb2RlOwotCi0gIGZ1bmN0aW9uIE1hcE9mKGtl
eUNsYXNzLCB2YWx1ZUNsYXNzKSB7Ci0gICAgdGhpcy5rZXlDbGFzcyA9IGtleUNsYXNzOwotICAg
IHRoaXMudmFsdWVDbGFzcyA9IHZhbHVlQ2xhc3M7Ci0gIH0KLQotICBNYXBPZi5wcm90b3R5cGUu
ZW5jb2RlZFNpemUgPSA4OwotCi0gIE1hcE9mLnByb3RvdHlwZS5kZWNvZGUgPSBmdW5jdGlvbihk
ZWNvZGVyKSB7Ci0gICAgcmV0dXJuIGRlY29kZXIuZGVjb2RlTWFwUG9pbnRlcih0aGlzLmtleUNs
YXNzLCB0aGlzLnZhbHVlQ2xhc3MpOwotICB9OwotCi0gIE1hcE9mLnByb3RvdHlwZS5lbmNvZGUg
PSBmdW5jdGlvbihlbmNvZGVyLCB2YWwpIHsKLSAgICBlbmNvZGVyLmVuY29kZU1hcFBvaW50ZXIo
dGhpcy5rZXlDbGFzcywgdGhpcy52YWx1ZUNsYXNzLCB2YWwpOwotICB9OwotCi0gIGZ1bmN0aW9u
IE51bGxhYmxlTWFwT2Yoa2V5Q2xhc3MsIHZhbHVlQ2xhc3MpIHsKLSAgICBNYXBPZi5jYWxsKHRo
aXMsIGtleUNsYXNzLCB2YWx1ZUNsYXNzKTsKLSAgfQotCi0gIE51bGxhYmxlTWFwT2YucHJvdG90
eXBlID0gT2JqZWN0LmNyZWF0ZShNYXBPZi5wcm90b3R5cGUpOwotCi0gIGludGVybmFsLmFsaWdu
ID0gYWxpZ247Ci0gIGludGVybmFsLmlzQWxpZ25lZCA9IGlzQWxpZ25lZDsKLSAgaW50ZXJuYWwu
TWVzc2FnZSA9IE1lc3NhZ2U7Ci0gIGludGVybmFsLk1lc3NhZ2VWMEJ1aWxkZXIgPSBNZXNzYWdl
VjBCdWlsZGVyOwotICBpbnRlcm5hbC5NZXNzYWdlVjFCdWlsZGVyID0gTWVzc2FnZVYxQnVpbGRl
cjsKLSAgaW50ZXJuYWwuTWVzc2FnZVYyQnVpbGRlciA9IE1lc3NhZ2VWMkJ1aWxkZXI7Ci0gIGlu
dGVybmFsLk1lc3NhZ2VSZWFkZXIgPSBNZXNzYWdlUmVhZGVyOwotICBpbnRlcm5hbC5rQXJyYXlI
ZWFkZXJTaXplID0ga0FycmF5SGVhZGVyU2l6ZTsKLSAgaW50ZXJuYWwua01hcFN0cnVjdFBheWxv
YWRTaXplID0ga01hcFN0cnVjdFBheWxvYWRTaXplOwotICBpbnRlcm5hbC5rU3RydWN0SGVhZGVy
U2l6ZSA9IGtTdHJ1Y3RIZWFkZXJTaXplOwotICBpbnRlcm5hbC5rRW5jb2RlZEludmFsaWRIYW5k
bGVWYWx1ZSA9IGtFbmNvZGVkSW52YWxpZEhhbmRsZVZhbHVlOwotICBpbnRlcm5hbC5rTWVzc2Fn
ZVYwSGVhZGVyU2l6ZSA9IGtNZXNzYWdlVjBIZWFkZXJTaXplOwotICBpbnRlcm5hbC5rTWVzc2Fn
ZVYxSGVhZGVyU2l6ZSA9IGtNZXNzYWdlVjFIZWFkZXJTaXplOwotICBpbnRlcm5hbC5rTWVzc2Fn
ZVYySGVhZGVyU2l6ZSA9IGtNZXNzYWdlVjJIZWFkZXJTaXplOwotICBpbnRlcm5hbC5rTWVzc2Fn
ZVBheWxvYWRJbnRlcmZhY2VJZHNQb2ludGVyT2Zmc2V0ID0KLSAgICAgIGtNZXNzYWdlUGF5bG9h
ZEludGVyZmFjZUlkc1BvaW50ZXJPZmZzZXQ7Ci0gIGludGVybmFsLmtNZXNzYWdlRXhwZWN0c1Jl
c3BvbnNlID0ga01lc3NhZ2VFeHBlY3RzUmVzcG9uc2U7Ci0gIGludGVybmFsLmtNZXNzYWdlSXNS
ZXNwb25zZSA9IGtNZXNzYWdlSXNSZXNwb25zZTsKLSAgaW50ZXJuYWwuSW50OCA9IEludDg7Ci0g
IGludGVybmFsLlVpbnQ4ID0gVWludDg7Ci0gIGludGVybmFsLkludDE2ID0gSW50MTY7Ci0gIGlu
dGVybmFsLlVpbnQxNiA9IFVpbnQxNjsKLSAgaW50ZXJuYWwuSW50MzIgPSBJbnQzMjsKLSAgaW50
ZXJuYWwuVWludDMyID0gVWludDMyOwotICBpbnRlcm5hbC5JbnQ2NCA9IEludDY0OwotICBpbnRl
cm5hbC5VaW50NjQgPSBVaW50NjQ7Ci0gIGludGVybmFsLkZsb2F0ID0gRmxvYXQ7Ci0gIGludGVy
bmFsLkRvdWJsZSA9IERvdWJsZTsKLSAgaW50ZXJuYWwuU3RyaW5nID0gU3RyaW5nOwotICBpbnRl
cm5hbC5FbnVtID0gRW51bTsKLSAgaW50ZXJuYWwuTnVsbGFibGVTdHJpbmcgPSBOdWxsYWJsZVN0
cmluZzsKLSAgaW50ZXJuYWwuUG9pbnRlclRvID0gUG9pbnRlclRvOwotICBpbnRlcm5hbC5OdWxs
YWJsZVBvaW50ZXJUbyA9IE51bGxhYmxlUG9pbnRlclRvOwotICBpbnRlcm5hbC5BcnJheU9mID0g
QXJyYXlPZjsKLSAgaW50ZXJuYWwuTnVsbGFibGVBcnJheU9mID0gTnVsbGFibGVBcnJheU9mOwot
ICBpbnRlcm5hbC5QYWNrZWRCb29sID0gUGFja2VkQm9vbDsKLSAgaW50ZXJuYWwuSGFuZGxlID0g
SGFuZGxlOwotICBpbnRlcm5hbC5OdWxsYWJsZUhhbmRsZSA9IE51bGxhYmxlSGFuZGxlOwotICBp
bnRlcm5hbC5JbnRlcmZhY2UgPSBJbnRlcmZhY2U7Ci0gIGludGVybmFsLk51bGxhYmxlSW50ZXJm
YWNlID0gTnVsbGFibGVJbnRlcmZhY2U7Ci0gIGludGVybmFsLkludGVyZmFjZVJlcXVlc3QgPSBJ
bnRlcmZhY2VSZXF1ZXN0OwotICBpbnRlcm5hbC5OdWxsYWJsZUludGVyZmFjZVJlcXVlc3QgPSBO
dWxsYWJsZUludGVyZmFjZVJlcXVlc3Q7Ci0gIGludGVybmFsLkFzc29jaWF0ZWRJbnRlcmZhY2VQ
dHJJbmZvID0gQXNzb2NpYXRlZEludGVyZmFjZVB0ckluZm87Ci0gIGludGVybmFsLk51bGxhYmxl
QXNzb2NpYXRlZEludGVyZmFjZVB0ckluZm8gPQotICAgICAgTnVsbGFibGVBc3NvY2lhdGVkSW50
ZXJmYWNlUHRySW5mbzsKLSAgaW50ZXJuYWwuQXNzb2NpYXRlZEludGVyZmFjZVJlcXVlc3QgPSBB
c3NvY2lhdGVkSW50ZXJmYWNlUmVxdWVzdDsKLSAgaW50ZXJuYWwuTnVsbGFibGVBc3NvY2lhdGVk
SW50ZXJmYWNlUmVxdWVzdCA9Ci0gICAgICBOdWxsYWJsZUFzc29jaWF0ZWRJbnRlcmZhY2VSZXF1
ZXN0OwotICBpbnRlcm5hbC5NYXBPZiA9IE1hcE9mOwotICBpbnRlcm5hbC5OdWxsYWJsZU1hcE9m
ID0gTnVsbGFibGVNYXBPZjsKLX0pKCk7Ci0vLyBDb3B5cmlnaHQgMjAxNCBUaGUgQ2hyb21pdW0g
QXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2Rl
IGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5k
IGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLShmdW5jdGlvbigpIHsKLSAgdmFyIGludGVybmFsID0g
bW9qby5pbnRlcm5hbDsKLQotICBmdW5jdGlvbiBDb25uZWN0b3IoaGFuZGxlKSB7Ci0gICAgaWYg
KCEoaGFuZGxlIGluc3RhbmNlb2YgTW9qb0hhbmRsZSkpCi0gICAgICB0aHJvdyBuZXcgRXJyb3Io
IkNvbm5lY3Rvcjogbm90IGEgaGFuZGxlICIgKyBoYW5kbGUpOwotICAgIHRoaXMuaGFuZGxlXyA9
IGhhbmRsZTsKLSAgICB0aGlzLmRyb3BXcml0ZXNfID0gZmFsc2U7Ci0gICAgdGhpcy5lcnJvcl8g
PSBmYWxzZTsKLSAgICB0aGlzLmluY29taW5nUmVjZWl2ZXJfID0gbnVsbDsKLSAgICB0aGlzLnJl
YWRXYXRjaGVyXyA9IG51bGw7Ci0gICAgdGhpcy5lcnJvckhhbmRsZXJfID0gbnVsbDsKLSAgICB0
aGlzLnBhdXNlZF8gPSBmYWxzZTsKLQotICAgIHRoaXMud2FpdFRvUmVhZE1vcmUoKTsKLSAgfQot
Ci0gIENvbm5lY3Rvci5wcm90b3R5cGUuY2xvc2UgPSBmdW5jdGlvbigpIHsKLSAgICB0aGlzLmNh
bmNlbFdhaXQoKTsKLSAgICBpZiAodGhpcy5oYW5kbGVfICE9IG51bGwpIHsKLSAgICAgIHRoaXMu
aGFuZGxlXy5jbG9zZSgpOwotICAgICAgdGhpcy5oYW5kbGVfID0gbnVsbDsKLSAgICB9Ci0gIH07
Ci0KLSAgQ29ubmVjdG9yLnByb3RvdHlwZS5wYXVzZUluY29taW5nTWV0aG9kQ2FsbFByb2Nlc3Np
bmcgPSBmdW5jdGlvbigpIHsKLSAgICBpZiAodGhpcy5wYXVzZWRfKSB7Ci0gICAgICByZXR1cm47
Ci0gICAgfQotICAgIHRoaXMucGF1c2VkXz0gdHJ1ZTsKLSAgICB0aGlzLmNhbmNlbFdhaXQoKTsK
LSAgfTsKLQotICBDb25uZWN0b3IucHJvdG90eXBlLnJlc3VtZUluY29taW5nTWV0aG9kQ2FsbFBy
b2Nlc3NpbmcgPSBmdW5jdGlvbigpIHsKLSAgICBpZiAoIXRoaXMucGF1c2VkXykgewotICAgICAg
cmV0dXJuOwotICAgIH0KLSAgICB0aGlzLnBhdXNlZF89IGZhbHNlOwotICAgIHRoaXMud2FpdFRv
UmVhZE1vcmUoKTsKLSAgfTsKLQotICBDb25uZWN0b3IucHJvdG90eXBlLmFjY2VwdCA9IGZ1bmN0
aW9uKG1lc3NhZ2UpIHsKLSAgICBpZiAodGhpcy5lcnJvcl8pCi0gICAgICByZXR1cm4gZmFsc2U7
Ci0KLSAgICBpZiAodGhpcy5kcm9wV3JpdGVzXykKLSAgICAgIHJldHVybiB0cnVlOwotCi0gICAg
dmFyIHJlc3VsdCA9IHRoaXMuaGFuZGxlXy53cml0ZU1lc3NhZ2UoCi0gICAgICAgIG5ldyBVaW50
OEFycmF5KG1lc3NhZ2UuYnVmZmVyLmFycmF5QnVmZmVyKSwgbWVzc2FnZS5oYW5kbGVzKTsKLSAg
ICBzd2l0Y2ggKHJlc3VsdCkgewotICAgICAgY2FzZSBNb2pvLlJFU1VMVF9PSzoKLSAgICAgICAg
Ly8gVGhlIGhhbmRsZXMgd2VyZSBzdWNjZXNzZnVsbHkgdHJhbnNmZXJyZWQsIHNvIHdlIGRvbid0
IG93biB0aGVtCi0gICAgICAgIC8vIGFueW1vcmUuCi0gICAgICAgIG1lc3NhZ2UuaGFuZGxlcyA9
IFtdOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgTW9qby5SRVNVTFRfRkFJTEVEX1BSRUNP
TkRJVElPTjoKLSAgICAgICAgLy8gVGhlcmUncyBubyBwb2ludCBpbiBjb250aW51aW5nIHRvIHdy
aXRlIHRvIHRoaXMgcGlwZSBzaW5jZSB0aGUgb3RoZXIKLSAgICAgICAgLy8gZW5kIGlzIGdvbmUu
IEF2b2lkIHdyaXRpbmcgYW55IGZ1dHVyZSBtZXNzYWdlcy4gSGlkZSB3cml0ZSBmYWlsdXJlcwot
ICAgICAgICAvLyBmcm9tIHRoZSBjYWxsZXIgc2luY2Ugd2UnZCBsaWtlIHRoZW0gdG8gY29udGlu
dWUgY29uc3VtaW5nIGFueQotICAgICAgICAvLyBiYWNrbG9nIG9mIGluY29taW5nIG1lc3NhZ2Vz
IGJlZm9yZSByZWdhcmRpbmcgdGhlIG1lc3NhZ2UgcGlwZSBhcwotICAgICAgICAvLyBjbG9zZWQu
Ci0gICAgICAgIHRoaXMuZHJvcFdyaXRlc18gPSB0cnVlOwotICAgICAgICBicmVhazsKLSAgICAg
IGRlZmF1bHQ6Ci0gICAgICAgIC8vIFRoaXMgcGFydGljdWxhciB3cml0ZSB3YXMgcmVqZWN0ZWQs
IHByZXN1bWFibHkgYmVjYXVzZSBvZiBiYWQgaW5wdXQuCi0gICAgICAgIC8vIFRoZSBwaXBlIGlz
IG5vdCBuZWNlc3NhcmlseSBpbiBhIGJhZCBzdGF0ZS4KLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKLSAgfTsKLQotICBDb25uZWN0b3IucHJvdG90eXBlLnNl
dEluY29taW5nUmVjZWl2ZXIgPSBmdW5jdGlvbihyZWNlaXZlcikgewotICAgIHRoaXMuaW5jb21p
bmdSZWNlaXZlcl8gPSByZWNlaXZlcjsKLSAgfTsKLQotICBDb25uZWN0b3IucHJvdG90eXBlLnNl
dEVycm9ySGFuZGxlciA9IGZ1bmN0aW9uKGhhbmRsZXIpIHsKLSAgICB0aGlzLmVycm9ySGFuZGxl
cl8gPSBoYW5kbGVyOwotICB9OwotCi0gIENvbm5lY3Rvci5wcm90b3R5cGUucmVhZE1vcmVfID0g
ZnVuY3Rpb24ocmVzdWx0KSB7Ci0gICAgZm9yICg7OykgewotICAgICAgaWYgKHRoaXMucGF1c2Vk
XykgewotICAgICAgICByZXR1cm47Ci0gICAgICB9Ci0KLSAgICAgIHZhciByZWFkID0gdGhpcy5o
YW5kbGVfLnJlYWRNZXNzYWdlKCk7Ci0gICAgICBpZiAodGhpcy5oYW5kbGVfID09IG51bGwpIC8v
IFRoZSBjb25uZWN0b3IgaGFzIGJlZW4gY2xvc2VkLgotICAgICAgICByZXR1cm47Ci0gICAgICBp
ZiAocmVhZC5yZXN1bHQgPT0gTW9qby5SRVNVTFRfU0hPVUxEX1dBSVQpCi0gICAgICAgIHJldHVy
bjsKLSAgICAgIGlmIChyZWFkLnJlc3VsdCAhPSBNb2pvLlJFU1VMVF9PSykgewotICAgICAgICB0
aGlzLmhhbmRsZUVycm9yKHJlYWQucmVzdWx0ICE9PSBNb2pvLlJFU1VMVF9GQUlMRURfUFJFQ09O
RElUSU9OLAotICAgICAgICAgICAgZmFsc2UpOwotICAgICAgICByZXR1cm47Ci0gICAgICB9Ci0g
ICAgICB2YXIgbWVzc2FnZUJ1ZmZlciA9IG5ldyBpbnRlcm5hbC5CdWZmZXIocmVhZC5idWZmZXIp
OwotICAgICAgdmFyIG1lc3NhZ2UgPSBuZXcgaW50ZXJuYWwuTWVzc2FnZShtZXNzYWdlQnVmZmVy
LCByZWFkLmhhbmRsZXMpOwotICAgICAgdmFyIHJlY2VpdmVyUmVzdWx0ID0gdGhpcy5pbmNvbWlu
Z1JlY2VpdmVyXyAmJgotICAgICAgICAgIHRoaXMuaW5jb21pbmdSZWNlaXZlcl8uYWNjZXB0KG1l
c3NhZ2UpOwotCi0gICAgICAvLyBEaXNwYXRjaGluZyB0aGUgbWVzc2FnZSBtYXkgaGF2ZSBjbG9z
ZWQgdGhlIGNvbm5lY3Rvci4KLSAgICAgIGlmICh0aGlzLmhhbmRsZV8gPT0gbnVsbCkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgICAvLyBIYW5kbGUgaW52YWxpZCBpbmNvbWluZyBtZXNzYWdlLgot
ICAgICAgaWYgKCFpbnRlcm5hbC5pc1Rlc3RpbmdNb2RlKCkgJiYgIXJlY2VpdmVyUmVzdWx0KSB7
Ci0gICAgICAgIC8vIFRPRE8oeXpzaGVuKTogQ29uc2lkZXIgbm90aWZ5aW5nIHRoZSBlbWJlZGRl
ci4KLSAgICAgICAgdGhpcy5oYW5kbGVFcnJvcih0cnVlLCBmYWxzZSk7Ci0gICAgICB9Ci0gICAg
fQotICB9OwotCi0gIENvbm5lY3Rvci5wcm90b3R5cGUuY2FuY2VsV2FpdCA9IGZ1bmN0aW9uKCkg
ewotICAgIGlmICh0aGlzLnJlYWRXYXRjaGVyXykgewotICAgICAgdGhpcy5yZWFkV2F0Y2hlcl8u
Y2FuY2VsKCk7Ci0gICAgICB0aGlzLnJlYWRXYXRjaGVyXyA9IG51bGw7Ci0gICAgfQotICB9Owot
Ci0gIENvbm5lY3Rvci5wcm90b3R5cGUud2FpdFRvUmVhZE1vcmUgPSBmdW5jdGlvbigpIHsKLSAg
ICBpZiAodGhpcy5oYW5kbGVfKSB7Ci0gICAgICB0aGlzLnJlYWRXYXRjaGVyXyA9IHRoaXMuaGFu
ZGxlXy53YXRjaCh7cmVhZGFibGU6IHRydWV9LAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdGhpcy5yZWFkTW9yZV8uYmluZCh0aGlzKSk7Ci0gICAgfQotICB9
OwotCi0gIENvbm5lY3Rvci5wcm90b3R5cGUuaGFuZGxlRXJyb3IgPSBmdW5jdGlvbihmb3JjZVBp
cGVSZXNldCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZv
cmNlQXN5bmNIYW5kbGVyKSB7Ci0gICAgaWYgKHRoaXMuZXJyb3JfIHx8IHRoaXMuaGFuZGxlXyA9
PT0gbnVsbCkgewotICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmICh0aGlzLnBhdXNlZF8p
IHsKLSAgICAgIC8vIEVuZm9yY2UgY2FsbGluZyB0aGUgZXJyb3IgaGFuZGxlciBhc3luY2hyb25v
dXNseSBpZiB0aGUgdXNlciBoYXMKLSAgICAgIC8vIHBhdXNlZCByZWNlaXZpbmcgbWVzc2FnZXMu
IFdlIG5lZWQgdG8gd2FpdCB1bnRpbCB0aGUgdXNlciBzdGFydHMKLSAgICAgIC8vIHJlY2Vpdmlu
ZyBtZXNzYWdlcyBhZ2Fpbi4KLSAgICAgIGZvcmNlQXN5bmNIYW5kbGVyID0gdHJ1ZTsKLSAgICB9
Ci0KLSAgICBpZiAoIWZvcmNlUGlwZVJlc2V0ICYmIGZvcmNlQXN5bmNIYW5kbGVyKSB7Ci0gICAg
ICBmb3JjZVBpcGVSZXNldCA9IHRydWU7Ci0gICAgfQotCi0gICAgdGhpcy5jYW5jZWxXYWl0KCk7
Ci0gICAgaWYgKGZvcmNlUGlwZVJlc2V0KSB7Ci0gICAgICB0aGlzLmhhbmRsZV8uY2xvc2UoKTsK
LSAgICAgIHZhciBkdW1teVBpcGUgPSBNb2pvLmNyZWF0ZU1lc3NhZ2VQaXBlKCk7Ci0gICAgICB0
aGlzLmhhbmRsZV8gPSBkdW1teVBpcGUuaGFuZGxlMDsKLSAgICB9Ci0KLSAgICBpZiAoZm9yY2VB
c3luY0hhbmRsZXIpIHsKLSAgICAgIGlmICghdGhpcy5wYXVzZWRfKSB7Ci0gICAgICAgIHRoaXMu
d2FpdFRvUmVhZE1vcmUoKTsKLSAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgdGhpcy5lcnJv
cl8gPSB0cnVlOwotICAgICAgaWYgKHRoaXMuZXJyb3JIYW5kbGVyXykgewotICAgICAgICB0aGlz
LmVycm9ySGFuZGxlcl8ub25FcnJvcigpOwotICAgICAgfQotICAgIH0KLSAgfTsKLQotICBpbnRl
cm5hbC5Db25uZWN0b3IgPSBDb25uZWN0b3I7Ci19KSgpOwotLy8gQ29weXJpZ2h0IDIwMTcgVGhl
IENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBz
b3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJl
Ci0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotCi0oZnVuY3Rpb24oKSB7Ci0gIHZhciBp
bnRlcm5hbCA9IG1vam8uaW50ZXJuYWw7Ci0KLSAgZnVuY3Rpb24gdmFsaWRhdGVDb250cm9sUmVx
dWVzdFdpdGhSZXNwb25zZShtZXNzYWdlKSB7Ci0gICAgdmFyIG1lc3NhZ2VWYWxpZGF0b3IgPSBu
ZXcgaW50ZXJuYWwuVmFsaWRhdG9yKG1lc3NhZ2UpOwotICAgIHZhciBlcnJvciA9IG1lc3NhZ2VW
YWxpZGF0b3IudmFsaWRhdGVNZXNzYWdlSXNSZXF1ZXN0RXhwZWN0aW5nUmVzcG9uc2UoKTsKLSAg
ICBpZiAoZXJyb3IgIT09IGludGVybmFsLnZhbGlkYXRpb25FcnJvci5OT05FKSB7Ci0gICAgICB0
aHJvdyBlcnJvcjsKLSAgICB9Ci0KLSAgICBpZiAobWVzc2FnZS5nZXROYW1lKCkgIT0gbW9qby5p
bnRlcmZhY2VDb250cm9sLmtSdW5NZXNzYWdlSWQpIHsKLSAgICAgIHRocm93IG5ldyBFcnJvcigi
Q29udHJvbCBtZXNzYWdlIG5hbWUgaXMgbm90IGtSdW5NZXNzYWdlSWQiKTsKLSAgICB9Ci0KLSAg
ICAvLyBWYWxpZGF0ZSBwYXlsb2FkLgotICAgIGVycm9yID0gbW9qby5pbnRlcmZhY2VDb250cm9s
LlJ1bk1lc3NhZ2VQYXJhbXMudmFsaWRhdGUobWVzc2FnZVZhbGlkYXRvciwKLSAgICAgICAgbWVz
c2FnZS5nZXRIZWFkZXJOdW1CeXRlcygpKTsKLSAgICBpZiAoZXJyb3IgIT0gaW50ZXJuYWwudmFs
aWRhdGlvbkVycm9yLk5PTkUpIHsKLSAgICAgIHRocm93IGVycm9yOwotICAgIH0KLSAgfQotCi0g
IGZ1bmN0aW9uIHZhbGlkYXRlQ29udHJvbFJlcXVlc3RXaXRob3V0UmVzcG9uc2UobWVzc2FnZSkg
ewotICAgIHZhciBtZXNzYWdlVmFsaWRhdG9yID0gbmV3IGludGVybmFsLlZhbGlkYXRvcihtZXNz
YWdlKTsKLSAgICB2YXIgZXJyb3IgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlTWVzc2FnZUlz
UmVxdWVzdFdpdGhvdXRSZXNwb25zZSgpOwotICAgIGlmIChlcnJvciAhPSBpbnRlcm5hbC52YWxp
ZGF0aW9uRXJyb3IuTk9ORSkgewotICAgICAgdGhyb3cgZXJyb3I7Ci0gICAgfQotCi0gICAgaWYg
KG1lc3NhZ2UuZ2V0TmFtZSgpICE9IG1vam8uaW50ZXJmYWNlQ29udHJvbC5rUnVuT3JDbG9zZVBp
cGVNZXNzYWdlSWQpIHsKLSAgICAgIHRocm93IG5ldyBFcnJvcigiQ29udHJvbCBtZXNzYWdlIG5h
bWUgaXMgbm90IGtSdW5PckNsb3NlUGlwZU1lc3NhZ2VJZCIpOwotICAgIH0KLQotICAgIC8vIFZh
bGlkYXRlIHBheWxvYWQuCi0gICAgZXJyb3IgPSBtb2pvLmludGVyZmFjZUNvbnRyb2wuUnVuT3JD
bG9zZVBpcGVNZXNzYWdlUGFyYW1zLnZhbGlkYXRlKAotICAgICAgICBtZXNzYWdlVmFsaWRhdG9y
LCBtZXNzYWdlLmdldEhlYWRlck51bUJ5dGVzKCkpOwotICAgIGlmIChlcnJvciAhPSBpbnRlcm5h
bC52YWxpZGF0aW9uRXJyb3IuTk9ORSkgewotICAgICAgdGhyb3cgZXJyb3I7Ci0gICAgfQotICB9
Ci0KLSAgZnVuY3Rpb24gcnVuT3JDbG9zZVBpcGUobWVzc2FnZSwgaW50ZXJmYWNlVmVyc2lvbikg
ewotICAgIHZhciByZWFkZXIgPSBuZXcgaW50ZXJuYWwuTWVzc2FnZVJlYWRlcihtZXNzYWdlKTsK
LSAgICB2YXIgcnVuT3JDbG9zZVBpcGVNZXNzYWdlUGFyYW1zID0gcmVhZGVyLmRlY29kZVN0cnVj
dCgKLSAgICAgICAgbW9qby5pbnRlcmZhY2VDb250cm9sLlJ1bk9yQ2xvc2VQaXBlTWVzc2FnZVBh
cmFtcyk7Ci0gICAgcmV0dXJuIGludGVyZmFjZVZlcnNpb24gPj0KLSAgICAgICAgcnVuT3JDbG9z
ZVBpcGVNZXNzYWdlUGFyYW1zLmlucHV0LnJlcXVpcmVWZXJzaW9uLnZlcnNpb247Ci0gIH0KLQot
ICBmdW5jdGlvbiBydW4obWVzc2FnZSwgcmVzcG9uZGVyLCBpbnRlcmZhY2VWZXJzaW9uKSB7Ci0g
ICAgdmFyIHJlYWRlciA9IG5ldyBpbnRlcm5hbC5NZXNzYWdlUmVhZGVyKG1lc3NhZ2UpOwotICAg
IHZhciBydW5NZXNzYWdlUGFyYW1zID0KLSAgICAgICAgcmVhZGVyLmRlY29kZVN0cnVjdChtb2pv
LmludGVyZmFjZUNvbnRyb2wuUnVuTWVzc2FnZVBhcmFtcyk7Ci0gICAgdmFyIHJ1bk91dHB1dCA9
IG51bGw7Ci0KLSAgICBpZiAocnVuTWVzc2FnZVBhcmFtcy5pbnB1dC5xdWVyeVZlcnNpb24pIHsK
LSAgICAgIHJ1bk91dHB1dCA9IG5ldyBtb2pvLmludGVyZmFjZUNvbnRyb2wuUnVuT3V0cHV0KCk7
Ci0gICAgICBydW5PdXRwdXQucXVlcnlWZXJzaW9uUmVzdWx0ID0gbmV3Ci0gICAgICAgICAgbW9q
by5pbnRlcmZhY2VDb250cm9sLlF1ZXJ5VmVyc2lvblJlc3VsdCgKLSAgICAgICAgICAgICAgeyd2
ZXJzaW9uJzogaW50ZXJmYWNlVmVyc2lvbn0pOwotICAgIH0KLQotICAgIHZhciBydW5SZXNwb25z
ZU1lc3NhZ2VQYXJhbXMgPSBuZXcKLSAgICAgICAgbW9qby5pbnRlcmZhY2VDb250cm9sLlJ1blJl
c3BvbnNlTWVzc2FnZVBhcmFtcygpOwotICAgIHJ1blJlc3BvbnNlTWVzc2FnZVBhcmFtcy5vdXRw
dXQgPSBydW5PdXRwdXQ7Ci0KLSAgICB2YXIgbWVzc2FnZU5hbWUgPSBtb2pvLmludGVyZmFjZUNv
bnRyb2wua1J1bk1lc3NhZ2VJZDsKLSAgICB2YXIgcGF5bG9hZFNpemUgPQotICAgICAgICBtb2pv
LmludGVyZmFjZUNvbnRyb2wuUnVuUmVzcG9uc2VNZXNzYWdlUGFyYW1zLmVuY29kZWRTaXplOwot
ICAgIHZhciByZXF1ZXN0SUQgPSByZWFkZXIucmVxdWVzdElEOwotICAgIHZhciBidWlsZGVyID0g
bmV3IGludGVybmFsLk1lc3NhZ2VWMUJ1aWxkZXIobWVzc2FnZU5hbWUsCi0gICAgICAgIHBheWxv
YWRTaXplLCBpbnRlcm5hbC5rTWVzc2FnZUlzUmVzcG9uc2UsIHJlcXVlc3RJRCk7Ci0gICAgYnVp
bGRlci5lbmNvZGVTdHJ1Y3QobW9qby5pbnRlcmZhY2VDb250cm9sLlJ1blJlc3BvbnNlTWVzc2Fn
ZVBhcmFtcywKLSAgICAgICAgICAgICAgICAgICAgICAgICBydW5SZXNwb25zZU1lc3NhZ2VQYXJh
bXMpOwotICAgIHJlc3BvbmRlci5hY2NlcHQoYnVpbGRlci5maW5pc2goKSk7Ci0gICAgcmV0dXJu
IHRydWU7Ci0gIH0KLQotICBmdW5jdGlvbiBpc0ludGVyZmFjZUNvbnRyb2xNZXNzYWdlKG1lc3Nh
Z2UpIHsKLSAgICByZXR1cm4gbWVzc2FnZS5nZXROYW1lKCkgPT0gbW9qby5pbnRlcmZhY2VDb250
cm9sLmtSdW5NZXNzYWdlSWQgfHwKLSAgICAgICAgICAgbWVzc2FnZS5nZXROYW1lKCkgPT0gbW9q
by5pbnRlcmZhY2VDb250cm9sLmtSdW5PckNsb3NlUGlwZU1lc3NhZ2VJZDsKLSAgfQotCi0gIGZ1
bmN0aW9uIENvbnRyb2xNZXNzYWdlSGFuZGxlcihpbnRlcmZhY2VWZXJzaW9uKSB7Ci0gICAgdGhp
cy5pbnRlcmZhY2VWZXJzaW9uXyA9IGludGVyZmFjZVZlcnNpb247Ci0gIH0KLQotICBDb250cm9s
TWVzc2FnZUhhbmRsZXIucHJvdG90eXBlLmFjY2VwdCA9IGZ1bmN0aW9uKG1lc3NhZ2UpIHsKLSAg
ICB2YWxpZGF0ZUNvbnRyb2xSZXF1ZXN0V2l0aG91dFJlc3BvbnNlKG1lc3NhZ2UpOwotICAgIHJl
dHVybiBydW5PckNsb3NlUGlwZShtZXNzYWdlLCB0aGlzLmludGVyZmFjZVZlcnNpb25fKTsKLSAg
fTsKLQotICBDb250cm9sTWVzc2FnZUhhbmRsZXIucHJvdG90eXBlLmFjY2VwdFdpdGhSZXNwb25k
ZXIgPSBmdW5jdGlvbihtZXNzYWdlLAotICAgICAgcmVzcG9uZGVyKSB7Ci0gICAgdmFsaWRhdGVD
b250cm9sUmVxdWVzdFdpdGhSZXNwb25zZShtZXNzYWdlKTsKLSAgICByZXR1cm4gcnVuKG1lc3Nh
Z2UsIHJlc3BvbmRlciwgdGhpcy5pbnRlcmZhY2VWZXJzaW9uXyk7Ci0gIH07Ci0KLSAgaW50ZXJu
YWwuQ29udHJvbE1lc3NhZ2VIYW5kbGVyID0gQ29udHJvbE1lc3NhZ2VIYW5kbGVyOwotICBpbnRl
cm5hbC5pc0ludGVyZmFjZUNvbnRyb2xNZXNzYWdlID0gaXNJbnRlcmZhY2VDb250cm9sTWVzc2Fn
ZTsKLX0pKCk7Ci0vLyBDb3B5cmlnaHQgMjAxNyBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5
IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNF
IGZpbGUuCi0KLShmdW5jdGlvbigpIHsKLSAgdmFyIGludGVybmFsID0gbW9qby5pbnRlcm5hbDsK
LQotICBmdW5jdGlvbiBjb25zdHJ1Y3RSdW5PckNsb3NlUGlwZU1lc3NhZ2UocnVuT3JDbG9zZVBp
cGVJbnB1dCkgewotICAgIHZhciBydW5PckNsb3NlUGlwZU1lc3NhZ2VQYXJhbXMgPSBuZXcKLSAg
ICAgICAgbW9qby5pbnRlcmZhY2VDb250cm9sLlJ1bk9yQ2xvc2VQaXBlTWVzc2FnZVBhcmFtcygp
OwotICAgIHJ1bk9yQ2xvc2VQaXBlTWVzc2FnZVBhcmFtcy5pbnB1dCA9IHJ1bk9yQ2xvc2VQaXBl
SW5wdXQ7Ci0KLSAgICB2YXIgbWVzc2FnZU5hbWUgPSBtb2pvLmludGVyZmFjZUNvbnRyb2wua1J1
bk9yQ2xvc2VQaXBlTWVzc2FnZUlkOwotICAgIHZhciBwYXlsb2FkU2l6ZSA9Ci0gICAgICAgIG1v
am8uaW50ZXJmYWNlQ29udHJvbC5SdW5PckNsb3NlUGlwZU1lc3NhZ2VQYXJhbXMuZW5jb2RlZFNp
emU7Ci0gICAgdmFyIGJ1aWxkZXIgPSBuZXcgaW50ZXJuYWwuTWVzc2FnZVYwQnVpbGRlcihtZXNz
YWdlTmFtZSwgcGF5bG9hZFNpemUpOwotICAgIGJ1aWxkZXIuZW5jb2RlU3RydWN0KG1vam8uaW50
ZXJmYWNlQ29udHJvbC5SdW5PckNsb3NlUGlwZU1lc3NhZ2VQYXJhbXMsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgcnVuT3JDbG9zZVBpcGVNZXNzYWdlUGFyYW1zKTsKLSAgICB2YXIgbWVzc2Fn
ZSA9IGJ1aWxkZXIuZmluaXNoKCk7Ci0gICAgcmV0dXJuIG1lc3NhZ2U7Ci0gIH0KLQotICBmdW5j
dGlvbiB2YWxpZGF0ZUNvbnRyb2xSZXNwb25zZShtZXNzYWdlKSB7Ci0gICAgdmFyIG1lc3NhZ2VW
YWxpZGF0b3IgPSBuZXcgaW50ZXJuYWwuVmFsaWRhdG9yKG1lc3NhZ2UpOwotICAgIHZhciBlcnJv
ciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVNZXNzYWdlSXNSZXNwb25zZSgpOwotICAgIGlm
IChlcnJvciAhPSBpbnRlcm5hbC52YWxpZGF0aW9uRXJyb3IuTk9ORSkgewotICAgICAgdGhyb3cg
ZXJyb3I7Ci0gICAgfQotCi0gICAgaWYgKG1lc3NhZ2UuZ2V0TmFtZSgpICE9IG1vam8uaW50ZXJm
YWNlQ29udHJvbC5rUnVuTWVzc2FnZUlkKSB7Ci0gICAgICB0aHJvdyBuZXcgRXJyb3IoIkNvbnRy
b2wgbWVzc2FnZSBuYW1lIGlzIG5vdCBrUnVuTWVzc2FnZUlkIik7Ci0gICAgfQotCi0gICAgLy8g
VmFsaWRhdGUgcGF5bG9hZC4KLSAgICBlcnJvciA9IG1vam8uaW50ZXJmYWNlQ29udHJvbC5SdW5S
ZXNwb25zZU1lc3NhZ2VQYXJhbXMudmFsaWRhdGUoCi0gICAgICAgIG1lc3NhZ2VWYWxpZGF0b3Is
IG1lc3NhZ2UuZ2V0SGVhZGVyTnVtQnl0ZXMoKSk7Ci0gICAgaWYgKGVycm9yICE9IGludGVybmFs
LnZhbGlkYXRpb25FcnJvci5OT05FKSB7Ci0gICAgICB0aHJvdyBlcnJvcjsKLSAgICB9Ci0gIH0K
LQotICBmdW5jdGlvbiBhY2NlcHRSdW5SZXNwb25zZShtZXNzYWdlKSB7Ci0gICAgdmFsaWRhdGVD
b250cm9sUmVzcG9uc2UobWVzc2FnZSk7Ci0KLSAgICB2YXIgcmVhZGVyID0gbmV3IGludGVybmFs
Lk1lc3NhZ2VSZWFkZXIobWVzc2FnZSk7Ci0gICAgdmFyIHJ1blJlc3BvbnNlTWVzc2FnZVBhcmFt
cyA9IHJlYWRlci5kZWNvZGVTdHJ1Y3QoCi0gICAgICAgIG1vam8uaW50ZXJmYWNlQ29udHJvbC5S
dW5SZXNwb25zZU1lc3NhZ2VQYXJhbXMpOwotCi0gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShy
dW5SZXNwb25zZU1lc3NhZ2VQYXJhbXMpOwotICB9Ci0KLSAvKioKLSAgKiBTZW5kcyB0aGUgZ2l2
ZW4gcnVuIG1lc3NhZ2UgdGhyb3VnaCB0aGUgcmVjZWl2ZXIuCi0gICogQWNjZXB0cyB0aGUgcmVz
cG9uc2UgbWVzc2FnZSBmcm9tIHRoZSByZWNlaXZlciBhbmQgZGVjb2RlcyB0aGUgbWVzc2FnZQot
ICAqIHN0cnVjdCB0byBSdW5SZXNwb25zZU1lc3NhZ2VQYXJhbXMuCi0gICoKLSAgKiBAcGFyYW0g
IHtSb3V0ZXJ9IHJlY2VpdmVyLgotICAqIEBwYXJhbSAge1J1bk1lc3NhZ2VQYXJhbXN9IHJ1bk1l
c3NhZ2VQYXJhbXMgdG8gYmUgc2VudCB2aWEgYSBtZXNzYWdlLgotICAqIEByZXR1cm4ge1Byb21p
c2V9IHRoYXQgcmVzb2x2ZXMgdG8gYSBSdW5SZXNwb25zZU1lc3NhZ2VQYXJhbXMuCi0gICovCi0g
IGZ1bmN0aW9uIHNlbmRSdW5NZXNzYWdlKHJlY2VpdmVyLCBydW5NZXNzYWdlUGFyYW1zKSB7Ci0g
ICAgdmFyIG1lc3NhZ2VOYW1lID0gbW9qby5pbnRlcmZhY2VDb250cm9sLmtSdW5NZXNzYWdlSWQ7
Ci0gICAgdmFyIHBheWxvYWRTaXplID0gbW9qby5pbnRlcmZhY2VDb250cm9sLlJ1bk1lc3NhZ2VQ
YXJhbXMuZW5jb2RlZFNpemU7Ci0gICAgLy8gfHJlcXVlc3RJRHwgaXMgc2V0IHRvIDAsIGJ1dCBp
cyBsYXRlciBwcm9wZXJseSBzZXQgYnkgUm91dGVyLgotICAgIHZhciBidWlsZGVyID0gbmV3IGlu
dGVybmFsLk1lc3NhZ2VWMUJ1aWxkZXIobWVzc2FnZU5hbWUsCi0gICAgICAgIHBheWxvYWRTaXpl
LCBpbnRlcm5hbC5rTWVzc2FnZUV4cGVjdHNSZXNwb25zZSwgMCk7Ci0gICAgYnVpbGRlci5lbmNv
ZGVTdHJ1Y3QobW9qby5pbnRlcmZhY2VDb250cm9sLlJ1bk1lc3NhZ2VQYXJhbXMsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgcnVuTWVzc2FnZVBhcmFtcyk7Ci0gICAgdmFyIG1lc3NhZ2UgPSBi
dWlsZGVyLmZpbmlzaCgpOwotCi0gICAgcmV0dXJuIHJlY2VpdmVyLmFjY2VwdEFuZEV4cGVjdFJl
c3BvbnNlKG1lc3NhZ2UpLnRoZW4oYWNjZXB0UnVuUmVzcG9uc2UpOwotICB9Ci0KLSAgZnVuY3Rp
b24gQ29udHJvbE1lc3NhZ2VQcm94eShyZWNlaXZlcikgewotICAgIHRoaXMucmVjZWl2ZXJfID0g
cmVjZWl2ZXI7Ci0gIH0KLQotICBDb250cm9sTWVzc2FnZVByb3h5LnByb3RvdHlwZS5xdWVyeVZl
cnNpb24gPSBmdW5jdGlvbigpIHsKLSAgICB2YXIgcnVuTWVzc2FnZVBhcmFtcyA9IG5ldyBtb2pv
LmludGVyZmFjZUNvbnRyb2wuUnVuTWVzc2FnZVBhcmFtcygpOwotICAgIHJ1bk1lc3NhZ2VQYXJh
bXMuaW5wdXQgPSBuZXcgbW9qby5pbnRlcmZhY2VDb250cm9sLlJ1bklucHV0KCk7Ci0gICAgcnVu
TWVzc2FnZVBhcmFtcy5pbnB1dC5xdWVyeVZlcnNpb24gPQotICAgICAgICBuZXcgbW9qby5pbnRl
cmZhY2VDb250cm9sLlF1ZXJ5VmVyc2lvbigpOwotCi0gICAgcmV0dXJuIHNlbmRSdW5NZXNzYWdl
KHRoaXMucmVjZWl2ZXJfLCBydW5NZXNzYWdlUGFyYW1zKS50aGVuKGZ1bmN0aW9uKAotICAgICAg
ICBydW5SZXNwb25zZU1lc3NhZ2VQYXJhbXMpIHsKLSAgICAgIHJldHVybiBydW5SZXNwb25zZU1l
c3NhZ2VQYXJhbXMub3V0cHV0LnF1ZXJ5VmVyc2lvblJlc3VsdC52ZXJzaW9uOwotICAgIH0pOwot
ICB9OwotCi0gIENvbnRyb2xNZXNzYWdlUHJveHkucHJvdG90eXBlLnJlcXVpcmVWZXJzaW9uID0g
ZnVuY3Rpb24odmVyc2lvbikgewotICAgIHZhciBydW5PckNsb3NlUGlwZUlucHV0ID0gbmV3IG1v
am8uaW50ZXJmYWNlQ29udHJvbC5SdW5PckNsb3NlUGlwZUlucHV0KCk7Ci0gICAgcnVuT3JDbG9z
ZVBpcGVJbnB1dC5yZXF1aXJlVmVyc2lvbiA9Ci0gICAgICAgIG5ldyBtb2pvLmludGVyZmFjZUNv
bnRyb2wuUmVxdWlyZVZlcnNpb24oeyd2ZXJzaW9uJzogdmVyc2lvbn0pOwotICAgIHZhciBtZXNz
YWdlID0gY29uc3RydWN0UnVuT3JDbG9zZVBpcGVNZXNzYWdlKHJ1bk9yQ2xvc2VQaXBlSW5wdXQp
OwotICAgIHRoaXMucmVjZWl2ZXJfLmFjY2VwdChtZXNzYWdlKTsKLSAgfTsKLQotICBpbnRlcm5h
bC5Db250cm9sTWVzc2FnZVByb3h5ID0gQ29udHJvbE1lc3NhZ2VQcm94eTsKLX0pKCk7Ci0vLyBD
b3B5cmlnaHQgMjAxNyBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxp
Y2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLShmdW5j
dGlvbigpIHsKLSAgdmFyIGludGVybmFsID0gbW9qby5pbnRlcm5hbDsKLQotICBmdW5jdGlvbiBJ
bnRlcmZhY2VFbmRwb2ludENsaWVudChpbnRlcmZhY2VFbmRwb2ludEhhbmRsZSwgcmVjZWl2ZXIs
Ci0gICAgICBpbnRlcmZhY2VWZXJzaW9uKSB7Ci0gICAgdGhpcy5jb250cm9sbGVyXyA9IG51bGw7
Ci0gICAgdGhpcy5lbmNvdW50ZXJlZEVycm9yXyA9IGZhbHNlOwotICAgIHRoaXMuaGFuZGxlXyA9
IGludGVyZmFjZUVuZHBvaW50SGFuZGxlOwotICAgIHRoaXMuaW5jb21pbmdSZWNlaXZlcl8gPSBy
ZWNlaXZlcjsKLQotICAgIGlmIChpbnRlcmZhY2VWZXJzaW9uICE9PSB1bmRlZmluZWQpIHsKLSAg
ICAgIHRoaXMuY29udHJvbE1lc3NhZ2VIYW5kbGVyXyA9IG5ldyBpbnRlcm5hbC5Db250cm9sTWVz
c2FnZUhhbmRsZXIoCi0gICAgICAgICAgaW50ZXJmYWNlVmVyc2lvbik7Ci0gICAgfSBlbHNlIHsK
LSAgICAgIHRoaXMuY29udHJvbE1lc3NhZ2VQcm94eV8gPSBuZXcgaW50ZXJuYWwuQ29udHJvbE1l
c3NhZ2VQcm94eSh0aGlzKTsKLSAgICB9Ci0KLSAgICB0aGlzLm5leHRSZXF1ZXN0SURfID0gMDsK
LSAgICB0aGlzLmNvbXBsZXRlcnNfID0gbmV3IE1hcCgpOwotICAgIHRoaXMucGF5bG9hZFZhbGlk
YXRvcnNfID0gW107Ci0gICAgdGhpcy5jb25uZWN0aW9uRXJyb3JIYW5kbGVyXyA9IG51bGw7Ci0K
LSAgICBpZiAoaW50ZXJmYWNlRW5kcG9pbnRIYW5kbGUucGVuZGluZ0Fzc29jaWF0aW9uKCkpIHsK
LSAgICAgIGludGVyZmFjZUVuZHBvaW50SGFuZGxlLnNldEFzc29jaWF0aW9uRXZlbnRIYW5kbGVy
KAotICAgICAgICAgIHRoaXMub25Bc3NvY2lhdGlvbkV2ZW50LmJpbmQodGhpcykpOwotICAgIH0g
ZWxzZSB7Ci0gICAgICB0aGlzLmluaXRDb250cm9sbGVySWZOZWNlc3NhcnlfKCk7Ci0gICAgfQot
ICB9Ci0KLSAgSW50ZXJmYWNlRW5kcG9pbnRDbGllbnQucHJvdG90eXBlLmluaXRDb250cm9sbGVy
SWZOZWNlc3NhcnlfID0gZnVuY3Rpb24oKSB7Ci0gICAgaWYgKHRoaXMuY29udHJvbGxlcl8gfHwg
dGhpcy5oYW5kbGVfLnBlbmRpbmdBc3NvY2lhdGlvbigpKSB7Ci0gICAgICByZXR1cm47Ci0gICAg
fQotCi0gICAgdGhpcy5jb250cm9sbGVyXyA9IHRoaXMuaGFuZGxlXy5ncm91cENvbnRyb2xsZXIo
KS5hdHRhY2hFbmRwb2ludENsaWVudCgKLSAgICAgICAgdGhpcy5oYW5kbGVfLCB0aGlzKTsKLSAg
fTsKLQotICBJbnRlcmZhY2VFbmRwb2ludENsaWVudC5wcm90b3R5cGUub25Bc3NvY2lhdGlvbkV2
ZW50ID0gZnVuY3Rpb24oCi0gICAgICBhc3NvY2lhdGlvbkV2ZW50KSB7Ci0gICAgaWYgKGFzc29j
aWF0aW9uRXZlbnQgPT09IGludGVybmFsLkFzc29jaWF0aW9uRXZlbnQuQVNTT0NJQVRFRCkgewot
ICAgICAgdGhpcy5pbml0Q29udHJvbGxlcklmTmVjZXNzYXJ5XygpOwotICAgIH0gZWxzZSBpZiAo
YXNzb2NpYXRpb25FdmVudCA9PT0KLSAgICAgICAgICBpbnRlcm5hbC5Bc3NvY2lhdGlvbkV2ZW50
LlBFRVJfQ0xPU0VEX0JFRk9SRV9BU1NPQ0lBVElPTikgewotICAgICAgc2V0VGltZW91dCh0aGlz
Lm5vdGlmeUVycm9yLmJpbmQodGhpcywgdGhpcy5oYW5kbGVfLmRpc2Nvbm5lY3RSZWFzb24oKSks
Ci0gICAgICAgICAgICAgICAgIDApOwotICAgIH0KLSAgfTsKLQotICBJbnRlcmZhY2VFbmRwb2lu
dENsaWVudC5wcm90b3R5cGUucGFzc0hhbmRsZSA9IGZ1bmN0aW9uKCkgewotICAgIGlmICghdGhp
cy5oYW5kbGVfLmlzVmFsaWQoKSkgewotICAgICAgcmV0dXJuIG5ldyBpbnRlcm5hbC5JbnRlcmZh
Y2VFbmRwb2ludEhhbmRsZSgpOwotICAgIH0KLQotICAgIC8vIFVzZWQgdG8gY2xlYXIgdGhlIHBy
ZXZpb3VzbHkgc2V0IGNhbGxiYWNrLgotICAgIHRoaXMuaGFuZGxlXy5zZXRBc3NvY2lhdGlvbkV2
ZW50SGFuZGxlcih1bmRlZmluZWQpOwotCi0gICAgaWYgKHRoaXMuY29udHJvbGxlcl8pIHsKLSAg
ICAgIHRoaXMuY29udHJvbGxlcl8gPSBudWxsOwotICAgICAgdGhpcy5oYW5kbGVfLmdyb3VwQ29u
dHJvbGxlcigpLmRldGFjaEVuZHBvaW50Q2xpZW50KHRoaXMuaGFuZGxlXyk7Ci0gICAgfQotICAg
IHZhciBoYW5kbGUgPSB0aGlzLmhhbmRsZV87Ci0gICAgdGhpcy5oYW5kbGVfID0gbnVsbDsKLSAg
ICByZXR1cm4gaGFuZGxlOwotICB9OwotCi0gIEludGVyZmFjZUVuZHBvaW50Q2xpZW50LnByb3Rv
dHlwZS5jbG9zZSA9IGZ1bmN0aW9uKHJlYXNvbikgewotICAgIHZhciBoYW5kbGUgPSB0aGlzLnBh
c3NIYW5kbGUoKTsKLSAgICBoYW5kbGUucmVzZXQocmVhc29uKTsKLSAgfTsKLQotICBJbnRlcmZh
Y2VFbmRwb2ludENsaWVudC5wcm90b3R5cGUuYWNjZXB0ID0gZnVuY3Rpb24obWVzc2FnZSkgewot
ICAgIGlmIChtZXNzYWdlLmFzc29jaWF0ZWRFbmRwb2ludEhhbmRsZXMubGVuZ3RoID4gMCkgewot
ICAgICAgbWVzc2FnZS5zZXJpYWxpemVBc3NvY2lhdGVkRW5kcG9pbnRIYW5kbGVzKAotICAgICAg
ICAgIHRoaXMuaGFuZGxlXy5ncm91cENvbnRyb2xsZXIoKSk7Ci0gICAgfQotCi0gICAgaWYgKHRo
aXMuZW5jb3VudGVyZWRFcnJvcl8pIHsKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAg
ICB0aGlzLmluaXRDb250cm9sbGVySWZOZWNlc3NhcnlfKCk7Ci0gICAgcmV0dXJuIHRoaXMuY29u
dHJvbGxlcl8uc2VuZE1lc3NhZ2UobWVzc2FnZSk7Ci0gIH07Ci0KLSAgSW50ZXJmYWNlRW5kcG9p
bnRDbGllbnQucHJvdG90eXBlLmFjY2VwdEFuZEV4cGVjdFJlc3BvbnNlID0gZnVuY3Rpb24oCi0g
ICAgICBtZXNzYWdlKSB7Ci0gICAgaWYgKG1lc3NhZ2UuYXNzb2NpYXRlZEVuZHBvaW50SGFuZGxl
cy5sZW5ndGggPiAwKSB7Ci0gICAgICBtZXNzYWdlLnNlcmlhbGl6ZUFzc29jaWF0ZWRFbmRwb2lu
dEhhbmRsZXMoCi0gICAgICAgICAgdGhpcy5oYW5kbGVfLmdyb3VwQ29udHJvbGxlcigpKTsKLSAg
ICB9Ci0KLSAgICBpZiAodGhpcy5lbmNvdW50ZXJlZEVycm9yXykgewotICAgICAgcmV0dXJuIFBy
b21pc2UucmVqZWN0KCk7Ci0gICAgfQotCi0gICAgdGhpcy5pbml0Q29udHJvbGxlcklmTmVjZXNz
YXJ5XygpOwotCi0gICAgLy8gUmVzZXJ2ZSAwIGluIGNhc2Ugd2Ugd2FudCBpdCB0byBjb252ZXkg
c3BlY2lhbCBtZWFuaW5nIGluIHRoZSBmdXR1cmUuCi0gICAgdmFyIHJlcXVlc3RJRCA9IHRoaXMu
bmV4dFJlcXVlc3RJRF8rKzsKLSAgICBpZiAocmVxdWVzdElEID09PSAwKQotICAgICAgcmVxdWVz
dElEID0gdGhpcy5uZXh0UmVxdWVzdElEXysrOwotCi0gICAgbWVzc2FnZS5zZXRSZXF1ZXN0SUQo
cmVxdWVzdElEKTsKLSAgICB2YXIgcmVzdWx0ID0gdGhpcy5jb250cm9sbGVyXy5zZW5kTWVzc2Fn
ZShtZXNzYWdlKTsKLSAgICBpZiAoIXJlc3VsdCkKLSAgICAgIHJldHVybiBQcm9taXNlLnJlamVj
dChFcnJvcigiQ29ubmVjdGlvbiBlcnJvciIpKTsKLQotICAgIHZhciBjb21wbGV0ZXIgPSB7fTsK
LSAgICB0aGlzLmNvbXBsZXRlcnNfLnNldChyZXF1ZXN0SUQsIGNvbXBsZXRlcik7Ci0gICAgcmV0
dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkgewotICAgICAgY29tcGxl
dGVyLnJlc29sdmUgPSByZXNvbHZlOwotICAgICAgY29tcGxldGVyLnJlamVjdCA9IHJlamVjdDsK
LSAgICB9KTsKLSAgfTsKLQotICBJbnRlcmZhY2VFbmRwb2ludENsaWVudC5wcm90b3R5cGUuc2V0
UGF5bG9hZFZhbGlkYXRvcnMgPSBmdW5jdGlvbigKLSAgICAgIHBheWxvYWRWYWxpZGF0b3JzKSB7
Ci0gICAgdGhpcy5wYXlsb2FkVmFsaWRhdG9yc18gPSBwYXlsb2FkVmFsaWRhdG9yczsKLSAgfTsK
LQotICBJbnRlcmZhY2VFbmRwb2ludENsaWVudC5wcm90b3R5cGUuc2V0SW5jb21pbmdSZWNlaXZl
ciA9IGZ1bmN0aW9uKHJlY2VpdmVyKSB7Ci0gICAgdGhpcy5pbmNvbWluZ1JlY2VpdmVyXyA9IHJl
Y2VpdmVyOwotICB9OwotCi0gIEludGVyZmFjZUVuZHBvaW50Q2xpZW50LnByb3RvdHlwZS5zZXRD
b25uZWN0aW9uRXJyb3JIYW5kbGVyID0gZnVuY3Rpb24oCi0gICAgICBoYW5kbGVyKSB7Ci0gICAg
dGhpcy5jb25uZWN0aW9uRXJyb3JIYW5kbGVyXyA9IGhhbmRsZXI7Ci0gIH07Ci0KLSAgSW50ZXJm
YWNlRW5kcG9pbnRDbGllbnQucHJvdG90eXBlLmhhbmRsZUluY29taW5nTWVzc2FnZSA9IGZ1bmN0
aW9uKG1lc3NhZ2UsCi0gICAgICBtZXNzYWdlVmFsaWRhdG9yKSB7Ci0gICAgdmFyIG5vRXJyb3Ig
PSBpbnRlcm5hbC52YWxpZGF0aW9uRXJyb3IuTk9ORTsKLSAgICB2YXIgZXJyID0gbm9FcnJvcjsK
LSAgICBmb3IgKHZhciBpID0gMDsgZXJyID09PSBub0Vycm9yICYmIGkgPCB0aGlzLnBheWxvYWRW
YWxpZGF0b3JzXy5sZW5ndGg7ICsraSkKLSAgICAgIGVyciA9IHRoaXMucGF5bG9hZFZhbGlkYXRv
cnNfW2ldKG1lc3NhZ2VWYWxpZGF0b3IpOwotCi0gICAgaWYgKGVyciA9PSBub0Vycm9yKSB7Ci0g
ICAgICByZXR1cm4gdGhpcy5oYW5kbGVWYWxpZEluY29taW5nTWVzc2FnZV8obWVzc2FnZSk7Ci0g
ICAgfSBlbHNlIHsKLSAgICAgIGludGVybmFsLnJlcG9ydFZhbGlkYXRpb25FcnJvcihlcnIpOwot
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgfTsKLQotICBJbnRlcmZhY2VFbmRwb2ludENs
aWVudC5wcm90b3R5cGUuaGFuZGxlVmFsaWRJbmNvbWluZ01lc3NhZ2VfID0gZnVuY3Rpb24oCi0g
ICAgICBtZXNzYWdlKSB7Ci0gICAgaWYgKGludGVybmFsLmlzVGVzdGluZ01vZGUoKSkgewotICAg
ICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgaWYgKHRoaXMuZW5jb3VudGVyZWRFcnJvcl8p
IHsKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICB2YXIgb2sgPSBmYWxzZTsKLQot
ICAgIGlmIChtZXNzYWdlLmV4cGVjdHNSZXNwb25zZSgpKSB7Ci0gICAgICBpZiAoaW50ZXJuYWwu
aXNJbnRlcmZhY2VDb250cm9sTWVzc2FnZShtZXNzYWdlKSAmJgotICAgICAgICAgIHRoaXMuY29u
dHJvbE1lc3NhZ2VIYW5kbGVyXykgewotICAgICAgICBvayA9IHRoaXMuY29udHJvbE1lc3NhZ2VI
YW5kbGVyXy5hY2NlcHRXaXRoUmVzcG9uZGVyKG1lc3NhZ2UsIHRoaXMpOwotICAgICAgfSBlbHNl
IGlmICh0aGlzLmluY29taW5nUmVjZWl2ZXJfKSB7Ci0gICAgICAgIG9rID0gdGhpcy5pbmNvbWlu
Z1JlY2VpdmVyXy5hY2NlcHRXaXRoUmVzcG9uZGVyKG1lc3NhZ2UsIHRoaXMpOwotICAgICAgfQot
ICAgIH0gZWxzZSBpZiAobWVzc2FnZS5pc1Jlc3BvbnNlKCkpIHsKLSAgICAgIHZhciByZWFkZXIg
PSBuZXcgaW50ZXJuYWwuTWVzc2FnZVJlYWRlcihtZXNzYWdlKTsKLSAgICAgIHZhciByZXF1ZXN0
SUQgPSByZWFkZXIucmVxdWVzdElEOwotICAgICAgdmFyIGNvbXBsZXRlciA9IHRoaXMuY29tcGxl
dGVyc18uZ2V0KHJlcXVlc3RJRCk7Ci0gICAgICBpZiAoY29tcGxldGVyKSB7Ci0gICAgICAgIHRo
aXMuY29tcGxldGVyc18uZGVsZXRlKHJlcXVlc3RJRCk7Ci0gICAgICAgIGNvbXBsZXRlci5yZXNv
bHZlKG1lc3NhZ2UpOwotICAgICAgICBvayA9IHRydWU7Ci0gICAgICB9IGVsc2UgewotICAgICAg
ICBjb25zb2xlLmxvZygiVW5leHBlY3RlZCByZXNwb25zZSB3aXRoIHJlcXVlc3QgSUQ6ICIgKyBy
ZXF1ZXN0SUQpOwotICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICBpZiAoaW50ZXJuYWwuaXNJ
bnRlcmZhY2VDb250cm9sTWVzc2FnZShtZXNzYWdlKSAmJgotICAgICAgICAgIHRoaXMuY29udHJv
bE1lc3NhZ2VIYW5kbGVyXykgewotICAgICAgICBvayA9IHRoaXMuY29udHJvbE1lc3NhZ2VIYW5k
bGVyXy5hY2NlcHQobWVzc2FnZSk7Ci0gICAgICB9IGVsc2UgaWYgKHRoaXMuaW5jb21pbmdSZWNl
aXZlcl8pIHsKLSAgICAgICAgb2sgPSB0aGlzLmluY29taW5nUmVjZWl2ZXJfLmFjY2VwdChtZXNz
YWdlKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIG9rOwotICB9OwotCi0gIEludGVyZmFj
ZUVuZHBvaW50Q2xpZW50LnByb3RvdHlwZS5ub3RpZnlFcnJvciA9IGZ1bmN0aW9uKHJlYXNvbikg
ewotICAgIGlmICh0aGlzLmVuY291bnRlcmVkRXJyb3JfKSB7Ci0gICAgICByZXR1cm47Ci0gICAg
fQotICAgIHRoaXMuZW5jb3VudGVyZWRFcnJvcl8gPSB0cnVlOwotCi0gICAgdGhpcy5jb21wbGV0
ZXJzXy5mb3JFYWNoKGZ1bmN0aW9uKHZhbHVlKSB7Ci0gICAgICB2YWx1ZS5yZWplY3QoKTsKLSAg
ICB9KTsKLSAgICB0aGlzLmNvbXBsZXRlcnNfLmNsZWFyKCk7ICAvLyBEcm9wIGFueSByZXNwb25k
ZXJzLgotCi0gICAgaWYgKHRoaXMuY29ubmVjdGlvbkVycm9ySGFuZGxlcl8pIHsKLSAgICAgIHRo
aXMuY29ubmVjdGlvbkVycm9ySGFuZGxlcl8ocmVhc29uKTsKLSAgICB9Ci0gIH07Ci0KLSAgSW50
ZXJmYWNlRW5kcG9pbnRDbGllbnQucHJvdG90eXBlLnF1ZXJ5VmVyc2lvbiA9IGZ1bmN0aW9uKCkg
ewotICAgIHJldHVybiB0aGlzLmNvbnRyb2xNZXNzYWdlUHJveHlfLnF1ZXJ5VmVyc2lvbigpOwot
ICB9OwotCi0gIEludGVyZmFjZUVuZHBvaW50Q2xpZW50LnByb3RvdHlwZS5yZXF1aXJlVmVyc2lv
biA9IGZ1bmN0aW9uKHZlcnNpb24pIHsKLSAgICB0aGlzLmNvbnRyb2xNZXNzYWdlUHJveHlfLnJl
cXVpcmVWZXJzaW9uKHZlcnNpb24pOwotICB9OwotCi0gIEludGVyZmFjZUVuZHBvaW50Q2xpZW50
LnByb3RvdHlwZS5nZXRFbmNvdW50ZXJlZEVycm9yID0gZnVuY3Rpb24oKSB7Ci0gICAgcmV0dXJu
IHRoaXMuZW5jb3VudGVyZWRFcnJvcl87Ci0gIH07Ci0KLSAgaW50ZXJuYWwuSW50ZXJmYWNlRW5k
cG9pbnRDbGllbnQgPSBJbnRlcmZhY2VFbmRwb2ludENsaWVudDsKLX0pKCk7Ci0vLyBDb3B5cmln
aHQgMjAxNyBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVz
ZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2Ug
dGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLShmdW5jdGlvbigp
IHsKLSAgdmFyIGludGVybmFsID0gbW9qby5pbnRlcm5hbDsKLQotICB2YXIgQXNzb2NpYXRpb25F
dmVudCA9IHsKLSAgICAvLyBUaGUgaW50ZXJmYWNlIGhhcyBiZWVuIGFzc29jaWF0ZWQgd2l0aCBh
IG1lc3NhZ2UgcGlwZS4KLSAgICBBU1NPQ0lBVEVEOiAnYXNzb2NpYXRlZCcsCi0gICAgLy8gVGhl
IHBlZXIgb2YgdGhpcyBvYmplY3QgaGFzIGJlZW4gY2xvc2VkIGJlZm9yZSBhc3NvY2lhdGlvbi4K
LSAgICBQRUVSX0NMT1NFRF9CRUZPUkVfQVNTT0NJQVRJT046ICdwZWVyX2Nsb3NlZF9iZWZvcmVf
YXNzb2NpYXRpb24nCi0gIH07Ci0KLSAgZnVuY3Rpb24gU3RhdGUoaW50ZXJmYWNlSWQsIGFzc29j
aWF0ZWRHcm91cENvbnRyb2xsZXIpIHsKLSAgICBpZiAoaW50ZXJmYWNlSWQgPT09IHVuZGVmaW5l
ZCkgewotICAgICAgaW50ZXJmYWNlSWQgPSBpbnRlcm5hbC5rSW52YWxpZEludGVyZmFjZUlkOwot
ICAgIH0KLQotICAgIHRoaXMuaW50ZXJmYWNlSWQgPSBpbnRlcmZhY2VJZDsKLSAgICB0aGlzLmFz
c29jaWF0ZWRHcm91cENvbnRyb2xsZXIgPSBhc3NvY2lhdGVkR3JvdXBDb250cm9sbGVyOwotICAg
IHRoaXMucGVuZGluZ0Fzc29jaWF0aW9uID0gZmFsc2U7Ci0gICAgdGhpcy5kaXNjb25uZWN0UmVh
c29uID0gbnVsbDsKLSAgICB0aGlzLnBlZXJTdGF0ZV8gPSBudWxsOwotICAgIHRoaXMuYXNzb2Np
YXRpb25FdmVudEhhbmRsZXJfID0gbnVsbDsKLSAgfQotCi0gIFN0YXRlLnByb3RvdHlwZS5pbml0
UGVuZGluZ1N0YXRlID0gZnVuY3Rpb24ocGVlcikgewotICAgIHRoaXMucGVuZGluZ0Fzc29jaWF0
aW9uID0gdHJ1ZTsKLSAgICB0aGlzLnBlZXJTdGF0ZV8gPSBwZWVyOwotICB9OwotCi0gIFN0YXRl
LnByb3RvdHlwZS5pc1ZhbGlkID0gZnVuY3Rpb24oKSB7Ci0gICAgcmV0dXJuIHRoaXMucGVuZGlu
Z0Fzc29jaWF0aW9uIHx8Ci0gICAgICAgIGludGVybmFsLmlzVmFsaWRJbnRlcmZhY2VJZCh0aGlz
LmludGVyZmFjZUlkKTsKLSAgfTsKLQotICBTdGF0ZS5wcm90b3R5cGUuY2xvc2UgPSBmdW5jdGlv
bihkaXNjb25uZWN0UmVhc29uKSB7Ci0gICAgdmFyIGNhY2hlZEdyb3VwQ29udHJvbGxlcjsKLSAg
ICB2YXIgY2FjaGVkUGVlclN0YXRlOwotICAgIHZhciBjYWNoZWRJZCA9IGludGVybmFsLmtJbnZh
bGlkSW50ZXJmYWNlSWQ7Ci0KLSAgICBpZiAoIXRoaXMucGVuZGluZ0Fzc29jaWF0aW9uKSB7Ci0g
ICAgICBpZiAoaW50ZXJuYWwuaXNWYWxpZEludGVyZmFjZUlkKHRoaXMuaW50ZXJmYWNlSWQpKSB7
Ci0gICAgICAgIGNhY2hlZEdyb3VwQ29udHJvbGxlciA9IHRoaXMuYXNzb2NpYXRlZEdyb3VwQ29u
dHJvbGxlcjsKLSAgICAgICAgdGhpcy5hc3NvY2lhdGVkR3JvdXBDb250cm9sbGVyID0gbnVsbDsK
LSAgICAgICAgY2FjaGVkSWQgPSB0aGlzLmludGVyZmFjZUlkOwotICAgICAgICB0aGlzLmludGVy
ZmFjZUlkID0gaW50ZXJuYWwua0ludmFsaWRJbnRlcmZhY2VJZDsKLSAgICAgIH0KLSAgICB9IGVs
c2UgewotICAgICAgdGhpcy5wZW5kaW5nQXNzb2NpYXRpb24gPSBmYWxzZTsKLSAgICAgIGNhY2hl
ZFBlZXJTdGF0ZSA9IHRoaXMucGVlclN0YXRlXzsKLSAgICAgIHRoaXMucGVlclN0YXRlXyA9IG51
bGw7Ci0gICAgfQotCi0gICAgaWYgKGNhY2hlZEdyb3VwQ29udHJvbGxlcikgewotICAgICAgY2Fj
aGVkR3JvdXBDb250cm9sbGVyLmNsb3NlRW5kcG9pbnRIYW5kbGUoY2FjaGVkSWQsCi0gICAgICAg
ICAgZGlzY29ubmVjdFJlYXNvbik7Ci0gICAgfSBlbHNlIGlmIChjYWNoZWRQZWVyU3RhdGUpIHsK
LSAgICAgIGNhY2hlZFBlZXJTdGF0ZS5vblBlZXJDbG9zZWRCZWZvcmVBc3NvY2lhdGlvbihkaXNj
b25uZWN0UmVhc29uKTsKLSAgICB9Ci0gIH07Ci0KLSAgU3RhdGUucHJvdG90eXBlLnJ1bkFzc29j
aWF0aW9uRXZlbnRIYW5kbGVyID0gZnVuY3Rpb24oYXNzb2NpYXRpb25FdmVudCkgewotICAgIGlm
ICh0aGlzLmFzc29jaWF0aW9uRXZlbnRIYW5kbGVyXykgewotICAgICAgdmFyIGhhbmRsZXIgPSB0
aGlzLmFzc29jaWF0aW9uRXZlbnRIYW5kbGVyXzsKLSAgICAgIHRoaXMuYXNzb2NpYXRpb25FdmVu
dEhhbmRsZXJfID0gbnVsbDsKLSAgICAgIGhhbmRsZXIoYXNzb2NpYXRpb25FdmVudCk7Ci0gICAg
fQotICB9OwotCi0gIFN0YXRlLnByb3RvdHlwZS5zZXRBc3NvY2lhdGlvbkV2ZW50SGFuZGxlciA9
IGZ1bmN0aW9uKGhhbmRsZXIpIHsKLSAgICBpZiAoIXRoaXMucGVuZGluZ0Fzc29jaWF0aW9uICYm
Ci0gICAgICAgICFpbnRlcm5hbC5pc1ZhbGlkSW50ZXJmYWNlSWQodGhpcy5pbnRlcmZhY2VJZCkp
IHsKLSAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAoIWhhbmRsZXIpIHsKLSAgICAgIHRo
aXMuYXNzb2NpYXRpb25FdmVudEhhbmRsZXJfID0gbnVsbDsKLSAgICAgIHJldHVybjsKLSAgICB9
Ci0KLSAgICB0aGlzLmFzc29jaWF0aW9uRXZlbnRIYW5kbGVyXyA9IGhhbmRsZXI7Ci0gICAgaWYg
KCF0aGlzLnBlbmRpbmdBc3NvY2lhdGlvbikgewotICAgICAgc2V0VGltZW91dCh0aGlzLnJ1bkFz
c29jaWF0aW9uRXZlbnRIYW5kbGVyLmJpbmQodGhpcywKLSAgICAgICAgICBBc3NvY2lhdGlvbkV2
ZW50LkFTU09DSUFURUQpLCAwKTsKLSAgICB9IGVsc2UgaWYgKCF0aGlzLnBlZXJTdGF0ZV8pIHsK
LSAgICAgIHNldFRpbWVvdXQodGhpcy5ydW5Bc3NvY2lhdGlvbkV2ZW50SGFuZGxlci5iaW5kKHRo
aXMsCi0gICAgICAgICAgQXNzb2NpYXRpb25FdmVudC5QRUVSX0NMT1NFRF9CRUZPUkVfQVNTT0NJ
QVRJT04pLCAwKTsKLSAgICB9Ci0gIH07Ci0KLSAgU3RhdGUucHJvdG90eXBlLm5vdGlmeUFzc29j
aWF0aW9uID0gZnVuY3Rpb24oaW50ZXJmYWNlSWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHBlZXJHcm91cENvbnRyb2xsZXIpIHsKLSAgICB2YXIgY2Fj
aGVkUGVlclN0YXRlID0gdGhpcy5wZWVyU3RhdGVfOwotICAgIHRoaXMucGVlclN0YXRlXyA9IG51
bGw7Ci0KLSAgICB0aGlzLnBlbmRpbmdBc3NvY2lhdGlvbiA9IGZhbHNlOwotCi0gICAgaWYgKGNh
Y2hlZFBlZXJTdGF0ZSkgewotICAgICAgY2FjaGVkUGVlclN0YXRlLm9uQXNzb2NpYXRlZChpbnRl
cmZhY2VJZCwgcGVlckdyb3VwQ29udHJvbGxlcik7Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9
Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9OwotCi0gIFN0YXRlLnByb3RvdHlwZS5vbkFzc29jaWF0
ZWQgPSBmdW5jdGlvbihpbnRlcmZhY2VJZCwKLSAgICAgIGFzc29jaWF0ZWRHcm91cENvbnRyb2xs
ZXIpIHsKLSAgICBpZiAoIXRoaXMucGVuZGluZ0Fzc29jaWF0aW9uKSB7Ci0gICAgICByZXR1cm47
Ci0gICAgfQotCi0gICAgdGhpcy5wZW5kaW5nQXNzb2NpYXRpb24gPSBmYWxzZTsKLSAgICB0aGlz
LnBlZXJTdGF0ZV8gPSBudWxsOwotICAgIHRoaXMuaW50ZXJmYWNlSWQgPSBpbnRlcmZhY2VJZDsK
LSAgICB0aGlzLmFzc29jaWF0ZWRHcm91cENvbnRyb2xsZXIgPSBhc3NvY2lhdGVkR3JvdXBDb250
cm9sbGVyOwotICAgIHRoaXMucnVuQXNzb2NpYXRpb25FdmVudEhhbmRsZXIoQXNzb2NpYXRpb25F
dmVudC5BU1NPQ0lBVEVEKTsKLSAgfTsKLQotICBTdGF0ZS5wcm90b3R5cGUub25QZWVyQ2xvc2Vk
QmVmb3JlQXNzb2NpYXRpb24gPSBmdW5jdGlvbihkaXNjb25uZWN0UmVhc29uKSB7Ci0gICAgaWYg
KCF0aGlzLnBlbmRpbmdBc3NvY2lhdGlvbikgewotICAgICAgcmV0dXJuOwotICAgIH0KLQotICAg
IHRoaXMucGVlclN0YXRlXyA9IG51bGw7Ci0gICAgdGhpcy5kaXNjb25uZWN0UmVhc29uID0gZGlz
Y29ubmVjdFJlYXNvbjsKLQotICAgIHRoaXMucnVuQXNzb2NpYXRpb25FdmVudEhhbmRsZXIoCi0g
ICAgICAgIEFzc29jaWF0aW9uRXZlbnQuUEVFUl9DTE9TRURfQkVGT1JFX0FTU09DSUFUSU9OKTsK
LSAgfTsKLQotICBmdW5jdGlvbiBjcmVhdGVQYWlyUGVuZGluZ0Fzc29jaWF0aW9uKCkgewotICAg
IHZhciBoYW5kbGUwID0gbmV3IEludGVyZmFjZUVuZHBvaW50SGFuZGxlKCk7Ci0gICAgdmFyIGhh
bmRsZTEgPSBuZXcgSW50ZXJmYWNlRW5kcG9pbnRIYW5kbGUoKTsKLSAgICBoYW5kbGUwLnN0YXRl
Xy5pbml0UGVuZGluZ1N0YXRlKGhhbmRsZTEuc3RhdGVfKTsKLSAgICBoYW5kbGUxLnN0YXRlXy5p
bml0UGVuZGluZ1N0YXRlKGhhbmRsZTAuc3RhdGVfKTsKLSAgICByZXR1cm4ge2hhbmRsZTA6IGhh
bmRsZTAsIGhhbmRsZTE6IGhhbmRsZTF9OwotICB9Ci0KLSAgZnVuY3Rpb24gSW50ZXJmYWNlRW5k
cG9pbnRIYW5kbGUoaW50ZXJmYWNlSWQsIGFzc29jaWF0ZWRHcm91cENvbnRyb2xsZXIpIHsKLSAg
ICB0aGlzLnN0YXRlXyA9IG5ldyBTdGF0ZShpbnRlcmZhY2VJZCwgYXNzb2NpYXRlZEdyb3VwQ29u
dHJvbGxlcik7Ci0gIH0KLQotICBJbnRlcmZhY2VFbmRwb2ludEhhbmRsZS5wcm90b3R5cGUuaXNW
YWxpZCA9IGZ1bmN0aW9uKCkgewotICAgIHJldHVybiB0aGlzLnN0YXRlXy5pc1ZhbGlkKCk7Ci0g
IH07Ci0KLSAgSW50ZXJmYWNlRW5kcG9pbnRIYW5kbGUucHJvdG90eXBlLnBlbmRpbmdBc3NvY2lh
dGlvbiA9IGZ1bmN0aW9uKCkgewotICAgIHJldHVybiB0aGlzLnN0YXRlXy5wZW5kaW5nQXNzb2Np
YXRpb247Ci0gIH07Ci0KLSAgSW50ZXJmYWNlRW5kcG9pbnRIYW5kbGUucHJvdG90eXBlLmlkID0g
ZnVuY3Rpb24oKSB7Ci0gICAgcmV0dXJuIHRoaXMuc3RhdGVfLmludGVyZmFjZUlkOwotICB9Owot
Ci0gIEludGVyZmFjZUVuZHBvaW50SGFuZGxlLnByb3RvdHlwZS5ncm91cENvbnRyb2xsZXIgPSBm
dW5jdGlvbigpIHsKLSAgICByZXR1cm4gdGhpcy5zdGF0ZV8uYXNzb2NpYXRlZEdyb3VwQ29udHJv
bGxlcjsKLSAgfTsKLQotICBJbnRlcmZhY2VFbmRwb2ludEhhbmRsZS5wcm90b3R5cGUuZGlzY29u
bmVjdFJlYXNvbiA9IGZ1bmN0aW9uKCkgewotICAgIHJldHVybiB0aGlzLnN0YXRlXy5kaXNjb25u
ZWN0UmVhc29uOwotICB9OwotCi0gIEludGVyZmFjZUVuZHBvaW50SGFuZGxlLnByb3RvdHlwZS5z
ZXRBc3NvY2lhdGlvbkV2ZW50SGFuZGxlciA9IGZ1bmN0aW9uKAotICAgICAgaGFuZGxlcikgewot
ICAgIHRoaXMuc3RhdGVfLnNldEFzc29jaWF0aW9uRXZlbnRIYW5kbGVyKGhhbmRsZXIpOwotICB9
OwotCi0gIEludGVyZmFjZUVuZHBvaW50SGFuZGxlLnByb3RvdHlwZS5ub3RpZnlBc3NvY2lhdGlv
biA9IGZ1bmN0aW9uKGludGVyZmFjZUlkLAotICAgICAgcGVlckdyb3VwQ29udHJvbGxlcikgewot
ICAgIHJldHVybiB0aGlzLnN0YXRlXy5ub3RpZnlBc3NvY2lhdGlvbihpbnRlcmZhY2VJZCwgcGVl
ckdyb3VwQ29udHJvbGxlcik7Ci0gIH07Ci0KLSAgSW50ZXJmYWNlRW5kcG9pbnRIYW5kbGUucHJv
dG90eXBlLnJlc2V0ID0gZnVuY3Rpb24ocmVhc29uKSB7Ci0gICAgdGhpcy5zdGF0ZV8uY2xvc2Uo
cmVhc29uKTsKLSAgICB0aGlzLnN0YXRlXyA9IG5ldyBTdGF0ZSgpOwotICB9OwotCi0gIGludGVy
bmFsLkFzc29jaWF0aW9uRXZlbnQgPSBBc3NvY2lhdGlvbkV2ZW50OwotICBpbnRlcm5hbC5JbnRl
cmZhY2VFbmRwb2ludEhhbmRsZSA9IEludGVyZmFjZUVuZHBvaW50SGFuZGxlOwotICBpbnRlcm5h
bC5jcmVhdGVQYWlyUGVuZGluZ0Fzc29jaWF0aW9uID0gY3JlYXRlUGFpclBlbmRpbmdBc3NvY2lh
dGlvbjsKLX0pKCk7Ci0vLyBDb3B5cmlnaHQgMjAxNyBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVk
IGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNF
TlNFIGZpbGUuCi0KLShmdW5jdGlvbigpIHsKLSAgdmFyIGludGVybmFsID0gbW9qby5pbnRlcm5h
bDsKLQotICBmdW5jdGlvbiB2YWxpZGF0ZUNvbnRyb2xSZXF1ZXN0V2l0aG91dFJlc3BvbnNlKG1l
c3NhZ2UpIHsKLSAgICB2YXIgbWVzc2FnZVZhbGlkYXRvciA9IG5ldyBpbnRlcm5hbC5WYWxpZGF0
b3IobWVzc2FnZSk7Ci0gICAgdmFyIGVycm9yID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZU1l
c3NhZ2VJc1JlcXVlc3RXaXRob3V0UmVzcG9uc2UoKTsKLSAgICBpZiAoZXJyb3IgIT0gaW50ZXJu
YWwudmFsaWRhdGlvbkVycm9yLk5PTkUpIHsKLSAgICAgIHRocm93IGVycm9yOwotICAgIH0KLQot
ICAgIGlmIChtZXNzYWdlLmdldE5hbWUoKSAhPSBtb2pvLnBpcGVDb250cm9sLmtSdW5PckNsb3Nl
UGlwZU1lc3NhZ2VJZCkgewotICAgICAgdGhyb3cgbmV3IEVycm9yKCJDb250cm9sIG1lc3NhZ2Ug
bmFtZSBpcyBub3Qga1J1bk9yQ2xvc2VQaXBlTWVzc2FnZUlkIik7Ci0gICAgfQotCi0gICAgLy8g
VmFsaWRhdGUgcGF5bG9hZC4KLSAgICBlcnJvciA9IG1vam8ucGlwZUNvbnRyb2wuUnVuT3JDbG9z
ZVBpcGVNZXNzYWdlUGFyYW1zLnZhbGlkYXRlKAotICAgICAgICBtZXNzYWdlVmFsaWRhdG9yLCBt
ZXNzYWdlLmdldEhlYWRlck51bUJ5dGVzKCkpOwotICAgIGlmIChlcnJvciAhPSBpbnRlcm5hbC52
YWxpZGF0aW9uRXJyb3IuTk9ORSkgewotICAgICAgdGhyb3cgZXJyb3I7Ci0gICAgfQotICB9Ci0K
LSAgZnVuY3Rpb24gcnVuT3JDbG9zZVBpcGUobWVzc2FnZSwgZGVsZWdhdGUpIHsKLSAgICB2YXIg
cmVhZGVyID0gbmV3IGludGVybmFsLk1lc3NhZ2VSZWFkZXIobWVzc2FnZSk7Ci0gICAgdmFyIHJ1
bk9yQ2xvc2VQaXBlTWVzc2FnZVBhcmFtcyA9IHJlYWRlci5kZWNvZGVTdHJ1Y3QoCi0gICAgICAg
IG1vam8ucGlwZUNvbnRyb2wuUnVuT3JDbG9zZVBpcGVNZXNzYWdlUGFyYW1zKTsKLSAgICB2YXIg
ZXZlbnQgPSBydW5PckNsb3NlUGlwZU1lc3NhZ2VQYXJhbXMuaW5wdXQKLSAgICAgICAgLnBlZXJB
c3NvY2lhdGVkRW5kcG9pbnRDbG9zZWRFdmVudDsKLSAgICByZXR1cm4gZGVsZWdhdGUub25QZWVy
QXNzb2NpYXRlZEVuZHBvaW50Q2xvc2VkKGV2ZW50LmlkLAotICAgICAgICBldmVudC5kaXNjb25u
ZWN0UmVhc29uKTsKLSAgfQotCi0gIGZ1bmN0aW9uIGlzUGlwZUNvbnRyb2xNZXNzYWdlKG1lc3Nh
Z2UpIHsKLSAgICByZXR1cm4gIWludGVybmFsLmlzVmFsaWRJbnRlcmZhY2VJZChtZXNzYWdlLmdl
dEludGVyZmFjZUlkKCkpOwotICB9Ci0KLSAgZnVuY3Rpb24gUGlwZUNvbnRyb2xNZXNzYWdlSGFu
ZGxlcihkZWxlZ2F0ZSkgewotICAgIHRoaXMuZGVsZWdhdGVfID0gZGVsZWdhdGU7Ci0gIH0KLQot
ICBQaXBlQ29udHJvbE1lc3NhZ2VIYW5kbGVyLnByb3RvdHlwZS5hY2NlcHQgPSBmdW5jdGlvbiht
ZXNzYWdlKSB7Ci0gICAgdmFsaWRhdGVDb250cm9sUmVxdWVzdFdpdGhvdXRSZXNwb25zZShtZXNz
YWdlKTsKLSAgICByZXR1cm4gcnVuT3JDbG9zZVBpcGUobWVzc2FnZSwgdGhpcy5kZWxlZ2F0ZV8p
OwotICB9OwotCi0gIGludGVybmFsLlBpcGVDb250cm9sTWVzc2FnZUhhbmRsZXIgPSBQaXBlQ29u
dHJvbE1lc3NhZ2VIYW5kbGVyOwotICBpbnRlcm5hbC5pc1BpcGVDb250cm9sTWVzc2FnZSA9IGlz
UGlwZUNvbnRyb2xNZXNzYWdlOwotfSkoKTsKLS8vIENvcHlyaWdodCAyMDE3IFRoZSBDaHJvbWl1
bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNv
ZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91
bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLQotKGZ1bmN0aW9uKCkgewotICB2YXIgaW50ZXJuYWwg
PSBtb2pvLmludGVybmFsOwotCi0gIGZ1bmN0aW9uIGNvbnN0cnVjdFJ1bk9yQ2xvc2VQaXBlTWVz
c2FnZShydW5PckNsb3NlUGlwZUlucHV0KSB7Ci0gICAgdmFyIHJ1bk9yQ2xvc2VQaXBlTWVzc2Fn
ZVBhcmFtcyA9IG5ldwotICAgICAgICBtb2pvLnBpcGVDb250cm9sLlJ1bk9yQ2xvc2VQaXBlTWVz
c2FnZVBhcmFtcygpOwotICAgIHJ1bk9yQ2xvc2VQaXBlTWVzc2FnZVBhcmFtcy5pbnB1dCA9IHJ1
bk9yQ2xvc2VQaXBlSW5wdXQ7Ci0KLSAgICB2YXIgbWVzc2FnZU5hbWUgPSBtb2pvLnBpcGVDb250
cm9sLmtSdW5PckNsb3NlUGlwZU1lc3NhZ2VJZDsKLSAgICB2YXIgcGF5bG9hZFNpemUgPQotICAg
ICAgICBtb2pvLnBpcGVDb250cm9sLlJ1bk9yQ2xvc2VQaXBlTWVzc2FnZVBhcmFtcy5lbmNvZGVk
U2l6ZTsKLQotICAgIHZhciBidWlsZGVyID0gbmV3IGludGVybmFsLk1lc3NhZ2VWMEJ1aWxkZXIo
bWVzc2FnZU5hbWUsIHBheWxvYWRTaXplKTsKLSAgICBidWlsZGVyLmVuY29kZVN0cnVjdChtb2pv
LnBpcGVDb250cm9sLlJ1bk9yQ2xvc2VQaXBlTWVzc2FnZVBhcmFtcywKLSAgICAgICAgICAgICAg
ICAgICAgICAgICBydW5PckNsb3NlUGlwZU1lc3NhZ2VQYXJhbXMpOwotICAgIHZhciBtZXNzYWdl
ID0gYnVpbGRlci5maW5pc2goKTsKLSAgICBtZXNzYWdlLnNldEludGVyZmFjZUlkKGludGVybmFs
LmtJbnZhbGlkSW50ZXJmYWNlSWQpOwotICAgIHJldHVybiBtZXNzYWdlOwotICB9Ci0KLSAgZnVu
Y3Rpb24gUGlwZUNvbnRyb2xNZXNzYWdlUHJveHkocmVjZWl2ZXIpIHsKLSAgICB0aGlzLnJlY2Vp
dmVyXyA9IHJlY2VpdmVyOwotICB9Ci0KLSAgUGlwZUNvbnRyb2xNZXNzYWdlUHJveHkucHJvdG90
eXBlLm5vdGlmeVBlZXJFbmRwb2ludENsb3NlZCA9IGZ1bmN0aW9uKAotICAgICAgaW50ZXJmYWNl
SWQsIHJlYXNvbikgewotICAgIHZhciBtZXNzYWdlID0gdGhpcy5jb25zdHJ1Y3RQZWVyRW5kcG9p
bnRDbG9zZWRNZXNzYWdlKGludGVyZmFjZUlkLCByZWFzb24pOwotICAgIHRoaXMucmVjZWl2ZXJf
LmFjY2VwdChtZXNzYWdlKTsKLSAgfTsKLQotICBQaXBlQ29udHJvbE1lc3NhZ2VQcm94eS5wcm90
b3R5cGUuY29uc3RydWN0UGVlckVuZHBvaW50Q2xvc2VkTWVzc2FnZSA9Ci0gICAgICBmdW5jdGlv
bihpbnRlcmZhY2VJZCwgcmVhc29uKSB7Ci0gICAgdmFyIGV2ZW50ID0gbmV3IG1vam8ucGlwZUNv
bnRyb2wuUGVlckFzc29jaWF0ZWRFbmRwb2ludENsb3NlZEV2ZW50KCk7Ci0gICAgZXZlbnQuaWQg
PSBpbnRlcmZhY2VJZDsKLSAgICBpZiAocmVhc29uKSB7Ci0gICAgICBldmVudC5kaXNjb25uZWN0
UmVhc29uID0gbmV3IG1vam8ucGlwZUNvbnRyb2wuRGlzY29ubmVjdFJlYXNvbih7Ci0gICAgICAg
ICAgY3VzdG9tUmVhc29uOiByZWFzb24uY3VzdG9tUmVhc29uLAotICAgICAgICAgIGRlc2NyaXB0
aW9uOiByZWFzb24uZGVzY3JpcHRpb259KTsKLSAgICB9Ci0gICAgdmFyIHJ1bk9yQ2xvc2VQaXBl
SW5wdXQgPSBuZXcgbW9qby5waXBlQ29udHJvbC5SdW5PckNsb3NlUGlwZUlucHV0KCk7Ci0gICAg
cnVuT3JDbG9zZVBpcGVJbnB1dC5wZWVyQXNzb2NpYXRlZEVuZHBvaW50Q2xvc2VkRXZlbnQgPSBl
dmVudDsKLSAgICByZXR1cm4gY29uc3RydWN0UnVuT3JDbG9zZVBpcGVNZXNzYWdlKHJ1bk9yQ2xv
c2VQaXBlSW5wdXQpOwotICB9OwotCi0gIGludGVybmFsLlBpcGVDb250cm9sTWVzc2FnZVByb3h5
ID0gUGlwZUNvbnRyb2xNZXNzYWdlUHJveHk7Ci19KSgpOwotLy8gQ29weXJpZ2h0IDIwMTQgVGhl
IENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBz
b3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJl
Ci0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotCi0oZnVuY3Rpb24oKSB7Ci0gIHZhciBp
bnRlcm5hbCA9IG1vam8uaW50ZXJuYWw7Ci0KLSAgLyoqCi0gICAqIFRoZSBzdGF0ZSBvZiB8ZW5k
cG9pbnR8LiBJZiBib3RoIHRoZSBlbmRwb2ludCBhbmQgaXRzIHBlZXIgaGF2ZSBiZWVuCi0gICAq
IGNsb3NlZCwgcmVtb3ZlcyBpdCBmcm9tIHxlbmRwb2ludHNffC4KLSAgICogQGVudW0ge3N0cmlu
Z30KLSAgICovCi0gIHZhciBFbmRwb2ludFN0YXRlVXBkYXRlVHlwZSA9IHsKLSAgICBFTkRQT0lO
VF9DTE9TRUQ6ICdlbmRwb2ludF9jbG9zZWQnLAotICAgIFBFRVJfRU5EUE9JTlRfQ0xPU0VEOiAn
cGVlcl9lbmRwb2ludF9jbG9zZWQnCi0gIH07Ci0KLSAgZnVuY3Rpb24gY2hlY2soY29uZGl0aW9u
LCBvdXRwdXQpIHsKLSAgICBpZiAoIWNvbmRpdGlvbikgewotICAgICAgLy8gdGVzdGhhcm5lc3Mu
anMgZG9lcyBub3QgcmV0aHJvdyBlcnJvcnMgc28gdGhlIGVycm9yIHN0YWNrIG5lZWRzIHRvIGJl
Ci0gICAgICAvLyBpbmNsdWRlZCBhcyBhIHN0cmluZyBpbiB0aGUgZXJyb3Igd2UgdGhyb3cgZm9y
IGRlYnVnZ2luZyBsYXlvdXQgdGVzdHMuCi0gICAgICB0aHJvdyBuZXcgRXJyb3IoKG5ldyBFcnJv
cigpKS5zdGFjayk7Ci0gICAgfQotICB9Ci0KLSAgZnVuY3Rpb24gSW50ZXJmYWNlRW5kcG9pbnQo
cm91dGVyLCBpbnRlcmZhY2VJZCkgewotICAgIHRoaXMucm91dGVyXyA9IHJvdXRlcjsKLSAgICB0
aGlzLmlkID0gaW50ZXJmYWNlSWQ7Ci0gICAgdGhpcy5jbG9zZWQgPSBmYWxzZTsKLSAgICB0aGlz
LnBlZXJDbG9zZWQgPSBmYWxzZTsKLSAgICB0aGlzLmhhbmRsZUNyZWF0ZWQgPSBmYWxzZTsKLSAg
ICB0aGlzLmRpc2Nvbm5lY3RSZWFzb24gPSBudWxsOwotICAgIHRoaXMuY2xpZW50ID0gbnVsbDsK
LSAgfQotCi0gIEludGVyZmFjZUVuZHBvaW50LnByb3RvdHlwZS5zZW5kTWVzc2FnZSA9IGZ1bmN0
aW9uKG1lc3NhZ2UpIHsKLSAgICBtZXNzYWdlLnNldEludGVyZmFjZUlkKHRoaXMuaWQpOwotICAg
IHJldHVybiB0aGlzLnJvdXRlcl8uY29ubmVjdG9yXy5hY2NlcHQobWVzc2FnZSk7Ci0gIH07Ci0K
LSAgZnVuY3Rpb24gUm91dGVyKGhhbmRsZSwgc2V0SW50ZXJmYWNlSWROYW1lc3BhY2VCaXQpIHsK
LSAgICBpZiAoIShoYW5kbGUgaW5zdGFuY2VvZiBNb2pvSGFuZGxlKSkgewotICAgICAgdGhyb3cg
bmV3IEVycm9yKCJSb3V0ZXIgY29uc3RydWN0b3I6IE5vdCBhIGhhbmRsZSIpOwotICAgIH0KLSAg
ICBpZiAoc2V0SW50ZXJmYWNlSWROYW1lc3BhY2VCaXQgPT09IHVuZGVmaW5lZCkgewotICAgICAg
c2V0SW50ZXJmYWNlSWROYW1lc3BhY2VCaXQgPSBmYWxzZTsKLSAgICB9Ci0KLSAgICB0aGlzLmNv
bm5lY3Rvcl8gPSBuZXcgaW50ZXJuYWwuQ29ubmVjdG9yKGhhbmRsZSk7Ci0KLSAgICB0aGlzLmNv
bm5lY3Rvcl8uc2V0SW5jb21pbmdSZWNlaXZlcih7Ci0gICAgICAgIGFjY2VwdDogdGhpcy5hY2Nl
cHQuYmluZCh0aGlzKSwKLSAgICB9KTsKLSAgICB0aGlzLmNvbm5lY3Rvcl8uc2V0RXJyb3JIYW5k
bGVyKHsKLSAgICAgICAgb25FcnJvcjogdGhpcy5vblBpcGVDb25uZWN0aW9uRXJyb3IuYmluZCh0
aGlzKSwKLSAgICB9KTsKLQotICAgIHRoaXMuc2V0SW50ZXJmYWNlSWROYW1lc3BhY2VCaXRfID0g
c2V0SW50ZXJmYWNlSWROYW1lc3BhY2VCaXQ7Ci0gICAgLy8gfGNhY2hlZE1lc3NhZ2VEYXRhfCBj
YWNoZXMgaW5mb21hdGlvbiBhYm91dCBhIG1lc3NhZ2UsIHNvIGl0IGNhbiBiZQotICAgIC8vIHBy
b2Nlc3NlZCBsYXRlciBpZiBhIGNsaWVudCBpcyBub3QgeWV0IGF0dGFjaGVkIHRvIHRoZSB0YXJn
ZXQgZW5kcG9pbnQuCi0gICAgdGhpcy5jYWNoZWRNZXNzYWdlRGF0YSA9IG51bGw7Ci0gICAgdGhp
cy5jb250cm9sTWVzc2FnZUhhbmRsZXJfID0gbmV3IGludGVybmFsLlBpcGVDb250cm9sTWVzc2Fn
ZUhhbmRsZXIodGhpcyk7Ci0gICAgdGhpcy5jb250cm9sTWVzc2FnZVByb3h5XyA9Ci0gICAgICAg
IG5ldyBpbnRlcm5hbC5QaXBlQ29udHJvbE1lc3NhZ2VQcm94eSh0aGlzLmNvbm5lY3Rvcl8pOwot
ICAgIHRoaXMubmV4dEludGVyZmFjZUlkVmFsdWVfID0gMTsKLSAgICB0aGlzLmVuY291bnRlcmVk
RXJyb3JfID0gZmFsc2U7Ci0gICAgdGhpcy5lbmRwb2ludHNfID0gbmV3IE1hcCgpOwotICB9Ci0K
LSAgUm91dGVyLnByb3RvdHlwZS5hc3NvY2lhdGVJbnRlcmZhY2UgPSBmdW5jdGlvbihoYW5kbGVU
b1NlbmQpIHsKLSAgICBpZiAoIWhhbmRsZVRvU2VuZC5wZW5kaW5nQXNzb2NpYXRpb24oKSkgewot
ICAgICAgcmV0dXJuIGludGVybmFsLmtJbnZhbGlkSW50ZXJmYWNlSWQ7Ci0gICAgfQotCi0gICAg
dmFyIGlkID0gMDsKLSAgICBkbyB7Ci0gICAgICBpZiAodGhpcy5uZXh0SW50ZXJmYWNlSWRWYWx1
ZV8gPj0gaW50ZXJuYWwua0ludGVyZmFjZUlkTmFtZXNwYWNlTWFzaykgewotICAgICAgICB0aGlz
Lm5leHRJbnRlcmZhY2VJZFZhbHVlXyA9IDE7Ci0gICAgICB9Ci0gICAgICBpZCA9IHRoaXMubmV4
dEludGVyZmFjZUlkVmFsdWVfKys7Ci0gICAgICBpZiAodGhpcy5zZXRJbnRlcmZhY2VJZE5hbWVz
cGFjZUJpdF8pIHsKLSAgICAgICAgaWQgKz0gaW50ZXJuYWwua0ludGVyZmFjZUlkTmFtZXNwYWNl
TWFzazsKLSAgICAgIH0KLSAgICB9IHdoaWxlICh0aGlzLmVuZHBvaW50c18uaGFzKGlkKSk7Ci0K
LSAgICB2YXIgZW5kcG9pbnQgPSBuZXcgSW50ZXJmYWNlRW5kcG9pbnQodGhpcywgaWQpOwotICAg
IHRoaXMuZW5kcG9pbnRzXy5zZXQoaWQsIGVuZHBvaW50KTsKLSAgICBpZiAodGhpcy5lbmNvdW50
ZXJlZEVycm9yXykgewotICAgICAgdGhpcy51cGRhdGVFbmRwb2ludFN0YXRlTWF5UmVtb3ZlKGVu
ZHBvaW50LAotICAgICAgICAgIEVuZHBvaW50U3RhdGVVcGRhdGVUeXBlLlBFRVJfRU5EUE9JTlRf
Q0xPU0VEKTsKLSAgICB9Ci0gICAgZW5kcG9pbnQuaGFuZGxlQ3JlYXRlZCA9IHRydWU7Ci0KLSAg
ICBpZiAoIWhhbmRsZVRvU2VuZC5ub3RpZnlBc3NvY2lhdGlvbihpZCwgdGhpcykpIHsKLSAgICAg
IC8vIFRoZSBwZWVyIGhhbmRsZSBvZiB8aGFuZGxlVG9TZW5kfCwgd2hpY2ggaXMgc3VwcG9zZWQg
dG8gam9pbiB0aGlzCi0gICAgICAvLyBhc3NvY2lhdGVkIGdyb3VwLCBoYXMgYmVlbiBjbG9zZWQu
Ci0gICAgICB0aGlzLnVwZGF0ZUVuZHBvaW50U3RhdGVNYXlSZW1vdmUoZW5kcG9pbnQsCi0gICAg
ICAgICAgRW5kcG9pbnRTdGF0ZVVwZGF0ZVR5cGUuRU5EUE9JTlRfQ0xPU0VEKTsKLQotICAgICAg
cGlwZUNvbnRyb2xNZXNzYWdlcHJveHkubm90aWZ5UGVlckVuZHBvaW50Q2xvc2VkKGlkLAotICAg
ICAgICAgIGhhbmRsZVRvU2VuZC5kaXNjb25uZWN0UmVhc29uKCkpOwotICAgIH0KLQotICAgIHJl
dHVybiBpZDsKLSAgfTsKLQotICBSb3V0ZXIucHJvdG90eXBlLmF0dGFjaEVuZHBvaW50Q2xpZW50
ID0gZnVuY3Rpb24oCi0gICAgICBpbnRlcmZhY2VFbmRwb2ludEhhbmRsZSwgaW50ZXJmYWNlRW5k
cG9pbnRDbGllbnQpIHsKLSAgICBjaGVjayhpbnRlcm5hbC5pc1ZhbGlkSW50ZXJmYWNlSWQoaW50
ZXJmYWNlRW5kcG9pbnRIYW5kbGUuaWQoKSkpOwotICAgIGNoZWNrKGludGVyZmFjZUVuZHBvaW50
Q2xpZW50KTsKLQotICAgIHZhciBlbmRwb2ludCA9IHRoaXMuZW5kcG9pbnRzXy5nZXQoaW50ZXJm
YWNlRW5kcG9pbnRIYW5kbGUuaWQoKSk7Ci0gICAgY2hlY2soZW5kcG9pbnQpOwotICAgIGNoZWNr
KCFlbmRwb2ludC5jbGllbnQpOwotICAgIGNoZWNrKCFlbmRwb2ludC5jbG9zZWQpOwotICAgIGVu
ZHBvaW50LmNsaWVudCA9IGludGVyZmFjZUVuZHBvaW50Q2xpZW50OwotCi0gICAgaWYgKGVuZHBv
aW50LnBlZXJDbG9zZWQpIHsKLSAgICAgIHNldFRpbWVvdXQoZW5kcG9pbnQuY2xpZW50Lm5vdGlm
eUVycm9yLmJpbmQoZW5kcG9pbnQuY2xpZW50KSwgMCk7Ci0gICAgfQotCi0gICAgaWYgKHRoaXMu
Y2FjaGVkTWVzc2FnZURhdGEgJiYgaW50ZXJmYWNlRW5kcG9pbnRIYW5kbGUuaWQoKSA9PT0KLSAg
ICAgICAgdGhpcy5jYWNoZWRNZXNzYWdlRGF0YS5tZXNzYWdlLmdldEludGVyZmFjZUlkKCkpIHsK
LSAgICAgIHNldFRpbWVvdXQoKGZ1bmN0aW9uKCkgewotICAgICAgICBpZiAoIXRoaXMuY2FjaGVk
TWVzc2FnZURhdGEpIHsKLSAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICB2
YXIgdGFyZ2V0RW5kcG9pbnQgPSB0aGlzLmVuZHBvaW50c18uZ2V0KAotICAgICAgICAgICAgdGhp
cy5jYWNoZWRNZXNzYWdlRGF0YS5tZXNzYWdlLmdldEludGVyZmFjZUlkKCkpOwotICAgICAgICAv
LyBDaGVjayB0aGF0IHRoZSB0YXJnZXQgZW5kcG9pbnQncyBjbGllbnQgc3RpbGwgZXhpc3RzLgot
ICAgICAgICBpZiAodGFyZ2V0RW5kcG9pbnQgJiYgdGFyZ2V0RW5kcG9pbnQuY2xpZW50KSB7Ci0g
ICAgICAgICAgdmFyIG1lc3NhZ2UgPSB0aGlzLmNhY2hlZE1lc3NhZ2VEYXRhLm1lc3NhZ2U7Ci0g
ICAgICAgICAgdmFyIG1lc3NhZ2VWYWxpZGF0b3IgPSB0aGlzLmNhY2hlZE1lc3NhZ2VEYXRhLm1l
c3NhZ2VWYWxpZGF0b3I7Ci0gICAgICAgICAgdGhpcy5jYWNoZWRNZXNzYWdlRGF0YSA9IG51bGw7
Ci0gICAgICAgICAgdGhpcy5jb25uZWN0b3JfLnJlc3VtZUluY29taW5nTWV0aG9kQ2FsbFByb2Nl
c3NpbmcoKTsKLSAgICAgICAgICB2YXIgb2sgPSBlbmRwb2ludC5jbGllbnQuaGFuZGxlSW5jb21p
bmdNZXNzYWdlKG1lc3NhZ2UsCi0gICAgICAgICAgICAgIG1lc3NhZ2VWYWxpZGF0b3IpOwotCi0g
ICAgICAgICAgLy8gSGFuZGxlIGludmFsaWQgY2FjaGVkIGluY29taW5nIG1lc3NhZ2UuCi0gICAg
ICAgICAgaWYgKCFpbnRlcm5hbC5pc1Rlc3RpbmdNb2RlKCkgJiYgIW9rKSB7Ci0gICAgICAgICAg
ICB0aGlzLmNvbm5lY3Rvcl8uaGFuZGxlRXJyb3IodHJ1ZSwgdHJ1ZSk7Ci0gICAgICAgICAgfQot
ICAgICAgICB9Ci0gICAgICB9KS5iaW5kKHRoaXMpLCAwKTsKLSAgICB9Ci0KLSAgICByZXR1cm4g
ZW5kcG9pbnQ7Ci0gIH07Ci0KLSAgUm91dGVyLnByb3RvdHlwZS5kZXRhY2hFbmRwb2ludENsaWVu
dCA9IGZ1bmN0aW9uKAotICAgICAgaW50ZXJmYWNlRW5kcG9pbnRIYW5kbGUpIHsKLSAgICBjaGVj
ayhpbnRlcm5hbC5pc1ZhbGlkSW50ZXJmYWNlSWQoaW50ZXJmYWNlRW5kcG9pbnRIYW5kbGUuaWQo
KSkpOwotICAgIHZhciBlbmRwb2ludCA9IHRoaXMuZW5kcG9pbnRzXy5nZXQoaW50ZXJmYWNlRW5k
cG9pbnRIYW5kbGUuaWQoKSk7Ci0gICAgY2hlY2soZW5kcG9pbnQpOwotICAgIGNoZWNrKGVuZHBv
aW50LmNsaWVudCk7Ci0gICAgY2hlY2soIWVuZHBvaW50LmNsb3NlZCk7Ci0KLSAgICBlbmRwb2lu
dC5jbGllbnQgPSBudWxsOwotICB9OwotCi0gIFJvdXRlci5wcm90b3R5cGUuY3JlYXRlTG9jYWxF
bmRwb2ludEhhbmRsZSA9IGZ1bmN0aW9uKAotICAgICAgaW50ZXJmYWNlSWQpIHsKLSAgICBpZiAo
IWludGVybmFsLmlzVmFsaWRJbnRlcmZhY2VJZChpbnRlcmZhY2VJZCkpIHsKLSAgICAgIHJldHVy
biBuZXcgaW50ZXJuYWwuSW50ZXJmYWNlRW5kcG9pbnRIYW5kbGUoKTsKLSAgICB9Ci0KLSAgICAv
LyBVbmxlc3MgaXQgaXMgdGhlIG1hc3RlciBJRCwgfGludGVyZmFjZUlkfCBpcyBmcm9tIHRoZSBy
ZW1vdGUgc2lkZSBhbmQKLSAgICAvLyB0aGVyZWZvcmUgaXRzIG5hbWVzcGFjZSBiaXQgaXMgc3Vw
cG9zZWQgdG8gYmUgZGlmZmVyZW50IHRoYW4gdGhlIHZhbHVlCi0gICAgLy8gdGhhdCB0aGlzIHJv
dXRlciB3b3VsZCB1c2UuCi0gICAgaWYgKCFpbnRlcm5hbC5pc01hc3RlckludGVyZmFjZUlkKGlu
dGVyZmFjZUlkKSAmJgotICAgICAgICB0aGlzLnNldEludGVyZmFjZUlkTmFtZXNwYWNlQml0XyA9
PT0KLSAgICAgICAgICAgIGludGVybmFsLmhhc0ludGVyZmFjZUlkTmFtZXNwYWNlQml0U2V0KGlu
dGVyZmFjZUlkKSkgewotICAgICAgcmV0dXJuIG5ldyBpbnRlcm5hbC5JbnRlcmZhY2VFbmRwb2lu
dEhhbmRsZSgpOwotICAgIH0KLQotICAgIHZhciBlbmRwb2ludCA9IHRoaXMuZW5kcG9pbnRzXy5n
ZXQoaW50ZXJmYWNlSWQpOwotCi0gICAgaWYgKCFlbmRwb2ludCkgewotICAgICAgZW5kcG9pbnQg
PSBuZXcgSW50ZXJmYWNlRW5kcG9pbnQodGhpcywgaW50ZXJmYWNlSWQpOwotICAgICAgdGhpcy5l
bmRwb2ludHNfLnNldChpbnRlcmZhY2VJZCwgZW5kcG9pbnQpOwotCi0gICAgICBjaGVjayghZW5k
cG9pbnQuaGFuZGxlQ3JlYXRlZCk7Ci0KLSAgICAgIGlmICh0aGlzLmVuY291bnRlcmVkRXJyb3Jf
KSB7Ci0gICAgICAgIHRoaXMudXBkYXRlRW5kcG9pbnRTdGF0ZU1heVJlbW92ZShlbmRwb2ludCwK
LSAgICAgICAgICAgIEVuZHBvaW50U3RhdGVVcGRhdGVUeXBlLlBFRVJfRU5EUE9JTlRfQ0xPU0VE
KTsKLSAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgLy8gSWYgdGhlIGVuZHBvaW50IGFscmVh
ZHkgZXhpc3QsIGl0IGlzIGJlY2F1c2Ugd2UgaGF2ZSByZWNlaXZlZCBhCi0gICAgICAvLyBub3Rp
ZmljYXRpb24gdGhhdCB0aGUgcGVlciBlbmRwb2ludCBoYXMgY2xvc2VkLgotICAgICAgY2hlY2so
IWVuZHBvaW50LmNsb3NlZCk7Ci0gICAgICBjaGVjayhlbmRwb2ludC5wZWVyQ2xvc2VkKTsKLQot
ICAgICAgaWYgKGVuZHBvaW50LmhhbmRsZUNyZWF0ZWQpIHsKLSAgICAgICAgcmV0dXJuIG5ldyBp
bnRlcm5hbC5JbnRlcmZhY2VFbmRwb2ludEhhbmRsZSgpOwotICAgICAgfQotICAgIH0KLQotICAg
IGVuZHBvaW50LmhhbmRsZUNyZWF0ZWQgPSB0cnVlOwotICAgIHJldHVybiBuZXcgaW50ZXJuYWwu
SW50ZXJmYWNlRW5kcG9pbnRIYW5kbGUoaW50ZXJmYWNlSWQsIHRoaXMpOwotICB9OwotCi0gIFJv
dXRlci5wcm90b3R5cGUuYWNjZXB0ID0gZnVuY3Rpb24obWVzc2FnZSkgewotICAgIHZhciBtZXNz
YWdlVmFsaWRhdG9yID0gbmV3IGludGVybmFsLlZhbGlkYXRvcihtZXNzYWdlKTsKLSAgICB2YXIg
ZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZU1lc3NhZ2VIZWFkZXIoKTsKLQotICAgIHZh
ciBvayA9IGZhbHNlOwotICAgIGlmIChlcnIgIT09IGludGVybmFsLnZhbGlkYXRpb25FcnJvci5O
T05FKSB7Ci0gICAgICBpbnRlcm5hbC5yZXBvcnRWYWxpZGF0aW9uRXJyb3IoZXJyKTsKLSAgICB9
IGVsc2UgaWYgKG1lc3NhZ2UuZGVzZXJpYWxpemVBc3NvY2lhdGVkRW5kcG9pbnRIYW5kbGVzKHRo
aXMpKSB7Ci0gICAgICBpZiAoaW50ZXJuYWwuaXNQaXBlQ29udHJvbE1lc3NhZ2UobWVzc2FnZSkp
IHsKLSAgICAgICAgb2sgPSB0aGlzLmNvbnRyb2xNZXNzYWdlSGFuZGxlcl8uYWNjZXB0KG1lc3Nh
Z2UpOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgdmFyIGludGVyZmFjZUlkID0gbWVzc2FnZS5n
ZXRJbnRlcmZhY2VJZCgpOwotICAgICAgICB2YXIgZW5kcG9pbnQgPSB0aGlzLmVuZHBvaW50c18u
Z2V0KGludGVyZmFjZUlkKTsKLSAgICAgICAgaWYgKCFlbmRwb2ludCB8fCBlbmRwb2ludC5jbG9z
ZWQpIHsKLSAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICgh
ZW5kcG9pbnQuY2xpZW50KSB7Ci0gICAgICAgICAgLy8gV2UgbmVlZCB0byB3YWl0IHVudGlsIGEg
Y2xpZW50IGlzIGF0dGFjaGVkIGluIG9yZGVyIHRvIGRpc3BhdGNoCi0gICAgICAgICAgLy8gZnVy
dGhlciBtZXNzYWdlcy4KLSAgICAgICAgICB0aGlzLmNhY2hlZE1lc3NhZ2VEYXRhID0ge21lc3Nh
Z2U6IG1lc3NhZ2UsCi0gICAgICAgICAgICAgIG1lc3NhZ2VWYWxpZGF0b3I6IG1lc3NhZ2VWYWxp
ZGF0b3J9OwotICAgICAgICAgIHRoaXMuY29ubmVjdG9yXy5wYXVzZUluY29taW5nTWV0aG9kQ2Fs
bFByb2Nlc3NpbmcoKTsKLSAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgICAg
ICBvayA9IGVuZHBvaW50LmNsaWVudC5oYW5kbGVJbmNvbWluZ01lc3NhZ2UobWVzc2FnZSwgbWVz
c2FnZVZhbGlkYXRvcik7Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiBvazsKLSAgfTsKLQot
ICBSb3V0ZXIucHJvdG90eXBlLmNsb3NlID0gZnVuY3Rpb24oKSB7Ci0gICAgdGhpcy5jb25uZWN0
b3JfLmNsb3NlKCk7Ci0gICAgLy8gQ2xvc2luZyB0aGUgbWVzc2FnZSBwaXBlIHdvbid0IHRyaWdn
ZXIgY29ubmVjdGlvbiBlcnJvciBoYW5kbGVyLgotICAgIC8vIEV4cGxpY2l0bHkgY2FsbCBvblBp
cGVDb25uZWN0aW9uRXJyb3IoKSBzbyB0aGF0IGFzc29jaWF0ZWQgZW5kcG9pbnRzCi0gICAgLy8g
d2lsbCBnZXQgbm90aWZpZWQuCi0gICAgdGhpcy5vblBpcGVDb25uZWN0aW9uRXJyb3IoKTsKLSAg
fTsKLQotICBSb3V0ZXIucHJvdG90eXBlLm9uUGVlckFzc29jaWF0ZWRFbmRwb2ludENsb3NlZCA9
IGZ1bmN0aW9uKGludGVyZmFjZUlkLAotICAgICAgcmVhc29uKSB7Ci0gICAgdmFyIGVuZHBvaW50
ID0gdGhpcy5lbmRwb2ludHNfLmdldChpbnRlcmZhY2VJZCk7Ci0gICAgaWYgKCFlbmRwb2ludCkg
ewotICAgICAgZW5kcG9pbnQgPSBuZXcgSW50ZXJmYWNlRW5kcG9pbnQodGhpcywgaW50ZXJmYWNl
SWQpOwotICAgICAgdGhpcy5lbmRwb2ludHNfLnNldChpbnRlcmZhY2VJZCwgZW5kcG9pbnQpOwot
ICAgIH0KLQotICAgIGlmIChyZWFzb24pIHsKLSAgICAgIGVuZHBvaW50LmRpc2Nvbm5lY3RSZWFz
b24gPSByZWFzb247Ci0gICAgfQotCi0gICAgaWYgKCFlbmRwb2ludC5wZWVyQ2xvc2VkKSB7Ci0g
ICAgICBpZiAoZW5kcG9pbnQuY2xpZW50KSB7Ci0gICAgICAgIHNldFRpbWVvdXQoZW5kcG9pbnQu
Y2xpZW50Lm5vdGlmeUVycm9yLmJpbmQoZW5kcG9pbnQuY2xpZW50LCByZWFzb24pLAotICAgICAg
ICAgICAgICAgICAgIDApOwotICAgICAgfQotICAgICAgdGhpcy51cGRhdGVFbmRwb2ludFN0YXRl
TWF5UmVtb3ZlKGVuZHBvaW50LAotICAgICAgICAgIEVuZHBvaW50U3RhdGVVcGRhdGVUeXBlLlBF
RVJfRU5EUE9JTlRfQ0xPU0VEKTsKLSAgICB9Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH07Ci0KLSAg
Um91dGVyLnByb3RvdHlwZS5vblBpcGVDb25uZWN0aW9uRXJyb3IgPSBmdW5jdGlvbigpIHsKLSAg
ICB0aGlzLmVuY291bnRlcmVkRXJyb3JfID0gdHJ1ZTsKLQotICAgIGZvciAodmFyIGVuZHBvaW50
IG9mIHRoaXMuZW5kcG9pbnRzXy52YWx1ZXMoKSkgewotICAgICAgaWYgKGVuZHBvaW50LmNsaWVu
dCkgewotICAgICAgICBzZXRUaW1lb3V0KAotICAgICAgICAgICAgZW5kcG9pbnQuY2xpZW50Lm5v
dGlmeUVycm9yLmJpbmQoCi0gICAgICAgICAgICAgICAgZW5kcG9pbnQuY2xpZW50LCBlbmRwb2lu
dC5kaXNjb25uZWN0UmVhc29uKSwKLSAgICAgICAgICAgIDApOwotICAgICAgfQotICAgICAgdGhp
cy51cGRhdGVFbmRwb2ludFN0YXRlTWF5UmVtb3ZlKGVuZHBvaW50LAotICAgICAgICAgIEVuZHBv
aW50U3RhdGVVcGRhdGVUeXBlLlBFRVJfRU5EUE9JTlRfQ0xPU0VEKTsKLSAgICB9Ci0gIH07Ci0K
LSAgUm91dGVyLnByb3RvdHlwZS5jbG9zZUVuZHBvaW50SGFuZGxlID0gZnVuY3Rpb24oaW50ZXJm
YWNlSWQsIHJlYXNvbikgewotICAgIGlmICghaW50ZXJuYWwuaXNWYWxpZEludGVyZmFjZUlkKGlu
dGVyZmFjZUlkKSkgewotICAgICAgcmV0dXJuOwotICAgIH0KLSAgICB2YXIgZW5kcG9pbnQgPSB0
aGlzLmVuZHBvaW50c18uZ2V0KGludGVyZmFjZUlkKTsKLSAgICBjaGVjayhlbmRwb2ludCk7Ci0g
ICAgY2hlY2soIWVuZHBvaW50LmNsaWVudCk7Ci0gICAgY2hlY2soIWVuZHBvaW50LmNsb3NlZCk7
Ci0KLSAgICB0aGlzLnVwZGF0ZUVuZHBvaW50U3RhdGVNYXlSZW1vdmUoZW5kcG9pbnQsCi0gICAg
ICAgIEVuZHBvaW50U3RhdGVVcGRhdGVUeXBlLkVORFBPSU5UX0NMT1NFRCk7Ci0KLSAgICBpZiAo
IWludGVybmFsLmlzTWFzdGVySW50ZXJmYWNlSWQoaW50ZXJmYWNlSWQpIHx8IHJlYXNvbikgewot
ICAgICAgdGhpcy5jb250cm9sTWVzc2FnZVByb3h5Xy5ub3RpZnlQZWVyRW5kcG9pbnRDbG9zZWQo
aW50ZXJmYWNlSWQsIHJlYXNvbik7Ci0gICAgfQotCi0gICAgaWYgKHRoaXMuY2FjaGVkTWVzc2Fn
ZURhdGEgJiYgaW50ZXJmYWNlSWQgPT09Ci0gICAgICAgIHRoaXMuY2FjaGVkTWVzc2FnZURhdGEu
bWVzc2FnZS5nZXRJbnRlcmZhY2VJZCgpKSB7Ci0gICAgICB0aGlzLmNhY2hlZE1lc3NhZ2VEYXRh
ID0gbnVsbDsKLSAgICAgIHRoaXMuY29ubmVjdG9yXy5yZXN1bWVJbmNvbWluZ01ldGhvZENhbGxQ
cm9jZXNzaW5nKCk7Ci0gICAgfQotICB9OwotCi0gIFJvdXRlci5wcm90b3R5cGUudXBkYXRlRW5k
cG9pbnRTdGF0ZU1heVJlbW92ZSA9IGZ1bmN0aW9uKGVuZHBvaW50LAotICAgICAgZW5kcG9pbnRT
dGF0ZVVwZGF0ZVR5cGUpIHsKLSAgICBpZiAoZW5kcG9pbnRTdGF0ZVVwZGF0ZVR5cGUgPT09IEVu
ZHBvaW50U3RhdGVVcGRhdGVUeXBlLkVORFBPSU5UX0NMT1NFRCkgewotICAgICAgZW5kcG9pbnQu
Y2xvc2VkID0gdHJ1ZTsKLSAgICB9IGVsc2UgewotICAgICAgZW5kcG9pbnQucGVlckNsb3NlZCA9
IHRydWU7Ci0gICAgfQotICAgIGlmIChlbmRwb2ludC5jbG9zZWQgJiYgZW5kcG9pbnQucGVlckNs
b3NlZCkgewotICAgICAgdGhpcy5lbmRwb2ludHNfLmRlbGV0ZShlbmRwb2ludC5pZCk7Ci0gICAg
fQotICB9OwotCi0gIGludGVybmFsLlJvdXRlciA9IFJvdXRlcjsKLX0pKCk7Ci0vLyBDb3B5cmln
aHQgMjAxNCBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVz
ZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2Ug
dGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLS8qKgotICogRGVm
aW5lcyBmdW5jdGlvbnMgZm9yIHRyYW5zbGF0aW5nIGJldHdlZW4gSmF2YVNjcmlwdCBzdHJpbmdz
IGFuZCBVVEY4IHN0cmluZ3MKLSAqIHN0b3JlZCBpbiBBcnJheUJ1ZmZlcnMuIFRoZXJlIGlzIG11
Y2ggcm9vbSBmb3Igb3B0aW1pemF0aW9uIGluIHRoaXMgY29kZSBpZgotICogaXQgcHJvdmVzIG5l
Y2Vzc2FyeS4KLSAqLwotKGZ1bmN0aW9uKCkgewotICB2YXIgaW50ZXJuYWwgPSBtb2pvLmludGVy
bmFsOwotICB2YXIgdGV4dERlY29kZXIgPSBuZXcgVGV4dERlY29kZXIoJ3V0Zi04Jyk7Ci0gIHZh
ciB0ZXh0RW5jb2RlciA9IG5ldyBUZXh0RW5jb2RlcigndXRmLTgnKTsKLQotICAvKioKLSAgICog
RGVjb2RlcyB0aGUgVVRGOCBzdHJpbmcgZnJvbSB0aGUgZ2l2ZW4gYnVmZmVyLgotICAgKiBAcGFy
YW0ge0FycmF5QnVmZmVyVmlld30gYnVmZmVyIFRoZSBidWZmZXIgY29udGFpbmluZyBVVEY4IHN0
cmluZyBkYXRhLgotICAgKiBAcmV0dXJuIHtzdHJpbmd9IFRoZSBjb3JyZXNwb25kaW5nIEphdmFT
Y3JpcHQgc3RyaW5nLgotICAgKi8KLSAgZnVuY3Rpb24gZGVjb2RlVXRmOFN0cmluZyhidWZmZXIp
IHsKLSAgICByZXR1cm4gdGV4dERlY29kZXIuZGVjb2RlKGJ1ZmZlcik7Ci0gIH0KLQotICAvKioK
LSAgICogRW5jb2RlcyB0aGUgZ2l2ZW4gSmF2YVNjcmlwdCBzdHJpbmcgaW50byBVVEY4LgotICAg
KiBAcGFyYW0ge3N0cmluZ30gc3RyIFRoZSBzdHJpbmcgdG8gZW5jb2RlLgotICAgKiBAcGFyYW0g
e0FycmF5QnVmZmVyVmlld30gb3V0cHV0QnVmZmVyIFRoZSBidWZmZXIgdG8gY29udGFpbiB0aGUg
cmVzdWx0LgotICAgKiBTaG91bGQgYmUgcHJlLWFsbG9jYXRlZCB0byBob2xkIGVub3VnaCBzcGFj
ZS4gVXNlIHx1dGY4TGVuZ3RofCB0byBkZXRlcm1pbmUKLSAgICogaG93IG11Y2ggc3BhY2UgaXMg
cmVxdWlyZWQuCi0gICAqIEByZXR1cm4ge251bWJlcn0gVGhlIG51bWJlciBvZiBieXRlcyB3cml0
dGVuIHRvIHxvdXRwdXRCdWZmZXJ8LgotICAgKi8KLSAgZnVuY3Rpb24gZW5jb2RlVXRmOFN0cmlu
ZyhzdHIsIG91dHB1dEJ1ZmZlcikgewotICAgIGNvbnN0IHV0ZjhCdWZmZXIgPSB0ZXh0RW5jb2Rl
ci5lbmNvZGUoc3RyKTsKLSAgICBpZiAob3V0cHV0QnVmZmVyLmxlbmd0aCA8IHV0ZjhCdWZmZXIu
bGVuZ3RoKQotICAgICAgdGhyb3cgbmV3IEVycm9yKCJCdWZmZXIgdG9vIHNtYWxsIGZvciBlbmNv
ZGVVdGY4U3RyaW5nIik7Ci0gICAgb3V0cHV0QnVmZmVyLnNldCh1dGY4QnVmZmVyKTsKLSAgICBy
ZXR1cm4gdXRmOEJ1ZmZlci5sZW5ndGg7Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJucyB0aGUg
bnVtYmVyIG9mIGJ5dGVzIHRoYXQgYSBVVEY4IGVuY29kaW5nIG9mIHRoZSBKYXZhU2NyaXB0IHN0
cmluZwotICAgKiB8c3RyfCB3b3VsZCBvY2N1cHkuCi0gICAqLwotICBmdW5jdGlvbiB1dGY4TGVu
Z3RoKHN0cikgewotICAgIHJldHVybiB0ZXh0RW5jb2Rlci5lbmNvZGUoc3RyKS5sZW5ndGg7Ci0g
IH0KLQotICBpbnRlcm5hbC5kZWNvZGVVdGY4U3RyaW5nID0gZGVjb2RlVXRmOFN0cmluZzsKLSAg
aW50ZXJuYWwuZW5jb2RlVXRmOFN0cmluZyA9IGVuY29kZVV0ZjhTdHJpbmc7Ci0gIGludGVybmFs
LnV0ZjhMZW5ndGggPSB1dGY4TGVuZ3RoOwotfSkoKTsKLS8vIENvcHlyaWdodCAyMDE0IFRoZSBD
aHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291
cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQot
Ly8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLQotKGZ1bmN0aW9uKCkgewotICB2YXIgaW50
ZXJuYWwgPSBtb2pvLmludGVybmFsOwotCi0gIHZhciB2YWxpZGF0aW9uRXJyb3IgPSB7Ci0gICAg
Tk9ORTogJ1ZBTElEQVRJT05fRVJST1JfTk9ORScsCi0gICAgTUlTQUxJR05FRF9PQkpFQ1Q6ICdW
QUxJREFUSU9OX0VSUk9SX01JU0FMSUdORURfT0JKRUNUJywKLSAgICBJTExFR0FMX01FTU9SWV9S
QU5HRTogJ1ZBTElEQVRJT05fRVJST1JfSUxMRUdBTF9NRU1PUllfUkFOR0UnLAotICAgIFVORVhQ
RUNURURfU1RSVUNUX0hFQURFUjogJ1ZBTElEQVRJT05fRVJST1JfVU5FWFBFQ1RFRF9TVFJVQ1Rf
SEVBREVSJywKLSAgICBVTkVYUEVDVEVEX0FSUkFZX0hFQURFUjogJ1ZBTElEQVRJT05fRVJST1Jf
VU5FWFBFQ1RFRF9BUlJBWV9IRUFERVInLAotICAgIElMTEVHQUxfSEFORExFOiAnVkFMSURBVElP
Tl9FUlJPUl9JTExFR0FMX0hBTkRMRScsCi0gICAgVU5FWFBFQ1RFRF9JTlZBTElEX0hBTkRMRTog
J1ZBTElEQVRJT05fRVJST1JfVU5FWFBFQ1RFRF9JTlZBTElEX0hBTkRMRScsCi0gICAgSUxMRUdB
TF9QT0lOVEVSOiAnVkFMSURBVElPTl9FUlJPUl9JTExFR0FMX1BPSU5URVInLAotICAgIFVORVhQ
RUNURURfTlVMTF9QT0lOVEVSOiAnVkFMSURBVElPTl9FUlJPUl9VTkVYUEVDVEVEX05VTExfUE9J
TlRFUicsCi0gICAgSUxMRUdBTF9JTlRFUkZBQ0VfSUQ6ICdWQUxJREFUSU9OX0VSUk9SX0lMTEVH
QUxfSU5URVJGQUNFX0lEJywKLSAgICBVTkVYUEVDVEVEX0lOVkFMSURfSU5URVJGQUNFX0lEOgot
ICAgICAgICAnVkFMSURBVElPTl9FUlJPUl9VTkVYUEVDVEVEX0lOVkFMSURfSU5URVJGQUNFX0lE
JywKLSAgICBNRVNTQUdFX0hFQURFUl9JTlZBTElEX0ZMQUdTOgotICAgICAgICAnVkFMSURBVElP
Tl9FUlJPUl9NRVNTQUdFX0hFQURFUl9JTlZBTElEX0ZMQUdTJywKLSAgICBNRVNTQUdFX0hFQURF
Ul9NSVNTSU5HX1JFUVVFU1RfSUQ6Ci0gICAgICAgICdWQUxJREFUSU9OX0VSUk9SX01FU1NBR0Vf
SEVBREVSX01JU1NJTkdfUkVRVUVTVF9JRCcsCi0gICAgRElGRkVSRU5UX1NJWkVEX0FSUkFZU19J
Tl9NQVA6Ci0gICAgICAgICdWQUxJREFUSU9OX0VSUk9SX0RJRkZFUkVOVF9TSVpFRF9BUlJBWVNf
SU5fTUFQJywKLSAgICBJTlZBTElEX1VOSU9OX1NJWkU6ICdWQUxJREFUSU9OX0VSUk9SX0lOVkFM
SURfVU5JT05fU0laRScsCi0gICAgVU5FWFBFQ1RFRF9OVUxMX1VOSU9OOiAnVkFMSURBVElPTl9F
UlJPUl9VTkVYUEVDVEVEX05VTExfVU5JT04nLAotICAgIFVOS05PV05fRU5VTV9WQUxVRTogJ1ZB
TElEQVRJT05fRVJST1JfVU5LTk9XTl9FTlVNX1ZBTFVFJywKLSAgfTsKLQotICB2YXIgTlVMTF9N
T0pPX1BPSU5URVIgPSAiTlVMTF9NT0pPX1BPSU5URVIiOwotICB2YXIgZ1ZhbGlkYXRpb25FcnJv
ck9ic2VydmVyID0gbnVsbDsKLQotICBmdW5jdGlvbiByZXBvcnRWYWxpZGF0aW9uRXJyb3IoZXJy
b3IpIHsKLSAgICBpZiAoZ1ZhbGlkYXRpb25FcnJvck9ic2VydmVyKSB7Ci0gICAgICBnVmFsaWRh
dGlvbkVycm9yT2JzZXJ2ZXIubGFzdEVycm9yID0gZXJyb3I7Ci0gICAgfSBlbHNlIHsKLSAgICAg
IGNvbnNvbGUud2FybignSW52YWxpZCBtZXNzYWdlOiAnICsgZXJyb3IpOwotICAgIH0KLSAgfQot
Ci0gIHZhciBWYWxpZGF0aW9uRXJyb3JPYnNlcnZlckZvclRlc3RpbmcgPSAoZnVuY3Rpb24oKSB7
Ci0gICAgZnVuY3Rpb24gT2JzZXJ2ZXIoKSB7Ci0gICAgICB0aGlzLmxhc3RFcnJvciA9IHZhbGlk
YXRpb25FcnJvci5OT05FOwotICAgIH0KLQotICAgIE9ic2VydmVyLnByb3RvdHlwZS5yZXNldCA9
IGZ1bmN0aW9uKCkgewotICAgICAgdGhpcy5sYXN0RXJyb3IgPSB2YWxpZGF0aW9uRXJyb3IuTk9O
RTsKLSAgICB9OwotCi0gICAgcmV0dXJuIHsKLSAgICAgIGdldEluc3RhbmNlOiBmdW5jdGlvbigp
IHsKLSAgICAgICAgaWYgKCFnVmFsaWRhdGlvbkVycm9yT2JzZXJ2ZXIpIHsKLSAgICAgICAgICBn
VmFsaWRhdGlvbkVycm9yT2JzZXJ2ZXIgPSBuZXcgT2JzZXJ2ZXIoKTsKLSAgICAgICAgfQotICAg
ICAgICByZXR1cm4gZ1ZhbGlkYXRpb25FcnJvck9ic2VydmVyOwotICAgICAgfQotICAgIH07Ci0g
IH0pKCk7Ci0KLSAgZnVuY3Rpb24gaXNUZXN0aW5nTW9kZSgpIHsKLSAgICByZXR1cm4gQm9vbGVh
bihnVmFsaWRhdGlvbkVycm9yT2JzZXJ2ZXIpOwotICB9Ci0KLSAgZnVuY3Rpb24gY2xlYXJUZXN0
aW5nTW9kZSgpIHsKLSAgICBnVmFsaWRhdGlvbkVycm9yT2JzZXJ2ZXIgPSBudWxsOwotICB9Ci0K
LSAgZnVuY3Rpb24gaXNFbnVtQ2xhc3MoY2xzKSB7Ci0gICAgcmV0dXJuIGNscyBpbnN0YW5jZW9m
IGludGVybmFsLkVudW07Ci0gIH0KLQotICBmdW5jdGlvbiBpc1N0cmluZ0NsYXNzKGNscykgewot
ICAgIHJldHVybiBjbHMgPT09IGludGVybmFsLlN0cmluZyB8fCBjbHMgPT09IGludGVybmFsLk51
bGxhYmxlU3RyaW5nOwotICB9Ci0KLSAgZnVuY3Rpb24gaXNIYW5kbGVDbGFzcyhjbHMpIHsKLSAg
ICByZXR1cm4gY2xzID09PSBpbnRlcm5hbC5IYW5kbGUgfHwgY2xzID09PSBpbnRlcm5hbC5OdWxs
YWJsZUhhbmRsZTsKLSAgfQotCi0gIGZ1bmN0aW9uIGlzSW50ZXJmYWNlQ2xhc3MoY2xzKSB7Ci0g
ICAgcmV0dXJuIGNscyBpbnN0YW5jZW9mIGludGVybmFsLkludGVyZmFjZTsKLSAgfQotCi0gIGZ1
bmN0aW9uIGlzSW50ZXJmYWNlUmVxdWVzdENsYXNzKGNscykgewotICAgIHJldHVybiBjbHMgPT09
IGludGVybmFsLkludGVyZmFjZVJlcXVlc3QgfHwKLSAgICAgICAgY2xzID09PSBpbnRlcm5hbC5O
dWxsYWJsZUludGVyZmFjZVJlcXVlc3Q7Ci0gIH0KLQotICBmdW5jdGlvbiBpc0Fzc29jaWF0ZWRJ
bnRlcmZhY2VDbGFzcyhjbHMpIHsKLSAgICByZXR1cm4gY2xzID09PSBpbnRlcm5hbC5Bc3NvY2lh
dGVkSW50ZXJmYWNlUHRySW5mbyB8fAotICAgICAgICBjbHMgPT09IGludGVybmFsLk51bGxhYmxl
QXNzb2NpYXRlZEludGVyZmFjZVB0ckluZm87Ci0gIH0KLQotICBmdW5jdGlvbiBpc0Fzc29jaWF0
ZWRJbnRlcmZhY2VSZXF1ZXN0Q2xhc3MoY2xzKSB7Ci0gICAgcmV0dXJuIGNscyA9PT0gaW50ZXJu
YWwuQXNzb2NpYXRlZEludGVyZmFjZVJlcXVlc3QgfHwKLSAgICAgICAgY2xzID09PSBpbnRlcm5h
bC5OdWxsYWJsZUFzc29jaWF0ZWRJbnRlcmZhY2VSZXF1ZXN0OwotICB9Ci0KLSAgZnVuY3Rpb24g
aXNOdWxsYWJsZSh0eXBlKSB7Ci0gICAgcmV0dXJuIHR5cGUgPT09IGludGVybmFsLk51bGxhYmxl
U3RyaW5nIHx8Ci0gICAgICAgIHR5cGUgPT09IGludGVybmFsLk51bGxhYmxlSGFuZGxlIHx8Ci0g
ICAgICAgIHR5cGUgPT09IGludGVybmFsLk51bGxhYmxlQXNzb2NpYXRlZEludGVyZmFjZVB0cklu
Zm8gfHwKLSAgICAgICAgdHlwZSA9PT0gaW50ZXJuYWwuTnVsbGFibGVBc3NvY2lhdGVkSW50ZXJm
YWNlUmVxdWVzdCB8fAotICAgICAgICB0eXBlID09PSBpbnRlcm5hbC5OdWxsYWJsZUludGVyZmFj
ZSB8fAotICAgICAgICB0eXBlID09PSBpbnRlcm5hbC5OdWxsYWJsZUludGVyZmFjZVJlcXVlc3Qg
fHwKLSAgICAgICAgdHlwZSBpbnN0YW5jZW9mIGludGVybmFsLk51bGxhYmxlQXJyYXlPZiB8fAot
ICAgICAgICB0eXBlIGluc3RhbmNlb2YgaW50ZXJuYWwuTnVsbGFibGVQb2ludGVyVG87Ci0gIH0K
LQotICBmdW5jdGlvbiBWYWxpZGF0b3IobWVzc2FnZSkgewotICAgIHRoaXMubWVzc2FnZSA9IG1l
c3NhZ2U7Ci0gICAgdGhpcy5vZmZzZXQgPSAwOwotICAgIHRoaXMuaGFuZGxlSW5kZXggPSAwOwot
ICAgIHRoaXMuYXNzb2NpYXRlZEVuZHBvaW50SGFuZGxlSW5kZXggPSAwOwotICAgIHRoaXMucGF5
bG9hZEludGVyZmFjZUlkcyA9IG51bGw7Ci0gICAgdGhpcy5vZmZzZXRMaW1pdCA9IHRoaXMubWVz
c2FnZS5idWZmZXIuYnl0ZUxlbmd0aDsKLSAgfQotCi0gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShW
YWxpZGF0b3IucHJvdG90eXBlLCAiaGFuZGxlSW5kZXhMaW1pdCIsIHsKLSAgICBnZXQ6IGZ1bmN0
aW9uKCkgeyByZXR1cm4gdGhpcy5tZXNzYWdlLmhhbmRsZXMubGVuZ3RoOyB9Ci0gIH0pOwotCi0g
IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShWYWxpZGF0b3IucHJvdG90eXBlLCAiYXNzb2NpYXRlZEhh
bmRsZUluZGV4TGltaXQiLCB7Ci0gICAgZ2V0OiBmdW5jdGlvbigpIHsKLSAgICAgIHJldHVybiB0
aGlzLnBheWxvYWRJbnRlcmZhY2VJZHMgPyB0aGlzLnBheWxvYWRJbnRlcmZhY2VJZHMubGVuZ3Ro
IDogMDsKLSAgICB9Ci0gIH0pOwotCi0gIC8vIFRydWUgaWYgd2UgY2FuIHNhZmVseSBhbGxvY2F0
ZSBhIGJsb2NrIG9mIGJ5dGVzIGZyb20gc3RhcnQgdG8KLSAgLy8gdG8gc3RhcnQgKyBudW1CeXRl
cy4KLSAgVmFsaWRhdG9yLnByb3RvdHlwZS5pc1ZhbGlkUmFuZ2UgPSBmdW5jdGlvbihzdGFydCwg
bnVtQnl0ZXMpIHsKLSAgICAvLyBPbmx5IHBvc2l0aXZlIEphdmFTY3JpcHQgaW50ZWdlcnMgdGhh
dCBhcmUgbGVzcyB0aGFuIDJeNTMKLSAgICAvLyAoTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIpIGNh
biBiZSByZXByZXNlbnRlZCBleGFjdGx5LgotICAgIGlmIChzdGFydCA8IHRoaXMub2Zmc2V0IHx8
IG51bUJ5dGVzIDw9IDAgfHwKLSAgICAgICAgIU51bWJlci5pc1NhZmVJbnRlZ2VyKHN0YXJ0KSB8
fAotICAgICAgICAhTnVtYmVyLmlzU2FmZUludGVnZXIobnVtQnl0ZXMpKQotICAgICAgcmV0dXJu
IGZhbHNlOwotCi0gICAgdmFyIG5ld09mZnNldCA9IHN0YXJ0ICsgbnVtQnl0ZXM7Ci0gICAgaWYg
KCFOdW1iZXIuaXNTYWZlSW50ZWdlcihuZXdPZmZzZXQpIHx8IG5ld09mZnNldCA+IHRoaXMub2Zm
c2V0TGltaXQpCi0gICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLSAgfTsK
LQotICBWYWxpZGF0b3IucHJvdG90eXBlLmNsYWltUmFuZ2UgPSBmdW5jdGlvbihzdGFydCwgbnVt
Qnl0ZXMpIHsKLSAgICBpZiAodGhpcy5pc1ZhbGlkUmFuZ2Uoc3RhcnQsIG51bUJ5dGVzKSkgewot
ICAgICAgdGhpcy5vZmZzZXQgPSBzdGFydCArIG51bUJ5dGVzOwotICAgICAgcmV0dXJuIHRydWU7
Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLSAgfTsKLQotICBWYWxpZGF0b3IucHJvdG90eXBl
LmNsYWltSGFuZGxlID0gZnVuY3Rpb24oaW5kZXgpIHsKLSAgICBpZiAoaW5kZXggPT09IGludGVy
bmFsLmtFbmNvZGVkSW52YWxpZEhhbmRsZVZhbHVlKQotICAgICAgcmV0dXJuIHRydWU7Ci0KLSAg
ICBpZiAoaW5kZXggPCB0aGlzLmhhbmRsZUluZGV4IHx8IGluZGV4ID49IHRoaXMuaGFuZGxlSW5k
ZXhMaW1pdCkKLSAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIC8vIFRoaXMgaXMgc2FmZSBiZWNh
dXNlIGhhbmRsZSBpbmRpY2VzIGFyZSB1aW50MzIuCi0gICAgdGhpcy5oYW5kbGVJbmRleCA9IGlu
ZGV4ICsgMTsKLSAgICByZXR1cm4gdHJ1ZTsKLSAgfTsKLQotICBWYWxpZGF0b3IucHJvdG90eXBl
LmNsYWltQXNzb2NpYXRlZEVuZHBvaW50SGFuZGxlID0gZnVuY3Rpb24oaW5kZXgpIHsKLSAgICBp
ZiAoaW5kZXggPT09IGludGVybmFsLmtFbmNvZGVkSW52YWxpZEhhbmRsZVZhbHVlKSB7Ci0gICAg
ICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBpZiAoaW5kZXggPCB0aGlzLmFzc29jaWF0ZWRF
bmRwb2ludEhhbmRsZUluZGV4IHx8Ci0gICAgICAgIGluZGV4ID49IHRoaXMuYXNzb2NpYXRlZEhh
bmRsZUluZGV4TGltaXQpIHsKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICAvLyBU
aGlzIGlzIHNhZmUgYmVjYXVzZSBoYW5kbGUgaW5kaWNlcyBhcmUgdWludDMyLgotICAgIHRoaXMu
YXNzb2NpYXRlZEVuZHBvaW50SGFuZGxlSW5kZXggPSBpbmRleCArIDE7Ci0gICAgcmV0dXJuIHRy
dWU7Ci0gIH07Ci0KLSAgVmFsaWRhdG9yLnByb3RvdHlwZS52YWxpZGF0ZUVudW0gPSBmdW5jdGlv
bihvZmZzZXQsIGVudW1DbGFzcykgewotICAgIC8vIE5vdGU6IEFzc3VtZXMgdGhhdCBlbnVtcyBh
cmUgYWx3YXlzIDMyIGJpdHMhIEJ1dCB0aGlzIG1hdGNoZXMKLSAgICAvLyBtb2pvbTo6Z2VuZXJh
dGU6OnBhY2s6OlBhY2tlZEZpZWxkOjpHZXRTaXplRm9yS2luZCwgc28gaXQgc2hvdWxkIGJlIG9r
YXkuCi0gICAgdmFyIHZhbHVlID0gdGhpcy5tZXNzYWdlLmJ1ZmZlci5nZXRJbnQzMihvZmZzZXQp
OwotICAgIHJldHVybiBlbnVtQ2xhc3MudmFsaWRhdGUodmFsdWUpOwotICB9Ci0KLSAgVmFsaWRh
dG9yLnByb3RvdHlwZS52YWxpZGF0ZUhhbmRsZSA9IGZ1bmN0aW9uKG9mZnNldCwgbnVsbGFibGUp
IHsKLSAgICB2YXIgaW5kZXggPSB0aGlzLm1lc3NhZ2UuYnVmZmVyLmdldFVpbnQzMihvZmZzZXQp
OwotCi0gICAgaWYgKGluZGV4ID09PSBpbnRlcm5hbC5rRW5jb2RlZEludmFsaWRIYW5kbGVWYWx1
ZSkKLSAgICAgIHJldHVybiBudWxsYWJsZSA/Ci0gICAgICAgICAgdmFsaWRhdGlvbkVycm9yLk5P
TkUgOiB2YWxpZGF0aW9uRXJyb3IuVU5FWFBFQ1RFRF9JTlZBTElEX0hBTkRMRTsKLQotICAgIGlm
ICghdGhpcy5jbGFpbUhhbmRsZShpbmRleCkpCi0gICAgICByZXR1cm4gdmFsaWRhdGlvbkVycm9y
LklMTEVHQUxfSEFORExFOwotCi0gICAgcmV0dXJuIHZhbGlkYXRpb25FcnJvci5OT05FOwotICB9
OwotCi0gIFZhbGlkYXRvci5wcm90b3R5cGUudmFsaWRhdGVBc3NvY2lhdGVkRW5kcG9pbnRIYW5k
bGUgPSBmdW5jdGlvbihvZmZzZXQsCi0gICAgICBudWxsYWJsZSkgewotICAgIHZhciBpbmRleCA9
IHRoaXMubWVzc2FnZS5idWZmZXIuZ2V0VWludDMyKG9mZnNldCk7Ci0KLSAgICBpZiAoaW5kZXgg
PT09IGludGVybmFsLmtFbmNvZGVkSW52YWxpZEhhbmRsZVZhbHVlKSB7Ci0gICAgICByZXR1cm4g
bnVsbGFibGUgPyB2YWxpZGF0aW9uRXJyb3IuTk9ORSA6Ci0gICAgICAgICAgdmFsaWRhdGlvbkVy
cm9yLlVORVhQRUNURURfSU5WQUxJRF9JTlRFUkZBQ0VfSUQ7Ci0gICAgfQotCi0gICAgaWYgKCF0
aGlzLmNsYWltQXNzb2NpYXRlZEVuZHBvaW50SGFuZGxlKGluZGV4KSkgewotICAgICAgcmV0dXJu
IHZhbGlkYXRpb25FcnJvci5JTExFR0FMX0lOVEVSRkFDRV9JRDsKLSAgICB9Ci0KLSAgICByZXR1
cm4gdmFsaWRhdGlvbkVycm9yLk5PTkU7Ci0gIH07Ci0KLSAgVmFsaWRhdG9yLnByb3RvdHlwZS52
YWxpZGF0ZUludGVyZmFjZSA9IGZ1bmN0aW9uKG9mZnNldCwgbnVsbGFibGUpIHsKLSAgICByZXR1
cm4gdGhpcy52YWxpZGF0ZUhhbmRsZShvZmZzZXQsIG51bGxhYmxlKTsKLSAgfTsKLQotICBWYWxp
ZGF0b3IucHJvdG90eXBlLnZhbGlkYXRlSW50ZXJmYWNlUmVxdWVzdCA9IGZ1bmN0aW9uKG9mZnNl
dCwgbnVsbGFibGUpIHsKLSAgICByZXR1cm4gdGhpcy52YWxpZGF0ZUhhbmRsZShvZmZzZXQsIG51
bGxhYmxlKTsKLSAgfTsKLQotICBWYWxpZGF0b3IucHJvdG90eXBlLnZhbGlkYXRlQXNzb2NpYXRl
ZEludGVyZmFjZSA9IGZ1bmN0aW9uKG9mZnNldCwKLSAgICAgIG51bGxhYmxlKSB7Ci0gICAgcmV0
dXJuIHRoaXMudmFsaWRhdGVBc3NvY2lhdGVkRW5kcG9pbnRIYW5kbGUob2Zmc2V0LCBudWxsYWJs
ZSk7Ci0gIH07Ci0KLSAgVmFsaWRhdG9yLnByb3RvdHlwZS52YWxpZGF0ZUFzc29jaWF0ZWRJbnRl
cmZhY2VSZXF1ZXN0ID0gZnVuY3Rpb24oCi0gICAgICBvZmZzZXQsIG51bGxhYmxlKSB7Ci0gICAg
cmV0dXJuIHRoaXMudmFsaWRhdGVBc3NvY2lhdGVkRW5kcG9pbnRIYW5kbGUob2Zmc2V0LCBudWxs
YWJsZSk7Ci0gIH07Ci0KLSAgVmFsaWRhdG9yLnByb3RvdHlwZS52YWxpZGF0ZVN0cnVjdEhlYWRl
ciA9IGZ1bmN0aW9uKG9mZnNldCwgbWluTnVtQnl0ZXMpIHsKLSAgICBpZiAoIWludGVybmFsLmlz
QWxpZ25lZChvZmZzZXQpKQotICAgICAgcmV0dXJuIHZhbGlkYXRpb25FcnJvci5NSVNBTElHTkVE
X09CSkVDVDsKLQotICAgIGlmICghdGhpcy5pc1ZhbGlkUmFuZ2Uob2Zmc2V0LCBpbnRlcm5hbC5r
U3RydWN0SGVhZGVyU2l6ZSkpCi0gICAgICByZXR1cm4gdmFsaWRhdGlvbkVycm9yLklMTEVHQUxf
TUVNT1JZX1JBTkdFOwotCi0gICAgdmFyIG51bUJ5dGVzID0gdGhpcy5tZXNzYWdlLmJ1ZmZlci5n
ZXRVaW50MzIob2Zmc2V0KTsKLQotICAgIGlmIChudW1CeXRlcyA8IG1pbk51bUJ5dGVzKQotICAg
ICAgcmV0dXJuIHZhbGlkYXRpb25FcnJvci5VTkVYUEVDVEVEX1NUUlVDVF9IRUFERVI7Ci0KLSAg
ICBpZiAoIXRoaXMuY2xhaW1SYW5nZShvZmZzZXQsIG51bUJ5dGVzKSkKLSAgICAgIHJldHVybiB2
YWxpZGF0aW9uRXJyb3IuSUxMRUdBTF9NRU1PUllfUkFOR0U7Ci0KLSAgICByZXR1cm4gdmFsaWRh
dGlvbkVycm9yLk5PTkU7Ci0gIH07Ci0KLSAgVmFsaWRhdG9yLnByb3RvdHlwZS52YWxpZGF0ZVN0
cnVjdFZlcnNpb24gPSBmdW5jdGlvbihvZmZzZXQsIHZlcnNpb25TaXplcykgewotICAgIHZhciBu
dW1CeXRlcyA9IHRoaXMubWVzc2FnZS5idWZmZXIuZ2V0VWludDMyKG9mZnNldCk7Ci0gICAgdmFy
IHZlcnNpb24gPSB0aGlzLm1lc3NhZ2UuYnVmZmVyLmdldFVpbnQzMihvZmZzZXQgKyA0KTsKLQot
ICAgIGlmICh2ZXJzaW9uIDw9IHZlcnNpb25TaXplc1t2ZXJzaW9uU2l6ZXMubGVuZ3RoIC0gMV0u
dmVyc2lvbikgewotICAgICAgLy8gU2NhbiBpbiByZXZlcnNlIG9yZGVyIHRvIG9wdGltaXplIGZv
ciBtb3JlIHJlY2VudCB2ZXJzaW9uU2l6ZXMuCi0gICAgICBmb3IgKHZhciBpID0gdmVyc2lvblNp
emVzLmxlbmd0aCAtIDE7IGkgPj0gMDsgLS1pKSB7Ci0gICAgICAgIGlmICh2ZXJzaW9uID49IHZl
cnNpb25TaXplc1tpXS52ZXJzaW9uKSB7Ci0gICAgICAgICAgaWYgKG51bUJ5dGVzID09IHZlcnNp
b25TaXplc1tpXS5udW1CeXRlcykKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIHJldHVy
biB2YWxpZGF0aW9uRXJyb3IuVU5FWFBFQ1RFRF9TVFJVQ1RfSEVBREVSOwotICAgICAgICB9Ci0g
ICAgICB9Ci0gICAgfSBlbHNlIGlmIChudW1CeXRlcyA8IHZlcnNpb25TaXplc1t2ZXJzaW9uU2l6
ZXMubGVuZ3RoLTFdLm51bUJ5dGVzKSB7Ci0gICAgICByZXR1cm4gdmFsaWRhdGlvbkVycm9yLlVO
RVhQRUNURURfU1RSVUNUX0hFQURFUjsKLSAgICB9Ci0KLSAgICByZXR1cm4gdmFsaWRhdGlvbkVy
cm9yLk5PTkU7Ci0gIH07Ci0KLSAgVmFsaWRhdG9yLnByb3RvdHlwZS5pc0ZpZWxkSW5TdHJ1Y3RW
ZXJzaW9uID0gZnVuY3Rpb24ob2Zmc2V0LCBmaWVsZFZlcnNpb24pIHsKLSAgICB2YXIgc3RydWN0
VmVyc2lvbiA9IHRoaXMubWVzc2FnZS5idWZmZXIuZ2V0VWludDMyKG9mZnNldCArIDQpOwotICAg
IHJldHVybiBmaWVsZFZlcnNpb24gPD0gc3RydWN0VmVyc2lvbjsKLSAgfTsKLQotICBWYWxpZGF0
b3IucHJvdG90eXBlLnZhbGlkYXRlTWVzc2FnZUhlYWRlciA9IGZ1bmN0aW9uKCkgewotICAgIHZh
ciBlcnIgPSB0aGlzLnZhbGlkYXRlU3RydWN0SGVhZGVyKDAsIGludGVybmFsLmtNZXNzYWdlVjBI
ZWFkZXJTaXplKTsKLSAgICBpZiAoZXJyICE9IHZhbGlkYXRpb25FcnJvci5OT05FKSB7Ci0gICAg
ICByZXR1cm4gZXJyOwotICAgIH0KLQotICAgIHZhciBudW1CeXRlcyA9IHRoaXMubWVzc2FnZS5n
ZXRIZWFkZXJOdW1CeXRlcygpOwotICAgIHZhciB2ZXJzaW9uID0gdGhpcy5tZXNzYWdlLmdldEhl
YWRlclZlcnNpb24oKTsKLQotICAgIHZhciB2YWxpZFZlcnNpb25BbmROdW1CeXRlcyA9Ci0gICAg
ICAgICh2ZXJzaW9uID09IDAgJiYgbnVtQnl0ZXMgPT0gaW50ZXJuYWwua01lc3NhZ2VWMEhlYWRl
clNpemUpIHx8Ci0gICAgICAgICh2ZXJzaW9uID09IDEgJiYgbnVtQnl0ZXMgPT0gaW50ZXJuYWwu
a01lc3NhZ2VWMUhlYWRlclNpemUpIHx8Ci0gICAgICAgICh2ZXJzaW9uID09IDIgJiYgbnVtQnl0
ZXMgPT0gaW50ZXJuYWwua01lc3NhZ2VWMkhlYWRlclNpemUpIHx8Ci0gICAgICAgICh2ZXJzaW9u
ID4gMiAmJiBudW1CeXRlcyA+PSBpbnRlcm5hbC5rTWVzc2FnZVYySGVhZGVyU2l6ZSk7Ci0KLSAg
ICBpZiAoIXZhbGlkVmVyc2lvbkFuZE51bUJ5dGVzKSB7Ci0gICAgICByZXR1cm4gdmFsaWRhdGlv
bkVycm9yLlVORVhQRUNURURfU1RSVUNUX0hFQURFUjsKLSAgICB9Ci0KLSAgICB2YXIgZXhwZWN0
c1Jlc3BvbnNlID0gdGhpcy5tZXNzYWdlLmV4cGVjdHNSZXNwb25zZSgpOwotICAgIHZhciBpc1Jl
c3BvbnNlID0gdGhpcy5tZXNzYWdlLmlzUmVzcG9uc2UoKTsKLQotICAgIGlmICh2ZXJzaW9uID09
IDAgJiYgKGV4cGVjdHNSZXNwb25zZSB8fCBpc1Jlc3BvbnNlKSkgewotICAgICAgcmV0dXJuIHZh
bGlkYXRpb25FcnJvci5NRVNTQUdFX0hFQURFUl9NSVNTSU5HX1JFUVVFU1RfSUQ7Ci0gICAgfQot
Ci0gICAgaWYgKGlzUmVzcG9uc2UgJiYgZXhwZWN0c1Jlc3BvbnNlKSB7Ci0gICAgICByZXR1cm4g
dmFsaWRhdGlvbkVycm9yLk1FU1NBR0VfSEVBREVSX0lOVkFMSURfRkxBR1M7Ci0gICAgfQotCi0g
ICAgaWYgKHZlcnNpb24gPCAyKSB7Ci0gICAgICByZXR1cm4gdmFsaWRhdGlvbkVycm9yLk5PTkU7
Ci0gICAgfQotCi0gICAgdmFyIGVyciA9IHRoaXMudmFsaWRhdGVBcnJheVBvaW50ZXIoCi0gICAg
ICAgIGludGVybmFsLmtNZXNzYWdlUGF5bG9hZEludGVyZmFjZUlkc1BvaW50ZXJPZmZzZXQsCi0g
ICAgICAgIGludGVybmFsLlVpbnQzMi5lbmNvZGVkU2l6ZSwgaW50ZXJuYWwuVWludDMyLCB0cnVl
LCBbMF0sIDApOwotCi0gICAgaWYgKGVyciAhPSB2YWxpZGF0aW9uRXJyb3IuTk9ORSkgewotICAg
ICAgcmV0dXJuIGVycjsKLSAgICB9Ci0KLSAgICB0aGlzLnBheWxvYWRJbnRlcmZhY2VJZHMgPSB0
aGlzLm1lc3NhZ2UuZ2V0UGF5bG9hZEludGVyZmFjZUlkcygpOwotICAgIGlmICh0aGlzLnBheWxv
YWRJbnRlcmZhY2VJZHMpIHsKLSAgICAgIGZvciAodmFyIGludGVyZmFjZUlkIG9mIHRoaXMucGF5
bG9hZEludGVyZmFjZUlkcykgewotICAgICAgICBpZiAoIWludGVybmFsLmlzVmFsaWRJbnRlcmZh
Y2VJZChpbnRlcmZhY2VJZCkgfHwKLSAgICAgICAgICAgIGludGVybmFsLmlzTWFzdGVySW50ZXJm
YWNlSWQoaW50ZXJmYWNlSWQpKSB7Ci0gICAgICAgICAgcmV0dXJuIHZhbGlkYXRpb25FcnJvci5J
TExFR0FMX0lOVEVSRkFDRV9JRDsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLQotICAgIC8v
IFNldCBvZmZzZXQgdG8gdGhlIHN0YXJ0IG9mIHRoZSBwYXlsb2FkIGFuZCBvZmZzZXRMaW1pdCB0
byB0aGUgc3RhcnQgb2YKLSAgICAvLyB0aGUgcGF5bG9hZCBpbnRlcmZhY2UgSWRzIHNvIHRoYXQg
cGF5bG9hZCBjYW4gYmUgdmFsaWRhdGVkIHVzaW5nIHRoZQotICAgIC8vIHNhbWUgbWVzc2FnZVZh
bGlkYXRvci4KLSAgICB0aGlzLm9mZnNldCA9IHRoaXMubWVzc2FnZS5nZXRIZWFkZXJOdW1CeXRl
cygpOwotICAgIHRoaXMub2Zmc2V0TGltaXQgPSB0aGlzLmRlY29kZVBvaW50ZXIoCi0gICAgICAg
IGludGVybmFsLmtNZXNzYWdlUGF5bG9hZEludGVyZmFjZUlkc1BvaW50ZXJPZmZzZXQpOwotCi0g
ICAgcmV0dXJuIHZhbGlkYXRpb25FcnJvci5OT05FOwotICB9OwotCi0gIFZhbGlkYXRvci5wcm90
b3R5cGUudmFsaWRhdGVNZXNzYWdlSXNSZXF1ZXN0V2l0aG91dFJlc3BvbnNlID0gZnVuY3Rpb24o
KSB7Ci0gICAgaWYgKHRoaXMubWVzc2FnZS5pc1Jlc3BvbnNlKCkgfHwgdGhpcy5tZXNzYWdlLmV4
cGVjdHNSZXNwb25zZSgpKSB7Ci0gICAgICByZXR1cm4gdmFsaWRhdGlvbkVycm9yLk1FU1NBR0Vf
SEVBREVSX0lOVkFMSURfRkxBR1M7Ci0gICAgfQotICAgIHJldHVybiB2YWxpZGF0aW9uRXJyb3Iu
Tk9ORTsKLSAgfTsKLQotICBWYWxpZGF0b3IucHJvdG90eXBlLnZhbGlkYXRlTWVzc2FnZUlzUmVx
dWVzdEV4cGVjdGluZ1Jlc3BvbnNlID0gZnVuY3Rpb24oKSB7Ci0gICAgaWYgKHRoaXMubWVzc2Fn
ZS5pc1Jlc3BvbnNlKCkgfHwgIXRoaXMubWVzc2FnZS5leHBlY3RzUmVzcG9uc2UoKSkgewotICAg
ICAgcmV0dXJuIHZhbGlkYXRpb25FcnJvci5NRVNTQUdFX0hFQURFUl9JTlZBTElEX0ZMQUdTOwot
ICAgIH0KLSAgICByZXR1cm4gdmFsaWRhdGlvbkVycm9yLk5PTkU7Ci0gIH07Ci0KLSAgVmFsaWRh
dG9yLnByb3RvdHlwZS52YWxpZGF0ZU1lc3NhZ2VJc1Jlc3BvbnNlID0gZnVuY3Rpb24oKSB7Ci0g
ICAgaWYgKHRoaXMubWVzc2FnZS5leHBlY3RzUmVzcG9uc2UoKSB8fCAhdGhpcy5tZXNzYWdlLmlz
UmVzcG9uc2UoKSkgewotICAgICAgcmV0dXJuIHZhbGlkYXRpb25FcnJvci5NRVNTQUdFX0hFQURF
Ul9JTlZBTElEX0ZMQUdTOwotICAgIH0KLSAgICByZXR1cm4gdmFsaWRhdGlvbkVycm9yLk5PTkU7
Ci0gIH07Ci0KLSAgLy8gUmV0dXJucyB0aGUgbWVzc2FnZS5idWZmZXIgcmVsYXRpdmUgb2Zmc2V0
IHRoaXMgcG9pbnRlciAicG9pbnRzIHRvIiwKLSAgLy8gTlVMTF9NT0pPX1BPSU5URVIgaWYgdGhl
IHBvaW50ZXIgcmVwcmVzZW50cyBhIG51bGwsIG9yIEpTIG51bGwgaWYgdGhlCi0gIC8vIHBvaW50
ZXIncyB2YWx1ZSBpcyBub3QgdmFsaWQuCi0gIFZhbGlkYXRvci5wcm90b3R5cGUuZGVjb2RlUG9p
bnRlciA9IGZ1bmN0aW9uKG9mZnNldCkgewotICAgIHZhciBwb2ludGVyVmFsdWUgPSB0aGlzLm1l
c3NhZ2UuYnVmZmVyLmdldFVpbnQ2NChvZmZzZXQpOwotICAgIGlmIChwb2ludGVyVmFsdWUgPT09
IDApCi0gICAgICByZXR1cm4gTlVMTF9NT0pPX1BPSU5URVI7Ci0gICAgdmFyIGJ1ZmZlck9mZnNl
dCA9IG9mZnNldCArIHBvaW50ZXJWYWx1ZTsKLSAgICByZXR1cm4gTnVtYmVyLmlzU2FmZUludGVn
ZXIoYnVmZmVyT2Zmc2V0KSA/IGJ1ZmZlck9mZnNldCA6IG51bGw7Ci0gIH07Ci0KLSAgVmFsaWRh
dG9yLnByb3RvdHlwZS5kZWNvZGVVbmlvblNpemUgPSBmdW5jdGlvbihvZmZzZXQpIHsKLSAgICBy
ZXR1cm4gdGhpcy5tZXNzYWdlLmJ1ZmZlci5nZXRVaW50MzIob2Zmc2V0KTsKLSAgfTsKLQotICBW
YWxpZGF0b3IucHJvdG90eXBlLmRlY29kZVVuaW9uVGFnID0gZnVuY3Rpb24ob2Zmc2V0KSB7Ci0g
ICAgcmV0dXJuIHRoaXMubWVzc2FnZS5idWZmZXIuZ2V0VWludDMyKG9mZnNldCArIDQpOwotICB9
OwotCi0gIFZhbGlkYXRvci5wcm90b3R5cGUudmFsaWRhdGVBcnJheVBvaW50ZXIgPSBmdW5jdGlv
bigKLSAgICAgIG9mZnNldCwgZWxlbWVudFNpemUsIGVsZW1lbnRUeXBlLCBudWxsYWJsZSwgZXhw
ZWN0ZWREaW1lbnNpb25TaXplcywKLSAgICAgIGN1cnJlbnREaW1lbnNpb24pIHsKLSAgICB2YXIg
YXJyYXlPZmZzZXQgPSB0aGlzLmRlY29kZVBvaW50ZXIob2Zmc2V0KTsKLSAgICBpZiAoYXJyYXlP
ZmZzZXQgPT09IG51bGwpCi0gICAgICByZXR1cm4gdmFsaWRhdGlvbkVycm9yLklMTEVHQUxfUE9J
TlRFUjsKLQotICAgIGlmIChhcnJheU9mZnNldCA9PT0gTlVMTF9NT0pPX1BPSU5URVIpCi0gICAg
ICByZXR1cm4gbnVsbGFibGUgPwotICAgICAgICAgIHZhbGlkYXRpb25FcnJvci5OT05FIDogdmFs
aWRhdGlvbkVycm9yLlVORVhQRUNURURfTlVMTF9QT0lOVEVSOwotCi0gICAgcmV0dXJuIHRoaXMu
dmFsaWRhdGVBcnJheShhcnJheU9mZnNldCwgZWxlbWVudFNpemUsIGVsZW1lbnRUeXBlLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWREaW1lbnNpb25TaXplcywgY3VycmVu
dERpbWVuc2lvbik7Ci0gIH07Ci0KLSAgVmFsaWRhdG9yLnByb3RvdHlwZS52YWxpZGF0ZVN0cnVj
dFBvaW50ZXIgPSBmdW5jdGlvbigKLSAgICAgIG9mZnNldCwgc3RydWN0Q2xhc3MsIG51bGxhYmxl
KSB7Ci0gICAgdmFyIHN0cnVjdE9mZnNldCA9IHRoaXMuZGVjb2RlUG9pbnRlcihvZmZzZXQpOwot
ICAgIGlmIChzdHJ1Y3RPZmZzZXQgPT09IG51bGwpCi0gICAgICByZXR1cm4gdmFsaWRhdGlvbkVy
cm9yLklMTEVHQUxfUE9JTlRFUjsKLQotICAgIGlmIChzdHJ1Y3RPZmZzZXQgPT09IE5VTExfTU9K
T19QT0lOVEVSKQotICAgICAgcmV0dXJuIG51bGxhYmxlID8KLSAgICAgICAgICB2YWxpZGF0aW9u
RXJyb3IuTk9ORSA6IHZhbGlkYXRpb25FcnJvci5VTkVYUEVDVEVEX05VTExfUE9JTlRFUjsKLQot
ICAgIHJldHVybiBzdHJ1Y3RDbGFzcy52YWxpZGF0ZSh0aGlzLCBzdHJ1Y3RPZmZzZXQpOwotICB9
OwotCi0gIFZhbGlkYXRvci5wcm90b3R5cGUudmFsaWRhdGVVbmlvbiA9IGZ1bmN0aW9uKAotICAg
ICAgb2Zmc2V0LCB1bmlvbkNsYXNzLCBudWxsYWJsZSkgewotICAgIHZhciBzaXplID0gdGhpcy5t
ZXNzYWdlLmJ1ZmZlci5nZXRVaW50MzIob2Zmc2V0KTsKLSAgICBpZiAoc2l6ZSA9PSAwKSB7Ci0g
ICAgICByZXR1cm4gbnVsbGFibGUgPwotICAgICAgICAgIHZhbGlkYXRpb25FcnJvci5OT05FIDog
dmFsaWRhdGlvbkVycm9yLlVORVhQRUNURURfTlVMTF9VTklPTjsKLSAgICB9Ci0KLSAgICByZXR1
cm4gdW5pb25DbGFzcy52YWxpZGF0ZSh0aGlzLCBvZmZzZXQpOwotICB9OwotCi0gIFZhbGlkYXRv
ci5wcm90b3R5cGUudmFsaWRhdGVOZXN0ZWRVbmlvbiA9IGZ1bmN0aW9uKAotICAgICAgb2Zmc2V0
LCB1bmlvbkNsYXNzLCBudWxsYWJsZSkgewotICAgIHZhciB1bmlvbk9mZnNldCA9IHRoaXMuZGVj
b2RlUG9pbnRlcihvZmZzZXQpOwotICAgIGlmICh1bmlvbk9mZnNldCA9PT0gbnVsbCkKLSAgICAg
IHJldHVybiB2YWxpZGF0aW9uRXJyb3IuSUxMRUdBTF9QT0lOVEVSOwotCi0gICAgaWYgKHVuaW9u
T2Zmc2V0ID09PSBOVUxMX01PSk9fUE9JTlRFUikKLSAgICAgIHJldHVybiBudWxsYWJsZSA/Ci0g
ICAgICAgICAgdmFsaWRhdGlvbkVycm9yLk5PTkUgOiB2YWxpZGF0aW9uRXJyb3IuVU5FWFBFQ1RF
RF9OVUxMX1VOSU9OOwotCi0gICAgcmV0dXJuIHRoaXMudmFsaWRhdGVVbmlvbih1bmlvbk9mZnNl
dCwgdW5pb25DbGFzcywgbnVsbGFibGUpOwotICB9OwotCi0gIC8vIFRoaXMgbWV0aG9kIGFzc3Vt
ZXMgdGhhdCB0aGUgYXJyYXkgYXQgYXJyYXlQb2ludGVyT2Zmc2V0IGhhcwotICAvLyBiZWVuIHZh
bGlkYXRlZC4KLQotICBWYWxpZGF0b3IucHJvdG90eXBlLmFycmF5TGVuZ3RoID0gZnVuY3Rpb24o
YXJyYXlQb2ludGVyT2Zmc2V0KSB7Ci0gICAgdmFyIGFycmF5T2Zmc2V0ID0gdGhpcy5kZWNvZGVQ
b2ludGVyKGFycmF5UG9pbnRlck9mZnNldCk7Ci0gICAgcmV0dXJuIHRoaXMubWVzc2FnZS5idWZm
ZXIuZ2V0VWludDMyKGFycmF5T2Zmc2V0ICsgNCk7Ci0gIH07Ci0KLSAgVmFsaWRhdG9yLnByb3Rv
dHlwZS52YWxpZGF0ZU1hcFBvaW50ZXIgPSBmdW5jdGlvbigKLSAgICAgIG9mZnNldCwgbWFwSXNO
dWxsYWJsZSwga2V5Q2xhc3MsIHZhbHVlQ2xhc3MsIHZhbHVlSXNOdWxsYWJsZSkgewotICAgIC8v
IFZhbGlkYXRlIHRoZSBpbXBsaWNpdCBtYXAgc3RydWN0OgotICAgIC8vIHN0cnVjdCB7YXJyYXk8
a2V5Q2xhc3M+IGtleXM7IGFycmF5PHZhbHVlQ2xhc3M+IHZhbHVlc307Ci0gICAgdmFyIHN0cnVj
dE9mZnNldCA9IHRoaXMuZGVjb2RlUG9pbnRlcihvZmZzZXQpOwotICAgIGlmIChzdHJ1Y3RPZmZz
ZXQgPT09IG51bGwpCi0gICAgICByZXR1cm4gdmFsaWRhdGlvbkVycm9yLklMTEVHQUxfUE9JTlRF
UjsKLQotICAgIGlmIChzdHJ1Y3RPZmZzZXQgPT09IE5VTExfTU9KT19QT0lOVEVSKQotICAgICAg
cmV0dXJuIG1hcElzTnVsbGFibGUgPwotICAgICAgICAgIHZhbGlkYXRpb25FcnJvci5OT05FIDog
dmFsaWRhdGlvbkVycm9yLlVORVhQRUNURURfTlVMTF9QT0lOVEVSOwotCi0gICAgdmFyIG1hcEVu
Y29kZWRTaXplID0gaW50ZXJuYWwua1N0cnVjdEhlYWRlclNpemUgKwotICAgICAgICAgICAgICAg
ICAgICAgICAgIGludGVybmFsLmtNYXBTdHJ1Y3RQYXlsb2FkU2l6ZTsKLSAgICB2YXIgZXJyID0g
dGhpcy52YWxpZGF0ZVN0cnVjdEhlYWRlcihzdHJ1Y3RPZmZzZXQsIG1hcEVuY29kZWRTaXplKTsK
LSAgICBpZiAoZXJyICE9PSB2YWxpZGF0aW9uRXJyb3IuTk9ORSkKLSAgICAgICAgcmV0dXJuIGVy
cjsKLQotICAgIC8vIFZhbGlkYXRlIHRoZSBrZXlzIGFycmF5LgotICAgIHZhciBrZXlzQXJyYXlQ
b2ludGVyT2Zmc2V0ID0gc3RydWN0T2Zmc2V0ICsgaW50ZXJuYWwua1N0cnVjdEhlYWRlclNpemU7
Ci0gICAgZXJyID0gdGhpcy52YWxpZGF0ZUFycmF5UG9pbnRlcigKLSAgICAgICAga2V5c0FycmF5
UG9pbnRlck9mZnNldCwga2V5Q2xhc3MuZW5jb2RlZFNpemUsIGtleUNsYXNzLCBmYWxzZSwgWzBd
LCAwKTsKLSAgICBpZiAoZXJyICE9PSB2YWxpZGF0aW9uRXJyb3IuTk9ORSkKLSAgICAgICAgcmV0
dXJuIGVycjsKLQotICAgIC8vIFZhbGlkYXRlIHRoZSB2YWx1ZXMgYXJyYXkuCi0gICAgdmFyIHZh
bHVlc0FycmF5UG9pbnRlck9mZnNldCA9IGtleXNBcnJheVBvaW50ZXJPZmZzZXQgKyA4OwotICAg
IHZhciB2YWx1ZXNBcnJheURpbWVuc2lvbnMgPSBbMF07IC8vIFZhbGlkYXRlIHRoZSBhY3R1YWwg
bGVuZ3RoIGJlbG93LgotICAgIGlmICh2YWx1ZUNsYXNzIGluc3RhbmNlb2YgaW50ZXJuYWwuQXJy
YXlPZikKLSAgICAgIHZhbHVlc0FycmF5RGltZW5zaW9ucyA9Ci0gICAgICAgICAgdmFsdWVzQXJy
YXlEaW1lbnNpb25zLmNvbmNhdCh2YWx1ZUNsYXNzLmRpbWVuc2lvbnMoKSk7Ci0gICAgdmFyIGVy
ciA9IHRoaXMudmFsaWRhdGVBcnJheVBvaW50ZXIodmFsdWVzQXJyYXlQb2ludGVyT2Zmc2V0LAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlQ2xhc3MuZW5jb2Rl
ZFNpemUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVDbGFz
cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZUlzTnVsbGFi
bGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVzQXJyYXlE
aW1lbnNpb25zLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDApOwot
ICAgIGlmIChlcnIgIT09IHZhbGlkYXRpb25FcnJvci5OT05FKQotICAgICAgICByZXR1cm4gZXJy
OwotCi0gICAgLy8gVmFsaWRhdGUgdGhlIGxlbmd0aHMgb2YgdGhlIGtleXMgYW5kIHZhbHVlcyBh
cnJheXMuCi0gICAgdmFyIGtleXNBcnJheUxlbmd0aCA9IHRoaXMuYXJyYXlMZW5ndGgoa2V5c0Fy
cmF5UG9pbnRlck9mZnNldCk7Ci0gICAgdmFyIHZhbHVlc0FycmF5TGVuZ3RoID0gdGhpcy5hcnJh
eUxlbmd0aCh2YWx1ZXNBcnJheVBvaW50ZXJPZmZzZXQpOwotICAgIGlmIChrZXlzQXJyYXlMZW5n
dGggIT0gdmFsdWVzQXJyYXlMZW5ndGgpCi0gICAgICByZXR1cm4gdmFsaWRhdGlvbkVycm9yLkRJ
RkZFUkVOVF9TSVpFRF9BUlJBWVNfSU5fTUFQOwotCi0gICAgcmV0dXJuIHZhbGlkYXRpb25FcnJv
ci5OT05FOwotICB9OwotCi0gIFZhbGlkYXRvci5wcm90b3R5cGUudmFsaWRhdGVTdHJpbmdQb2lu
dGVyID0gZnVuY3Rpb24ob2Zmc2V0LCBudWxsYWJsZSkgewotICAgIHJldHVybiB0aGlzLnZhbGlk
YXRlQXJyYXlQb2ludGVyKAotICAgICAgICBvZmZzZXQsIGludGVybmFsLlVpbnQ4LmVuY29kZWRT
aXplLCBpbnRlcm5hbC5VaW50OCwgbnVsbGFibGUsIFswXSwgMCk7Ci0gIH07Ci0KLSAgLy8gU2lt
aWxhciB0byBBcnJheV9EYXRhPFQ+OjpWYWxpZGF0ZSgpCi0gIC8vIG1vam8vcHVibGljL2NwcC9i
aW5kaW5ncy9saWIvYXJyYXlfaW50ZXJuYWwuaAotCi0gIFZhbGlkYXRvci5wcm90b3R5cGUudmFs
aWRhdGVBcnJheSA9Ci0gICAgICBmdW5jdGlvbiAob2Zmc2V0LCBlbGVtZW50U2l6ZSwgZWxlbWVu
dFR5cGUsIGV4cGVjdGVkRGltZW5zaW9uU2l6ZXMsCi0gICAgICAgICAgICAgICAgY3VycmVudERp
bWVuc2lvbikgewotICAgIGlmICghaW50ZXJuYWwuaXNBbGlnbmVkKG9mZnNldCkpCi0gICAgICBy
ZXR1cm4gdmFsaWRhdGlvbkVycm9yLk1JU0FMSUdORURfT0JKRUNUOwotCi0gICAgaWYgKCF0aGlz
LmlzVmFsaWRSYW5nZShvZmZzZXQsIGludGVybmFsLmtBcnJheUhlYWRlclNpemUpKQotICAgICAg
cmV0dXJuIHZhbGlkYXRpb25FcnJvci5JTExFR0FMX01FTU9SWV9SQU5HRTsKLQotICAgIHZhciBu
dW1CeXRlcyA9IHRoaXMubWVzc2FnZS5idWZmZXIuZ2V0VWludDMyKG9mZnNldCk7Ci0gICAgdmFy
IG51bUVsZW1lbnRzID0gdGhpcy5tZXNzYWdlLmJ1ZmZlci5nZXRVaW50MzIob2Zmc2V0ICsgNCk7
Ci0KLSAgICAvLyBOb3RlOiB0aGlzIGNvbXB1dGF0aW9uIGlzICJzYWZlIiBiZWNhdXNlIGVsZW1l
bnRTaXplIDw9IDggYW5kCi0gICAgLy8gbnVtRWxlbWVudHMgaXMgYSB1aW50MzIuCi0gICAgdmFy
IGVsZW1lbnRzVG90YWxTaXplID0gKGVsZW1lbnRUeXBlID09PSBpbnRlcm5hbC5QYWNrZWRCb29s
KSA/Ci0gICAgICAgIE1hdGguY2VpbChudW1FbGVtZW50cyAvIDgpIDogKGVsZW1lbnRTaXplICog
bnVtRWxlbWVudHMpOwotCi0gICAgaWYgKG51bUJ5dGVzIDwgaW50ZXJuYWwua0FycmF5SGVhZGVy
U2l6ZSArIGVsZW1lbnRzVG90YWxTaXplKQotICAgICAgcmV0dXJuIHZhbGlkYXRpb25FcnJvci5V
TkVYUEVDVEVEX0FSUkFZX0hFQURFUjsKLQotICAgIGlmIChleHBlY3RlZERpbWVuc2lvblNpemVz
W2N1cnJlbnREaW1lbnNpb25dICE9IDAgJiYKLSAgICAgICAgbnVtRWxlbWVudHMgIT0gZXhwZWN0
ZWREaW1lbnNpb25TaXplc1tjdXJyZW50RGltZW5zaW9uXSkgewotICAgICAgcmV0dXJuIHZhbGlk
YXRpb25FcnJvci5VTkVYUEVDVEVEX0FSUkFZX0hFQURFUjsKLSAgICB9Ci0KLSAgICBpZiAoIXRo
aXMuY2xhaW1SYW5nZShvZmZzZXQsIG51bUJ5dGVzKSkKLSAgICAgIHJldHVybiB2YWxpZGF0aW9u
RXJyb3IuSUxMRUdBTF9NRU1PUllfUkFOR0U7Ci0KLSAgICAvLyBWYWxpZGF0ZSB0aGUgYXJyYXkn
cyBlbGVtZW50cyBpZiB0aGV5IGFyZSBwb2ludGVycyBvciBoYW5kbGVzLgotCi0gICAgdmFyIGVs
ZW1lbnRzT2Zmc2V0ID0gb2Zmc2V0ICsgaW50ZXJuYWwua0FycmF5SGVhZGVyU2l6ZTsKLSAgICB2
YXIgbnVsbGFibGUgPSBpc051bGxhYmxlKGVsZW1lbnRUeXBlKTsKLQotICAgIGlmIChpc0hhbmRs
ZUNsYXNzKGVsZW1lbnRUeXBlKSkKLSAgICAgIHJldHVybiB0aGlzLnZhbGlkYXRlSGFuZGxlRWxl
bWVudHMoZWxlbWVudHNPZmZzZXQsIG51bUVsZW1lbnRzLCBudWxsYWJsZSk7Ci0gICAgaWYgKGlz
SW50ZXJmYWNlQ2xhc3MoZWxlbWVudFR5cGUpKQotICAgICAgcmV0dXJuIHRoaXMudmFsaWRhdGVJ
bnRlcmZhY2VFbGVtZW50cygKLSAgICAgICAgICBlbGVtZW50c09mZnNldCwgbnVtRWxlbWVudHMs
IG51bGxhYmxlKTsKLSAgICBpZiAoaXNJbnRlcmZhY2VSZXF1ZXN0Q2xhc3MoZWxlbWVudFR5cGUp
KQotICAgICAgcmV0dXJuIHRoaXMudmFsaWRhdGVJbnRlcmZhY2VSZXF1ZXN0RWxlbWVudHMoCi0g
ICAgICAgICAgZWxlbWVudHNPZmZzZXQsIG51bUVsZW1lbnRzLCBudWxsYWJsZSk7Ci0gICAgaWYg
KGlzQXNzb2NpYXRlZEludGVyZmFjZUNsYXNzKGVsZW1lbnRUeXBlKSkKLSAgICAgIHJldHVybiB0
aGlzLnZhbGlkYXRlQXNzb2NpYXRlZEludGVyZmFjZUVsZW1lbnRzKAotICAgICAgICAgIGVsZW1l
bnRzT2Zmc2V0LCBudW1FbGVtZW50cywgbnVsbGFibGUpOwotICAgIGlmIChpc0Fzc29jaWF0ZWRJ
bnRlcmZhY2VSZXF1ZXN0Q2xhc3MoZWxlbWVudFR5cGUpKQotICAgICAgcmV0dXJuIHRoaXMudmFs
aWRhdGVBc3NvY2lhdGVkSW50ZXJmYWNlUmVxdWVzdEVsZW1lbnRzKAotICAgICAgICAgIGVsZW1l
bnRzT2Zmc2V0LCBudW1FbGVtZW50cywgbnVsbGFibGUpOwotICAgIGlmIChpc1N0cmluZ0NsYXNz
KGVsZW1lbnRUeXBlKSkKLSAgICAgIHJldHVybiB0aGlzLnZhbGlkYXRlQXJyYXlFbGVtZW50cygK
LSAgICAgICAgICBlbGVtZW50c09mZnNldCwgbnVtRWxlbWVudHMsIGludGVybmFsLlVpbnQ4LCBu
dWxsYWJsZSwgWzBdLCAwKTsKLSAgICBpZiAoZWxlbWVudFR5cGUgaW5zdGFuY2VvZiBpbnRlcm5h
bC5Qb2ludGVyVG8pCi0gICAgICByZXR1cm4gdGhpcy52YWxpZGF0ZVN0cnVjdEVsZW1lbnRzKAot
ICAgICAgICAgIGVsZW1lbnRzT2Zmc2V0LCBudW1FbGVtZW50cywgZWxlbWVudFR5cGUuY2xzLCBu
dWxsYWJsZSk7Ci0gICAgaWYgKGVsZW1lbnRUeXBlIGluc3RhbmNlb2YgaW50ZXJuYWwuQXJyYXlP
ZikKLSAgICAgIHJldHVybiB0aGlzLnZhbGlkYXRlQXJyYXlFbGVtZW50cygKLSAgICAgICAgICBl
bGVtZW50c09mZnNldCwgbnVtRWxlbWVudHMsIGVsZW1lbnRUeXBlLmNscywgbnVsbGFibGUsCi0g
ICAgICAgICAgZXhwZWN0ZWREaW1lbnNpb25TaXplcywgY3VycmVudERpbWVuc2lvbiArIDEpOwot
ICAgIGlmIChpc0VudW1DbGFzcyhlbGVtZW50VHlwZSkpCi0gICAgICByZXR1cm4gdGhpcy52YWxp
ZGF0ZUVudW1FbGVtZW50cyhlbGVtZW50c09mZnNldCwgbnVtRWxlbWVudHMsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50VHlwZS5jbHMpOwotCi0gICAgcmV0
dXJuIHZhbGlkYXRpb25FcnJvci5OT05FOwotICB9OwotCi0gIC8vIE5vdGU6IHRoZSB8b2Zmc2V0
ICsgaSAqIGVsZW1lbnRTaXplfCBjb21wdXRhdGlvbiBpbiB0aGUgdmFsaWRhdGVGb29FbGVtZW50
cwotICAvLyBtZXRob2RzIGJlbG93IGlzICJzYWZlIiBiZWNhdXNlIGVsZW1lbnRTaXplIDw9IDgs
IG9mZnNldCBhbmQKLSAgLy8gbnVtRWxlbWVudHMgYXJlIHVpbnQzMiwgYW5kIDAgPD0gaSA8IG51
bUVsZW1lbnRzLgotCi0gIFZhbGlkYXRvci5wcm90b3R5cGUudmFsaWRhdGVIYW5kbGVFbGVtZW50
cyA9Ci0gICAgICBmdW5jdGlvbihvZmZzZXQsIG51bUVsZW1lbnRzLCBudWxsYWJsZSkgewotICAg
IHZhciBlbGVtZW50U2l6ZSA9IGludGVybmFsLkhhbmRsZS5lbmNvZGVkU2l6ZTsKLSAgICBmb3Ig
KHZhciBpID0gMDsgaSA8IG51bUVsZW1lbnRzOyBpKyspIHsKLSAgICAgIHZhciBlbGVtZW50T2Zm
c2V0ID0gb2Zmc2V0ICsgaSAqIGVsZW1lbnRTaXplOwotICAgICAgdmFyIGVyciA9IHRoaXMudmFs
aWRhdGVIYW5kbGUoZWxlbWVudE9mZnNldCwgbnVsbGFibGUpOwotICAgICAgaWYgKGVyciAhPSB2
YWxpZGF0aW9uRXJyb3IuTk9ORSkKLSAgICAgICAgcmV0dXJuIGVycjsKLSAgICB9Ci0gICAgcmV0
dXJuIHZhbGlkYXRpb25FcnJvci5OT05FOwotICB9OwotCi0gIFZhbGlkYXRvci5wcm90b3R5cGUu
dmFsaWRhdGVJbnRlcmZhY2VFbGVtZW50cyA9Ci0gICAgICBmdW5jdGlvbihvZmZzZXQsIG51bUVs
ZW1lbnRzLCBudWxsYWJsZSkgewotICAgIHZhciBlbGVtZW50U2l6ZSA9IGludGVybmFsLkludGVy
ZmFjZS5wcm90b3R5cGUuZW5jb2RlZFNpemU7Ci0gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBudW1F
bGVtZW50czsgaSsrKSB7Ci0gICAgICB2YXIgZWxlbWVudE9mZnNldCA9IG9mZnNldCArIGkgKiBl
bGVtZW50U2l6ZTsKLSAgICAgIHZhciBlcnIgPSB0aGlzLnZhbGlkYXRlSW50ZXJmYWNlKGVsZW1l
bnRPZmZzZXQsIG51bGxhYmxlKTsKLSAgICAgIGlmIChlcnIgIT0gdmFsaWRhdGlvbkVycm9yLk5P
TkUpCi0gICAgICAgIHJldHVybiBlcnI7Ci0gICAgfQotICAgIHJldHVybiB2YWxpZGF0aW9uRXJy
b3IuTk9ORTsKLSAgfTsKLQotICBWYWxpZGF0b3IucHJvdG90eXBlLnZhbGlkYXRlSW50ZXJmYWNl
UmVxdWVzdEVsZW1lbnRzID0KLSAgICAgIGZ1bmN0aW9uKG9mZnNldCwgbnVtRWxlbWVudHMsIG51
bGxhYmxlKSB7Ci0gICAgdmFyIGVsZW1lbnRTaXplID0gaW50ZXJuYWwuSW50ZXJmYWNlUmVxdWVz
dC5lbmNvZGVkU2l6ZTsKLSAgICBmb3IgKHZhciBpID0gMDsgaSA8IG51bUVsZW1lbnRzOyBpKysp
IHsKLSAgICAgIHZhciBlbGVtZW50T2Zmc2V0ID0gb2Zmc2V0ICsgaSAqIGVsZW1lbnRTaXplOwot
ICAgICAgdmFyIGVyciA9IHRoaXMudmFsaWRhdGVJbnRlcmZhY2VSZXF1ZXN0KGVsZW1lbnRPZmZz
ZXQsIG51bGxhYmxlKTsKLSAgICAgIGlmIChlcnIgIT0gdmFsaWRhdGlvbkVycm9yLk5PTkUpCi0g
ICAgICAgIHJldHVybiBlcnI7Ci0gICAgfQotICAgIHJldHVybiB2YWxpZGF0aW9uRXJyb3IuTk9O
RTsKLSAgfTsKLQotICBWYWxpZGF0b3IucHJvdG90eXBlLnZhbGlkYXRlQXNzb2NpYXRlZEludGVy
ZmFjZUVsZW1lbnRzID0KLSAgICAgIGZ1bmN0aW9uKG9mZnNldCwgbnVtRWxlbWVudHMsIG51bGxh
YmxlKSB7Ci0gICAgdmFyIGVsZW1lbnRTaXplID0gaW50ZXJuYWwuQXNzb2NpYXRlZEludGVyZmFj
ZVB0ckluZm8ucHJvdG90eXBlLmVuY29kZWRTaXplOwotICAgIGZvciAodmFyIGkgPSAwOyBpIDwg
bnVtRWxlbWVudHM7IGkrKykgewotICAgICAgdmFyIGVsZW1lbnRPZmZzZXQgPSBvZmZzZXQgKyBp
ICogZWxlbWVudFNpemU7Ci0gICAgICB2YXIgZXJyID0gdGhpcy52YWxpZGF0ZUFzc29jaWF0ZWRJ
bnRlcmZhY2UoZWxlbWVudE9mZnNldCwgbnVsbGFibGUpOwotICAgICAgaWYgKGVyciAhPSB2YWxp
ZGF0aW9uRXJyb3IuTk9ORSkgewotICAgICAgICByZXR1cm4gZXJyOwotICAgICAgfQotICAgIH0K
LSAgICByZXR1cm4gdmFsaWRhdGlvbkVycm9yLk5PTkU7Ci0gIH07Ci0KLSAgVmFsaWRhdG9yLnBy
b3RvdHlwZS52YWxpZGF0ZUFzc29jaWF0ZWRJbnRlcmZhY2VSZXF1ZXN0RWxlbWVudHMgPQotICAg
ICAgZnVuY3Rpb24ob2Zmc2V0LCBudW1FbGVtZW50cywgbnVsbGFibGUpIHsKLSAgICB2YXIgZWxl
bWVudFNpemUgPSBpbnRlcm5hbC5Bc3NvY2lhdGVkSW50ZXJmYWNlUmVxdWVzdC5lbmNvZGVkU2l6
ZTsKLSAgICBmb3IgKHZhciBpID0gMDsgaSA8IG51bUVsZW1lbnRzOyBpKyspIHsKLSAgICAgIHZh
ciBlbGVtZW50T2Zmc2V0ID0gb2Zmc2V0ICsgaSAqIGVsZW1lbnRTaXplOwotICAgICAgdmFyIGVy
ciA9IHRoaXMudmFsaWRhdGVBc3NvY2lhdGVkSW50ZXJmYWNlUmVxdWVzdChlbGVtZW50T2Zmc2V0
LAotICAgICAgICAgIG51bGxhYmxlKTsKLSAgICAgIGlmIChlcnIgIT0gdmFsaWRhdGlvbkVycm9y
Lk5PTkUpIHsKLSAgICAgICAgcmV0dXJuIGVycjsKLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJu
IHZhbGlkYXRpb25FcnJvci5OT05FOwotICB9OwotCi0gIC8vIFRoZSBlbGVtZW50Q2xhc3MgcGFy
YW1ldGVyIGlzIHRoZSBlbGVtZW50IHR5cGUgb2YgdGhlIGVsZW1lbnQgYXJyYXlzLgotICBWYWxp
ZGF0b3IucHJvdG90eXBlLnZhbGlkYXRlQXJyYXlFbGVtZW50cyA9Ci0gICAgICBmdW5jdGlvbihv
ZmZzZXQsIG51bUVsZW1lbnRzLCBlbGVtZW50Q2xhc3MsIG51bGxhYmxlLAotICAgICAgICAgICAg
ICAgZXhwZWN0ZWREaW1lbnNpb25TaXplcywgY3VycmVudERpbWVuc2lvbikgewotICAgIHZhciBl
bGVtZW50U2l6ZSA9IGludGVybmFsLlBvaW50ZXJUby5wcm90b3R5cGUuZW5jb2RlZFNpemU7Ci0g
ICAgZm9yICh2YXIgaSA9IDA7IGkgPCBudW1FbGVtZW50czsgaSsrKSB7Ci0gICAgICB2YXIgZWxl
bWVudE9mZnNldCA9IG9mZnNldCArIGkgKiBlbGVtZW50U2l6ZTsKLSAgICAgIHZhciBlcnIgPSB0
aGlzLnZhbGlkYXRlQXJyYXlQb2ludGVyKAotICAgICAgICAgIGVsZW1lbnRPZmZzZXQsIGVsZW1l
bnRDbGFzcy5lbmNvZGVkU2l6ZSwgZWxlbWVudENsYXNzLCBudWxsYWJsZSwKLSAgICAgICAgICBl
eHBlY3RlZERpbWVuc2lvblNpemVzLCBjdXJyZW50RGltZW5zaW9uKTsKLSAgICAgIGlmIChlcnIg
IT0gdmFsaWRhdGlvbkVycm9yLk5PTkUpCi0gICAgICAgIHJldHVybiBlcnI7Ci0gICAgfQotICAg
IHJldHVybiB2YWxpZGF0aW9uRXJyb3IuTk9ORTsKLSAgfTsKLQotICBWYWxpZGF0b3IucHJvdG90
eXBlLnZhbGlkYXRlU3RydWN0RWxlbWVudHMgPQotICAgICAgZnVuY3Rpb24ob2Zmc2V0LCBudW1F
bGVtZW50cywgc3RydWN0Q2xhc3MsIG51bGxhYmxlKSB7Ci0gICAgdmFyIGVsZW1lbnRTaXplID0g
aW50ZXJuYWwuUG9pbnRlclRvLnByb3RvdHlwZS5lbmNvZGVkU2l6ZTsKLSAgICBmb3IgKHZhciBp
ID0gMDsgaSA8IG51bUVsZW1lbnRzOyBpKyspIHsKLSAgICAgIHZhciBlbGVtZW50T2Zmc2V0ID0g
b2Zmc2V0ICsgaSAqIGVsZW1lbnRTaXplOwotICAgICAgdmFyIGVyciA9Ci0gICAgICAgICAgdGhp
cy52YWxpZGF0ZVN0cnVjdFBvaW50ZXIoZWxlbWVudE9mZnNldCwgc3RydWN0Q2xhc3MsIG51bGxh
YmxlKTsKLSAgICAgIGlmIChlcnIgIT0gdmFsaWRhdGlvbkVycm9yLk5PTkUpCi0gICAgICAgIHJl
dHVybiBlcnI7Ci0gICAgfQotICAgIHJldHVybiB2YWxpZGF0aW9uRXJyb3IuTk9ORTsKLSAgfTsK
LQotICBWYWxpZGF0b3IucHJvdG90eXBlLnZhbGlkYXRlRW51bUVsZW1lbnRzID0KLSAgICAgIGZ1
bmN0aW9uKG9mZnNldCwgbnVtRWxlbWVudHMsIGVudW1DbGFzcykgewotICAgIHZhciBlbGVtZW50
U2l6ZSA9IGludGVybmFsLkVudW0ucHJvdG90eXBlLmVuY29kZWRTaXplOwotICAgIGZvciAodmFy
IGkgPSAwOyBpIDwgbnVtRWxlbWVudHM7IGkrKykgewotICAgICAgdmFyIGVsZW1lbnRPZmZzZXQg
PSBvZmZzZXQgKyBpICogZWxlbWVudFNpemU7Ci0gICAgICB2YXIgZXJyID0gdGhpcy52YWxpZGF0
ZUVudW0oZWxlbWVudE9mZnNldCwgZW51bUNsYXNzKTsKLSAgICAgIGlmIChlcnIgIT0gdmFsaWRh
dGlvbkVycm9yLk5PTkUpCi0gICAgICAgIHJldHVybiBlcnI7Ci0gICAgfQotICAgIHJldHVybiB2
YWxpZGF0aW9uRXJyb3IuTk9ORTsKLSAgfTsKLQotICBpbnRlcm5hbC52YWxpZGF0aW9uRXJyb3Ig
PSB2YWxpZGF0aW9uRXJyb3I7Ci0gIGludGVybmFsLlZhbGlkYXRvciA9IFZhbGlkYXRvcjsKLSAg
aW50ZXJuYWwuVmFsaWRhdGlvbkVycm9yT2JzZXJ2ZXJGb3JUZXN0aW5nID0KLSAgICAgIFZhbGlk
YXRpb25FcnJvck9ic2VydmVyRm9yVGVzdGluZzsKLSAgaW50ZXJuYWwucmVwb3J0VmFsaWRhdGlv
bkVycm9yID0gcmVwb3J0VmFsaWRhdGlvbkVycm9yOwotICBpbnRlcm5hbC5pc1Rlc3RpbmdNb2Rl
ID0gaXNUZXN0aW5nTW9kZTsKLSAgaW50ZXJuYWwuY2xlYXJUZXN0aW5nTW9kZSA9IGNsZWFyVGVz
dGluZ01vZGU7Ci19KSgpOwotLy8gQ29weXJpZ2h0IDIwMTQgVGhlIENocm9taXVtIEF1dGhvcnMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zl
cm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUg
TElDRU5TRSBmaWxlLgotCi0ndXNlIHN0cmljdCc7Ci0KLShmdW5jdGlvbigpIHsKLSAgdmFyIG1v
am9tSWQgPSAnbW9qby9wdWJsaWMvaW50ZXJmYWNlcy9iaW5kaW5ncy9pbnRlcmZhY2VfY29udHJv
bF9tZXNzYWdlcy5tb2pvbSc7Ci0gIGlmIChtb2pvLmludGVybmFsLmlzTW9qb21Mb2FkZWQobW9q
b21JZCkpIHsKLSAgICBjb25zb2xlLndhcm4oJ1RoZSBmb2xsb3dpbmcgbW9qb20gaXMgbG9hZGVk
IG11bHRpcGxlIHRpbWVzOiAnICsgbW9qb21JZCk7Ci0gICAgcmV0dXJuOwotICB9Ci0gIG1vam8u
aW50ZXJuYWwubWFya01vam9tTG9hZGVkKG1vam9tSWQpOwotICB2YXIgYmluZGluZ3MgPSBtb2pv
OwotICB2YXIgYXNzb2NpYXRlZEJpbmRpbmdzID0gbW9qbzsKLSAgdmFyIGNvZGVjID0gbW9qby5p
bnRlcm5hbDsKLSAgdmFyIHZhbGlkYXRvciA9IG1vam8uaW50ZXJuYWw7Ci0KLSAgdmFyIGV4cG9y
dHMgPSBtb2pvLmludGVybmFsLmV4cG9zZU5hbWVzcGFjZSgnbW9qby5pbnRlcmZhY2VDb250cm9s
Jyk7Ci0KLQotICB2YXIga1J1bk1lc3NhZ2VJZCA9IDB4RkZGRkZGRkY7Ci0gIHZhciBrUnVuT3JD
bG9zZVBpcGVNZXNzYWdlSWQgPSAweEZGRkZGRkZFOwotCi0gIGZ1bmN0aW9uIFJ1bk1lc3NhZ2VQ
YXJhbXModmFsdWVzKSB7Ci0gICAgdGhpcy5pbml0RGVmYXVsdHNfKCk7Ci0gICAgdGhpcy5pbml0
RmllbGRzXyh2YWx1ZXMpOwotICB9Ci0KLQotICBSdW5NZXNzYWdlUGFyYW1zLnByb3RvdHlwZS5p
bml0RGVmYXVsdHNfID0gZnVuY3Rpb24oKSB7Ci0gICAgdGhpcy5pbnB1dCA9IG51bGw7Ci0gIH07
Ci0gIFJ1bk1lc3NhZ2VQYXJhbXMucHJvdG90eXBlLmluaXRGaWVsZHNfID0gZnVuY3Rpb24oZmll
bGRzKSB7Ci0gICAgZm9yKHZhciBmaWVsZCBpbiBmaWVsZHMpIHsKLSAgICAgICAgaWYgKHRoaXMu
aGFzT3duUHJvcGVydHkoZmllbGQpKQotICAgICAgICAgIHRoaXNbZmllbGRdID0gZmllbGRzW2Zp
ZWxkXTsKLSAgICB9Ci0gIH07Ci0KLSAgUnVuTWVzc2FnZVBhcmFtcy52YWxpZGF0ZSA9IGZ1bmN0
aW9uKG1lc3NhZ2VWYWxpZGF0b3IsIG9mZnNldCkgewotICAgIHZhciBlcnI7Ci0gICAgZXJyID0g
bWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdEhlYWRlcihvZmZzZXQsIGNvZGVjLmtTdHJ1
Y3RIZWFkZXJTaXplKTsKLSAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9y
Lk5PTkUpCi0gICAgICAgIHJldHVybiBlcnI7Ci0KLSAgICB2YXIga1ZlcnNpb25TaXplcyA9IFsK
LSAgICAgIHt2ZXJzaW9uOiAwLCBudW1CeXRlczogMjR9Ci0gICAgXTsKLSAgICBlcnIgPSBtZXNz
YWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0VmVyc2lvbihvZmZzZXQsIGtWZXJzaW9uU2l6ZXMp
OwotICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKLSAgICAg
ICAgcmV0dXJuIGVycjsKLQotCi0gICAgLy8gdmFsaWRhdGUgUnVuTWVzc2FnZVBhcmFtcy5pbnB1
dAotICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVVbmlvbihvZmZzZXQgKyBjb2Rl
Yy5rU3RydWN0SGVhZGVyU2l6ZSArIDAsIFJ1bklucHV0LCBmYWxzZSk7Ci0gICAgaWYgKGVyciAh
PT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQotICAgICAgICByZXR1cm4gZXJyOwot
Ci0gICAgcmV0dXJuIHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORTsKLSAgfTsKLQotICBS
dW5NZXNzYWdlUGFyYW1zLmVuY29kZWRTaXplID0gY29kZWMua1N0cnVjdEhlYWRlclNpemUgKyAx
NjsKLQotICBSdW5NZXNzYWdlUGFyYW1zLmRlY29kZSA9IGZ1bmN0aW9uKGRlY29kZXIpIHsKLSAg
ICB2YXIgcGFja2VkOwotICAgIHZhciB2YWwgPSBuZXcgUnVuTWVzc2FnZVBhcmFtcygpOwotICAg
IHZhciBudW1iZXJPZkJ5dGVzID0gZGVjb2Rlci5yZWFkVWludDMyKCk7Ci0gICAgdmFyIHZlcnNp
b24gPSBkZWNvZGVyLnJlYWRVaW50MzIoKTsKLSAgICB2YWwuaW5wdXQgPSBkZWNvZGVyLmRlY29k
ZVN0cnVjdChSdW5JbnB1dCk7Ci0gICAgcmV0dXJuIHZhbDsKLSAgfTsKLQotICBSdW5NZXNzYWdl
UGFyYW1zLmVuY29kZSA9IGZ1bmN0aW9uKGVuY29kZXIsIHZhbCkgewotICAgIHZhciBwYWNrZWQ7
Ci0gICAgZW5jb2Rlci53cml0ZVVpbnQzMihSdW5NZXNzYWdlUGFyYW1zLmVuY29kZWRTaXplKTsK
LSAgICBlbmNvZGVyLndyaXRlVWludDMyKDApOwotICAgIGVuY29kZXIuZW5jb2RlU3RydWN0KFJ1
bklucHV0LCB2YWwuaW5wdXQpOwotICB9OwotICBmdW5jdGlvbiBSdW5SZXNwb25zZU1lc3NhZ2VQ
YXJhbXModmFsdWVzKSB7Ci0gICAgdGhpcy5pbml0RGVmYXVsdHNfKCk7Ci0gICAgdGhpcy5pbml0
RmllbGRzXyh2YWx1ZXMpOwotICB9Ci0KLQotICBSdW5SZXNwb25zZU1lc3NhZ2VQYXJhbXMucHJv
dG90eXBlLmluaXREZWZhdWx0c18gPSBmdW5jdGlvbigpIHsKLSAgICB0aGlzLm91dHB1dCA9IG51
bGw7Ci0gIH07Ci0gIFJ1blJlc3BvbnNlTWVzc2FnZVBhcmFtcy5wcm90b3R5cGUuaW5pdEZpZWxk
c18gPSBmdW5jdGlvbihmaWVsZHMpIHsKLSAgICBmb3IodmFyIGZpZWxkIGluIGZpZWxkcykgewot
ICAgICAgICBpZiAodGhpcy5oYXNPd25Qcm9wZXJ0eShmaWVsZCkpCi0gICAgICAgICAgdGhpc1tm
aWVsZF0gPSBmaWVsZHNbZmllbGRdOwotICAgIH0KLSAgfTsKLQotICBSdW5SZXNwb25zZU1lc3Nh
Z2VQYXJhbXMudmFsaWRhdGUgPSBmdW5jdGlvbihtZXNzYWdlVmFsaWRhdG9yLCBvZmZzZXQpIHsK
LSAgICB2YXIgZXJyOwotICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RI
ZWFkZXIob2Zmc2V0LCBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSk7Ci0gICAgaWYgKGVyciAhPT0g
dmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQotICAgICAgICByZXR1cm4gZXJyOwotCi0g
ICAgdmFyIGtWZXJzaW9uU2l6ZXMgPSBbCi0gICAgICB7dmVyc2lvbjogMCwgbnVtQnl0ZXM6IDI0
fQotICAgIF07Ci0gICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdFZlcnNp
b24ob2Zmc2V0LCBrVmVyc2lvblNpemVzKTsKLSAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFs
aWRhdGlvbkVycm9yLk5PTkUpCi0gICAgICAgIHJldHVybiBlcnI7Ci0KLQotICAgIC8vIHZhbGlk
YXRlIFJ1blJlc3BvbnNlTWVzc2FnZVBhcmFtcy5vdXRwdXQKLSAgICBlcnIgPSBtZXNzYWdlVmFs
aWRhdG9yLnZhbGlkYXRlVW5pb24ob2Zmc2V0ICsgY29kZWMua1N0cnVjdEhlYWRlclNpemUgKyAw
LCBSdW5PdXRwdXQsIHRydWUpOwotICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9u
RXJyb3IuTk9ORSkKLSAgICAgICAgcmV0dXJuIGVycjsKLQotICAgIHJldHVybiB2YWxpZGF0b3Iu
dmFsaWRhdGlvbkVycm9yLk5PTkU7Ci0gIH07Ci0KLSAgUnVuUmVzcG9uc2VNZXNzYWdlUGFyYW1z
LmVuY29kZWRTaXplID0gY29kZWMua1N0cnVjdEhlYWRlclNpemUgKyAxNjsKLQotICBSdW5SZXNw
b25zZU1lc3NhZ2VQYXJhbXMuZGVjb2RlID0gZnVuY3Rpb24oZGVjb2RlcikgewotICAgIHZhciBw
YWNrZWQ7Ci0gICAgdmFyIHZhbCA9IG5ldyBSdW5SZXNwb25zZU1lc3NhZ2VQYXJhbXMoKTsKLSAg
ICB2YXIgbnVtYmVyT2ZCeXRlcyA9IGRlY29kZXIucmVhZFVpbnQzMigpOwotICAgIHZhciB2ZXJz
aW9uID0gZGVjb2Rlci5yZWFkVWludDMyKCk7Ci0gICAgdmFsLm91dHB1dCA9IGRlY29kZXIuZGVj
b2RlU3RydWN0KFJ1bk91dHB1dCk7Ci0gICAgcmV0dXJuIHZhbDsKLSAgfTsKLQotICBSdW5SZXNw
b25zZU1lc3NhZ2VQYXJhbXMuZW5jb2RlID0gZnVuY3Rpb24oZW5jb2RlciwgdmFsKSB7Ci0gICAg
dmFyIHBhY2tlZDsKLSAgICBlbmNvZGVyLndyaXRlVWludDMyKFJ1blJlc3BvbnNlTWVzc2FnZVBh
cmFtcy5lbmNvZGVkU2l6ZSk7Ci0gICAgZW5jb2Rlci53cml0ZVVpbnQzMigwKTsKLSAgICBlbmNv
ZGVyLmVuY29kZVN0cnVjdChSdW5PdXRwdXQsIHZhbC5vdXRwdXQpOwotICB9OwotICBmdW5jdGlv
biBRdWVyeVZlcnNpb24odmFsdWVzKSB7Ci0gICAgdGhpcy5pbml0RGVmYXVsdHNfKCk7Ci0gICAg
dGhpcy5pbml0RmllbGRzXyh2YWx1ZXMpOwotICB9Ci0KLQotICBRdWVyeVZlcnNpb24ucHJvdG90
eXBlLmluaXREZWZhdWx0c18gPSBmdW5jdGlvbigpIHsKLSAgfTsKLSAgUXVlcnlWZXJzaW9uLnBy
b3RvdHlwZS5pbml0RmllbGRzXyA9IGZ1bmN0aW9uKGZpZWxkcykgewotICAgIGZvcih2YXIgZmll
bGQgaW4gZmllbGRzKSB7Ci0gICAgICAgIGlmICh0aGlzLmhhc093blByb3BlcnR5KGZpZWxkKSkK
LSAgICAgICAgICB0aGlzW2ZpZWxkXSA9IGZpZWxkc1tmaWVsZF07Ci0gICAgfQotICB9OwotCi0g
IFF1ZXJ5VmVyc2lvbi52YWxpZGF0ZSA9IGZ1bmN0aW9uKG1lc3NhZ2VWYWxpZGF0b3IsIG9mZnNl
dCkgewotICAgIHZhciBlcnI7Ci0gICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0
cnVjdEhlYWRlcihvZmZzZXQsIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplKTsKLSAgICBpZiAoZXJy
ICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCi0gICAgICAgIHJldHVybiBlcnI7
Ci0KLSAgICB2YXIga1ZlcnNpb25TaXplcyA9IFsKLSAgICAgIHt2ZXJzaW9uOiAwLCBudW1CeXRl
czogOH0KLSAgICBdOwotICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RW
ZXJzaW9uKG9mZnNldCwga1ZlcnNpb25TaXplcyk7Ci0gICAgaWYgKGVyciAhPT0gdmFsaWRhdG9y
LnZhbGlkYXRpb25FcnJvci5OT05FKQotICAgICAgICByZXR1cm4gZXJyOwotCi0gICAgcmV0dXJu
IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORTsKLSAgfTsKLQotICBRdWVyeVZlcnNpb24u
ZW5jb2RlZFNpemUgPSBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDA7Ci0KLSAgUXVlcnlWZXJz
aW9uLmRlY29kZSA9IGZ1bmN0aW9uKGRlY29kZXIpIHsKLSAgICB2YXIgcGFja2VkOwotICAgIHZh
ciB2YWwgPSBuZXcgUXVlcnlWZXJzaW9uKCk7Ci0gICAgdmFyIG51bWJlck9mQnl0ZXMgPSBkZWNv
ZGVyLnJlYWRVaW50MzIoKTsKLSAgICB2YXIgdmVyc2lvbiA9IGRlY29kZXIucmVhZFVpbnQzMigp
OwotICAgIHJldHVybiB2YWw7Ci0gIH07Ci0KLSAgUXVlcnlWZXJzaW9uLmVuY29kZSA9IGZ1bmN0
aW9uKGVuY29kZXIsIHZhbCkgewotICAgIHZhciBwYWNrZWQ7Ci0gICAgZW5jb2Rlci53cml0ZVVp
bnQzMihRdWVyeVZlcnNpb24uZW5jb2RlZFNpemUpOwotICAgIGVuY29kZXIud3JpdGVVaW50MzIo
MCk7Ci0gIH07Ci0gIGZ1bmN0aW9uIFF1ZXJ5VmVyc2lvblJlc3VsdCh2YWx1ZXMpIHsKLSAgICB0
aGlzLmluaXREZWZhdWx0c18oKTsKLSAgICB0aGlzLmluaXRGaWVsZHNfKHZhbHVlcyk7Ci0gIH0K
LQotCi0gIFF1ZXJ5VmVyc2lvblJlc3VsdC5wcm90b3R5cGUuaW5pdERlZmF1bHRzXyA9IGZ1bmN0
aW9uKCkgewotICAgIHRoaXMudmVyc2lvbiA9IDA7Ci0gIH07Ci0gIFF1ZXJ5VmVyc2lvblJlc3Vs
dC5wcm90b3R5cGUuaW5pdEZpZWxkc18gPSBmdW5jdGlvbihmaWVsZHMpIHsKLSAgICBmb3IodmFy
IGZpZWxkIGluIGZpZWxkcykgewotICAgICAgICBpZiAodGhpcy5oYXNPd25Qcm9wZXJ0eShmaWVs
ZCkpCi0gICAgICAgICAgdGhpc1tmaWVsZF0gPSBmaWVsZHNbZmllbGRdOwotICAgIH0KLSAgfTsK
LQotICBRdWVyeVZlcnNpb25SZXN1bHQudmFsaWRhdGUgPSBmdW5jdGlvbihtZXNzYWdlVmFsaWRh
dG9yLCBvZmZzZXQpIHsKLSAgICB2YXIgZXJyOwotICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3Iu
dmFsaWRhdGVTdHJ1Y3RIZWFkZXIob2Zmc2V0LCBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSk7Ci0g
ICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQotICAgICAgICBy
ZXR1cm4gZXJyOwotCi0gICAgdmFyIGtWZXJzaW9uU2l6ZXMgPSBbCi0gICAgICB7dmVyc2lvbjog
MCwgbnVtQnl0ZXM6IDE2fQotICAgIF07Ci0gICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxp
ZGF0ZVN0cnVjdFZlcnNpb24ob2Zmc2V0LCBrVmVyc2lvblNpemVzKTsKLSAgICBpZiAoZXJyICE9
PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCi0gICAgICAgIHJldHVybiBlcnI7Ci0K
LQotICAgIHJldHVybiB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkU7Ci0gIH07Ci0KLSAg
UXVlcnlWZXJzaW9uUmVzdWx0LmVuY29kZWRTaXplID0gY29kZWMua1N0cnVjdEhlYWRlclNpemUg
KyA4OwotCi0gIFF1ZXJ5VmVyc2lvblJlc3VsdC5kZWNvZGUgPSBmdW5jdGlvbihkZWNvZGVyKSB7
Ci0gICAgdmFyIHBhY2tlZDsKLSAgICB2YXIgdmFsID0gbmV3IFF1ZXJ5VmVyc2lvblJlc3VsdCgp
OwotICAgIHZhciBudW1iZXJPZkJ5dGVzID0gZGVjb2Rlci5yZWFkVWludDMyKCk7Ci0gICAgdmFy
IHZlcnNpb24gPSBkZWNvZGVyLnJlYWRVaW50MzIoKTsKLSAgICB2YWwudmVyc2lvbiA9IGRlY29k
ZXIuZGVjb2RlU3RydWN0KGNvZGVjLlVpbnQzMik7Ci0gICAgZGVjb2Rlci5za2lwKDEpOwotICAg
IGRlY29kZXIuc2tpcCgxKTsKLSAgICBkZWNvZGVyLnNraXAoMSk7Ci0gICAgZGVjb2Rlci5za2lw
KDEpOwotICAgIHJldHVybiB2YWw7Ci0gIH07Ci0KLSAgUXVlcnlWZXJzaW9uUmVzdWx0LmVuY29k
ZSA9IGZ1bmN0aW9uKGVuY29kZXIsIHZhbCkgewotICAgIHZhciBwYWNrZWQ7Ci0gICAgZW5jb2Rl
ci53cml0ZVVpbnQzMihRdWVyeVZlcnNpb25SZXN1bHQuZW5jb2RlZFNpemUpOwotICAgIGVuY29k
ZXIud3JpdGVVaW50MzIoMCk7Ci0gICAgZW5jb2Rlci5lbmNvZGVTdHJ1Y3QoY29kZWMuVWludDMy
LCB2YWwudmVyc2lvbik7Ci0gICAgZW5jb2Rlci5za2lwKDEpOwotICAgIGVuY29kZXIuc2tpcCgx
KTsKLSAgICBlbmNvZGVyLnNraXAoMSk7Ci0gICAgZW5jb2Rlci5za2lwKDEpOwotICB9OwotICBm
dW5jdGlvbiBGbHVzaEZvclRlc3RpbmcodmFsdWVzKSB7Ci0gICAgdGhpcy5pbml0RGVmYXVsdHNf
KCk7Ci0gICAgdGhpcy5pbml0RmllbGRzXyh2YWx1ZXMpOwotICB9Ci0KLQotICBGbHVzaEZvclRl
c3RpbmcucHJvdG90eXBlLmluaXREZWZhdWx0c18gPSBmdW5jdGlvbigpIHsKLSAgfTsKLSAgRmx1
c2hGb3JUZXN0aW5nLnByb3RvdHlwZS5pbml0RmllbGRzXyA9IGZ1bmN0aW9uKGZpZWxkcykgewot
ICAgIGZvcih2YXIgZmllbGQgaW4gZmllbGRzKSB7Ci0gICAgICAgIGlmICh0aGlzLmhhc093blBy
b3BlcnR5KGZpZWxkKSkKLSAgICAgICAgICB0aGlzW2ZpZWxkXSA9IGZpZWxkc1tmaWVsZF07Ci0g
ICAgfQotICB9OwotCi0gIEZsdXNoRm9yVGVzdGluZy52YWxpZGF0ZSA9IGZ1bmN0aW9uKG1lc3Nh
Z2VWYWxpZGF0b3IsIG9mZnNldCkgewotICAgIHZhciBlcnI7Ci0gICAgZXJyID0gbWVzc2FnZVZh
bGlkYXRvci52YWxpZGF0ZVN0cnVjdEhlYWRlcihvZmZzZXQsIGNvZGVjLmtTdHJ1Y3RIZWFkZXJT
aXplKTsKLSAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCi0g
ICAgICAgIHJldHVybiBlcnI7Ci0KLSAgICB2YXIga1ZlcnNpb25TaXplcyA9IFsKLSAgICAgIHt2
ZXJzaW9uOiAwLCBudW1CeXRlczogOH0KLSAgICBdOwotICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0
b3IudmFsaWRhdGVTdHJ1Y3RWZXJzaW9uKG9mZnNldCwga1ZlcnNpb25TaXplcyk7Ci0gICAgaWYg
KGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQotICAgICAgICByZXR1cm4g
ZXJyOwotCi0gICAgcmV0dXJuIHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORTsKLSAgfTsK
LQotICBGbHVzaEZvclRlc3RpbmcuZW5jb2RlZFNpemUgPSBjb2RlYy5rU3RydWN0SGVhZGVyU2l6
ZSArIDA7Ci0KLSAgRmx1c2hGb3JUZXN0aW5nLmRlY29kZSA9IGZ1bmN0aW9uKGRlY29kZXIpIHsK
LSAgICB2YXIgcGFja2VkOwotICAgIHZhciB2YWwgPSBuZXcgRmx1c2hGb3JUZXN0aW5nKCk7Ci0g
ICAgdmFyIG51bWJlck9mQnl0ZXMgPSBkZWNvZGVyLnJlYWRVaW50MzIoKTsKLSAgICB2YXIgdmVy
c2lvbiA9IGRlY29kZXIucmVhZFVpbnQzMigpOwotICAgIHJldHVybiB2YWw7Ci0gIH07Ci0KLSAg
Rmx1c2hGb3JUZXN0aW5nLmVuY29kZSA9IGZ1bmN0aW9uKGVuY29kZXIsIHZhbCkgewotICAgIHZh
ciBwYWNrZWQ7Ci0gICAgZW5jb2Rlci53cml0ZVVpbnQzMihGbHVzaEZvclRlc3RpbmcuZW5jb2Rl
ZFNpemUpOwotICAgIGVuY29kZXIud3JpdGVVaW50MzIoMCk7Ci0gIH07Ci0gIGZ1bmN0aW9uIFJ1
bk9yQ2xvc2VQaXBlTWVzc2FnZVBhcmFtcyh2YWx1ZXMpIHsKLSAgICB0aGlzLmluaXREZWZhdWx0
c18oKTsKLSAgICB0aGlzLmluaXRGaWVsZHNfKHZhbHVlcyk7Ci0gIH0KLQotCi0gIFJ1bk9yQ2xv
c2VQaXBlTWVzc2FnZVBhcmFtcy5wcm90b3R5cGUuaW5pdERlZmF1bHRzXyA9IGZ1bmN0aW9uKCkg
ewotICAgIHRoaXMuaW5wdXQgPSBudWxsOwotICB9OwotICBSdW5PckNsb3NlUGlwZU1lc3NhZ2VQ
YXJhbXMucHJvdG90eXBlLmluaXRGaWVsZHNfID0gZnVuY3Rpb24oZmllbGRzKSB7Ci0gICAgZm9y
KHZhciBmaWVsZCBpbiBmaWVsZHMpIHsKLSAgICAgICAgaWYgKHRoaXMuaGFzT3duUHJvcGVydHko
ZmllbGQpKQotICAgICAgICAgIHRoaXNbZmllbGRdID0gZmllbGRzW2ZpZWxkXTsKLSAgICB9Ci0g
IH07Ci0KLSAgUnVuT3JDbG9zZVBpcGVNZXNzYWdlUGFyYW1zLnZhbGlkYXRlID0gZnVuY3Rpb24o
bWVzc2FnZVZhbGlkYXRvciwgb2Zmc2V0KSB7Ci0gICAgdmFyIGVycjsKLSAgICBlcnIgPSBtZXNz
YWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0SGVhZGVyKG9mZnNldCwgY29kZWMua1N0cnVjdEhl
YWRlclNpemUpOwotICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9O
RSkKLSAgICAgICAgcmV0dXJuIGVycjsKLQotICAgIHZhciBrVmVyc2lvblNpemVzID0gWwotICAg
ICAge3ZlcnNpb246IDAsIG51bUJ5dGVzOiAyNH0KLSAgICBdOwotICAgIGVyciA9IG1lc3NhZ2VW
YWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RWZXJzaW9uKG9mZnNldCwga1ZlcnNpb25TaXplcyk7Ci0g
ICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQotICAgICAgICBy
ZXR1cm4gZXJyOwotCi0KLSAgICAvLyB2YWxpZGF0ZSBSdW5PckNsb3NlUGlwZU1lc3NhZ2VQYXJh
bXMuaW5wdXQKLSAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlVW5pb24ob2Zmc2V0
ICsgY29kZWMua1N0cnVjdEhlYWRlclNpemUgKyAwLCBSdW5PckNsb3NlUGlwZUlucHV0LCBmYWxz
ZSk7Ci0gICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQotICAg
ICAgICByZXR1cm4gZXJyOwotCi0gICAgcmV0dXJuIHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3Iu
Tk9ORTsKLSAgfTsKLQotICBSdW5PckNsb3NlUGlwZU1lc3NhZ2VQYXJhbXMuZW5jb2RlZFNpemUg
PSBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDE2OwotCi0gIFJ1bk9yQ2xvc2VQaXBlTWVzc2Fn
ZVBhcmFtcy5kZWNvZGUgPSBmdW5jdGlvbihkZWNvZGVyKSB7Ci0gICAgdmFyIHBhY2tlZDsKLSAg
ICB2YXIgdmFsID0gbmV3IFJ1bk9yQ2xvc2VQaXBlTWVzc2FnZVBhcmFtcygpOwotICAgIHZhciBu
dW1iZXJPZkJ5dGVzID0gZGVjb2Rlci5yZWFkVWludDMyKCk7Ci0gICAgdmFyIHZlcnNpb24gPSBk
ZWNvZGVyLnJlYWRVaW50MzIoKTsKLSAgICB2YWwuaW5wdXQgPSBkZWNvZGVyLmRlY29kZVN0cnVj
dChSdW5PckNsb3NlUGlwZUlucHV0KTsKLSAgICByZXR1cm4gdmFsOwotICB9OwotCi0gIFJ1bk9y
Q2xvc2VQaXBlTWVzc2FnZVBhcmFtcy5lbmNvZGUgPSBmdW5jdGlvbihlbmNvZGVyLCB2YWwpIHsK
LSAgICB2YXIgcGFja2VkOwotICAgIGVuY29kZXIud3JpdGVVaW50MzIoUnVuT3JDbG9zZVBpcGVN
ZXNzYWdlUGFyYW1zLmVuY29kZWRTaXplKTsKLSAgICBlbmNvZGVyLndyaXRlVWludDMyKDApOwot
ICAgIGVuY29kZXIuZW5jb2RlU3RydWN0KFJ1bk9yQ2xvc2VQaXBlSW5wdXQsIHZhbC5pbnB1dCk7
Ci0gIH07Ci0gIGZ1bmN0aW9uIFJlcXVpcmVWZXJzaW9uKHZhbHVlcykgewotICAgIHRoaXMuaW5p
dERlZmF1bHRzXygpOwotICAgIHRoaXMuaW5pdEZpZWxkc18odmFsdWVzKTsKLSAgfQotCi0KLSAg
UmVxdWlyZVZlcnNpb24ucHJvdG90eXBlLmluaXREZWZhdWx0c18gPSBmdW5jdGlvbigpIHsKLSAg
ICB0aGlzLnZlcnNpb24gPSAwOwotICB9OwotICBSZXF1aXJlVmVyc2lvbi5wcm90b3R5cGUuaW5p
dEZpZWxkc18gPSBmdW5jdGlvbihmaWVsZHMpIHsKLSAgICBmb3IodmFyIGZpZWxkIGluIGZpZWxk
cykgewotICAgICAgICBpZiAodGhpcy5oYXNPd25Qcm9wZXJ0eShmaWVsZCkpCi0gICAgICAgICAg
dGhpc1tmaWVsZF0gPSBmaWVsZHNbZmllbGRdOwotICAgIH0KLSAgfTsKLQotICBSZXF1aXJlVmVy
c2lvbi52YWxpZGF0ZSA9IGZ1bmN0aW9uKG1lc3NhZ2VWYWxpZGF0b3IsIG9mZnNldCkgewotICAg
IHZhciBlcnI7Ci0gICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdEhlYWRl
cihvZmZzZXQsIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplKTsKLSAgICBpZiAoZXJyICE9PSB2YWxp
ZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCi0gICAgICAgIHJldHVybiBlcnI7Ci0KLSAgICB2
YXIga1ZlcnNpb25TaXplcyA9IFsKLSAgICAgIHt2ZXJzaW9uOiAwLCBudW1CeXRlczogMTZ9Ci0g
ICAgXTsKLSAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0VmVyc2lvbihv
ZmZzZXQsIGtWZXJzaW9uU2l6ZXMpOwotICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0
aW9uRXJyb3IuTk9ORSkKLSAgICAgICAgcmV0dXJuIGVycjsKLQotCi0gICAgcmV0dXJuIHZhbGlk
YXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORTsKLSAgfTsKLQotICBSZXF1aXJlVmVyc2lvbi5lbmNv
ZGVkU2l6ZSA9IGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgODsKLQotICBSZXF1aXJlVmVyc2lv
bi5kZWNvZGUgPSBmdW5jdGlvbihkZWNvZGVyKSB7Ci0gICAgdmFyIHBhY2tlZDsKLSAgICB2YXIg
dmFsID0gbmV3IFJlcXVpcmVWZXJzaW9uKCk7Ci0gICAgdmFyIG51bWJlck9mQnl0ZXMgPSBkZWNv
ZGVyLnJlYWRVaW50MzIoKTsKLSAgICB2YXIgdmVyc2lvbiA9IGRlY29kZXIucmVhZFVpbnQzMigp
OwotICAgIHZhbC52ZXJzaW9uID0gZGVjb2Rlci5kZWNvZGVTdHJ1Y3QoY29kZWMuVWludDMyKTsK
LSAgICBkZWNvZGVyLnNraXAoMSk7Ci0gICAgZGVjb2Rlci5za2lwKDEpOwotICAgIGRlY29kZXIu
c2tpcCgxKTsKLSAgICBkZWNvZGVyLnNraXAoMSk7Ci0gICAgcmV0dXJuIHZhbDsKLSAgfTsKLQot
ICBSZXF1aXJlVmVyc2lvbi5lbmNvZGUgPSBmdW5jdGlvbihlbmNvZGVyLCB2YWwpIHsKLSAgICB2
YXIgcGFja2VkOwotICAgIGVuY29kZXIud3JpdGVVaW50MzIoUmVxdWlyZVZlcnNpb24uZW5jb2Rl
ZFNpemUpOwotICAgIGVuY29kZXIud3JpdGVVaW50MzIoMCk7Ci0gICAgZW5jb2Rlci5lbmNvZGVT
dHJ1Y3QoY29kZWMuVWludDMyLCB2YWwudmVyc2lvbik7Ci0gICAgZW5jb2Rlci5za2lwKDEpOwot
ICAgIGVuY29kZXIuc2tpcCgxKTsKLSAgICBlbmNvZGVyLnNraXAoMSk7Ci0gICAgZW5jb2Rlci5z
a2lwKDEpOwotICB9OwotCi0gIGZ1bmN0aW9uIFJ1bklucHV0KHZhbHVlKSB7Ci0gICAgdGhpcy5p
bml0RGVmYXVsdF8oKTsKLSAgICB0aGlzLmluaXRWYWx1ZV8odmFsdWUpOwotICB9Ci0KLQotICBS
dW5JbnB1dC5UYWdzID0gewotICAgIHF1ZXJ5VmVyc2lvbjogMCwKLSAgICBmbHVzaEZvclRlc3Rp
bmc6IDEsCi0gIH07Ci0KLSAgUnVuSW5wdXQucHJvdG90eXBlLmluaXREZWZhdWx0XyA9IGZ1bmN0
aW9uKCkgewotICAgIHRoaXMuJGRhdGEgPSBudWxsOwotICAgIHRoaXMuJHRhZyA9IHVuZGVmaW5l
ZDsKLSAgfQotCi0gIFJ1bklucHV0LnByb3RvdHlwZS5pbml0VmFsdWVfID0gZnVuY3Rpb24odmFs
dWUpIHsKLSAgICBpZiAodmFsdWUgPT0gdW5kZWZpbmVkKSB7Ci0gICAgICByZXR1cm47Ci0gICAg
fQotCi0gICAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyh2YWx1ZSk7Ci0gICAgaWYgKGtleXMubGVu
Z3RoID09IDApIHsKLSAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAoa2V5cy5sZW5ndGgg
PiAxKSB7Ci0gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCJZb3UgbWF5IHNldCBvbmx5IG9uZSBt
ZW1iZXIgb24gYSB1bmlvbi4iKTsKLSAgICB9Ci0KLSAgICB2YXIgZmllbGRzID0gWwotICAgICAg
ICAicXVlcnlWZXJzaW9uIiwKLSAgICAgICAgImZsdXNoRm9yVGVzdGluZyIsCi0gICAgXTsKLQot
ICAgIGlmIChmaWVsZHMuaW5kZXhPZihrZXlzWzBdKSA8IDApIHsKLSAgICAgIHRocm93IG5ldyBS
ZWZlcmVuY2VFcnJvcihrZXlzWzBdICsgIiBpcyBub3QgYSBSdW5JbnB1dCBtZW1iZXIuIik7Ci0K
LSAgICB9Ci0KLSAgICB0aGlzW2tleXNbMF1dID0gdmFsdWVba2V5c1swXV07Ci0gIH0KLSAgT2Jq
ZWN0LmRlZmluZVByb3BlcnR5KFJ1bklucHV0LnByb3RvdHlwZSwgInF1ZXJ5VmVyc2lvbiIsIHsK
LSAgICBnZXQ6IGZ1bmN0aW9uKCkgewotICAgICAgaWYgKHRoaXMuJHRhZyAhPSBSdW5JbnB1dC5U
YWdzLnF1ZXJ5VmVyc2lvbikgewotICAgICAgICB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoCi0g
ICAgICAgICAgICAiUnVuSW5wdXQucXVlcnlWZXJzaW9uIGlzIG5vdCBjdXJyZW50bHkgc2V0LiIp
OwotICAgICAgfQotICAgICAgcmV0dXJuIHRoaXMuJGRhdGE7Ci0gICAgfSwKLQotICAgIHNldDog
ZnVuY3Rpb24odmFsdWUpIHsKLSAgICAgIHRoaXMuJHRhZyA9IFJ1bklucHV0LlRhZ3MucXVlcnlW
ZXJzaW9uOwotICAgICAgdGhpcy4kZGF0YSA9IHZhbHVlOwotICAgIH0KLSAgfSk7Ci0gIE9iamVj
dC5kZWZpbmVQcm9wZXJ0eShSdW5JbnB1dC5wcm90b3R5cGUsICJmbHVzaEZvclRlc3RpbmciLCB7
Ci0gICAgZ2V0OiBmdW5jdGlvbigpIHsKLSAgICAgIGlmICh0aGlzLiR0YWcgIT0gUnVuSW5wdXQu
VGFncy5mbHVzaEZvclRlc3RpbmcpIHsKLSAgICAgICAgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9y
KAotICAgICAgICAgICAgIlJ1bklucHV0LmZsdXNoRm9yVGVzdGluZyBpcyBub3QgY3VycmVudGx5
IHNldC4iKTsKLSAgICAgIH0KLSAgICAgIHJldHVybiB0aGlzLiRkYXRhOwotICAgIH0sCi0KLSAg
ICBzZXQ6IGZ1bmN0aW9uKHZhbHVlKSB7Ci0gICAgICB0aGlzLiR0YWcgPSBSdW5JbnB1dC5UYWdz
LmZsdXNoRm9yVGVzdGluZzsKLSAgICAgIHRoaXMuJGRhdGEgPSB2YWx1ZTsKLSAgICB9Ci0gIH0p
OwotCi0KLSAgICBSdW5JbnB1dC5lbmNvZGUgPSBmdW5jdGlvbihlbmNvZGVyLCB2YWwpIHsKLSAg
ICAgIGlmICh2YWwgPT0gbnVsbCkgewotICAgICAgICBlbmNvZGVyLndyaXRlVWludDY0KDApOwot
ICAgICAgICBlbmNvZGVyLndyaXRlVWludDY0KDApOwotICAgICAgICByZXR1cm47Ci0gICAgICB9
Ci0gICAgICBpZiAodmFsLiR0YWcgPT0gdW5kZWZpbmVkKSB7Ci0gICAgICAgIHRocm93IG5ldyBU
eXBlRXJyb3IoIkNhbm5vdCBlbmNvZGUgdW5pb25zIHdpdGggYW4gdW5rbm93biBtZW1iZXIgc2V0
LiIpOwotICAgICAgfQotCi0gICAgICBlbmNvZGVyLndyaXRlVWludDMyKDE2KTsKLSAgICAgIGVu
Y29kZXIud3JpdGVVaW50MzIodmFsLiR0YWcpOwotICAgICAgc3dpdGNoICh2YWwuJHRhZykgewot
ICAgICAgICBjYXNlIFJ1bklucHV0LlRhZ3MucXVlcnlWZXJzaW9uOgotICAgICAgICAgIGVuY29k
ZXIuZW5jb2RlU3RydWN0UG9pbnRlcihRdWVyeVZlcnNpb24sIHZhbC5xdWVyeVZlcnNpb24pOwot
ICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFJ1bklucHV0LlRhZ3MuZmx1c2hGb3JUZXN0
aW5nOgotICAgICAgICAgIGVuY29kZXIuZW5jb2RlU3RydWN0UG9pbnRlcihGbHVzaEZvclRlc3Rp
bmcsIHZhbC5mbHVzaEZvclRlc3RpbmcpOwotICAgICAgICAgIGJyZWFrOwotICAgICAgfQotICAg
ICAgZW5jb2Rlci5hbGlnbigpOwotICAgIH07Ci0KLQotICAgIFJ1bklucHV0LmRlY29kZSA9IGZ1
bmN0aW9uKGRlY29kZXIpIHsKLSAgICAgIHZhciBzaXplID0gZGVjb2Rlci5yZWFkVWludDMyKCk7
Ci0gICAgICBpZiAoc2l6ZSA9PSAwKSB7Ci0gICAgICAgIGRlY29kZXIucmVhZFVpbnQzMigpOwot
ICAgICAgICBkZWNvZGVyLnJlYWRVaW50NjQoKTsKLSAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAg
ICB9Ci0KLSAgICAgIHZhciByZXN1bHQgPSBuZXcgUnVuSW5wdXQoKTsKLSAgICAgIHZhciB0YWcg
PSBkZWNvZGVyLnJlYWRVaW50MzIoKTsKLSAgICAgIHN3aXRjaCAodGFnKSB7Ci0gICAgICAgIGNh
c2UgUnVuSW5wdXQuVGFncy5xdWVyeVZlcnNpb246Ci0gICAgICAgICAgcmVzdWx0LnF1ZXJ5VmVy
c2lvbiA9IGRlY29kZXIuZGVjb2RlU3RydWN0UG9pbnRlcihRdWVyeVZlcnNpb24pOwotICAgICAg
ICAgIGJyZWFrOwotICAgICAgICBjYXNlIFJ1bklucHV0LlRhZ3MuZmx1c2hGb3JUZXN0aW5nOgot
ICAgICAgICAgIHJlc3VsdC5mbHVzaEZvclRlc3RpbmcgPSBkZWNvZGVyLmRlY29kZVN0cnVjdFBv
aW50ZXIoRmx1c2hGb3JUZXN0aW5nKTsKLSAgICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICAg
IGRlY29kZXIuYWxpZ24oKTsKLQotICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9OwotCi0KLSAg
ICBSdW5JbnB1dC52YWxpZGF0ZSA9IGZ1bmN0aW9uKG1lc3NhZ2VWYWxpZGF0b3IsIG9mZnNldCkg
ewotICAgICAgdmFyIHNpemUgPSBtZXNzYWdlVmFsaWRhdG9yLmRlY29kZVVuaW9uU2l6ZShvZmZz
ZXQpOwotICAgICAgaWYgKHNpemUgIT0gMTYpIHsKLSAgICAgICAgcmV0dXJuIHZhbGlkYXRvci52
YWxpZGF0aW9uRXJyb3IuSU5WQUxJRF9VTklPTl9TSVpFOwotICAgICAgfQotCi0gICAgICB2YXIg
dGFnID0gbWVzc2FnZVZhbGlkYXRvci5kZWNvZGVVbmlvblRhZyhvZmZzZXQpOwotICAgICAgdmFy
IGRhdGFfb2Zmc2V0ID0gb2Zmc2V0ICsgODsKLSAgICAgIHZhciBlcnI7Ci0gICAgICBzd2l0Y2gg
KHRhZykgewotICAgICAgICBjYXNlIFJ1bklucHV0LlRhZ3MucXVlcnlWZXJzaW9uOgotICAgICAg
ICAgIAotCi0gICAgLy8gdmFsaWRhdGUgUnVuSW5wdXQucXVlcnlWZXJzaW9uCi0gICAgZXJyID0g
bWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdFBvaW50ZXIoZGF0YV9vZmZzZXQsIFF1ZXJ5
VmVyc2lvbiwgZmFsc2UpOwotICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJy
b3IuTk9ORSkKLSAgICAgICAgcmV0dXJuIGVycjsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAg
Y2FzZSBSdW5JbnB1dC5UYWdzLmZsdXNoRm9yVGVzdGluZzoKLSAgICAgICAgICAKLQotICAgIC8v
IHZhbGlkYXRlIFJ1bklucHV0LmZsdXNoRm9yVGVzdGluZwotICAgIGVyciA9IG1lc3NhZ2VWYWxp
ZGF0b3IudmFsaWRhdGVTdHJ1Y3RQb2ludGVyKGRhdGFfb2Zmc2V0LCBGbHVzaEZvclRlc3Rpbmcs
IGZhbHNlKTsKLSAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUp
Ci0gICAgICAgIHJldHVybiBlcnI7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0KLSAgICAg
IHJldHVybiB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkU7Ci0gICAgfTsKLQotICBSdW5J
bnB1dC5lbmNvZGVkU2l6ZSA9IDE2OwotCi0gIGZ1bmN0aW9uIFJ1bk91dHB1dCh2YWx1ZSkgewot
ICAgIHRoaXMuaW5pdERlZmF1bHRfKCk7Ci0gICAgdGhpcy5pbml0VmFsdWVfKHZhbHVlKTsKLSAg
fQotCi0KLSAgUnVuT3V0cHV0LlRhZ3MgPSB7Ci0gICAgcXVlcnlWZXJzaW9uUmVzdWx0OiAwLAot
ICB9OwotCi0gIFJ1bk91dHB1dC5wcm90b3R5cGUuaW5pdERlZmF1bHRfID0gZnVuY3Rpb24oKSB7
Ci0gICAgdGhpcy4kZGF0YSA9IG51bGw7Ci0gICAgdGhpcy4kdGFnID0gdW5kZWZpbmVkOwotICB9
Ci0KLSAgUnVuT3V0cHV0LnByb3RvdHlwZS5pbml0VmFsdWVfID0gZnVuY3Rpb24odmFsdWUpIHsK
LSAgICBpZiAodmFsdWUgPT0gdW5kZWZpbmVkKSB7Ci0gICAgICByZXR1cm47Ci0gICAgfQotCi0g
ICAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyh2YWx1ZSk7Ci0gICAgaWYgKGtleXMubGVuZ3RoID09
IDApIHsKLSAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAoa2V5cy5sZW5ndGggPiAxKSB7
Ci0gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCJZb3UgbWF5IHNldCBvbmx5IG9uZSBtZW1iZXIg
b24gYSB1bmlvbi4iKTsKLSAgICB9Ci0KLSAgICB2YXIgZmllbGRzID0gWwotICAgICAgICAicXVl
cnlWZXJzaW9uUmVzdWx0IiwKLSAgICBdOwotCi0gICAgaWYgKGZpZWxkcy5pbmRleE9mKGtleXNb
MF0pIDwgMCkgewotICAgICAgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKGtleXNbMF0gKyAiIGlz
IG5vdCBhIFJ1bk91dHB1dCBtZW1iZXIuIik7Ci0KLSAgICB9Ci0KLSAgICB0aGlzW2tleXNbMF1d
ID0gdmFsdWVba2V5c1swXV07Ci0gIH0KLSAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFJ1bk91dHB1
dC5wcm90b3R5cGUsICJxdWVyeVZlcnNpb25SZXN1bHQiLCB7Ci0gICAgZ2V0OiBmdW5jdGlvbigp
IHsKLSAgICAgIGlmICh0aGlzLiR0YWcgIT0gUnVuT3V0cHV0LlRhZ3MucXVlcnlWZXJzaW9uUmVz
dWx0KSB7Ci0gICAgICAgIHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcigKLSAgICAgICAgICAgICJS
dW5PdXRwdXQucXVlcnlWZXJzaW9uUmVzdWx0IGlzIG5vdCBjdXJyZW50bHkgc2V0LiIpOwotICAg
ICAgfQotICAgICAgcmV0dXJuIHRoaXMuJGRhdGE7Ci0gICAgfSwKLQotICAgIHNldDogZnVuY3Rp
b24odmFsdWUpIHsKLSAgICAgIHRoaXMuJHRhZyA9IFJ1bk91dHB1dC5UYWdzLnF1ZXJ5VmVyc2lv
blJlc3VsdDsKLSAgICAgIHRoaXMuJGRhdGEgPSB2YWx1ZTsKLSAgICB9Ci0gIH0pOwotCi0KLSAg
ICBSdW5PdXRwdXQuZW5jb2RlID0gZnVuY3Rpb24oZW5jb2RlciwgdmFsKSB7Ci0gICAgICBpZiAo
dmFsID09IG51bGwpIHsKLSAgICAgICAgZW5jb2Rlci53cml0ZVVpbnQ2NCgwKTsKLSAgICAgICAg
ZW5jb2Rlci53cml0ZVVpbnQ2NCgwKTsKLSAgICAgICAgcmV0dXJuOwotICAgICAgfQotICAgICAg
aWYgKHZhbC4kdGFnID09IHVuZGVmaW5lZCkgewotICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9y
KCJDYW5ub3QgZW5jb2RlIHVuaW9ucyB3aXRoIGFuIHVua25vd24gbWVtYmVyIHNldC4iKTsKLSAg
ICAgIH0KLQotICAgICAgZW5jb2Rlci53cml0ZVVpbnQzMigxNik7Ci0gICAgICBlbmNvZGVyLndy
aXRlVWludDMyKHZhbC4kdGFnKTsKLSAgICAgIHN3aXRjaCAodmFsLiR0YWcpIHsKLSAgICAgICAg
Y2FzZSBSdW5PdXRwdXQuVGFncy5xdWVyeVZlcnNpb25SZXN1bHQ6Ci0gICAgICAgICAgZW5jb2Rl
ci5lbmNvZGVTdHJ1Y3RQb2ludGVyKFF1ZXJ5VmVyc2lvblJlc3VsdCwgdmFsLnF1ZXJ5VmVyc2lv
blJlc3VsdCk7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgICBlbmNvZGVyLmFsaWdu
KCk7Ci0gICAgfTsKLQotCi0gICAgUnVuT3V0cHV0LmRlY29kZSA9IGZ1bmN0aW9uKGRlY29kZXIp
IHsKLSAgICAgIHZhciBzaXplID0gZGVjb2Rlci5yZWFkVWludDMyKCk7Ci0gICAgICBpZiAoc2l6
ZSA9PSAwKSB7Ci0gICAgICAgIGRlY29kZXIucmVhZFVpbnQzMigpOwotICAgICAgICBkZWNvZGVy
LnJlYWRVaW50NjQoKTsKLSAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICB9Ci0KLSAgICAgIHZh
ciByZXN1bHQgPSBuZXcgUnVuT3V0cHV0KCk7Ci0gICAgICB2YXIgdGFnID0gZGVjb2Rlci5yZWFk
VWludDMyKCk7Ci0gICAgICBzd2l0Y2ggKHRhZykgewotICAgICAgICBjYXNlIFJ1bk91dHB1dC5U
YWdzLnF1ZXJ5VmVyc2lvblJlc3VsdDoKLSAgICAgICAgICByZXN1bHQucXVlcnlWZXJzaW9uUmVz
dWx0ID0gZGVjb2Rlci5kZWNvZGVTdHJ1Y3RQb2ludGVyKFF1ZXJ5VmVyc2lvblJlc3VsdCk7Ci0g
ICAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgICBkZWNvZGVyLmFsaWduKCk7Ci0KLSAgICAg
IHJldHVybiByZXN1bHQ7Ci0gICAgfTsKLQotCi0gICAgUnVuT3V0cHV0LnZhbGlkYXRlID0gZnVu
Y3Rpb24obWVzc2FnZVZhbGlkYXRvciwgb2Zmc2V0KSB7Ci0gICAgICB2YXIgc2l6ZSA9IG1lc3Nh
Z2VWYWxpZGF0b3IuZGVjb2RlVW5pb25TaXplKG9mZnNldCk7Ci0gICAgICBpZiAoc2l6ZSAhPSAx
NikgewotICAgICAgICByZXR1cm4gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5JTlZBTElEX1VO
SU9OX1NJWkU7Ci0gICAgICB9Ci0KLSAgICAgIHZhciB0YWcgPSBtZXNzYWdlVmFsaWRhdG9yLmRl
Y29kZVVuaW9uVGFnKG9mZnNldCk7Ci0gICAgICB2YXIgZGF0YV9vZmZzZXQgPSBvZmZzZXQgKyA4
OwotICAgICAgdmFyIGVycjsKLSAgICAgIHN3aXRjaCAodGFnKSB7Ci0gICAgICAgIGNhc2UgUnVu
T3V0cHV0LlRhZ3MucXVlcnlWZXJzaW9uUmVzdWx0OgotICAgICAgICAgIAotCi0gICAgLy8gdmFs
aWRhdGUgUnVuT3V0cHV0LnF1ZXJ5VmVyc2lvblJlc3VsdAotICAgIGVyciA9IG1lc3NhZ2VWYWxp
ZGF0b3IudmFsaWRhdGVTdHJ1Y3RQb2ludGVyKGRhdGFfb2Zmc2V0LCBRdWVyeVZlcnNpb25SZXN1
bHQsIGZhbHNlKTsKLSAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5P
TkUpCi0gICAgICAgIHJldHVybiBlcnI7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0KLSAg
ICAgIHJldHVybiB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkU7Ci0gICAgfTsKLQotICBS
dW5PdXRwdXQuZW5jb2RlZFNpemUgPSAxNjsKLQotICBmdW5jdGlvbiBSdW5PckNsb3NlUGlwZUlu
cHV0KHZhbHVlKSB7Ci0gICAgdGhpcy5pbml0RGVmYXVsdF8oKTsKLSAgICB0aGlzLmluaXRWYWx1
ZV8odmFsdWUpOwotICB9Ci0KLQotICBSdW5PckNsb3NlUGlwZUlucHV0LlRhZ3MgPSB7Ci0gICAg
cmVxdWlyZVZlcnNpb246IDAsCi0gIH07Ci0KLSAgUnVuT3JDbG9zZVBpcGVJbnB1dC5wcm90b3R5
cGUuaW5pdERlZmF1bHRfID0gZnVuY3Rpb24oKSB7Ci0gICAgdGhpcy4kZGF0YSA9IG51bGw7Ci0g
ICAgdGhpcy4kdGFnID0gdW5kZWZpbmVkOwotICB9Ci0KLSAgUnVuT3JDbG9zZVBpcGVJbnB1dC5w
cm90b3R5cGUuaW5pdFZhbHVlXyA9IGZ1bmN0aW9uKHZhbHVlKSB7Ci0gICAgaWYgKHZhbHVlID09
IHVuZGVmaW5lZCkgewotICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIHZhciBrZXlzID0gT2Jq
ZWN0LmtleXModmFsdWUpOwotICAgIGlmIChrZXlzLmxlbmd0aCA9PSAwKSB7Ci0gICAgICByZXR1
cm47Ci0gICAgfQotCi0gICAgaWYgKGtleXMubGVuZ3RoID4gMSkgewotICAgICAgdGhyb3cgbmV3
IFR5cGVFcnJvcigiWW91IG1heSBzZXQgb25seSBvbmUgbWVtYmVyIG9uIGEgdW5pb24uIik7Ci0g
ICAgfQotCi0gICAgdmFyIGZpZWxkcyA9IFsKLSAgICAgICAgInJlcXVpcmVWZXJzaW9uIiwKLSAg
ICBdOwotCi0gICAgaWYgKGZpZWxkcy5pbmRleE9mKGtleXNbMF0pIDwgMCkgewotICAgICAgdGhy
b3cgbmV3IFJlZmVyZW5jZUVycm9yKGtleXNbMF0gKyAiIGlzIG5vdCBhIFJ1bk9yQ2xvc2VQaXBl
SW5wdXQgbWVtYmVyLiIpOwotCi0gICAgfQotCi0gICAgdGhpc1trZXlzWzBdXSA9IHZhbHVlW2tl
eXNbMF1dOwotICB9Ci0gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShSdW5PckNsb3NlUGlwZUlucHV0
LnByb3RvdHlwZSwgInJlcXVpcmVWZXJzaW9uIiwgewotICAgIGdldDogZnVuY3Rpb24oKSB7Ci0g
ICAgICBpZiAodGhpcy4kdGFnICE9IFJ1bk9yQ2xvc2VQaXBlSW5wdXQuVGFncy5yZXF1aXJlVmVy
c2lvbikgewotICAgICAgICB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoCi0gICAgICAgICAgICAi
UnVuT3JDbG9zZVBpcGVJbnB1dC5yZXF1aXJlVmVyc2lvbiBpcyBub3QgY3VycmVudGx5IHNldC4i
KTsKLSAgICAgIH0KLSAgICAgIHJldHVybiB0aGlzLiRkYXRhOwotICAgIH0sCi0KLSAgICBzZXQ6
IGZ1bmN0aW9uKHZhbHVlKSB7Ci0gICAgICB0aGlzLiR0YWcgPSBSdW5PckNsb3NlUGlwZUlucHV0
LlRhZ3MucmVxdWlyZVZlcnNpb247Ci0gICAgICB0aGlzLiRkYXRhID0gdmFsdWU7Ci0gICAgfQot
ICB9KTsKLQotCi0gICAgUnVuT3JDbG9zZVBpcGVJbnB1dC5lbmNvZGUgPSBmdW5jdGlvbihlbmNv
ZGVyLCB2YWwpIHsKLSAgICAgIGlmICh2YWwgPT0gbnVsbCkgewotICAgICAgICBlbmNvZGVyLndy
aXRlVWludDY0KDApOwotICAgICAgICBlbmNvZGVyLndyaXRlVWludDY0KDApOwotICAgICAgICBy
ZXR1cm47Ci0gICAgICB9Ci0gICAgICBpZiAodmFsLiR0YWcgPT0gdW5kZWZpbmVkKSB7Ci0gICAg
ICAgIHRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBlbmNvZGUgdW5pb25zIHdpdGggYW4gdW5r
bm93biBtZW1iZXIgc2V0LiIpOwotICAgICAgfQotCi0gICAgICBlbmNvZGVyLndyaXRlVWludDMy
KDE2KTsKLSAgICAgIGVuY29kZXIud3JpdGVVaW50MzIodmFsLiR0YWcpOwotICAgICAgc3dpdGNo
ICh2YWwuJHRhZykgewotICAgICAgICBjYXNlIFJ1bk9yQ2xvc2VQaXBlSW5wdXQuVGFncy5yZXF1
aXJlVmVyc2lvbjoKLSAgICAgICAgICBlbmNvZGVyLmVuY29kZVN0cnVjdFBvaW50ZXIoUmVxdWly
ZVZlcnNpb24sIHZhbC5yZXF1aXJlVmVyc2lvbik7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICB9
Ci0gICAgICBlbmNvZGVyLmFsaWduKCk7Ci0gICAgfTsKLQotCi0gICAgUnVuT3JDbG9zZVBpcGVJ
bnB1dC5kZWNvZGUgPSBmdW5jdGlvbihkZWNvZGVyKSB7Ci0gICAgICB2YXIgc2l6ZSA9IGRlY29k
ZXIucmVhZFVpbnQzMigpOwotICAgICAgaWYgKHNpemUgPT0gMCkgewotICAgICAgICBkZWNvZGVy
LnJlYWRVaW50MzIoKTsKLSAgICAgICAgZGVjb2Rlci5yZWFkVWludDY0KCk7Ci0gICAgICAgIHJl
dHVybiBudWxsOwotICAgICAgfQotCi0gICAgICB2YXIgcmVzdWx0ID0gbmV3IFJ1bk9yQ2xvc2VQ
aXBlSW5wdXQoKTsKLSAgICAgIHZhciB0YWcgPSBkZWNvZGVyLnJlYWRVaW50MzIoKTsKLSAgICAg
IHN3aXRjaCAodGFnKSB7Ci0gICAgICAgIGNhc2UgUnVuT3JDbG9zZVBpcGVJbnB1dC5UYWdzLnJl
cXVpcmVWZXJzaW9uOgotICAgICAgICAgIHJlc3VsdC5yZXF1aXJlVmVyc2lvbiA9IGRlY29kZXIu
ZGVjb2RlU3RydWN0UG9pbnRlcihSZXF1aXJlVmVyc2lvbik7Ci0gICAgICAgICAgYnJlYWs7Ci0g
ICAgICB9Ci0gICAgICBkZWNvZGVyLmFsaWduKCk7Ci0KLSAgICAgIHJldHVybiByZXN1bHQ7Ci0g
ICAgfTsKLQotCi0gICAgUnVuT3JDbG9zZVBpcGVJbnB1dC52YWxpZGF0ZSA9IGZ1bmN0aW9uKG1l
c3NhZ2VWYWxpZGF0b3IsIG9mZnNldCkgewotICAgICAgdmFyIHNpemUgPSBtZXNzYWdlVmFsaWRh
dG9yLmRlY29kZVVuaW9uU2l6ZShvZmZzZXQpOwotICAgICAgaWYgKHNpemUgIT0gMTYpIHsKLSAg
ICAgICAgcmV0dXJuIHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuSU5WQUxJRF9VTklPTl9TSVpF
OwotICAgICAgfQotCi0gICAgICB2YXIgdGFnID0gbWVzc2FnZVZhbGlkYXRvci5kZWNvZGVVbmlv
blRhZyhvZmZzZXQpOwotICAgICAgdmFyIGRhdGFfb2Zmc2V0ID0gb2Zmc2V0ICsgODsKLSAgICAg
IHZhciBlcnI7Ci0gICAgICBzd2l0Y2ggKHRhZykgewotICAgICAgICBjYXNlIFJ1bk9yQ2xvc2VQ
aXBlSW5wdXQuVGFncy5yZXF1aXJlVmVyc2lvbjoKLSAgICAgICAgICAKLQotICAgIC8vIHZhbGlk
YXRlIFJ1bk9yQ2xvc2VQaXBlSW5wdXQucmVxdWlyZVZlcnNpb24KLSAgICBlcnIgPSBtZXNzYWdl
VmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0UG9pbnRlcihkYXRhX29mZnNldCwgUmVxdWlyZVZlcnNp
b24sIGZhbHNlKTsKLSAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5P
TkUpCi0gICAgICAgIHJldHVybiBlcnI7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0KLSAg
ICAgIHJldHVybiB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkU7Ci0gICAgfTsKLQotICBS
dW5PckNsb3NlUGlwZUlucHV0LmVuY29kZWRTaXplID0gMTY7Ci0gIGV4cG9ydHMua1J1bk1lc3Nh
Z2VJZCA9IGtSdW5NZXNzYWdlSWQ7Ci0gIGV4cG9ydHMua1J1bk9yQ2xvc2VQaXBlTWVzc2FnZUlk
ID0ga1J1bk9yQ2xvc2VQaXBlTWVzc2FnZUlkOwotICBleHBvcnRzLlJ1bk1lc3NhZ2VQYXJhbXMg
PSBSdW5NZXNzYWdlUGFyYW1zOwotICBleHBvcnRzLlJ1blJlc3BvbnNlTWVzc2FnZVBhcmFtcyA9
IFJ1blJlc3BvbnNlTWVzc2FnZVBhcmFtczsKLSAgZXhwb3J0cy5RdWVyeVZlcnNpb24gPSBRdWVy
eVZlcnNpb247Ci0gIGV4cG9ydHMuUXVlcnlWZXJzaW9uUmVzdWx0ID0gUXVlcnlWZXJzaW9uUmVz
dWx0OwotICBleHBvcnRzLkZsdXNoRm9yVGVzdGluZyA9IEZsdXNoRm9yVGVzdGluZzsKLSAgZXhw
b3J0cy5SdW5PckNsb3NlUGlwZU1lc3NhZ2VQYXJhbXMgPSBSdW5PckNsb3NlUGlwZU1lc3NhZ2VQ
YXJhbXM7Ci0gIGV4cG9ydHMuUmVxdWlyZVZlcnNpb24gPSBSZXF1aXJlVmVyc2lvbjsKLSAgZXhw
b3J0cy5SdW5JbnB1dCA9IFJ1bklucHV0OwotICBleHBvcnRzLlJ1bk91dHB1dCA9IFJ1bk91dHB1
dDsKLSAgZXhwb3J0cy5SdW5PckNsb3NlUGlwZUlucHV0ID0gUnVuT3JDbG9zZVBpcGVJbnB1dDsK
LX0pKCk7Ly8gQ29weXJpZ2h0IDIwMTQgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJT
RC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxl
LgotCi0ndXNlIHN0cmljdCc7Ci0KLShmdW5jdGlvbigpIHsKLSAgdmFyIG1vam9tSWQgPSAnbW9q
by9wdWJsaWMvaW50ZXJmYWNlcy9iaW5kaW5ncy9waXBlX2NvbnRyb2xfbWVzc2FnZXMubW9qb20n
OwotICBpZiAobW9qby5pbnRlcm5hbC5pc01vam9tTG9hZGVkKG1vam9tSWQpKSB7Ci0gICAgY29u
c29sZS53YXJuKCdUaGUgZm9sbG93aW5nIG1vam9tIGlzIGxvYWRlZCBtdWx0aXBsZSB0aW1lczog
JyArIG1vam9tSWQpOwotICAgIHJldHVybjsKLSAgfQotICBtb2pvLmludGVybmFsLm1hcmtNb2pv
bUxvYWRlZChtb2pvbUlkKTsKLSAgdmFyIGJpbmRpbmdzID0gbW9qbzsKLSAgdmFyIGFzc29jaWF0
ZWRCaW5kaW5ncyA9IG1vam87Ci0gIHZhciBjb2RlYyA9IG1vam8uaW50ZXJuYWw7Ci0gIHZhciB2
YWxpZGF0b3IgPSBtb2pvLmludGVybmFsOwotCi0gIHZhciBleHBvcnRzID0gbW9qby5pbnRlcm5h
bC5leHBvc2VOYW1lc3BhY2UoJ21vam8ucGlwZUNvbnRyb2wnKTsKLQotCi0gIHZhciBrUnVuT3JD
bG9zZVBpcGVNZXNzYWdlSWQgPSAweEZGRkZGRkZFOwotCi0gIGZ1bmN0aW9uIFJ1bk9yQ2xvc2VQ
aXBlTWVzc2FnZVBhcmFtcyh2YWx1ZXMpIHsKLSAgICB0aGlzLmluaXREZWZhdWx0c18oKTsKLSAg
ICB0aGlzLmluaXRGaWVsZHNfKHZhbHVlcyk7Ci0gIH0KLQotCi0gIFJ1bk9yQ2xvc2VQaXBlTWVz
c2FnZVBhcmFtcy5wcm90b3R5cGUuaW5pdERlZmF1bHRzXyA9IGZ1bmN0aW9uKCkgewotICAgIHRo
aXMuaW5wdXQgPSBudWxsOwotICB9OwotICBSdW5PckNsb3NlUGlwZU1lc3NhZ2VQYXJhbXMucHJv
dG90eXBlLmluaXRGaWVsZHNfID0gZnVuY3Rpb24oZmllbGRzKSB7Ci0gICAgZm9yKHZhciBmaWVs
ZCBpbiBmaWVsZHMpIHsKLSAgICAgICAgaWYgKHRoaXMuaGFzT3duUHJvcGVydHkoZmllbGQpKQot
ICAgICAgICAgIHRoaXNbZmllbGRdID0gZmllbGRzW2ZpZWxkXTsKLSAgICB9Ci0gIH07Ci0KLSAg
UnVuT3JDbG9zZVBpcGVNZXNzYWdlUGFyYW1zLnZhbGlkYXRlID0gZnVuY3Rpb24obWVzc2FnZVZh
bGlkYXRvciwgb2Zmc2V0KSB7Ci0gICAgdmFyIGVycjsKLSAgICBlcnIgPSBtZXNzYWdlVmFsaWRh
dG9yLnZhbGlkYXRlU3RydWN0SGVhZGVyKG9mZnNldCwgY29kZWMua1N0cnVjdEhlYWRlclNpemUp
OwotICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKLSAgICAg
ICAgcmV0dXJuIGVycjsKLQotICAgIHZhciBrVmVyc2lvblNpemVzID0gWwotICAgICAge3ZlcnNp
b246IDAsIG51bUJ5dGVzOiAyNH0KLSAgICBdOwotICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3Iu
dmFsaWRhdGVTdHJ1Y3RWZXJzaW9uKG9mZnNldCwga1ZlcnNpb25TaXplcyk7Ci0gICAgaWYgKGVy
ciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQotICAgICAgICByZXR1cm4gZXJy
OwotCi0KLSAgICAvLyB2YWxpZGF0ZSBSdW5PckNsb3NlUGlwZU1lc3NhZ2VQYXJhbXMuaW5wdXQK
LSAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlVW5pb24ob2Zmc2V0ICsgY29kZWMu
a1N0cnVjdEhlYWRlclNpemUgKyAwLCBSdW5PckNsb3NlUGlwZUlucHV0LCBmYWxzZSk7Ci0gICAg
aWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQotICAgICAgICByZXR1
cm4gZXJyOwotCi0gICAgcmV0dXJuIHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORTsKLSAg
fTsKLQotICBSdW5PckNsb3NlUGlwZU1lc3NhZ2VQYXJhbXMuZW5jb2RlZFNpemUgPSBjb2RlYy5r
U3RydWN0SGVhZGVyU2l6ZSArIDE2OwotCi0gIFJ1bk9yQ2xvc2VQaXBlTWVzc2FnZVBhcmFtcy5k
ZWNvZGUgPSBmdW5jdGlvbihkZWNvZGVyKSB7Ci0gICAgdmFyIHBhY2tlZDsKLSAgICB2YXIgdmFs
ID0gbmV3IFJ1bk9yQ2xvc2VQaXBlTWVzc2FnZVBhcmFtcygpOwotICAgIHZhciBudW1iZXJPZkJ5
dGVzID0gZGVjb2Rlci5yZWFkVWludDMyKCk7Ci0gICAgdmFyIHZlcnNpb24gPSBkZWNvZGVyLnJl
YWRVaW50MzIoKTsKLSAgICB2YWwuaW5wdXQgPSBkZWNvZGVyLmRlY29kZVN0cnVjdChSdW5PckNs
b3NlUGlwZUlucHV0KTsKLSAgICByZXR1cm4gdmFsOwotICB9OwotCi0gIFJ1bk9yQ2xvc2VQaXBl
TWVzc2FnZVBhcmFtcy5lbmNvZGUgPSBmdW5jdGlvbihlbmNvZGVyLCB2YWwpIHsKLSAgICB2YXIg
cGFja2VkOwotICAgIGVuY29kZXIud3JpdGVVaW50MzIoUnVuT3JDbG9zZVBpcGVNZXNzYWdlUGFy
YW1zLmVuY29kZWRTaXplKTsKLSAgICBlbmNvZGVyLndyaXRlVWludDMyKDApOwotICAgIGVuY29k
ZXIuZW5jb2RlU3RydWN0KFJ1bk9yQ2xvc2VQaXBlSW5wdXQsIHZhbC5pbnB1dCk7Ci0gIH07Ci0g
IGZ1bmN0aW9uIERpc2Nvbm5lY3RSZWFzb24odmFsdWVzKSB7Ci0gICAgdGhpcy5pbml0RGVmYXVs
dHNfKCk7Ci0gICAgdGhpcy5pbml0RmllbGRzXyh2YWx1ZXMpOwotICB9Ci0KLQotICBEaXNjb25u
ZWN0UmVhc29uLnByb3RvdHlwZS5pbml0RGVmYXVsdHNfID0gZnVuY3Rpb24oKSB7Ci0gICAgdGhp
cy5jdXN0b21SZWFzb24gPSAwOwotICAgIHRoaXMuZGVzY3JpcHRpb24gPSBudWxsOwotICB9Owot
ICBEaXNjb25uZWN0UmVhc29uLnByb3RvdHlwZS5pbml0RmllbGRzXyA9IGZ1bmN0aW9uKGZpZWxk
cykgewotICAgIGZvcih2YXIgZmllbGQgaW4gZmllbGRzKSB7Ci0gICAgICAgIGlmICh0aGlzLmhh
c093blByb3BlcnR5KGZpZWxkKSkKLSAgICAgICAgICB0aGlzW2ZpZWxkXSA9IGZpZWxkc1tmaWVs
ZF07Ci0gICAgfQotICB9OwotCi0gIERpc2Nvbm5lY3RSZWFzb24udmFsaWRhdGUgPSBmdW5jdGlv
bihtZXNzYWdlVmFsaWRhdG9yLCBvZmZzZXQpIHsKLSAgICB2YXIgZXJyOwotICAgIGVyciA9IG1l
c3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RIZWFkZXIob2Zmc2V0LCBjb2RlYy5rU3RydWN0
SGVhZGVyU2l6ZSk7Ci0gICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5O
T05FKQotICAgICAgICByZXR1cm4gZXJyOwotCi0gICAgdmFyIGtWZXJzaW9uU2l6ZXMgPSBbCi0g
ICAgICB7dmVyc2lvbjogMCwgbnVtQnl0ZXM6IDI0fQotICAgIF07Ci0gICAgZXJyID0gbWVzc2Fn
ZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdFZlcnNpb24ob2Zmc2V0LCBrVmVyc2lvblNpemVzKTsK
LSAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCi0gICAgICAg
IHJldHVybiBlcnI7Ci0KLQotCi0gICAgLy8gdmFsaWRhdGUgRGlzY29ubmVjdFJlYXNvbi5kZXNj
cmlwdGlvbgotICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJpbmdQb2ludGVy
KG9mZnNldCArIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgOCwgZmFsc2UpCi0gICAgaWYgKGVy
ciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQotICAgICAgICByZXR1cm4gZXJy
OwotCi0gICAgcmV0dXJuIHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORTsKLSAgfTsKLQot
ICBEaXNjb25uZWN0UmVhc29uLmVuY29kZWRTaXplID0gY29kZWMua1N0cnVjdEhlYWRlclNpemUg
KyAxNjsKLQotICBEaXNjb25uZWN0UmVhc29uLmRlY29kZSA9IGZ1bmN0aW9uKGRlY29kZXIpIHsK
LSAgICB2YXIgcGFja2VkOwotICAgIHZhciB2YWwgPSBuZXcgRGlzY29ubmVjdFJlYXNvbigpOwot
ICAgIHZhciBudW1iZXJPZkJ5dGVzID0gZGVjb2Rlci5yZWFkVWludDMyKCk7Ci0gICAgdmFyIHZl
cnNpb24gPSBkZWNvZGVyLnJlYWRVaW50MzIoKTsKLSAgICB2YWwuY3VzdG9tUmVhc29uID0gZGVj
b2Rlci5kZWNvZGVTdHJ1Y3QoY29kZWMuVWludDMyKTsKLSAgICBkZWNvZGVyLnNraXAoMSk7Ci0g
ICAgZGVjb2Rlci5za2lwKDEpOwotICAgIGRlY29kZXIuc2tpcCgxKTsKLSAgICBkZWNvZGVyLnNr
aXAoMSk7Ci0gICAgdmFsLmRlc2NyaXB0aW9uID0gZGVjb2Rlci5kZWNvZGVTdHJ1Y3QoY29kZWMu
U3RyaW5nKTsKLSAgICByZXR1cm4gdmFsOwotICB9OwotCi0gIERpc2Nvbm5lY3RSZWFzb24uZW5j
b2RlID0gZnVuY3Rpb24oZW5jb2RlciwgdmFsKSB7Ci0gICAgdmFyIHBhY2tlZDsKLSAgICBlbmNv
ZGVyLndyaXRlVWludDMyKERpc2Nvbm5lY3RSZWFzb24uZW5jb2RlZFNpemUpOwotICAgIGVuY29k
ZXIud3JpdGVVaW50MzIoMCk7Ci0gICAgZW5jb2Rlci5lbmNvZGVTdHJ1Y3QoY29kZWMuVWludDMy
LCB2YWwuY3VzdG9tUmVhc29uKTsKLSAgICBlbmNvZGVyLnNraXAoMSk7Ci0gICAgZW5jb2Rlci5z
a2lwKDEpOwotICAgIGVuY29kZXIuc2tpcCgxKTsKLSAgICBlbmNvZGVyLnNraXAoMSk7Ci0gICAg
ZW5jb2Rlci5lbmNvZGVTdHJ1Y3QoY29kZWMuU3RyaW5nLCB2YWwuZGVzY3JpcHRpb24pOwotICB9
OwotICBmdW5jdGlvbiBQZWVyQXNzb2NpYXRlZEVuZHBvaW50Q2xvc2VkRXZlbnQodmFsdWVzKSB7
Ci0gICAgdGhpcy5pbml0RGVmYXVsdHNfKCk7Ci0gICAgdGhpcy5pbml0RmllbGRzXyh2YWx1ZXMp
OwotICB9Ci0KLQotICBQZWVyQXNzb2NpYXRlZEVuZHBvaW50Q2xvc2VkRXZlbnQucHJvdG90eXBl
LmluaXREZWZhdWx0c18gPSBmdW5jdGlvbigpIHsKLSAgICB0aGlzLmlkID0gMDsKLSAgICB0aGlz
LmRpc2Nvbm5lY3RSZWFzb24gPSBudWxsOwotICB9OwotICBQZWVyQXNzb2NpYXRlZEVuZHBvaW50
Q2xvc2VkRXZlbnQucHJvdG90eXBlLmluaXRGaWVsZHNfID0gZnVuY3Rpb24oZmllbGRzKSB7Ci0g
ICAgZm9yKHZhciBmaWVsZCBpbiBmaWVsZHMpIHsKLSAgICAgICAgaWYgKHRoaXMuaGFzT3duUHJv
cGVydHkoZmllbGQpKQotICAgICAgICAgIHRoaXNbZmllbGRdID0gZmllbGRzW2ZpZWxkXTsKLSAg
ICB9Ci0gIH07Ci0KLSAgUGVlckFzc29jaWF0ZWRFbmRwb2ludENsb3NlZEV2ZW50LnZhbGlkYXRl
ID0gZnVuY3Rpb24obWVzc2FnZVZhbGlkYXRvciwgb2Zmc2V0KSB7Ci0gICAgdmFyIGVycjsKLSAg
ICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0SGVhZGVyKG9mZnNldCwgY29k
ZWMua1N0cnVjdEhlYWRlclNpemUpOwotICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0
aW9uRXJyb3IuTk9ORSkKLSAgICAgICAgcmV0dXJuIGVycjsKLQotICAgIHZhciBrVmVyc2lvblNp
emVzID0gWwotICAgICAge3ZlcnNpb246IDAsIG51bUJ5dGVzOiAyNH0KLSAgICBdOwotICAgIGVy
ciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RWZXJzaW9uKG9mZnNldCwga1ZlcnNp
b25TaXplcyk7Ci0gICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05F
KQotICAgICAgICByZXR1cm4gZXJyOwotCi0KLQotICAgIC8vIHZhbGlkYXRlIFBlZXJBc3NvY2lh
dGVkRW5kcG9pbnRDbG9zZWRFdmVudC5kaXNjb25uZWN0UmVhc29uCi0gICAgZXJyID0gbWVzc2Fn
ZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdFBvaW50ZXIob2Zmc2V0ICsgY29kZWMua1N0cnVjdEhl
YWRlclNpemUgKyA4LCBEaXNjb25uZWN0UmVhc29uLCB0cnVlKTsKLSAgICBpZiAoZXJyICE9PSB2
YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCi0gICAgICAgIHJldHVybiBlcnI7Ci0KLSAg
ICByZXR1cm4gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FOwotICB9OwotCi0gIFBlZXJB
c3NvY2lhdGVkRW5kcG9pbnRDbG9zZWRFdmVudC5lbmNvZGVkU2l6ZSA9IGNvZGVjLmtTdHJ1Y3RI
ZWFkZXJTaXplICsgMTY7Ci0KLSAgUGVlckFzc29jaWF0ZWRFbmRwb2ludENsb3NlZEV2ZW50LmRl
Y29kZSA9IGZ1bmN0aW9uKGRlY29kZXIpIHsKLSAgICB2YXIgcGFja2VkOwotICAgIHZhciB2YWwg
PSBuZXcgUGVlckFzc29jaWF0ZWRFbmRwb2ludENsb3NlZEV2ZW50KCk7Ci0gICAgdmFyIG51bWJl
ck9mQnl0ZXMgPSBkZWNvZGVyLnJlYWRVaW50MzIoKTsKLSAgICB2YXIgdmVyc2lvbiA9IGRlY29k
ZXIucmVhZFVpbnQzMigpOwotICAgIHZhbC5pZCA9IGRlY29kZXIuZGVjb2RlU3RydWN0KGNvZGVj
LlVpbnQzMik7Ci0gICAgZGVjb2Rlci5za2lwKDEpOwotICAgIGRlY29kZXIuc2tpcCgxKTsKLSAg
ICBkZWNvZGVyLnNraXAoMSk7Ci0gICAgZGVjb2Rlci5za2lwKDEpOwotICAgIHZhbC5kaXNjb25u
ZWN0UmVhc29uID0gZGVjb2Rlci5kZWNvZGVTdHJ1Y3RQb2ludGVyKERpc2Nvbm5lY3RSZWFzb24p
OwotICAgIHJldHVybiB2YWw7Ci0gIH07Ci0KLSAgUGVlckFzc29jaWF0ZWRFbmRwb2ludENsb3Nl
ZEV2ZW50LmVuY29kZSA9IGZ1bmN0aW9uKGVuY29kZXIsIHZhbCkgewotICAgIHZhciBwYWNrZWQ7
Ci0gICAgZW5jb2Rlci53cml0ZVVpbnQzMihQZWVyQXNzb2NpYXRlZEVuZHBvaW50Q2xvc2VkRXZl
bnQuZW5jb2RlZFNpemUpOwotICAgIGVuY29kZXIud3JpdGVVaW50MzIoMCk7Ci0gICAgZW5jb2Rl
ci5lbmNvZGVTdHJ1Y3QoY29kZWMuVWludDMyLCB2YWwuaWQpOwotICAgIGVuY29kZXIuc2tpcCgx
KTsKLSAgICBlbmNvZGVyLnNraXAoMSk7Ci0gICAgZW5jb2Rlci5za2lwKDEpOwotICAgIGVuY29k
ZXIuc2tpcCgxKTsKLSAgICBlbmNvZGVyLmVuY29kZVN0cnVjdFBvaW50ZXIoRGlzY29ubmVjdFJl
YXNvbiwgdmFsLmRpc2Nvbm5lY3RSZWFzb24pOwotICB9OwotCi0gIGZ1bmN0aW9uIFJ1bk9yQ2xv
c2VQaXBlSW5wdXQodmFsdWUpIHsKLSAgICB0aGlzLmluaXREZWZhdWx0XygpOwotICAgIHRoaXMu
aW5pdFZhbHVlXyh2YWx1ZSk7Ci0gIH0KLQotCi0gIFJ1bk9yQ2xvc2VQaXBlSW5wdXQuVGFncyA9
IHsKLSAgICBwZWVyQXNzb2NpYXRlZEVuZHBvaW50Q2xvc2VkRXZlbnQ6IDAsCi0gIH07Ci0KLSAg
UnVuT3JDbG9zZVBpcGVJbnB1dC5wcm90b3R5cGUuaW5pdERlZmF1bHRfID0gZnVuY3Rpb24oKSB7
Ci0gICAgdGhpcy4kZGF0YSA9IG51bGw7Ci0gICAgdGhpcy4kdGFnID0gdW5kZWZpbmVkOwotICB9
Ci0KLSAgUnVuT3JDbG9zZVBpcGVJbnB1dC5wcm90b3R5cGUuaW5pdFZhbHVlXyA9IGZ1bmN0aW9u
KHZhbHVlKSB7Ci0gICAgaWYgKHZhbHVlID09IHVuZGVmaW5lZCkgewotICAgICAgcmV0dXJuOwot
ICAgIH0KLQotICAgIHZhciBrZXlzID0gT2JqZWN0LmtleXModmFsdWUpOwotICAgIGlmIChrZXlz
Lmxlbmd0aCA9PSAwKSB7Ci0gICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKGtleXMubGVu
Z3RoID4gMSkgewotICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigiWW91IG1heSBzZXQgb25seSBv
bmUgbWVtYmVyIG9uIGEgdW5pb24uIik7Ci0gICAgfQotCi0gICAgdmFyIGZpZWxkcyA9IFsKLSAg
ICAgICAgInBlZXJBc3NvY2lhdGVkRW5kcG9pbnRDbG9zZWRFdmVudCIsCi0gICAgXTsKLQotICAg
IGlmIChmaWVsZHMuaW5kZXhPZihrZXlzWzBdKSA8IDApIHsKLSAgICAgIHRocm93IG5ldyBSZWZl
cmVuY2VFcnJvcihrZXlzWzBdICsgIiBpcyBub3QgYSBSdW5PckNsb3NlUGlwZUlucHV0IG1lbWJl
ci4iKTsKLQotICAgIH0KLQotICAgIHRoaXNba2V5c1swXV0gPSB2YWx1ZVtrZXlzWzBdXTsKLSAg
fQotICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUnVuT3JDbG9zZVBpcGVJbnB1dC5wcm90b3R5cGUs
ICJwZWVyQXNzb2NpYXRlZEVuZHBvaW50Q2xvc2VkRXZlbnQiLCB7Ci0gICAgZ2V0OiBmdW5jdGlv
bigpIHsKLSAgICAgIGlmICh0aGlzLiR0YWcgIT0gUnVuT3JDbG9zZVBpcGVJbnB1dC5UYWdzLnBl
ZXJBc3NvY2lhdGVkRW5kcG9pbnRDbG9zZWRFdmVudCkgewotICAgICAgICB0aHJvdyBuZXcgUmVm
ZXJlbmNlRXJyb3IoCi0gICAgICAgICAgICAiUnVuT3JDbG9zZVBpcGVJbnB1dC5wZWVyQXNzb2Np
YXRlZEVuZHBvaW50Q2xvc2VkRXZlbnQgaXMgbm90IGN1cnJlbnRseSBzZXQuIik7Ci0gICAgICB9
Ci0gICAgICByZXR1cm4gdGhpcy4kZGF0YTsKLSAgICB9LAotCi0gICAgc2V0OiBmdW5jdGlvbih2
YWx1ZSkgewotICAgICAgdGhpcy4kdGFnID0gUnVuT3JDbG9zZVBpcGVJbnB1dC5UYWdzLnBlZXJB
c3NvY2lhdGVkRW5kcG9pbnRDbG9zZWRFdmVudDsKLSAgICAgIHRoaXMuJGRhdGEgPSB2YWx1ZTsK
LSAgICB9Ci0gIH0pOwotCi0KLSAgICBSdW5PckNsb3NlUGlwZUlucHV0LmVuY29kZSA9IGZ1bmN0
aW9uKGVuY29kZXIsIHZhbCkgewotICAgICAgaWYgKHZhbCA9PSBudWxsKSB7Ci0gICAgICAgIGVu
Y29kZXIud3JpdGVVaW50NjQoMCk7Ci0gICAgICAgIGVuY29kZXIud3JpdGVVaW50NjQoMCk7Ci0g
ICAgICAgIHJldHVybjsKLSAgICAgIH0KLSAgICAgIGlmICh2YWwuJHRhZyA9PSB1bmRlZmluZWQp
IHsKLSAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGVuY29kZSB1bmlvbnMgd2l0
aCBhbiB1bmtub3duIG1lbWJlciBzZXQuIik7Ci0gICAgICB9Ci0KLSAgICAgIGVuY29kZXIud3Jp
dGVVaW50MzIoMTYpOwotICAgICAgZW5jb2Rlci53cml0ZVVpbnQzMih2YWwuJHRhZyk7Ci0gICAg
ICBzd2l0Y2ggKHZhbC4kdGFnKSB7Ci0gICAgICAgIGNhc2UgUnVuT3JDbG9zZVBpcGVJbnB1dC5U
YWdzLnBlZXJBc3NvY2lhdGVkRW5kcG9pbnRDbG9zZWRFdmVudDoKLSAgICAgICAgICBlbmNvZGVy
LmVuY29kZVN0cnVjdFBvaW50ZXIoUGVlckFzc29jaWF0ZWRFbmRwb2ludENsb3NlZEV2ZW50LCB2
YWwucGVlckFzc29jaWF0ZWRFbmRwb2ludENsb3NlZEV2ZW50KTsKLSAgICAgICAgICBicmVhazsK
LSAgICAgIH0KLSAgICAgIGVuY29kZXIuYWxpZ24oKTsKLSAgICB9OwotCi0KLSAgICBSdW5PckNs
b3NlUGlwZUlucHV0LmRlY29kZSA9IGZ1bmN0aW9uKGRlY29kZXIpIHsKLSAgICAgIHZhciBzaXpl
ID0gZGVjb2Rlci5yZWFkVWludDMyKCk7Ci0gICAgICBpZiAoc2l6ZSA9PSAwKSB7Ci0gICAgICAg
IGRlY29kZXIucmVhZFVpbnQzMigpOwotICAgICAgICBkZWNvZGVyLnJlYWRVaW50NjQoKTsKLSAg
ICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICB9Ci0KLSAgICAgIHZhciByZXN1bHQgPSBuZXcgUnVu
T3JDbG9zZVBpcGVJbnB1dCgpOwotICAgICAgdmFyIHRhZyA9IGRlY29kZXIucmVhZFVpbnQzMigp
OwotICAgICAgc3dpdGNoICh0YWcpIHsKLSAgICAgICAgY2FzZSBSdW5PckNsb3NlUGlwZUlucHV0
LlRhZ3MucGVlckFzc29jaWF0ZWRFbmRwb2ludENsb3NlZEV2ZW50OgotICAgICAgICAgIHJlc3Vs
dC5wZWVyQXNzb2NpYXRlZEVuZHBvaW50Q2xvc2VkRXZlbnQgPSBkZWNvZGVyLmRlY29kZVN0cnVj
dFBvaW50ZXIoUGVlckFzc29jaWF0ZWRFbmRwb2ludENsb3NlZEV2ZW50KTsKLSAgICAgICAgICBi
cmVhazsKLSAgICAgIH0KLSAgICAgIGRlY29kZXIuYWxpZ24oKTsKLQotICAgICAgcmV0dXJuIHJl
c3VsdDsKLSAgICB9OwotCi0KLSAgICBSdW5PckNsb3NlUGlwZUlucHV0LnZhbGlkYXRlID0gZnVu
Y3Rpb24obWVzc2FnZVZhbGlkYXRvciwgb2Zmc2V0KSB7Ci0gICAgICB2YXIgc2l6ZSA9IG1lc3Nh
Z2VWYWxpZGF0b3IuZGVjb2RlVW5pb25TaXplKG9mZnNldCk7Ci0gICAgICBpZiAoc2l6ZSAhPSAx
NikgewotICAgICAgICByZXR1cm4gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5JTlZBTElEX1VO
SU9OX1NJWkU7Ci0gICAgICB9Ci0KLSAgICAgIHZhciB0YWcgPSBtZXNzYWdlVmFsaWRhdG9yLmRl
Y29kZVVuaW9uVGFnKG9mZnNldCk7Ci0gICAgICB2YXIgZGF0YV9vZmZzZXQgPSBvZmZzZXQgKyA4
OwotICAgICAgdmFyIGVycjsKLSAgICAgIHN3aXRjaCAodGFnKSB7Ci0gICAgICAgIGNhc2UgUnVu
T3JDbG9zZVBpcGVJbnB1dC5UYWdzLnBlZXJBc3NvY2lhdGVkRW5kcG9pbnRDbG9zZWRFdmVudDoK
LSAgICAgICAgICAKLQotICAgIC8vIHZhbGlkYXRlIFJ1bk9yQ2xvc2VQaXBlSW5wdXQucGVlckFz
c29jaWF0ZWRFbmRwb2ludENsb3NlZEV2ZW50Ci0gICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52
YWxpZGF0ZVN0cnVjdFBvaW50ZXIoZGF0YV9vZmZzZXQsIFBlZXJBc3NvY2lhdGVkRW5kcG9pbnRD
bG9zZWRFdmVudCwgZmFsc2UpOwotICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9u
RXJyb3IuTk9ORSkKLSAgICAgICAgcmV0dXJuIGVycjsKLSAgICAgICAgICBicmVhazsKLSAgICAg
IH0KLQotICAgICAgcmV0dXJuIHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORTsKLSAgICB9
OwotCi0gIFJ1bk9yQ2xvc2VQaXBlSW5wdXQuZW5jb2RlZFNpemUgPSAxNjsKLSAgZXhwb3J0cy5r
UnVuT3JDbG9zZVBpcGVNZXNzYWdlSWQgPSBrUnVuT3JDbG9zZVBpcGVNZXNzYWdlSWQ7Ci0gIGV4
cG9ydHMuUnVuT3JDbG9zZVBpcGVNZXNzYWdlUGFyYW1zID0gUnVuT3JDbG9zZVBpcGVNZXNzYWdl
UGFyYW1zOwotICBleHBvcnRzLkRpc2Nvbm5lY3RSZWFzb24gPSBEaXNjb25uZWN0UmVhc29uOwot
ICBleHBvcnRzLlBlZXJBc3NvY2lhdGVkRW5kcG9pbnRDbG9zZWRFdmVudCA9IFBlZXJBc3NvY2lh
dGVkRW5kcG9pbnRDbG9zZWRFdmVudDsKLSAgZXhwb3J0cy5SdW5PckNsb3NlUGlwZUlucHV0ID0g
UnVuT3JDbG9zZVBpcGVJbnB1dDsKLX0pKCk7CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbXBv
cnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS9tb2pvX2JpbmRp
bmdzLmpzLmhlYWRlcnMgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRl
c3RzL3Jlc291cmNlcy9jaHJvbWl1bS9tb2pvX2JpbmRpbmdzLmpzLmhlYWRlcnMKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY4MDVjMzIzZGY1YTk3NTIzMTY0OGI4MzBlMzNjZTE4M2Mz
Y2JiZDMuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvTGF5
b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21p
dW0vbW9qb19iaW5kaW5ncy5qcy5oZWFkZXJzCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAot
Q29udGVudC1UeXBlOiB0ZXh0L2phdmFzY3JpcHQ7IGNoYXJzZXQ9dXRmLTgKZGlmZiAtLWdpdCBh
L0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2No
cm9taXVtL21vam9fd2ViX3Rlc3RfaGVscGVyX3Rlc3QubW9qb20uanMgYi9MYXlvdXRUZXN0cy9p
bXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS9tb2pvX3dl
Yl90ZXN0X2hlbHBlcl90ZXN0Lm1vam9tLmpzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCBjZmJhZDA4Njg5ODc3OGI5MjBjMmQ3NTA4OTBjODcwZTA4MmRjNjBhLi4wMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3cz
Yy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL21vam9fd2ViX3Rlc3RfaGVs
cGVyX3Rlc3QubW9qb20uanMKKysrIC9kZXYvbnVsbApAQCAtMSwyNjQgKzAsMCBAQAotLy8gQ29w
eXJpZ2h0IDIwMTQgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0v
LyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNl
bnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotCi0ndXNlIHN0
cmljdCc7Ci0KLShmdW5jdGlvbigpIHsKLSAgdmFyIG1vam9tSWQgPSAnY29udGVudC90ZXN0L2Rh
dGEvbW9qb193ZWJfdGVzdF9oZWxwZXJfdGVzdC5tb2pvbSc7Ci0gIGlmIChtb2pvLmludGVybmFs
LmlzTW9qb21Mb2FkZWQobW9qb21JZCkpIHsKLSAgICBjb25zb2xlLndhcm4oJ1RoZSBmb2xsb3dp
bmcgbW9qb20gaXMgbG9hZGVkIG11bHRpcGxlIHRpbWVzOiAnICsgbW9qb21JZCk7Ci0gICAgcmV0
dXJuOwotICB9Ci0gIG1vam8uaW50ZXJuYWwubWFya01vam9tTG9hZGVkKG1vam9tSWQpOwotCi0g
IC8vIFRPRE8oeXpzaGVuKTogRGVmaW5lIHRoZXNlIGFsaWFzZXMgdG8gbWluaW1pemUgdGhlIGRp
ZmZlcmVuY2VzIGJldHdlZW4gdGhlCi0gIC8vIG9sZC9uZXcgbW9kZXMuIFJlbW92ZSB0aGVtIHdo
ZW4gdGhlIG9sZCBtb2RlIGdvZXMgYXdheS4KLSAgdmFyIGJpbmRpbmdzID0gbW9qbzsKLSAgdmFy
IGFzc29jaWF0ZWRCaW5kaW5ncyA9IG1vam87Ci0gIHZhciBjb2RlYyA9IG1vam8uaW50ZXJuYWw7
Ci0gIHZhciB2YWxpZGF0b3IgPSBtb2pvLmludGVybmFsOwotCi0gIHZhciBleHBvcnRzID0gbW9q
by5pbnRlcm5hbC5leHBvc2VOYW1lc3BhY2UoJ2NvbnRlbnQubW9qb20nKTsKLQotCi0KLSAgZnVu
Y3Rpb24gTW9qb1dlYlRlc3RIZWxwZXJfUmV2ZXJzZV9QYXJhbXModmFsdWVzKSB7Ci0gICAgdGhp
cy5pbml0RGVmYXVsdHNfKCk7Ci0gICAgdGhpcy5pbml0RmllbGRzXyh2YWx1ZXMpOwotICB9Ci0K
LQotICBNb2pvV2ViVGVzdEhlbHBlcl9SZXZlcnNlX1BhcmFtcy5wcm90b3R5cGUuaW5pdERlZmF1
bHRzXyA9IGZ1bmN0aW9uKCkgewotICAgIHRoaXMubWVzc2FnZSA9IG51bGw7Ci0gIH07Ci0gIE1v
am9XZWJUZXN0SGVscGVyX1JldmVyc2VfUGFyYW1zLnByb3RvdHlwZS5pbml0RmllbGRzXyA9IGZ1
bmN0aW9uKGZpZWxkcykgewotICAgIGZvcih2YXIgZmllbGQgaW4gZmllbGRzKSB7Ci0gICAgICAg
IGlmICh0aGlzLmhhc093blByb3BlcnR5KGZpZWxkKSkKLSAgICAgICAgICB0aGlzW2ZpZWxkXSA9
IGZpZWxkc1tmaWVsZF07Ci0gICAgfQotICB9OwotCi0gIE1vam9XZWJUZXN0SGVscGVyX1JldmVy
c2VfUGFyYW1zLnZhbGlkYXRlID0gZnVuY3Rpb24obWVzc2FnZVZhbGlkYXRvciwgb2Zmc2V0KSB7
Ci0gICAgdmFyIGVycjsKLSAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0
SGVhZGVyKG9mZnNldCwgY29kZWMua1N0cnVjdEhlYWRlclNpemUpOwotICAgIGlmIChlcnIgIT09
IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKLSAgICAgICAgcmV0dXJuIGVycjsKLQot
ICAgIHZhciBrVmVyc2lvblNpemVzID0gWwotICAgICAge3ZlcnNpb246IDAsIG51bUJ5dGVzOiAx
Nn0KLSAgICBdOwotICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RWZXJz
aW9uKG9mZnNldCwga1ZlcnNpb25TaXplcyk7Ci0gICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZh
bGlkYXRpb25FcnJvci5OT05FKQotICAgICAgICByZXR1cm4gZXJyOwotCi0KLSAgICAvLyB2YWxp
ZGF0ZSBNb2pvV2ViVGVzdEhlbHBlcl9SZXZlcnNlX1BhcmFtcy5tZXNzYWdlCi0gICAgZXJyID0g
bWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cmluZ1BvaW50ZXIob2Zmc2V0ICsgY29kZWMua1N0
cnVjdEhlYWRlclNpemUgKyAwLCBmYWxzZSkKLSAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFs
aWRhdGlvbkVycm9yLk5PTkUpCi0gICAgICAgIHJldHVybiBlcnI7Ci0KLSAgICByZXR1cm4gdmFs
aWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FOwotICB9OwotCi0gIE1vam9XZWJUZXN0SGVscGVy
X1JldmVyc2VfUGFyYW1zLmVuY29kZWRTaXplID0gY29kZWMua1N0cnVjdEhlYWRlclNpemUgKyA4
OwotCi0gIE1vam9XZWJUZXN0SGVscGVyX1JldmVyc2VfUGFyYW1zLmRlY29kZSA9IGZ1bmN0aW9u
KGRlY29kZXIpIHsKLSAgICB2YXIgcGFja2VkOwotICAgIHZhciB2YWwgPSBuZXcgTW9qb1dlYlRl
c3RIZWxwZXJfUmV2ZXJzZV9QYXJhbXMoKTsKLSAgICB2YXIgbnVtYmVyT2ZCeXRlcyA9IGRlY29k
ZXIucmVhZFVpbnQzMigpOwotICAgIHZhciB2ZXJzaW9uID0gZGVjb2Rlci5yZWFkVWludDMyKCk7
Ci0gICAgdmFsLm1lc3NhZ2UgPSBkZWNvZGVyLmRlY29kZVN0cnVjdChjb2RlYy5TdHJpbmcpOwot
ICAgIHJldHVybiB2YWw7Ci0gIH07Ci0KLSAgTW9qb1dlYlRlc3RIZWxwZXJfUmV2ZXJzZV9QYXJh
bXMuZW5jb2RlID0gZnVuY3Rpb24oZW5jb2RlciwgdmFsKSB7Ci0gICAgdmFyIHBhY2tlZDsKLSAg
ICBlbmNvZGVyLndyaXRlVWludDMyKE1vam9XZWJUZXN0SGVscGVyX1JldmVyc2VfUGFyYW1zLmVu
Y29kZWRTaXplKTsKLSAgICBlbmNvZGVyLndyaXRlVWludDMyKDApOwotICAgIGVuY29kZXIuZW5j
b2RlU3RydWN0KGNvZGVjLlN0cmluZywgdmFsLm1lc3NhZ2UpOwotICB9OwotICBmdW5jdGlvbiBN
b2pvV2ViVGVzdEhlbHBlcl9SZXZlcnNlX1Jlc3BvbnNlUGFyYW1zKHZhbHVlcykgewotICAgIHRo
aXMuaW5pdERlZmF1bHRzXygpOwotICAgIHRoaXMuaW5pdEZpZWxkc18odmFsdWVzKTsKLSAgfQot
Ci0KLSAgTW9qb1dlYlRlc3RIZWxwZXJfUmV2ZXJzZV9SZXNwb25zZVBhcmFtcy5wcm90b3R5cGUu
aW5pdERlZmF1bHRzXyA9IGZ1bmN0aW9uKCkgewotICAgIHRoaXMucmV2ZXJzZWQgPSBudWxsOwot
ICB9OwotICBNb2pvV2ViVGVzdEhlbHBlcl9SZXZlcnNlX1Jlc3BvbnNlUGFyYW1zLnByb3RvdHlw
ZS5pbml0RmllbGRzXyA9IGZ1bmN0aW9uKGZpZWxkcykgewotICAgIGZvcih2YXIgZmllbGQgaW4g
ZmllbGRzKSB7Ci0gICAgICAgIGlmICh0aGlzLmhhc093blByb3BlcnR5KGZpZWxkKSkKLSAgICAg
ICAgICB0aGlzW2ZpZWxkXSA9IGZpZWxkc1tmaWVsZF07Ci0gICAgfQotICB9OwotCi0gIE1vam9X
ZWJUZXN0SGVscGVyX1JldmVyc2VfUmVzcG9uc2VQYXJhbXMudmFsaWRhdGUgPSBmdW5jdGlvbiht
ZXNzYWdlVmFsaWRhdG9yLCBvZmZzZXQpIHsKLSAgICB2YXIgZXJyOwotICAgIGVyciA9IG1lc3Nh
Z2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RIZWFkZXIob2Zmc2V0LCBjb2RlYy5rU3RydWN0SGVh
ZGVyU2l6ZSk7Ci0gICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05F
KQotICAgICAgICByZXR1cm4gZXJyOwotCi0gICAgdmFyIGtWZXJzaW9uU2l6ZXMgPSBbCi0gICAg
ICB7dmVyc2lvbjogMCwgbnVtQnl0ZXM6IDE2fQotICAgIF07Ci0gICAgZXJyID0gbWVzc2FnZVZh
bGlkYXRvci52YWxpZGF0ZVN0cnVjdFZlcnNpb24ob2Zmc2V0LCBrVmVyc2lvblNpemVzKTsKLSAg
ICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCi0gICAgICAgIHJl
dHVybiBlcnI7Ci0KLQotICAgIC8vIHZhbGlkYXRlIE1vam9XZWJUZXN0SGVscGVyX1JldmVyc2Vf
UmVzcG9uc2VQYXJhbXMucmV2ZXJzZWQKLSAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlk
YXRlU3RyaW5nUG9pbnRlcihvZmZzZXQgKyBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDAsIGZh
bHNlKQotICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKLSAg
ICAgICAgcmV0dXJuIGVycjsKLQotICAgIHJldHVybiB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9y
Lk5PTkU7Ci0gIH07Ci0KLSAgTW9qb1dlYlRlc3RIZWxwZXJfUmV2ZXJzZV9SZXNwb25zZVBhcmFt
cy5lbmNvZGVkU2l6ZSA9IGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgODsKLQotICBNb2pvV2Vi
VGVzdEhlbHBlcl9SZXZlcnNlX1Jlc3BvbnNlUGFyYW1zLmRlY29kZSA9IGZ1bmN0aW9uKGRlY29k
ZXIpIHsKLSAgICB2YXIgcGFja2VkOwotICAgIHZhciB2YWwgPSBuZXcgTW9qb1dlYlRlc3RIZWxw
ZXJfUmV2ZXJzZV9SZXNwb25zZVBhcmFtcygpOwotICAgIHZhciBudW1iZXJPZkJ5dGVzID0gZGVj
b2Rlci5yZWFkVWludDMyKCk7Ci0gICAgdmFyIHZlcnNpb24gPSBkZWNvZGVyLnJlYWRVaW50MzIo
KTsKLSAgICB2YWwucmV2ZXJzZWQgPSBkZWNvZGVyLmRlY29kZVN0cnVjdChjb2RlYy5TdHJpbmcp
OwotICAgIHJldHVybiB2YWw7Ci0gIH07Ci0KLSAgTW9qb1dlYlRlc3RIZWxwZXJfUmV2ZXJzZV9S
ZXNwb25zZVBhcmFtcy5lbmNvZGUgPSBmdW5jdGlvbihlbmNvZGVyLCB2YWwpIHsKLSAgICB2YXIg
cGFja2VkOwotICAgIGVuY29kZXIud3JpdGVVaW50MzIoTW9qb1dlYlRlc3RIZWxwZXJfUmV2ZXJz
ZV9SZXNwb25zZVBhcmFtcy5lbmNvZGVkU2l6ZSk7Ci0gICAgZW5jb2Rlci53cml0ZVVpbnQzMigw
KTsKLSAgICBlbmNvZGVyLmVuY29kZVN0cnVjdChjb2RlYy5TdHJpbmcsIHZhbC5yZXZlcnNlZCk7
Ci0gIH07Ci0gIHZhciBrTW9qb1dlYlRlc3RIZWxwZXJfUmV2ZXJzZV9OYW1lID0gMDsKLQotICBm
dW5jdGlvbiBNb2pvV2ViVGVzdEhlbHBlclB0cihoYW5kbGVPclB0ckluZm8pIHsKLSAgICB0aGlz
LnB0ciA9IG5ldyBiaW5kaW5ncy5JbnRlcmZhY2VQdHJDb250cm9sbGVyKE1vam9XZWJUZXN0SGVs
cGVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aGFuZGxlT3JQdHJJbmZvKTsKLSAgfQotCi0gIGZ1bmN0aW9uIE1vam9XZWJUZXN0SGVscGVyQXNz
b2NpYXRlZFB0cihhc3NvY2lhdGVkSW50ZXJmYWNlUHRySW5mbykgewotICAgIHRoaXMucHRyID0g
bmV3IGFzc29jaWF0ZWRCaW5kaW5ncy5Bc3NvY2lhdGVkSW50ZXJmYWNlUHRyQ29udHJvbGxlcigK
LSAgICAgICAgTW9qb1dlYlRlc3RIZWxwZXIsIGFzc29jaWF0ZWRJbnRlcmZhY2VQdHJJbmZvKTsK
LSAgfQotCi0gIE1vam9XZWJUZXN0SGVscGVyQXNzb2NpYXRlZFB0ci5wcm90b3R5cGUgPQotICAg
ICAgT2JqZWN0LmNyZWF0ZShNb2pvV2ViVGVzdEhlbHBlclB0ci5wcm90b3R5cGUpOwotICBNb2pv
V2ViVGVzdEhlbHBlckFzc29jaWF0ZWRQdHIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0KLSAgICAg
IE1vam9XZWJUZXN0SGVscGVyQXNzb2NpYXRlZFB0cjsKLQotICBmdW5jdGlvbiBNb2pvV2ViVGVz
dEhlbHBlclByb3h5KHJlY2VpdmVyKSB7Ci0gICAgdGhpcy5yZWNlaXZlcl8gPSByZWNlaXZlcjsK
LSAgfQotICBNb2pvV2ViVGVzdEhlbHBlclB0ci5wcm90b3R5cGUucmV2ZXJzZSA9IGZ1bmN0aW9u
KCkgewotICAgIHJldHVybiBNb2pvV2ViVGVzdEhlbHBlclByb3h5LnByb3RvdHlwZS5yZXZlcnNl
Ci0gICAgICAgIC5hcHBseSh0aGlzLnB0ci5nZXRQcm94eSgpLCBhcmd1bWVudHMpOwotICB9Owot
Ci0gIE1vam9XZWJUZXN0SGVscGVyUHJveHkucHJvdG90eXBlLnJldmVyc2UgPSBmdW5jdGlvbiht
ZXNzYWdlKSB7Ci0gICAgdmFyIHBhcmFtcyA9IG5ldyBNb2pvV2ViVGVzdEhlbHBlcl9SZXZlcnNl
X1BhcmFtcygpOwotICAgIHBhcmFtcy5tZXNzYWdlID0gbWVzc2FnZTsKLSAgICByZXR1cm4gbmV3
IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7Ci0gICAgICB2YXIgYnVpbGRlciA9
IG5ldyBjb2RlYy5NZXNzYWdlVjFCdWlsZGVyKAotICAgICAgICAgIGtNb2pvV2ViVGVzdEhlbHBl
cl9SZXZlcnNlX05hbWUsCi0gICAgICAgICAgY29kZWMuYWxpZ24oTW9qb1dlYlRlc3RIZWxwZXJf
UmV2ZXJzZV9QYXJhbXMuZW5jb2RlZFNpemUpLAotICAgICAgICAgIGNvZGVjLmtNZXNzYWdlRXhw
ZWN0c1Jlc3BvbnNlLCAwKTsKLSAgICAgIGJ1aWxkZXIuZW5jb2RlU3RydWN0KE1vam9XZWJUZXN0
SGVscGVyX1JldmVyc2VfUGFyYW1zLCBwYXJhbXMpOwotICAgICAgdmFyIG1lc3NhZ2UgPSBidWls
ZGVyLmZpbmlzaCgpOwotICAgICAgdGhpcy5yZWNlaXZlcl8uYWNjZXB0QW5kRXhwZWN0UmVzcG9u
c2UobWVzc2FnZSkudGhlbihmdW5jdGlvbihtZXNzYWdlKSB7Ci0gICAgICAgIHZhciByZWFkZXIg
PSBuZXcgY29kZWMuTWVzc2FnZVJlYWRlcihtZXNzYWdlKTsKLSAgICAgICAgdmFyIHJlc3BvbnNl
UGFyYW1zID0KLSAgICAgICAgICAgIHJlYWRlci5kZWNvZGVTdHJ1Y3QoTW9qb1dlYlRlc3RIZWxw
ZXJfUmV2ZXJzZV9SZXNwb25zZVBhcmFtcyk7Ci0gICAgICAgIHJlc29sdmUocmVzcG9uc2VQYXJh
bXMpOwotICAgICAgfSkuY2F0Y2goZnVuY3Rpb24ocmVzdWx0KSB7Ci0gICAgICAgIHJlamVjdChF
cnJvcigiQ29ubmVjdGlvbiBlcnJvcjogIiArIHJlc3VsdCkpOwotICAgICAgfSk7Ci0gICAgfS5i
aW5kKHRoaXMpKTsKLSAgfTsKLQotICBmdW5jdGlvbiBNb2pvV2ViVGVzdEhlbHBlclN0dWIoZGVs
ZWdhdGUpIHsKLSAgICB0aGlzLmRlbGVnYXRlXyA9IGRlbGVnYXRlOwotICB9Ci0gIE1vam9XZWJU
ZXN0SGVscGVyU3R1Yi5wcm90b3R5cGUucmV2ZXJzZSA9IGZ1bmN0aW9uKG1lc3NhZ2UpIHsKLSAg
ICByZXR1cm4gdGhpcy5kZWxlZ2F0ZV8gJiYgdGhpcy5kZWxlZ2F0ZV8ucmV2ZXJzZSAmJiB0aGlz
LmRlbGVnYXRlXy5yZXZlcnNlKG1lc3NhZ2UpOwotICB9Ci0KLSAgTW9qb1dlYlRlc3RIZWxwZXJT
dHViLnByb3RvdHlwZS5hY2NlcHQgPSBmdW5jdGlvbihtZXNzYWdlKSB7Ci0gICAgdmFyIHJlYWRl
ciA9IG5ldyBjb2RlYy5NZXNzYWdlUmVhZGVyKG1lc3NhZ2UpOwotICAgIHN3aXRjaCAocmVhZGVy
Lm1lc3NhZ2VOYW1lKSB7Ci0gICAgZGVmYXVsdDoKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9
Ci0gIH07Ci0KLSAgTW9qb1dlYlRlc3RIZWxwZXJTdHViLnByb3RvdHlwZS5hY2NlcHRXaXRoUmVz
cG9uZGVyID0KLSAgICAgIGZ1bmN0aW9uKG1lc3NhZ2UsIHJlc3BvbmRlcikgewotICAgIHZhciBy
ZWFkZXIgPSBuZXcgY29kZWMuTWVzc2FnZVJlYWRlcihtZXNzYWdlKTsKLSAgICBzd2l0Y2ggKHJl
YWRlci5tZXNzYWdlTmFtZSkgewotICAgIGNhc2Uga01vam9XZWJUZXN0SGVscGVyX1JldmVyc2Vf
TmFtZToKLSAgICAgIHZhciBwYXJhbXMgPSByZWFkZXIuZGVjb2RlU3RydWN0KE1vam9XZWJUZXN0
SGVscGVyX1JldmVyc2VfUGFyYW1zKTsKLSAgICAgIHRoaXMucmV2ZXJzZShwYXJhbXMubWVzc2Fn
ZSkudGhlbihmdW5jdGlvbihyZXNwb25zZSkgewotICAgICAgICB2YXIgcmVzcG9uc2VQYXJhbXMg
PQotICAgICAgICAgICAgbmV3IE1vam9XZWJUZXN0SGVscGVyX1JldmVyc2VfUmVzcG9uc2VQYXJh
bXMoKTsKLSAgICAgICAgcmVzcG9uc2VQYXJhbXMucmV2ZXJzZWQgPSByZXNwb25zZS5yZXZlcnNl
ZDsKLSAgICAgICAgdmFyIGJ1aWxkZXIgPSBuZXcgY29kZWMuTWVzc2FnZVYxQnVpbGRlcigKLSAg
ICAgICAgICAgIGtNb2pvV2ViVGVzdEhlbHBlcl9SZXZlcnNlX05hbWUsCi0gICAgICAgICAgICBj
b2RlYy5hbGlnbihNb2pvV2ViVGVzdEhlbHBlcl9SZXZlcnNlX1Jlc3BvbnNlUGFyYW1zLmVuY29k
ZWRTaXplKSwKLSAgICAgICAgICAgIGNvZGVjLmtNZXNzYWdlSXNSZXNwb25zZSwgcmVhZGVyLnJl
cXVlc3RJRCk7Ci0gICAgICAgIGJ1aWxkZXIuZW5jb2RlU3RydWN0KE1vam9XZWJUZXN0SGVscGVy
X1JldmVyc2VfUmVzcG9uc2VQYXJhbXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJl
c3BvbnNlUGFyYW1zKTsKLSAgICAgICAgdmFyIG1lc3NhZ2UgPSBidWlsZGVyLmZpbmlzaCgpOwot
ICAgICAgICByZXNwb25kZXIuYWNjZXB0KG1lc3NhZ2UpOwotICAgICAgfSk7Ci0gICAgICByZXR1
cm4gdHJ1ZTsKLSAgICBkZWZhdWx0OgotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgfTsK
LQotICBmdW5jdGlvbiB2YWxpZGF0ZU1vam9XZWJUZXN0SGVscGVyUmVxdWVzdChtZXNzYWdlVmFs
aWRhdG9yKSB7Ci0gICAgdmFyIG1lc3NhZ2UgPSBtZXNzYWdlVmFsaWRhdG9yLm1lc3NhZ2U7Ci0g
ICAgdmFyIHBhcmFtc0NsYXNzID0gbnVsbDsKLSAgICBzd2l0Y2ggKG1lc3NhZ2UuZ2V0TmFtZSgp
KSB7Ci0gICAgICBjYXNlIGtNb2pvV2ViVGVzdEhlbHBlcl9SZXZlcnNlX05hbWU6Ci0gICAgICAg
IGlmIChtZXNzYWdlLmV4cGVjdHNSZXNwb25zZSgpKQotICAgICAgICAgIHBhcmFtc0NsYXNzID0g
TW9qb1dlYlRlc3RIZWxwZXJfUmV2ZXJzZV9QYXJhbXM7Ci0gICAgICBicmVhazsKLSAgICB9Ci0g
ICAgaWYgKHBhcmFtc0NsYXNzID09PSBudWxsKQotICAgICAgcmV0dXJuIHZhbGlkYXRvci52YWxp
ZGF0aW9uRXJyb3IuTk9ORTsKLSAgICByZXR1cm4gcGFyYW1zQ2xhc3MudmFsaWRhdGUobWVzc2Fn
ZVZhbGlkYXRvciwgbWVzc2FnZVZhbGlkYXRvci5tZXNzYWdlLmdldEhlYWRlck51bUJ5dGVzKCkp
OwotICB9Ci0KLSAgZnVuY3Rpb24gdmFsaWRhdGVNb2pvV2ViVGVzdEhlbHBlclJlc3BvbnNlKG1l
c3NhZ2VWYWxpZGF0b3IpIHsKLSAgIHZhciBtZXNzYWdlID0gbWVzc2FnZVZhbGlkYXRvci5tZXNz
YWdlOwotICAgdmFyIHBhcmFtc0NsYXNzID0gbnVsbDsKLSAgIHN3aXRjaCAobWVzc2FnZS5nZXRO
YW1lKCkpIHsKLSAgICAgIGNhc2Uga01vam9XZWJUZXN0SGVscGVyX1JldmVyc2VfTmFtZToKLSAg
ICAgICAgaWYgKG1lc3NhZ2UuaXNSZXNwb25zZSgpKQotICAgICAgICAgIHBhcmFtc0NsYXNzID0g
TW9qb1dlYlRlc3RIZWxwZXJfUmV2ZXJzZV9SZXNwb25zZVBhcmFtczsKLSAgICAgICAgYnJlYWs7
Ci0gICAgfQotICAgIGlmIChwYXJhbXNDbGFzcyA9PT0gbnVsbCkKLSAgICAgIHJldHVybiB2YWxp
ZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkU7Ci0gICAgcmV0dXJuIHBhcmFtc0NsYXNzLnZhbGlk
YXRlKG1lc3NhZ2VWYWxpZGF0b3IsIG1lc3NhZ2VWYWxpZGF0b3IubWVzc2FnZS5nZXRIZWFkZXJO
dW1CeXRlcygpKTsKLSAgfQotCi0gIHZhciBNb2pvV2ViVGVzdEhlbHBlciA9IHsKLSAgICBuYW1l
OiAnY29udGVudC5tb2pvbS5Nb2pvV2ViVGVzdEhlbHBlcicsCi0gICAga1ZlcnNpb246IDAsCi0g
ICAgcHRyQ2xhc3M6IE1vam9XZWJUZXN0SGVscGVyUHRyLAotICAgIHByb3h5Q2xhc3M6IE1vam9X
ZWJUZXN0SGVscGVyUHJveHksCi0gICAgc3R1YkNsYXNzOiBNb2pvV2ViVGVzdEhlbHBlclN0dWIs
Ci0gICAgdmFsaWRhdGVSZXF1ZXN0OiB2YWxpZGF0ZU1vam9XZWJUZXN0SGVscGVyUmVxdWVzdCwK
LSAgICB2YWxpZGF0ZVJlc3BvbnNlOiB2YWxpZGF0ZU1vam9XZWJUZXN0SGVscGVyUmVzcG9uc2Us
Ci0gIH07Ci0gIE1vam9XZWJUZXN0SGVscGVyU3R1Yi5wcm90b3R5cGUudmFsaWRhdG9yID0gdmFs
aWRhdGVNb2pvV2ViVGVzdEhlbHBlclJlcXVlc3Q7Ci0gIE1vam9XZWJUZXN0SGVscGVyUHJveHku
cHJvdG90eXBlLnZhbGlkYXRvciA9IHZhbGlkYXRlTW9qb1dlYlRlc3RIZWxwZXJSZXNwb25zZTsK
LSAgZXhwb3J0cy5Nb2pvV2ViVGVzdEhlbHBlciA9IE1vam9XZWJUZXN0SGVscGVyOwotICBleHBv
cnRzLk1vam9XZWJUZXN0SGVscGVyUHRyID0gTW9qb1dlYlRlc3RIZWxwZXJQdHI7Ci0gIGV4cG9y
dHMuTW9qb1dlYlRlc3RIZWxwZXJBc3NvY2lhdGVkUHRyID0gTW9qb1dlYlRlc3RIZWxwZXJBc3Nv
Y2lhdGVkUHRyOwotfSkoKTsKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93
ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL21vam9fd2ViX3Rlc3RfaGVscGVy
X3Rlc3QubW9qb20uanMuaGVhZGVycyBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxh
dGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL21vam9fd2ViX3Rlc3RfaGVscGVyX3Rlc3Qu
bW9qb20uanMuaGVhZGVycwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjgwNWMzMjNk
ZjVhOTc1MjMxNjQ4YjgzMGUzM2NlMTgzYzNjYmJkMy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMAotLS0gYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRm
b3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS9tb2pvX3dlYl90ZXN0X2hlbHBlcl90ZXN0Lm1v
am9tLmpzLmhlYWRlcnMKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi1Db250ZW50LVR5cGU6
IHRleHQvamF2YXNjcmlwdDsgY2hhcnNldD11dGYtOApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMv
aW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vbmZjLW1v
Y2suanMgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291
cmNlcy9jaHJvbWl1bS9uZmMtbW9jay5qcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MWE3ZTE1ODE5ZTY3Y2UwYmM5ZDFkYjg0MWNiNGYwOTEzNjRlODEzOC4uMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mv
d2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS9uZmMtbW9jay5qcworKysgL2Rl
di9udWxsCkBAIC0xLDQzMCArMCwwIEBACi0ndXNlIHN0cmljdCc7Ci0KLS8vIENvbnZlcnRzIGJl
dHdlZW4gTkRFRk1lc3NhZ2VJbml0IGh0dHBzOi8vdzNjLmdpdGh1Yi5pby93ZWItbmZjLyNkb20t
bmRlZm1lc3NhZ2UKLS8vIGFuZCBtb2pvbS5OREVGTWVzc2FnZSBzdHJ1Y3R1cmUsIHNvIHRoYXQg
d2F0Y2ggZnVuY3Rpb24gY2FuIGJlIHRlc3RlZC4KLWZ1bmN0aW9uIHRvTW9qb05ERUZNZXNzYWdl
KG1lc3NhZ2UpIHsKLSAgbGV0IG5kZWZNZXNzYWdlID0gbmV3IGRldmljZS5tb2pvbS5OREVGTWVz
c2FnZSgpOwotICBuZGVmTWVzc2FnZS5kYXRhID0gW107Ci0gIGZvciAobGV0IHJlY29yZCBvZiBt
ZXNzYWdlLnJlY29yZHMpIHsKLSAgICBuZGVmTWVzc2FnZS5kYXRhLnB1c2godG9Nb2pvTkRFRlJl
Y29yZChyZWNvcmQpKTsKLSAgfQotICByZXR1cm4gbmRlZk1lc3NhZ2U7Ci19Ci0KLWZ1bmN0aW9u
IHRvTW9qb05ERUZSZWNvcmQocmVjb3JkKSB7Ci0gIGxldCBuZmNSZWNvcmQgPSBuZXcgZGV2aWNl
Lm1vam9tLk5ERUZSZWNvcmQoKTsKLSAgLy8gU2ltcGx5IGNoZWNrcyB0aGUgZXhpc3RlbmNlIG9m
ICc6JyB0byBkZWNpZGUgd2hldGhlciBpdCdzIGFuIGV4dGVybmFsCi0gIC8vIHR5cGUgb3IgYSBs
b2NhbCB0eXBlLiBBcyBhIG1vY2ssIG5vIG5lZWQgdG8gcmVhbGx5IGltcGxlbWVudCB0aGUgdmFs
aWRhdGlvbgotICAvLyBhbGdvcml0aG1zIGZvciB0aGVtLgotICBpZiAocmVjb3JkLnJlY29yZFR5
cGUuc3RhcnRzV2l0aCgnOicpKSB7Ci0gICAgbmZjUmVjb3JkLmNhdGVnb3J5ID0gZGV2aWNlLm1v
am9tLk5ERUZSZWNvcmRUeXBlQ2F0ZWdvcnkua0xvY2FsOwotICB9IGVsc2UgaWYgKHJlY29yZC5y
ZWNvcmRUeXBlLnNlYXJjaCgnOicpICE9IC0xKSB7Ci0gICAgbmZjUmVjb3JkLmNhdGVnb3J5ID0g
ZGV2aWNlLm1vam9tLk5ERUZSZWNvcmRUeXBlQ2F0ZWdvcnkua0V4dGVybmFsOwotICB9IGVsc2Ug
ewotICAgIG5mY1JlY29yZC5jYXRlZ29yeSA9IGRldmljZS5tb2pvbS5OREVGUmVjb3JkVHlwZUNh
dGVnb3J5LmtTdGFuZGFyZGl6ZWQ7Ci0gIH0KLSAgbmZjUmVjb3JkLnJlY29yZFR5cGUgPSByZWNv
cmQucmVjb3JkVHlwZTsKLSAgbmZjUmVjb3JkLm1lZGlhVHlwZSA9IHJlY29yZC5tZWRpYVR5cGU7
Ci0gIG5mY1JlY29yZC5pZCA9IHJlY29yZC5pZDsKLSAgaWYgKHJlY29yZC5yZWNvcmRUeXBlID09
ICd0ZXh0JykgewotICAgIG5mY1JlY29yZC5lbmNvZGluZyA9IHJlY29yZC5lbmNvZGluZyA9PSBu
dWxsPyAndXRmLTgnOiByZWNvcmQuZW5jb2Rpbmc7Ci0gICAgbmZjUmVjb3JkLmxhbmcgPSByZWNv
cmQubGFuZyA9PSBudWxsPyAnZW4nOiByZWNvcmQubGFuZzsKLSAgfQotICBuZmNSZWNvcmQuZGF0
YSA9IHRvQnl0ZUFycmF5KHJlY29yZC5kYXRhKTsKLSAgaWYgKHJlY29yZC5kYXRhICE9IG51bGwg
JiYgcmVjb3JkLmRhdGEucmVjb3JkcyAhPT0gdW5kZWZpbmVkKSB7Ci0gICAgLy8gfHJlY29yZC5k
YXRhfCBtYXkgYmUgYW4gTkRFRk1lc3NhZ2VJbml0LCBpLmUuIHRoZSBwYXlsb2FkIGlzIGEgbWVz
c2FnZS4KLSAgICBuZmNSZWNvcmQucGF5bG9hZE1lc3NhZ2UgPSB0b01vam9OREVGTWVzc2FnZShy
ZWNvcmQuZGF0YSk7Ci0gIH0KLSAgcmV0dXJuIG5mY1JlY29yZDsKLX0KLQotLy8gQ29udmVydHMg
SlMgb2JqZWN0cyB0byBieXRlIGFycmF5LgotZnVuY3Rpb24gdG9CeXRlQXJyYXkoZGF0YSkgewot
ICBpZiAoZGF0YSBpbnN0YW5jZW9mIEFycmF5QnVmZmVyKQotICAgIHJldHVybiBuZXcgVWludDhB
cnJheShkYXRhKTsKLSAgZWxzZSBpZiAoQXJyYXlCdWZmZXIuaXNWaWV3KGRhdGEpKQotICAgIHJl
dHVybiBuZXcgVWludDhBcnJheShkYXRhLmJ1ZmZlciwgZGF0YS5ieXRlT2Zmc2V0LCBkYXRhLmJ5
dGVMZW5ndGgpOwotCi0gIGxldCBieXRlQXJyYXkgPSBuZXcgVWludDhBcnJheSgwKTsKLSAgbGV0
IHRtcERhdGEgPSBkYXRhOwotICBpZiAodHlwZW9mIHRtcERhdGEgPT09ICdvYmplY3QnIHx8IHR5
cGVvZiB0bXBEYXRhID09PSAnbnVtYmVyJykKLSAgICB0bXBEYXRhID0gSlNPTi5zdHJpbmdpZnko
dG1wRGF0YSk7Ci0KLSAgaWYgKHR5cGVvZiB0bXBEYXRhID09PSAnc3RyaW5nJykKLSAgICBieXRl
QXJyYXkgPSBuZXcgVGV4dEVuY29kZXIoJ3V0Zi04JykuZW5jb2RlKHRtcERhdGEpOwotCi0gIHJl
dHVybiBieXRlQXJyYXk7Ci19Ci0KLS8vIENvbXBhcmVzIE5ERUZSZWNvcmRzIHRoYXQgd2VyZSBw
cm92aWRlZCAvIHJlY2VpdmVkIGJ5IHRoZSBtb2NrIHNlcnZpY2UuCi0vLyBUT0RPOiBVc2UgZGlm
ZmVyZW50IGdldHRlcnMgdG8gZ2V0IHJlY2VpdmVkIHJlY29yZCBkYXRhLAotLy8gc2VlIHNwZWMg
Y2hhbmdlcyBhdCBodHRwczovL2dpdGh1Yi5jb20vdzNjL3dlYi1uZmMvcHVsbC8yNDMuCi1mdW5j
dGlvbiBjb21wYXJlTkRFRlJlY29yZHMocHJvdmlkZWRSZWNvcmQsIHJlY2VpdmVkUmVjb3JkKSB7
Ci0gIGFzc2VydF9lcXVhbHMocHJvdmlkZWRSZWNvcmQucmVjb3JkVHlwZSwgcmVjZWl2ZWRSZWNv
cmQucmVjb3JkVHlwZSk7Ci0KLSAgaWYgKHByb3ZpZGVkUmVjb3JkLmlkID09PSB1bmRlZmluZWQp
IHsKLSAgICBhc3NlcnRfZXF1YWxzKG51bGwsIHJlY2VpdmVkUmVjb3JkLmlkKTsKLSAgfSBlbHNl
IHsKLSAgICBhc3NlcnRfZXF1YWxzKHByb3ZpZGVkUmVjb3JkLmlkLCByZWNlaXZlZFJlY29yZC5p
ZCk7Ci0gIH0KLQotICBpZiAocHJvdmlkZWRSZWNvcmQubWVkaWFUeXBlID09PSB1bmRlZmluZWQp
IHsKLSAgICBhc3NlcnRfZXF1YWxzKG51bGwsIHJlY2VpdmVkUmVjb3JkLm1lZGlhVHlwZSk7Ci0g
IH0gZWxzZSB7Ci0gICAgYXNzZXJ0X2VxdWFscyhwcm92aWRlZFJlY29yZC5tZWRpYVR5cGUsIHJl
Y2VpdmVkUmVjb3JkLm1lZGlhVHlwZSk7Ci0gIH0KLQotICBhc3NlcnRfbm90X2VxdWFscyhwcm92
aWRlZFJlY29yZC5yZWNvcmRUeXBlLCAnZW1wdHknKTsKLQotICBpZiAocHJvdmlkZWRSZWNvcmQu
cmVjb3JkVHlwZSA9PSAndGV4dCcpIHsKLSAgICBhc3NlcnRfZXF1YWxzKAotICAgICAgICBwcm92
aWRlZFJlY29yZC5lbmNvZGluZyA9PSBudWxsPyAndXRmLTgnOiBwcm92aWRlZFJlY29yZC5lbmNv
ZGluZywKLSAgICAgICAgcmVjZWl2ZWRSZWNvcmQuZW5jb2RpbmcpOwotICAgIGFzc2VydF9lcXVh
bHMocHJvdmlkZWRSZWNvcmQubGFuZyA9PSBudWxsPyAnZW4nOiBwcm92aWRlZFJlY29yZC5sYW5n
LAotICAgICAgICAgICAgICAgICAgcmVjZWl2ZWRSZWNvcmQubGFuZyk7Ci0gIH0gZWxzZSB7Ci0g
ICAgYXNzZXJ0X2VxdWFscyhudWxsLCByZWNlaXZlZFJlY29yZC5lbmNvZGluZyk7Ci0gICAgYXNz
ZXJ0X2VxdWFscyhudWxsLCByZWNlaXZlZFJlY29yZC5sYW5nKTsKLSAgfQotCi0gIGFzc2VydF9h
cnJheV9lcXVhbHModG9CeXRlQXJyYXkocHJvdmlkZWRSZWNvcmQuZGF0YSksCi0gICAgICAgICAg
ICAgICAgICAgICAgbmV3IFVpbnQ4QXJyYXkocmVjZWl2ZWRSZWNvcmQuZGF0YSkpOwotfQotCi0v
LyBDb21wYXJlcyBOREVGV3JpdGVPcHRpb25zIHN0cnVjdHVyZXMgdGhhdCB3ZXJlIHByb3ZpZGVk
IHRvIEFQSSBhbmQKLS8vIHJlY2VpdmVkIGJ5IHRoZSBtb2NrIG1vam8gc2VydmljZS4KLWZ1bmN0
aW9uIGFzc2VydE5ERUZXcml0ZU9wdGlvbnNFcXVhbChwcm92aWRlZCwgcmVjZWl2ZWQpIHsKLSAg
aWYgKHByb3ZpZGVkLmlnbm9yZVJlYWQgIT09IHVuZGVmaW5lZCkKLSAgICBhc3NlcnRfZXF1YWxz
KHByb3ZpZGVkLmlnbm9yZVJlYWQsICEhcmVjZWl2ZWQuaWdub3JlUmVhZCk7Ci0gIGVsc2UKLSAg
ICBhc3NlcnRfZXF1YWxzKCEhcmVjZWl2ZWQuaWdub3JlX3JlYWQsIHRydWUpOwotfQotCi0vLyBD
b21wYXJlcyBOREVGUmVhZGVyT3B0aW9ucyBzdHJ1Y3R1cmVzIHRoYXQgd2VyZSBwcm92aWRlZCB0
byBBUEkgYW5kCi0vLyByZWNlaXZlZCBieSB0aGUgbW9jayBtb2pvIHNlcnZpY2UuCi1mdW5jdGlv
biBhc3NlcnROREVGUmVhZGVyT3B0aW9uc0VxdWFsKHByb3ZpZGVkLCByZWNlaXZlZCkgewotICBp
ZiAocHJvdmlkZWQudXJsICE9PSB1bmRlZmluZWQpCi0gICAgYXNzZXJ0X2VxdWFscyhwcm92aWRl
ZC51cmwsIHJlY2VpdmVkLnVybCk7Ci0gIGVsc2UKLSAgICBhc3NlcnRfZXF1YWxzKHJlY2VpdmVk
LnVybCwgJycpOwotCi0gIGlmIChwcm92aWRlZC5tZWRpYVR5cGUgIT09IHVuZGVmaW5lZCkKLSAg
ICBhc3NlcnRfZXF1YWxzKHByb3ZpZGVkLm1lZGlhVHlwZSwgcmVjZWl2ZWQubWVkaWFUeXBlKTsK
LSAgZWxzZQotICAgIGFzc2VydF9lcXVhbHMocmVjZWl2ZWQubWVkaWFUeXBlLCAnJyk7Ci0KLSAg
aWYgKHByb3ZpZGVkLnJlY29yZFR5cGUgIT09IHVuZGVmaW5lZCkgewotICAgIGFzc2VydF9lcXVh
bHMocHJvdmlkZWQucmVjb3JkVHlwZSwgcmVjZWl2ZWQucmVjb3JkVHlwZSk7Ci0gIH0KLX0KLQot
Ly8gQ2hlY2tzIHdoZXRoZXIgTkRFRlJlYWRlck9wdGlvbnMgYXJlIG1hdGNoZWQgd2l0aCBnaXZl
biBtZXNzYWdlLgotZnVuY3Rpb24gbWF0Y2hlc1dhdGNoT3B0aW9ucyhtZXNzYWdlLCBvcHRpb25z
KSB7Ci0gIC8vIEEgbWVzc2FnZSB3aXRoIG5vIHJlY29yZHMgaXMgdG8gbm90aWZ5IHRoYXQgdGhl
IHRhZyBpcyBhbHJlYWR5IGZvcm1hdHRlZCB0bwotICAvLyBzdXBwb3J0IE5ERUYgYnV0IGRvZXMg
bm90IGNvbnRhaW4gYSBtZXNzYWdlIHlldC4gV2UgYWx3YXlzIGRpc3BhdGNoIGl0IGZvcgotICAv
LyBhbGwgb3B0aW9ucy4KLSAgaWYgKG1lc3NhZ2UucmVjb3Jkcy5sZW5ndGggPT0gMCkKLSAgICBy
ZXR1cm4gdHJ1ZTsKLQotICBmb3IgKGxldCByZWNvcmQgb2YgbWVzc2FnZS5yZWNvcmRzKSB7Ci0g
ICAgaWYgKG9wdGlvbnMuaWQgIT0gbnVsbCAmJiBvcHRpb25zLmlkICE9PSByZWNvcmQuaWQpIHsK
LSAgICAgIGNvbnRpbnVlOwotICAgIH0KLSAgICBpZiAob3B0aW9ucy5yZWNvcmRUeXBlICE9IG51
bGwgJiYKLSAgICAgICAgb3B0aW9ucy5yZWNvcmRUeXBlICE9PSByZWNvcmQucmVjb3JkVHlwZSkg
ewotICAgICAgY29udGludWU7Ci0gICAgfQotICAgIGlmIChvcHRpb25zLm1lZGlhVHlwZSAhPSBu
dWxsICYmIG9wdGlvbnMubWVkaWFUeXBlICE9PSByZWNvcmQubWVkaWFUeXBlKSB7Ci0gICAgICBj
b250aW51ZTsKLSAgICB9Ci0KLSAgICAvLyBGb3VuZCBvbmUgcmVjb3JkIG1hdGNoZXMsIG1lYW5z
IHRoZSBtZXNzYWdlIG1hdGNoZXMuCi0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLQotICByZXR1cm4g
ZmFsc2U7Ci19Ci0KLWZ1bmN0aW9uIGNyZWF0ZU5ERUZFcnJvcih0eXBlKSB7Ci0gIHJldHVybiB7
Ci0gICAgZXJyb3I6IHR5cGUgIT0gbnVsbCA/Ci0gICAgICAgIG5ldyBkZXZpY2UubW9qb20uTkRF
RkVycm9yKHtlcnJvclR5cGU6IHR5cGUsIGVycm9yTWVzc2FnZTogJyd9KSA6Ci0gICAgICAgIG51
bGwKLSAgfTsKLX0KLQotdmFyIFdlYk5GQ1Rlc3QgPSAoKCkgPT4gewotICBjbGFzcyBNb2NrTkZD
IHsKLSAgICBjb25zdHJ1Y3RvcigpIHsKLSAgICAgIHRoaXMuYmluZGluZ1NldF8gPSBuZXcgbW9q
by5CaW5kaW5nU2V0KGRldmljZS5tb2pvbS5ORkMpOwotCi0gICAgICB0aGlzLmludGVyY2VwdG9y
XyA9IG5ldyBNb2pvSW50ZXJmYWNlSW50ZXJjZXB0b3IoZGV2aWNlLm1vam9tLk5GQy5uYW1lKTsK
LSAgICAgIHRoaXMuaW50ZXJjZXB0b3JfLm9uaW50ZXJmYWNlcmVxdWVzdCA9IGUgPT4gewotICAg
ICAgICBpZiAodGhpcy5zaG91bGRfY2xvc2VfcGlwZV9vbl9yZXF1ZXN0XykKLSAgICAgICAgICBl
LmhhbmRsZS5jbG9zZSgpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgdGhpcy5iaW5kaW5nU2V0
Xy5hZGRCaW5kaW5nKHRoaXMsIGUuaGFuZGxlKTsKLSAgICAgIH0KLQotICAgICAgdGhpcy5pbnRl
cmNlcHRvcl8uc3RhcnQoKTsKLQotICAgICAgdGhpcy5od19zdGF0dXNfID0gTkZDSFdTdGF0dXMu
RU5BQkxFRDsKLSAgICAgIHRoaXMucHVzaGVkX21lc3NhZ2VfID0gbnVsbDsKLSAgICAgIHRoaXMu
cGVuZGluZ193cml0ZV9vcHRpb25zXyA9IG51bGw7Ci0gICAgICB0aGlzLnBlbmRpbmdfcHJvbWlz
ZV9mdW5jXyA9IG51bGw7Ci0gICAgICB0aGlzLnB1c2hfY29tcGxldGVkXyA9IHRydWU7Ci0gICAg
ICB0aGlzLmNsaWVudF8gPSBudWxsOwotICAgICAgdGhpcy53YXRjaGVyc18gPSBbXTsKLSAgICAg
IHRoaXMucmVhZGluZ19tZXNzYWdlc18gPSBbXTsKLSAgICAgIHRoaXMub3BlcmF0aW9uc19zdXNw
ZW5kZWRfID0gZmFsc2U7Ci0gICAgICB0aGlzLmlzX2Zvcm1hdHRlZF90YWdfID0gZmFsc2U7Ci0g
ICAgICB0aGlzLmRhdGFfdHJhbnNmZXJfZmFpbGVkXyA9IGZhbHNlOwotICAgICAgdGhpcy5zaG91
bGRfY2xvc2VfcGlwZV9vbl9yZXF1ZXN0XyA9IGZhbHNlOwotICAgIH0KLQotICAgIC8vIE5GQyBk
ZWxlZ2F0ZSBmdW5jdGlvbnMuCi0gICAgYXN5bmMgcHVzaChtZXNzYWdlLCBvcHRpb25zKSB7Ci0g
ICAgICBsZXQgZXJyb3IgPSB0aGlzLmdldEhXRXJyb3IoKTsKLSAgICAgIGlmIChlcnJvcikKLSAg
ICAgICAgcmV0dXJuIGVycm9yOwotICAgICAgLy8gQ2FuY2VscyBwcmV2aW91cyBwZW5kaW5nIHB1
c2ggb3BlcmF0aW9uLgotICAgICAgaWYgKHRoaXMucGVuZGluZ19wcm9taXNlX2Z1bmNfKSB7Ci0g
ICAgICAgIHRoaXMuY2FuY2VsUGVuZGluZ1B1c2hPcGVyYXRpb24oKTsKLSAgICAgIH0KLQotICAg
ICAgdGhpcy5wdXNoZWRfbWVzc2FnZV8gPSBtZXNzYWdlOwotICAgICAgdGhpcy5wZW5kaW5nX3dy
aXRlX29wdGlvbnNfID0gb3B0aW9uczsKLSAgICAgIHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZl
ID0+IHsKLSAgICAgICAgaWYgKHRoaXMub3BlcmF0aW9uc19zdXNwZW5kZWRfIHx8ICF0aGlzLnB1
c2hfY29tcGxldGVkXykgewotICAgICAgICAgIC8vIExlYXZlcyB0aGUgcHVzaCBwZW5kaW5nLgot
ICAgICAgICAgIHRoaXMucGVuZGluZ19wcm9taXNlX2Z1bmNfID0gcmVzb2x2ZTsKLSAgICAgICAg
fSBlbHNlIGlmICh0aGlzLmlzX2Zvcm1hdHRlZF90YWdfICYmICFvcHRpb25zLm92ZXJ3cml0ZSkg
ewotICAgICAgICAgIC8vIFJlc29sdmVzIHdpdGggTm90QWxsb3dlZEVycm9yIGlmIHRoZXJlIGFy
ZSBOREVGIHJlY29yZHMgb24gdGhlIGRldmljZQotICAgICAgICAgIC8vIGFuZCBvdmVyd3JpdGUg
aXMgZmFsc2UuCi0gICAgICAgICAgcmVzb2x2ZShjcmVhdGVOREVGRXJyb3IoZGV2aWNlLm1vam9t
Lk5ERUZFcnJvclR5cGUuTk9UX0FMTE9XRUQpKTsKLSAgICAgICAgfSBlbHNlIGlmICh0aGlzLmRh
dGFfdHJhbnNmZXJfZmFpbGVkXykgewotICAgICAgICAgIC8vIFJlc29sdmVzIHdpdGggTmV0d29y
a0Vycm9yIGlmIGRhdGEgdHJhbnNmZXIgZmFpbHMuCi0gICAgICAgICAgcmVzb2x2ZShjcmVhdGVO
REVGRXJyb3IoZGV2aWNlLm1vam9tLk5ERUZFcnJvclR5cGUuSU9fRVJST1IpKTsKLSAgICAgICAg
fSBlbHNlIHsKLSAgICAgICAgICByZXNvbHZlKGNyZWF0ZU5ERUZFcnJvcihudWxsKSk7Ci0gICAg
ICAgIH0KLSAgICAgIH0pOwotICAgIH0KLQotICAgIGFzeW5jIGNhbmNlbFB1c2goKSB7Ci0gICAg
ICB0aGlzLmNhbmNlbFBlbmRpbmdQdXNoT3BlcmF0aW9uKCk7Ci0gICAgICByZXR1cm4gY3JlYXRl
TkRFRkVycm9yKG51bGwpOwotICAgIH0KLQotICAgIHNldENsaWVudChjbGllbnQpIHsKLSAgICAg
IHRoaXMuY2xpZW50XyA9IGNsaWVudDsKLSAgICB9Ci0KLSAgICBhc3luYyB3YXRjaChvcHRpb25z
LCBpZCkgewotICAgICAgYXNzZXJ0X3RydWUoaWQgPiAwKTsKLSAgICAgIGxldCBlcnJvciA9IHRo
aXMuZ2V0SFdFcnJvcigpOwotICAgICAgaWYgKGVycm9yKSB7Ci0gICAgICAgIHJldHVybiBlcnJv
cjsKLSAgICAgIH0KLQotICAgICAgdGhpcy53YXRjaGVyc18ucHVzaCh7aWQ6IGlkLCBvcHRpb25z
OiBvcHRpb25zfSk7Ci0gICAgICAvLyBJZ25vcmVzIHJlYWRpbmcgaWYgTkZDIG9wZXJhdGlvbiBp
cyBzdXNwZW5kZWQKLSAgICAgIC8vIG9yIHRoZSBORkMgdGFnIGRvZXMgbm90IGV4cG9zZSBOREVG
IHRlY2hub2xvZ3kuCi0gICAgICBpZiAoIXRoaXMub3BlcmF0aW9uc19zdXNwZW5kZWRfKSB7Ci0g
ICAgICAgIC8vIFRyaWdnZXJzIG9uV2F0Y2ggaWYgdGhlIG5ldyB3YXRjaGVyIG1hdGNoZXMgZXhp
c3RpbmcgbWVzc2FnZXMuCi0gICAgICAgIGZvciAobGV0IG1lc3NhZ2Ugb2YgdGhpcy5yZWFkaW5n
X21lc3NhZ2VzXykgewotICAgICAgICAgIGlmIChtYXRjaGVzV2F0Y2hPcHRpb25zKG1lc3NhZ2Us
IG9wdGlvbnMpKSB7Ci0gICAgICAgICAgICB0aGlzLmNsaWVudF8ub25XYXRjaCgKLSAgICAgICAg
ICAgICAgICBbaWRdLCBmYWtlX3RhZ19zZXJpYWxfbnVtYmVyLCB0b01vam9OREVGTWVzc2FnZSht
ZXNzYWdlKSk7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0KLSAgICAgIHJldHVy
biBjcmVhdGVOREVGRXJyb3IobnVsbCk7Ci0gICAgfQotCi0gICAgYXN5bmMgY2FuY2VsV2F0Y2go
aWQpIHsKLSAgICAgIGxldCBpbmRleCA9IHRoaXMud2F0Y2hlcnNfLmZpbmRJbmRleCh2YWx1ZSA9
PiB2YWx1ZS5pZCA9PT0gaWQpOwotICAgICAgaWYgKGluZGV4ID09PSAtMSkgewotICAgICAgICBy
ZXR1cm4gY3JlYXRlTkRFRkVycm9yKGRldmljZS5tb2pvbS5OREVGRXJyb3JUeXBlLk5PVF9GT1VO
RCk7Ci0gICAgICB9Ci0KLSAgICAgIHRoaXMud2F0Y2hlcnNfLnNwbGljZShpbmRleCwgMSk7Ci0g
ICAgICByZXR1cm4gY3JlYXRlTkRFRkVycm9yKG51bGwpOwotICAgIH0KLQotICAgIGFzeW5jIGNh
bmNlbEFsbFdhdGNoZXMoKSB7Ci0gICAgICBpZiAodGhpcy53YXRjaGVyc18ubGVuZ3RoID09PSAw
KSB7Ci0gICAgICAgIHJldHVybiBjcmVhdGVOREVGRXJyb3IoZGV2aWNlLm1vam9tLk5ERUZFcnJv
clR5cGUuTk9UX0ZPVU5EKTsKLSAgICAgIH0KLQotICAgICAgdGhpcy53YXRjaGVyc18uc3BsaWNl
KDAsIHRoaXMud2F0Y2hlcnNfLmxlbmd0aCk7Ci0gICAgICByZXR1cm4gY3JlYXRlTkRFRkVycm9y
KG51bGwpOwotICAgIH0KLQotICAgIGdldEhXRXJyb3IoKSB7Ci0gICAgICBpZiAodGhpcy5od19z
dGF0dXNfID09PSBORkNIV1N0YXR1cy5ESVNBQkxFRCkKLSAgICAgICAgcmV0dXJuIGNyZWF0ZU5E
RUZFcnJvcihkZXZpY2UubW9qb20uTkRFRkVycm9yVHlwZS5OT1RfUkVBREFCTEUpOwotICAgICAg
aWYgKHRoaXMuaHdfc3RhdHVzXyA9PT0gTkZDSFdTdGF0dXMuTk9UX1NVUFBPUlRFRCkKLSAgICAg
ICAgcmV0dXJuIGNyZWF0ZU5ERUZFcnJvcihkZXZpY2UubW9qb20uTkRFRkVycm9yVHlwZS5OT1Rf
U1VQUE9SVEVEKTsKLSAgICAgIHJldHVybiBudWxsOwotICAgIH0KLQotICAgIHNldEhXU3RhdHVz
KHN0YXR1cykgewotICAgICAgdGhpcy5od19zdGF0dXNfID0gc3RhdHVzOwotICAgIH0KLQotICAg
IHB1c2hlZE1lc3NhZ2UoKSB7Ci0gICAgICByZXR1cm4gdGhpcy5wdXNoZWRfbWVzc2FnZV87Ci0g
ICAgfQotCi0gICAgd3JpdGVPcHRpb25zKCkgewotICAgICAgcmV0dXJuIHRoaXMucGVuZGluZ193
cml0ZV9vcHRpb25zXzsKLSAgICB9Ci0KLSAgICB3YXRjaE9wdGlvbnMoKSB7Ci0gICAgICBhc3Nl
cnRfbm90X2VxdWFscyh0aGlzLndhdGNoZXJzXy5sZW5ndGgsIDApOwotICAgICAgcmV0dXJuIHRo
aXMud2F0Y2hlcnNfW3RoaXMud2F0Y2hlcnNfLmxlbmd0aCAtIDFdLm9wdGlvbnM7Ci0gICAgfQot
Ci0gICAgc2V0UGVuZGluZ1B1c2hDb21wbGV0ZWQocmVzdWx0KSB7Ci0gICAgICB0aGlzLnB1c2hf
Y29tcGxldGVkXyA9IHJlc3VsdDsKLSAgICB9Ci0KLSAgICByZXNldCgpIHsKLSAgICAgIHRoaXMu
aHdfc3RhdHVzXyA9IE5GQ0hXU3RhdHVzLkVOQUJMRUQ7Ci0gICAgICB0aGlzLndhdGNoZXJzXyA9
IFtdOwotICAgICAgdGhpcy5yZWFkaW5nX21lc3NhZ2VzXyA9IFtdOwotICAgICAgdGhpcy5vcGVy
YXRpb25zX3N1c3BlbmRlZF8gPSBmYWxzZTsKLSAgICAgIHRoaXMuY2FuY2VsUGVuZGluZ1B1c2hP
cGVyYXRpb24oKTsKLSAgICAgIHRoaXMuaXNfZm9ybWF0dGVkX3RhZ18gPSBmYWxzZTsKLSAgICAg
IHRoaXMuZGF0YV90cmFuc2Zlcl9mYWlsZWRfID0gZmFsc2U7Ci0gICAgICB0aGlzLnNob3VsZF9j
bG9zZV9waXBlX29uX3JlcXVlc3RfID0gZmFsc2U7Ci0gICAgfQotCi0gICAgY2FuY2VsUGVuZGlu
Z1B1c2hPcGVyYXRpb24oKSB7Ci0gICAgICBpZiAodGhpcy5wZW5kaW5nX3Byb21pc2VfZnVuY18p
IHsKLSAgICAgICAgdGhpcy5wZW5kaW5nX3Byb21pc2VfZnVuY18oCi0gICAgICAgICAgICBjcmVh
dGVOREVGRXJyb3IoZGV2aWNlLm1vam9tLk5ERUZFcnJvclR5cGUuT1BFUkFUSU9OX0NBTkNFTExF
RCkpOwotICAgICAgICB0aGlzLnBlbmRpbmdfcHJvbWlzZV9mdW5jXyA9IG51bGw7Ci0gICAgICB9
Ci0KLSAgICAgIHRoaXMucHVzaGVkX21lc3NhZ2VfID0gbnVsbDsKLSAgICAgIHRoaXMucGVuZGlu
Z193cml0ZV9vcHRpb25zXyA9IG51bGw7Ci0gICAgICB0aGlzLnB1c2hfY29tcGxldGVkXyA9IHRy
dWU7Ci0gICAgfQotCi0gICAgLy8gU2V0cyBtZXNzYWdlIHRoYXQgaXMgdXNlZCB0byBkZWxpdmVy
IE5GQyByZWFkaW5nIHVwZGF0ZXMuCi0gICAgc2V0UmVhZGluZ01lc3NhZ2UobWVzc2FnZSkgewot
ICAgICAgdGhpcy5yZWFkaW5nX21lc3NhZ2VzXy5wdXNoKG1lc3NhZ2UpOwotICAgICAgLy8gSWdu
b3JlcyByZWFkaW5nIGlmIE5GQyBvcGVyYXRpb24gaXMgc3VzcGVuZGVkLgotICAgICAgaWYodGhp
cy5vcGVyYXRpb25zX3N1c3BlbmRlZF8pIHJldHVybjsKLSAgICAgIC8vIElnbm9yZXMgcmVhZGlu
ZyBpZiBOREVGV3JpdGVPcHRpb25zLmlnbm9yZVJlYWQgaXMgdHJ1ZS4KLSAgICAgIGlmICh0aGlz
LnBlbmRpbmdfd3JpdGVfb3B0aW9uc18gJiYgdGhpcy5wZW5kaW5nX3dyaXRlX29wdGlvbnNfLmln
bm9yZVJlYWQpCi0gICAgICAgIHJldHVybjsKLSAgICAgIC8vIFRyaWdnZXJzIG9uV2F0Y2ggaWYg
dGhlIG5ldyBtZXNzYWdlIG1hdGNoZXMgZXhpc3Rpbmcgd2F0Y2hlcnMuCi0gICAgICBmb3IgKGxl
dCB3YXRjaGVyIG9mIHRoaXMud2F0Y2hlcnNfKSB7Ci0gICAgICAgIGlmIChtYXRjaGVzV2F0Y2hP
cHRpb25zKG1lc3NhZ2UsIHdhdGNoZXIub3B0aW9ucykpIHsKLSAgICAgICAgICB0aGlzLmNsaWVu
dF8ub25XYXRjaCgKLSAgICAgICAgICAgICAgW3dhdGNoZXIuaWRdLCBmYWtlX3RhZ19zZXJpYWxf
bnVtYmVyLAotICAgICAgICAgICAgICB0b01vam9OREVGTWVzc2FnZShtZXNzYWdlKSk7Ci0gICAg
ICAgIH0KLSAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBTdXNwZW5kcyBhbGwgcGVuZGluZyBORkMg
b3BlcmF0aW9ucy4gQ291bGQgYmUgdXNlZCB3aGVuIHdlYiBwYWdlCi0gICAgLy8gdmlzaWJpbGl0
eSBpcyBsb3N0LgotICAgIHN1c3BlbmRORkNPcGVyYXRpb25zKCkgewotICAgICAgdGhpcy5vcGVy
YXRpb25zX3N1c3BlbmRlZF8gPSB0cnVlOwotICAgIH0KLQotICAgIC8vIFJlc3VtZXMgYWxsIHN1
c3BlbmRlZCBORkMgb3BlcmF0aW9ucy4KLSAgICByZXN1bWVORkNPcGVyYXRpb25zKCkgewotICAg
ICAgdGhpcy5vcGVyYXRpb25zX3N1c3BlbmRlZF8gPSBmYWxzZTsKLSAgICAgIC8vIFJlc3VtZXMg
cGVuZGluZyBORkMgcmVhZGluZy4KLSAgICAgIGZvciAobGV0IHdhdGNoZXIgb2YgdGhpcy53YXRj
aGVyc18pIHsKLSAgICAgICAgZm9yIChsZXQgbWVzc2FnZSBvZiB0aGlzLnJlYWRpbmdfbWVzc2Fn
ZXNfKSB7Ci0gICAgICAgICAgaWYgKG1hdGNoZXNXYXRjaE9wdGlvbnMobWVzc2FnZSwgd2F0Y2hl
ci5vcHRpb25zKSkgewotICAgICAgICAgICAgdGhpcy5jbGllbnRfLm9uV2F0Y2goCi0gICAgICAg
ICAgICAgICAgW3dhdGNoZXIuaWRdLCBmYWtlX3RhZ19zZXJpYWxfbnVtYmVyLAotICAgICAgICAg
ICAgICAgIHRvTW9qb05ERUZNZXNzYWdlKG1lc3NhZ2UpKTsKLSAgICAgICAgICB9Ci0gICAgICAg
IH0KLSAgICAgIH0KLSAgICAgIC8vIFJlc3VtZXMgcGVuZGluZyBwdXNoIG9wZXJhdGlvbi4KLSAg
ICAgIGlmICh0aGlzLnBlbmRpbmdfcHJvbWlzZV9mdW5jXyAmJiB0aGlzLnB1c2hfY29tcGxldGVk
XykgewotICAgICAgICB0aGlzLnBlbmRpbmdfcHJvbWlzZV9mdW5jXyhjcmVhdGVOREVGRXJyb3Io
bnVsbCkpOwotICAgICAgICB0aGlzLnBlbmRpbmdfcHJvbWlzZV9mdW5jXyA9IG51bGw7Ci0gICAg
ICB9Ci0gICAgfQotCi0gICAgLy8gU2ltdWxhdGVzIHRoZSBkZXZpY2UgY29taW5nIGluIHByb3hp
bWl0eSBkb2VzIG5vdCBleHBvc2UgTkRFRiB0ZWNobm9sb2d5LgotICAgIHNpbXVsYXRlTm9uTkRF
RlRhZ0Rpc2NvdmVyZWQoKSB7Ci0gICAgICAvLyBOb3RpZnkgTm90U3VwcG9ydGVkRXJyb3IgdG8g
YWxsIGFjdGl2ZSByZWFkZXJzLgotICAgICAgaWYgKHRoaXMud2F0Y2hlcnNfLmxlbmd0aCAhPSAw
KSB7Ci0gICAgICAgIHRoaXMuY2xpZW50Xy5vbkVycm9yKG5ldyBkZXZpY2UubW9qb20uTkRFRkVy
cm9yKHsKLSAgICAgICAgICBlcnJvclR5cGU6IGRldmljZS5tb2pvbS5OREVGRXJyb3JUeXBlLk5P
VF9TVVBQT1JURUQsCi0gICAgICAgICAgZXJyb3JNZXNzYWdlOiAnJwotICAgICAgICB9KSk7Ci0g
ICAgICB9Ci0gICAgICAvLyBSZWplY3QgdGhlIHBlbmRpbmcgcHVzaCB3aXRoIE5vdFN1cHBvcnRl
ZEVycm9yLgotICAgICAgaWYgKHRoaXMucGVuZGluZ19wcm9taXNlX2Z1bmNfKSB7Ci0gICAgICAg
IHRoaXMucGVuZGluZ19wcm9taXNlX2Z1bmNfKAotICAgICAgICAgICAgY3JlYXRlTkRFRkVycm9y
KGRldmljZS5tb2pvbS5OREVGRXJyb3JUeXBlLk5PVF9TVVBQT1JURUQpKTsKLSAgICAgICAgdGhp
cy5wZW5kaW5nX3Byb21pc2VfZnVuY18gPSBudWxsOwotICAgICAgfQotICAgIH0KLQotICAgIHNl
dElzRm9ybWF0dGVkVGFnKGlzRm9ybWF0dGVkKSB7Ci0gICAgICB0aGlzLmlzX2Zvcm1hdHRlZF90
YWdfID0gaXNGb3JtYXR0ZWQ7Ci0gICAgfQotCi0gICAgc2ltdWxhdGVEYXRhVHJhbnNmZXJGYWls
cygpIHsKLSAgICAgIHRoaXMuZGF0YV90cmFuc2Zlcl9mYWlsZWRfID0gdHJ1ZTsKLSAgICB9Ci0K
LSAgICBzaW11bGF0ZUNsb3NlZFBpcGUoKSB7Ci0gICAgICB0aGlzLnNob3VsZF9jbG9zZV9waXBl
X29uX3JlcXVlc3RfID0gdHJ1ZTsKLSAgICB9Ci0gIH0KLQotICBsZXQgdGVzdEludGVybmFsID0g
ewotICAgIGluaXRpYWxpemVkOiBmYWxzZSwKLSAgICBtb2NrTkZDOiBudWxsCi0gIH0KLQotICBj
bGFzcyBORkNUZXN0Q2hyb21pdW0gewotICAgIGNvbnN0cnVjdG9yKCkgewotICAgICAgT2JqZWN0
LmZyZWV6ZSh0aGlzKTsgLy8gTWFrZXMgaXQgaW1tdXRhYmxlLgotICAgIH0KLQotICAgIGFzeW5j
IGluaXRpYWxpemUoKSB7Ci0gICAgICBpZiAodGVzdEludGVybmFsLmluaXRpYWxpemVkKQotICAg
ICAgICB0aHJvdyBuZXcgRXJyb3IoJ0NhbGwgcmVzZXQoKSBiZWZvcmUgaW5pdGlhbGl6ZSgpLicp
OwotCi0gICAgICAvLyBHcmFudCBuZmMgcGVybWlzc2lvbnMgZm9yIENocm9taXVtIHRlc3Rkcml2
ZXIuCi0gICAgICBhd2FpdCB0ZXN0X2RyaXZlci5zZXRfcGVybWlzc2lvbih7IG5hbWU6ICduZmMn
IH0sICdncmFudGVkJywgZmFsc2UpOwotCi0gICAgICBpZiAodGVzdEludGVybmFsLm1vY2tORkMg
PT0gbnVsbCkgewotICAgICAgICB0ZXN0SW50ZXJuYWwubW9ja05GQyA9IG5ldyBNb2NrTkZDKCk7
Ci0gICAgICB9Ci0gICAgICB0ZXN0SW50ZXJuYWwuaW5pdGlhbGl6ZWQgPSB0cnVlOwotICAgIH0K
LQotICAgIC8vIFJldXNlcyB0aGUgbmZjIG1vY2sgYnV0IHJlc2V0cyBpdHMgc3RhdGUgYmV0d2Vl
biB0ZXN0IHJ1bnMuCi0gICAgYXN5bmMgcmVzZXQoKSB7Ci0gICAgICBpZiAoIXRlc3RJbnRlcm5h
bC5pbml0aWFsaXplZCkKLSAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYWxsIGluaXRpYWxpemUo
KSBiZWZvcmUgcmVzZXQoKS4nKTsKLSAgICAgIHRlc3RJbnRlcm5hbC5tb2NrTkZDLnJlc2V0KCk7
Ci0gICAgICB0ZXN0SW50ZXJuYWwuaW5pdGlhbGl6ZWQgPSBmYWxzZTsKLQotICAgICAgYXdhaXQg
bmV3IFByb21pc2UocmVzb2x2ZSA9PiBzZXRUaW1lb3V0KHJlc29sdmUsIDApKTsKLSAgICB9Ci0K
LSAgICBnZXRNb2NrTkZDKCkgewotICAgICAgcmV0dXJuIHRlc3RJbnRlcm5hbC5tb2NrTkZDOwot
ICAgIH0KLSAgfQotCi0gIHJldHVybiBORkNUZXN0Q2hyb21pdW07Ci19KSgpOwpkaWZmIC0tZ2l0
IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMv
Y2hyb21pdW0vc2Vuc29yLm1vam9tLmpzIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1w
bGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vc2Vuc29yLm1vam9tLmpzCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NTc4ZGQ2ZDY0ZjBlOTFkOTRjOWRjYzMyNDMyZmQyY2Vh
ZGQzOGI2Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL0xh
eW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9t
aXVtL3NlbnNvci5tb2pvbS5qcworKysgL2Rldi9udWxsCkBAIC0xLDEwNzQgKzAsMCBAQAotLy8g
Q29weXJpZ2h0IDIwMTQgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBs
aWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotCi0ndXNl
IHN0cmljdCc7Ci0KLShmdW5jdGlvbigpIHsKLSAgdmFyIG1vam9tSWQgPSAnc2VydmljZXMvZGV2
aWNlL3B1YmxpYy9tb2pvbS9zZW5zb3IubW9qb20nOwotICBpZiAobW9qby5pbnRlcm5hbC5pc01v
am9tTG9hZGVkKG1vam9tSWQpKSB7Ci0gICAgY29uc29sZS53YXJuKCdUaGUgZm9sbG93aW5nIG1v
am9tIGlzIGxvYWRlZCBtdWx0aXBsZSB0aW1lczogJyArIG1vam9tSWQpOwotICAgIHJldHVybjsK
LSAgfQotICBtb2pvLmludGVybmFsLm1hcmtNb2pvbUxvYWRlZChtb2pvbUlkKTsKLSAgdmFyIGJp
bmRpbmdzID0gbW9qbzsKLSAgdmFyIGFzc29jaWF0ZWRCaW5kaW5ncyA9IG1vam87Ci0gIHZhciBj
b2RlYyA9IG1vam8uaW50ZXJuYWw7Ci0gIHZhciB2YWxpZGF0b3IgPSBtb2pvLmludGVybmFsOwot
Ci0gIHZhciBleHBvcnRzID0gbW9qby5pbnRlcm5hbC5leHBvc2VOYW1lc3BhY2UoJ2RldmljZS5t
b2pvbScpOwotCi0KLSAgdmFyIFNlbnNvclR5cGUgPSB7fTsKLSAgU2Vuc29yVHlwZS5BTUJJRU5U
X0xJR0hUID0gMDsKLSAgU2Vuc29yVHlwZS5QUk9YSU1JVFkgPSBTZW5zb3JUeXBlLkFNQklFTlRf
TElHSFQgKyAxOwotICBTZW5zb3JUeXBlLkFDQ0VMRVJPTUVURVIgPSBTZW5zb3JUeXBlLlBST1hJ
TUlUWSArIDE7Ci0gIFNlbnNvclR5cGUuTElORUFSX0FDQ0VMRVJBVElPTiA9IFNlbnNvclR5cGUu
QUNDRUxFUk9NRVRFUiArIDE7Ci0gIFNlbnNvclR5cGUuR1lST1NDT1BFID0gU2Vuc29yVHlwZS5M
SU5FQVJfQUNDRUxFUkFUSU9OICsgMTsKLSAgU2Vuc29yVHlwZS5NQUdORVRPTUVURVIgPSBTZW5z
b3JUeXBlLkdZUk9TQ09QRSArIDE7Ci0gIFNlbnNvclR5cGUuUFJFU1NVUkUgPSBTZW5zb3JUeXBl
Lk1BR05FVE9NRVRFUiArIDE7Ci0gIFNlbnNvclR5cGUuQUJTT0xVVEVfT1JJRU5UQVRJT05fRVVM
RVJfQU5HTEVTID0gU2Vuc29yVHlwZS5QUkVTU1VSRSArIDE7Ci0gIFNlbnNvclR5cGUuQUJTT0xV
VEVfT1JJRU5UQVRJT05fUVVBVEVSTklPTiA9IFNlbnNvclR5cGUuQUJTT0xVVEVfT1JJRU5UQVRJ
T05fRVVMRVJfQU5HTEVTICsgMTsKLSAgU2Vuc29yVHlwZS5SRUxBVElWRV9PUklFTlRBVElPTl9F
VUxFUl9BTkdMRVMgPSBTZW5zb3JUeXBlLkFCU09MVVRFX09SSUVOVEFUSU9OX1FVQVRFUk5JT04g
KyAxOwotICBTZW5zb3JUeXBlLlJFTEFUSVZFX09SSUVOVEFUSU9OX1FVQVRFUk5JT04gPSBTZW5z
b3JUeXBlLlJFTEFUSVZFX09SSUVOVEFUSU9OX0VVTEVSX0FOR0xFUyArIDE7Ci0gIFNlbnNvclR5
cGUuTUlOX1ZBTFVFID0gMCwKLSAgU2Vuc29yVHlwZS5NQVhfVkFMVUUgPSAxMCwKLQotICBTZW5z
b3JUeXBlLmlzS25vd25FbnVtVmFsdWUgPSBmdW5jdGlvbih2YWx1ZSkgewotICAgIHN3aXRjaCAo
dmFsdWUpIHsKLSAgICBjYXNlIDA6Ci0gICAgY2FzZSAxOgotICAgIGNhc2UgMjoKLSAgICBjYXNl
IDM6Ci0gICAgY2FzZSA0OgotICAgIGNhc2UgNToKLSAgICBjYXNlIDY6Ci0gICAgY2FzZSA3Ogot
ICAgIGNhc2UgODoKLSAgICBjYXNlIDk6Ci0gICAgY2FzZSAxMDoKLSAgICAgIHJldHVybiB0cnVl
OwotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci0gIH07Ci0KLSAgU2Vuc29yVHlwZS52YWxpZGF0
ZSA9IGZ1bmN0aW9uKGVudW1WYWx1ZSkgewotICAgIHZhciBpc0V4dGVuc2libGUgPSBmYWxzZTsK
LSAgICBpZiAoaXNFeHRlbnNpYmxlIHx8IHRoaXMuaXNLbm93bkVudW1WYWx1ZShlbnVtVmFsdWUp
KQotICAgICAgcmV0dXJuIHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORTsKLQotICAgIHJl
dHVybiB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLlVOS05PV05fRU5VTV9WQUxVRTsKLSAgfTsK
LSAgdmFyIFJlcG9ydGluZ01vZGUgPSB7fTsKLSAgUmVwb3J0aW5nTW9kZS5PTl9DSEFOR0UgPSAw
OwotICBSZXBvcnRpbmdNb2RlLkNPTlRJTlVPVVMgPSBSZXBvcnRpbmdNb2RlLk9OX0NIQU5HRSAr
IDE7Ci0gIFJlcG9ydGluZ01vZGUuTUlOX1ZBTFVFID0gMCwKLSAgUmVwb3J0aW5nTW9kZS5NQVhf
VkFMVUUgPSAxLAotCi0gIFJlcG9ydGluZ01vZGUuaXNLbm93bkVudW1WYWx1ZSA9IGZ1bmN0aW9u
KHZhbHVlKSB7Ci0gICAgc3dpdGNoICh2YWx1ZSkgewotICAgIGNhc2UgMDoKLSAgICBjYXNlIDE6
Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9OwotCi0g
IFJlcG9ydGluZ01vZGUudmFsaWRhdGUgPSBmdW5jdGlvbihlbnVtVmFsdWUpIHsKLSAgICB2YXIg
aXNFeHRlbnNpYmxlID0gZmFsc2U7Ci0gICAgaWYgKGlzRXh0ZW5zaWJsZSB8fCB0aGlzLmlzS25v
d25FbnVtVmFsdWUoZW51bVZhbHVlKSkKLSAgICAgIHJldHVybiB2YWxpZGF0b3IudmFsaWRhdGlv
bkVycm9yLk5PTkU7Ci0KLSAgICByZXR1cm4gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5VTktO
T1dOX0VOVU1fVkFMVUU7Ci0gIH07Ci0KLSAgZnVuY3Rpb24gU2Vuc29yQ29uZmlndXJhdGlvbih2
YWx1ZXMpIHsKLSAgICB0aGlzLmluaXREZWZhdWx0c18oKTsKLSAgICB0aGlzLmluaXRGaWVsZHNf
KHZhbHVlcyk7Ci0gIH0KLQotCi0gIFNlbnNvckNvbmZpZ3VyYXRpb24ucHJvdG90eXBlLmluaXRE
ZWZhdWx0c18gPSBmdW5jdGlvbigpIHsKLSAgICB0aGlzLmZyZXF1ZW5jeSA9IDA7Ci0gIH07Ci0g
IFNlbnNvckNvbmZpZ3VyYXRpb24ucHJvdG90eXBlLmluaXRGaWVsZHNfID0gZnVuY3Rpb24oZmll
bGRzKSB7Ci0gICAgZm9yKHZhciBmaWVsZCBpbiBmaWVsZHMpIHsKLSAgICAgICAgaWYgKHRoaXMu
aGFzT3duUHJvcGVydHkoZmllbGQpKQotICAgICAgICAgIHRoaXNbZmllbGRdID0gZmllbGRzW2Zp
ZWxkXTsKLSAgICB9Ci0gIH07Ci0KLSAgU2Vuc29yQ29uZmlndXJhdGlvbi52YWxpZGF0ZSA9IGZ1
bmN0aW9uKG1lc3NhZ2VWYWxpZGF0b3IsIG9mZnNldCkgewotICAgIHZhciBlcnI7Ci0gICAgZXJy
ID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdEhlYWRlcihvZmZzZXQsIGNvZGVjLmtT
dHJ1Y3RIZWFkZXJTaXplKTsKLSAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVy
cm9yLk5PTkUpCi0gICAgICAgIHJldHVybiBlcnI7Ci0KLSAgICB2YXIga1ZlcnNpb25TaXplcyA9
IFsKLSAgICAgIHt2ZXJzaW9uOiAwLCBudW1CeXRlczogMTZ9Ci0gICAgXTsKLSAgICBlcnIgPSBt
ZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0VmVyc2lvbihvZmZzZXQsIGtWZXJzaW9uU2l6
ZXMpOwotICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKLSAg
ICAgICAgcmV0dXJuIGVycjsKLQotCi0gICAgcmV0dXJuIHZhbGlkYXRvci52YWxpZGF0aW9uRXJy
b3IuTk9ORTsKLSAgfTsKLQotICBTZW5zb3JDb25maWd1cmF0aW9uLmVuY29kZWRTaXplID0gY29k
ZWMua1N0cnVjdEhlYWRlclNpemUgKyA4OwotCi0gIFNlbnNvckNvbmZpZ3VyYXRpb24uZGVjb2Rl
ID0gZnVuY3Rpb24oZGVjb2RlcikgewotICAgIHZhciBwYWNrZWQ7Ci0gICAgdmFyIHZhbCA9IG5l
dyBTZW5zb3JDb25maWd1cmF0aW9uKCk7Ci0gICAgdmFyIG51bWJlck9mQnl0ZXMgPSBkZWNvZGVy
LnJlYWRVaW50MzIoKTsKLSAgICB2YXIgdmVyc2lvbiA9IGRlY29kZXIucmVhZFVpbnQzMigpOwot
ICAgIHZhbC5mcmVxdWVuY3kgPSBkZWNvZGVyLmRlY29kZVN0cnVjdChjb2RlYy5Eb3VibGUpOwot
ICAgIHJldHVybiB2YWw7Ci0gIH07Ci0KLSAgU2Vuc29yQ29uZmlndXJhdGlvbi5lbmNvZGUgPSBm
dW5jdGlvbihlbmNvZGVyLCB2YWwpIHsKLSAgICB2YXIgcGFja2VkOwotICAgIGVuY29kZXIud3Jp
dGVVaW50MzIoU2Vuc29yQ29uZmlndXJhdGlvbi5lbmNvZGVkU2l6ZSk7Ci0gICAgZW5jb2Rlci53
cml0ZVVpbnQzMigwKTsKLSAgICBlbmNvZGVyLmVuY29kZVN0cnVjdChjb2RlYy5Eb3VibGUsIHZh
bC5mcmVxdWVuY3kpOwotICB9OwotICBmdW5jdGlvbiBTZW5zb3JfR2V0RGVmYXVsdENvbmZpZ3Vy
YXRpb25fUGFyYW1zKHZhbHVlcykgewotICAgIHRoaXMuaW5pdERlZmF1bHRzXygpOwotICAgIHRo
aXMuaW5pdEZpZWxkc18odmFsdWVzKTsKLSAgfQotCi0KLSAgU2Vuc29yX0dldERlZmF1bHRDb25m
aWd1cmF0aW9uX1BhcmFtcy5wcm90b3R5cGUuaW5pdERlZmF1bHRzXyA9IGZ1bmN0aW9uKCkgewot
ICB9OwotICBTZW5zb3JfR2V0RGVmYXVsdENvbmZpZ3VyYXRpb25fUGFyYW1zLnByb3RvdHlwZS5p
bml0RmllbGRzXyA9IGZ1bmN0aW9uKGZpZWxkcykgewotICAgIGZvcih2YXIgZmllbGQgaW4gZmll
bGRzKSB7Ci0gICAgICAgIGlmICh0aGlzLmhhc093blByb3BlcnR5KGZpZWxkKSkKLSAgICAgICAg
ICB0aGlzW2ZpZWxkXSA9IGZpZWxkc1tmaWVsZF07Ci0gICAgfQotICB9OwotCi0gIFNlbnNvcl9H
ZXREZWZhdWx0Q29uZmlndXJhdGlvbl9QYXJhbXMudmFsaWRhdGUgPSBmdW5jdGlvbihtZXNzYWdl
VmFsaWRhdG9yLCBvZmZzZXQpIHsKLSAgICB2YXIgZXJyOwotICAgIGVyciA9IG1lc3NhZ2VWYWxp
ZGF0b3IudmFsaWRhdGVTdHJ1Y3RIZWFkZXIob2Zmc2V0LCBjb2RlYy5rU3RydWN0SGVhZGVyU2l6
ZSk7Ci0gICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQotICAg
ICAgICByZXR1cm4gZXJyOwotCi0gICAgdmFyIGtWZXJzaW9uU2l6ZXMgPSBbCi0gICAgICB7dmVy
c2lvbjogMCwgbnVtQnl0ZXM6IDh9Ci0gICAgXTsKLSAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9y
LnZhbGlkYXRlU3RydWN0VmVyc2lvbihvZmZzZXQsIGtWZXJzaW9uU2l6ZXMpOwotICAgIGlmIChl
cnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKLSAgICAgICAgcmV0dXJuIGVy
cjsKLQotICAgIHJldHVybiB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkU7Ci0gIH07Ci0K
LSAgU2Vuc29yX0dldERlZmF1bHRDb25maWd1cmF0aW9uX1BhcmFtcy5lbmNvZGVkU2l6ZSA9IGNv
ZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgMDsKLQotICBTZW5zb3JfR2V0RGVmYXVsdENvbmZpZ3Vy
YXRpb25fUGFyYW1zLmRlY29kZSA9IGZ1bmN0aW9uKGRlY29kZXIpIHsKLSAgICB2YXIgcGFja2Vk
OwotICAgIHZhciB2YWwgPSBuZXcgU2Vuc29yX0dldERlZmF1bHRDb25maWd1cmF0aW9uX1BhcmFt
cygpOwotICAgIHZhciBudW1iZXJPZkJ5dGVzID0gZGVjb2Rlci5yZWFkVWludDMyKCk7Ci0gICAg
dmFyIHZlcnNpb24gPSBkZWNvZGVyLnJlYWRVaW50MzIoKTsKLSAgICByZXR1cm4gdmFsOwotICB9
OwotCi0gIFNlbnNvcl9HZXREZWZhdWx0Q29uZmlndXJhdGlvbl9QYXJhbXMuZW5jb2RlID0gZnVu
Y3Rpb24oZW5jb2RlciwgdmFsKSB7Ci0gICAgdmFyIHBhY2tlZDsKLSAgICBlbmNvZGVyLndyaXRl
VWludDMyKFNlbnNvcl9HZXREZWZhdWx0Q29uZmlndXJhdGlvbl9QYXJhbXMuZW5jb2RlZFNpemUp
OwotICAgIGVuY29kZXIud3JpdGVVaW50MzIoMCk7Ci0gIH07Ci0gIGZ1bmN0aW9uIFNlbnNvcl9H
ZXREZWZhdWx0Q29uZmlndXJhdGlvbl9SZXNwb25zZVBhcmFtcyh2YWx1ZXMpIHsKLSAgICB0aGlz
LmluaXREZWZhdWx0c18oKTsKLSAgICB0aGlzLmluaXRGaWVsZHNfKHZhbHVlcyk7Ci0gIH0KLQot
Ci0gIFNlbnNvcl9HZXREZWZhdWx0Q29uZmlndXJhdGlvbl9SZXNwb25zZVBhcmFtcy5wcm90b3R5
cGUuaW5pdERlZmF1bHRzXyA9IGZ1bmN0aW9uKCkgewotICAgIHRoaXMuY29uZmlndXJhdGlvbiA9
IG51bGw7Ci0gIH07Ci0gIFNlbnNvcl9HZXREZWZhdWx0Q29uZmlndXJhdGlvbl9SZXNwb25zZVBh
cmFtcy5wcm90b3R5cGUuaW5pdEZpZWxkc18gPSBmdW5jdGlvbihmaWVsZHMpIHsKLSAgICBmb3Io
dmFyIGZpZWxkIGluIGZpZWxkcykgewotICAgICAgICBpZiAodGhpcy5oYXNPd25Qcm9wZXJ0eShm
aWVsZCkpCi0gICAgICAgICAgdGhpc1tmaWVsZF0gPSBmaWVsZHNbZmllbGRdOwotICAgIH0KLSAg
fTsKLQotICBTZW5zb3JfR2V0RGVmYXVsdENvbmZpZ3VyYXRpb25fUmVzcG9uc2VQYXJhbXMudmFs
aWRhdGUgPSBmdW5jdGlvbihtZXNzYWdlVmFsaWRhdG9yLCBvZmZzZXQpIHsKLSAgICB2YXIgZXJy
OwotICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RIZWFkZXIob2Zmc2V0
LCBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSk7Ci0gICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZh
bGlkYXRpb25FcnJvci5OT05FKQotICAgICAgICByZXR1cm4gZXJyOwotCi0gICAgdmFyIGtWZXJz
aW9uU2l6ZXMgPSBbCi0gICAgICB7dmVyc2lvbjogMCwgbnVtQnl0ZXM6IDE2fQotICAgIF07Ci0g
ICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdFZlcnNpb24ob2Zmc2V0LCBr
VmVyc2lvblNpemVzKTsKLSAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9y
Lk5PTkUpCi0gICAgICAgIHJldHVybiBlcnI7Ci0KLQotICAgIC8vIHZhbGlkYXRlIFNlbnNvcl9H
ZXREZWZhdWx0Q29uZmlndXJhdGlvbl9SZXNwb25zZVBhcmFtcy5jb25maWd1cmF0aW9uCi0gICAg
ZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdFBvaW50ZXIob2Zmc2V0ICsgY29k
ZWMua1N0cnVjdEhlYWRlclNpemUgKyAwLCBTZW5zb3JDb25maWd1cmF0aW9uLCBmYWxzZSk7Ci0g
ICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQotICAgICAgICBy
ZXR1cm4gZXJyOwotCi0gICAgcmV0dXJuIHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORTsK
LSAgfTsKLQotICBTZW5zb3JfR2V0RGVmYXVsdENvbmZpZ3VyYXRpb25fUmVzcG9uc2VQYXJhbXMu
ZW5jb2RlZFNpemUgPSBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDg7Ci0KLSAgU2Vuc29yX0dl
dERlZmF1bHRDb25maWd1cmF0aW9uX1Jlc3BvbnNlUGFyYW1zLmRlY29kZSA9IGZ1bmN0aW9uKGRl
Y29kZXIpIHsKLSAgICB2YXIgcGFja2VkOwotICAgIHZhciB2YWwgPSBuZXcgU2Vuc29yX0dldERl
ZmF1bHRDb25maWd1cmF0aW9uX1Jlc3BvbnNlUGFyYW1zKCk7Ci0gICAgdmFyIG51bWJlck9mQnl0
ZXMgPSBkZWNvZGVyLnJlYWRVaW50MzIoKTsKLSAgICB2YXIgdmVyc2lvbiA9IGRlY29kZXIucmVh
ZFVpbnQzMigpOwotICAgIHZhbC5jb25maWd1cmF0aW9uID0gZGVjb2Rlci5kZWNvZGVTdHJ1Y3RQ
b2ludGVyKFNlbnNvckNvbmZpZ3VyYXRpb24pOwotICAgIHJldHVybiB2YWw7Ci0gIH07Ci0KLSAg
U2Vuc29yX0dldERlZmF1bHRDb25maWd1cmF0aW9uX1Jlc3BvbnNlUGFyYW1zLmVuY29kZSA9IGZ1
bmN0aW9uKGVuY29kZXIsIHZhbCkgewotICAgIHZhciBwYWNrZWQ7Ci0gICAgZW5jb2Rlci53cml0
ZVVpbnQzMihTZW5zb3JfR2V0RGVmYXVsdENvbmZpZ3VyYXRpb25fUmVzcG9uc2VQYXJhbXMuZW5j
b2RlZFNpemUpOwotICAgIGVuY29kZXIud3JpdGVVaW50MzIoMCk7Ci0gICAgZW5jb2Rlci5lbmNv
ZGVTdHJ1Y3RQb2ludGVyKFNlbnNvckNvbmZpZ3VyYXRpb24sIHZhbC5jb25maWd1cmF0aW9uKTsK
LSAgfTsKLSAgZnVuY3Rpb24gU2Vuc29yX0FkZENvbmZpZ3VyYXRpb25fUGFyYW1zKHZhbHVlcykg
ewotICAgIHRoaXMuaW5pdERlZmF1bHRzXygpOwotICAgIHRoaXMuaW5pdEZpZWxkc18odmFsdWVz
KTsKLSAgfQotCi0KLSAgU2Vuc29yX0FkZENvbmZpZ3VyYXRpb25fUGFyYW1zLnByb3RvdHlwZS5p
bml0RGVmYXVsdHNfID0gZnVuY3Rpb24oKSB7Ci0gICAgdGhpcy5jb25maWd1cmF0aW9uID0gbnVs
bDsKLSAgfTsKLSAgU2Vuc29yX0FkZENvbmZpZ3VyYXRpb25fUGFyYW1zLnByb3RvdHlwZS5pbml0
RmllbGRzXyA9IGZ1bmN0aW9uKGZpZWxkcykgewotICAgIGZvcih2YXIgZmllbGQgaW4gZmllbGRz
KSB7Ci0gICAgICAgIGlmICh0aGlzLmhhc093blByb3BlcnR5KGZpZWxkKSkKLSAgICAgICAgICB0
aGlzW2ZpZWxkXSA9IGZpZWxkc1tmaWVsZF07Ci0gICAgfQotICB9OwotCi0gIFNlbnNvcl9BZGRD
b25maWd1cmF0aW9uX1BhcmFtcy52YWxpZGF0ZSA9IGZ1bmN0aW9uKG1lc3NhZ2VWYWxpZGF0b3Is
IG9mZnNldCkgewotICAgIHZhciBlcnI7Ci0gICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxp
ZGF0ZVN0cnVjdEhlYWRlcihvZmZzZXQsIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplKTsKLSAgICBp
ZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCi0gICAgICAgIHJldHVy
biBlcnI7Ci0KLSAgICB2YXIga1ZlcnNpb25TaXplcyA9IFsKLSAgICAgIHt2ZXJzaW9uOiAwLCBu
dW1CeXRlczogMTZ9Ci0gICAgXTsKLSAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRl
U3RydWN0VmVyc2lvbihvZmZzZXQsIGtWZXJzaW9uU2l6ZXMpOwotICAgIGlmIChlcnIgIT09IHZh
bGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKLSAgICAgICAgcmV0dXJuIGVycjsKLQotCi0g
ICAgLy8gdmFsaWRhdGUgU2Vuc29yX0FkZENvbmZpZ3VyYXRpb25fUGFyYW1zLmNvbmZpZ3VyYXRp
b24KLSAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0UG9pbnRlcihvZmZz
ZXQgKyBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDAsIFNlbnNvckNvbmZpZ3VyYXRpb24sIGZh
bHNlKTsKLSAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCi0g
ICAgICAgIHJldHVybiBlcnI7Ci0KLSAgICByZXR1cm4gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJv
ci5OT05FOwotICB9OwotCi0gIFNlbnNvcl9BZGRDb25maWd1cmF0aW9uX1BhcmFtcy5lbmNvZGVk
U2l6ZSA9IGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgODsKLQotICBTZW5zb3JfQWRkQ29uZmln
dXJhdGlvbl9QYXJhbXMuZGVjb2RlID0gZnVuY3Rpb24oZGVjb2RlcikgewotICAgIHZhciBwYWNr
ZWQ7Ci0gICAgdmFyIHZhbCA9IG5ldyBTZW5zb3JfQWRkQ29uZmlndXJhdGlvbl9QYXJhbXMoKTsK
LSAgICB2YXIgbnVtYmVyT2ZCeXRlcyA9IGRlY29kZXIucmVhZFVpbnQzMigpOwotICAgIHZhciB2
ZXJzaW9uID0gZGVjb2Rlci5yZWFkVWludDMyKCk7Ci0gICAgdmFsLmNvbmZpZ3VyYXRpb24gPSBk
ZWNvZGVyLmRlY29kZVN0cnVjdFBvaW50ZXIoU2Vuc29yQ29uZmlndXJhdGlvbik7Ci0gICAgcmV0
dXJuIHZhbDsKLSAgfTsKLQotICBTZW5zb3JfQWRkQ29uZmlndXJhdGlvbl9QYXJhbXMuZW5jb2Rl
ID0gZnVuY3Rpb24oZW5jb2RlciwgdmFsKSB7Ci0gICAgdmFyIHBhY2tlZDsKLSAgICBlbmNvZGVy
LndyaXRlVWludDMyKFNlbnNvcl9BZGRDb25maWd1cmF0aW9uX1BhcmFtcy5lbmNvZGVkU2l6ZSk7
Ci0gICAgZW5jb2Rlci53cml0ZVVpbnQzMigwKTsKLSAgICBlbmNvZGVyLmVuY29kZVN0cnVjdFBv
aW50ZXIoU2Vuc29yQ29uZmlndXJhdGlvbiwgdmFsLmNvbmZpZ3VyYXRpb24pOwotICB9OwotICBm
dW5jdGlvbiBTZW5zb3JfQWRkQ29uZmlndXJhdGlvbl9SZXNwb25zZVBhcmFtcyh2YWx1ZXMpIHsK
LSAgICB0aGlzLmluaXREZWZhdWx0c18oKTsKLSAgICB0aGlzLmluaXRGaWVsZHNfKHZhbHVlcyk7
Ci0gIH0KLQotCi0gIFNlbnNvcl9BZGRDb25maWd1cmF0aW9uX1Jlc3BvbnNlUGFyYW1zLnByb3Rv
dHlwZS5pbml0RGVmYXVsdHNfID0gZnVuY3Rpb24oKSB7Ci0gICAgdGhpcy5zdWNjZXNzID0gZmFs
c2U7Ci0gIH07Ci0gIFNlbnNvcl9BZGRDb25maWd1cmF0aW9uX1Jlc3BvbnNlUGFyYW1zLnByb3Rv
dHlwZS5pbml0RmllbGRzXyA9IGZ1bmN0aW9uKGZpZWxkcykgewotICAgIGZvcih2YXIgZmllbGQg
aW4gZmllbGRzKSB7Ci0gICAgICAgIGlmICh0aGlzLmhhc093blByb3BlcnR5KGZpZWxkKSkKLSAg
ICAgICAgICB0aGlzW2ZpZWxkXSA9IGZpZWxkc1tmaWVsZF07Ci0gICAgfQotICB9OwotCi0gIFNl
bnNvcl9BZGRDb25maWd1cmF0aW9uX1Jlc3BvbnNlUGFyYW1zLnZhbGlkYXRlID0gZnVuY3Rpb24o
bWVzc2FnZVZhbGlkYXRvciwgb2Zmc2V0KSB7Ci0gICAgdmFyIGVycjsKLSAgICBlcnIgPSBtZXNz
YWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0SGVhZGVyKG9mZnNldCwgY29kZWMua1N0cnVjdEhl
YWRlclNpemUpOwotICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9O
RSkKLSAgICAgICAgcmV0dXJuIGVycjsKLQotICAgIHZhciBrVmVyc2lvblNpemVzID0gWwotICAg
ICAge3ZlcnNpb246IDAsIG51bUJ5dGVzOiAxNn0KLSAgICBdOwotICAgIGVyciA9IG1lc3NhZ2VW
YWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RWZXJzaW9uKG9mZnNldCwga1ZlcnNpb25TaXplcyk7Ci0g
ICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQotICAgICAgICBy
ZXR1cm4gZXJyOwotCi0KLSAgICByZXR1cm4gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05F
OwotICB9OwotCi0gIFNlbnNvcl9BZGRDb25maWd1cmF0aW9uX1Jlc3BvbnNlUGFyYW1zLmVuY29k
ZWRTaXplID0gY29kZWMua1N0cnVjdEhlYWRlclNpemUgKyA4OwotCi0gIFNlbnNvcl9BZGRDb25m
aWd1cmF0aW9uX1Jlc3BvbnNlUGFyYW1zLmRlY29kZSA9IGZ1bmN0aW9uKGRlY29kZXIpIHsKLSAg
ICB2YXIgcGFja2VkOwotICAgIHZhciB2YWwgPSBuZXcgU2Vuc29yX0FkZENvbmZpZ3VyYXRpb25f
UmVzcG9uc2VQYXJhbXMoKTsKLSAgICB2YXIgbnVtYmVyT2ZCeXRlcyA9IGRlY29kZXIucmVhZFVp
bnQzMigpOwotICAgIHZhciB2ZXJzaW9uID0gZGVjb2Rlci5yZWFkVWludDMyKCk7Ci0gICAgcGFj
a2VkID0gZGVjb2Rlci5yZWFkVWludDgoKTsKLSAgICB2YWwuc3VjY2VzcyA9IChwYWNrZWQgPj4g
MCkgJiAxID8gdHJ1ZSA6IGZhbHNlOwotICAgIGRlY29kZXIuc2tpcCgxKTsKLSAgICBkZWNvZGVy
LnNraXAoMSk7Ci0gICAgZGVjb2Rlci5za2lwKDEpOwotICAgIGRlY29kZXIuc2tpcCgxKTsKLSAg
ICBkZWNvZGVyLnNraXAoMSk7Ci0gICAgZGVjb2Rlci5za2lwKDEpOwotICAgIGRlY29kZXIuc2tp
cCgxKTsKLSAgICByZXR1cm4gdmFsOwotICB9OwotCi0gIFNlbnNvcl9BZGRDb25maWd1cmF0aW9u
X1Jlc3BvbnNlUGFyYW1zLmVuY29kZSA9IGZ1bmN0aW9uKGVuY29kZXIsIHZhbCkgewotICAgIHZh
ciBwYWNrZWQ7Ci0gICAgZW5jb2Rlci53cml0ZVVpbnQzMihTZW5zb3JfQWRkQ29uZmlndXJhdGlv
bl9SZXNwb25zZVBhcmFtcy5lbmNvZGVkU2l6ZSk7Ci0gICAgZW5jb2Rlci53cml0ZVVpbnQzMigw
KTsKLSAgICBwYWNrZWQgPSAwOwotICAgIHBhY2tlZCB8PSAodmFsLnN1Y2Nlc3MgJiAxKSA8PCAw
Ci0gICAgZW5jb2Rlci53cml0ZVVpbnQ4KHBhY2tlZCk7Ci0gICAgZW5jb2Rlci5za2lwKDEpOwot
ICAgIGVuY29kZXIuc2tpcCgxKTsKLSAgICBlbmNvZGVyLnNraXAoMSk7Ci0gICAgZW5jb2Rlci5z
a2lwKDEpOwotICAgIGVuY29kZXIuc2tpcCgxKTsKLSAgICBlbmNvZGVyLnNraXAoMSk7Ci0gICAg
ZW5jb2Rlci5za2lwKDEpOwotICB9OwotICBmdW5jdGlvbiBTZW5zb3JfUmVtb3ZlQ29uZmlndXJh
dGlvbl9QYXJhbXModmFsdWVzKSB7Ci0gICAgdGhpcy5pbml0RGVmYXVsdHNfKCk7Ci0gICAgdGhp
cy5pbml0RmllbGRzXyh2YWx1ZXMpOwotICB9Ci0KLQotICBTZW5zb3JfUmVtb3ZlQ29uZmlndXJh
dGlvbl9QYXJhbXMucHJvdG90eXBlLmluaXREZWZhdWx0c18gPSBmdW5jdGlvbigpIHsKLSAgICB0
aGlzLmNvbmZpZ3VyYXRpb24gPSBudWxsOwotICB9OwotICBTZW5zb3JfUmVtb3ZlQ29uZmlndXJh
dGlvbl9QYXJhbXMucHJvdG90eXBlLmluaXRGaWVsZHNfID0gZnVuY3Rpb24oZmllbGRzKSB7Ci0g
ICAgZm9yKHZhciBmaWVsZCBpbiBmaWVsZHMpIHsKLSAgICAgICAgaWYgKHRoaXMuaGFzT3duUHJv
cGVydHkoZmllbGQpKQotICAgICAgICAgIHRoaXNbZmllbGRdID0gZmllbGRzW2ZpZWxkXTsKLSAg
ICB9Ci0gIH07Ci0KLSAgU2Vuc29yX1JlbW92ZUNvbmZpZ3VyYXRpb25fUGFyYW1zLnZhbGlkYXRl
ID0gZnVuY3Rpb24obWVzc2FnZVZhbGlkYXRvciwgb2Zmc2V0KSB7Ci0gICAgdmFyIGVycjsKLSAg
ICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0SGVhZGVyKG9mZnNldCwgY29k
ZWMua1N0cnVjdEhlYWRlclNpemUpOwotICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0
aW9uRXJyb3IuTk9ORSkKLSAgICAgICAgcmV0dXJuIGVycjsKLQotICAgIHZhciBrVmVyc2lvblNp
emVzID0gWwotICAgICAge3ZlcnNpb246IDAsIG51bUJ5dGVzOiAxNn0KLSAgICBdOwotICAgIGVy
ciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RWZXJzaW9uKG9mZnNldCwga1ZlcnNp
b25TaXplcyk7Ci0gICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05F
KQotICAgICAgICByZXR1cm4gZXJyOwotCi0KLSAgICAvLyB2YWxpZGF0ZSBTZW5zb3JfUmVtb3Zl
Q29uZmlndXJhdGlvbl9QYXJhbXMuY29uZmlndXJhdGlvbgotICAgIGVyciA9IG1lc3NhZ2VWYWxp
ZGF0b3IudmFsaWRhdGVTdHJ1Y3RQb2ludGVyKG9mZnNldCArIGNvZGVjLmtTdHJ1Y3RIZWFkZXJT
aXplICsgMCwgU2Vuc29yQ29uZmlndXJhdGlvbiwgZmFsc2UpOwotICAgIGlmIChlcnIgIT09IHZh
bGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKLSAgICAgICAgcmV0dXJuIGVycjsKLQotICAg
IHJldHVybiB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkU7Ci0gIH07Ci0KLSAgU2Vuc29y
X1JlbW92ZUNvbmZpZ3VyYXRpb25fUGFyYW1zLmVuY29kZWRTaXplID0gY29kZWMua1N0cnVjdEhl
YWRlclNpemUgKyA4OwotCi0gIFNlbnNvcl9SZW1vdmVDb25maWd1cmF0aW9uX1BhcmFtcy5kZWNv
ZGUgPSBmdW5jdGlvbihkZWNvZGVyKSB7Ci0gICAgdmFyIHBhY2tlZDsKLSAgICB2YXIgdmFsID0g
bmV3IFNlbnNvcl9SZW1vdmVDb25maWd1cmF0aW9uX1BhcmFtcygpOwotICAgIHZhciBudW1iZXJP
ZkJ5dGVzID0gZGVjb2Rlci5yZWFkVWludDMyKCk7Ci0gICAgdmFyIHZlcnNpb24gPSBkZWNvZGVy
LnJlYWRVaW50MzIoKTsKLSAgICB2YWwuY29uZmlndXJhdGlvbiA9IGRlY29kZXIuZGVjb2RlU3Ry
dWN0UG9pbnRlcihTZW5zb3JDb25maWd1cmF0aW9uKTsKLSAgICByZXR1cm4gdmFsOwotICB9Owot
Ci0gIFNlbnNvcl9SZW1vdmVDb25maWd1cmF0aW9uX1BhcmFtcy5lbmNvZGUgPSBmdW5jdGlvbihl
bmNvZGVyLCB2YWwpIHsKLSAgICB2YXIgcGFja2VkOwotICAgIGVuY29kZXIud3JpdGVVaW50MzIo
U2Vuc29yX1JlbW92ZUNvbmZpZ3VyYXRpb25fUGFyYW1zLmVuY29kZWRTaXplKTsKLSAgICBlbmNv
ZGVyLndyaXRlVWludDMyKDApOwotICAgIGVuY29kZXIuZW5jb2RlU3RydWN0UG9pbnRlcihTZW5z
b3JDb25maWd1cmF0aW9uLCB2YWwuY29uZmlndXJhdGlvbik7Ci0gIH07Ci0gIGZ1bmN0aW9uIFNl
bnNvcl9TdXNwZW5kX1BhcmFtcyh2YWx1ZXMpIHsKLSAgICB0aGlzLmluaXREZWZhdWx0c18oKTsK
LSAgICB0aGlzLmluaXRGaWVsZHNfKHZhbHVlcyk7Ci0gIH0KLQotCi0gIFNlbnNvcl9TdXNwZW5k
X1BhcmFtcy5wcm90b3R5cGUuaW5pdERlZmF1bHRzXyA9IGZ1bmN0aW9uKCkgewotICB9OwotICBT
ZW5zb3JfU3VzcGVuZF9QYXJhbXMucHJvdG90eXBlLmluaXRGaWVsZHNfID0gZnVuY3Rpb24oZmll
bGRzKSB7Ci0gICAgZm9yKHZhciBmaWVsZCBpbiBmaWVsZHMpIHsKLSAgICAgICAgaWYgKHRoaXMu
aGFzT3duUHJvcGVydHkoZmllbGQpKQotICAgICAgICAgIHRoaXNbZmllbGRdID0gZmllbGRzW2Zp
ZWxkXTsKLSAgICB9Ci0gIH07Ci0KLSAgU2Vuc29yX1N1c3BlbmRfUGFyYW1zLnZhbGlkYXRlID0g
ZnVuY3Rpb24obWVzc2FnZVZhbGlkYXRvciwgb2Zmc2V0KSB7Ci0gICAgdmFyIGVycjsKLSAgICBl
cnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0SGVhZGVyKG9mZnNldCwgY29kZWMu
a1N0cnVjdEhlYWRlclNpemUpOwotICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9u
RXJyb3IuTk9ORSkKLSAgICAgICAgcmV0dXJuIGVycjsKLQotICAgIHZhciBrVmVyc2lvblNpemVz
ID0gWwotICAgICAge3ZlcnNpb246IDAsIG51bUJ5dGVzOiA4fQotICAgIF07Ci0gICAgZXJyID0g
bWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdFZlcnNpb24ob2Zmc2V0LCBrVmVyc2lvblNp
emVzKTsKLSAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCi0g
ICAgICAgIHJldHVybiBlcnI7Ci0KLSAgICByZXR1cm4gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJv
ci5OT05FOwotICB9OwotCi0gIFNlbnNvcl9TdXNwZW5kX1BhcmFtcy5lbmNvZGVkU2l6ZSA9IGNv
ZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgMDsKLQotICBTZW5zb3JfU3VzcGVuZF9QYXJhbXMuZGVj
b2RlID0gZnVuY3Rpb24oZGVjb2RlcikgewotICAgIHZhciBwYWNrZWQ7Ci0gICAgdmFyIHZhbCA9
IG5ldyBTZW5zb3JfU3VzcGVuZF9QYXJhbXMoKTsKLSAgICB2YXIgbnVtYmVyT2ZCeXRlcyA9IGRl
Y29kZXIucmVhZFVpbnQzMigpOwotICAgIHZhciB2ZXJzaW9uID0gZGVjb2Rlci5yZWFkVWludDMy
KCk7Ci0gICAgcmV0dXJuIHZhbDsKLSAgfTsKLQotICBTZW5zb3JfU3VzcGVuZF9QYXJhbXMuZW5j
b2RlID0gZnVuY3Rpb24oZW5jb2RlciwgdmFsKSB7Ci0gICAgdmFyIHBhY2tlZDsKLSAgICBlbmNv
ZGVyLndyaXRlVWludDMyKFNlbnNvcl9TdXNwZW5kX1BhcmFtcy5lbmNvZGVkU2l6ZSk7Ci0gICAg
ZW5jb2Rlci53cml0ZVVpbnQzMigwKTsKLSAgfTsKLSAgZnVuY3Rpb24gU2Vuc29yX1Jlc3VtZV9Q
YXJhbXModmFsdWVzKSB7Ci0gICAgdGhpcy5pbml0RGVmYXVsdHNfKCk7Ci0gICAgdGhpcy5pbml0
RmllbGRzXyh2YWx1ZXMpOwotICB9Ci0KLQotICBTZW5zb3JfUmVzdW1lX1BhcmFtcy5wcm90b3R5
cGUuaW5pdERlZmF1bHRzXyA9IGZ1bmN0aW9uKCkgewotICB9OwotICBTZW5zb3JfUmVzdW1lX1Bh
cmFtcy5wcm90b3R5cGUuaW5pdEZpZWxkc18gPSBmdW5jdGlvbihmaWVsZHMpIHsKLSAgICBmb3Io
dmFyIGZpZWxkIGluIGZpZWxkcykgewotICAgICAgICBpZiAodGhpcy5oYXNPd25Qcm9wZXJ0eShm
aWVsZCkpCi0gICAgICAgICAgdGhpc1tmaWVsZF0gPSBmaWVsZHNbZmllbGRdOwotICAgIH0KLSAg
fTsKLQotICBTZW5zb3JfUmVzdW1lX1BhcmFtcy52YWxpZGF0ZSA9IGZ1bmN0aW9uKG1lc3NhZ2VW
YWxpZGF0b3IsIG9mZnNldCkgewotICAgIHZhciBlcnI7Ci0gICAgZXJyID0gbWVzc2FnZVZhbGlk
YXRvci52YWxpZGF0ZVN0cnVjdEhlYWRlcihvZmZzZXQsIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXpl
KTsKLSAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCi0gICAg
ICAgIHJldHVybiBlcnI7Ci0KLSAgICB2YXIga1ZlcnNpb25TaXplcyA9IFsKLSAgICAgIHt2ZXJz
aW9uOiAwLCBudW1CeXRlczogOH0KLSAgICBdOwotICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3Iu
dmFsaWRhdGVTdHJ1Y3RWZXJzaW9uKG9mZnNldCwga1ZlcnNpb25TaXplcyk7Ci0gICAgaWYgKGVy
ciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQotICAgICAgICByZXR1cm4gZXJy
OwotCi0gICAgcmV0dXJuIHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORTsKLSAgfTsKLQot
ICBTZW5zb3JfUmVzdW1lX1BhcmFtcy5lbmNvZGVkU2l6ZSA9IGNvZGVjLmtTdHJ1Y3RIZWFkZXJT
aXplICsgMDsKLQotICBTZW5zb3JfUmVzdW1lX1BhcmFtcy5kZWNvZGUgPSBmdW5jdGlvbihkZWNv
ZGVyKSB7Ci0gICAgdmFyIHBhY2tlZDsKLSAgICB2YXIgdmFsID0gbmV3IFNlbnNvcl9SZXN1bWVf
UGFyYW1zKCk7Ci0gICAgdmFyIG51bWJlck9mQnl0ZXMgPSBkZWNvZGVyLnJlYWRVaW50MzIoKTsK
LSAgICB2YXIgdmVyc2lvbiA9IGRlY29kZXIucmVhZFVpbnQzMigpOwotICAgIHJldHVybiB2YWw7
Ci0gIH07Ci0KLSAgU2Vuc29yX1Jlc3VtZV9QYXJhbXMuZW5jb2RlID0gZnVuY3Rpb24oZW5jb2Rl
ciwgdmFsKSB7Ci0gICAgdmFyIHBhY2tlZDsKLSAgICBlbmNvZGVyLndyaXRlVWludDMyKFNlbnNv
cl9SZXN1bWVfUGFyYW1zLmVuY29kZWRTaXplKTsKLSAgICBlbmNvZGVyLndyaXRlVWludDMyKDAp
OwotICB9OwotICBmdW5jdGlvbiBTZW5zb3JfQ29uZmlndXJlUmVhZGluZ0NoYW5nZU5vdGlmaWNh
dGlvbnNfUGFyYW1zKHZhbHVlcykgewotICAgIHRoaXMuaW5pdERlZmF1bHRzXygpOwotICAgIHRo
aXMuaW5pdEZpZWxkc18odmFsdWVzKTsKLSAgfQotCi0KLSAgU2Vuc29yX0NvbmZpZ3VyZVJlYWRp
bmdDaGFuZ2VOb3RpZmljYXRpb25zX1BhcmFtcy5wcm90b3R5cGUuaW5pdERlZmF1bHRzXyA9IGZ1
bmN0aW9uKCkgewotICAgIHRoaXMuZW5hYmxlZCA9IGZhbHNlOwotICB9OwotICBTZW5zb3JfQ29u
ZmlndXJlUmVhZGluZ0NoYW5nZU5vdGlmaWNhdGlvbnNfUGFyYW1zLnByb3RvdHlwZS5pbml0Rmll
bGRzXyA9IGZ1bmN0aW9uKGZpZWxkcykgewotICAgIGZvcih2YXIgZmllbGQgaW4gZmllbGRzKSB7
Ci0gICAgICAgIGlmICh0aGlzLmhhc093blByb3BlcnR5KGZpZWxkKSkKLSAgICAgICAgICB0aGlz
W2ZpZWxkXSA9IGZpZWxkc1tmaWVsZF07Ci0gICAgfQotICB9OwotCi0gIFNlbnNvcl9Db25maWd1
cmVSZWFkaW5nQ2hhbmdlTm90aWZpY2F0aW9uc19QYXJhbXMudmFsaWRhdGUgPSBmdW5jdGlvbiht
ZXNzYWdlVmFsaWRhdG9yLCBvZmZzZXQpIHsKLSAgICB2YXIgZXJyOwotICAgIGVyciA9IG1lc3Nh
Z2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RIZWFkZXIob2Zmc2V0LCBjb2RlYy5rU3RydWN0SGVh
ZGVyU2l6ZSk7Ci0gICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05F
KQotICAgICAgICByZXR1cm4gZXJyOwotCi0gICAgdmFyIGtWZXJzaW9uU2l6ZXMgPSBbCi0gICAg
ICB7dmVyc2lvbjogMCwgbnVtQnl0ZXM6IDE2fQotICAgIF07Ci0gICAgZXJyID0gbWVzc2FnZVZh
bGlkYXRvci52YWxpZGF0ZVN0cnVjdFZlcnNpb24ob2Zmc2V0LCBrVmVyc2lvblNpemVzKTsKLSAg
ICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCi0gICAgICAgIHJl
dHVybiBlcnI7Ci0KLQotICAgIHJldHVybiB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkU7
Ci0gIH07Ci0KLSAgU2Vuc29yX0NvbmZpZ3VyZVJlYWRpbmdDaGFuZ2VOb3RpZmljYXRpb25zX1Bh
cmFtcy5lbmNvZGVkU2l6ZSA9IGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgODsKLQotICBTZW5z
b3JfQ29uZmlndXJlUmVhZGluZ0NoYW5nZU5vdGlmaWNhdGlvbnNfUGFyYW1zLmRlY29kZSA9IGZ1
bmN0aW9uKGRlY29kZXIpIHsKLSAgICB2YXIgcGFja2VkOwotICAgIHZhciB2YWwgPSBuZXcgU2Vu
c29yX0NvbmZpZ3VyZVJlYWRpbmdDaGFuZ2VOb3RpZmljYXRpb25zX1BhcmFtcygpOwotICAgIHZh
ciBudW1iZXJPZkJ5dGVzID0gZGVjb2Rlci5yZWFkVWludDMyKCk7Ci0gICAgdmFyIHZlcnNpb24g
PSBkZWNvZGVyLnJlYWRVaW50MzIoKTsKLSAgICBwYWNrZWQgPSBkZWNvZGVyLnJlYWRVaW50OCgp
OwotICAgIHZhbC5lbmFibGVkID0gKHBhY2tlZCA+PiAwKSAmIDEgPyB0cnVlIDogZmFsc2U7Ci0g
ICAgZGVjb2Rlci5za2lwKDEpOwotICAgIGRlY29kZXIuc2tpcCgxKTsKLSAgICBkZWNvZGVyLnNr
aXAoMSk7Ci0gICAgZGVjb2Rlci5za2lwKDEpOwotICAgIGRlY29kZXIuc2tpcCgxKTsKLSAgICBk
ZWNvZGVyLnNraXAoMSk7Ci0gICAgZGVjb2Rlci5za2lwKDEpOwotICAgIHJldHVybiB2YWw7Ci0g
IH07Ci0KLSAgU2Vuc29yX0NvbmZpZ3VyZVJlYWRpbmdDaGFuZ2VOb3RpZmljYXRpb25zX1BhcmFt
cy5lbmNvZGUgPSBmdW5jdGlvbihlbmNvZGVyLCB2YWwpIHsKLSAgICB2YXIgcGFja2VkOwotICAg
IGVuY29kZXIud3JpdGVVaW50MzIoU2Vuc29yX0NvbmZpZ3VyZVJlYWRpbmdDaGFuZ2VOb3RpZmlj
YXRpb25zX1BhcmFtcy5lbmNvZGVkU2l6ZSk7Ci0gICAgZW5jb2Rlci53cml0ZVVpbnQzMigwKTsK
LSAgICBwYWNrZWQgPSAwOwotICAgIHBhY2tlZCB8PSAodmFsLmVuYWJsZWQgJiAxKSA8PCAwCi0g
ICAgZW5jb2Rlci53cml0ZVVpbnQ4KHBhY2tlZCk7Ci0gICAgZW5jb2Rlci5za2lwKDEpOwotICAg
IGVuY29kZXIuc2tpcCgxKTsKLSAgICBlbmNvZGVyLnNraXAoMSk7Ci0gICAgZW5jb2Rlci5za2lw
KDEpOwotICAgIGVuY29kZXIuc2tpcCgxKTsKLSAgICBlbmNvZGVyLnNraXAoMSk7Ci0gICAgZW5j
b2Rlci5za2lwKDEpOwotICB9OwotICBmdW5jdGlvbiBTZW5zb3JDbGllbnRfUmFpc2VFcnJvcl9Q
YXJhbXModmFsdWVzKSB7Ci0gICAgdGhpcy5pbml0RGVmYXVsdHNfKCk7Ci0gICAgdGhpcy5pbml0
RmllbGRzXyh2YWx1ZXMpOwotICB9Ci0KLQotICBTZW5zb3JDbGllbnRfUmFpc2VFcnJvcl9QYXJh
bXMucHJvdG90eXBlLmluaXREZWZhdWx0c18gPSBmdW5jdGlvbigpIHsKLSAgfTsKLSAgU2Vuc29y
Q2xpZW50X1JhaXNlRXJyb3JfUGFyYW1zLnByb3RvdHlwZS5pbml0RmllbGRzXyA9IGZ1bmN0aW9u
KGZpZWxkcykgewotICAgIGZvcih2YXIgZmllbGQgaW4gZmllbGRzKSB7Ci0gICAgICAgIGlmICh0
aGlzLmhhc093blByb3BlcnR5KGZpZWxkKSkKLSAgICAgICAgICB0aGlzW2ZpZWxkXSA9IGZpZWxk
c1tmaWVsZF07Ci0gICAgfQotICB9OwotCi0gIFNlbnNvckNsaWVudF9SYWlzZUVycm9yX1BhcmFt
cy52YWxpZGF0ZSA9IGZ1bmN0aW9uKG1lc3NhZ2VWYWxpZGF0b3IsIG9mZnNldCkgewotICAgIHZh
ciBlcnI7Ci0gICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdEhlYWRlcihv
ZmZzZXQsIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplKTsKLSAgICBpZiAoZXJyICE9PSB2YWxpZGF0
b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCi0gICAgICAgIHJldHVybiBlcnI7Ci0KLSAgICB2YXIg
a1ZlcnNpb25TaXplcyA9IFsKLSAgICAgIHt2ZXJzaW9uOiAwLCBudW1CeXRlczogOH0KLSAgICBd
OwotICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RWZXJzaW9uKG9mZnNl
dCwga1ZlcnNpb25TaXplcyk7Ci0gICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25F
cnJvci5OT05FKQotICAgICAgICByZXR1cm4gZXJyOwotCi0gICAgcmV0dXJuIHZhbGlkYXRvci52
YWxpZGF0aW9uRXJyb3IuTk9ORTsKLSAgfTsKLQotICBTZW5zb3JDbGllbnRfUmFpc2VFcnJvcl9Q
YXJhbXMuZW5jb2RlZFNpemUgPSBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDA7Ci0KLSAgU2Vu
c29yQ2xpZW50X1JhaXNlRXJyb3JfUGFyYW1zLmRlY29kZSA9IGZ1bmN0aW9uKGRlY29kZXIpIHsK
LSAgICB2YXIgcGFja2VkOwotICAgIHZhciB2YWwgPSBuZXcgU2Vuc29yQ2xpZW50X1JhaXNlRXJy
b3JfUGFyYW1zKCk7Ci0gICAgdmFyIG51bWJlck9mQnl0ZXMgPSBkZWNvZGVyLnJlYWRVaW50MzIo
KTsKLSAgICB2YXIgdmVyc2lvbiA9IGRlY29kZXIucmVhZFVpbnQzMigpOwotICAgIHJldHVybiB2
YWw7Ci0gIH07Ci0KLSAgU2Vuc29yQ2xpZW50X1JhaXNlRXJyb3JfUGFyYW1zLmVuY29kZSA9IGZ1
bmN0aW9uKGVuY29kZXIsIHZhbCkgewotICAgIHZhciBwYWNrZWQ7Ci0gICAgZW5jb2Rlci53cml0
ZVVpbnQzMihTZW5zb3JDbGllbnRfUmFpc2VFcnJvcl9QYXJhbXMuZW5jb2RlZFNpemUpOwotICAg
IGVuY29kZXIud3JpdGVVaW50MzIoMCk7Ci0gIH07Ci0gIGZ1bmN0aW9uIFNlbnNvckNsaWVudF9T
ZW5zb3JSZWFkaW5nQ2hhbmdlZF9QYXJhbXModmFsdWVzKSB7Ci0gICAgdGhpcy5pbml0RGVmYXVs
dHNfKCk7Ci0gICAgdGhpcy5pbml0RmllbGRzXyh2YWx1ZXMpOwotICB9Ci0KLQotICBTZW5zb3JD
bGllbnRfU2Vuc29yUmVhZGluZ0NoYW5nZWRfUGFyYW1zLnByb3RvdHlwZS5pbml0RGVmYXVsdHNf
ID0gZnVuY3Rpb24oKSB7Ci0gIH07Ci0gIFNlbnNvckNsaWVudF9TZW5zb3JSZWFkaW5nQ2hhbmdl
ZF9QYXJhbXMucHJvdG90eXBlLmluaXRGaWVsZHNfID0gZnVuY3Rpb24oZmllbGRzKSB7Ci0gICAg
Zm9yKHZhciBmaWVsZCBpbiBmaWVsZHMpIHsKLSAgICAgICAgaWYgKHRoaXMuaGFzT3duUHJvcGVy
dHkoZmllbGQpKQotICAgICAgICAgIHRoaXNbZmllbGRdID0gZmllbGRzW2ZpZWxkXTsKLSAgICB9
Ci0gIH07Ci0KLSAgU2Vuc29yQ2xpZW50X1NlbnNvclJlYWRpbmdDaGFuZ2VkX1BhcmFtcy52YWxp
ZGF0ZSA9IGZ1bmN0aW9uKG1lc3NhZ2VWYWxpZGF0b3IsIG9mZnNldCkgewotICAgIHZhciBlcnI7
Ci0gICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdEhlYWRlcihvZmZzZXQs
IGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplKTsKLSAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFs
aWRhdGlvbkVycm9yLk5PTkUpCi0gICAgICAgIHJldHVybiBlcnI7Ci0KLSAgICB2YXIga1ZlcnNp
b25TaXplcyA9IFsKLSAgICAgIHt2ZXJzaW9uOiAwLCBudW1CeXRlczogOH0KLSAgICBdOwotICAg
IGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RWZXJzaW9uKG9mZnNldCwga1Zl
cnNpb25TaXplcyk7Ci0gICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5O
T05FKQotICAgICAgICByZXR1cm4gZXJyOwotCi0gICAgcmV0dXJuIHZhbGlkYXRvci52YWxpZGF0
aW9uRXJyb3IuTk9ORTsKLSAgfTsKLQotICBTZW5zb3JDbGllbnRfU2Vuc29yUmVhZGluZ0NoYW5n
ZWRfUGFyYW1zLmVuY29kZWRTaXplID0gY29kZWMua1N0cnVjdEhlYWRlclNpemUgKyAwOwotCi0g
IFNlbnNvckNsaWVudF9TZW5zb3JSZWFkaW5nQ2hhbmdlZF9QYXJhbXMuZGVjb2RlID0gZnVuY3Rp
b24oZGVjb2RlcikgewotICAgIHZhciBwYWNrZWQ7Ci0gICAgdmFyIHZhbCA9IG5ldyBTZW5zb3JD
bGllbnRfU2Vuc29yUmVhZGluZ0NoYW5nZWRfUGFyYW1zKCk7Ci0gICAgdmFyIG51bWJlck9mQnl0
ZXMgPSBkZWNvZGVyLnJlYWRVaW50MzIoKTsKLSAgICB2YXIgdmVyc2lvbiA9IGRlY29kZXIucmVh
ZFVpbnQzMigpOwotICAgIHJldHVybiB2YWw7Ci0gIH07Ci0KLSAgU2Vuc29yQ2xpZW50X1NlbnNv
clJlYWRpbmdDaGFuZ2VkX1BhcmFtcy5lbmNvZGUgPSBmdW5jdGlvbihlbmNvZGVyLCB2YWwpIHsK
LSAgICB2YXIgcGFja2VkOwotICAgIGVuY29kZXIud3JpdGVVaW50MzIoU2Vuc29yQ2xpZW50X1Nl
bnNvclJlYWRpbmdDaGFuZ2VkX1BhcmFtcy5lbmNvZGVkU2l6ZSk7Ci0gICAgZW5jb2Rlci53cml0
ZVVpbnQzMigwKTsKLSAgfTsKLSAgdmFyIGtTZW5zb3JfR2V0RGVmYXVsdENvbmZpZ3VyYXRpb25f
TmFtZSA9IDA7Ci0gIHZhciBrU2Vuc29yX0FkZENvbmZpZ3VyYXRpb25fTmFtZSA9IDE7Ci0gIHZh
ciBrU2Vuc29yX1JlbW92ZUNvbmZpZ3VyYXRpb25fTmFtZSA9IDI7Ci0gIHZhciBrU2Vuc29yX1N1
c3BlbmRfTmFtZSA9IDM7Ci0gIHZhciBrU2Vuc29yX1Jlc3VtZV9OYW1lID0gNDsKLSAgdmFyIGtT
ZW5zb3JfQ29uZmlndXJlUmVhZGluZ0NoYW5nZU5vdGlmaWNhdGlvbnNfTmFtZSA9IDU7Ci0KLSAg
ZnVuY3Rpb24gU2Vuc29yUHRyKGhhbmRsZU9yUHRySW5mbykgewotICAgIHRoaXMucHRyID0gbmV3
IGJpbmRpbmdzLkludGVyZmFjZVB0ckNvbnRyb2xsZXIoU2Vuc29yLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlT3JQdHJJbmZvKTsKLSAg
fQotCi0gIGZ1bmN0aW9uIFNlbnNvckFzc29jaWF0ZWRQdHIoYXNzb2NpYXRlZEludGVyZmFjZVB0
ckluZm8pIHsKLSAgICB0aGlzLnB0ciA9IG5ldyBhc3NvY2lhdGVkQmluZGluZ3MuQXNzb2NpYXRl
ZEludGVyZmFjZVB0ckNvbnRyb2xsZXIoCi0gICAgICAgIFNlbnNvciwgYXNzb2NpYXRlZEludGVy
ZmFjZVB0ckluZm8pOwotICB9Ci0KLSAgU2Vuc29yQXNzb2NpYXRlZFB0ci5wcm90b3R5cGUgPQot
ICAgICAgT2JqZWN0LmNyZWF0ZShTZW5zb3JQdHIucHJvdG90eXBlKTsKLSAgU2Vuc29yQXNzb2Np
YXRlZFB0ci5wcm90b3R5cGUuY29uc3RydWN0b3IgPQotICAgICAgU2Vuc29yQXNzb2NpYXRlZFB0
cjsKLQotICBmdW5jdGlvbiBTZW5zb3JQcm94eShyZWNlaXZlcikgewotICAgIHRoaXMucmVjZWl2
ZXJfID0gcmVjZWl2ZXI7Ci0gIH0KLSAgU2Vuc29yUHRyLnByb3RvdHlwZS5nZXREZWZhdWx0Q29u
ZmlndXJhdGlvbiA9IGZ1bmN0aW9uKCkgewotICAgIHJldHVybiBTZW5zb3JQcm94eS5wcm90b3R5
cGUuZ2V0RGVmYXVsdENvbmZpZ3VyYXRpb24KLSAgICAgICAgLmFwcGx5KHRoaXMucHRyLmdldFBy
b3h5KCksIGFyZ3VtZW50cyk7Ci0gIH07Ci0KLSAgU2Vuc29yUHJveHkucHJvdG90eXBlLmdldERl
ZmF1bHRDb25maWd1cmF0aW9uID0gZnVuY3Rpb24oKSB7Ci0gICAgdmFyIHBhcmFtc18gPSBuZXcg
U2Vuc29yX0dldERlZmF1bHRDb25maWd1cmF0aW9uX1BhcmFtcygpOwotICAgIHJldHVybiBuZXcg
UHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3QpIHsKLSAgICAgIHZhciBidWlsZGVyID0g
bmV3IGNvZGVjLk1lc3NhZ2VWMUJ1aWxkZXIoCi0gICAgICAgICAga1NlbnNvcl9HZXREZWZhdWx0
Q29uZmlndXJhdGlvbl9OYW1lLAotICAgICAgICAgIGNvZGVjLmFsaWduKFNlbnNvcl9HZXREZWZh
dWx0Q29uZmlndXJhdGlvbl9QYXJhbXMuZW5jb2RlZFNpemUpLAotICAgICAgICAgIGNvZGVjLmtN
ZXNzYWdlRXhwZWN0c1Jlc3BvbnNlLCAwKTsKLSAgICAgIGJ1aWxkZXIuZW5jb2RlU3RydWN0KFNl
bnNvcl9HZXREZWZhdWx0Q29uZmlndXJhdGlvbl9QYXJhbXMsIHBhcmFtc18pOwotICAgICAgdmFy
IG1lc3NhZ2UgPSBidWlsZGVyLmZpbmlzaCgpOwotICAgICAgdGhpcy5yZWNlaXZlcl8uYWNjZXB0
QW5kRXhwZWN0UmVzcG9uc2UobWVzc2FnZSkudGhlbihmdW5jdGlvbihtZXNzYWdlKSB7Ci0gICAg
ICAgIHZhciByZWFkZXIgPSBuZXcgY29kZWMuTWVzc2FnZVJlYWRlcihtZXNzYWdlKTsKLSAgICAg
ICAgdmFyIHJlc3BvbnNlUGFyYW1zID0KLSAgICAgICAgICAgIHJlYWRlci5kZWNvZGVTdHJ1Y3Qo
U2Vuc29yX0dldERlZmF1bHRDb25maWd1cmF0aW9uX1Jlc3BvbnNlUGFyYW1zKTsKLSAgICAgICAg
cmVzb2x2ZShyZXNwb25zZVBhcmFtcyk7Ci0gICAgICB9KS5jYXRjaChmdW5jdGlvbihyZXN1bHQp
IHsKLSAgICAgICAgcmVqZWN0KEVycm9yKCJDb25uZWN0aW9uIGVycm9yOiAiICsgcmVzdWx0KSk7
Ci0gICAgICB9KTsKLSAgICB9LmJpbmQodGhpcykpOwotICB9OwotICBTZW5zb3JQdHIucHJvdG90
eXBlLmFkZENvbmZpZ3VyYXRpb24gPSBmdW5jdGlvbigpIHsKLSAgICByZXR1cm4gU2Vuc29yUHJv
eHkucHJvdG90eXBlLmFkZENvbmZpZ3VyYXRpb24KLSAgICAgICAgLmFwcGx5KHRoaXMucHRyLmdl
dFByb3h5KCksIGFyZ3VtZW50cyk7Ci0gIH07Ci0KLSAgU2Vuc29yUHJveHkucHJvdG90eXBlLmFk
ZENvbmZpZ3VyYXRpb24gPSBmdW5jdGlvbihjb25maWd1cmF0aW9uKSB7Ci0gICAgdmFyIHBhcmFt
c18gPSBuZXcgU2Vuc29yX0FkZENvbmZpZ3VyYXRpb25fUGFyYW1zKCk7Ci0gICAgcGFyYW1zXy5j
b25maWd1cmF0aW9uID0gY29uZmlndXJhdGlvbjsKLSAgICByZXR1cm4gbmV3IFByb21pc2UoZnVu
Y3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7Ci0gICAgICB2YXIgYnVpbGRlciA9IG5ldyBjb2RlYy5N
ZXNzYWdlVjFCdWlsZGVyKAotICAgICAgICAgIGtTZW5zb3JfQWRkQ29uZmlndXJhdGlvbl9OYW1l
LAotICAgICAgICAgIGNvZGVjLmFsaWduKFNlbnNvcl9BZGRDb25maWd1cmF0aW9uX1BhcmFtcy5l
bmNvZGVkU2l6ZSksCi0gICAgICAgICAgY29kZWMua01lc3NhZ2VFeHBlY3RzUmVzcG9uc2UsIDAp
OwotICAgICAgYnVpbGRlci5lbmNvZGVTdHJ1Y3QoU2Vuc29yX0FkZENvbmZpZ3VyYXRpb25fUGFy
YW1zLCBwYXJhbXNfKTsKLSAgICAgIHZhciBtZXNzYWdlID0gYnVpbGRlci5maW5pc2goKTsKLSAg
ICAgIHRoaXMucmVjZWl2ZXJfLmFjY2VwdEFuZEV4cGVjdFJlc3BvbnNlKG1lc3NhZ2UpLnRoZW4o
ZnVuY3Rpb24obWVzc2FnZSkgewotICAgICAgICB2YXIgcmVhZGVyID0gbmV3IGNvZGVjLk1lc3Nh
Z2VSZWFkZXIobWVzc2FnZSk7Ci0gICAgICAgIHZhciByZXNwb25zZVBhcmFtcyA9Ci0gICAgICAg
ICAgICByZWFkZXIuZGVjb2RlU3RydWN0KFNlbnNvcl9BZGRDb25maWd1cmF0aW9uX1Jlc3BvbnNl
UGFyYW1zKTsKLSAgICAgICAgcmVzb2x2ZShyZXNwb25zZVBhcmFtcyk7Ci0gICAgICB9KS5jYXRj
aChmdW5jdGlvbihyZXN1bHQpIHsKLSAgICAgICAgcmVqZWN0KEVycm9yKCJDb25uZWN0aW9uIGVy
cm9yOiAiICsgcmVzdWx0KSk7Ci0gICAgICB9KTsKLSAgICB9LmJpbmQodGhpcykpOwotICB9Owot
ICBTZW5zb3JQdHIucHJvdG90eXBlLnJlbW92ZUNvbmZpZ3VyYXRpb24gPSBmdW5jdGlvbigpIHsK
LSAgICByZXR1cm4gU2Vuc29yUHJveHkucHJvdG90eXBlLnJlbW92ZUNvbmZpZ3VyYXRpb24KLSAg
ICAgICAgLmFwcGx5KHRoaXMucHRyLmdldFByb3h5KCksIGFyZ3VtZW50cyk7Ci0gIH07Ci0KLSAg
U2Vuc29yUHJveHkucHJvdG90eXBlLnJlbW92ZUNvbmZpZ3VyYXRpb24gPSBmdW5jdGlvbihjb25m
aWd1cmF0aW9uKSB7Ci0gICAgdmFyIHBhcmFtc18gPSBuZXcgU2Vuc29yX1JlbW92ZUNvbmZpZ3Vy
YXRpb25fUGFyYW1zKCk7Ci0gICAgcGFyYW1zXy5jb25maWd1cmF0aW9uID0gY29uZmlndXJhdGlv
bjsKLSAgICB2YXIgYnVpbGRlciA9IG5ldyBjb2RlYy5NZXNzYWdlVjBCdWlsZGVyKAotICAgICAg
ICBrU2Vuc29yX1JlbW92ZUNvbmZpZ3VyYXRpb25fTmFtZSwKLSAgICAgICAgY29kZWMuYWxpZ24o
U2Vuc29yX1JlbW92ZUNvbmZpZ3VyYXRpb25fUGFyYW1zLmVuY29kZWRTaXplKSk7Ci0gICAgYnVp
bGRlci5lbmNvZGVTdHJ1Y3QoU2Vuc29yX1JlbW92ZUNvbmZpZ3VyYXRpb25fUGFyYW1zLCBwYXJh
bXNfKTsKLSAgICB2YXIgbWVzc2FnZSA9IGJ1aWxkZXIuZmluaXNoKCk7Ci0gICAgdGhpcy5yZWNl
aXZlcl8uYWNjZXB0KG1lc3NhZ2UpOwotICB9OwotICBTZW5zb3JQdHIucHJvdG90eXBlLnN1c3Bl
bmQgPSBmdW5jdGlvbigpIHsKLSAgICByZXR1cm4gU2Vuc29yUHJveHkucHJvdG90eXBlLnN1c3Bl
bmQKLSAgICAgICAgLmFwcGx5KHRoaXMucHRyLmdldFByb3h5KCksIGFyZ3VtZW50cyk7Ci0gIH07
Ci0KLSAgU2Vuc29yUHJveHkucHJvdG90eXBlLnN1c3BlbmQgPSBmdW5jdGlvbigpIHsKLSAgICB2
YXIgcGFyYW1zXyA9IG5ldyBTZW5zb3JfU3VzcGVuZF9QYXJhbXMoKTsKLSAgICB2YXIgYnVpbGRl
ciA9IG5ldyBjb2RlYy5NZXNzYWdlVjBCdWlsZGVyKAotICAgICAgICBrU2Vuc29yX1N1c3BlbmRf
TmFtZSwKLSAgICAgICAgY29kZWMuYWxpZ24oU2Vuc29yX1N1c3BlbmRfUGFyYW1zLmVuY29kZWRT
aXplKSk7Ci0gICAgYnVpbGRlci5lbmNvZGVTdHJ1Y3QoU2Vuc29yX1N1c3BlbmRfUGFyYW1zLCBw
YXJhbXNfKTsKLSAgICB2YXIgbWVzc2FnZSA9IGJ1aWxkZXIuZmluaXNoKCk7Ci0gICAgdGhpcy5y
ZWNlaXZlcl8uYWNjZXB0KG1lc3NhZ2UpOwotICB9OwotICBTZW5zb3JQdHIucHJvdG90eXBlLnJl
c3VtZSA9IGZ1bmN0aW9uKCkgewotICAgIHJldHVybiBTZW5zb3JQcm94eS5wcm90b3R5cGUucmVz
dW1lCi0gICAgICAgIC5hcHBseSh0aGlzLnB0ci5nZXRQcm94eSgpLCBhcmd1bWVudHMpOwotICB9
OwotCi0gIFNlbnNvclByb3h5LnByb3RvdHlwZS5yZXN1bWUgPSBmdW5jdGlvbigpIHsKLSAgICB2
YXIgcGFyYW1zXyA9IG5ldyBTZW5zb3JfUmVzdW1lX1BhcmFtcygpOwotICAgIHZhciBidWlsZGVy
ID0gbmV3IGNvZGVjLk1lc3NhZ2VWMEJ1aWxkZXIoCi0gICAgICAgIGtTZW5zb3JfUmVzdW1lX05h
bWUsCi0gICAgICAgIGNvZGVjLmFsaWduKFNlbnNvcl9SZXN1bWVfUGFyYW1zLmVuY29kZWRTaXpl
KSk7Ci0gICAgYnVpbGRlci5lbmNvZGVTdHJ1Y3QoU2Vuc29yX1Jlc3VtZV9QYXJhbXMsIHBhcmFt
c18pOwotICAgIHZhciBtZXNzYWdlID0gYnVpbGRlci5maW5pc2goKTsKLSAgICB0aGlzLnJlY2Vp
dmVyXy5hY2NlcHQobWVzc2FnZSk7Ci0gIH07Ci0gIFNlbnNvclB0ci5wcm90b3R5cGUuY29uZmln
dXJlUmVhZGluZ0NoYW5nZU5vdGlmaWNhdGlvbnMgPSBmdW5jdGlvbigpIHsKLSAgICByZXR1cm4g
U2Vuc29yUHJveHkucHJvdG90eXBlLmNvbmZpZ3VyZVJlYWRpbmdDaGFuZ2VOb3RpZmljYXRpb25z
Ci0gICAgICAgIC5hcHBseSh0aGlzLnB0ci5nZXRQcm94eSgpLCBhcmd1bWVudHMpOwotICB9Owot
Ci0gIFNlbnNvclByb3h5LnByb3RvdHlwZS5jb25maWd1cmVSZWFkaW5nQ2hhbmdlTm90aWZpY2F0
aW9ucyA9IGZ1bmN0aW9uKGVuYWJsZWQpIHsKLSAgICB2YXIgcGFyYW1zXyA9IG5ldyBTZW5zb3Jf
Q29uZmlndXJlUmVhZGluZ0NoYW5nZU5vdGlmaWNhdGlvbnNfUGFyYW1zKCk7Ci0gICAgcGFyYW1z
Xy5lbmFibGVkID0gZW5hYmxlZDsKLSAgICB2YXIgYnVpbGRlciA9IG5ldyBjb2RlYy5NZXNzYWdl
VjBCdWlsZGVyKAotICAgICAgICBrU2Vuc29yX0NvbmZpZ3VyZVJlYWRpbmdDaGFuZ2VOb3RpZmlj
YXRpb25zX05hbWUsCi0gICAgICAgIGNvZGVjLmFsaWduKFNlbnNvcl9Db25maWd1cmVSZWFkaW5n
Q2hhbmdlTm90aWZpY2F0aW9uc19QYXJhbXMuZW5jb2RlZFNpemUpKTsKLSAgICBidWlsZGVyLmVu
Y29kZVN0cnVjdChTZW5zb3JfQ29uZmlndXJlUmVhZGluZ0NoYW5nZU5vdGlmaWNhdGlvbnNfUGFy
YW1zLCBwYXJhbXNfKTsKLSAgICB2YXIgbWVzc2FnZSA9IGJ1aWxkZXIuZmluaXNoKCk7Ci0gICAg
dGhpcy5yZWNlaXZlcl8uYWNjZXB0KG1lc3NhZ2UpOwotICB9OwotCi0gIGZ1bmN0aW9uIFNlbnNv
clN0dWIoZGVsZWdhdGUpIHsKLSAgICB0aGlzLmRlbGVnYXRlXyA9IGRlbGVnYXRlOwotICB9Ci0g
IFNlbnNvclN0dWIucHJvdG90eXBlLmdldERlZmF1bHRDb25maWd1cmF0aW9uID0gZnVuY3Rpb24o
KSB7Ci0gICAgcmV0dXJuIHRoaXMuZGVsZWdhdGVfICYmIHRoaXMuZGVsZWdhdGVfLmdldERlZmF1
bHRDb25maWd1cmF0aW9uICYmIHRoaXMuZGVsZWdhdGVfLmdldERlZmF1bHRDb25maWd1cmF0aW9u
KCk7Ci0gIH0KLSAgU2Vuc29yU3R1Yi5wcm90b3R5cGUuYWRkQ29uZmlndXJhdGlvbiA9IGZ1bmN0
aW9uKGNvbmZpZ3VyYXRpb24pIHsKLSAgICByZXR1cm4gdGhpcy5kZWxlZ2F0ZV8gJiYgdGhpcy5k
ZWxlZ2F0ZV8uYWRkQ29uZmlndXJhdGlvbiAmJiB0aGlzLmRlbGVnYXRlXy5hZGRDb25maWd1cmF0
aW9uKGNvbmZpZ3VyYXRpb24pOwotICB9Ci0gIFNlbnNvclN0dWIucHJvdG90eXBlLnJlbW92ZUNv
bmZpZ3VyYXRpb24gPSBmdW5jdGlvbihjb25maWd1cmF0aW9uKSB7Ci0gICAgcmV0dXJuIHRoaXMu
ZGVsZWdhdGVfICYmIHRoaXMuZGVsZWdhdGVfLnJlbW92ZUNvbmZpZ3VyYXRpb24gJiYgdGhpcy5k
ZWxlZ2F0ZV8ucmVtb3ZlQ29uZmlndXJhdGlvbihjb25maWd1cmF0aW9uKTsKLSAgfQotICBTZW5z
b3JTdHViLnByb3RvdHlwZS5zdXNwZW5kID0gZnVuY3Rpb24oKSB7Ci0gICAgcmV0dXJuIHRoaXMu
ZGVsZWdhdGVfICYmIHRoaXMuZGVsZWdhdGVfLnN1c3BlbmQgJiYgdGhpcy5kZWxlZ2F0ZV8uc3Vz
cGVuZCgpOwotICB9Ci0gIFNlbnNvclN0dWIucHJvdG90eXBlLnJlc3VtZSA9IGZ1bmN0aW9uKCkg
ewotICAgIHJldHVybiB0aGlzLmRlbGVnYXRlXyAmJiB0aGlzLmRlbGVnYXRlXy5yZXN1bWUgJiYg
dGhpcy5kZWxlZ2F0ZV8ucmVzdW1lKCk7Ci0gIH0KLSAgU2Vuc29yU3R1Yi5wcm90b3R5cGUuY29u
ZmlndXJlUmVhZGluZ0NoYW5nZU5vdGlmaWNhdGlvbnMgPSBmdW5jdGlvbihlbmFibGVkKSB7Ci0g
ICAgcmV0dXJuIHRoaXMuZGVsZWdhdGVfICYmIHRoaXMuZGVsZWdhdGVfLmNvbmZpZ3VyZVJlYWRp
bmdDaGFuZ2VOb3RpZmljYXRpb25zICYmIHRoaXMuZGVsZWdhdGVfLmNvbmZpZ3VyZVJlYWRpbmdD
aGFuZ2VOb3RpZmljYXRpb25zKGVuYWJsZWQpOwotICB9Ci0KLSAgU2Vuc29yU3R1Yi5wcm90b3R5
cGUuYWNjZXB0ID0gZnVuY3Rpb24obWVzc2FnZSkgewotICAgIHZhciByZWFkZXIgPSBuZXcgY29k
ZWMuTWVzc2FnZVJlYWRlcihtZXNzYWdlKTsKLSAgICBzd2l0Y2ggKHJlYWRlci5tZXNzYWdlTmFt
ZSkgewotICAgIGNhc2Uga1NlbnNvcl9SZW1vdmVDb25maWd1cmF0aW9uX05hbWU6Ci0gICAgICB2
YXIgcGFyYW1zID0gcmVhZGVyLmRlY29kZVN0cnVjdChTZW5zb3JfUmVtb3ZlQ29uZmlndXJhdGlv
bl9QYXJhbXMpOwotICAgICAgdGhpcy5yZW1vdmVDb25maWd1cmF0aW9uKHBhcmFtcy5jb25maWd1
cmF0aW9uKTsKLSAgICAgIHJldHVybiB0cnVlOwotICAgIGNhc2Uga1NlbnNvcl9TdXNwZW5kX05h
bWU6Ci0gICAgICB2YXIgcGFyYW1zID0gcmVhZGVyLmRlY29kZVN0cnVjdChTZW5zb3JfU3VzcGVu
ZF9QYXJhbXMpOwotICAgICAgdGhpcy5zdXNwZW5kKCk7Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAg
ICBjYXNlIGtTZW5zb3JfUmVzdW1lX05hbWU6Ci0gICAgICB2YXIgcGFyYW1zID0gcmVhZGVyLmRl
Y29kZVN0cnVjdChTZW5zb3JfUmVzdW1lX1BhcmFtcyk7Ci0gICAgICB0aGlzLnJlc3VtZSgpOwot
ICAgICAgcmV0dXJuIHRydWU7Ci0gICAgY2FzZSBrU2Vuc29yX0NvbmZpZ3VyZVJlYWRpbmdDaGFu
Z2VOb3RpZmljYXRpb25zX05hbWU6Ci0gICAgICB2YXIgcGFyYW1zID0gcmVhZGVyLmRlY29kZVN0
cnVjdChTZW5zb3JfQ29uZmlndXJlUmVhZGluZ0NoYW5nZU5vdGlmaWNhdGlvbnNfUGFyYW1zKTsK
LSAgICAgIHRoaXMuY29uZmlndXJlUmVhZGluZ0NoYW5nZU5vdGlmaWNhdGlvbnMocGFyYW1zLmVu
YWJsZWQpOwotICAgICAgcmV0dXJuIHRydWU7Ci0gICAgZGVmYXVsdDoKLSAgICAgIHJldHVybiBm
YWxzZTsKLSAgICB9Ci0gIH07Ci0KLSAgU2Vuc29yU3R1Yi5wcm90b3R5cGUuYWNjZXB0V2l0aFJl
c3BvbmRlciA9Ci0gICAgICBmdW5jdGlvbihtZXNzYWdlLCByZXNwb25kZXIpIHsKLSAgICB2YXIg
cmVhZGVyID0gbmV3IGNvZGVjLk1lc3NhZ2VSZWFkZXIobWVzc2FnZSk7Ci0gICAgc3dpdGNoIChy
ZWFkZXIubWVzc2FnZU5hbWUpIHsKLSAgICBjYXNlIGtTZW5zb3JfR2V0RGVmYXVsdENvbmZpZ3Vy
YXRpb25fTmFtZToKLSAgICAgIHZhciBwYXJhbXMgPSByZWFkZXIuZGVjb2RlU3RydWN0KFNlbnNv
cl9HZXREZWZhdWx0Q29uZmlndXJhdGlvbl9QYXJhbXMpOwotICAgICAgdGhpcy5nZXREZWZhdWx0
Q29uZmlndXJhdGlvbigpLnRoZW4oZnVuY3Rpb24ocmVzcG9uc2UpIHsKLSAgICAgICAgdmFyIHJl
c3BvbnNlUGFyYW1zID0KLSAgICAgICAgICAgIG5ldyBTZW5zb3JfR2V0RGVmYXVsdENvbmZpZ3Vy
YXRpb25fUmVzcG9uc2VQYXJhbXMoKTsKLSAgICAgICAgcmVzcG9uc2VQYXJhbXMuY29uZmlndXJh
dGlvbiA9IHJlc3BvbnNlLmNvbmZpZ3VyYXRpb247Ci0gICAgICAgIHZhciBidWlsZGVyID0gbmV3
IGNvZGVjLk1lc3NhZ2VWMUJ1aWxkZXIoCi0gICAgICAgICAgICBrU2Vuc29yX0dldERlZmF1bHRD
b25maWd1cmF0aW9uX05hbWUsCi0gICAgICAgICAgICBjb2RlYy5hbGlnbihTZW5zb3JfR2V0RGVm
YXVsdENvbmZpZ3VyYXRpb25fUmVzcG9uc2VQYXJhbXMuZW5jb2RlZFNpemUpLAotICAgICAgICAg
ICAgY29kZWMua01lc3NhZ2VJc1Jlc3BvbnNlLCByZWFkZXIucmVxdWVzdElEKTsKLSAgICAgICAg
YnVpbGRlci5lbmNvZGVTdHJ1Y3QoU2Vuc29yX0dldERlZmF1bHRDb25maWd1cmF0aW9uX1Jlc3Bv
bnNlUGFyYW1zLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zZVBhcmFtcyk7
Ci0gICAgICAgIHZhciBtZXNzYWdlID0gYnVpbGRlci5maW5pc2goKTsKLSAgICAgICAgcmVzcG9u
ZGVyLmFjY2VwdChtZXNzYWdlKTsKLSAgICAgIH0pOwotICAgICAgcmV0dXJuIHRydWU7Ci0gICAg
Y2FzZSBrU2Vuc29yX0FkZENvbmZpZ3VyYXRpb25fTmFtZToKLSAgICAgIHZhciBwYXJhbXMgPSBy
ZWFkZXIuZGVjb2RlU3RydWN0KFNlbnNvcl9BZGRDb25maWd1cmF0aW9uX1BhcmFtcyk7Ci0gICAg
ICB0aGlzLmFkZENvbmZpZ3VyYXRpb24ocGFyYW1zLmNvbmZpZ3VyYXRpb24pLnRoZW4oZnVuY3Rp
b24ocmVzcG9uc2UpIHsKLSAgICAgICAgdmFyIHJlc3BvbnNlUGFyYW1zID0KLSAgICAgICAgICAg
IG5ldyBTZW5zb3JfQWRkQ29uZmlndXJhdGlvbl9SZXNwb25zZVBhcmFtcygpOwotICAgICAgICBy
ZXNwb25zZVBhcmFtcy5zdWNjZXNzID0gcmVzcG9uc2Uuc3VjY2VzczsKLSAgICAgICAgdmFyIGJ1
aWxkZXIgPSBuZXcgY29kZWMuTWVzc2FnZVYxQnVpbGRlcigKLSAgICAgICAgICAgIGtTZW5zb3Jf
QWRkQ29uZmlndXJhdGlvbl9OYW1lLAotICAgICAgICAgICAgY29kZWMuYWxpZ24oU2Vuc29yX0Fk
ZENvbmZpZ3VyYXRpb25fUmVzcG9uc2VQYXJhbXMuZW5jb2RlZFNpemUpLAotICAgICAgICAgICAg
Y29kZWMua01lc3NhZ2VJc1Jlc3BvbnNlLCByZWFkZXIucmVxdWVzdElEKTsKLSAgICAgICAgYnVp
bGRlci5lbmNvZGVTdHJ1Y3QoU2Vuc29yX0FkZENvbmZpZ3VyYXRpb25fUmVzcG9uc2VQYXJhbXMs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlUGFyYW1zKTsKLSAgICAgICAg
dmFyIG1lc3NhZ2UgPSBidWlsZGVyLmZpbmlzaCgpOwotICAgICAgICByZXNwb25kZXIuYWNjZXB0
KG1lc3NhZ2UpOwotICAgICAgfSk7Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICBkZWZhdWx0Ogot
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgfTsKLQotICBmdW5jdGlvbiB2YWxpZGF0ZVNl
bnNvclJlcXVlc3QobWVzc2FnZVZhbGlkYXRvcikgewotICAgIHZhciBtZXNzYWdlID0gbWVzc2Fn
ZVZhbGlkYXRvci5tZXNzYWdlOwotICAgIHZhciBwYXJhbXNDbGFzcyA9IG51bGw7Ci0gICAgc3dp
dGNoIChtZXNzYWdlLmdldE5hbWUoKSkgewotICAgICAgY2FzZSBrU2Vuc29yX0dldERlZmF1bHRD
b25maWd1cmF0aW9uX05hbWU6Ci0gICAgICAgIGlmIChtZXNzYWdlLmV4cGVjdHNSZXNwb25zZSgp
KQotICAgICAgICAgIHBhcmFtc0NsYXNzID0gU2Vuc29yX0dldERlZmF1bHRDb25maWd1cmF0aW9u
X1BhcmFtczsKLSAgICAgIGJyZWFrOwotICAgICAgY2FzZSBrU2Vuc29yX0FkZENvbmZpZ3VyYXRp
b25fTmFtZToKLSAgICAgICAgaWYgKG1lc3NhZ2UuZXhwZWN0c1Jlc3BvbnNlKCkpCi0gICAgICAg
ICAgcGFyYW1zQ2xhc3MgPSBTZW5zb3JfQWRkQ29uZmlndXJhdGlvbl9QYXJhbXM7Ci0gICAgICBi
cmVhazsKLSAgICAgIGNhc2Uga1NlbnNvcl9SZW1vdmVDb25maWd1cmF0aW9uX05hbWU6Ci0gICAg
ICAgIGlmICghbWVzc2FnZS5leHBlY3RzUmVzcG9uc2UoKSAmJiAhbWVzc2FnZS5pc1Jlc3BvbnNl
KCkpCi0gICAgICAgICAgcGFyYW1zQ2xhc3MgPSBTZW5zb3JfUmVtb3ZlQ29uZmlndXJhdGlvbl9Q
YXJhbXM7Ci0gICAgICBicmVhazsKLSAgICAgIGNhc2Uga1NlbnNvcl9TdXNwZW5kX05hbWU6Ci0g
ICAgICAgIGlmICghbWVzc2FnZS5leHBlY3RzUmVzcG9uc2UoKSAmJiAhbWVzc2FnZS5pc1Jlc3Bv
bnNlKCkpCi0gICAgICAgICAgcGFyYW1zQ2xhc3MgPSBTZW5zb3JfU3VzcGVuZF9QYXJhbXM7Ci0g
ICAgICBicmVhazsKLSAgICAgIGNhc2Uga1NlbnNvcl9SZXN1bWVfTmFtZToKLSAgICAgICAgaWYg
KCFtZXNzYWdlLmV4cGVjdHNSZXNwb25zZSgpICYmICFtZXNzYWdlLmlzUmVzcG9uc2UoKSkKLSAg
ICAgICAgICBwYXJhbXNDbGFzcyA9IFNlbnNvcl9SZXN1bWVfUGFyYW1zOwotICAgICAgYnJlYWs7
Ci0gICAgICBjYXNlIGtTZW5zb3JfQ29uZmlndXJlUmVhZGluZ0NoYW5nZU5vdGlmaWNhdGlvbnNf
TmFtZToKLSAgICAgICAgaWYgKCFtZXNzYWdlLmV4cGVjdHNSZXNwb25zZSgpICYmICFtZXNzYWdl
LmlzUmVzcG9uc2UoKSkKLSAgICAgICAgICBwYXJhbXNDbGFzcyA9IFNlbnNvcl9Db25maWd1cmVS
ZWFkaW5nQ2hhbmdlTm90aWZpY2F0aW9uc19QYXJhbXM7Ci0gICAgICBicmVhazsKLSAgICB9Ci0g
ICAgaWYgKHBhcmFtc0NsYXNzID09PSBudWxsKQotICAgICAgcmV0dXJuIHZhbGlkYXRvci52YWxp
ZGF0aW9uRXJyb3IuTk9ORTsKLSAgICByZXR1cm4gcGFyYW1zQ2xhc3MudmFsaWRhdGUobWVzc2Fn
ZVZhbGlkYXRvciwgbWVzc2FnZVZhbGlkYXRvci5tZXNzYWdlLmdldEhlYWRlck51bUJ5dGVzKCkp
OwotICB9Ci0KLSAgZnVuY3Rpb24gdmFsaWRhdGVTZW5zb3JSZXNwb25zZShtZXNzYWdlVmFsaWRh
dG9yKSB7Ci0gICB2YXIgbWVzc2FnZSA9IG1lc3NhZ2VWYWxpZGF0b3IubWVzc2FnZTsKLSAgIHZh
ciBwYXJhbXNDbGFzcyA9IG51bGw7Ci0gICBzd2l0Y2ggKG1lc3NhZ2UuZ2V0TmFtZSgpKSB7Ci0g
ICAgICBjYXNlIGtTZW5zb3JfR2V0RGVmYXVsdENvbmZpZ3VyYXRpb25fTmFtZToKLSAgICAgICAg
aWYgKG1lc3NhZ2UuaXNSZXNwb25zZSgpKQotICAgICAgICAgIHBhcmFtc0NsYXNzID0gU2Vuc29y
X0dldERlZmF1bHRDb25maWd1cmF0aW9uX1Jlc3BvbnNlUGFyYW1zOwotICAgICAgICBicmVhazsK
LSAgICAgIGNhc2Uga1NlbnNvcl9BZGRDb25maWd1cmF0aW9uX05hbWU6Ci0gICAgICAgIGlmICht
ZXNzYWdlLmlzUmVzcG9uc2UoKSkKLSAgICAgICAgICBwYXJhbXNDbGFzcyA9IFNlbnNvcl9BZGRD
b25maWd1cmF0aW9uX1Jlc3BvbnNlUGFyYW1zOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAg
aWYgKHBhcmFtc0NsYXNzID09PSBudWxsKQotICAgICAgcmV0dXJuIHZhbGlkYXRvci52YWxpZGF0
aW9uRXJyb3IuTk9ORTsKLSAgICByZXR1cm4gcGFyYW1zQ2xhc3MudmFsaWRhdGUobWVzc2FnZVZh
bGlkYXRvciwgbWVzc2FnZVZhbGlkYXRvci5tZXNzYWdlLmdldEhlYWRlck51bUJ5dGVzKCkpOwot
ICB9Ci0KLSAgdmFyIFNlbnNvciA9IHsKLSAgICBuYW1lOiAnZGV2aWNlLm1vam9tLlNlbnNvcics
Ci0gICAga1ZlcnNpb246IDAsCi0gICAgcHRyQ2xhc3M6IFNlbnNvclB0ciwKLSAgICBwcm94eUNs
YXNzOiBTZW5zb3JQcm94eSwKLSAgICBzdHViQ2xhc3M6IFNlbnNvclN0dWIsCi0gICAgdmFsaWRh
dGVSZXF1ZXN0OiB2YWxpZGF0ZVNlbnNvclJlcXVlc3QsCi0gICAgdmFsaWRhdGVSZXNwb25zZTog
dmFsaWRhdGVTZW5zb3JSZXNwb25zZSwKLSAgfTsKLSAgU2Vuc29yU3R1Yi5wcm90b3R5cGUudmFs
aWRhdG9yID0gdmFsaWRhdGVTZW5zb3JSZXF1ZXN0OwotICBTZW5zb3JQcm94eS5wcm90b3R5cGUu
dmFsaWRhdG9yID0gdmFsaWRhdGVTZW5zb3JSZXNwb25zZTsKLSAgdmFyIGtTZW5zb3JDbGllbnRf
UmFpc2VFcnJvcl9OYW1lID0gMDsKLSAgdmFyIGtTZW5zb3JDbGllbnRfU2Vuc29yUmVhZGluZ0No
YW5nZWRfTmFtZSA9IDE7Ci0KLSAgZnVuY3Rpb24gU2Vuc29yQ2xpZW50UHRyKGhhbmRsZU9yUHRy
SW5mbykgewotICAgIHRoaXMucHRyID0gbmV3IGJpbmRpbmdzLkludGVyZmFjZVB0ckNvbnRyb2xs
ZXIoU2Vuc29yQ2xpZW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaGFuZGxlT3JQdHJJbmZvKTsKLSAgfQotCi0gIGZ1bmN0aW9uIFNlbnNvckNs
aWVudEFzc29jaWF0ZWRQdHIoYXNzb2NpYXRlZEludGVyZmFjZVB0ckluZm8pIHsKLSAgICB0aGlz
LnB0ciA9IG5ldyBhc3NvY2lhdGVkQmluZGluZ3MuQXNzb2NpYXRlZEludGVyZmFjZVB0ckNvbnRy
b2xsZXIoCi0gICAgICAgIFNlbnNvckNsaWVudCwgYXNzb2NpYXRlZEludGVyZmFjZVB0ckluZm8p
OwotICB9Ci0KLSAgU2Vuc29yQ2xpZW50QXNzb2NpYXRlZFB0ci5wcm90b3R5cGUgPQotICAgICAg
T2JqZWN0LmNyZWF0ZShTZW5zb3JDbGllbnRQdHIucHJvdG90eXBlKTsKLSAgU2Vuc29yQ2xpZW50
QXNzb2NpYXRlZFB0ci5wcm90b3R5cGUuY29uc3RydWN0b3IgPQotICAgICAgU2Vuc29yQ2xpZW50
QXNzb2NpYXRlZFB0cjsKLQotICBmdW5jdGlvbiBTZW5zb3JDbGllbnRQcm94eShyZWNlaXZlcikg
ewotICAgIHRoaXMucmVjZWl2ZXJfID0gcmVjZWl2ZXI7Ci0gIH0KLSAgU2Vuc29yQ2xpZW50UHRy
LnByb3RvdHlwZS5yYWlzZUVycm9yID0gZnVuY3Rpb24oKSB7Ci0gICAgcmV0dXJuIFNlbnNvckNs
aWVudFByb3h5LnByb3RvdHlwZS5yYWlzZUVycm9yCi0gICAgICAgIC5hcHBseSh0aGlzLnB0ci5n
ZXRQcm94eSgpLCBhcmd1bWVudHMpOwotICB9OwotCi0gIFNlbnNvckNsaWVudFByb3h5LnByb3Rv
dHlwZS5yYWlzZUVycm9yID0gZnVuY3Rpb24oKSB7Ci0gICAgdmFyIHBhcmFtc18gPSBuZXcgU2Vu
c29yQ2xpZW50X1JhaXNlRXJyb3JfUGFyYW1zKCk7Ci0gICAgdmFyIGJ1aWxkZXIgPSBuZXcgY29k
ZWMuTWVzc2FnZVYwQnVpbGRlcigKLSAgICAgICAga1NlbnNvckNsaWVudF9SYWlzZUVycm9yX05h
bWUsCi0gICAgICAgIGNvZGVjLmFsaWduKFNlbnNvckNsaWVudF9SYWlzZUVycm9yX1BhcmFtcy5l
bmNvZGVkU2l6ZSkpOwotICAgIGJ1aWxkZXIuZW5jb2RlU3RydWN0KFNlbnNvckNsaWVudF9SYWlz
ZUVycm9yX1BhcmFtcywgcGFyYW1zXyk7Ci0gICAgdmFyIG1lc3NhZ2UgPSBidWlsZGVyLmZpbmlz
aCgpOwotICAgIHRoaXMucmVjZWl2ZXJfLmFjY2VwdChtZXNzYWdlKTsKLSAgfTsKLSAgU2Vuc29y
Q2xpZW50UHRyLnByb3RvdHlwZS5zZW5zb3JSZWFkaW5nQ2hhbmdlZCA9IGZ1bmN0aW9uKCkgewot
ICAgIHJldHVybiBTZW5zb3JDbGllbnRQcm94eS5wcm90b3R5cGUuc2Vuc29yUmVhZGluZ0NoYW5n
ZWQKLSAgICAgICAgLmFwcGx5KHRoaXMucHRyLmdldFByb3h5KCksIGFyZ3VtZW50cyk7Ci0gIH07
Ci0KLSAgU2Vuc29yQ2xpZW50UHJveHkucHJvdG90eXBlLnNlbnNvclJlYWRpbmdDaGFuZ2VkID0g
ZnVuY3Rpb24oKSB7Ci0gICAgdmFyIHBhcmFtc18gPSBuZXcgU2Vuc29yQ2xpZW50X1NlbnNvclJl
YWRpbmdDaGFuZ2VkX1BhcmFtcygpOwotICAgIHZhciBidWlsZGVyID0gbmV3IGNvZGVjLk1lc3Nh
Z2VWMEJ1aWxkZXIoCi0gICAgICAgIGtTZW5zb3JDbGllbnRfU2Vuc29yUmVhZGluZ0NoYW5nZWRf
TmFtZSwKLSAgICAgICAgY29kZWMuYWxpZ24oU2Vuc29yQ2xpZW50X1NlbnNvclJlYWRpbmdDaGFu
Z2VkX1BhcmFtcy5lbmNvZGVkU2l6ZSkpOwotICAgIGJ1aWxkZXIuZW5jb2RlU3RydWN0KFNlbnNv
ckNsaWVudF9TZW5zb3JSZWFkaW5nQ2hhbmdlZF9QYXJhbXMsIHBhcmFtc18pOwotICAgIHZhciBt
ZXNzYWdlID0gYnVpbGRlci5maW5pc2goKTsKLSAgICB0aGlzLnJlY2VpdmVyXy5hY2NlcHQobWVz
c2FnZSk7Ci0gIH07Ci0KLSAgZnVuY3Rpb24gU2Vuc29yQ2xpZW50U3R1YihkZWxlZ2F0ZSkgewot
ICAgIHRoaXMuZGVsZWdhdGVfID0gZGVsZWdhdGU7Ci0gIH0KLSAgU2Vuc29yQ2xpZW50U3R1Yi5w
cm90b3R5cGUucmFpc2VFcnJvciA9IGZ1bmN0aW9uKCkgewotICAgIHJldHVybiB0aGlzLmRlbGVn
YXRlXyAmJiB0aGlzLmRlbGVnYXRlXy5yYWlzZUVycm9yICYmIHRoaXMuZGVsZWdhdGVfLnJhaXNl
RXJyb3IoKTsKLSAgfQotICBTZW5zb3JDbGllbnRTdHViLnByb3RvdHlwZS5zZW5zb3JSZWFkaW5n
Q2hhbmdlZCA9IGZ1bmN0aW9uKCkgewotICAgIHJldHVybiB0aGlzLmRlbGVnYXRlXyAmJiB0aGlz
LmRlbGVnYXRlXy5zZW5zb3JSZWFkaW5nQ2hhbmdlZCAmJiB0aGlzLmRlbGVnYXRlXy5zZW5zb3JS
ZWFkaW5nQ2hhbmdlZCgpOwotICB9Ci0KLSAgU2Vuc29yQ2xpZW50U3R1Yi5wcm90b3R5cGUuYWNj
ZXB0ID0gZnVuY3Rpb24obWVzc2FnZSkgewotICAgIHZhciByZWFkZXIgPSBuZXcgY29kZWMuTWVz
c2FnZVJlYWRlcihtZXNzYWdlKTsKLSAgICBzd2l0Y2ggKHJlYWRlci5tZXNzYWdlTmFtZSkgewot
ICAgIGNhc2Uga1NlbnNvckNsaWVudF9SYWlzZUVycm9yX05hbWU6Ci0gICAgICB2YXIgcGFyYW1z
ID0gcmVhZGVyLmRlY29kZVN0cnVjdChTZW5zb3JDbGllbnRfUmFpc2VFcnJvcl9QYXJhbXMpOwot
ICAgICAgdGhpcy5yYWlzZUVycm9yKCk7Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICBjYXNlIGtT
ZW5zb3JDbGllbnRfU2Vuc29yUmVhZGluZ0NoYW5nZWRfTmFtZToKLSAgICAgIHZhciBwYXJhbXMg
PSByZWFkZXIuZGVjb2RlU3RydWN0KFNlbnNvckNsaWVudF9TZW5zb3JSZWFkaW5nQ2hhbmdlZF9Q
YXJhbXMpOwotICAgICAgdGhpcy5zZW5zb3JSZWFkaW5nQ2hhbmdlZCgpOwotICAgICAgcmV0dXJu
IHRydWU7Ci0gICAgZGVmYXVsdDoKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gIH07Ci0K
LSAgU2Vuc29yQ2xpZW50U3R1Yi5wcm90b3R5cGUuYWNjZXB0V2l0aFJlc3BvbmRlciA9Ci0gICAg
ICBmdW5jdGlvbihtZXNzYWdlLCByZXNwb25kZXIpIHsKLSAgICB2YXIgcmVhZGVyID0gbmV3IGNv
ZGVjLk1lc3NhZ2VSZWFkZXIobWVzc2FnZSk7Ci0gICAgc3dpdGNoIChyZWFkZXIubWVzc2FnZU5h
bWUpIHsKLSAgICBkZWZhdWx0OgotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgfTsKLQot
ICBmdW5jdGlvbiB2YWxpZGF0ZVNlbnNvckNsaWVudFJlcXVlc3QobWVzc2FnZVZhbGlkYXRvcikg
ewotICAgIHZhciBtZXNzYWdlID0gbWVzc2FnZVZhbGlkYXRvci5tZXNzYWdlOwotICAgIHZhciBw
YXJhbXNDbGFzcyA9IG51bGw7Ci0gICAgc3dpdGNoIChtZXNzYWdlLmdldE5hbWUoKSkgewotICAg
ICAgY2FzZSBrU2Vuc29yQ2xpZW50X1JhaXNlRXJyb3JfTmFtZToKLSAgICAgICAgaWYgKCFtZXNz
YWdlLmV4cGVjdHNSZXNwb25zZSgpICYmICFtZXNzYWdlLmlzUmVzcG9uc2UoKSkKLSAgICAgICAg
ICBwYXJhbXNDbGFzcyA9IFNlbnNvckNsaWVudF9SYWlzZUVycm9yX1BhcmFtczsKLSAgICAgIGJy
ZWFrOwotICAgICAgY2FzZSBrU2Vuc29yQ2xpZW50X1NlbnNvclJlYWRpbmdDaGFuZ2VkX05hbWU6
Ci0gICAgICAgIGlmICghbWVzc2FnZS5leHBlY3RzUmVzcG9uc2UoKSAmJiAhbWVzc2FnZS5pc1Jl
c3BvbnNlKCkpCi0gICAgICAgICAgcGFyYW1zQ2xhc3MgPSBTZW5zb3JDbGllbnRfU2Vuc29yUmVh
ZGluZ0NoYW5nZWRfUGFyYW1zOwotICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGlmIChwYXJhbXND
bGFzcyA9PT0gbnVsbCkKLSAgICAgIHJldHVybiB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5P
TkU7Ci0gICAgcmV0dXJuIHBhcmFtc0NsYXNzLnZhbGlkYXRlKG1lc3NhZ2VWYWxpZGF0b3IsIG1l
c3NhZ2VWYWxpZGF0b3IubWVzc2FnZS5nZXRIZWFkZXJOdW1CeXRlcygpKTsKLSAgfQotCi0gIGZ1
bmN0aW9uIHZhbGlkYXRlU2Vuc29yQ2xpZW50UmVzcG9uc2UobWVzc2FnZVZhbGlkYXRvcikgewot
ICAgIHJldHVybiB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkU7Ci0gIH0KLQotICB2YXIg
U2Vuc29yQ2xpZW50ID0gewotICAgIG5hbWU6ICdkZXZpY2UubW9qb20uU2Vuc29yQ2xpZW50JywK
LSAgICBrVmVyc2lvbjogMCwKLSAgICBwdHJDbGFzczogU2Vuc29yQ2xpZW50UHRyLAotICAgIHBy
b3h5Q2xhc3M6IFNlbnNvckNsaWVudFByb3h5LAotICAgIHN0dWJDbGFzczogU2Vuc29yQ2xpZW50
U3R1YiwKLSAgICB2YWxpZGF0ZVJlcXVlc3Q6IHZhbGlkYXRlU2Vuc29yQ2xpZW50UmVxdWVzdCwK
LSAgICB2YWxpZGF0ZVJlc3BvbnNlOiBudWxsLAotICB9OwotICBTZW5zb3JDbGllbnRTdHViLnBy
b3RvdHlwZS52YWxpZGF0b3IgPSB2YWxpZGF0ZVNlbnNvckNsaWVudFJlcXVlc3Q7Ci0gIFNlbnNv
ckNsaWVudFByb3h5LnByb3RvdHlwZS52YWxpZGF0b3IgPSBudWxsOwotICBleHBvcnRzLlNlbnNv
clR5cGUgPSBTZW5zb3JUeXBlOwotICBleHBvcnRzLlJlcG9ydGluZ01vZGUgPSBSZXBvcnRpbmdN
b2RlOwotICBleHBvcnRzLlNlbnNvckNvbmZpZ3VyYXRpb24gPSBTZW5zb3JDb25maWd1cmF0aW9u
OwotICBleHBvcnRzLlNlbnNvciA9IFNlbnNvcjsKLSAgZXhwb3J0cy5TZW5zb3JQdHIgPSBTZW5z
b3JQdHI7Ci0gIGV4cG9ydHMuU2Vuc29yQXNzb2NpYXRlZFB0ciA9IFNlbnNvckFzc29jaWF0ZWRQ
dHI7Ci0gIGV4cG9ydHMuU2Vuc29yQ2xpZW50ID0gU2Vuc29yQ2xpZW50OwotICBleHBvcnRzLlNl
bnNvckNsaWVudFB0ciA9IFNlbnNvckNsaWVudFB0cjsKLSAgZXhwb3J0cy5TZW5zb3JDbGllbnRB
c3NvY2lhdGVkUHRyID0gU2Vuc29yQ2xpZW50QXNzb2NpYXRlZFB0cjsKLX0pKCk7ClwgTm8gbmV3
bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNj
L3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vc2Vuc29yX3Byb3ZpZGVyLm1v
am9tLmpzIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNv
dXJjZXMvY2hyb21pdW0vc2Vuc29yX3Byb3ZpZGVyLm1vam9tLmpzCmRlbGV0ZWQgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCBkODJiMTVhMzA0YTI0MzlmNTIwNmU1YmM4NmI5MWM1MWZjZjk0YmQ4Li4w
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL0xheW91dFRlc3Rz
L2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL3NlbnNv
cl9wcm92aWRlci5tb2pvbS5qcworKysgL2Rldi9udWxsCkBAIC0xLDQyOSArMCwwIEBACi0vLyBD
b3B5cmlnaHQgMjAxNCBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxp
Y2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLSd1c2Ug
c3RyaWN0JzsKLQotKGZ1bmN0aW9uKCkgewotICB2YXIgbW9qb21JZCA9ICdzZXJ2aWNlcy9kZXZp
Y2UvcHVibGljL21vam9tL3NlbnNvcl9wcm92aWRlci5tb2pvbSc7Ci0gIGlmIChtb2pvLmludGVy
bmFsLmlzTW9qb21Mb2FkZWQobW9qb21JZCkpIHsKLSAgICBjb25zb2xlLndhcm4oJ1RoZSBmb2xs
b3dpbmcgbW9qb20gaXMgbG9hZGVkIG11bHRpcGxlIHRpbWVzOiAnICsgbW9qb21JZCk7Ci0gICAg
cmV0dXJuOwotICB9Ci0gIG1vam8uaW50ZXJuYWwubWFya01vam9tTG9hZGVkKG1vam9tSWQpOwot
ICB2YXIgYmluZGluZ3MgPSBtb2pvOwotICB2YXIgYXNzb2NpYXRlZEJpbmRpbmdzID0gbW9qbzsK
LSAgdmFyIGNvZGVjID0gbW9qby5pbnRlcm5hbDsKLSAgdmFyIHZhbGlkYXRvciA9IG1vam8uaW50
ZXJuYWw7Ci0KLSAgdmFyIGV4cG9ydHMgPSBtb2pvLmludGVybmFsLmV4cG9zZU5hbWVzcGFjZSgn
ZGV2aWNlLm1vam9tJyk7Ci0gIHZhciBzZW5zb3IkID0KLSAgICAgIG1vam8uaW50ZXJuYWwuZXhw
b3NlTmFtZXNwYWNlKCdkZXZpY2UubW9qb20nKTsKLSAgaWYgKG1vam8uY29uZmlnLmF1dG9Mb2Fk
TW9qb21EZXBzKSB7Ci0gICAgbW9qby5pbnRlcm5hbC5sb2FkTW9qb21JZk5lY2Vzc2FyeSgKLSAg
ICAgICAgJ3NlcnZpY2VzL2RldmljZS9wdWJsaWMvbW9qb20vc2Vuc29yLm1vam9tJywgJ3NlbnNv
ci5tb2pvbS5qcycpOwotICB9Ci0KLQotICB2YXIgU2Vuc29yQ3JlYXRpb25SZXN1bHQgPSB7fTsK
LSAgU2Vuc29yQ3JlYXRpb25SZXN1bHQuU1VDQ0VTUyA9IDA7Ci0gIFNlbnNvckNyZWF0aW9uUmVz
dWx0LkVSUk9SX05PVF9BVkFJTEFCTEUgPSBTZW5zb3JDcmVhdGlvblJlc3VsdC5TVUNDRVNTICsg
MTsKLSAgU2Vuc29yQ3JlYXRpb25SZXN1bHQuRVJST1JfTk9UX0FMTE9XRUQgPSBTZW5zb3JDcmVh
dGlvblJlc3VsdC5FUlJPUl9OT1RfQVZBSUxBQkxFICsgMTsKLQotICBTZW5zb3JDcmVhdGlvblJl
c3VsdC5pc0tub3duRW51bVZhbHVlID0gZnVuY3Rpb24odmFsdWUpIHsKLSAgICBzd2l0Y2ggKHZh
bHVlKSB7Ci0gICAgY2FzZSAwOgotICAgIGNhc2UgMToKLSAgICBjYXNlIDI6Ci0gICAgICByZXR1
cm4gdHJ1ZTsKLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9OwotCi0gIFNlbnNvckNyZWF0
aW9uUmVzdWx0LnZhbGlkYXRlID0gZnVuY3Rpb24oZW51bVZhbHVlKSB7Ci0gICAgdmFyIGlzRXh0
ZW5zaWJsZSA9IGZhbHNlOwotICAgIGlmIChpc0V4dGVuc2libGUgfHwgdGhpcy5pc0tub3duRW51
bVZhbHVlKGVudW1WYWx1ZSkpCi0gICAgICByZXR1cm4gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJv
ci5OT05FOwotCi0gICAgcmV0dXJuIHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuVU5LTk9XTl9F
TlVNX1ZBTFVFOwotICB9OwotCi0gIGZ1bmN0aW9uIFNlbnNvckluaXRQYXJhbXModmFsdWVzKSB7
Ci0gICAgdGhpcy5pbml0RGVmYXVsdHNfKCk7Ci0gICAgdGhpcy5pbml0RmllbGRzXyh2YWx1ZXMp
OwotICB9Ci0KLQotICBTZW5zb3JJbml0UGFyYW1zLmtSZWFkQnVmZmVyU2l6ZUZvclRlc3RzID0g
NDg7Ci0gIFNlbnNvckluaXRQYXJhbXMucHJvdG90eXBlLmluaXREZWZhdWx0c18gPSBmdW5jdGlv
bigpIHsKLSAgICB0aGlzLnNlbnNvciA9IG5ldyBzZW5zb3IkLlNlbnNvclB0cigpOwotICAgIHRo
aXMuY2xpZW50UmVjZWl2ZXIgPSBuZXcgYmluZGluZ3MuSW50ZXJmYWNlUmVxdWVzdCgpOwotICAg
IHRoaXMubWVtb3J5ID0gbnVsbDsKLSAgICB0aGlzLmJ1ZmZlck9mZnNldCA9IDA7Ci0gICAgdGhp
cy5tb2RlID0gMDsKLSAgICB0aGlzLmRlZmF1bHRDb25maWd1cmF0aW9uID0gbnVsbDsKLSAgICB0
aGlzLm1heGltdW1GcmVxdWVuY3kgPSAwOwotICAgIHRoaXMubWluaW11bUZyZXF1ZW5jeSA9IDA7
Ci0gIH07Ci0gIFNlbnNvckluaXRQYXJhbXMucHJvdG90eXBlLmluaXRGaWVsZHNfID0gZnVuY3Rp
b24oZmllbGRzKSB7Ci0gICAgZm9yKHZhciBmaWVsZCBpbiBmaWVsZHMpIHsKLSAgICAgICAgaWYg
KHRoaXMuaGFzT3duUHJvcGVydHkoZmllbGQpKQotICAgICAgICAgIHRoaXNbZmllbGRdID0gZmll
bGRzW2ZpZWxkXTsKLSAgICB9Ci0gIH07Ci0KLSAgU2Vuc29ySW5pdFBhcmFtcy52YWxpZGF0ZSA9
IGZ1bmN0aW9uKG1lc3NhZ2VWYWxpZGF0b3IsIG9mZnNldCkgewotICAgIHZhciBlcnI7Ci0gICAg
ZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdEhlYWRlcihvZmZzZXQsIGNvZGVj
LmtTdHJ1Y3RIZWFkZXJTaXplKTsKLSAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlv
bkVycm9yLk5PTkUpCi0gICAgICAgIHJldHVybiBlcnI7Ci0KLSAgICB2YXIga1ZlcnNpb25TaXpl
cyA9IFsKLSAgICAgIHt2ZXJzaW9uOiAwLCBudW1CeXRlczogNjR9Ci0gICAgXTsKLSAgICBlcnIg
PSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0VmVyc2lvbihvZmZzZXQsIGtWZXJzaW9u
U2l6ZXMpOwotICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkK
LSAgICAgICAgcmV0dXJuIGVycjsKLQotCi0gICAgLy8gdmFsaWRhdGUgU2Vuc29ySW5pdFBhcmFt
cy5zZW5zb3IKLSAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlSW50ZXJmYWNlKG9m
ZnNldCArIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgMCwgZmFsc2UpOwotICAgIGlmIChlcnIg
IT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKLSAgICAgICAgcmV0dXJuIGVycjsK
LQotCi0gICAgLy8gdmFsaWRhdGUgU2Vuc29ySW5pdFBhcmFtcy5jbGllbnRSZWNlaXZlcgotICAg
IGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVJbnRlcmZhY2VSZXF1ZXN0KG9mZnNldCAr
IGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgOCwgZmFsc2UpCi0gICAgaWYgKGVyciAhPT0gdmFs
aWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQotICAgICAgICByZXR1cm4gZXJyOwotCi0KLSAg
ICAvLyB2YWxpZGF0ZSBTZW5zb3JJbml0UGFyYW1zLm1lbW9yeQotICAgIGVyciA9IG1lc3NhZ2VW
YWxpZGF0b3IudmFsaWRhdGVIYW5kbGUob2Zmc2V0ICsgY29kZWMua1N0cnVjdEhlYWRlclNpemUg
KyAxMiwgZmFsc2UpCi0gICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5O
T05FKQotICAgICAgICByZXR1cm4gZXJyOwotCi0KLQotICAgIC8vIHZhbGlkYXRlIFNlbnNvcklu
aXRQYXJhbXMubW9kZQotICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVFbnVtKG9m
ZnNldCArIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgMjQsIHNlbnNvciQuUmVwb3J0aW5nTW9k
ZSk7Ci0gICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQotICAg
ICAgICByZXR1cm4gZXJyOwotCi0KLSAgICAvLyB2YWxpZGF0ZSBTZW5zb3JJbml0UGFyYW1zLmRl
ZmF1bHRDb25maWd1cmF0aW9uCi0gICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0
cnVjdFBvaW50ZXIob2Zmc2V0ICsgY29kZWMua1N0cnVjdEhlYWRlclNpemUgKyAzMiwgc2Vuc29y
JC5TZW5zb3JDb25maWd1cmF0aW9uLCBmYWxzZSk7Ci0gICAgaWYgKGVyciAhPT0gdmFsaWRhdG9y
LnZhbGlkYXRpb25FcnJvci5OT05FKQotICAgICAgICByZXR1cm4gZXJyOwotCi0KLQotICAgIHJl
dHVybiB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkU7Ci0gIH07Ci0KLSAgU2Vuc29ySW5p
dFBhcmFtcy5lbmNvZGVkU2l6ZSA9IGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgNTY7Ci0KLSAg
U2Vuc29ySW5pdFBhcmFtcy5kZWNvZGUgPSBmdW5jdGlvbihkZWNvZGVyKSB7Ci0gICAgdmFyIHBh
Y2tlZDsKLSAgICB2YXIgdmFsID0gbmV3IFNlbnNvckluaXRQYXJhbXMoKTsKLSAgICB2YXIgbnVt
YmVyT2ZCeXRlcyA9IGRlY29kZXIucmVhZFVpbnQzMigpOwotICAgIHZhciB2ZXJzaW9uID0gZGVj
b2Rlci5yZWFkVWludDMyKCk7Ci0gICAgdmFsLnNlbnNvciA9IGRlY29kZXIuZGVjb2RlU3RydWN0
KG5ldyBjb2RlYy5JbnRlcmZhY2Uoc2Vuc29yJC5TZW5zb3JQdHIpKTsKLSAgICB2YWwuY2xpZW50
UmVjZWl2ZXIgPSBkZWNvZGVyLmRlY29kZVN0cnVjdChjb2RlYy5JbnRlcmZhY2VSZXF1ZXN0KTsK
LSAgICB2YWwubWVtb3J5ID0gZGVjb2Rlci5kZWNvZGVTdHJ1Y3QoY29kZWMuSGFuZGxlKTsKLSAg
ICB2YWwuYnVmZmVyT2Zmc2V0ID0gZGVjb2Rlci5kZWNvZGVTdHJ1Y3QoY29kZWMuVWludDY0KTsK
LSAgICB2YWwubW9kZSA9IGRlY29kZXIuZGVjb2RlU3RydWN0KGNvZGVjLkludDMyKTsKLSAgICBk
ZWNvZGVyLnNraXAoMSk7Ci0gICAgZGVjb2Rlci5za2lwKDEpOwotICAgIGRlY29kZXIuc2tpcCgx
KTsKLSAgICBkZWNvZGVyLnNraXAoMSk7Ci0gICAgdmFsLmRlZmF1bHRDb25maWd1cmF0aW9uID0g
ZGVjb2Rlci5kZWNvZGVTdHJ1Y3RQb2ludGVyKHNlbnNvciQuU2Vuc29yQ29uZmlndXJhdGlvbik7
Ci0gICAgdmFsLm1heGltdW1GcmVxdWVuY3kgPSBkZWNvZGVyLmRlY29kZVN0cnVjdChjb2RlYy5E
b3VibGUpOwotICAgIHZhbC5taW5pbXVtRnJlcXVlbmN5ID0gZGVjb2Rlci5kZWNvZGVTdHJ1Y3Qo
Y29kZWMuRG91YmxlKTsKLSAgICByZXR1cm4gdmFsOwotICB9OwotCi0gIFNlbnNvckluaXRQYXJh
bXMuZW5jb2RlID0gZnVuY3Rpb24oZW5jb2RlciwgdmFsKSB7Ci0gICAgdmFyIHBhY2tlZDsKLSAg
ICBlbmNvZGVyLndyaXRlVWludDMyKFNlbnNvckluaXRQYXJhbXMuZW5jb2RlZFNpemUpOwotICAg
IGVuY29kZXIud3JpdGVVaW50MzIoMCk7Ci0gICAgZW5jb2Rlci5lbmNvZGVTdHJ1Y3QobmV3IGNv
ZGVjLkludGVyZmFjZShzZW5zb3IkLlNlbnNvclB0ciksIHZhbC5zZW5zb3IpOwotICAgIGVuY29k
ZXIuZW5jb2RlU3RydWN0KGNvZGVjLkludGVyZmFjZVJlcXVlc3QsIHZhbC5jbGllbnRSZWNlaXZl
cik7Ci0gICAgZW5jb2Rlci5lbmNvZGVTdHJ1Y3QoY29kZWMuSGFuZGxlLCB2YWwubWVtb3J5KTsK
LSAgICBlbmNvZGVyLmVuY29kZVN0cnVjdChjb2RlYy5VaW50NjQsIHZhbC5idWZmZXJPZmZzZXQp
OwotICAgIGVuY29kZXIuZW5jb2RlU3RydWN0KGNvZGVjLkludDMyLCB2YWwubW9kZSk7Ci0gICAg
ZW5jb2Rlci5za2lwKDEpOwotICAgIGVuY29kZXIuc2tpcCgxKTsKLSAgICBlbmNvZGVyLnNraXAo
MSk7Ci0gICAgZW5jb2Rlci5za2lwKDEpOwotICAgIGVuY29kZXIuZW5jb2RlU3RydWN0UG9pbnRl
cihzZW5zb3IkLlNlbnNvckNvbmZpZ3VyYXRpb24sIHZhbC5kZWZhdWx0Q29uZmlndXJhdGlvbik7
Ci0gICAgZW5jb2Rlci5lbmNvZGVTdHJ1Y3QoY29kZWMuRG91YmxlLCB2YWwubWF4aW11bUZyZXF1
ZW5jeSk7Ci0gICAgZW5jb2Rlci5lbmNvZGVTdHJ1Y3QoY29kZWMuRG91YmxlLCB2YWwubWluaW11
bUZyZXF1ZW5jeSk7Ci0gIH07Ci0gIGZ1bmN0aW9uIFNlbnNvclByb3ZpZGVyX0dldFNlbnNvcl9Q
YXJhbXModmFsdWVzKSB7Ci0gICAgdGhpcy5pbml0RGVmYXVsdHNfKCk7Ci0gICAgdGhpcy5pbml0
RmllbGRzXyh2YWx1ZXMpOwotICB9Ci0KLQotICBTZW5zb3JQcm92aWRlcl9HZXRTZW5zb3JfUGFy
YW1zLnByb3RvdHlwZS5pbml0RGVmYXVsdHNfID0gZnVuY3Rpb24oKSB7Ci0gICAgdGhpcy50eXBl
ID0gMDsKLSAgfTsKLSAgU2Vuc29yUHJvdmlkZXJfR2V0U2Vuc29yX1BhcmFtcy5wcm90b3R5cGUu
aW5pdEZpZWxkc18gPSBmdW5jdGlvbihmaWVsZHMpIHsKLSAgICBmb3IodmFyIGZpZWxkIGluIGZp
ZWxkcykgewotICAgICAgICBpZiAodGhpcy5oYXNPd25Qcm9wZXJ0eShmaWVsZCkpCi0gICAgICAg
ICAgdGhpc1tmaWVsZF0gPSBmaWVsZHNbZmllbGRdOwotICAgIH0KLSAgfTsKLQotICBTZW5zb3JQ
cm92aWRlcl9HZXRTZW5zb3JfUGFyYW1zLnZhbGlkYXRlID0gZnVuY3Rpb24obWVzc2FnZVZhbGlk
YXRvciwgb2Zmc2V0KSB7Ci0gICAgdmFyIGVycjsKLSAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9y
LnZhbGlkYXRlU3RydWN0SGVhZGVyKG9mZnNldCwgY29kZWMua1N0cnVjdEhlYWRlclNpemUpOwot
ICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKLSAgICAgICAg
cmV0dXJuIGVycjsKLQotICAgIHZhciBrVmVyc2lvblNpemVzID0gWwotICAgICAge3ZlcnNpb246
IDAsIG51bUJ5dGVzOiAxNn0KLSAgICBdOwotICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFs
aWRhdGVTdHJ1Y3RWZXJzaW9uKG9mZnNldCwga1ZlcnNpb25TaXplcyk7Ci0gICAgaWYgKGVyciAh
PT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQotICAgICAgICByZXR1cm4gZXJyOwot
Ci0KLSAgICAvLyB2YWxpZGF0ZSBTZW5zb3JQcm92aWRlcl9HZXRTZW5zb3JfUGFyYW1zLnR5cGUK
LSAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlRW51bShvZmZzZXQgKyBjb2RlYy5r
U3RydWN0SGVhZGVyU2l6ZSArIDAsIHNlbnNvciQuU2Vuc29yVHlwZSk7Ci0gICAgaWYgKGVyciAh
PT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQotICAgICAgICByZXR1cm4gZXJyOwot
Ci0gICAgcmV0dXJuIHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORTsKLSAgfTsKLQotICBT
ZW5zb3JQcm92aWRlcl9HZXRTZW5zb3JfUGFyYW1zLmVuY29kZWRTaXplID0gY29kZWMua1N0cnVj
dEhlYWRlclNpemUgKyA4OwotCi0gIFNlbnNvclByb3ZpZGVyX0dldFNlbnNvcl9QYXJhbXMuZGVj
b2RlID0gZnVuY3Rpb24oZGVjb2RlcikgewotICAgIHZhciBwYWNrZWQ7Ci0gICAgdmFyIHZhbCA9
IG5ldyBTZW5zb3JQcm92aWRlcl9HZXRTZW5zb3JfUGFyYW1zKCk7Ci0gICAgdmFyIG51bWJlck9m
Qnl0ZXMgPSBkZWNvZGVyLnJlYWRVaW50MzIoKTsKLSAgICB2YXIgdmVyc2lvbiA9IGRlY29kZXIu
cmVhZFVpbnQzMigpOwotICAgIHZhbC50eXBlID0gZGVjb2Rlci5kZWNvZGVTdHJ1Y3QoY29kZWMu
SW50MzIpOwotICAgIGRlY29kZXIuc2tpcCgxKTsKLSAgICBkZWNvZGVyLnNraXAoMSk7Ci0gICAg
ZGVjb2Rlci5za2lwKDEpOwotICAgIGRlY29kZXIuc2tpcCgxKTsKLSAgICByZXR1cm4gdmFsOwot
ICB9OwotCi0gIFNlbnNvclByb3ZpZGVyX0dldFNlbnNvcl9QYXJhbXMuZW5jb2RlID0gZnVuY3Rp
b24oZW5jb2RlciwgdmFsKSB7Ci0gICAgdmFyIHBhY2tlZDsKLSAgICBlbmNvZGVyLndyaXRlVWlu
dDMyKFNlbnNvclByb3ZpZGVyX0dldFNlbnNvcl9QYXJhbXMuZW5jb2RlZFNpemUpOwotICAgIGVu
Y29kZXIud3JpdGVVaW50MzIoMCk7Ci0gICAgZW5jb2Rlci5lbmNvZGVTdHJ1Y3QoY29kZWMuSW50
MzIsIHZhbC50eXBlKTsKLSAgICBlbmNvZGVyLnNraXAoMSk7Ci0gICAgZW5jb2Rlci5za2lwKDEp
OwotICAgIGVuY29kZXIuc2tpcCgxKTsKLSAgICBlbmNvZGVyLnNraXAoMSk7Ci0gIH07Ci0gIGZ1
bmN0aW9uIFNlbnNvclByb3ZpZGVyX0dldFNlbnNvcl9SZXNwb25zZVBhcmFtcyh2YWx1ZXMpIHsK
LSAgICB0aGlzLmluaXREZWZhdWx0c18oKTsKLSAgICB0aGlzLmluaXRGaWVsZHNfKHZhbHVlcyk7
Ci0gIH0KLQotCi0gIFNlbnNvclByb3ZpZGVyX0dldFNlbnNvcl9SZXNwb25zZVBhcmFtcy5wcm90
b3R5cGUuaW5pdERlZmF1bHRzXyA9IGZ1bmN0aW9uKCkgewotICAgIHRoaXMucmVzdWx0ID0gMDsK
LSAgICB0aGlzLmluaXRQYXJhbXMgPSBudWxsOwotICB9OwotICBTZW5zb3JQcm92aWRlcl9HZXRT
ZW5zb3JfUmVzcG9uc2VQYXJhbXMucHJvdG90eXBlLmluaXRGaWVsZHNfID0gZnVuY3Rpb24oZmll
bGRzKSB7Ci0gICAgZm9yKHZhciBmaWVsZCBpbiBmaWVsZHMpIHsKLSAgICAgICAgaWYgKHRoaXMu
aGFzT3duUHJvcGVydHkoZmllbGQpKQotICAgICAgICAgIHRoaXNbZmllbGRdID0gZmllbGRzW2Zp
ZWxkXTsKLSAgICB9Ci0gIH07Ci0KLSAgU2Vuc29yUHJvdmlkZXJfR2V0U2Vuc29yX1Jlc3BvbnNl
UGFyYW1zLnZhbGlkYXRlID0gZnVuY3Rpb24obWVzc2FnZVZhbGlkYXRvciwgb2Zmc2V0KSB7Ci0g
ICAgdmFyIGVycjsKLSAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0SGVh
ZGVyKG9mZnNldCwgY29kZWMua1N0cnVjdEhlYWRlclNpemUpOwotICAgIGlmIChlcnIgIT09IHZh
bGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKLSAgICAgICAgcmV0dXJuIGVycjsKLQotICAg
IHZhciBrVmVyc2lvblNpemVzID0gWwotICAgICAge3ZlcnNpb246IDAsIG51bUJ5dGVzOiAyNH0K
LSAgICBdOwotICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RWZXJzaW9u
KG9mZnNldCwga1ZlcnNpb25TaXplcyk7Ci0gICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlk
YXRpb25FcnJvci5OT05FKQotICAgICAgICByZXR1cm4gZXJyOwotCi0KLSAgICAvLyB2YWxpZGF0
ZSBTZW5zb3JQcm92aWRlcl9HZXRTZW5zb3JfUmVzcG9uc2VQYXJhbXMucmVzdWx0Ci0gICAgZXJy
ID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZUVudW0ob2Zmc2V0ICsgY29kZWMua1N0cnVjdEhl
YWRlclNpemUgKyAwLCBTZW5zb3JDcmVhdGlvblJlc3VsdCk7Ci0gICAgaWYgKGVyciAhPT0gdmFs
aWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQotICAgICAgICByZXR1cm4gZXJyOwotCi0KLSAg
ICAvLyB2YWxpZGF0ZSBTZW5zb3JQcm92aWRlcl9HZXRTZW5zb3JfUmVzcG9uc2VQYXJhbXMuaW5p
dFBhcmFtcwotICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RQb2ludGVy
KG9mZnNldCArIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgOCwgU2Vuc29ySW5pdFBhcmFtcywg
dHJ1ZSk7Ci0gICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQot
ICAgICAgICByZXR1cm4gZXJyOwotCi0gICAgcmV0dXJuIHZhbGlkYXRvci52YWxpZGF0aW9uRXJy
b3IuTk9ORTsKLSAgfTsKLQotICBTZW5zb3JQcm92aWRlcl9HZXRTZW5zb3JfUmVzcG9uc2VQYXJh
bXMuZW5jb2RlZFNpemUgPSBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDE2OwotCi0gIFNlbnNv
clByb3ZpZGVyX0dldFNlbnNvcl9SZXNwb25zZVBhcmFtcy5kZWNvZGUgPSBmdW5jdGlvbihkZWNv
ZGVyKSB7Ci0gICAgdmFyIHBhY2tlZDsKLSAgICB2YXIgdmFsID0gbmV3IFNlbnNvclByb3ZpZGVy
X0dldFNlbnNvcl9SZXNwb25zZVBhcmFtcygpOwotICAgIHZhciBudW1iZXJPZkJ5dGVzID0gZGVj
b2Rlci5yZWFkVWludDMyKCk7Ci0gICAgdmFyIHZlcnNpb24gPSBkZWNvZGVyLnJlYWRVaW50MzIo
KTsKLSAgICB2YWwucmVzdWx0ID0gZGVjb2Rlci5kZWNvZGVTdHJ1Y3QoY29kZWMuSW50MzIpOwot
ICAgIGRlY29kZXIuc2tpcCgxKTsKLSAgICBkZWNvZGVyLnNraXAoMSk7Ci0gICAgZGVjb2Rlci5z
a2lwKDEpOwotICAgIGRlY29kZXIuc2tpcCgxKTsKLSAgICB2YWwuaW5pdFBhcmFtcyA9IGRlY29k
ZXIuZGVjb2RlU3RydWN0UG9pbnRlcihTZW5zb3JJbml0UGFyYW1zKTsKLSAgICByZXR1cm4gdmFs
OwotICB9OwotCi0gIFNlbnNvclByb3ZpZGVyX0dldFNlbnNvcl9SZXNwb25zZVBhcmFtcy5lbmNv
ZGUgPSBmdW5jdGlvbihlbmNvZGVyLCB2YWwpIHsKLSAgICB2YXIgcGFja2VkOwotICAgIGVuY29k
ZXIud3JpdGVVaW50MzIoU2Vuc29yUHJvdmlkZXJfR2V0U2Vuc29yX1Jlc3BvbnNlUGFyYW1zLmVu
Y29kZWRTaXplKTsKLSAgICBlbmNvZGVyLndyaXRlVWludDMyKDApOwotICAgIGVuY29kZXIuZW5j
b2RlU3RydWN0KGNvZGVjLkludDMyLCB2YWwucmVzdWx0KTsKLSAgICBlbmNvZGVyLnNraXAoMSk7
Ci0gICAgZW5jb2Rlci5za2lwKDEpOwotICAgIGVuY29kZXIuc2tpcCgxKTsKLSAgICBlbmNvZGVy
LnNraXAoMSk7Ci0gICAgZW5jb2Rlci5lbmNvZGVTdHJ1Y3RQb2ludGVyKFNlbnNvckluaXRQYXJh
bXMsIHZhbC5pbml0UGFyYW1zKTsKLSAgfTsKLSAgdmFyIGtTZW5zb3JQcm92aWRlcl9HZXRTZW5z
b3JfTmFtZSA9IDA7Ci0KLSAgZnVuY3Rpb24gU2Vuc29yUHJvdmlkZXJQdHIoaGFuZGxlT3JQdHJJ
bmZvKSB7Ci0gICAgdGhpcy5wdHIgPSBuZXcgYmluZGluZ3MuSW50ZXJmYWNlUHRyQ29udHJvbGxl
cihTZW5zb3JQcm92aWRlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGhhbmRsZU9yUHRySW5mbyk7Ci0gIH0KLQotICBmdW5jdGlvbiBTZW5zb3JQ
cm92aWRlckFzc29jaWF0ZWRQdHIoYXNzb2NpYXRlZEludGVyZmFjZVB0ckluZm8pIHsKLSAgICB0
aGlzLnB0ciA9IG5ldyBhc3NvY2lhdGVkQmluZGluZ3MuQXNzb2NpYXRlZEludGVyZmFjZVB0ckNv
bnRyb2xsZXIoCi0gICAgICAgIFNlbnNvclByb3ZpZGVyLCBhc3NvY2lhdGVkSW50ZXJmYWNlUHRy
SW5mbyk7Ci0gIH0KLQotICBTZW5zb3JQcm92aWRlckFzc29jaWF0ZWRQdHIucHJvdG90eXBlID0K
LSAgICAgIE9iamVjdC5jcmVhdGUoU2Vuc29yUHJvdmlkZXJQdHIucHJvdG90eXBlKTsKLSAgU2Vu
c29yUHJvdmlkZXJBc3NvY2lhdGVkUHRyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9Ci0gICAgICBT
ZW5zb3JQcm92aWRlckFzc29jaWF0ZWRQdHI7Ci0KLSAgZnVuY3Rpb24gU2Vuc29yUHJvdmlkZXJQ
cm94eShyZWNlaXZlcikgewotICAgIHRoaXMucmVjZWl2ZXJfID0gcmVjZWl2ZXI7Ci0gIH0KLSAg
U2Vuc29yUHJvdmlkZXJQdHIucHJvdG90eXBlLmdldFNlbnNvciA9IGZ1bmN0aW9uKCkgewotICAg
IHJldHVybiBTZW5zb3JQcm92aWRlclByb3h5LnByb3RvdHlwZS5nZXRTZW5zb3IKLSAgICAgICAg
LmFwcGx5KHRoaXMucHRyLmdldFByb3h5KCksIGFyZ3VtZW50cyk7Ci0gIH07Ci0KLSAgU2Vuc29y
UHJvdmlkZXJQcm94eS5wcm90b3R5cGUuZ2V0U2Vuc29yID0gZnVuY3Rpb24odHlwZSkgewotICAg
IHZhciBwYXJhbXMgPSBuZXcgU2Vuc29yUHJvdmlkZXJfR2V0U2Vuc29yX1BhcmFtcygpOwotICAg
IHBhcmFtcy50eXBlID0gdHlwZTsKLSAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVz
b2x2ZSwgcmVqZWN0KSB7Ci0gICAgICB2YXIgYnVpbGRlciA9IG5ldyBjb2RlYy5NZXNzYWdlVjFC
dWlsZGVyKAotICAgICAgICAgIGtTZW5zb3JQcm92aWRlcl9HZXRTZW5zb3JfTmFtZSwKLSAgICAg
ICAgICBjb2RlYy5hbGlnbihTZW5zb3JQcm92aWRlcl9HZXRTZW5zb3JfUGFyYW1zLmVuY29kZWRT
aXplKSwKLSAgICAgICAgICBjb2RlYy5rTWVzc2FnZUV4cGVjdHNSZXNwb25zZSwgMCk7Ci0gICAg
ICBidWlsZGVyLmVuY29kZVN0cnVjdChTZW5zb3JQcm92aWRlcl9HZXRTZW5zb3JfUGFyYW1zLCBw
YXJhbXMpOwotICAgICAgdmFyIG1lc3NhZ2UgPSBidWlsZGVyLmZpbmlzaCgpOwotICAgICAgdGhp
cy5yZWNlaXZlcl8uYWNjZXB0QW5kRXhwZWN0UmVzcG9uc2UobWVzc2FnZSkudGhlbihmdW5jdGlv
bihtZXNzYWdlKSB7Ci0gICAgICAgIHZhciByZWFkZXIgPSBuZXcgY29kZWMuTWVzc2FnZVJlYWRl
cihtZXNzYWdlKTsKLSAgICAgICAgdmFyIHJlc3BvbnNlUGFyYW1zID0KLSAgICAgICAgICAgIHJl
YWRlci5kZWNvZGVTdHJ1Y3QoU2Vuc29yUHJvdmlkZXJfR2V0U2Vuc29yX1Jlc3BvbnNlUGFyYW1z
KTsKLSAgICAgICAgcmVzb2x2ZShyZXNwb25zZVBhcmFtcyk7Ci0gICAgICB9KS5jYXRjaChmdW5j
dGlvbihyZXN1bHQpIHsKLSAgICAgICAgcmVqZWN0KEVycm9yKCJDb25uZWN0aW9uIGVycm9yOiAi
ICsgcmVzdWx0KSk7Ci0gICAgICB9KTsKLSAgICB9LmJpbmQodGhpcykpOwotICB9OwotCi0gIGZ1
bmN0aW9uIFNlbnNvclByb3ZpZGVyU3R1YihkZWxlZ2F0ZSkgewotICAgIHRoaXMuZGVsZWdhdGVf
ID0gZGVsZWdhdGU7Ci0gIH0KLSAgU2Vuc29yUHJvdmlkZXJTdHViLnByb3RvdHlwZS5nZXRTZW5z
b3IgPSBmdW5jdGlvbih0eXBlKSB7Ci0gICAgcmV0dXJuIHRoaXMuZGVsZWdhdGVfICYmIHRoaXMu
ZGVsZWdhdGVfLmdldFNlbnNvciAmJiB0aGlzLmRlbGVnYXRlXy5nZXRTZW5zb3IodHlwZSk7Ci0g
IH0KLQotICBTZW5zb3JQcm92aWRlclN0dWIucHJvdG90eXBlLmFjY2VwdCA9IGZ1bmN0aW9uKG1l
c3NhZ2UpIHsKLSAgICB2YXIgcmVhZGVyID0gbmV3IGNvZGVjLk1lc3NhZ2VSZWFkZXIobWVzc2Fn
ZSk7Ci0gICAgc3dpdGNoIChyZWFkZXIubWVzc2FnZU5hbWUpIHsKLSAgICBkZWZhdWx0OgotICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgfTsKLQotICBTZW5zb3JQcm92aWRlclN0dWIucHJv
dG90eXBlLmFjY2VwdFdpdGhSZXNwb25kZXIgPQotICAgICAgZnVuY3Rpb24obWVzc2FnZSwgcmVz
cG9uZGVyKSB7Ci0gICAgdmFyIHJlYWRlciA9IG5ldyBjb2RlYy5NZXNzYWdlUmVhZGVyKG1lc3Nh
Z2UpOwotICAgIHN3aXRjaCAocmVhZGVyLm1lc3NhZ2VOYW1lKSB7Ci0gICAgY2FzZSBrU2Vuc29y
UHJvdmlkZXJfR2V0U2Vuc29yX05hbWU6Ci0gICAgICB2YXIgcGFyYW1zID0gcmVhZGVyLmRlY29k
ZVN0cnVjdChTZW5zb3JQcm92aWRlcl9HZXRTZW5zb3JfUGFyYW1zKTsKLSAgICAgIHRoaXMuZ2V0
U2Vuc29yKHBhcmFtcy50eXBlKS50aGVuKGZ1bmN0aW9uKHJlc3BvbnNlKSB7Ci0gICAgICAgIHZh
ciByZXNwb25zZVBhcmFtcyA9Ci0gICAgICAgICAgICBuZXcgU2Vuc29yUHJvdmlkZXJfR2V0U2Vu
c29yX1Jlc3BvbnNlUGFyYW1zKCk7Ci0gICAgICAgIHJlc3BvbnNlUGFyYW1zLnJlc3VsdCA9IHJl
c3BvbnNlLnJlc3VsdDsKLSAgICAgICAgcmVzcG9uc2VQYXJhbXMuaW5pdFBhcmFtcyA9IHJlc3Bv
bnNlLmluaXRQYXJhbXM7Ci0gICAgICAgIHZhciBidWlsZGVyID0gbmV3IGNvZGVjLk1lc3NhZ2VW
MUJ1aWxkZXIoCi0gICAgICAgICAgICBrU2Vuc29yUHJvdmlkZXJfR2V0U2Vuc29yX05hbWUsCi0g
ICAgICAgICAgICBjb2RlYy5hbGlnbihTZW5zb3JQcm92aWRlcl9HZXRTZW5zb3JfUmVzcG9uc2VQ
YXJhbXMuZW5jb2RlZFNpemUpLAotICAgICAgICAgICAgY29kZWMua01lc3NhZ2VJc1Jlc3BvbnNl
LCByZWFkZXIucmVxdWVzdElEKTsKLSAgICAgICAgYnVpbGRlci5lbmNvZGVTdHJ1Y3QoU2Vuc29y
UHJvdmlkZXJfR2V0U2Vuc29yX1Jlc3BvbnNlUGFyYW1zLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICByZXNwb25zZVBhcmFtcyk7Ci0gICAgICAgIHZhciBtZXNzYWdlID0gYnVpbGRlci5m
aW5pc2goKTsKLSAgICAgICAgcmVzcG9uZGVyLmFjY2VwdChtZXNzYWdlKTsKLSAgICAgIH0pOwot
ICAgICAgcmV0dXJuIHRydWU7Ci0gICAgZGVmYXVsdDoKLSAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICB9Ci0gIH07Ci0KLSAgZnVuY3Rpb24gdmFsaWRhdGVTZW5zb3JQcm92aWRlclJlcXVlc3QobWVz
c2FnZVZhbGlkYXRvcikgewotICAgIHZhciBtZXNzYWdlID0gbWVzc2FnZVZhbGlkYXRvci5tZXNz
YWdlOwotICAgIHZhciBwYXJhbXNDbGFzcyA9IG51bGw7Ci0gICAgc3dpdGNoIChtZXNzYWdlLmdl
dE5hbWUoKSkgewotICAgICAgY2FzZSBrU2Vuc29yUHJvdmlkZXJfR2V0U2Vuc29yX05hbWU6Ci0g
ICAgICAgIGlmIChtZXNzYWdlLmV4cGVjdHNSZXNwb25zZSgpKQotICAgICAgICAgIHBhcmFtc0Ns
YXNzID0gU2Vuc29yUHJvdmlkZXJfR2V0U2Vuc29yX1BhcmFtczsKLSAgICAgIGJyZWFrOwotICAg
IH0KLSAgICBpZiAocGFyYW1zQ2xhc3MgPT09IG51bGwpCi0gICAgICByZXR1cm4gdmFsaWRhdG9y
LnZhbGlkYXRpb25FcnJvci5OT05FOwotICAgIHJldHVybiBwYXJhbXNDbGFzcy52YWxpZGF0ZSht
ZXNzYWdlVmFsaWRhdG9yLCBtZXNzYWdlVmFsaWRhdG9yLm1lc3NhZ2UuZ2V0SGVhZGVyTnVtQnl0
ZXMoKSk7Ci0gIH0KLQotICBmdW5jdGlvbiB2YWxpZGF0ZVNlbnNvclByb3ZpZGVyUmVzcG9uc2Uo
bWVzc2FnZVZhbGlkYXRvcikgewotICAgdmFyIG1lc3NhZ2UgPSBtZXNzYWdlVmFsaWRhdG9yLm1l
c3NhZ2U7Ci0gICB2YXIgcGFyYW1zQ2xhc3MgPSBudWxsOwotICAgc3dpdGNoIChtZXNzYWdlLmdl
dE5hbWUoKSkgewotICAgICAgY2FzZSBrU2Vuc29yUHJvdmlkZXJfR2V0U2Vuc29yX05hbWU6Ci0g
ICAgICAgIGlmIChtZXNzYWdlLmlzUmVzcG9uc2UoKSkKLSAgICAgICAgICBwYXJhbXNDbGFzcyA9
IFNlbnNvclByb3ZpZGVyX0dldFNlbnNvcl9SZXNwb25zZVBhcmFtczsKLSAgICAgICAgYnJlYWs7
Ci0gICAgfQotICAgIGlmIChwYXJhbXNDbGFzcyA9PT0gbnVsbCkKLSAgICAgIHJldHVybiB2YWxp
ZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkU7Ci0gICAgcmV0dXJuIHBhcmFtc0NsYXNzLnZhbGlk
YXRlKG1lc3NhZ2VWYWxpZGF0b3IsIG1lc3NhZ2VWYWxpZGF0b3IubWVzc2FnZS5nZXRIZWFkZXJO
dW1CeXRlcygpKTsKLSAgfQotCi0gIHZhciBTZW5zb3JQcm92aWRlciA9IHsKLSAgICBuYW1lOiAn
ZGV2aWNlLm1vam9tLlNlbnNvclByb3ZpZGVyJywKLSAgICBrVmVyc2lvbjogMCwKLSAgICBwdHJD
bGFzczogU2Vuc29yUHJvdmlkZXJQdHIsCi0gICAgcHJveHlDbGFzczogU2Vuc29yUHJvdmlkZXJQ
cm94eSwKLSAgICBzdHViQ2xhc3M6IFNlbnNvclByb3ZpZGVyU3R1YiwKLSAgICB2YWxpZGF0ZVJl
cXVlc3Q6IHZhbGlkYXRlU2Vuc29yUHJvdmlkZXJSZXF1ZXN0LAotICAgIHZhbGlkYXRlUmVzcG9u
c2U6IHZhbGlkYXRlU2Vuc29yUHJvdmlkZXJSZXNwb25zZSwKLSAgfTsKLSAgU2Vuc29yUHJvdmlk
ZXJTdHViLnByb3RvdHlwZS52YWxpZGF0b3IgPSB2YWxpZGF0ZVNlbnNvclByb3ZpZGVyUmVxdWVz
dDsKLSAgU2Vuc29yUHJvdmlkZXJQcm94eS5wcm90b3R5cGUudmFsaWRhdG9yID0gdmFsaWRhdGVT
ZW5zb3JQcm92aWRlclJlc3BvbnNlOwotICBleHBvcnRzLlNlbnNvckNyZWF0aW9uUmVzdWx0ID0g
U2Vuc29yQ3JlYXRpb25SZXN1bHQ7Ci0gIGV4cG9ydHMuU2Vuc29ySW5pdFBhcmFtcyA9IFNlbnNv
ckluaXRQYXJhbXM7Ci0gIGV4cG9ydHMuU2Vuc29yUHJvdmlkZXIgPSBTZW5zb3JQcm92aWRlcjsK
LSAgZXhwb3J0cy5TZW5zb3JQcm92aWRlclB0ciA9IFNlbnNvclByb3ZpZGVyUHRyOwotICBleHBv
cnRzLlNlbnNvclByb3ZpZGVyQXNzb2NpYXRlZFB0ciA9IFNlbnNvclByb3ZpZGVyQXNzb2NpYXRl
ZFB0cjsKLX0pKCk7CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBs
YXRmb3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS9zdHJpbmcxNi5tb2pvbS5qcyBiL0xheW91
dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVt
L3N0cmluZzE2Lm1vam9tLmpzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNTM3N2U2
NjU3MWIxNDU5MDdhNDkwZDE3YzY3M2E1YWJkMDIzMTcxLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxh
dGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL3N0cmluZzE2Lm1vam9tLmpzCisrKyAvZGV2
L251bGwKQEAgLTEsMTQxICswLDAgQEAKLS8vIENvcHlyaWdodCAyMDE0IFRoZSBDaHJvbWl1bSBB
dXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUg
aXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQg
aW4gdGhlIExJQ0VOU0UgZmlsZS4KLQotJ3VzZSBzdHJpY3QnOwotCi0oZnVuY3Rpb24oKSB7Ci0g
IHZhciBtb2pvbUlkID0gJ21vam8vcHVibGljL21vam9tL2Jhc2Uvc3RyaW5nMTYubW9qb20nOwot
ICBpZiAobW9qby5pbnRlcm5hbC5pc01vam9tTG9hZGVkKG1vam9tSWQpKSB7Ci0gICAgY29uc29s
ZS53YXJuKCdUaGUgZm9sbG93aW5nIG1vam9tIGlzIGxvYWRlZCBtdWx0aXBsZSB0aW1lczogJyAr
IG1vam9tSWQpOwotICAgIHJldHVybjsKLSAgfQotICBtb2pvLmludGVybmFsLm1hcmtNb2pvbUxv
YWRlZChtb2pvbUlkKTsKLSAgdmFyIGJpbmRpbmdzID0gbW9qbzsKLSAgdmFyIGFzc29jaWF0ZWRC
aW5kaW5ncyA9IG1vam87Ci0gIHZhciBjb2RlYyA9IG1vam8uaW50ZXJuYWw7Ci0gIHZhciB2YWxp
ZGF0b3IgPSBtb2pvLmludGVybmFsOwotCi0gIHZhciBleHBvcnRzID0gbW9qby5pbnRlcm5hbC5l
eHBvc2VOYW1lc3BhY2UoJ21vam9CYXNlLm1vam9tJyk7Ci0gIHZhciBiaWdfYnVmZmVyJCA9Ci0g
ICAgICBtb2pvLmludGVybmFsLmV4cG9zZU5hbWVzcGFjZSgnbW9qb0Jhc2UubW9qb20nKTsKLSAg
aWYgKG1vam8uY29uZmlnLmF1dG9Mb2FkTW9qb21EZXBzKSB7Ci0gICAgbW9qby5pbnRlcm5hbC5s
b2FkTW9qb21JZk5lY2Vzc2FyeSgKLSAgICAgICAgJ21vam8vcHVibGljL21vam9tL2Jhc2UvYmln
X2J1ZmZlci5tb2pvbScsICdiaWdfYnVmZmVyLm1vam9tLmpzJyk7Ci0gIH0KLQotCi0KLSAgZnVu
Y3Rpb24gU3RyaW5nMTYodmFsdWVzKSB7Ci0gICAgdGhpcy5pbml0RGVmYXVsdHNfKCk7Ci0gICAg
dGhpcy5pbml0RmllbGRzXyh2YWx1ZXMpOwotICB9Ci0KLQotICBTdHJpbmcxNi5wcm90b3R5cGUu
aW5pdERlZmF1bHRzXyA9IGZ1bmN0aW9uKCkgewotICAgIHRoaXMuZGF0YSA9IG51bGw7Ci0gIH07
Ci0gIFN0cmluZzE2LnByb3RvdHlwZS5pbml0RmllbGRzXyA9IGZ1bmN0aW9uKGZpZWxkcykgewot
ICAgIGZvcih2YXIgZmllbGQgaW4gZmllbGRzKSB7Ci0gICAgICAgIGlmICh0aGlzLmhhc093blBy
b3BlcnR5KGZpZWxkKSkKLSAgICAgICAgICB0aGlzW2ZpZWxkXSA9IGZpZWxkc1tmaWVsZF07Ci0g
ICAgfQotICB9OwotCi0gIFN0cmluZzE2LnZhbGlkYXRlID0gZnVuY3Rpb24obWVzc2FnZVZhbGlk
YXRvciwgb2Zmc2V0KSB7Ci0gICAgdmFyIGVycjsKLSAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9y
LnZhbGlkYXRlU3RydWN0SGVhZGVyKG9mZnNldCwgY29kZWMua1N0cnVjdEhlYWRlclNpemUpOwot
ICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKLSAgICAgICAg
cmV0dXJuIGVycjsKLQotICAgIHZhciBrVmVyc2lvblNpemVzID0gWwotICAgICAge3ZlcnNpb246
IDAsIG51bUJ5dGVzOiAxNn0KLSAgICBdOwotICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFs
aWRhdGVTdHJ1Y3RWZXJzaW9uKG9mZnNldCwga1ZlcnNpb25TaXplcyk7Ci0gICAgaWYgKGVyciAh
PT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQotICAgICAgICByZXR1cm4gZXJyOwot
Ci0KLSAgICAvLyB2YWxpZGF0ZSBTdHJpbmcxNi5kYXRhCi0gICAgZXJyID0gbWVzc2FnZVZhbGlk
YXRvci52YWxpZGF0ZUFycmF5UG9pbnRlcihvZmZzZXQgKyBjb2RlYy5rU3RydWN0SGVhZGVyU2l6
ZSArIDAsIDIsIGNvZGVjLlVpbnQxNiwgZmFsc2UsIFswXSwgMCk7Ci0gICAgaWYgKGVyciAhPT0g
dmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQotICAgICAgICByZXR1cm4gZXJyOwotCi0g
ICAgcmV0dXJuIHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORTsKLSAgfTsKLQotICBTdHJp
bmcxNi5lbmNvZGVkU2l6ZSA9IGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgODsKLQotICBTdHJp
bmcxNi5kZWNvZGUgPSBmdW5jdGlvbihkZWNvZGVyKSB7Ci0gICAgdmFyIHBhY2tlZDsKLSAgICB2
YXIgdmFsID0gbmV3IFN0cmluZzE2KCk7Ci0gICAgdmFyIG51bWJlck9mQnl0ZXMgPSBkZWNvZGVy
LnJlYWRVaW50MzIoKTsKLSAgICB2YXIgdmVyc2lvbiA9IGRlY29kZXIucmVhZFVpbnQzMigpOwot
ICAgIHZhbC5kYXRhID0gZGVjb2Rlci5kZWNvZGVBcnJheVBvaW50ZXIoY29kZWMuVWludDE2KTsK
LSAgICByZXR1cm4gdmFsOwotICB9OwotCi0gIFN0cmluZzE2LmVuY29kZSA9IGZ1bmN0aW9uKGVu
Y29kZXIsIHZhbCkgewotICAgIHZhciBwYWNrZWQ7Ci0gICAgZW5jb2Rlci53cml0ZVVpbnQzMihT
dHJpbmcxNi5lbmNvZGVkU2l6ZSk7Ci0gICAgZW5jb2Rlci53cml0ZVVpbnQzMigwKTsKLSAgICBl
bmNvZGVyLmVuY29kZUFycmF5UG9pbnRlcihjb2RlYy5VaW50MTYsIHZhbC5kYXRhKTsKLSAgfTsK
LSAgZnVuY3Rpb24gQmlnU3RyaW5nMTYodmFsdWVzKSB7Ci0gICAgdGhpcy5pbml0RGVmYXVsdHNf
KCk7Ci0gICAgdGhpcy5pbml0RmllbGRzXyh2YWx1ZXMpOwotICB9Ci0KLQotICBCaWdTdHJpbmcx
Ni5wcm90b3R5cGUuaW5pdERlZmF1bHRzXyA9IGZ1bmN0aW9uKCkgewotICAgIHRoaXMuZGF0YSA9
IG51bGw7Ci0gIH07Ci0gIEJpZ1N0cmluZzE2LnByb3RvdHlwZS5pbml0RmllbGRzXyA9IGZ1bmN0
aW9uKGZpZWxkcykgewotICAgIGZvcih2YXIgZmllbGQgaW4gZmllbGRzKSB7Ci0gICAgICAgIGlm
ICh0aGlzLmhhc093blByb3BlcnR5KGZpZWxkKSkKLSAgICAgICAgICB0aGlzW2ZpZWxkXSA9IGZp
ZWxkc1tmaWVsZF07Ci0gICAgfQotICB9OwotCi0gIEJpZ1N0cmluZzE2LnZhbGlkYXRlID0gZnVu
Y3Rpb24obWVzc2FnZVZhbGlkYXRvciwgb2Zmc2V0KSB7Ci0gICAgdmFyIGVycjsKLSAgICBlcnIg
PSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0SGVhZGVyKG9mZnNldCwgY29kZWMua1N0
cnVjdEhlYWRlclNpemUpOwotICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJy
b3IuTk9ORSkKLSAgICAgICAgcmV0dXJuIGVycjsKLQotICAgIHZhciBrVmVyc2lvblNpemVzID0g
WwotICAgICAge3ZlcnNpb246IDAsIG51bUJ5dGVzOiAyNH0KLSAgICBdOwotICAgIGVyciA9IG1l
c3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RWZXJzaW9uKG9mZnNldCwga1ZlcnNpb25TaXpl
cyk7Ci0gICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQotICAg
ICAgICByZXR1cm4gZXJyOwotCi0KLSAgICAvLyB2YWxpZGF0ZSBCaWdTdHJpbmcxNi5kYXRhCi0g
ICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVVuaW9uKG9mZnNldCArIGNvZGVjLmtT
dHJ1Y3RIZWFkZXJTaXplICsgMCwgYmlnX2J1ZmZlciQuQmlnQnVmZmVyLCBmYWxzZSk7Ci0gICAg
aWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQotICAgICAgICByZXR1
cm4gZXJyOwotCi0gICAgcmV0dXJuIHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORTsKLSAg
fTsKLQotICBCaWdTdHJpbmcxNi5lbmNvZGVkU2l6ZSA9IGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXpl
ICsgMTY7Ci0KLSAgQmlnU3RyaW5nMTYuZGVjb2RlID0gZnVuY3Rpb24oZGVjb2RlcikgewotICAg
IHZhciBwYWNrZWQ7Ci0gICAgdmFyIHZhbCA9IG5ldyBCaWdTdHJpbmcxNigpOwotICAgIHZhciBu
dW1iZXJPZkJ5dGVzID0gZGVjb2Rlci5yZWFkVWludDMyKCk7Ci0gICAgdmFyIHZlcnNpb24gPSBk
ZWNvZGVyLnJlYWRVaW50MzIoKTsKLSAgICB2YWwuZGF0YSA9IGRlY29kZXIuZGVjb2RlU3RydWN0
KGJpZ19idWZmZXIkLkJpZ0J1ZmZlcik7Ci0gICAgcmV0dXJuIHZhbDsKLSAgfTsKLQotICBCaWdT
dHJpbmcxNi5lbmNvZGUgPSBmdW5jdGlvbihlbmNvZGVyLCB2YWwpIHsKLSAgICB2YXIgcGFja2Vk
OwotICAgIGVuY29kZXIud3JpdGVVaW50MzIoQmlnU3RyaW5nMTYuZW5jb2RlZFNpemUpOwotICAg
IGVuY29kZXIud3JpdGVVaW50MzIoMCk7Ci0gICAgZW5jb2Rlci5lbmNvZGVTdHJ1Y3QoYmlnX2J1
ZmZlciQuQmlnQnVmZmVyLCB2YWwuZGF0YSk7Ci0gIH07Ci0gIGV4cG9ydHMuU3RyaW5nMTYgPSBT
dHJpbmcxNjsKLSAgZXhwb3J0cy5CaWdTdHJpbmcxNiA9IEJpZ1N0cmluZzE2OwotfSkoKTsKXCBO
byBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbXBvcnRl
ZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS9zdHJpbmcxNi5tb2pv
bS5qcy5oZWFkZXJzIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0
cy9yZXNvdXJjZXMvY2hyb21pdW0vc3RyaW5nMTYubW9qb20uanMuaGVhZGVycwpkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggNjgwNWMzMjNkZjVhOTc1MjMxNjQ4YjgzMGUzM2NlMTgzYzNj
YmJkMy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9MYXlv
dXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1
bS9zdHJpbmcxNi5tb2pvbS5qcy5oZWFkZXJzCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAot
Q29udGVudC1UeXBlOiB0ZXh0L2phdmFzY3JpcHQ7IGNoYXJzZXQ9dXRmLTgKZGlmZiAtLWdpdCBh
L0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2No
cm9taXVtL3VybC5tb2pvbS5qcyBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZv
cm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL3VybC5tb2pvbS5qcwpkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggYzVlZWUxZjJhZWI0MDY5YzU5NTkxNGVlMDIyYTllNTA5YjlkYTU0NS4u
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9MYXlvdXRUZXN0
cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS91cmwu
bW9qb20uanMKKysrIC9kZXYvbnVsbApAQCAtMSw3OSArMCwwIEBACi0vLyBDb3B5cmlnaHQgMjAx
NCBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0
aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBj
YW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLSd1c2Ugc3RyaWN0JzsKLQot
KGZ1bmN0aW9uKCkgewotICB2YXIgbW9qb21JZCA9ICd1cmwvbW9qb20vdXJsLm1vam9tJzsKLSAg
aWYgKG1vam8uaW50ZXJuYWwuaXNNb2pvbUxvYWRlZChtb2pvbUlkKSkgewotICAgIGNvbnNvbGUu
d2FybignVGhlIGZvbGxvd2luZyBtb2pvbSBpcyBsb2FkZWQgbXVsdGlwbGUgdGltZXM6ICcgKyBt
b2pvbUlkKTsKLSAgICByZXR1cm47Ci0gIH0KLSAgbW9qby5pbnRlcm5hbC5tYXJrTW9qb21Mb2Fk
ZWQobW9qb21JZCk7Ci0gIHZhciBiaW5kaW5ncyA9IG1vam87Ci0gIHZhciBhc3NvY2lhdGVkQmlu
ZGluZ3MgPSBtb2pvOwotICB2YXIgY29kZWMgPSBtb2pvLmludGVybmFsOwotICB2YXIgdmFsaWRh
dG9yID0gbW9qby5pbnRlcm5hbDsKLQotICB2YXIgZXhwb3J0cyA9IG1vam8uaW50ZXJuYWwuZXhw
b3NlTmFtZXNwYWNlKCd1cmwubW9qb20nKTsKLQotCi0KLSAgZnVuY3Rpb24gVXJsKHZhbHVlcykg
ewotICAgIHRoaXMuaW5pdERlZmF1bHRzXygpOwotICAgIHRoaXMuaW5pdEZpZWxkc18odmFsdWVz
KTsKLSAgfQotCi0KLSAgVXJsLnByb3RvdHlwZS5pbml0RGVmYXVsdHNfID0gZnVuY3Rpb24oKSB7
Ci0gICAgdGhpcy51cmwgPSBudWxsOwotICB9OwotICBVcmwucHJvdG90eXBlLmluaXRGaWVsZHNf
ID0gZnVuY3Rpb24oZmllbGRzKSB7Ci0gICAgZm9yKHZhciBmaWVsZCBpbiBmaWVsZHMpIHsKLSAg
ICAgICAgaWYgKHRoaXMuaGFzT3duUHJvcGVydHkoZmllbGQpKQotICAgICAgICAgIHRoaXNbZmll
bGRdID0gZmllbGRzW2ZpZWxkXTsKLSAgICB9Ci0gIH07Ci0KLSAgVXJsLnZhbGlkYXRlID0gZnVu
Y3Rpb24obWVzc2FnZVZhbGlkYXRvciwgb2Zmc2V0KSB7Ci0gICAgdmFyIGVycjsKLSAgICBlcnIg
PSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0SGVhZGVyKG9mZnNldCwgY29kZWMua1N0
cnVjdEhlYWRlclNpemUpOwotICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJy
b3IuTk9ORSkKLSAgICAgICAgcmV0dXJuIGVycjsKLQotICAgIHZhciBrVmVyc2lvblNpemVzID0g
WwotICAgICAge3ZlcnNpb246IDAsIG51bUJ5dGVzOiAxNn0KLSAgICBdOwotICAgIGVyciA9IG1l
c3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RWZXJzaW9uKG9mZnNldCwga1ZlcnNpb25TaXpl
cyk7Ci0gICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQotICAg
ICAgICByZXR1cm4gZXJyOwotCi0KLSAgICAvLyB2YWxpZGF0ZSBVcmwudXJsCi0gICAgZXJyID0g
bWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cmluZ1BvaW50ZXIob2Zmc2V0ICsgY29kZWMua1N0
cnVjdEhlYWRlclNpemUgKyAwLCBmYWxzZSkKLSAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFs
aWRhdGlvbkVycm9yLk5PTkUpCi0gICAgICAgIHJldHVybiBlcnI7Ci0KLSAgICByZXR1cm4gdmFs
aWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FOwotICB9OwotCi0gIFVybC5lbmNvZGVkU2l6ZSA9
IGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgODsKLQotICBVcmwuZGVjb2RlID0gZnVuY3Rpb24o
ZGVjb2RlcikgewotICAgIHZhciBwYWNrZWQ7Ci0gICAgdmFyIHZhbCA9IG5ldyBVcmwoKTsKLSAg
ICB2YXIgbnVtYmVyT2ZCeXRlcyA9IGRlY29kZXIucmVhZFVpbnQzMigpOwotICAgIHZhciB2ZXJz
aW9uID0gZGVjb2Rlci5yZWFkVWludDMyKCk7Ci0gICAgdmFsLnVybCA9IGRlY29kZXIuZGVjb2Rl
U3RydWN0KGNvZGVjLlN0cmluZyk7Ci0gICAgcmV0dXJuIHZhbDsKLSAgfTsKLQotICBVcmwuZW5j
b2RlID0gZnVuY3Rpb24oZW5jb2RlciwgdmFsKSB7Ci0gICAgdmFyIHBhY2tlZDsKLSAgICBlbmNv
ZGVyLndyaXRlVWludDMyKFVybC5lbmNvZGVkU2l6ZSk7Ci0gICAgZW5jb2Rlci53cml0ZVVpbnQz
MigwKTsKLSAgICBlbmNvZGVyLmVuY29kZVN0cnVjdChjb2RlYy5TdHJpbmcsIHZhbC51cmwpOwot
ICB9OwotICBleHBvcnRzLlVybCA9IFVybDsKLX0pKCk7ClwgTm8gbmV3bGluZSBhdCBlbmQgb2Yg
ZmlsZQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10
ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vdzNjLWltcG9ydC5sb2cgYi9MYXlvdXRUZXN0cy9pbXBv
cnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS93M2MtaW1wb3J0
LmxvZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTJkMGEwOWRlMWU5YTIwN2NiY2Fh
MWI1NzYyM2RlNjlmODQ1ZDcyNy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMAotLS0gYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jl
c291cmNlcy9jaHJvbWl1bS93M2MtaW1wb3J0LmxvZworKysgL2Rldi9udWxsCkBAIC0xLDYzICsw
LDAgQEAKLVRoZSB0ZXN0cyBpbiB0aGlzIGRpcmVjdG9yeSB3ZXJlIGltcG9ydGVkIGZyb20gdGhl
IFczQyByZXBvc2l0b3J5LgotRG8gTk9UIG1vZGlmeSB0aGVzZSB0ZXN0cyBkaXJlY3RseSBpbiBX
ZWJLaXQuCi1JbnN0ZWFkLCBjcmVhdGUgYSBwdWxsIHJlcXVlc3Qgb24gdGhlIFdQVCBnaXRodWI6
Ci0JaHR0cHM6Ly9naXRodWIuY29tL3dlYi1wbGF0Zm9ybS10ZXN0cy93cHQKLQotVGhlbiBydW4g
dGhlIFRvb2xzL1NjcmlwdHMvaW1wb3J0LXczYy10ZXN0cyBpbiBXZWJLaXQgdG8gcmVpbXBvcnQK
LQotRG8gTk9UIG1vZGlmeSBvciByZW1vdmUgdGhpcyBmaWxlLgotCi0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K
LVByb3BlcnRpZXMgcmVxdWlyaW5nIHZlbmRvciBwcmVmaXhlczoKLU5vbmUKLVByb3BlcnR5IHZh
bHVlcyByZXF1aXJpbmcgdmVuZG9yIHByZWZpeGVzOgotTm9uZQotLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1M
aXN0IG9mIGZpbGVzOgotL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVz
dHMvcmVzb3VyY2VzL2Nocm9taXVtL1JFQURNRS5tZAotL0xheW91dFRlc3RzL2ltcG9ydGVkL3cz
Yy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL2JpZ19idWZmZXIubW9qb20u
anMKLS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNl
cy9jaHJvbWl1bS9iaWdfYnVmZmVyLm1vam9tLmpzLmhlYWRlcnMKLS9MYXlvdXRUZXN0cy9pbXBv
cnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS9jb250YWN0c19t
YW5hZ2VyX21vY2suanMKLS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRl
c3RzL3Jlc291cmNlcy9jaHJvbWl1bS9kZXZpY2UubW9qb20uanMKLS9MYXlvdXRUZXN0cy9pbXBv
cnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS9kZXZpY2UubW9q
b20uanMuaGVhZGVycwotL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVz
dHMvcmVzb3VyY2VzL2Nocm9taXVtL2RldmljZV9lbnVtZXJhdGlvbl9vcHRpb25zLm1vam9tLmpz
Ci0vTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMv
Y2hyb21pdW0vZGV2aWNlX2VudW1lcmF0aW9uX29wdGlvbnMubW9qb20uanMuaGVhZGVycwotL0xh
eW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9t
aXVtL2RldmljZV9tYW5hZ2VyX2NsaWVudC5tb2pvbS5qcwotL0xheW91dFRlc3RzL2ltcG9ydGVk
L3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL2RldmljZV9tYW5hZ2Vy
X2NsaWVudC5tb2pvbS5qcy5oZWFkZXJzCi0vTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1w
bGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vZW5hYmxlLWh5cGVybGluay1hdWRpdGlu
Zy5qcwotL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3Vy
Y2VzL2Nocm9taXVtL2dlbmVyaWNfc2Vuc29yX21vY2tzLmpzCi0vTGF5b3V0VGVzdHMvaW1wb3J0
ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vZ2VuZXJpY19zZW5z
b3JfbW9ja3MuanMuaGVhZGVycwotL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZv
cm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL2ltYWdlX2NhcHR1cmUtbW9qb20uanMuaGVhZGVy
cwotL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2Vz
L2Nocm9taXVtL2ltYWdlX2NhcHR1cmUubW9qb20uanMKLS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93
M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS9tb2NrLWJhcmNvZGVkZXRl
Y3Rpb24uanMKLS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jl
c291cmNlcy9jaHJvbWl1bS9tb2NrLWJhcmNvZGVkZXRlY3Rpb24uanMuaGVhZGVycwotL0xheW91
dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVt
L21vY2stZmFjZWRldGVjdGlvbi5qcwotL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxh
dGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL21vY2stZmFjZWRldGVjdGlvbi5qcy5oZWFk
ZXJzCi0vTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJj
ZXMvY2hyb21pdW0vbW9jay1pbWFnZWNhcHR1cmUuanMKLS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93
M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS9tb2NrLXNjcmVlbmVudW1l
cmF0aW9uLmpzCi0vTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9y
ZXNvdXJjZXMvY2hyb21pdW0vbW9jay1zY3JlZW5lbnVtZXJhdGlvbi5qcy5oZWFkZXIKLS9MYXlv
dXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1
bS9tb2NrLXNtcy1yZWNlaXZlci5qcwotL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxh
dGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL21vY2stdGV4dGRldGVjdGlvbi5qcwotL0xh
eW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9t
aXVtL21vY2stdGV4dGRldGVjdGlvbi5qcy5oZWFkZXJzCi0vTGF5b3V0VGVzdHMvaW1wb3J0ZWQv
dzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vbW9qb19iaW5kaW5ncy5q
cwotL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2Vz
L2Nocm9taXVtL21vam9fYmluZGluZ3MuanMuaGVhZGVycwotL0xheW91dFRlc3RzL2ltcG9ydGVk
L3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL21vam9fd2ViX3Rlc3Rf
aGVscGVyX3Rlc3QubW9qb20uanMKLS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRm
b3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS9tb2pvX3dlYl90ZXN0X2hlbHBlcl90ZXN0Lm1v
am9tLmpzLmhlYWRlcnMKLS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRl
c3RzL3Jlc291cmNlcy9jaHJvbWl1bS9uZmMtbW9jay5qcwotL0xheW91dFRlc3RzL2ltcG9ydGVk
L3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL3NlbnNvci5tb2pvbS5q
cwotL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2Vz
L2Nocm9taXVtL3NlbnNvcl9wcm92aWRlci5tb2pvbS5qcwotL0xheW91dFRlc3RzL2ltcG9ydGVk
L3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL3N0cmluZzE2Lm1vam9t
LmpzCi0vTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJj
ZXMvY2hyb21pdW0vc3RyaW5nMTYubW9qb20uanMuaGVhZGVycwotL0xheW91dFRlc3RzL2ltcG9y
dGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL3VybC5tb2pvbS5q
cwotL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2Vz
L2Nocm9taXVtL3dlYi1ibHVldG9vdGgtdGVzdC5qcwotL0xheW91dFRlc3RzL2ltcG9ydGVkL3cz
Yy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL3dlYi1ibHVldG9vdGgtdGVz
dC5qcy5oZWFkZXJzCi0vTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0
cy9yZXNvdXJjZXMvY2hyb21pdW0vd2ViX3VzYl9zZXJ2aWNlLm1vam9tLmpzCi0vTGF5b3V0VGVz
dHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vd2Vi
X3VzYl9zZXJ2aWNlLm1vam9tLmpzLmhlYWRlcnMKLS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mv
d2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS93ZWJ1c2ItY2hpbGQtdGVzdC5q
cwotL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2Vz
L2Nocm9taXVtL3dlYnVzYi1jaGlsZC10ZXN0LmpzLmhlYWRlcnMKLS9MYXlvdXRUZXN0cy9pbXBv
cnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS93ZWJ1c2ItdGVz
dC5qcwotL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3Vy
Y2VzL2Nocm9taXVtL3dlYnVzYi10ZXN0LmpzLmhlYWRlcnMKLS9MYXlvdXRUZXN0cy9pbXBvcnRl
ZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS93ZWJ4ci10ZXN0LW1h
dGgtaGVscGVyLmpzCi0vTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0
cy9yZXNvdXJjZXMvY2hyb21pdW0vd2VieHItdGVzdC1tYXRoLWhlbHBlci5qcy5oZWFkZXJzCi0v
TGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hy
b21pdW0vd2VieHItdGVzdC5qcwotL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZv
cm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL3dlYnhyLXRlc3QuanMuaGVhZGVycwpkaWZmIC0t
Z2l0IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJj
ZXMvY2hyb21pdW0vd2ViLWJsdWV0b290aC10ZXN0LmpzIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQv
dzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vd2ViLWJsdWV0b290aC10
ZXN0LmpzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNjM2NThlMmU3NTMyMThkNTA1
MDhiNDExOTlmYzZmZjE4NzExZGJmLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwCi0tLSBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMv
cmVzb3VyY2VzL2Nocm9taXVtL3dlYi1ibHVldG9vdGgtdGVzdC5qcworKysgL2Rldi9udWxsCkBA
IC0xLDY0MSArMCwwIEBACi0ndXNlIHN0cmljdCc7Ci0KLWZ1bmN0aW9uIHRvTW9qb0NlbnRyYWxT
dGF0ZShzdGF0ZSkgewotICBzd2l0Y2ggKHN0YXRlKSB7Ci0gICAgY2FzZSAnYWJzZW50JzoKLSAg
ICAgIHJldHVybiBibHVldG9vdGgubW9qb20uQ2VudHJhbFN0YXRlLkFCU0VOVDsKLSAgICBjYXNl
ICdwb3dlcmVkLW9mZic6Ci0gICAgICByZXR1cm4gYmx1ZXRvb3RoLm1vam9tLkNlbnRyYWxTdGF0
ZS5QT1dFUkVEX09GRjsKLSAgICBjYXNlICdwb3dlcmVkLW9uJzoKLSAgICAgIHJldHVybiBibHVl
dG9vdGgubW9qb20uQ2VudHJhbFN0YXRlLlBPV0VSRURfT047Ci0gICAgZGVmYXVsdDoKLSAgICAg
IHRocm93IGBVbnN1cHBvcnRlZCB2YWx1ZSAke3N0YXRlfSBmb3Igc3RhdGUuYDsKLSAgfQotfQot
Ci0vLyBDb252ZXJ0cyBibHVldG9vdGgubW9qb20uV3JpdGVUeXBlIHRvIGEgc3RyaW5nLiBJZiB8
d3JpdGVUeXBlfCBpcwotLy8gaW52YWxpZCwgdGhpcyBtZXRob2Qgd2lsbCB0aHJvdy4KLWZ1bmN0
aW9uIHdyaXRlVHlwZVRvU3RyaW5nKHdyaXRlVHlwZSkgewotICBzd2l0Y2ggKHdyaXRlVHlwZSkg
ewotICAgIGNhc2UgYmx1ZXRvb3RoLm1vam9tLldyaXRlVHlwZS5rTm9uZToKLSAgICAgIHJldHVy
biAnbm9uZSc7Ci0gICAgY2FzZSBibHVldG9vdGgubW9qb20uV3JpdGVUeXBlLmtXcml0ZURlZmF1
bHREZXByZWNhdGVkOgotICAgICAgcmV0dXJuICdkZWZhdWx0LWRlcHJlY2F0ZWQnOwotICAgIGNh
c2UgYmx1ZXRvb3RoLm1vam9tLldyaXRlVHlwZS5rV3JpdGVXaXRoUmVzcG9uc2U6Ci0gICAgICBy
ZXR1cm4gJ3dpdGgtcmVzcG9uc2UnOwotICAgIGNhc2UgYmx1ZXRvb3RoLm1vam9tLldyaXRlVHlw
ZS5rV3JpdGVXaXRob3V0UmVzcG9uc2U6Ci0gICAgICByZXR1cm4gJ3dpdGhvdXQtcmVzcG9uc2Un
OwotICAgIGRlZmF1bHQ6Ci0gICAgICB0aHJvdyBgVW5rbm93biBibHVldG9vdGgubW9qb20uV3Jp
dGVUeXBlOiAke3dyaXRlVHlwZX1gOwotICB9Ci19Ci0KLS8vIENhbm9uaWNhbGl6ZXMgVVVJRHMg
YW5kIGNvbnZlcnRzIHRoZW0gdG8gTW9qbyBVVUlEcy4KLWZ1bmN0aW9uIGNhbm9uaWNhbGl6ZUFu
ZENvbnZlcnRUb01vam9VVUlEKHV1aWRzKSB7Ci0gIGxldCBjYW5vbmljYWxVVUlEcyA9IHV1aWRz
Lm1hcCh2YWwgPT4gKHt1dWlkOiBCbHVldG9vdGhVVUlELmdldFNlcnZpY2UodmFsKX0pKTsKLSAg
cmV0dXJuIGNhbm9uaWNhbFVVSURzOwotfQotCi0vLyBDb252ZXJ0cyBXZWJJREwgYSByZWNvcmQ8
RE9NU3RyaW5nLCBCdWZmZXJTb3VyY2U+IHRvIGEgbWFwPEssIGFycmF5PHVpbnQ4Pj4gdG8KLS8v
IHVzZSBmb3IgTW9qbywgd2hlcmUgdGhlIHZhbHVlIGZvciBLIGlzIGNhbGN1bGF0ZWQgdXNpbmcg
a2V5Rm4uCi1mdW5jdGlvbiBjb252ZXJ0VG9Nb2pvTWFwKHJlY29yZCwga2V5Rm4pIHsKLSAgbGV0
IG1hcCA9IG5ldyBNYXAoKTsKLSAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVu
dHJpZXMocmVjb3JkKSkgewotICAgIGxldCBidWZmZXIgPSBBcnJheUJ1ZmZlci5pc1ZpZXcodmFs
dWUpID8gdmFsdWUuYnVmZmVyIDogdmFsdWU7Ci0gICAgbWFwLnNldChrZXlGbihrZXkpLCBBcnJh
eS5mcm9tKG5ldyBVaW50OEFycmF5KGJ1ZmZlcikpKTsKLSAgfQotICByZXR1cm4gbWFwOwotfQot
Ci0vLyBNYXBwaW5nIG9mIHRoZSBwcm9wZXJ0eSBuYW1lcyBvZgotLy8gQmx1ZXRvb3RoQ2hhcmFj
dGVyaXN0aWNQcm9wZXJ0aWVzIGRlZmluZWQgaW4KLS8vIGh0dHBzOi8vd2ViYmx1ZXRvb3RoY2cu
Z2l0aHViLmlvL3dlYi1ibHVldG9vdGgvI2NoYXJhY3RlcmlzdGljcHJvcGVydGllcwotLy8gdG8g
cHJvcGVydHkgbmFtZXMgb2YgdGhlIENoYXJhY3RlcmlzdGljUHJvcGVydGllcyBtb2pvIHN0cnVj
dC4KLWNvbnN0IENIQVJBQ1RFUklTVElDX1BST1BFUlRJRVNfV0VCX1RPX01PSk8gPSB7Ci0gIGJy
b2FkY2FzdDogJ2Jyb2FkY2FzdCcsCi0gIHJlYWQ6ICdyZWFkJywKLSAgd3JpdGVfd2l0aG91dF9y
ZXNwb25zZTogJ3dyaXRlX3dpdGhvdXRfcmVzcG9uc2UnLAotICB3cml0ZTogJ3dyaXRlJywKLSAg
bm90aWZ5OiAnbm90aWZ5JywKLSAgaW5kaWNhdGU6ICdpbmRpY2F0ZScsCi0gIGF1dGhlbnRpY2F0
ZWRTaWduZWRXcml0ZXM6ICdhdXRoZW50aWNhdGVkX3NpZ25lZF93cml0ZXMnLAotICBleHRlbmRl
ZF9wcm9wZXJ0aWVzOiAnZXh0ZW5kZWRfcHJvcGVydGllcycsCi19OwotCi0vLyBNYXBwaW5nIG9m
IHRoZSBNb2pvIENob29zZXJFdmVudFR5cGUgZW51bSB0byBhIHN0cmluZy4KLWNvbnN0IE1PSk9f
Q0hPT1NFUl9FVkVOVF9UWVBFX01BUCA9ICgoKSA9PiB7Ci0gIGNvbnN0IENob29zZXJFdmVudFR5
cGUgPSBjb250ZW50Lm1vam9tLkNob29zZXJFdmVudFR5cGU7Ci0gIHJldHVybiB7Ci0gICAgW0No
b29zZXJFdmVudFR5cGUuQ0hPT1NFUl9PUEVORURdOiAnY2hvb3Nlci1vcGVuZWQnLAotICAgIFtD
aG9vc2VyRXZlbnRUeXBlLkNIT09TRVJfQ0xPU0VEXTogJ2Nob29zZXItY2xvc2VkJywKLSAgICBb
Q2hvb3NlckV2ZW50VHlwZS5BREFQVEVSX1JFTU9WRURdOiAnYWRhcHRlci1yZW1vdmVkJywKLSAg
ICBbQ2hvb3NlckV2ZW50VHlwZS5BREFQVEVSX0RJU0FCTEVEXTogJ2FkYXB0ZXItZGlzYWJsZWQn
LAotICAgIFtDaG9vc2VyRXZlbnRUeXBlLkFEQVBURVJfRU5BQkxFRF06ICdhZGFwdGVyLWVuYWJs
ZWQnLAotICAgIFtDaG9vc2VyRXZlbnRUeXBlLkRJU0NPVkVSWV9GQUlMRURfVE9fU1RBUlRdOiAn
ZGlzY292ZXJ5LWZhaWxlZC10by1zdGFydCcsCi0gICAgW0Nob29zZXJFdmVudFR5cGUuRElTQ09W
RVJJTkddOiAnZGlzY292ZXJpbmcnLAotICAgIFtDaG9vc2VyRXZlbnRUeXBlLkRJU0NPVkVSWV9J
RExFXTogJ2Rpc2NvdmVyeS1pZGxlJywKLSAgICBbQ2hvb3NlckV2ZW50VHlwZS5BRERfT1JfVVBE
QVRFX0RFVklDRV06ICdhZGQtb3ItdXBkYXRlLWRldmljZScsCi0gIH0KLX0pKCk7Ci0KLWZ1bmN0
aW9uIEFycmF5VG9Nb2pvQ2hhcmFjdGVyaXN0aWNQcm9wZXJ0aWVzKGFycikgewotICBsZXQgc3Ry
dWN0ID0gbmV3IGJsdWV0b290aC5tb2pvbS5DaGFyYWN0ZXJpc3RpY1Byb3BlcnRpZXMoKTsKLQot
ICBhcnIuZm9yRWFjaCh2YWwgPT4gewotICAgIGxldCBtb2pvX3Byb3BlcnR5ID0KLSAgICAgIENI
QVJBQ1RFUklTVElDX1BST1BFUlRJRVNfV0VCX1RPX01PSk9bdmFsXTsKLQotICAgIGlmIChzdHJ1
Y3QuaGFzT3duUHJvcGVydHkobW9qb19wcm9wZXJ0eSkpCi0gICAgICBzdHJ1Y3RbbW9qb19wcm9w
ZXJ0eV0gPSB0cnVlOwotICAgIGVsc2UKLSAgICAgIHRocm93IGBJbnZhbGlkIG1lbWJlciAnJHt2
YWx9JyBmb3IgQ2hhcmFjdGVyaXN0aWNQcm9wZXJ0aWVzYDsKLSAgfSk7Ci0KLSAgcmV0dXJuIHN0
cnVjdDsKLX0KLQotY2xhc3MgRmFrZUJsdWV0b290aCB7Ci0gIGNvbnN0cnVjdG9yKCkgewotICAg
IHRoaXMuZmFrZV9ibHVldG9vdGhfcHRyXyA9IG5ldyBibHVldG9vdGgubW9qb20uRmFrZUJsdWV0
b290aFB0cigpOwotICAgIE1vam8uYmluZEludGVyZmFjZShibHVldG9vdGgubW9qb20uRmFrZUJs
dWV0b290aC5uYW1lLAotICAgICAgICBtb2pvLm1ha2VSZXF1ZXN0KHRoaXMuZmFrZV9ibHVldG9v
dGhfcHRyXykuaGFuZGxlLCAncHJvY2VzcycpOwotICAgIHRoaXMuZmFrZV9jZW50cmFsXyA9IG51
bGw7Ci0gIH0KLQotICAvLyBTZXQgaXQgdG8gaW5kaWNhdGUgd2hldGhlciB0aGUgcGxhdGZvcm0g
c3VwcG9ydHMgQkxFLiBGb3IgZXhhbXBsZSwKLSAgLy8gV2luZG93cyA3IGlzIGEgcGxhdGZvcm0g
dGhhdCBkb2Vzbid0IHN1cHBvcnQgTG93IEVuZXJneS4gT24gdGhlIG90aGVyCi0gIC8vIGhhbmQg
V2luZG93cyAxMCBpcyBhIHBsYXRmb3JtIHRoYXQgZG9lcyBzdXBwb3J0IExFLCBldmVuIGlmIHRo
ZXJlIGlzIG5vCi0gIC8vIEJsdWV0b290aCByYWRpbyBwcmVzZW50LgotICBhc3luYyBzZXRMRVN1
cHBvcnRlZChzdXBwb3J0ZWQpIHsKLSAgICBpZiAodHlwZW9mIHN1cHBvcnRlZCAhPT0gJ2Jvb2xl
YW4nKSB0aHJvdyAnVHlwZSBOb3QgU3VwcG9ydGVkJzsKLSAgICBhd2FpdCB0aGlzLmZha2VfYmx1
ZXRvb3RoX3B0cl8uc2V0TEVTdXBwb3J0ZWQoc3VwcG9ydGVkKTsKLSAgfQotCi0gIC8vIFJldHVy
bnMgYSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2l0aCBhIEZha2VDZW50cmFsIHRoYXQgY2xpZW50
cyBjYW4gdXNlCi0gIC8vIHRvIHNpbXVsYXRlIGV2ZW50cyB0aGF0IGEgZGV2aWNlIGluIHRoZSBD
ZW50cmFsL09ic2VydmVyIHJvbGUgd291bGQKLSAgLy8gcmVjZWl2ZSBhcyB3ZWxsIGFzIG1vbml0
b3IgdGhlIG9wZXJhdGlvbnMgcGVyZm9ybWVkIGJ5IHRoZSBkZXZpY2UgaW4gdGhlCi0gIC8vIENl
bnRyYWwvT2JzZXJ2ZXIgcm9sZS4KLSAgLy8gQ2FsbHMgc2V0cyBMRSBhcyBzdXBwb3J0ZWQuCi0g
IC8vCi0gIC8vIEEgIkNlbnRyYWwiIG9iamVjdCB3b3VsZCBhbGxvdyBpdHMgY2xpZW50cyB0byBy
ZWNlaXZlIGFkdmVydGlzaW5nIGV2ZW50cwotICAvLyBhbmQgaW5pdGlhdGUgY29ubmVjdGlvbnMg
dG8gcGVyaXBoZXJhbHMgaS5lLiBvcGVyYXRpb25zIG9mIHR3byByb2xlcwotICAvLyBkZWZpbmVk
IGJ5IHRoZSBCbHVldG9vdGggU3BlYzogT2JzZXJ2ZXIgYW5kIENlbnRyYWwuCi0gIC8vIFNlZSBC
bHVldG9vdGggNC4yIFZvbCAzIFBhcnQgQyAyLjIuMiAiUm9sZXMgd2hlbiBPcGVyYXRpbmcgb3Zl
ciBhbgotICAvLyBMRSBQaHlzaWNhbCBUcmFuc3BvcnQiLgotICBhc3luYyBzaW11bGF0ZUNlbnRy
YWwoe3N0YXRlfSkgewotICAgIGlmICh0aGlzLmZha2VfY2VudHJhbF8pCi0gICAgICB0aHJvdyAn
c2ltdWxhdGVDZW50cmFsKCkgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIG9uY2UnOwotCi0gICAgYXdh
aXQgdGhpcy5zZXRMRVN1cHBvcnRlZCh0cnVlKTsKLQotICAgIGxldCB7ZmFrZUNlbnRyYWw6IGZh
a2VfY2VudHJhbF9wdHJ9ID0KLSAgICAgIGF3YWl0IHRoaXMuZmFrZV9ibHVldG9vdGhfcHRyXy5z
aW11bGF0ZUNlbnRyYWwoCi0gICAgICAgIHRvTW9qb0NlbnRyYWxTdGF0ZShzdGF0ZSkpOwotICAg
IHRoaXMuZmFrZV9jZW50cmFsXyA9IG5ldyBGYWtlQ2VudHJhbChmYWtlX2NlbnRyYWxfcHRyKTsK
LSAgICByZXR1cm4gdGhpcy5mYWtlX2NlbnRyYWxfOwotICB9Ci0KLSAgLy8gUmV0dXJucyB0cnVl
IGlmIHRoZXJlIGFyZSBubyBwZW5kaW5nIHJlc3BvbnNlcy4KLSAgYXN5bmMgYWxsUmVzcG9uc2Vz
Q29uc3VtZWQoKSB7Ci0gICAgbGV0IHtjb25zdW1lZH0gPSBhd2FpdCB0aGlzLmZha2VfYmx1ZXRv
b3RoX3B0cl8uYWxsUmVzcG9uc2VzQ29uc3VtZWQoKTsKLSAgICByZXR1cm4gY29uc3VtZWQ7Ci0g
IH0KLQotICAvLyBSZXR1cm5zIGEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHdpdGggYSBGYWtlQ2hv
b3NlciB0aGF0IGNsaWVudHMgY2FuIHVzZSB0bwotICAvLyBzaW11bGF0ZSBjaG9vc2VyIGV2ZW50
cy4KLSAgYXN5bmMgZ2V0TWFudWFsQ2hvb3NlcigpIHsKLSAgICBpZiAodHlwZW9mIHRoaXMuZmFr
ZV9jaG9vc2VyXyA9PT0gJ3VuZGVmaW5lZCcpIHsKLSAgICAgIHRoaXMuZmFrZV9jaG9vc2VyXyA9
IG5ldyBGYWtlQ2hvb3NlcigpOwotICAgIH0KLSAgICByZXR1cm4gdGhpcy5mYWtlX2Nob29zZXJf
OwotICB9Ci19Ci0KLS8vIEZha2VDZW50cmFsIGFsbG93cyBjbGllbnRzIHRvIHNpbXVsYXRlIGV2
ZW50cyB0aGF0IGEgZGV2aWNlIGluIHRoZQotLy8gQ2VudHJhbC9PYnNlcnZlciByb2xlIHdvdWxk
IHJlY2VpdmUgYXMgd2VsbCBhcyBtb25pdG9yIHRoZSBvcGVyYXRpb25zCi0vLyBwZXJmb3JtZWQg
YnkgdGhlIGRldmljZSBpbiB0aGUgQ2VudHJhbC9PYnNlcnZlciByb2xlLgotY2xhc3MgRmFrZUNl
bnRyYWwgewotICBjb25zdHJ1Y3RvcihmYWtlX2NlbnRyYWxfcHRyKSB7Ci0gICAgdGhpcy5mYWtl
X2NlbnRyYWxfcHRyXyA9IGZha2VfY2VudHJhbF9wdHI7Ci0gICAgdGhpcy5wZXJpcGhlcmFsc18g
PSBuZXcgTWFwKCk7Ci0gIH0KLQotICAvLyBTaW11bGF0ZXMgYSBwZXJpcGhlcmFsIHdpdGggfGFk
ZHJlc3N8LCB8bmFtZXwgYW5kIHxrbm93bl9zZXJ2aWNlX3V1aWRzfAotICAvLyB0aGF0IGhhcyBh
bHJlYWR5IGJlZW4gY29ubmVjdGVkIHRvIHRoZSBzeXN0ZW0uIElmIHRoZSBwZXJpcGhlcmFsIGV4
aXN0ZWQKLSAgLy8gYWxyZWFkeSBpdCB1cGRhdGVzIGl0cyBuYW1lIGFuZCBrbm93biBVVUlEcy4g
fGtub3duX3NlcnZpY2VfdXVpZHN8IHNob3VsZAotICAvLyBiZSBhbiBhcnJheSBvZiBCbHVldG9v
dGhTZXJ2aWNlVVVJRHMKLSAgLy8gaHR0cHM6Ly93ZWJibHVldG9vdGhjZy5naXRodWIuaW8vd2Vi
LWJsdWV0b290aC8jdHlwZWRlZmRlZi1ibHVldG9vdGhzZXJ2aWNldXVpZAotICAvLwotICAvLyBQ
bGF0Zm9ybXMgb2ZmZXIgbWV0aG9kcyB0byByZXRyaWV2ZSBkZXZpY2VzIHRoYXQgaGF2ZSBhbHJl
YWR5IGJlZW4KLSAgLy8gY29ubmVjdGVkIHRvIHRoZSBzeXN0ZW0gb3Igd2VyZW4ndCBjb25uZWN0
ZWQgdGhyb3VnaCB0aGUgVUEgZS5nLiBhIHVzZXIKLSAgLy8gY29ubmVjdGVkIGEgcGVyaXBoZXJh
bCB0aHJvdWdoIHRoZSBzeXN0ZW0ncyBzZXR0aW5ncy4gVGhpcyBtZXRob2QgaXMKLSAgLy8gaW50
ZW5kZWQgdG8gc2ltdWxhdGUgcGVyaXBoZXJhbHMgdGhhdCB0aG9zZSBtZXRob2RzIHdvdWxkIHJl
dHVybi4KLSAgYXN5bmMgc2ltdWxhdGVQcmVjb25uZWN0ZWRQZXJpcGhlcmFsKHsKLSAgICBhZGRy
ZXNzLCBuYW1lLCBrbm93blNlcnZpY2VVVUlEcyA9IFtdfSkgewotCi0gICAgYXdhaXQgdGhpcy5m
YWtlX2NlbnRyYWxfcHRyXy5zaW11bGF0ZVByZWNvbm5lY3RlZFBlcmlwaGVyYWwoCi0gICAgICBh
ZGRyZXNzLCBuYW1lLCBjYW5vbmljYWxpemVBbmRDb252ZXJ0VG9Nb2pvVVVJRChrbm93blNlcnZp
Y2VVVUlEcykpOwotCi0gICAgcmV0dXJuIHRoaXMuZmV0Y2hPckNyZWF0ZVBlcmlwaGVyYWxfKGFk
ZHJlc3MpOwotICB9Ci0KLSAgLy8gU2ltdWxhdGVzIGFuIGFkdmVydGlzZW1lbnQgcGFja2V0IGRl
c2NyaWJlZCBieSB8c2NhblJlc3VsdHwgYmVpbmcgcmVjZWl2ZWQKLSAgLy8gZnJvbSBhIGRldmlj
ZS4gSWYgY2VudHJhbCBpcyBjdXJyZW50bHkgc2Nhbm5pbmcsIHRoZSBkZXZpY2Ugd2lsbCBhcHBl
YXIgb24KLSAgLy8gdGhlIGxpc3Qgb2YgZGlzY292ZXJlZCBkZXZpY2VzLgotICBhc3luYyBzaW11
bGF0ZUFkdmVydGlzZW1lbnRSZWNlaXZlZChzY2FuUmVzdWx0KSB7Ci0gICAgLy8gQ3JlYXRlIGEg
ZGVlcC1jb3B5IHRvIHByZXZlbnQgdGhlIG9yaWdpbmFsIHxzY2FuUmVzdWx0fCBmcm9tIGJlaW5n
Ci0gICAgLy8gbW9kaWZpZWQgd2hlbiB0aGUgVVVJRHMsIG1hbnVmYWN0dXJlciwgYW5kIHNlcnZp
Y2UgZGF0YSBhcmUgY29udmVydGVkLgotICAgIGxldCBjbG9uZWRTY2FuUmVzdWx0ID0gSlNPTi5w
YXJzZShKU09OLnN0cmluZ2lmeShzY2FuUmVzdWx0KSk7Ci0KLSAgICBpZiAoJ3V1aWRzJyBpbiBz
Y2FuUmVzdWx0LnNjYW5SZWNvcmQpIHsKLSAgICAgIGNsb25lZFNjYW5SZXN1bHQuc2NhblJlY29y
ZC51dWlkcyA9Ci0gICAgICAgICAgY2Fub25pY2FsaXplQW5kQ29udmVydFRvTW9qb1VVSUQoc2Nh
blJlc3VsdC5zY2FuUmVjb3JkLnV1aWRzKTsKLSAgICB9Ci0KLSAgICAvLyBDb252ZXJ0IHRoZSBv
cHRpb25hbCBhcHBlYXJhbmNlIGFuZCB0eFBvd2VyIGZpZWxkcyB0byB0aGUgY29ycmVzcG9uZGlu
ZwotICAgIC8vIE1vam8gc3RydWN0dXJlcywgc2luY2UgTW9qbyBkb2VzIG5vdCBzdXBwb3J0IG9w
dGlvbmFsIGludGVyZ2VyIHZhbHVlcy4gSWYKLSAgICAvLyB0aGUgZmllbGRzIGFyZSB1bmRlZmlu
ZWQsIHNldCB0aGUgaGFzVmFsdWUgZmllbGQgYXMgZmFsc2UgYW5kIHZhbHVlIGFzIDAuCi0gICAg
Ly8gT3RoZXJ3aXNlLCBzZXQgdGhlIGhhc1ZhbHVlIGZpZWxkIGFzIHRydWUgYW5kIHZhbHVlIHdp
dGggdGhlIGZpZWxkIHZhbHVlLgotICAgIGNvbnN0IGhhc19hcHBlYXJhbmNlID0gJ2FwcGVhcmFu
Y2UnIGluIHNjYW5SZXN1bHQuc2NhblJlY29yZDsKLSAgICBjbG9uZWRTY2FuUmVzdWx0LnNjYW5S
ZWNvcmQuYXBwZWFyYW5jZSA9IHsKLSAgICAgIGhhc1ZhbHVlOiBoYXNfYXBwZWFyYW5jZSwKLSAg
ICAgIHZhbHVlOiAoaGFzX2FwcGVhcmFuY2UgPyBzY2FuUmVzdWx0LnNjYW5SZWNvcmQuYXBwZWFy
YW5jZSA6IDApCi0gICAgfQotCi0gICAgY29uc3QgaGFzX3R4X3Bvd2VyID0gJ3R4UG93ZXInIGlu
IHNjYW5SZXN1bHQuc2NhblJlY29yZDsKLSAgICBjbG9uZWRTY2FuUmVzdWx0LnNjYW5SZWNvcmQu
dHhQb3dlciA9IHsKLSAgICAgIGhhc1ZhbHVlOiBoYXNfdHhfcG93ZXIsCi0gICAgICB2YWx1ZTog
KGhhc190eF9wb3dlciA/IHNjYW5SZXN1bHQuc2NhblJlY29yZC50eFBvd2VyIDogMCkKLSAgICB9
Ci0KLSAgICAvLyBDb252ZXJ0IG1hbnVmYWN0dXJlckRhdGEgZnJvbSBhIHJlY29yZDxET01TdHJp
bmcsIEJ1ZmZlclNvdXJjZT4gaW50byBhCi0gICAgLy8gbWFwPHVpbnQ4LCBhcnJheTx1aW50OD4+
IGZvciBNb2pvLgotICAgIGlmICgnbWFudWZhY3R1cmVyRGF0YScgaW4gc2NhblJlc3VsdC5zY2Fu
UmVjb3JkKSB7Ci0gICAgICBjbG9uZWRTY2FuUmVzdWx0LnNjYW5SZWNvcmQubWFudWZhY3R1cmVy
RGF0YSA9Ci0gICAgICAgICAgY29udmVydFRvTW9qb01hcChzY2FuUmVzdWx0LnNjYW5SZWNvcmQu
bWFudWZhY3R1cmVyRGF0YSwgTnVtYmVyKTsKLSAgICB9Ci0KLSAgICAvLyBDb252ZXJ0IHNlcnZp
Y2VEYXRhIGZyb20gYSByZWNvcmQ8RE9NU3RyaW5nLCBCdWZmZXJTb3VyY2U+IGludG8gYQotICAg
IC8vIG1hcDxzdHJpbmcsIGFycmF5PHVpbnQ4Pj4gZm9yIE1vam8uCi0gICAgaWYgKCdzZXJ2aWNl
RGF0YScgaW4gc2NhblJlc3VsdC5zY2FuUmVjb3JkKSB7Ci0gICAgICBjbG9uZWRTY2FuUmVzdWx0
LnNjYW5SZWNvcmQuc2VydmljZURhdGEuc2VydmljZURhdGEgPSBjb252ZXJ0VG9Nb2pvTWFwKAot
ICAgICAgICAgIHNjYW5SZXN1bHQuc2NhblJlY29yZC5zZXJ2aWNlRGF0YSwgQmx1ZXRvb3RoVVVJ
RC5nZXRTZXJ2aWNlKTsKLSAgICB9Ci0KLSAgICBhd2FpdCB0aGlzLmZha2VfY2VudHJhbF9wdHJf
LnNpbXVsYXRlQWR2ZXJ0aXNlbWVudFJlY2VpdmVkKAotICAgICAgICBuZXcgYmx1ZXRvb3RoLm1v
am9tLlNjYW5SZXN1bHQoY2xvbmVkU2NhblJlc3VsdCkpOwotCi0gICAgcmV0dXJuIHRoaXMuZmV0
Y2hPckNyZWF0ZVBlcmlwaGVyYWxfKGNsb25lZFNjYW5SZXN1bHQuZGV2aWNlQWRkcmVzcyk7Ci0g
IH0KLQotICAvLyBTaW11bGF0ZXMgYSBjaGFuZ2UgaW4gdGhlIGNlbnRyYWwgZGV2aWNlIGRlc2Ny
aWJlZCBieSB8c3RhdGV8LiBGb3IgZXhhbXBsZSwKLSAgLy8gc2V0U3RhdGUoJ3Bvd2VyZWQtb2Zm
JykgY2FuIGJlIHVzZWQgdG8gc2ltdWxhdGUgdGhlIGNlbnRyYWwgZGV2aWNlIHBvd2VyaW5nCi0g
IC8vIG9mZi4KLSAgLy8KLSAgLy8gVGhpcyBtZXRob2Qgc2hvdWxkIGJlIHVzZWQgZm9yIGFueSBj
ZW50cmFsIHN0YXRlIGNoYW5nZXMgYWZ0ZXIKLSAgLy8gc2ltdWxhdGVDZW50cmFsKCkgaGFzIGJl
ZW4gY2FsbGVkIHRvIGNyZWF0ZSBhIEZha2VDZW50cmFsIG9iamVjdC4KLSAgYXN5bmMgc2V0U3Rh
dGUoc3RhdGUpIHsKLSAgICBhd2FpdCB0aGlzLmZha2VfY2VudHJhbF9wdHJfLnNldFN0YXRlKHRv
TW9qb0NlbnRyYWxTdGF0ZShzdGF0ZSkpOwotICB9Ci0KLSAgLy8gQ3JlYXRlIGEgZmFrZV9wZXJp
cGhlcmFsIG9iamVjdCBmcm9tIHRoZSBnaXZlbiBhZGRyZXNzLgotICBmZXRjaE9yQ3JlYXRlUGVy
aXBoZXJhbF8oYWRkcmVzcykgewotICAgIGxldCBwZXJpcGhlcmFsID0gdGhpcy5wZXJpcGhlcmFs
c18uZ2V0KGFkZHJlc3MpOwotICAgIGlmIChwZXJpcGhlcmFsID09PSB1bmRlZmluZWQpIHsKLSAg
ICAgIHBlcmlwaGVyYWwgPSBuZXcgRmFrZVBlcmlwaGVyYWwoYWRkcmVzcywgdGhpcy5mYWtlX2Nl
bnRyYWxfcHRyXyk7Ci0gICAgICB0aGlzLnBlcmlwaGVyYWxzXy5zZXQoYWRkcmVzcywgcGVyaXBo
ZXJhbCk7Ci0gICAgfQotICAgIHJldHVybiBwZXJpcGhlcmFsOwotICB9Ci19Ci0KLWNsYXNzIEZh
a2VQZXJpcGhlcmFsIHsKLSAgY29uc3RydWN0b3IoYWRkcmVzcywgZmFrZV9jZW50cmFsX3B0cikg
ewotICAgIHRoaXMuYWRkcmVzcyA9IGFkZHJlc3M7Ci0gICAgdGhpcy5mYWtlX2NlbnRyYWxfcHRy
XyA9IGZha2VfY2VudHJhbF9wdHI7Ci0gIH0KLQotICAvLyBBZGRzIGEgZmFrZSBHQVRUIFNlcnZp
Y2Ugd2l0aCB8dXVpZHwgdG8gYmUgZGlzY292ZXJlZCB3aGVuIGRpc2NvdmVyaW5nCi0gIC8vIHRo
ZSBwZXJpcGhlcmFsJ3MgR0FUVCBBdHRyaWJ1dGVzLiBSZXR1cm5zIGEgRmFrZVJlbW90ZUdBVFRT
ZXJ2aWNlCi0gIC8vIGNvcnJlc3BvbmRpbmcgdG8gdGhpcyBzZXJ2aWNlLiB8dXVpZHwgc2hvdWxk
IGJlIGEgQmx1ZXRvb3RoU2VydmljZVVVSURzCi0gIC8vIGh0dHBzOi8vd2ViYmx1ZXRvb3RoY2cu
Z2l0aHViLmlvL3dlYi1ibHVldG9vdGgvI3R5cGVkZWZkZWYtYmx1ZXRvb3Roc2VydmljZXV1aWQK
LSAgYXN5bmMgYWRkRmFrZVNlcnZpY2Uoe3V1aWR9KSB7Ci0gICAgbGV0IHtzZXJ2aWNlSWQ6IHNl
cnZpY2VfaWR9ID0gYXdhaXQgdGhpcy5mYWtlX2NlbnRyYWxfcHRyXy5hZGRGYWtlU2VydmljZSgK
LSAgICAgIHRoaXMuYWRkcmVzcywge3V1aWQ6IEJsdWV0b290aFVVSUQuZ2V0U2VydmljZSh1dWlk
KX0pOwotCi0gICAgaWYgKHNlcnZpY2VfaWQgPT09IG51bGwpIHRocm93ICdhZGRGYWtlU2Vydmlj
ZSBmYWlsZWQnOwotCi0gICAgcmV0dXJuIG5ldyBGYWtlUmVtb3RlR0FUVFNlcnZpY2UoCi0gICAg
ICBzZXJ2aWNlX2lkLCB0aGlzLmFkZHJlc3MsIHRoaXMuZmFrZV9jZW50cmFsX3B0cl8pOwotICB9
Ci0KLSAgLy8gU2V0cyB0aGUgbmV4dCBHQVRUIENvbm5lY3Rpb24gcmVxdWVzdCByZXNwb25zZSB0
byB8Y29kZXwuIHxjb2RlfCBjb3VsZCBiZQotICAvLyBhbiBIQ0kgRXJyb3IgQ29kZSBmcm9tIEJU
IDQuMiBWb2wgMiBQYXJ0IEQgMS4zIExpc3QgT2YgRXJyb3IgQ29kZXMgb3IgYQotICAvLyBudW1i
ZXIgb3V0c2lkZSB0aGF0IHJhbmdlIHJldHVybmVkIGJ5IHNwZWNpZmljIHBsYXRmb3JtcyBlLmcu
IEFuZHJvaWQKLSAgLy8gcmV0dXJucyAweDEwMSB0byBzaWduYWwgYSBHQVRUIGZhaWx1cmUKLSAg
Ly8gaHR0cHM6Ly9kZXZlbG9wZXIuYW5kcm9pZC5jb20vcmVmZXJlbmNlL2FuZHJvaWQvYmx1ZXRv
b3RoL0JsdWV0b290aEdhdHQuaHRtbCNHQVRUX0ZBSUxVUkUKLSAgYXN5bmMgc2V0TmV4dEdBVFRD
b25uZWN0aW9uUmVzcG9uc2Uoe2NvZGV9KSB7Ci0gICAgbGV0IHtzdWNjZXNzfSA9Ci0gICAgICBh
d2FpdCB0aGlzLmZha2VfY2VudHJhbF9wdHJfLnNldE5leHRHQVRUQ29ubmVjdGlvblJlc3BvbnNl
KAotICAgICAgICB0aGlzLmFkZHJlc3MsIGNvZGUpOwotCi0gICAgaWYgKHN1Y2Nlc3MgIT09IHRy
dWUpIHRocm93ICdzZXROZXh0R0FUVENvbm5lY3Rpb25SZXNwb25zZSBmYWlsZWQuJzsKLSAgfQot
Ci0gIC8vIFNldHMgdGhlIG5leHQgR0FUVCBEaXNjb3ZlcnkgcmVxdWVzdCByZXNwb25zZSBmb3Ig
cGVyaXBoZXJhbCB3aXRoCi0gIC8vIHxhZGRyZXNzfCB0byB8Y29kZXwuIHxjb2RlfCBjb3VsZCBi
ZSBhbiBIQ0kgRXJyb3IgQ29kZSBmcm9tCi0gIC8vIEJUIDQuMiBWb2wgMiBQYXJ0IEQgMS4zIExp
c3QgT2YgRXJyb3IgQ29kZXMgb3IgYSBudW1iZXIgb3V0c2lkZSB0aGF0Ci0gIC8vIHJhbmdlIHJl
dHVybmVkIGJ5IHNwZWNpZmljIHBsYXRmb3JtcyBlLmcuIEFuZHJvaWQgcmV0dXJucyAweDEwMSB0
byBzaWduYWwKLSAgLy8gYSBHQVRUIGZhaWx1cmUKLSAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIuYW5k
cm9pZC5jb20vcmVmZXJlbmNlL2FuZHJvaWQvYmx1ZXRvb3RoL0JsdWV0b290aEdhdHQuaHRtbCNH
QVRUX0ZBSUxVUkUKLSAgLy8KLSAgLy8gVGhlIGZvbGxvd2luZyBwcm9jZWR1cmVzIGRlZmluZWQg
YXQgQlQgNC4yIFZvbCAzIFBhcnQgRyBTZWN0aW9uIDQuCi0gIC8vICJHQVRUIEZlYXR1cmUgUmVx
dWlyZW1lbnRzIiBhcmUgdXNlZCB0byBkaXNjb3ZlciBhdHRyaWJ1dGVzIG9mIHRoZQotICAvLyBH
QVRUIFNlcnZlcjoKLSAgLy8gIC0gUHJpbWFyeSBTZXJ2aWNlIERpc2NvdmVyeQotICAvLyAgLSBS
ZWxhdGlvbnNoaXAgRGlzY292ZXJ5Ci0gIC8vICAtIENoYXJhY3RlcmlzdGljIERpc2NvdmVyeQot
ICAvLyAgLSBDaGFyYWN0ZXJpc3RpYyBEZXNjcmlwdG9yIERpc2NvdmVyeQotICAvLyBUaGlzIG1l
dGhvZCBhaW1zIHRvIHNpbXVsYXRlIHRoZSByZXNwb25zZSBvbmNlIGFsbCBvZiB0aGVzZSBwcm9j
ZWR1cmVzCi0gIC8vIGhhdmUgY29tcGxldGVkIG9yIGlmIHRoZXJlIHdhcyBhbiBlcnJvciBkdXJp
bmcgYW55IG9mIHRoZW0uCi0gIGFzeW5jIHNldE5leHRHQVRURGlzY292ZXJ5UmVzcG9uc2Uoe2Nv
ZGV9KSB7Ci0gICAgbGV0IHtzdWNjZXNzfSA9Ci0gICAgICBhd2FpdCB0aGlzLmZha2VfY2VudHJh
bF9wdHJfLnNldE5leHRHQVRURGlzY292ZXJ5UmVzcG9uc2UoCi0gICAgICAgIHRoaXMuYWRkcmVz
cywgY29kZSk7Ci0KLSAgICBpZiAoc3VjY2VzcyAhPT0gdHJ1ZSkgdGhyb3cgJ3NldE5leHRHQVRU
RGlzY292ZXJ5UmVzcG9uc2UgZmFpbGVkLic7Ci0gIH0KLQotICAvLyBTaW11bGF0ZXMgYSBHQVRU
IGRpc2Nvbm5lY3Rpb24gZnJvbSB0aGUgcGVyaXBoZXJhbCB3aXRoIHxhZGRyZXNzfC4KLSAgYXN5
bmMgc2ltdWxhdGVHQVRURGlzY29ubmVjdGlvbigpIHsKLSAgICBsZXQge3N1Y2Nlc3N9ID0KLSAg
ICAgIGF3YWl0IHRoaXMuZmFrZV9jZW50cmFsX3B0cl8uc2ltdWxhdGVHQVRURGlzY29ubmVjdGlv
bih0aGlzLmFkZHJlc3MpOwotCi0gICAgaWYgKHN1Y2Nlc3MgIT09IHRydWUpIHRocm93ICdzaW11
bGF0ZUdBVFREaXNjb25uZWN0aW9uIGZhaWxlZC4nOwotICB9Ci0KLSAgLy8gU2ltdWxhdGVzIGFu
IEluZGljYXRpb24gZnJvbSB0aGUgcGVyaXBoZXJhbCdzIEdBVFQgYFNlcnZpY2UgQ2hhbmdlZGAK
LSAgLy8gQ2hhcmFjdGVyaXN0aWMgZnJvbSBCVCA0LjIgVm9sIDMgUGFydCBHIDcuMS4gVGhpcyBJ
bmRpY2F0aW9uIGlzIHNpZ25hbGVkCi0gIC8vIHdoZW4gc2VydmljZXMsIGNoYXJhY3RlcmlzdGlj
cywgb3IgZGVzY3JpcHRvcnMgYXJlIGNoYW5nZWQsIGFkZGVkLCBvcgotICAvLyByZW1vdmVkLgot
ICAvLwotICAvLyBUaGUgdmFsdWUgZm9yIGBTZXJ2aWNlIENoYW5nZWRgIGlzIGEgcmFuZ2Ugb2Yg
YXR0cmlidXRlIGhhbmRsZXMgdGhhdCBoYXZlCi0gIC8vIGNoYW5nZWQuIEhvd2V2ZXIsIHRoaXMg
dGVzdGluZyBzcGVjaWZpY2F0aW9uIHdvcmtzIGF0IGFuIGFic3RyYWN0ZWQKLSAgLy8gbGV2ZWwg
YW5kIGRvZXMgbm90IGV4cG9zZSBzZXR0aW5nIGF0dHJpYnV0ZSBoYW5kbGVzIHdoZW4gYWRkaW5n
Ci0gIC8vIGF0dHJpYnV0ZXMuIENvbnNlcXVlbnRseSwgdGhpcyBzaW11bGF0ZSBtZXRob2Qgc2hv
dWxkIGluY2x1ZGUgdGhlIGZ1bGwKLSAgLy8gcmFuZ2Ugb2YgYWxsIHRoZSBwZXJpcGhlcmFsJ3Mg
YXR0cmlidXRlIGhhbmRsZSB2YWx1ZXMuCi0gIGFzeW5jIHNpbXVsYXRlR0FUVFNlcnZpY2VzQ2hh
bmdlZCgpIHsKLSAgICBsZXQge3N1Y2Nlc3N9ID0KLSAgICAgIGF3YWl0IHRoaXMuZmFrZV9jZW50
cmFsX3B0cl8uc2ltdWxhdGVHQVRUU2VydmljZXNDaGFuZ2VkKHRoaXMuYWRkcmVzcyk7Ci0KLSAg
ICBpZiAoc3VjY2VzcyAhPT0gdHJ1ZSkgdGhyb3cgJ3NpbXVsYXRlR0FUVFNlcnZpY2VzQ2hhbmdl
ZCBmYWlsZWQuJzsKLSAgfQotfQotCi1jbGFzcyBGYWtlUmVtb3RlR0FUVFNlcnZpY2UgewotICBj
b25zdHJ1Y3RvcihzZXJ2aWNlX2lkLCBwZXJpcGhlcmFsX2FkZHJlc3MsIGZha2VfY2VudHJhbF9w
dHIpIHsKLSAgICB0aGlzLnNlcnZpY2VfaWRfID0gc2VydmljZV9pZDsKLSAgICB0aGlzLnBlcmlw
aGVyYWxfYWRkcmVzc18gPSBwZXJpcGhlcmFsX2FkZHJlc3M7Ci0gICAgdGhpcy5mYWtlX2NlbnRy
YWxfcHRyXyA9IGZha2VfY2VudHJhbF9wdHI7Ci0gIH0KLQotICAvLyBBZGRzIGEgZmFrZSBHQVRU
IENoYXJhY3RlcmlzdGljIHdpdGggfHV1aWR8IGFuZCB8cHJvcGVydGllc3wKLSAgLy8gdG8gdGhp
cyBmYWtlIHNlcnZpY2UuIFRoZSBjaGFyYWN0ZXJpc3RpYyB3aWxsIGJlIGZvdW5kIHdoZW4gZGlz
Y292ZXJpbmcKLSAgLy8gdGhlIHBlcmlwaGVyYWwncyBHQVRUIEF0dHJpYnV0ZXMuIFJldHVybnMg
YSBGYWtlUmVtb3RlR0FUVENoYXJhY3RlcmlzdGljCi0gIC8vIGNvcnJlc3BvbmRpbmcgdG8gdGhl
IGFkZGVkIGNoYXJhY3RlcmlzdGljLgotICBhc3luYyBhZGRGYWtlQ2hhcmFjdGVyaXN0aWMoe3V1
aWQsIHByb3BlcnRpZXN9KSB7Ci0gICAgbGV0IHtjaGFyYWN0ZXJpc3RpY0lkOiBjaGFyYWN0ZXJp
c3RpY19pZH0gPQotICAgICAgICBhd2FpdCB0aGlzLmZha2VfY2VudHJhbF9wdHJfLmFkZEZha2VD
aGFyYWN0ZXJpc3RpYygKLSAgICAgICAgICAgIHt1dWlkOiBCbHVldG9vdGhVVUlELmdldENoYXJh
Y3RlcmlzdGljKHV1aWQpfSwKLSAgICAgICAgICAgIEFycmF5VG9Nb2pvQ2hhcmFjdGVyaXN0aWNQ
cm9wZXJ0aWVzKHByb3BlcnRpZXMpLAotICAgICAgICAgICAgdGhpcy5zZXJ2aWNlX2lkXywKLSAg
ICAgICAgICAgIHRoaXMucGVyaXBoZXJhbF9hZGRyZXNzXyk7Ci0KLSAgICBpZiAoY2hhcmFjdGVy
aXN0aWNfaWQgPT09IG51bGwpIHRocm93ICdhZGRGYWtlQ2hhcmFjdGVyaXN0aWMgZmFpbGVkJzsK
LQotICAgIHJldHVybiBuZXcgRmFrZVJlbW90ZUdBVFRDaGFyYWN0ZXJpc3RpYygKLSAgICAgIGNo
YXJhY3RlcmlzdGljX2lkLCB0aGlzLnNlcnZpY2VfaWRfLAotICAgICAgdGhpcy5wZXJpcGhlcmFs
X2FkZHJlc3NfLCB0aGlzLmZha2VfY2VudHJhbF9wdHJfKTsKLSAgfQotCi0gIC8vIFJlbW92ZXMg
dGhlIGZha2UgR0FUVCBzZXJ2aWNlIGZyb20gaXRzIGZha2UgcGVyaXBoZXJhbC4KLSAgYXN5bmMg
cmVtb3ZlKCkgewotICAgIGxldCB7c3VjY2Vzc30gPQotICAgICAgICBhd2FpdCB0aGlzLmZha2Vf
Y2VudHJhbF9wdHJfLnJlbW92ZUZha2VTZXJ2aWNlKAotICAgICAgICAgICAgdGhpcy5zZXJ2aWNl
X2lkXywKLSAgICAgICAgICAgIHRoaXMucGVyaXBoZXJhbF9hZGRyZXNzXyk7Ci0KLSAgICBpZiAo
IXN1Y2Nlc3MpIHRocm93ICdyZW1vdmUgZmFpbGVkJzsKLSAgfQotfQotCi1jbGFzcyBGYWtlUmVt
b3RlR0FUVENoYXJhY3RlcmlzdGljIHsKLSAgY29uc3RydWN0b3IoY2hhcmFjdGVyaXN0aWNfaWQs
IHNlcnZpY2VfaWQsIHBlcmlwaGVyYWxfYWRkcmVzcywKLSAgICAgIGZha2VfY2VudHJhbF9wdHIp
IHsKLSAgICB0aGlzLmlkc18gPSBbY2hhcmFjdGVyaXN0aWNfaWQsIHNlcnZpY2VfaWQsIHBlcmlw
aGVyYWxfYWRkcmVzc107Ci0gICAgdGhpcy5kZXNjcmlwdG9yc18gPSBbXTsKLSAgICB0aGlzLmZh
a2VfY2VudHJhbF9wdHJfID0gZmFrZV9jZW50cmFsX3B0cjsKLSAgfQotCi0gIC8vIEFkZHMgYSBm
YWtlIEdBVFQgRGVzY3JpcHRvciB3aXRoIHx1dWlkfCB0byBiZSBkaXNjb3ZlcmVkIHdoZW4KLSAg
Ly8gZGlzY292ZXJpbmcgdGhlIHBlcmlwaGVyYWwncyBHQVRUIEF0dHJpYnV0ZXMuIFJldHVybnMg
YQotICAvLyBGYWtlUmVtb3RlR0FUVERlc2NyaXB0b3IgY29ycmVzcG9uZGluZyB0byB0aGlzIGRl
c2NyaXB0b3IuIHx1dWlkfCBzaG91bGQKLSAgLy8gYmUgYSBCbHVldG9vdGhEZXNjcmlwdG9yVVVJ
RAotICAvLyBodHRwczovL3dlYmJsdWV0b290aGNnLmdpdGh1Yi5pby93ZWItYmx1ZXRvb3RoLyN0
eXBlZGVmZGVmLWJsdWV0b290aGRlc2NyaXB0b3J1dWlkCi0gIGFzeW5jIGFkZEZha2VEZXNjcmlw
dG9yKHt1dWlkfSkgewotICAgIGxldCB7ZGVzY3JpcHRvcklkOiBkZXNjcmlwdG9yX2lkfSA9Ci0g
ICAgICAgIGF3YWl0IHRoaXMuZmFrZV9jZW50cmFsX3B0cl8uYWRkRmFrZURlc2NyaXB0b3IoCi0g
ICAgICAgICAgICB7dXVpZDogQmx1ZXRvb3RoVVVJRC5nZXREZXNjcmlwdG9yKHV1aWQpfSwgLi4u
dGhpcy5pZHNfKTsKLQotICAgIGlmIChkZXNjcmlwdG9yX2lkID09PSBudWxsKSB0aHJvdyAnYWRk
RmFrZURlc2NyaXB0b3IgZmFpbGVkJzsKLQotICAgIGxldCBmYWtlX2Rlc2NyaXB0b3IgPSBuZXcg
RmFrZVJlbW90ZUdBVFREZXNjcmlwdG9yKAotICAgICAgZGVzY3JpcHRvcl9pZCwgLi4udGhpcy5p
ZHNfLCB0aGlzLmZha2VfY2VudHJhbF9wdHJfKTsKLSAgICB0aGlzLmRlc2NyaXB0b3JzXy5wdXNo
KGZha2VfZGVzY3JpcHRvcik7Ci0KLSAgICByZXR1cm4gZmFrZV9kZXNjcmlwdG9yOwotICB9Ci0K
LSAgLy8gU2V0cyB0aGUgbmV4dCByZWFkIHJlc3BvbnNlIGZvciBjaGFyYWN0ZXJpc3RpYyB0byB8
Y29kZXwgYW5kIHx2YWx1ZXwuCi0gIC8vIHxjb2RlfCBjb3VsZCBiZSBhIEdBVFQgRXJyb3IgUmVz
cG9uc2UgZnJvbQotICAvLyBCVCA0LjIgVm9sIDMgUGFydCBGIDMuNC4xLjEgRXJyb3IgUmVzcG9u
c2Ugb3IgYSBudW1iZXIgb3V0c2lkZSB0aGF0IHJhbmdlCi0gIC8vIHJldHVybmVkIGJ5IHNwZWNp
ZmljIHBsYXRmb3JtcyBlLmcuIEFuZHJvaWQgcmV0dXJucyAweDEwMSB0byBzaWduYWwgYSBHQVRU
Ci0gIC8vIGZhaWx1cmUuCi0gIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLmFuZHJvaWQuY29tL3JlZmVy
ZW5jZS9hbmRyb2lkL2JsdWV0b290aC9CbHVldG9vdGhHYXR0Lmh0bWwjR0FUVF9GQUlMVVJFCi0g
IGFzeW5jIHNldE5leHRSZWFkUmVzcG9uc2UoZ2F0dF9jb2RlLCB2YWx1ZT1udWxsKSB7Ci0gICAg
aWYgKGdhdHRfY29kZSA9PT0gMCAmJiB2YWx1ZSA9PT0gbnVsbCkgewotICAgICAgdGhyb3cgJ3x2
YWx1ZXwgY2FuXCd0IGJlIG51bGwgaWYgcmVhZCBzaG91bGQgc3VjY2Vzcy4nOwotICAgIH0KLSAg
ICBpZiAoZ2F0dF9jb2RlICE9PSAwICYmIHZhbHVlICE9PSBudWxsKSB7Ci0gICAgICB0aHJvdyAn
fHZhbHVlfCBtdXN0IGJlIG51bGwgaWYgcmVhZCBzaG91bGQgZmFpbC4nOwotICAgIH0KLQotICAg
IGxldCB7c3VjY2Vzc30gPQotICAgICAgYXdhaXQgdGhpcy5mYWtlX2NlbnRyYWxfcHRyXy5zZXRO
ZXh0UmVhZENoYXJhY3RlcmlzdGljUmVzcG9uc2UoCi0gICAgICAgIGdhdHRfY29kZSwgdmFsdWUs
IC4uLnRoaXMuaWRzXyk7Ci0KLSAgICBpZiAoIXN1Y2Nlc3MpIHRocm93ICdzZXROZXh0UmVhZENo
YXJhY3RlcmlzdGljUmVzcG9uc2UgZmFpbGVkJzsKLSAgfQotCi0gIC8vIFNldHMgdGhlIG5leHQg
d3JpdGUgcmVzcG9uc2UgZm9yIHRoaXMgY2hhcmFjdGVyaXN0aWMgdG8gfGNvZGV8LiBJZgotICAv
LyB3cml0aW5nIHRvIGEgY2hhcmFjdGVyaXN0aWMgdGhhdCBvbmx5IHN1cHBvcnRzICd3cml0ZV93
aXRob3V0X3Jlc3BvbnNlJwotICAvLyB0aGUgc2V0IHJlc3BvbnNlIHdpbGwgYmUgaWdub3JlZC4K
LSAgLy8gfGNvZGV8IGNvdWxkIGJlIGEgR0FUVCBFcnJvciBSZXNwb25zZSBmcm9tCi0gIC8vIEJU
IDQuMiBWb2wgMyBQYXJ0IEYgMy40LjEuMSBFcnJvciBSZXNwb25zZSBvciBhIG51bWJlciBvdXRz
aWRlIHRoYXQgcmFuZ2UKLSAgLy8gcmV0dXJuZWQgYnkgc3BlY2lmaWMgcGxhdGZvcm1zIGUuZy4g
QW5kcm9pZCByZXR1cm5zIDB4MTAxIHRvIHNpZ25hbCBhIEdBVFQKLSAgLy8gZmFpbHVyZS4KLSAg
YXN5bmMgc2V0TmV4dFdyaXRlUmVzcG9uc2UoZ2F0dF9jb2RlKSB7Ci0gICAgbGV0IHtzdWNjZXNz
fSA9Ci0gICAgICBhd2FpdCB0aGlzLmZha2VfY2VudHJhbF9wdHJfLnNldE5leHRXcml0ZUNoYXJh
Y3RlcmlzdGljUmVzcG9uc2UoCi0gICAgICAgIGdhdHRfY29kZSwgLi4udGhpcy5pZHNfKTsKLQot
ICAgIGlmICghc3VjY2VzcykgdGhyb3cgJ3NldE5leHRXcml0ZUNoYXJhY3RlcmlzdGljUmVzcG9u
c2UgZmFpbGVkJzsKLSAgfQotCi0gIC8vIFNldHMgdGhlIG5leHQgc3Vic2NyaWJlIHRvIG5vdGlm
aWNhdGlvbnMgcmVzcG9uc2UgZm9yIGNoYXJhY3RlcmlzdGljIHdpdGgKLSAgLy8gfGNoYXJhY3Rl
cmlzdGljX2lkfCBpbiB8c2VydmljZV9pZHwgYW5kIGluIHxwZXJpcGhlcmFsX2FkZHJlc3N8IHRv
Ci0gIC8vIHxjb2RlfC4gfGNvZGV8IGNvdWxkIGJlIGEgR0FUVCBFcnJvciBSZXNwb25zZSBmcm9t
IEJUIDQuMiBWb2wgMyBQYXJ0IEYKLSAgLy8gMy40LjEuMSBFcnJvciBSZXNwb25zZSBvciBhIG51
bWJlciBvdXRzaWRlIHRoYXQgcmFuZ2UgcmV0dXJuZWQgYnkKLSAgLy8gc3BlY2lmaWMgcGxhdGZv
cm1zIGUuZy4gQW5kcm9pZCByZXR1cm5zIDB4MTAxIHRvIHNpZ25hbCBhIEdBVFQgZmFpbHVyZS4K
LSAgYXN5bmMgc2V0TmV4dFN1YnNjcmliZVRvTm90aWZpY2F0aW9uc1Jlc3BvbnNlKGdhdHRfY29k
ZSkgewotICAgIGxldCB7c3VjY2Vzc30gPQotICAgICAgYXdhaXQgdGhpcy5mYWtlX2NlbnRyYWxf
cHRyXy5zZXROZXh0U3Vic2NyaWJlVG9Ob3RpZmljYXRpb25zUmVzcG9uc2UoCi0gICAgICAgIGdh
dHRfY29kZSwgLi4udGhpcy5pZHNfKTsKLQotICAgIGlmICghc3VjY2VzcykgdGhyb3cgJ3NldE5l
eHRTdWJzY3JpYmVUb05vdGlmaWNhdGlvbnNSZXNwb25zZSBmYWlsZWQnOwotICB9Ci0KLSAgLy8g
U2V0cyB0aGUgbmV4dCB1bnN1YnNjcmliZSB0byBub3RpZmljYXRpb25zIHJlc3BvbnNlIGZvciBj
aGFyYWN0ZXJpc3RpYyB3aXRoCi0gIC8vIHxjaGFyYWN0ZXJpc3RpY19pZHwgaW4gfHNlcnZpY2Vf
aWR8IGFuZCBpbiB8cGVyaXBoZXJhbF9hZGRyZXNzfCB0bwotICAvLyB8Y29kZXwuIHxjb2RlfCBj
b3VsZCBiZSBhIEdBVFQgRXJyb3IgUmVzcG9uc2UgZnJvbSBCVCA0LjIgVm9sIDMgUGFydCBGCi0g
IC8vIDMuNC4xLjEgRXJyb3IgUmVzcG9uc2Ugb3IgYSBudW1iZXIgb3V0c2lkZSB0aGF0IHJhbmdl
IHJldHVybmVkIGJ5Ci0gIC8vIHNwZWNpZmljIHBsYXRmb3JtcyBlLmcuIEFuZHJvaWQgcmV0dXJu
cyAweDEwMSB0byBzaWduYWwgYSBHQVRUIGZhaWx1cmUuCi0gIGFzeW5jIHNldE5leHRVbnN1YnNj
cmliZUZyb21Ob3RpZmljYXRpb25zUmVzcG9uc2UoZ2F0dF9jb2RlKSB7Ci0gICAgbGV0IHtzdWNj
ZXNzfSA9Ci0gICAgICBhd2FpdCB0aGlzLmZha2VfY2VudHJhbF9wdHJfLnNldE5leHRVbnN1YnNj
cmliZUZyb21Ob3RpZmljYXRpb25zUmVzcG9uc2UoCi0gICAgICAgIGdhdHRfY29kZSwgLi4udGhp
cy5pZHNfKTsKLQotICAgIGlmICghc3VjY2VzcykgdGhyb3cgJ3NldE5leHRVbnN1YnNjcmliZVRv
Tm90aWZpY2F0aW9uc1Jlc3BvbnNlIGZhaWxlZCc7Ci0gIH0KLQotICAvLyBSZXR1cm5zIHRydWUg
aWYgbm90aWZpY2F0aW9ucyBmcm9tIHRoZSBjaGFyYWN0ZXJpc3RpYyBoYXZlIGJlZW4gc3Vic2Ny
aWJlZAotICAvLyB0by4KLSAgYXN5bmMgaXNOb3RpZnlpbmcoKSB7Ci0gICAgbGV0IHtzdWNjZXNz
LCBpc05vdGlmeWluZ30gPQotICAgICAgICBhd2FpdCB0aGlzLmZha2VfY2VudHJhbF9wdHJfLmlz
Tm90aWZ5aW5nKC4uLnRoaXMuaWRzXyk7Ci0KLSAgICBpZiAoIXN1Y2Nlc3MpIHRocm93ICdpc05v
dGlmeWluZyBmYWlsZWQnOwotCi0gICAgcmV0dXJuIGlzTm90aWZ5aW5nOwotICB9Ci0KLSAgLy8g
R2V0cyB0aGUgbGFzdCBzdWNjZXNzZnVsbHkgd3JpdHRlbiB2YWx1ZSB0byB0aGUgY2hhcmFjdGVy
aXN0aWMgYW5kIGl0cwotICAvLyB3cml0ZSB0eXBlLiBXcml0ZSB0eXBlIGlzIG9uZSBvZiAnbm9u
ZScsICdkZWZhdWx0LWRlcHJlY2F0ZWQnLAotICAvLyAnd2l0aC1yZXNwb25zZScsICd3aXRob3V0
LXJlc3BvbnNlJy4gUmV0dXJucyB7bGFzdFZhbHVlOiBudWxsLAotICAvLyBsYXN0V3JpdGVUeXBl
OiAnbm9uZSd9IGlmIG5vIHZhbHVlIGhhcyB5ZXQgYmVlbiB3cml0dGVuIHRvIHRoZQotICAvLyBj
aGFyYWN0ZXJpc3RpYy4KLSAgYXN5bmMgZ2V0TGFzdFdyaXR0ZW5WYWx1ZSgpIHsKLSAgICBsZXQg
e3N1Y2Nlc3MsIHZhbHVlLCB3cml0ZVR5cGV9ID0KLSAgICAgICAgYXdhaXQgdGhpcy5mYWtlX2Nl
bnRyYWxfcHRyXy5nZXRMYXN0V3JpdHRlbkNoYXJhY3RlcmlzdGljVmFsdWUoCi0gICAgICAgICAg
ICAuLi50aGlzLmlkc18pOwotCi0gICAgaWYgKCFzdWNjZXNzKSB0aHJvdyAnZ2V0TGFzdFdyaXR0
ZW5DaGFyYWN0ZXJpc3RpY1ZhbHVlIGZhaWxlZCc7Ci0KLSAgICByZXR1cm4ge2xhc3RWYWx1ZTog
dmFsdWUsIGxhc3RXcml0ZVR5cGU6IHdyaXRlVHlwZVRvU3RyaW5nKHdyaXRlVHlwZSl9OwotICB9
Ci0KLSAgLy8gUmVtb3ZlcyB0aGUgZmFrZSBHQVRUIENoYXJhY3RlcmlzdGljIGZyb20gaXRzIGZh
a2Ugc2VydmljZS4KLSAgYXN5bmMgcmVtb3ZlKCkgewotICAgIGxldCB7c3VjY2Vzc30gPQotICAg
ICAgICBhd2FpdCB0aGlzLmZha2VfY2VudHJhbF9wdHJfLnJlbW92ZUZha2VDaGFyYWN0ZXJpc3Rp
YyguLi50aGlzLmlkc18pOwotCi0gICAgaWYgKCFzdWNjZXNzKSB0aHJvdyAncmVtb3ZlIGZhaWxl
ZCc7Ci0gIH0KLX0KLQotY2xhc3MgRmFrZVJlbW90ZUdBVFREZXNjcmlwdG9yIHsKLSAgY29uc3Ry
dWN0b3IoZGVzY3JpcHRvcl9pZCwKLSAgICAgICAgICAgICAgY2hhcmFjdGVyaXN0aWNfaWQsCi0g
ICAgICAgICAgICAgIHNlcnZpY2VfaWQsCi0gICAgICAgICAgICAgIHBlcmlwaGVyYWxfYWRkcmVz
cywKLSAgICAgICAgICAgICAgZmFrZV9jZW50cmFsX3B0cikgewotICAgIHRoaXMuaWRzXyA9IFsK
LSAgICAgIGRlc2NyaXB0b3JfaWQsIGNoYXJhY3RlcmlzdGljX2lkLCBzZXJ2aWNlX2lkLCBwZXJp
cGhlcmFsX2FkZHJlc3NdOwotICAgIHRoaXMuZmFrZV9jZW50cmFsX3B0cl8gPSBmYWtlX2NlbnRy
YWxfcHRyOwotICB9Ci0KLSAgLy8gU2V0cyB0aGUgbmV4dCByZWFkIHJlc3BvbnNlIGZvciBkZXNj
cmlwdG9yIHRvIHxjb2RlfCBhbmQgfHZhbHVlfC4KLSAgLy8gfGNvZGV8IGNvdWxkIGJlIGEgR0FU
VCBFcnJvciBSZXNwb25zZSBmcm9tCi0gIC8vIEJUIDQuMiBWb2wgMyBQYXJ0IEYgMy40LjEuMSBF
cnJvciBSZXNwb25zZSBvciBhIG51bWJlciBvdXRzaWRlIHRoYXQgcmFuZ2UKLSAgLy8gcmV0dXJu
ZWQgYnkgc3BlY2lmaWMgcGxhdGZvcm1zIGUuZy4gQW5kcm9pZCByZXR1cm5zIDB4MTAxIHRvIHNp
Z25hbCBhIEdBVFQKLSAgLy8gZmFpbHVyZS4KLSAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIuYW5kcm9p
ZC5jb20vcmVmZXJlbmNlL2FuZHJvaWQvYmx1ZXRvb3RoL0JsdWV0b290aEdhdHQuaHRtbCNHQVRU
X0ZBSUxVUkUKLSAgYXN5bmMgc2V0TmV4dFJlYWRSZXNwb25zZShnYXR0X2NvZGUsIHZhbHVlPW51
bGwpIHsKLSAgICBpZiAoZ2F0dF9jb2RlID09PSAwICYmIHZhbHVlID09PSBudWxsKSB7Ci0gICAg
ICB0aHJvdyAnfHZhbHVlfCBjYW5ub3QgYmUgbnVsbCBpZiByZWFkIHNob3VsZCBzdWNjZWVkLic7
Ci0gICAgfQotICAgIGlmIChnYXR0X2NvZGUgIT09IDAgJiYgdmFsdWUgIT09IG51bGwpIHsKLSAg
ICAgIHRocm93ICd8dmFsdWV8IG11c3QgYmUgbnVsbCBpZiByZWFkIHNob3VsZCBmYWlsLic7Ci0g
ICAgfQotCi0gICAgbGV0IHtzdWNjZXNzfSA9Ci0gICAgICBhd2FpdCB0aGlzLmZha2VfY2VudHJh
bF9wdHJfLnNldE5leHRSZWFkRGVzY3JpcHRvclJlc3BvbnNlKAotICAgICAgICBnYXR0X2NvZGUs
IHZhbHVlLCAuLi50aGlzLmlkc18pOwotCi0gICAgaWYgKCFzdWNjZXNzKSB0aHJvdyAnc2V0TmV4
dFJlYWREZXNjcmlwdG9yUmVzcG9uc2UgZmFpbGVkJzsKLSAgfQotCi0gIC8vIFNldHMgdGhlIG5l
eHQgd3JpdGUgcmVzcG9uc2UgZm9yIHRoaXMgZGVzY3JpcHRvciB0byB8Y29kZXwuCi0gIC8vIHxj
b2RlfCBjb3VsZCBiZSBhIEdBVFQgRXJyb3IgUmVzcG9uc2UgZnJvbQotICAvLyBCVCA0LjIgVm9s
IDMgUGFydCBGIDMuNC4xLjEgRXJyb3IgUmVzcG9uc2Ugb3IgYSBudW1iZXIgb3V0c2lkZSB0aGF0
IHJhbmdlCi0gIC8vIHJldHVybmVkIGJ5IHNwZWNpZmljIHBsYXRmb3JtcyBlLmcuIEFuZHJvaWQg
cmV0dXJucyAweDEwMSB0byBzaWduYWwgYSBHQVRUCi0gIC8vIGZhaWx1cmUuCi0gIGFzeW5jIHNl
dE5leHRXcml0ZVJlc3BvbnNlKGdhdHRfY29kZSkgewotICAgIGxldCB7c3VjY2Vzc30gPQotICAg
ICAgYXdhaXQgdGhpcy5mYWtlX2NlbnRyYWxfcHRyXy5zZXROZXh0V3JpdGVEZXNjcmlwdG9yUmVz
cG9uc2UoCi0gICAgICAgIGdhdHRfY29kZSwgLi4udGhpcy5pZHNfKTsKLQotICAgIGlmICghc3Vj
Y2VzcykgdGhyb3cgJ3NldE5leHRXcml0ZURlc2NyaXB0b3JSZXNwb25zZSBmYWlsZWQnOwotICB9
Ci0KLSAgLy8gR2V0cyB0aGUgbGFzdCBzdWNjZXNzZnVsbHkgd3JpdHRlbiB2YWx1ZSB0byB0aGUg
ZGVzY3JpcHRvci4KLSAgLy8gUmV0dXJucyBudWxsIGlmIG5vIHZhbHVlIGhhcyB5ZXQgYmVlbiB3
cml0dGVuIHRvIHRoZSBkZXNjcmlwdG9yLgotICBhc3luYyBnZXRMYXN0V3JpdHRlblZhbHVlKCkg
ewotICAgIGxldCB7c3VjY2VzcywgdmFsdWV9ID0KLSAgICAgIGF3YWl0IHRoaXMuZmFrZV9jZW50
cmFsX3B0cl8uZ2V0TGFzdFdyaXR0ZW5EZXNjcmlwdG9yVmFsdWUoCi0gICAgICAgICAgLi4udGhp
cy5pZHNfKTsKLQotICAgIGlmICghc3VjY2VzcykgdGhyb3cgJ2dldExhc3RXcml0dGVuRGVzY3Jp
cHRvclZhbHVlIGZhaWxlZCc7Ci0KLSAgICByZXR1cm4gdmFsdWU7Ci0gIH0KLQotICAvLyBSZW1v
dmVzIHRoZSBmYWtlIEdBVFQgRGVzY3JpcHRvciBmcm9tIGl0cyBmYWtlIGNoYXJhY3RlcmlzdGlj
LgotICBhc3luYyByZW1vdmUoKSB7Ci0gICAgbGV0IHtzdWNjZXNzfSA9Ci0gICAgICAgIGF3YWl0
IHRoaXMuZmFrZV9jZW50cmFsX3B0cl8ucmVtb3ZlRmFrZURlc2NyaXB0b3IoLi4udGhpcy5pZHNf
KTsKLQotICAgIGlmICghc3VjY2VzcykgdGhyb3cgJ3JlbW92ZSBmYWlsZWQnOwotICB9Ci19Ci0K
LS8vIEZha2VDaG9vc2VyIGFsbG93cyBjbGllbnRzIHRvIHNpbXVsYXRlIHVzZXIgYWN0aW9ucyBv
biBhIEJsdWV0b290aCBjaG9vc2VyLAotLy8gYW5kIHJlY29yZHMgdGhlIGV2ZW50cyBwcm9kdWNl
ZCBieSB0aGUgQmx1ZXRvb3RoIGNob29zZXIuCi1jbGFzcyBGYWtlQ2hvb3NlciB7Ci0gIGNvbnN0
cnVjdG9yKCkgewotICAgIGxldCBmYWtlQmx1ZXRvb3RoQ2hvb3NlckZhY3RvcnlQdHIgPQotICAg
ICAgICBuZXcgY29udGVudC5tb2pvbS5GYWtlQmx1ZXRvb3RoQ2hvb3NlckZhY3RvcnlQdHIoKTsK
LSAgICBNb2pvLmJpbmRJbnRlcmZhY2UoY29udGVudC5tb2pvbS5GYWtlQmx1ZXRvb3RoQ2hvb3Nl
ckZhY3RvcnkubmFtZSwKLSAgICAgICAgbW9qby5tYWtlUmVxdWVzdChmYWtlQmx1ZXRvb3RoQ2hv
b3NlckZhY3RvcnlQdHIpLmhhbmRsZSwgJ3Byb2Nlc3MnKTsKLQotICAgIHRoaXMuZmFrZV9ibHVl
dG9vdGhfY2hvb3Nlcl9wdHJfID0KLSAgICAgICAgbmV3IGNvbnRlbnQubW9qb20uRmFrZUJsdWV0
b290aENob29zZXJQdHIoKTsKLQotICAgIGxldCBjbGllbnRQdHJJbmZvID0gbmV3IG1vam8uQXNz
b2NpYXRlZEludGVyZmFjZVB0ckluZm8oKTsKLSAgICB0aGlzLmZha2VfYmx1ZXRvb3RoX2Nob29z
ZXJfY2xpZW50X2JpbmRpbmdfID0KLSAgICAgICAgbmV3IG1vam8uQXNzb2NpYXRlZEJpbmRpbmco
Y29udGVudC5tb2pvbS5GYWtlQmx1ZXRvb3RoQ2hvb3NlckNsaWVudCwKLSAgICAgICAgICAgIHRo
aXMsIG1vam8ubWFrZVJlcXVlc3QoY2xpZW50UHRySW5mbykpOwotCi0gICAgZmFrZUJsdWV0b290
aENob29zZXJGYWN0b3J5UHRyLmNyZWF0ZUZha2VCbHVldG9vdGhDaG9vc2VyKAotICAgICAgICBt
b2pvLm1ha2VSZXF1ZXN0KHRoaXMuZmFrZV9ibHVldG9vdGhfY2hvb3Nlcl9wdHJfKSwgY2xpZW50
UHRySW5mbyk7Ci0KLSAgICB0aGlzLmV2ZW50c18gPSBuZXcgQXJyYXkoKTsKLSAgICB0aGlzLmV2
ZW50X2xpc3RlbmVyXyA9IG51bGw7Ci0gIH0KLQotICAvLyBJZiB0aGUgY2hvb3NlciBoYXMgcmVj
ZWl2ZWQgbW9yZSBldmVudHMgdGhhbiB8bnVtT2ZFdmVudHN8IHRoaXMgZnVuY3Rpb24KLSAgLy8g
d2lsbCByZWplY3QgdGhlIHByb21pc2UsIGVsc2UgaXQgd2lsbCB3YWl0IHVudGlsIHxudW1PZkV2
ZW50c3wgZXZlbnRzIGFyZQotICAvLyByZWNlaXZlZCBiZWZvcmUgcmVzb2x2aW5nIHdpdGggYW4g
YXJyYXkgb2YgfEZha2VCbHVldG9vdGhDaG9vc2VyRXZlbnR8Ci0gIC8vIG9iamVjdHMuCi0gIGFz
eW5jIHdhaXRGb3JFdmVudHMobnVtT2ZFdmVudHMpIHsKLSAgICByZXR1cm4gbmV3IFByb21pc2Uo
cmVzb2x2ZSA9PiB7Ci0gICAgICBpZiAodGhpcy5ldmVudHNfLmxlbmd0aCA+IG51bU9mRXZlbnRz
KSB7Ci0gICAgICAgIHRocm93IGBBc2tlZCBmb3IgJHtudW1PZkV2ZW50c30gZXZlbnQocyksIGJ1
dCByZWNlaXZlZCBgICsKLSAgICAgICAgICAgIGAke3RoaXMuZXZlbnRzXy5sZW5ndGh9LmA7Ci0g
ICAgICB9Ci0KLSAgICAgIHRoaXMuZXZlbnRfbGlzdGVuZXJfID0gKCkgPT4gewotICAgICAgICAg
aWYgKHRoaXMuZXZlbnRzXy5sZW5ndGggPT09IG51bU9mRXZlbnRzKSB7Ci0gICAgICAgICAgbGV0
IHJlc3VsdCA9IEFycmF5LmZyb20odGhpcy5ldmVudHNfKTsKLSAgICAgICAgICB0aGlzLmV2ZW50
X2xpc3RlbmVyXyA9IG51bGw7Ci0gICAgICAgICAgdGhpcy5ldmVudHNfID0gW107Ci0gICAgICAg
ICAgcmVzb2x2ZShyZXN1bHQpOwotICAgICAgICB9Ci0gICAgICB9OwotICAgICAgdGhpcy5ldmVu
dF9saXN0ZW5lcl8oKTsKLSAgICB9KTsKLSAgfQotCi0gIGFzeW5jIHNlbGVjdFBlcmlwaGVyYWwo
cGVyaXBoZXJhbCkgewotICAgIGlmICghKHBlcmlwaGVyYWwgaW5zdGFuY2VvZiBGYWtlUGVyaXBo
ZXJhbCkpIHsKLSAgICAgIHRocm93ICd8cGVyaXBoZXJhbHwgbXVzdCBiZSBhbiBpbnN0YW5jZSBv
ZiBGYWtlUGVyaXBoZXJhbCc7Ci0gICAgfQotICAgIGF3YWl0IHRoaXMuZmFrZV9ibHVldG9vdGhf
Y2hvb3Nlcl9wdHJfLnNlbGVjdFBlcmlwaGVyYWwocGVyaXBoZXJhbC5hZGRyZXNzKTsKLSAgfQot
Ci0gIGFzeW5jIGNhbmNlbCgpIHsKLSAgICBhd2FpdCB0aGlzLmZha2VfYmx1ZXRvb3RoX2Nob29z
ZXJfcHRyXy5jYW5jZWwoKTsKLSAgfQotCi0gIGFzeW5jIHJlc2NhbigpIHsKLSAgICBhd2FpdCB0
aGlzLmZha2VfYmx1ZXRvb3RoX2Nob29zZXJfcHRyXy5yZXNjYW4oKTsKLSAgfQotCi0gIG9uRXZl
bnQoY2hvb3NlckV2ZW50KSB7Ci0gICAgY2hvb3NlckV2ZW50LnR5cGUgPSBNT0pPX0NIT09TRVJf
RVZFTlRfVFlQRV9NQVBbY2hvb3NlckV2ZW50LnR5cGVdOwotICAgIHRoaXMuZXZlbnRzXy5wdXNo
KGNob29zZXJFdmVudCk7Ci0gICAgaWYgKHRoaXMuZXZlbnRfbGlzdGVuZXJfICE9PSBudWxsKSB7
Ci0gICAgICB0aGlzLmV2ZW50X2xpc3RlbmVyXygpOwotICAgIH0KLSAgfQotfQotCi0vLyBJZiB0
aGlzIGxpbmUgZmFpbHMsIGl0IG1lYW5zIHRoYXQgY3VycmVudCBlbnZpcm9ubWVudCBkb2VzIG5v
dCBzdXBwb3J0IHRoZQotLy8gV2ViIEJsdWV0b290aCBUZXN0IEFQSS4KLXRyeSB7Ci0gIG5hdmln
YXRvci5ibHVldG9vdGgudGVzdCA9IG5ldyBGYWtlQmx1ZXRvb3RoKCk7Ci19IGNhdGNoIHsKLSAg
ICB0aHJvdyAnV2ViIEJsdWV0b290aCBUZXN0IEFQSSBpcyBub3QgaW1wbGVtZW50ZWQgb24gdGhp
cyAnICsKLSAgICAgICAgJ2Vudmlyb25tZW50LiBTZWUgdGhlIGJsdWV0b290aCBSRUFETUUgYXQg
JyArCi0gICAgICAgICdodHRwczovL2dpdGh1Yi5jb20vd2ViLXBsYXRmb3JtLXRlc3RzL3dwdC9i
bG9iL21hc3Rlci9ibHVldG9vdGgvUkVBRE1FLm1kI3dlYi1ibHVldG9vdGgtdGVzdGluZyc7Ci19
CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3Rz
L3Jlc291cmNlcy9jaHJvbWl1bS93ZWItYmx1ZXRvb3RoLXRlc3QuanMuaGVhZGVycyBiL0xheW91
dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVt
L3dlYi1ibHVldG9vdGgtdGVzdC5qcy5oZWFkZXJzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCA2ODA1YzMyM2RmNWE5NzUyMzE2NDhiODMwZTMzY2UxODNjM2NiYmQzLi4wMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL0xheW91dFRlc3RzL2ltcG9ydGVk
L3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL3dlYi1ibHVldG9vdGgt
dGVzdC5qcy5oZWFkZXJzCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotQ29udGVudC1UeXBl
OiB0ZXh0L2phdmFzY3JpcHQ7IGNoYXJzZXQ9dXRmLTgKZGlmZiAtLWdpdCBhL0xheW91dFRlc3Rz
L2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL3dlYl91
c2Jfc2VydmljZS5tb2pvbS5qcyBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZv
cm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL3dlYl91c2Jfc2VydmljZS5tb2pvbS5qcwpkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTRhMDE3YjFkZTE3OGMwYzUxYWRkYjg3OGQyNTdi
OGIxYTc0MDMzNC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0g
YS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9j
aHJvbWl1bS93ZWJfdXNiX3NlcnZpY2UubW9qb20uanMKKysrIC9kZXYvbnVsbApAQCAtMSw2MTQg
KzAsMCBAQAotLy8gQ29weXJpZ2h0IDIwMTQgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBh
IEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBm
aWxlLgotCi0ndXNlIHN0cmljdCc7Ci0KLShmdW5jdGlvbigpIHsKLSAgdmFyIG1vam9tSWQgPSAn
dGhpcmRfcGFydHkvYmxpbmsvcHVibGljL21vam9tL3VzYi93ZWJfdXNiX3NlcnZpY2UubW9qb20n
OwotICBpZiAobW9qby5pbnRlcm5hbC5pc01vam9tTG9hZGVkKG1vam9tSWQpKSB7Ci0gICAgY29u
c29sZS53YXJuKCdUaGUgZm9sbG93aW5nIG1vam9tIGlzIGxvYWRlZCBtdWx0aXBsZSB0aW1lczog
JyArIG1vam9tSWQpOwotICAgIHJldHVybjsKLSAgfQotICBtb2pvLmludGVybmFsLm1hcmtNb2pv
bUxvYWRlZChtb2pvbUlkKTsKLSAgdmFyIGJpbmRpbmdzID0gbW9qbzsKLSAgdmFyIGFzc29jaWF0
ZWRCaW5kaW5ncyA9IG1vam87Ci0gIHZhciBjb2RlYyA9IG1vam8uaW50ZXJuYWw7Ci0gIHZhciB2
YWxpZGF0b3IgPSBtb2pvLmludGVybmFsOwotCi0gIHZhciBleHBvcnRzID0gbW9qby5pbnRlcm5h
bC5leHBvc2VOYW1lc3BhY2UoJ2JsaW5rLm1vam9tJyk7Ci0gIHZhciBkZXZpY2UkID0KLSAgICAg
IG1vam8uaW50ZXJuYWwuZXhwb3NlTmFtZXNwYWNlKCdkZXZpY2UubW9qb20nKTsKLSAgaWYgKG1v
am8uY29uZmlnLmF1dG9Mb2FkTW9qb21EZXBzKSB7Ci0gICAgbW9qby5pbnRlcm5hbC5sb2FkTW9q
b21JZk5lY2Vzc2FyeSgKLSAgICAgICAgJ2RldmljZS91c2IvcHVibGljL21vam9tL2RldmljZS5t
b2pvbScsICcuLi8uLi8uLi8uLi8uLi9kZXZpY2UvdXNiL3B1YmxpYy9tb2pvbS9kZXZpY2UubW9q
b20uanMnKTsKLSAgfQotICB2YXIgZGV2aWNlX2VudW1lcmF0aW9uX29wdGlvbnMkID0KLSAgICAg
IG1vam8uaW50ZXJuYWwuZXhwb3NlTmFtZXNwYWNlKCdkZXZpY2UubW9qb20nKTsKLSAgaWYgKG1v
am8uY29uZmlnLmF1dG9Mb2FkTW9qb21EZXBzKSB7Ci0gICAgbW9qby5pbnRlcm5hbC5sb2FkTW9q
b21JZk5lY2Vzc2FyeSgKLSAgICAgICAgJ2RldmljZS91c2IvcHVibGljL21vam9tL2RldmljZV9l
bnVtZXJhdGlvbl9vcHRpb25zLm1vam9tJywgJy4uLy4uLy4uLy4uLy4uL2RldmljZS91c2IvcHVi
bGljL21vam9tL2RldmljZV9lbnVtZXJhdGlvbl9vcHRpb25zLm1vam9tLmpzJyk7Ci0gIH0KLSAg
dmFyIGRldmljZV9tYW5hZ2VyX2NsaWVudCQgPQotICAgICAgbW9qby5pbnRlcm5hbC5leHBvc2VO
YW1lc3BhY2UoJ2RldmljZS5tb2pvbScpOwotICBpZiAobW9qby5jb25maWcuYXV0b0xvYWRNb2pv
bURlcHMpIHsKLSAgICBtb2pvLmludGVybmFsLmxvYWRNb2pvbUlmTmVjZXNzYXJ5KAotICAgICAg
ICAnZGV2aWNlL3VzYi9wdWJsaWMvbW9qb20vZGV2aWNlX21hbmFnZXJfY2xpZW50Lm1vam9tJywg
Jy4uLy4uLy4uLy4uLy4uL2RldmljZS91c2IvcHVibGljL21vam9tL2RldmljZV9tYW5hZ2VyX2Ns
aWVudC5tb2pvbS5qcycpOwotICB9Ci0KLQotCi0gIGZ1bmN0aW9uIFdlYlVzYlNlcnZpY2VfR2V0
RGV2aWNlc19QYXJhbXModmFsdWVzKSB7Ci0gICAgdGhpcy5pbml0RGVmYXVsdHNfKCk7Ci0gICAg
dGhpcy5pbml0RmllbGRzXyh2YWx1ZXMpOwotICB9Ci0KLQotICBXZWJVc2JTZXJ2aWNlX0dldERl
dmljZXNfUGFyYW1zLnByb3RvdHlwZS5pbml0RGVmYXVsdHNfID0gZnVuY3Rpb24oKSB7Ci0gIH07
Ci0gIFdlYlVzYlNlcnZpY2VfR2V0RGV2aWNlc19QYXJhbXMucHJvdG90eXBlLmluaXRGaWVsZHNf
ID0gZnVuY3Rpb24oZmllbGRzKSB7Ci0gICAgZm9yKHZhciBmaWVsZCBpbiBmaWVsZHMpIHsKLSAg
ICAgICAgaWYgKHRoaXMuaGFzT3duUHJvcGVydHkoZmllbGQpKQotICAgICAgICAgIHRoaXNbZmll
bGRdID0gZmllbGRzW2ZpZWxkXTsKLSAgICB9Ci0gIH07Ci0KLSAgV2ViVXNiU2VydmljZV9HZXRE
ZXZpY2VzX1BhcmFtcy52YWxpZGF0ZSA9IGZ1bmN0aW9uKG1lc3NhZ2VWYWxpZGF0b3IsIG9mZnNl
dCkgewotICAgIHZhciBlcnI7Ci0gICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0
cnVjdEhlYWRlcihvZmZzZXQsIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplKTsKLSAgICBpZiAoZXJy
ICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCi0gICAgICAgIHJldHVybiBlcnI7
Ci0KLSAgICB2YXIga1ZlcnNpb25TaXplcyA9IFsKLSAgICAgIHt2ZXJzaW9uOiAwLCBudW1CeXRl
czogOH0KLSAgICBdOwotICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RW
ZXJzaW9uKG9mZnNldCwga1ZlcnNpb25TaXplcyk7Ci0gICAgaWYgKGVyciAhPT0gdmFsaWRhdG9y
LnZhbGlkYXRpb25FcnJvci5OT05FKQotICAgICAgICByZXR1cm4gZXJyOwotCi0gICAgcmV0dXJu
IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORTsKLSAgfTsKLQotICBXZWJVc2JTZXJ2aWNl
X0dldERldmljZXNfUGFyYW1zLmVuY29kZWRTaXplID0gY29kZWMua1N0cnVjdEhlYWRlclNpemUg
KyAwOwotCi0gIFdlYlVzYlNlcnZpY2VfR2V0RGV2aWNlc19QYXJhbXMuZGVjb2RlID0gZnVuY3Rp
b24oZGVjb2RlcikgewotICAgIHZhciBwYWNrZWQ7Ci0gICAgdmFyIHZhbCA9IG5ldyBXZWJVc2JT
ZXJ2aWNlX0dldERldmljZXNfUGFyYW1zKCk7Ci0gICAgdmFyIG51bWJlck9mQnl0ZXMgPSBkZWNv
ZGVyLnJlYWRVaW50MzIoKTsKLSAgICB2YXIgdmVyc2lvbiA9IGRlY29kZXIucmVhZFVpbnQzMigp
OwotICAgIHJldHVybiB2YWw7Ci0gIH07Ci0KLSAgV2ViVXNiU2VydmljZV9HZXREZXZpY2VzX1Bh
cmFtcy5lbmNvZGUgPSBmdW5jdGlvbihlbmNvZGVyLCB2YWwpIHsKLSAgICB2YXIgcGFja2VkOwot
ICAgIGVuY29kZXIud3JpdGVVaW50MzIoV2ViVXNiU2VydmljZV9HZXREZXZpY2VzX1BhcmFtcy5l
bmNvZGVkU2l6ZSk7Ci0gICAgZW5jb2Rlci53cml0ZVVpbnQzMigwKTsKLSAgfTsKLSAgZnVuY3Rp
b24gV2ViVXNiU2VydmljZV9HZXREZXZpY2VzX1Jlc3BvbnNlUGFyYW1zKHZhbHVlcykgewotICAg
IHRoaXMuaW5pdERlZmF1bHRzXygpOwotICAgIHRoaXMuaW5pdEZpZWxkc18odmFsdWVzKTsKLSAg
fQotCi0KLSAgV2ViVXNiU2VydmljZV9HZXREZXZpY2VzX1Jlc3BvbnNlUGFyYW1zLnByb3RvdHlw
ZS5pbml0RGVmYXVsdHNfID0gZnVuY3Rpb24oKSB7Ci0gICAgdGhpcy5yZXN1bHRzID0gbnVsbDsK
LSAgfTsKLSAgV2ViVXNiU2VydmljZV9HZXREZXZpY2VzX1Jlc3BvbnNlUGFyYW1zLnByb3RvdHlw
ZS5pbml0RmllbGRzXyA9IGZ1bmN0aW9uKGZpZWxkcykgewotICAgIGZvcih2YXIgZmllbGQgaW4g
ZmllbGRzKSB7Ci0gICAgICAgIGlmICh0aGlzLmhhc093blByb3BlcnR5KGZpZWxkKSkKLSAgICAg
ICAgICB0aGlzW2ZpZWxkXSA9IGZpZWxkc1tmaWVsZF07Ci0gICAgfQotICB9OwotCi0gIFdlYlVz
YlNlcnZpY2VfR2V0RGV2aWNlc19SZXNwb25zZVBhcmFtcy52YWxpZGF0ZSA9IGZ1bmN0aW9uKG1l
c3NhZ2VWYWxpZGF0b3IsIG9mZnNldCkgewotICAgIHZhciBlcnI7Ci0gICAgZXJyID0gbWVzc2Fn
ZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdEhlYWRlcihvZmZzZXQsIGNvZGVjLmtTdHJ1Y3RIZWFk
ZXJTaXplKTsKLSAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUp
Ci0gICAgICAgIHJldHVybiBlcnI7Ci0KLSAgICB2YXIga1ZlcnNpb25TaXplcyA9IFsKLSAgICAg
IHt2ZXJzaW9uOiAwLCBudW1CeXRlczogMTZ9Ci0gICAgXTsKLSAgICBlcnIgPSBtZXNzYWdlVmFs
aWRhdG9yLnZhbGlkYXRlU3RydWN0VmVyc2lvbihvZmZzZXQsIGtWZXJzaW9uU2l6ZXMpOwotICAg
IGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKLSAgICAgICAgcmV0
dXJuIGVycjsKLQotCi0gICAgLy8gdmFsaWRhdGUgV2ViVXNiU2VydmljZV9HZXREZXZpY2VzX1Jl
c3BvbnNlUGFyYW1zLnJlc3VsdHMKLSAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRl
QXJyYXlQb2ludGVyKG9mZnNldCArIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgMCwgOCwgbmV3
IGNvZGVjLlBvaW50ZXJUbyhkZXZpY2UkLlVzYkRldmljZUluZm8pLCBmYWxzZSwgWzBdLCAwKTsK
LSAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCi0gICAgICAg
IHJldHVybiBlcnI7Ci0KLSAgICByZXR1cm4gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05F
OwotICB9OwotCi0gIFdlYlVzYlNlcnZpY2VfR2V0RGV2aWNlc19SZXNwb25zZVBhcmFtcy5lbmNv
ZGVkU2l6ZSA9IGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgODsKLQotICBXZWJVc2JTZXJ2aWNl
X0dldERldmljZXNfUmVzcG9uc2VQYXJhbXMuZGVjb2RlID0gZnVuY3Rpb24oZGVjb2Rlcikgewot
ICAgIHZhciBwYWNrZWQ7Ci0gICAgdmFyIHZhbCA9IG5ldyBXZWJVc2JTZXJ2aWNlX0dldERldmlj
ZXNfUmVzcG9uc2VQYXJhbXMoKTsKLSAgICB2YXIgbnVtYmVyT2ZCeXRlcyA9IGRlY29kZXIucmVh
ZFVpbnQzMigpOwotICAgIHZhciB2ZXJzaW9uID0gZGVjb2Rlci5yZWFkVWludDMyKCk7Ci0gICAg
dmFsLnJlc3VsdHMgPSBkZWNvZGVyLmRlY29kZUFycmF5UG9pbnRlcihuZXcgY29kZWMuUG9pbnRl
clRvKGRldmljZSQuVXNiRGV2aWNlSW5mbykpOwotICAgIHJldHVybiB2YWw7Ci0gIH07Ci0KLSAg
V2ViVXNiU2VydmljZV9HZXREZXZpY2VzX1Jlc3BvbnNlUGFyYW1zLmVuY29kZSA9IGZ1bmN0aW9u
KGVuY29kZXIsIHZhbCkgewotICAgIHZhciBwYWNrZWQ7Ci0gICAgZW5jb2Rlci53cml0ZVVpbnQz
MihXZWJVc2JTZXJ2aWNlX0dldERldmljZXNfUmVzcG9uc2VQYXJhbXMuZW5jb2RlZFNpemUpOwot
ICAgIGVuY29kZXIud3JpdGVVaW50MzIoMCk7Ci0gICAgZW5jb2Rlci5lbmNvZGVBcnJheVBvaW50
ZXIobmV3IGNvZGVjLlBvaW50ZXJUbyhkZXZpY2UkLlVzYkRldmljZUluZm8pLCB2YWwucmVzdWx0
cyk7Ci0gIH07Ci0gIGZ1bmN0aW9uIFdlYlVzYlNlcnZpY2VfR2V0RGV2aWNlX1BhcmFtcyh2YWx1
ZXMpIHsKLSAgICB0aGlzLmluaXREZWZhdWx0c18oKTsKLSAgICB0aGlzLmluaXRGaWVsZHNfKHZh
bHVlcyk7Ci0gIH0KLQotCi0gIFdlYlVzYlNlcnZpY2VfR2V0RGV2aWNlX1BhcmFtcy5wcm90b3R5
cGUuaW5pdERlZmF1bHRzXyA9IGZ1bmN0aW9uKCkgewotICAgIHRoaXMuZ3VpZCA9IG51bGw7Ci0g
ICAgdGhpcy5kZXZpY2VSZXF1ZXN0ZCA9IG5ldyBiaW5kaW5ncy5JbnRlcmZhY2VSZXF1ZXN0KCk7
Ci0gIH07Ci0gIFdlYlVzYlNlcnZpY2VfR2V0RGV2aWNlX1BhcmFtcy5wcm90b3R5cGUuaW5pdEZp
ZWxkc18gPSBmdW5jdGlvbihmaWVsZHMpIHsKLSAgICBmb3IodmFyIGZpZWxkIGluIGZpZWxkcykg
ewotICAgICAgICBpZiAodGhpcy5oYXNPd25Qcm9wZXJ0eShmaWVsZCkpCi0gICAgICAgICAgdGhp
c1tmaWVsZF0gPSBmaWVsZHNbZmllbGRdOwotICAgIH0KLSAgfTsKLQotICBXZWJVc2JTZXJ2aWNl
X0dldERldmljZV9QYXJhbXMudmFsaWRhdGUgPSBmdW5jdGlvbihtZXNzYWdlVmFsaWRhdG9yLCBv
ZmZzZXQpIHsKLSAgICB2YXIgZXJyOwotICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRh
dGVTdHJ1Y3RIZWFkZXIob2Zmc2V0LCBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSk7Ci0gICAgaWYg
KGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQotICAgICAgICByZXR1cm4g
ZXJyOwotCi0gICAgdmFyIGtWZXJzaW9uU2l6ZXMgPSBbCi0gICAgICB7dmVyc2lvbjogMCwgbnVt
Qnl0ZXM6IDI0fQotICAgIF07Ci0gICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0
cnVjdFZlcnNpb24ob2Zmc2V0LCBrVmVyc2lvblNpemVzKTsKLSAgICBpZiAoZXJyICE9PSB2YWxp
ZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCi0gICAgICAgIHJldHVybiBlcnI7Ci0KLQotICAg
IC8vIHZhbGlkYXRlIFdlYlVzYlNlcnZpY2VfR2V0RGV2aWNlX1BhcmFtcy5ndWlkCi0gICAgZXJy
ID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cmluZ1BvaW50ZXIob2Zmc2V0ICsgY29kZWMu
a1N0cnVjdEhlYWRlclNpemUgKyAwLCBmYWxzZSkKLSAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3Iu
dmFsaWRhdGlvbkVycm9yLk5PTkUpCi0gICAgICAgIHJldHVybiBlcnI7Ci0KLQotICAgIC8vIHZh
bGlkYXRlIFdlYlVzYlNlcnZpY2VfR2V0RGV2aWNlX1BhcmFtcy5kZXZpY2VSZXF1ZXN0ZAotICAg
IGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVJbnRlcmZhY2VSZXF1ZXN0KG9mZnNldCAr
IGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgOCwgZmFsc2UpCi0gICAgaWYgKGVyciAhPT0gdmFs
aWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQotICAgICAgICByZXR1cm4gZXJyOwotCi0gICAg
cmV0dXJuIHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORTsKLSAgfTsKLQotICBXZWJVc2JT
ZXJ2aWNlX0dldERldmljZV9QYXJhbXMuZW5jb2RlZFNpemUgPSBjb2RlYy5rU3RydWN0SGVhZGVy
U2l6ZSArIDE2OwotCi0gIFdlYlVzYlNlcnZpY2VfR2V0RGV2aWNlX1BhcmFtcy5kZWNvZGUgPSBm
dW5jdGlvbihkZWNvZGVyKSB7Ci0gICAgdmFyIHBhY2tlZDsKLSAgICB2YXIgdmFsID0gbmV3IFdl
YlVzYlNlcnZpY2VfR2V0RGV2aWNlX1BhcmFtcygpOwotICAgIHZhciBudW1iZXJPZkJ5dGVzID0g
ZGVjb2Rlci5yZWFkVWludDMyKCk7Ci0gICAgdmFyIHZlcnNpb24gPSBkZWNvZGVyLnJlYWRVaW50
MzIoKTsKLSAgICB2YWwuZ3VpZCA9IGRlY29kZXIuZGVjb2RlU3RydWN0KGNvZGVjLlN0cmluZyk7
Ci0gICAgdmFsLmRldmljZVJlcXVlc3RkID0gZGVjb2Rlci5kZWNvZGVTdHJ1Y3QoY29kZWMuSW50
ZXJmYWNlUmVxdWVzdCk7Ci0gICAgZGVjb2Rlci5za2lwKDEpOwotICAgIGRlY29kZXIuc2tpcCgx
KTsKLSAgICBkZWNvZGVyLnNraXAoMSk7Ci0gICAgZGVjb2Rlci5za2lwKDEpOwotICAgIHJldHVy
biB2YWw7Ci0gIH07Ci0KLSAgV2ViVXNiU2VydmljZV9HZXREZXZpY2VfUGFyYW1zLmVuY29kZSA9
IGZ1bmN0aW9uKGVuY29kZXIsIHZhbCkgewotICAgIHZhciBwYWNrZWQ7Ci0gICAgZW5jb2Rlci53
cml0ZVVpbnQzMihXZWJVc2JTZXJ2aWNlX0dldERldmljZV9QYXJhbXMuZW5jb2RlZFNpemUpOwot
ICAgIGVuY29kZXIud3JpdGVVaW50MzIoMCk7Ci0gICAgZW5jb2Rlci5lbmNvZGVTdHJ1Y3QoY29k
ZWMuU3RyaW5nLCB2YWwuZ3VpZCk7Ci0gICAgZW5jb2Rlci5lbmNvZGVTdHJ1Y3QoY29kZWMuSW50
ZXJmYWNlUmVxdWVzdCwgdmFsLmRldmljZVJlcXVlc3RkKTsKLSAgICBlbmNvZGVyLnNraXAoMSk7
Ci0gICAgZW5jb2Rlci5za2lwKDEpOwotICAgIGVuY29kZXIuc2tpcCgxKTsKLSAgICBlbmNvZGVy
LnNraXAoMSk7Ci0gIH07Ci0gIGZ1bmN0aW9uIFdlYlVzYlNlcnZpY2VfR2V0UGVybWlzc2lvbl9Q
YXJhbXModmFsdWVzKSB7Ci0gICAgdGhpcy5pbml0RGVmYXVsdHNfKCk7Ci0gICAgdGhpcy5pbml0
RmllbGRzXyh2YWx1ZXMpOwotICB9Ci0KLQotICBXZWJVc2JTZXJ2aWNlX0dldFBlcm1pc3Npb25f
UGFyYW1zLnByb3RvdHlwZS5pbml0RGVmYXVsdHNfID0gZnVuY3Rpb24oKSB7Ci0gICAgdGhpcy5k
ZXZpY2VGaWx0ZXJzID0gbnVsbDsKLSAgfTsKLSAgV2ViVXNiU2VydmljZV9HZXRQZXJtaXNzaW9u
X1BhcmFtcy5wcm90b3R5cGUuaW5pdEZpZWxkc18gPSBmdW5jdGlvbihmaWVsZHMpIHsKLSAgICBm
b3IodmFyIGZpZWxkIGluIGZpZWxkcykgewotICAgICAgICBpZiAodGhpcy5oYXNPd25Qcm9wZXJ0
eShmaWVsZCkpCi0gICAgICAgICAgdGhpc1tmaWVsZF0gPSBmaWVsZHNbZmllbGRdOwotICAgIH0K
LSAgfTsKLQotICBXZWJVc2JTZXJ2aWNlX0dldFBlcm1pc3Npb25fUGFyYW1zLnZhbGlkYXRlID0g
ZnVuY3Rpb24obWVzc2FnZVZhbGlkYXRvciwgb2Zmc2V0KSB7Ci0gICAgdmFyIGVycjsKLSAgICBl
cnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0SGVhZGVyKG9mZnNldCwgY29kZWMu
a1N0cnVjdEhlYWRlclNpemUpOwotICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9u
RXJyb3IuTk9ORSkKLSAgICAgICAgcmV0dXJuIGVycjsKLQotICAgIHZhciBrVmVyc2lvblNpemVz
ID0gWwotICAgICAge3ZlcnNpb246IDAsIG51bUJ5dGVzOiAxNn0KLSAgICBdOwotICAgIGVyciA9
IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RWZXJzaW9uKG9mZnNldCwga1ZlcnNpb25T
aXplcyk7Ci0gICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQot
ICAgICAgICByZXR1cm4gZXJyOwotCi0KLSAgICAvLyB2YWxpZGF0ZSBXZWJVc2JTZXJ2aWNlX0dl
dFBlcm1pc3Npb25fUGFyYW1zLmRldmljZUZpbHRlcnMKLSAgICBlcnIgPSBtZXNzYWdlVmFsaWRh
dG9yLnZhbGlkYXRlQXJyYXlQb2ludGVyKG9mZnNldCArIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXpl
ICsgMCwgOCwgbmV3IGNvZGVjLlBvaW50ZXJUbyhkZXZpY2VfZW51bWVyYXRpb25fb3B0aW9ucyQu
VXNiRGV2aWNlRmlsdGVyKSwgZmFsc2UsIFswXSwgMCk7Ci0gICAgaWYgKGVyciAhPT0gdmFsaWRh
dG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQotICAgICAgICByZXR1cm4gZXJyOwotCi0gICAgcmV0
dXJuIHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORTsKLSAgfTsKLQotICBXZWJVc2JTZXJ2
aWNlX0dldFBlcm1pc3Npb25fUGFyYW1zLmVuY29kZWRTaXplID0gY29kZWMua1N0cnVjdEhlYWRl
clNpemUgKyA4OwotCi0gIFdlYlVzYlNlcnZpY2VfR2V0UGVybWlzc2lvbl9QYXJhbXMuZGVjb2Rl
ID0gZnVuY3Rpb24oZGVjb2RlcikgewotICAgIHZhciBwYWNrZWQ7Ci0gICAgdmFyIHZhbCA9IG5l
dyBXZWJVc2JTZXJ2aWNlX0dldFBlcm1pc3Npb25fUGFyYW1zKCk7Ci0gICAgdmFyIG51bWJlck9m
Qnl0ZXMgPSBkZWNvZGVyLnJlYWRVaW50MzIoKTsKLSAgICB2YXIgdmVyc2lvbiA9IGRlY29kZXIu
cmVhZFVpbnQzMigpOwotICAgIHZhbC5kZXZpY2VGaWx0ZXJzID0gZGVjb2Rlci5kZWNvZGVBcnJh
eVBvaW50ZXIobmV3IGNvZGVjLlBvaW50ZXJUbyhkZXZpY2VfZW51bWVyYXRpb25fb3B0aW9ucyQu
VXNiRGV2aWNlRmlsdGVyKSk7Ci0gICAgcmV0dXJuIHZhbDsKLSAgfTsKLQotICBXZWJVc2JTZXJ2
aWNlX0dldFBlcm1pc3Npb25fUGFyYW1zLmVuY29kZSA9IGZ1bmN0aW9uKGVuY29kZXIsIHZhbCkg
ewotICAgIHZhciBwYWNrZWQ7Ci0gICAgZW5jb2Rlci53cml0ZVVpbnQzMihXZWJVc2JTZXJ2aWNl
X0dldFBlcm1pc3Npb25fUGFyYW1zLmVuY29kZWRTaXplKTsKLSAgICBlbmNvZGVyLndyaXRlVWlu
dDMyKDApOwotICAgIGVuY29kZXIuZW5jb2RlQXJyYXlQb2ludGVyKG5ldyBjb2RlYy5Qb2ludGVy
VG8oZGV2aWNlX2VudW1lcmF0aW9uX29wdGlvbnMkLlVzYkRldmljZUZpbHRlciksIHZhbC5kZXZp
Y2VGaWx0ZXJzKTsKLSAgfTsKLSAgZnVuY3Rpb24gV2ViVXNiU2VydmljZV9HZXRQZXJtaXNzaW9u
X1Jlc3BvbnNlUGFyYW1zKHZhbHVlcykgewotICAgIHRoaXMuaW5pdERlZmF1bHRzXygpOwotICAg
IHRoaXMuaW5pdEZpZWxkc18odmFsdWVzKTsKLSAgfQotCi0KLSAgV2ViVXNiU2VydmljZV9HZXRQ
ZXJtaXNzaW9uX1Jlc3BvbnNlUGFyYW1zLnByb3RvdHlwZS5pbml0RGVmYXVsdHNfID0gZnVuY3Rp
b24oKSB7Ci0gICAgdGhpcy5yZXN1bHQgPSBudWxsOwotICB9OwotICBXZWJVc2JTZXJ2aWNlX0dl
dFBlcm1pc3Npb25fUmVzcG9uc2VQYXJhbXMucHJvdG90eXBlLmluaXRGaWVsZHNfID0gZnVuY3Rp
b24oZmllbGRzKSB7Ci0gICAgZm9yKHZhciBmaWVsZCBpbiBmaWVsZHMpIHsKLSAgICAgICAgaWYg
KHRoaXMuaGFzT3duUHJvcGVydHkoZmllbGQpKQotICAgICAgICAgIHRoaXNbZmllbGRdID0gZmll
bGRzW2ZpZWxkXTsKLSAgICB9Ci0gIH07Ci0KLSAgV2ViVXNiU2VydmljZV9HZXRQZXJtaXNzaW9u
X1Jlc3BvbnNlUGFyYW1zLnZhbGlkYXRlID0gZnVuY3Rpb24obWVzc2FnZVZhbGlkYXRvciwgb2Zm
c2V0KSB7Ci0gICAgdmFyIGVycjsKLSAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRl
U3RydWN0SGVhZGVyKG9mZnNldCwgY29kZWMua1N0cnVjdEhlYWRlclNpemUpOwotICAgIGlmIChl
cnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKLSAgICAgICAgcmV0dXJuIGVy
cjsKLQotICAgIHZhciBrVmVyc2lvblNpemVzID0gWwotICAgICAge3ZlcnNpb246IDAsIG51bUJ5
dGVzOiAxNn0KLSAgICBdOwotICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1
Y3RWZXJzaW9uKG9mZnNldCwga1ZlcnNpb25TaXplcyk7Ci0gICAgaWYgKGVyciAhPT0gdmFsaWRh
dG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQotICAgICAgICByZXR1cm4gZXJyOwotCi0KLSAgICAv
LyB2YWxpZGF0ZSBXZWJVc2JTZXJ2aWNlX0dldFBlcm1pc3Npb25fUmVzcG9uc2VQYXJhbXMucmVz
dWx0Ci0gICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdFBvaW50ZXIob2Zm
c2V0ICsgY29kZWMua1N0cnVjdEhlYWRlclNpemUgKyAwLCBkZXZpY2UkLlVzYkRldmljZUluZm8s
IHRydWUpOwotICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkK
LSAgICAgICAgcmV0dXJuIGVycjsKLQotICAgIHJldHVybiB2YWxpZGF0b3IudmFsaWRhdGlvbkVy
cm9yLk5PTkU7Ci0gIH07Ci0KLSAgV2ViVXNiU2VydmljZV9HZXRQZXJtaXNzaW9uX1Jlc3BvbnNl
UGFyYW1zLmVuY29kZWRTaXplID0gY29kZWMua1N0cnVjdEhlYWRlclNpemUgKyA4OwotCi0gIFdl
YlVzYlNlcnZpY2VfR2V0UGVybWlzc2lvbl9SZXNwb25zZVBhcmFtcy5kZWNvZGUgPSBmdW5jdGlv
bihkZWNvZGVyKSB7Ci0gICAgdmFyIHBhY2tlZDsKLSAgICB2YXIgdmFsID0gbmV3IFdlYlVzYlNl
cnZpY2VfR2V0UGVybWlzc2lvbl9SZXNwb25zZVBhcmFtcygpOwotICAgIHZhciBudW1iZXJPZkJ5
dGVzID0gZGVjb2Rlci5yZWFkVWludDMyKCk7Ci0gICAgdmFyIHZlcnNpb24gPSBkZWNvZGVyLnJl
YWRVaW50MzIoKTsKLSAgICB2YWwucmVzdWx0ID0gZGVjb2Rlci5kZWNvZGVTdHJ1Y3RQb2ludGVy
KGRldmljZSQuVXNiRGV2aWNlSW5mbyk7Ci0gICAgcmV0dXJuIHZhbDsKLSAgfTsKLQotICBXZWJV
c2JTZXJ2aWNlX0dldFBlcm1pc3Npb25fUmVzcG9uc2VQYXJhbXMuZW5jb2RlID0gZnVuY3Rpb24o
ZW5jb2RlciwgdmFsKSB7Ci0gICAgdmFyIHBhY2tlZDsKLSAgICBlbmNvZGVyLndyaXRlVWludDMy
KFdlYlVzYlNlcnZpY2VfR2V0UGVybWlzc2lvbl9SZXNwb25zZVBhcmFtcy5lbmNvZGVkU2l6ZSk7
Ci0gICAgZW5jb2Rlci53cml0ZVVpbnQzMigwKTsKLSAgICBlbmNvZGVyLmVuY29kZVN0cnVjdFBv
aW50ZXIoZGV2aWNlJC5Vc2JEZXZpY2VJbmZvLCB2YWwucmVzdWx0KTsKLSAgfTsKLSAgZnVuY3Rp
b24gV2ViVXNiU2VydmljZV9TZXRDbGllbnRfUGFyYW1zKHZhbHVlcykgewotICAgIHRoaXMuaW5p
dERlZmF1bHRzXygpOwotICAgIHRoaXMuaW5pdEZpZWxkc18odmFsdWVzKTsKLSAgfQotCi0KLSAg
V2ViVXNiU2VydmljZV9TZXRDbGllbnRfUGFyYW1zLnByb3RvdHlwZS5pbml0RGVmYXVsdHNfID0g
ZnVuY3Rpb24oKSB7Ci0gICAgdGhpcy5jbGllbnQgPSBuZXcgYXNzb2NpYXRlZEJpbmRpbmdzLkFz
c29jaWF0ZWRJbnRlcmZhY2VQdHJJbmZvKCk7Ci0gIH07Ci0gIFdlYlVzYlNlcnZpY2VfU2V0Q2xp
ZW50X1BhcmFtcy5wcm90b3R5cGUuaW5pdEZpZWxkc18gPSBmdW5jdGlvbihmaWVsZHMpIHsKLSAg
ICBmb3IodmFyIGZpZWxkIGluIGZpZWxkcykgewotICAgICAgICBpZiAodGhpcy5oYXNPd25Qcm9w
ZXJ0eShmaWVsZCkpCi0gICAgICAgICAgdGhpc1tmaWVsZF0gPSBmaWVsZHNbZmllbGRdOwotICAg
IH0KLSAgfTsKLQotICBXZWJVc2JTZXJ2aWNlX1NldENsaWVudF9QYXJhbXMudmFsaWRhdGUgPSBm
dW5jdGlvbihtZXNzYWdlVmFsaWRhdG9yLCBvZmZzZXQpIHsKLSAgICB2YXIgZXJyOwotICAgIGVy
ciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RIZWFkZXIob2Zmc2V0LCBjb2RlYy5r
U3RydWN0SGVhZGVyU2l6ZSk7Ci0gICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25F
cnJvci5OT05FKQotICAgICAgICByZXR1cm4gZXJyOwotCi0gICAgdmFyIGtWZXJzaW9uU2l6ZXMg
PSBbCi0gICAgICB7dmVyc2lvbjogMCwgbnVtQnl0ZXM6IDE2fQotICAgIF07Ci0gICAgZXJyID0g
bWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdFZlcnNpb24ob2Zmc2V0LCBrVmVyc2lvblNp
emVzKTsKLSAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCi0g
ICAgICAgIHJldHVybiBlcnI7Ci0KLQotICAgIC8vIHZhbGlkYXRlIFdlYlVzYlNlcnZpY2VfU2V0
Q2xpZW50X1BhcmFtcy5jbGllbnQKLSAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRl
QXNzb2NpYXRlZEludGVyZmFjZShvZmZzZXQgKyBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDAs
IGZhbHNlKTsKLSAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUp
Ci0gICAgICAgIHJldHVybiBlcnI7Ci0KLSAgICByZXR1cm4gdmFsaWRhdG9yLnZhbGlkYXRpb25F
cnJvci5OT05FOwotICB9OwotCi0gIFdlYlVzYlNlcnZpY2VfU2V0Q2xpZW50X1BhcmFtcy5lbmNv
ZGVkU2l6ZSA9IGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgODsKLQotICBXZWJVc2JTZXJ2aWNl
X1NldENsaWVudF9QYXJhbXMuZGVjb2RlID0gZnVuY3Rpb24oZGVjb2RlcikgewotICAgIHZhciBw
YWNrZWQ7Ci0gICAgdmFyIHZhbCA9IG5ldyBXZWJVc2JTZXJ2aWNlX1NldENsaWVudF9QYXJhbXMo
KTsKLSAgICB2YXIgbnVtYmVyT2ZCeXRlcyA9IGRlY29kZXIucmVhZFVpbnQzMigpOwotICAgIHZh
ciB2ZXJzaW9uID0gZGVjb2Rlci5yZWFkVWludDMyKCk7Ci0gICAgdmFsLmNsaWVudCA9IGRlY29k
ZXIuZGVjb2RlU3RydWN0KGNvZGVjLkFzc29jaWF0ZWRJbnRlcmZhY2VQdHJJbmZvKTsKLSAgICBy
ZXR1cm4gdmFsOwotICB9OwotCi0gIFdlYlVzYlNlcnZpY2VfU2V0Q2xpZW50X1BhcmFtcy5lbmNv
ZGUgPSBmdW5jdGlvbihlbmNvZGVyLCB2YWwpIHsKLSAgICB2YXIgcGFja2VkOwotICAgIGVuY29k
ZXIud3JpdGVVaW50MzIoV2ViVXNiU2VydmljZV9TZXRDbGllbnRfUGFyYW1zLmVuY29kZWRTaXpl
KTsKLSAgICBlbmNvZGVyLndyaXRlVWludDMyKDApOwotICAgIGVuY29kZXIuZW5jb2RlU3RydWN0
KGNvZGVjLkFzc29jaWF0ZWRJbnRlcmZhY2VQdHJJbmZvLCB2YWwuY2xpZW50KTsKLSAgfTsKLSAg
dmFyIGtXZWJVc2JTZXJ2aWNlX0dldERldmljZXNfTmFtZSA9IDA7Ci0gIHZhciBrV2ViVXNiU2Vy
dmljZV9HZXREZXZpY2VfTmFtZSA9IDE7Ci0gIHZhciBrV2ViVXNiU2VydmljZV9HZXRQZXJtaXNz
aW9uX05hbWUgPSAyOwotICB2YXIga1dlYlVzYlNlcnZpY2VfU2V0Q2xpZW50X05hbWUgPSAzOwot
Ci0gIGZ1bmN0aW9uIFdlYlVzYlNlcnZpY2VQdHIoaGFuZGxlT3JQdHJJbmZvKSB7Ci0gICAgdGhp
cy5wdHIgPSBuZXcgYmluZGluZ3MuSW50ZXJmYWNlUHRyQ29udHJvbGxlcihXZWJVc2JTZXJ2aWNl
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFu
ZGxlT3JQdHJJbmZvKTsKLSAgfQotCi0gIGZ1bmN0aW9uIFdlYlVzYlNlcnZpY2VBc3NvY2lhdGVk
UHRyKGFzc29jaWF0ZWRJbnRlcmZhY2VQdHJJbmZvKSB7Ci0gICAgdGhpcy5wdHIgPSBuZXcgYXNz
b2NpYXRlZEJpbmRpbmdzLkFzc29jaWF0ZWRJbnRlcmZhY2VQdHJDb250cm9sbGVyKAotICAgICAg
ICBXZWJVc2JTZXJ2aWNlLCBhc3NvY2lhdGVkSW50ZXJmYWNlUHRySW5mbyk7Ci0gIH0KLQotICBX
ZWJVc2JTZXJ2aWNlQXNzb2NpYXRlZFB0ci5wcm90b3R5cGUgPQotICAgICAgT2JqZWN0LmNyZWF0
ZShXZWJVc2JTZXJ2aWNlUHRyLnByb3RvdHlwZSk7Ci0gIFdlYlVzYlNlcnZpY2VBc3NvY2lhdGVk
UHRyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9Ci0gICAgICBXZWJVc2JTZXJ2aWNlQXNzb2NpYXRl
ZFB0cjsKLQotICBmdW5jdGlvbiBXZWJVc2JTZXJ2aWNlUHJveHkocmVjZWl2ZXIpIHsKLSAgICB0
aGlzLnJlY2VpdmVyXyA9IHJlY2VpdmVyOwotICB9Ci0gIFdlYlVzYlNlcnZpY2VQdHIucHJvdG90
eXBlLmdldERldmljZXMgPSBmdW5jdGlvbigpIHsKLSAgICByZXR1cm4gV2ViVXNiU2VydmljZVBy
b3h5LnByb3RvdHlwZS5nZXREZXZpY2VzCi0gICAgICAgIC5hcHBseSh0aGlzLnB0ci5nZXRQcm94
eSgpLCBhcmd1bWVudHMpOwotICB9OwotCi0gIFdlYlVzYlNlcnZpY2VQcm94eS5wcm90b3R5cGUu
Z2V0RGV2aWNlcyA9IGZ1bmN0aW9uKCkgewotICAgIHZhciBwYXJhbXNfID0gbmV3IFdlYlVzYlNl
cnZpY2VfR2V0RGV2aWNlc19QYXJhbXMoKTsKLSAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rp
b24ocmVzb2x2ZSwgcmVqZWN0KSB7Ci0gICAgICB2YXIgYnVpbGRlciA9IG5ldyBjb2RlYy5NZXNz
YWdlVjFCdWlsZGVyKAotICAgICAgICAgIGtXZWJVc2JTZXJ2aWNlX0dldERldmljZXNfTmFtZSwK
LSAgICAgICAgICBjb2RlYy5hbGlnbihXZWJVc2JTZXJ2aWNlX0dldERldmljZXNfUGFyYW1zLmVu
Y29kZWRTaXplKSwKLSAgICAgICAgICBjb2RlYy5rTWVzc2FnZUV4cGVjdHNSZXNwb25zZSwgMCk7
Ci0gICAgICBidWlsZGVyLmVuY29kZVN0cnVjdChXZWJVc2JTZXJ2aWNlX0dldERldmljZXNfUGFy
YW1zLCBwYXJhbXNfKTsKLSAgICAgIHZhciBtZXNzYWdlID0gYnVpbGRlci5maW5pc2goKTsKLSAg
ICAgIHRoaXMucmVjZWl2ZXJfLmFjY2VwdEFuZEV4cGVjdFJlc3BvbnNlKG1lc3NhZ2UpLnRoZW4o
ZnVuY3Rpb24obWVzc2FnZSkgewotICAgICAgICB2YXIgcmVhZGVyID0gbmV3IGNvZGVjLk1lc3Nh
Z2VSZWFkZXIobWVzc2FnZSk7Ci0gICAgICAgIHZhciByZXNwb25zZVBhcmFtcyA9Ci0gICAgICAg
ICAgICByZWFkZXIuZGVjb2RlU3RydWN0KFdlYlVzYlNlcnZpY2VfR2V0RGV2aWNlc19SZXNwb25z
ZVBhcmFtcyk7Ci0gICAgICAgIHJlc29sdmUocmVzcG9uc2VQYXJhbXMpOwotICAgICAgfSkuY2F0
Y2goZnVuY3Rpb24ocmVzdWx0KSB7Ci0gICAgICAgIHJlamVjdChFcnJvcigiQ29ubmVjdGlvbiBl
cnJvcjogIiArIHJlc3VsdCkpOwotICAgICAgfSk7Ci0gICAgfS5iaW5kKHRoaXMpKTsKLSAgfTsK
LSAgV2ViVXNiU2VydmljZVB0ci5wcm90b3R5cGUuZ2V0RGV2aWNlID0gZnVuY3Rpb24oKSB7Ci0g
ICAgcmV0dXJuIFdlYlVzYlNlcnZpY2VQcm94eS5wcm90b3R5cGUuZ2V0RGV2aWNlCi0gICAgICAg
IC5hcHBseSh0aGlzLnB0ci5nZXRQcm94eSgpLCBhcmd1bWVudHMpOwotICB9OwotCi0gIFdlYlVz
YlNlcnZpY2VQcm94eS5wcm90b3R5cGUuZ2V0RGV2aWNlID0gZnVuY3Rpb24oZ3VpZCwgZGV2aWNl
UmVxdWVzdGQpIHsKLSAgICB2YXIgcGFyYW1zXyA9IG5ldyBXZWJVc2JTZXJ2aWNlX0dldERldmlj
ZV9QYXJhbXMoKTsKLSAgICBwYXJhbXNfLmd1aWQgPSBndWlkOwotICAgIHBhcmFtc18uZGV2aWNl
UmVxdWVzdGQgPSBkZXZpY2VSZXF1ZXN0ZDsKLSAgICB2YXIgYnVpbGRlciA9IG5ldyBjb2RlYy5N
ZXNzYWdlVjBCdWlsZGVyKAotICAgICAgICBrV2ViVXNiU2VydmljZV9HZXREZXZpY2VfTmFtZSwK
LSAgICAgICAgY29kZWMuYWxpZ24oV2ViVXNiU2VydmljZV9HZXREZXZpY2VfUGFyYW1zLmVuY29k
ZWRTaXplKSk7Ci0gICAgYnVpbGRlci5lbmNvZGVTdHJ1Y3QoV2ViVXNiU2VydmljZV9HZXREZXZp
Y2VfUGFyYW1zLCBwYXJhbXNfKTsKLSAgICB2YXIgbWVzc2FnZSA9IGJ1aWxkZXIuZmluaXNoKCk7
Ci0gICAgdGhpcy5yZWNlaXZlcl8uYWNjZXB0KG1lc3NhZ2UpOwotICB9OwotICBXZWJVc2JTZXJ2
aWNlUHRyLnByb3RvdHlwZS5nZXRQZXJtaXNzaW9uID0gZnVuY3Rpb24oKSB7Ci0gICAgcmV0dXJu
IFdlYlVzYlNlcnZpY2VQcm94eS5wcm90b3R5cGUuZ2V0UGVybWlzc2lvbgotICAgICAgICAuYXBw
bHkodGhpcy5wdHIuZ2V0UHJveHkoKSwgYXJndW1lbnRzKTsKLSAgfTsKLQotICBXZWJVc2JTZXJ2
aWNlUHJveHkucHJvdG90eXBlLmdldFBlcm1pc3Npb24gPSBmdW5jdGlvbihkZXZpY2VGaWx0ZXJz
KSB7Ci0gICAgdmFyIHBhcmFtc18gPSBuZXcgV2ViVXNiU2VydmljZV9HZXRQZXJtaXNzaW9uX1Bh
cmFtcygpOwotICAgIHBhcmFtc18uZGV2aWNlRmlsdGVycyA9IGRldmljZUZpbHRlcnM7Ci0gICAg
cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkgewotICAgICAgdmFy
IGJ1aWxkZXIgPSBuZXcgY29kZWMuTWVzc2FnZVYxQnVpbGRlcigKLSAgICAgICAgICBrV2ViVXNi
U2VydmljZV9HZXRQZXJtaXNzaW9uX05hbWUsCi0gICAgICAgICAgY29kZWMuYWxpZ24oV2ViVXNi
U2VydmljZV9HZXRQZXJtaXNzaW9uX1BhcmFtcy5lbmNvZGVkU2l6ZSksCi0gICAgICAgICAgY29k
ZWMua01lc3NhZ2VFeHBlY3RzUmVzcG9uc2UsIDApOwotICAgICAgYnVpbGRlci5lbmNvZGVTdHJ1
Y3QoV2ViVXNiU2VydmljZV9HZXRQZXJtaXNzaW9uX1BhcmFtcywgcGFyYW1zXyk7Ci0gICAgICB2
YXIgbWVzc2FnZSA9IGJ1aWxkZXIuZmluaXNoKCk7Ci0gICAgICB0aGlzLnJlY2VpdmVyXy5hY2Nl
cHRBbmRFeHBlY3RSZXNwb25zZShtZXNzYWdlKS50aGVuKGZ1bmN0aW9uKG1lc3NhZ2UpIHsKLSAg
ICAgICAgdmFyIHJlYWRlciA9IG5ldyBjb2RlYy5NZXNzYWdlUmVhZGVyKG1lc3NhZ2UpOwotICAg
ICAgICB2YXIgcmVzcG9uc2VQYXJhbXMgPQotICAgICAgICAgICAgcmVhZGVyLmRlY29kZVN0cnVj
dChXZWJVc2JTZXJ2aWNlX0dldFBlcm1pc3Npb25fUmVzcG9uc2VQYXJhbXMpOwotICAgICAgICBy
ZXNvbHZlKHJlc3BvbnNlUGFyYW1zKTsKLSAgICAgIH0pLmNhdGNoKGZ1bmN0aW9uKHJlc3VsdCkg
ewotICAgICAgICByZWplY3QoRXJyb3IoIkNvbm5lY3Rpb24gZXJyb3I6ICIgKyByZXN1bHQpKTsK
LSAgICAgIH0pOwotICAgIH0uYmluZCh0aGlzKSk7Ci0gIH07Ci0gIFdlYlVzYlNlcnZpY2VQdHIu
cHJvdG90eXBlLnNldENsaWVudCA9IGZ1bmN0aW9uKCkgewotICAgIHJldHVybiBXZWJVc2JTZXJ2
aWNlUHJveHkucHJvdG90eXBlLnNldENsaWVudAotICAgICAgICAuYXBwbHkodGhpcy5wdHIuZ2V0
UHJveHkoKSwgYXJndW1lbnRzKTsKLSAgfTsKLQotICBXZWJVc2JTZXJ2aWNlUHJveHkucHJvdG90
eXBlLnNldENsaWVudCA9IGZ1bmN0aW9uKGNsaWVudCkgewotICAgIHZhciBwYXJhbXNfID0gbmV3
IFdlYlVzYlNlcnZpY2VfU2V0Q2xpZW50X1BhcmFtcygpOwotICAgIHBhcmFtc18uY2xpZW50ID0g
Y2xpZW50OwotICAgIHZhciBidWlsZGVyID0gbmV3IGNvZGVjLk1lc3NhZ2VWMkJ1aWxkZXIoCi0g
ICAgICAgIGtXZWJVc2JTZXJ2aWNlX1NldENsaWVudF9OYW1lLAotICAgICAgICBjb2RlYy5hbGln
bihXZWJVc2JTZXJ2aWNlX1NldENsaWVudF9QYXJhbXMuZW5jb2RlZFNpemUpKTsKLSAgICBidWls
ZGVyLnNldFBheWxvYWQoV2ViVXNiU2VydmljZV9TZXRDbGllbnRfUGFyYW1zLCBwYXJhbXNfKTsK
LSAgICB2YXIgbWVzc2FnZSA9IGJ1aWxkZXIuZmluaXNoKCk7Ci0gICAgdGhpcy5yZWNlaXZlcl8u
YWNjZXB0KG1lc3NhZ2UpOwotICB9OwotCi0gIGZ1bmN0aW9uIFdlYlVzYlNlcnZpY2VTdHViKGRl
bGVnYXRlKSB7Ci0gICAgdGhpcy5kZWxlZ2F0ZV8gPSBkZWxlZ2F0ZTsKLSAgfQotICBXZWJVc2JT
ZXJ2aWNlU3R1Yi5wcm90b3R5cGUuZ2V0RGV2aWNlcyA9IGZ1bmN0aW9uKCkgewotICAgIHJldHVy
biB0aGlzLmRlbGVnYXRlXyAmJiB0aGlzLmRlbGVnYXRlXy5nZXREZXZpY2VzICYmIHRoaXMuZGVs
ZWdhdGVfLmdldERldmljZXMoKTsKLSAgfQotICBXZWJVc2JTZXJ2aWNlU3R1Yi5wcm90b3R5cGUu
Z2V0RGV2aWNlID0gZnVuY3Rpb24oZ3VpZCwgZGV2aWNlUmVxdWVzdGQpIHsKLSAgICByZXR1cm4g
dGhpcy5kZWxlZ2F0ZV8gJiYgdGhpcy5kZWxlZ2F0ZV8uZ2V0RGV2aWNlICYmIHRoaXMuZGVsZWdh
dGVfLmdldERldmljZShndWlkLCBkZXZpY2VSZXF1ZXN0ZCk7Ci0gIH0KLSAgV2ViVXNiU2Vydmlj
ZVN0dWIucHJvdG90eXBlLmdldFBlcm1pc3Npb24gPSBmdW5jdGlvbihkZXZpY2VGaWx0ZXJzKSB7
Ci0gICAgcmV0dXJuIHRoaXMuZGVsZWdhdGVfICYmIHRoaXMuZGVsZWdhdGVfLmdldFBlcm1pc3Np
b24gJiYgdGhpcy5kZWxlZ2F0ZV8uZ2V0UGVybWlzc2lvbihkZXZpY2VGaWx0ZXJzKTsKLSAgfQot
ICBXZWJVc2JTZXJ2aWNlU3R1Yi5wcm90b3R5cGUuc2V0Q2xpZW50ID0gZnVuY3Rpb24oY2xpZW50
KSB7Ci0gICAgcmV0dXJuIHRoaXMuZGVsZWdhdGVfICYmIHRoaXMuZGVsZWdhdGVfLnNldENsaWVu
dCAmJiB0aGlzLmRlbGVnYXRlXy5zZXRDbGllbnQoY2xpZW50KTsKLSAgfQotCi0gIFdlYlVzYlNl
cnZpY2VTdHViLnByb3RvdHlwZS5hY2NlcHQgPSBmdW5jdGlvbihtZXNzYWdlKSB7Ci0gICAgdmFy
IHJlYWRlciA9IG5ldyBjb2RlYy5NZXNzYWdlUmVhZGVyKG1lc3NhZ2UpOwotICAgIHN3aXRjaCAo
cmVhZGVyLm1lc3NhZ2VOYW1lKSB7Ci0gICAgY2FzZSBrV2ViVXNiU2VydmljZV9HZXREZXZpY2Vf
TmFtZToKLSAgICAgIHZhciBwYXJhbXMgPSByZWFkZXIuZGVjb2RlU3RydWN0KFdlYlVzYlNlcnZp
Y2VfR2V0RGV2aWNlX1BhcmFtcyk7Ci0gICAgICB0aGlzLmdldERldmljZShwYXJhbXMuZ3VpZCwg
cGFyYW1zLmRldmljZVJlcXVlc3RkKTsKLSAgICAgIHJldHVybiB0cnVlOwotICAgIGNhc2Uga1dl
YlVzYlNlcnZpY2VfU2V0Q2xpZW50X05hbWU6Ci0gICAgICB2YXIgcGFyYW1zID0gcmVhZGVyLmRl
Y29kZVN0cnVjdChXZWJVc2JTZXJ2aWNlX1NldENsaWVudF9QYXJhbXMpOwotICAgICAgdGhpcy5z
ZXRDbGllbnQocGFyYW1zLmNsaWVudCk7Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICBkZWZhdWx0
OgotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgfTsKLQotICBXZWJVc2JTZXJ2aWNlU3R1
Yi5wcm90b3R5cGUuYWNjZXB0V2l0aFJlc3BvbmRlciA9Ci0gICAgICBmdW5jdGlvbihtZXNzYWdl
LCByZXNwb25kZXIpIHsKLSAgICB2YXIgcmVhZGVyID0gbmV3IGNvZGVjLk1lc3NhZ2VSZWFkZXIo
bWVzc2FnZSk7Ci0gICAgc3dpdGNoIChyZWFkZXIubWVzc2FnZU5hbWUpIHsKLSAgICBjYXNlIGtX
ZWJVc2JTZXJ2aWNlX0dldERldmljZXNfTmFtZToKLSAgICAgIHZhciBwYXJhbXMgPSByZWFkZXIu
ZGVjb2RlU3RydWN0KFdlYlVzYlNlcnZpY2VfR2V0RGV2aWNlc19QYXJhbXMpOwotICAgICAgdGhp
cy5nZXREZXZpY2VzKCkudGhlbihmdW5jdGlvbihyZXNwb25zZSkgewotICAgICAgICB2YXIgcmVz
cG9uc2VQYXJhbXMgPQotICAgICAgICAgICAgbmV3IFdlYlVzYlNlcnZpY2VfR2V0RGV2aWNlc19S
ZXNwb25zZVBhcmFtcygpOwotICAgICAgICByZXNwb25zZVBhcmFtcy5yZXN1bHRzID0gcmVzcG9u
c2UucmVzdWx0czsKLSAgICAgICAgdmFyIGJ1aWxkZXIgPSBuZXcgY29kZWMuTWVzc2FnZVYxQnVp
bGRlcigKLSAgICAgICAgICAgIGtXZWJVc2JTZXJ2aWNlX0dldERldmljZXNfTmFtZSwKLSAgICAg
ICAgICAgIGNvZGVjLmFsaWduKFdlYlVzYlNlcnZpY2VfR2V0RGV2aWNlc19SZXNwb25zZVBhcmFt
cy5lbmNvZGVkU2l6ZSksCi0gICAgICAgICAgICBjb2RlYy5rTWVzc2FnZUlzUmVzcG9uc2UsIHJl
YWRlci5yZXF1ZXN0SUQpOwotICAgICAgICBidWlsZGVyLmVuY29kZVN0cnVjdChXZWJVc2JTZXJ2
aWNlX0dldERldmljZXNfUmVzcG9uc2VQYXJhbXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHJlc3BvbnNlUGFyYW1zKTsKLSAgICAgICAgdmFyIG1lc3NhZ2UgPSBidWlsZGVyLmZpbmlz
aCgpOwotICAgICAgICByZXNwb25kZXIuYWNjZXB0KG1lc3NhZ2UpOwotICAgICAgfSk7Ci0gICAg
ICByZXR1cm4gdHJ1ZTsKLSAgICBjYXNlIGtXZWJVc2JTZXJ2aWNlX0dldFBlcm1pc3Npb25fTmFt
ZToKLSAgICAgIHZhciBwYXJhbXMgPSByZWFkZXIuZGVjb2RlU3RydWN0KFdlYlVzYlNlcnZpY2Vf
R2V0UGVybWlzc2lvbl9QYXJhbXMpOwotICAgICAgdGhpcy5nZXRQZXJtaXNzaW9uKHBhcmFtcy5k
ZXZpY2VGaWx0ZXJzKS50aGVuKGZ1bmN0aW9uKHJlc3BvbnNlKSB7Ci0gICAgICAgIHZhciByZXNw
b25zZVBhcmFtcyA9Ci0gICAgICAgICAgICBuZXcgV2ViVXNiU2VydmljZV9HZXRQZXJtaXNzaW9u
X1Jlc3BvbnNlUGFyYW1zKCk7Ci0gICAgICAgIHJlc3BvbnNlUGFyYW1zLnJlc3VsdCA9IHJlc3Bv
bnNlLnJlc3VsdDsKLSAgICAgICAgdmFyIGJ1aWxkZXIgPSBuZXcgY29kZWMuTWVzc2FnZVYxQnVp
bGRlcigKLSAgICAgICAgICAgIGtXZWJVc2JTZXJ2aWNlX0dldFBlcm1pc3Npb25fTmFtZSwKLSAg
ICAgICAgICAgIGNvZGVjLmFsaWduKFdlYlVzYlNlcnZpY2VfR2V0UGVybWlzc2lvbl9SZXNwb25z
ZVBhcmFtcy5lbmNvZGVkU2l6ZSksCi0gICAgICAgICAgICBjb2RlYy5rTWVzc2FnZUlzUmVzcG9u
c2UsIHJlYWRlci5yZXF1ZXN0SUQpOwotICAgICAgICBidWlsZGVyLmVuY29kZVN0cnVjdChXZWJV
c2JTZXJ2aWNlX0dldFBlcm1pc3Npb25fUmVzcG9uc2VQYXJhbXMsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHJlc3BvbnNlUGFyYW1zKTsKLSAgICAgICAgdmFyIG1lc3NhZ2UgPSBidWls
ZGVyLmZpbmlzaCgpOwotICAgICAgICByZXNwb25kZXIuYWNjZXB0KG1lc3NhZ2UpOwotICAgICAg
fSk7Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICBkZWZhdWx0OgotICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIH0KLSAgfTsKLQotICBmdW5jdGlvbiB2YWxpZGF0ZVdlYlVzYlNlcnZpY2VSZXF1ZXN0
KG1lc3NhZ2VWYWxpZGF0b3IpIHsKLSAgICB2YXIgbWVzc2FnZSA9IG1lc3NhZ2VWYWxpZGF0b3Iu
bWVzc2FnZTsKLSAgICB2YXIgcGFyYW1zQ2xhc3MgPSBudWxsOwotICAgIHN3aXRjaCAobWVzc2Fn
ZS5nZXROYW1lKCkpIHsKLSAgICAgIGNhc2Uga1dlYlVzYlNlcnZpY2VfR2V0RGV2aWNlc19OYW1l
OgotICAgICAgICBpZiAobWVzc2FnZS5leHBlY3RzUmVzcG9uc2UoKSkKLSAgICAgICAgICBwYXJh
bXNDbGFzcyA9IFdlYlVzYlNlcnZpY2VfR2V0RGV2aWNlc19QYXJhbXM7Ci0gICAgICBicmVhazsK
LSAgICAgIGNhc2Uga1dlYlVzYlNlcnZpY2VfR2V0RGV2aWNlX05hbWU6Ci0gICAgICAgIGlmICgh
bWVzc2FnZS5leHBlY3RzUmVzcG9uc2UoKSAmJiAhbWVzc2FnZS5pc1Jlc3BvbnNlKCkpCi0gICAg
ICAgICAgcGFyYW1zQ2xhc3MgPSBXZWJVc2JTZXJ2aWNlX0dldERldmljZV9QYXJhbXM7Ci0gICAg
ICBicmVhazsKLSAgICAgIGNhc2Uga1dlYlVzYlNlcnZpY2VfR2V0UGVybWlzc2lvbl9OYW1lOgot
ICAgICAgICBpZiAobWVzc2FnZS5leHBlY3RzUmVzcG9uc2UoKSkKLSAgICAgICAgICBwYXJhbXND
bGFzcyA9IFdlYlVzYlNlcnZpY2VfR2V0UGVybWlzc2lvbl9QYXJhbXM7Ci0gICAgICBicmVhazsK
LSAgICAgIGNhc2Uga1dlYlVzYlNlcnZpY2VfU2V0Q2xpZW50X05hbWU6Ci0gICAgICAgIGlmICgh
bWVzc2FnZS5leHBlY3RzUmVzcG9uc2UoKSAmJiAhbWVzc2FnZS5pc1Jlc3BvbnNlKCkpCi0gICAg
ICAgICAgcGFyYW1zQ2xhc3MgPSBXZWJVc2JTZXJ2aWNlX1NldENsaWVudF9QYXJhbXM7Ci0gICAg
ICBicmVhazsKLSAgICB9Ci0gICAgaWYgKHBhcmFtc0NsYXNzID09PSBudWxsKQotICAgICAgcmV0
dXJuIHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORTsKLSAgICByZXR1cm4gcGFyYW1zQ2xh
c3MudmFsaWRhdGUobWVzc2FnZVZhbGlkYXRvciwgbWVzc2FnZVZhbGlkYXRvci5tZXNzYWdlLmdl
dEhlYWRlck51bUJ5dGVzKCkpOwotICB9Ci0KLSAgZnVuY3Rpb24gdmFsaWRhdGVXZWJVc2JTZXJ2
aWNlUmVzcG9uc2UobWVzc2FnZVZhbGlkYXRvcikgewotICAgdmFyIG1lc3NhZ2UgPSBtZXNzYWdl
VmFsaWRhdG9yLm1lc3NhZ2U7Ci0gICB2YXIgcGFyYW1zQ2xhc3MgPSBudWxsOwotICAgc3dpdGNo
IChtZXNzYWdlLmdldE5hbWUoKSkgewotICAgICAgY2FzZSBrV2ViVXNiU2VydmljZV9HZXREZXZp
Y2VzX05hbWU6Ci0gICAgICAgIGlmIChtZXNzYWdlLmlzUmVzcG9uc2UoKSkKLSAgICAgICAgICBw
YXJhbXNDbGFzcyA9IFdlYlVzYlNlcnZpY2VfR2V0RGV2aWNlc19SZXNwb25zZVBhcmFtczsKLSAg
ICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIGtXZWJVc2JTZXJ2aWNlX0dldFBlcm1pc3Npb25fTmFt
ZToKLSAgICAgICAgaWYgKG1lc3NhZ2UuaXNSZXNwb25zZSgpKQotICAgICAgICAgIHBhcmFtc0Ns
YXNzID0gV2ViVXNiU2VydmljZV9HZXRQZXJtaXNzaW9uX1Jlc3BvbnNlUGFyYW1zOwotICAgICAg
ICBicmVhazsKLSAgICB9Ci0gICAgaWYgKHBhcmFtc0NsYXNzID09PSBudWxsKQotICAgICAgcmV0
dXJuIHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORTsKLSAgICByZXR1cm4gcGFyYW1zQ2xh
c3MudmFsaWRhdGUobWVzc2FnZVZhbGlkYXRvciwgbWVzc2FnZVZhbGlkYXRvci5tZXNzYWdlLmdl
dEhlYWRlck51bUJ5dGVzKCkpOwotICB9Ci0KLSAgdmFyIFdlYlVzYlNlcnZpY2UgPSB7Ci0gICAg
bmFtZTogJ2JsaW5rLm1vam9tLldlYlVzYlNlcnZpY2UnLAotICAgIGtWZXJzaW9uOiAwLAotICAg
IHB0ckNsYXNzOiBXZWJVc2JTZXJ2aWNlUHRyLAotICAgIHByb3h5Q2xhc3M6IFdlYlVzYlNlcnZp
Y2VQcm94eSwKLSAgICBzdHViQ2xhc3M6IFdlYlVzYlNlcnZpY2VTdHViLAotICAgIHZhbGlkYXRl
UmVxdWVzdDogdmFsaWRhdGVXZWJVc2JTZXJ2aWNlUmVxdWVzdCwKLSAgICB2YWxpZGF0ZVJlc3Bv
bnNlOiB2YWxpZGF0ZVdlYlVzYlNlcnZpY2VSZXNwb25zZSwKLSAgfTsKLSAgV2ViVXNiU2Vydmlj
ZVN0dWIucHJvdG90eXBlLnZhbGlkYXRvciA9IHZhbGlkYXRlV2ViVXNiU2VydmljZVJlcXVlc3Q7
Ci0gIFdlYlVzYlNlcnZpY2VQcm94eS5wcm90b3R5cGUudmFsaWRhdG9yID0gdmFsaWRhdGVXZWJV
c2JTZXJ2aWNlUmVzcG9uc2U7Ci0gIGV4cG9ydHMuV2ViVXNiU2VydmljZSA9IFdlYlVzYlNlcnZp
Y2U7Ci0gIGV4cG9ydHMuV2ViVXNiU2VydmljZVB0ciA9IFdlYlVzYlNlcnZpY2VQdHI7Ci0gIGV4
cG9ydHMuV2ViVXNiU2VydmljZUFzc29jaWF0ZWRQdHIgPSBXZWJVc2JTZXJ2aWNlQXNzb2NpYXRl
ZFB0cjsKLX0pKCk7ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvTGF5
b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21p
dW0vd2ViX3VzYl9zZXJ2aWNlLm1vam9tLmpzLmhlYWRlcnMgYi9MYXlvdXRUZXN0cy9pbXBvcnRl
ZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS93ZWJfdXNiX3NlcnZp
Y2UubW9qb20uanMuaGVhZGVycwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjgwNWMz
MjNkZjVhOTc1MjMxNjQ4YjgzMGUzM2NlMTgzYzNjYmJkMy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBs
YXRmb3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS93ZWJfdXNiX3NlcnZpY2UubW9qb20uanMu
aGVhZGVycworKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLUNvbnRlbnQtVHlwZTogdGV4dC9q
YXZhc2NyaXB0OyBjaGFyc2V0PXV0Zi04CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbXBvcnRl
ZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS93ZWJ1c2ItY2hpbGQt
dGVzdC5qcyBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVz
b3VyY2VzL2Nocm9taXVtL3dlYnVzYi1jaGlsZC10ZXN0LmpzCmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCBhZGQwNGZhNTgyNTBkNThkNTY3NTlkMjQyNjYzYTY1MTBkMzA2MDkwLi4wMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL0xheW91dFRlc3RzL2lt
cG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL3dlYnVzYi1j
aGlsZC10ZXN0LmpzCisrKyAvZGV2L251bGwKQEAgLTEsNDAgKzAsMCBAQAotJ3VzZSBzdHJpY3Qn
OwotCi0vLyBUaGlzIHBvbHlmaWxsIHByZXBhcmVzIGEgY2hpbGQgY29udGV4dCB0byBiZSBhdHRh
Y2hlZCB0byBhIHBhcmVudCBjb250ZXh0LgotLy8gVGhlIHBhcmVudCBtdXN0IGNhbGwgbmF2aWdh
dG9yLnVzYi50ZXN0LmF0dGFjaFRvQ29udGV4dCgpIHRvIGF0dGFjaCB0byB0aGUKLS8vIGNoaWxk
IGNvbnRleHQuCi0oKCkgPT4gewotICBpZiAodGhpcy5jb25zdHJ1Y3Rvci5uYW1lID09PSAnRGVk
aWNhdGVkV29ya2VyR2xvYmFsU2NvcGUnIHx8Ci0gICAgICB0aGlzICE9PSB3aW5kb3cudG9wKSB7
Ci0KLSAgICAvLyBSdW4gQ2hyb21pdW0gc3BlY2lmaWMgc2V0IHVwIGNvZGUuCi0gICAgaWYgKHR5
cGVvZiBNb2pvSW50ZXJmYWNlSW50ZXJjZXB0b3IgIT09ICd1bmRlZmluZWQnKSB7Ci0gICAgICBs
ZXQgbWVzc2FnZUNoYW5uZWwgPSBuZXcgTWVzc2FnZUNoYW5uZWwoKTsKLSAgICAgIG1lc3NhZ2VD
aGFubmVsLnBvcnQxLm9ubWVzc2FnZSA9IGFzeW5jIChtZXNzYWdlRXZlbnQpID0+IHsKLSAgICAg
ICAgaWYgKG1lc3NhZ2VFdmVudC5kYXRhLnR5cGUgPT09ICdBdHRhY2gnKSB7Ci0gICAgICAgICAg
bWVzc2FnZUV2ZW50LmRhdGEuaW50ZXJmYWNlcy5mb3JFYWNoKGludGVyZmFjZU5hbWUgPT4gewot
ICAgICAgICAgICAgbGV0IGludGVyZmFjZUludGVyY2VwdG9yID0KLSAgICAgICAgICAgICAgICBu
ZXcgTW9qb0ludGVyZmFjZUludGVyY2VwdG9yKGludGVyZmFjZU5hbWUpOwotICAgICAgICAgICAg
aW50ZXJmYWNlSW50ZXJjZXB0b3Iub25pbnRlcmZhY2VyZXF1ZXN0ID0KLSAgICAgICAgICAgICAg
ZSA9PiBtZXNzYWdlQ2hhbm5lbC5wb3J0MS5wb3N0TWVzc2FnZSh7Ci0gICAgICAgICAgICAgICAg
dHlwZTogaW50ZXJmYWNlTmFtZSwKLSAgICAgICAgICAgICAgICBoYW5kbGU6IGUuaGFuZGxlCi0g
ICAgICAgICAgICAgIH0sIFtlLmhhbmRsZV0pOwotICAgICAgICAgICAgaW50ZXJmYWNlSW50ZXJj
ZXB0b3Iuc3RhcnQoKTsKLSAgICAgICAgICB9KTsKLQotICAgICAgICAgIC8vIFdhaXQgZm9yIGEg
Y2FsbCB0byBHZXREZXZpY2VzKCkgdG8gZW5zdXJlIHRoYXQgdGhlIGludGVyZmFjZQotICAgICAg
ICAgIC8vIGhhbmRsZXMgYXJlIGZvcndhcmRlZCB0byB0aGUgcGFyZW50IGNvbnRleHQuCi0gICAg
ICAgICAgYXdhaXQgbmF2aWdhdG9yLnVzYi5nZXREZXZpY2VzKCk7Ci0gICAgICAgICAgbWVzc2Fn
ZUNoYW5uZWwucG9ydDEucG9zdE1lc3NhZ2UoeyB0eXBlOiAnQ29tcGxldGUnIH0pOwotICAgICAg
ICB9Ci0gICAgICB9OwotCi0gICAgICBsZXQgbWVzc2FnZSA9IHsgdHlwZTogJ1JlYWR5Rm9yQXR0
YWNobWVudCcsIHBvcnQ6IG1lc3NhZ2VDaGFubmVsLnBvcnQyIH07Ci0gICAgICBpZiAodHlwZW9m
IFdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpCi0gICAgICAgIHBhcmVudC5wb3N0TWVzc2FnZShtZXNz
YWdlLCAnKicsIFttZXNzYWdlQ2hhbm5lbC5wb3J0Ml0pOwotICAgICAgZWxzZQotICAgICAgICBw
b3N0TWVzc2FnZShtZXNzYWdlLCBbbWVzc2FnZUNoYW5uZWwucG9ydDJdKTsKLSAgICB9Ci0gIH0K
LX0pKCk7CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3Jt
LXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS93ZWJ1c2ItY2hpbGQtdGVzdC5qcy5oZWFkZXJzIGIv
TGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hy
b21pdW0vd2VidXNiLWNoaWxkLXRlc3QuanMuaGVhZGVycwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggNjgwNWMzMjNkZjVhOTc1MjMxNjQ4YjgzMGUzM2NlMTgzYzNjYmJkMy4uMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9MYXlvdXRUZXN0cy9pbXBv
cnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS93ZWJ1c2ItY2hp
bGQtdGVzdC5qcy5oZWFkZXJzCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotQ29udGVudC1U
eXBlOiB0ZXh0L2phdmFzY3JpcHQ7IGNoYXJzZXQ9dXRmLTgKZGlmZiAtLWdpdCBhL0xheW91dFRl
c3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL3dl
YnVzYi10ZXN0LmpzIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0
cy9yZXNvdXJjZXMvY2hyb21pdW0vd2VidXNiLXRlc3QuanMKZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDhiY2NmZDFmNzI0Y2M2MjI2MTllMDI0Yjk1YzcwNjhiMjg5OWZmMDcuLjAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvTGF5b3V0VGVzdHMvaW1w
b3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vd2VidXNiLXRl
c3QuanMKKysrIC9kZXYvbnVsbApAQCAtMSw1NTEgKzAsMCBAQAotJ3VzZSBzdHJpY3QnOwotCi0v
LyBUaGlzIHBvbHlmaWxsIGxpYnJhcnkgaW1wbGVtZW50cyB0aGUgV2ViVVNCIFRlc3QgQVBJIGFz
IHNwZWNpZmllZCBoZXJlOgotLy8gaHR0cHM6Ly93aWNnLmdpdGh1Yi5pby93ZWJ1c2IvdGVzdC8K
LQotKCgpID0+IHsKLQotLy8gVGhlc2UgdmFyaWFibGVzIGFyZSBsb2dpY2FsbHkgbWVtYmVycyBv
ZiB0aGUgVVNCVGVzdCBjbGFzcyBidXQgYXJlIGRlZmluZWQKLS8vIGhlcmUgdG8gaGlkZSB0aGVt
IGZyb20gYmVpbmcgdmlzaWJsZSBhcyBmaWVsZHMgb2YgbmF2aWdhdG9yLnVzYi50ZXN0LgotbGV0
IGludGVybmFsID0gewotICBpbnRpYWxpemVkOiBmYWxzZSwKLQotICB3ZWJVc2JTZXJ2aWNlOiBu
dWxsLAotICB3ZWJVc2JTZXJ2aWNlSW50ZXJjZXB0b3I6IG51bGwsCi0KLSAgbWVzc2FnZVBvcnQ6
IG51bGwsCi19OwotCi1mdW5jdGlvbiBnZXRNZXNzYWdlUG9ydCh0YXJnZXQpIHsKLSAgcmV0dXJu
IG5ldyBQcm9taXNlKHJlc29sdmUgPT4gewotICAgIHRhcmdldC5hZGRFdmVudExpc3RlbmVyKCdt
ZXNzYWdlJywgbWVzc2FnZUV2ZW50ID0+IHsKLSAgICAgIGlmIChtZXNzYWdlRXZlbnQuZGF0YS50
eXBlID09PSAnUmVhZHlGb3JBdHRhY2htZW50JykgewotICAgICAgICBpZiAoaW50ZXJuYWwubWVz
c2FnZVBvcnQgPT09IG51bGwpIHsKLSAgICAgICAgICBpbnRlcm5hbC5tZXNzYWdlUG9ydCA9IG1l
c3NhZ2VFdmVudC5kYXRhLnBvcnQ7Ci0gICAgICAgIH0KLSAgICAgICAgcmVzb2x2ZSgpOwotICAg
ICAgfQotICAgIH0sIHtvbmNlOiB0cnVlfSk7Ci0gIH0pOwotfQotCi0vLyBDb252ZXJ0cyBhbiBF
Q01BU2NyaXB0IFN0cmluZyBvYmplY3QgdG8gYW4gaW5zdGFuY2Ugb2YKLS8vIG1vam9fYmFzZS5t
b2pvbS5TdHJpbmcxNi4KLWZ1bmN0aW9uIG1vam9TdHJpbmcxNlRvU3RyaW5nKHN0cmluZzE2KSB7
Ci0gIHJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KG51bGwsIHN0cmluZzE2LmRhdGEp
OwotfQotCi0vLyBDb252ZXJ0cyBhbiBpbnN0YW5jZSBvZiBtb2pvX2Jhc2UubW9qb20uU3RyaW5n
MTYgdG8gYW4gRUNNQVNjcmlwdCBTdHJpbmcuCi1mdW5jdGlvbiBzdHJpbmdUb01vam9TdHJpbmcx
NihzdHJpbmcpIHsKLSAgbGV0IGFycmF5ID0gbmV3IEFycmF5KHN0cmluZy5sZW5ndGgpOwotICBm
b3IgKHZhciBpID0gMDsgaSA8IHN0cmluZy5sZW5ndGg7ICsraSkgewotICAgIGFycmF5W2ldID0g
c3RyaW5nLmNoYXJDb2RlQXQoaSk7Ci0gIH0KLSAgcmV0dXJuIHsgZGF0YTogYXJyYXkgfQotfQot
Ci1mdW5jdGlvbiBmYWtlRGV2aWNlSW5pdFRvRGV2aWNlSW5mbyhndWlkLCBpbml0KSB7Ci0gIGxl
dCBkZXZpY2VJbmZvID0gewotICAgIGd1aWQ6IGd1aWQgKyAiIiwKLSAgICB1c2JWZXJzaW9uTWFq
b3I6IGluaXQudXNiVmVyc2lvbk1ham9yLAotICAgIHVzYlZlcnNpb25NaW5vcjogaW5pdC51c2JW
ZXJzaW9uTWlub3IsCi0gICAgdXNiVmVyc2lvblN1Ym1pbm9yOiBpbml0LnVzYlZlcnNpb25TdWJt
aW5vciwKLSAgICBjbGFzc0NvZGU6IGluaXQuZGV2aWNlQ2xhc3MsCi0gICAgc3ViY2xhc3NDb2Rl
OiBpbml0LmRldmljZVN1YmNsYXNzLAotICAgIHByb3RvY29sQ29kZTogaW5pdC5kZXZpY2VQcm90
b2NvbCwKLSAgICB2ZW5kb3JJZDogaW5pdC52ZW5kb3JJZCwKLSAgICBwcm9kdWN0SWQ6IGluaXQu
cHJvZHVjdElkLAotICAgIGRldmljZVZlcnNpb25NYWpvcjogaW5pdC5kZXZpY2VWZXJzaW9uTWFq
b3IsCi0gICAgZGV2aWNlVmVyc2lvbk1pbm9yOiBpbml0LmRldmljZVZlcnNpb25NaW5vciwKLSAg
ICBkZXZpY2VWZXJzaW9uU3VibWlub3I6IGluaXQuZGV2aWNlVmVyc2lvblN1Ym1pbm9yLAotICAg
IG1hbnVmYWN0dXJlck5hbWU6IHN0cmluZ1RvTW9qb1N0cmluZzE2KGluaXQubWFudWZhY3R1cmVy
TmFtZSksCi0gICAgcHJvZHVjdE5hbWU6IHN0cmluZ1RvTW9qb1N0cmluZzE2KGluaXQucHJvZHVj
dE5hbWUpLAotICAgIHNlcmlhbE51bWJlcjogc3RyaW5nVG9Nb2pvU3RyaW5nMTYoaW5pdC5zZXJp
YWxOdW1iZXIpLAotICAgIGFjdGl2ZUNvbmZpZ3VyYXRpb246IGluaXQuYWN0aXZlQ29uZmlndXJh
dGlvblZhbHVlLAotICAgIGNvbmZpZ3VyYXRpb25zOiBbXQotICB9OwotICBpbml0LmNvbmZpZ3Vy
YXRpb25zLmZvckVhY2goY29uZmlnID0+IHsKLSAgICB2YXIgY29uZmlnSW5mbyA9IHsKLSAgICAg
IGNvbmZpZ3VyYXRpb25WYWx1ZTogY29uZmlnLmNvbmZpZ3VyYXRpb25WYWx1ZSwKLSAgICAgIGNv
bmZpZ3VyYXRpb25OYW1lOiBzdHJpbmdUb01vam9TdHJpbmcxNihjb25maWcuY29uZmlndXJhdGlv
bk5hbWUpLAotICAgICAgc2VsZlBvd2VyZWQ6IGZhbHNlLAotICAgICAgcmVtb3RlV2FrZXVwOiBm
YWxzZSwKLSAgICAgIG1heGltdW1Qb3dlcjogMCwKLSAgICAgIGludGVyZmFjZXM6IFtdLAotICAg
ICAgZXh0cmFEYXRhOiBuZXcgVWludDhBcnJheSgpCi0gICAgfTsKLSAgICBjb25maWcuaW50ZXJm
YWNlcy5mb3JFYWNoKGlmYWNlID0+IHsKLSAgICAgIHZhciBpbnRlcmZhY2VJbmZvID0gewotICAg
ICAgICBpbnRlcmZhY2VOdW1iZXI6IGlmYWNlLmludGVyZmFjZU51bWJlciwKLSAgICAgICAgYWx0
ZXJuYXRlczogW10KLSAgICAgIH07Ci0gICAgICBpZmFjZS5hbHRlcm5hdGVzLmZvckVhY2goYWx0
ZXJuYXRlID0+IHsKLSAgICAgICAgdmFyIGFsdGVybmF0ZUluZm8gPSB7Ci0gICAgICAgICAgYWx0
ZXJuYXRlU2V0dGluZzogYWx0ZXJuYXRlLmFsdGVybmF0ZVNldHRpbmcsCi0gICAgICAgICAgY2xh
c3NDb2RlOiBhbHRlcm5hdGUuaW50ZXJmYWNlQ2xhc3MsCi0gICAgICAgICAgc3ViY2xhc3NDb2Rl
OiBhbHRlcm5hdGUuaW50ZXJmYWNlU3ViY2xhc3MsCi0gICAgICAgICAgcHJvdG9jb2xDb2RlOiBh
bHRlcm5hdGUuaW50ZXJmYWNlUHJvdG9jb2wsCi0gICAgICAgICAgaW50ZXJmYWNlTmFtZTogc3Ry
aW5nVG9Nb2pvU3RyaW5nMTYoYWx0ZXJuYXRlLmludGVyZmFjZU5hbWUpLAotICAgICAgICAgIGVu
ZHBvaW50czogW10sCi0gICAgICAgICAgZXh0cmFEYXRhOiBuZXcgVWludDhBcnJheSgpCi0gICAg
ICAgIH07Ci0gICAgICAgIGFsdGVybmF0ZS5lbmRwb2ludHMuZm9yRWFjaChlbmRwb2ludCA9PiB7
Ci0gICAgICAgICAgdmFyIGVuZHBvaW50SW5mbyA9IHsKLSAgICAgICAgICAgIGVuZHBvaW50TnVt
YmVyOiBlbmRwb2ludC5lbmRwb2ludE51bWJlciwKLSAgICAgICAgICAgIHBhY2tldFNpemU6IGVu
ZHBvaW50LnBhY2tldFNpemUsCi0gICAgICAgICAgICBzeW5jaHJvbml6YXRpb25UeXBlOiBkZXZp
Y2UubW9qb20uVXNiU3luY2hyb25pemF0aW9uVHlwZS5OT05FLAotICAgICAgICAgICAgdXNhZ2VU
eXBlOiBkZXZpY2UubW9qb20uVXNiVXNhZ2VUeXBlLkRBVEEsCi0gICAgICAgICAgICBwb2xsaW5n
SW50ZXJ2YWw6IDAsCi0gICAgICAgICAgICBleHRyYURhdGE6IG5ldyBVaW50OEFycmF5KCkKLSAg
ICAgICAgICB9OwotICAgICAgICAgIHN3aXRjaCAoZW5kcG9pbnQuZGlyZWN0aW9uKSB7Ci0gICAg
ICAgICAgY2FzZSAiaW4iOgotICAgICAgICAgICAgZW5kcG9pbnRJbmZvLmRpcmVjdGlvbiA9IGRl
dmljZS5tb2pvbS5Vc2JUcmFuc2ZlckRpcmVjdGlvbi5JTkJPVU5EOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgY2FzZSAib3V0IjoKLSAgICAgICAgICAgIGVuZHBvaW50SW5mby5kaXJl
Y3Rpb24gPSBkZXZpY2UubW9qb20uVXNiVHJhbnNmZXJEaXJlY3Rpb24uT1VUQk9VTkQ7Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICB9Ci0gICAgICAgICAgc3dpdGNoIChlbmRwb2ludC50
eXBlKSB7Ci0gICAgICAgICAgY2FzZSAiYnVsayI6Ci0gICAgICAgICAgICBlbmRwb2ludEluZm8u
dHlwZSA9IGRldmljZS5tb2pvbS5Vc2JUcmFuc2ZlclR5cGUuQlVMSzsKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgIGNhc2UgImludGVycnVwdCI6Ci0gICAgICAgICAgICBlbmRwb2ludElu
Zm8udHlwZSA9IGRldmljZS5tb2pvbS5Vc2JUcmFuc2ZlclR5cGUuSU5URVJSVVBUOwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSAiaXNvY2hyb25vdXMiOgotICAgICAgICAgICAg
ZW5kcG9pbnRJbmZvLnR5cGUgPSBkZXZpY2UubW9qb20uVXNiVHJhbnNmZXJUeXBlLklTT0NIUk9O
T1VTOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgfQotICAgICAgICAgIGFsdGVybmF0
ZUluZm8uZW5kcG9pbnRzLnB1c2goZW5kcG9pbnRJbmZvKTsKLSAgICAgICAgfSk7Ci0gICAgICAg
IGludGVyZmFjZUluZm8uYWx0ZXJuYXRlcy5wdXNoKGFsdGVybmF0ZUluZm8pOwotICAgICAgfSk7
Ci0gICAgICBjb25maWdJbmZvLmludGVyZmFjZXMucHVzaChpbnRlcmZhY2VJbmZvKTsKLSAgICB9
KTsKLSAgICBkZXZpY2VJbmZvLmNvbmZpZ3VyYXRpb25zLnB1c2goY29uZmlnSW5mbyk7Ci0gIH0p
OwotICByZXR1cm4gZGV2aWNlSW5mbzsKLX0KLQotZnVuY3Rpb24gY29udmVydE1vam9EZXZpY2VG
aWx0ZXJzKGlucHV0KSB7Ci0gIGxldCBvdXRwdXQgPSBbXTsKLSAgaW5wdXQuZm9yRWFjaChmaWx0
ZXIgPT4gewotICAgIG91dHB1dC5wdXNoKGNvbnZlcnRNb2pvRGV2aWNlRmlsdGVyKGZpbHRlcikp
OwotICB9KTsKLSAgcmV0dXJuIG91dHB1dDsKLX0KLQotZnVuY3Rpb24gY29udmVydE1vam9EZXZp
Y2VGaWx0ZXIoaW5wdXQpIHsKLSAgbGV0IG91dHB1dCA9IHt9OwotICBpZiAoaW5wdXQuaGFzVmVu
ZG9ySWQpCi0gICAgb3V0cHV0LnZlbmRvcklkID0gaW5wdXQudmVuZG9ySWQ7Ci0gIGlmIChpbnB1
dC5oYXNQcm9kdWN0SWQpCi0gICAgb3V0cHV0LnByb2R1Y3RJZCA9IGlucHV0LnByb2R1Y3RJZDsK
LSAgaWYgKGlucHV0Lmhhc0NsYXNzQ29kZSkKLSAgICBvdXRwdXQuY2xhc3NDb2RlID0gaW5wdXQu
Y2xhc3NDb2RlOwotICBpZiAoaW5wdXQuaGFzU3ViY2xhc3NDb2RlKQotICAgIG91dHB1dC5zdWJj
bGFzc0NvZGUgPSBpbnB1dC5zdWJjbGFzc0NvZGU7Ci0gIGlmIChpbnB1dC5oYXNQcm90b2NvbENv
ZGUpCi0gICAgb3V0cHV0LnByb3RvY29sQ29kZSA9IGlucHV0LnByb3RvY29sQ29kZTsKLSAgaWYg
KGlucHV0LnNlcmlhbE51bWJlcikKLSAgICBvdXRwdXQuc2VyaWFsTnVtYmVyID0gbW9qb1N0cmlu
ZzE2VG9TdHJpbmcoaW5wdXQuc2VyaWFsTnVtYmVyKTsKLSAgcmV0dXJuIG91dHB1dDsKLX0KLQot
Y2xhc3MgRmFrZURldmljZSB7Ci0gIGNvbnN0cnVjdG9yKGRldmljZUluaXQpIHsKLSAgICB0aGlz
LmluZm9fID0gZGV2aWNlSW5pdDsKLSAgICB0aGlzLm9wZW5lZF8gPSBmYWxzZTsKLSAgICB0aGlz
LmN1cnJlbnRDb25maWd1cmF0aW9uXyA9IG51bGw7Ci0gICAgdGhpcy5jbGFpbWVkSW50ZXJmYWNl
c18gPSBuZXcgTWFwKCk7Ci0gIH0KLQotICBnZXRDb25maWd1cmF0aW9uKCkgewotICAgIGlmICh0
aGlzLmN1cnJlbnRDb25maWd1cmF0aW9uXykgewotICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2
ZSh7Ci0gICAgICAgICAgdmFsdWU6IHRoaXMuY3VycmVudENvbmZpZ3VyYXRpb25fLmNvbmZpZ3Vy
YXRpb25WYWx1ZSB9KTsKLSAgICB9IGVsc2UgewotICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2
ZSh7IHZhbHVlOiAwIH0pOwotICAgIH0KLSAgfQotCi0gIG9wZW4oKSB7Ci0gICAgYXNzZXJ0X2Zh
bHNlKHRoaXMub3BlbmVkXyk7Ci0gICAgdGhpcy5vcGVuZWRfID0gdHJ1ZTsKLSAgICByZXR1cm4g
UHJvbWlzZS5yZXNvbHZlKHsgZXJyb3I6IGRldmljZS5tb2pvbS5Vc2JPcGVuRGV2aWNlRXJyb3Iu
T0sgfSk7Ci0gIH0KLQotICBjbG9zZSgpIHsKLSAgICBhc3NlcnRfdHJ1ZSh0aGlzLm9wZW5lZF8p
OwotICAgIHRoaXMub3BlbmVkXyA9IGZhbHNlOwotICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUo
KTsKLSAgfQotCi0gIHNldENvbmZpZ3VyYXRpb24odmFsdWUpIHsKLSAgICBhc3NlcnRfdHJ1ZSh0
aGlzLm9wZW5lZF8pOwotCi0gICAgbGV0IHNlbGVjdGVkQ29uZmlndXJhdGlvbiA9IHRoaXMuaW5m
b18uY29uZmlndXJhdGlvbnMuZmluZCgKLSAgICAgICAgY29uZmlndXJhdGlvbiA9PiBjb25maWd1
cmF0aW9uLmNvbmZpZ3VyYXRpb25WYWx1ZSA9PSB2YWx1ZSk7Ci0gICAgLy8gQmxpbmsgc2hvdWxk
IG5ldmVyIHJlcXVlc3QgYW4gaW52YWxpZCBjb25maWd1cmF0aW9uLgotICAgIGFzc2VydF9ub3Rf
ZXF1YWxzKHNlbGVjdGVkQ29uZmlndXJhdGlvbiwgdW5kZWZpbmVkKTsKLSAgICB0aGlzLmN1cnJl
bnRDb25maWd1cmF0aW9uXyA9IHNlbGVjdGVkQ29uZmlndXJhdGlvbjsKLSAgICByZXR1cm4gUHJv
bWlzZS5yZXNvbHZlKHsgc3VjY2VzczogdHJ1ZSB9KTsKLSAgfQotCi0gIGNsYWltSW50ZXJmYWNl
KGludGVyZmFjZU51bWJlcikgewotICAgIGFzc2VydF90cnVlKHRoaXMub3BlbmVkXyk7Ci0gICAg
YXNzZXJ0X2ZhbHNlKHRoaXMuY3VycmVudENvbmZpZ3VyYXRpb25fID09IG51bGwsICdkZXZpY2Ug
Y29uZmlndXJlZCcpOwotICAgIGFzc2VydF9mYWxzZSh0aGlzLmNsYWltZWRJbnRlcmZhY2VzXy5o
YXMoaW50ZXJmYWNlTnVtYmVyKSwKLSAgICAgICAgICAgICAgICAgJ2ludGVyZmFjZSBhbHJlYWR5
IGNsYWltZWQnKTsKLQotICAgIC8vIEJsaW5rIHNob3VsZCBuZXZlciByZXF1ZXN0IGFuIGludmFs
aWQgaW50ZXJmYWNlLgotICAgIGFzc2VydF90cnVlKHRoaXMuY3VycmVudENvbmZpZ3VyYXRpb25f
LmludGVyZmFjZXMuc29tZSgKLSAgICAgICAgICAgIGlmYWNlID0+IGlmYWNlLmludGVyZmFjZU51
bWJlciA9PSBpbnRlcmZhY2VOdW1iZXIpKTsKLSAgICB0aGlzLmNsYWltZWRJbnRlcmZhY2VzXy5z
ZXQoaW50ZXJmYWNlTnVtYmVyLCAwKTsKLSAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHsgc3Vj
Y2VzczogdHJ1ZSB9KTsKLSAgfQotCi0gIHJlbGVhc2VJbnRlcmZhY2UoaW50ZXJmYWNlTnVtYmVy
KSB7Ci0gICAgYXNzZXJ0X3RydWUodGhpcy5vcGVuZWRfKTsKLSAgICBhc3NlcnRfZmFsc2UodGhp
cy5jdXJyZW50Q29uZmlndXJhdGlvbl8gPT0gbnVsbCwgJ2RldmljZSBjb25maWd1cmVkJyk7Ci0g
ICAgYXNzZXJ0X3RydWUodGhpcy5jbGFpbWVkSW50ZXJmYWNlc18uaGFzKGludGVyZmFjZU51bWJl
cikpOwotICAgIHRoaXMuY2xhaW1lZEludGVyZmFjZXNfLmRlbGV0ZShpbnRlcmZhY2VOdW1iZXIp
OwotICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoeyBzdWNjZXNzOiB0cnVlIH0pOwotICB9Ci0K
LSAgc2V0SW50ZXJmYWNlQWx0ZXJuYXRlU2V0dGluZyhpbnRlcmZhY2VOdW1iZXIsIGFsdGVybmF0
ZVNldHRpbmcpIHsKLSAgICBhc3NlcnRfdHJ1ZSh0aGlzLm9wZW5lZF8pOwotICAgIGFzc2VydF9m
YWxzZSh0aGlzLmN1cnJlbnRDb25maWd1cmF0aW9uXyA9PSBudWxsLCAnZGV2aWNlIGNvbmZpZ3Vy
ZWQnKTsKLSAgICBhc3NlcnRfdHJ1ZSh0aGlzLmNsYWltZWRJbnRlcmZhY2VzXy5oYXMoaW50ZXJm
YWNlTnVtYmVyKSk7Ci0KLSAgICBsZXQgaWZhY2UgPSB0aGlzLmN1cnJlbnRDb25maWd1cmF0aW9u
Xy5pbnRlcmZhY2VzLmZpbmQoCi0gICAgICAgIGlmYWNlID0+IGlmYWNlLmludGVyZmFjZU51bWJl
ciA9PSBpbnRlcmZhY2VOdW1iZXIpOwotICAgIC8vIEJsaW5rIHNob3VsZCBuZXZlciByZXF1ZXN0
IGFuIGludmFsaWQgaW50ZXJmYWNlIG9yIGFsdGVybmF0ZS4KLSAgICBhc3NlcnRfZmFsc2UoaWZh
Y2UgPT0gdW5kZWZpbmVkKTsKLSAgICBhc3NlcnRfdHJ1ZShpZmFjZS5hbHRlcm5hdGVzLnNvbWUo
Ci0gICAgICAgIHggPT4geC5hbHRlcm5hdGVTZXR0aW5nID09IGFsdGVybmF0ZVNldHRpbmcpKTsK
LSAgICB0aGlzLmNsYWltZWRJbnRlcmZhY2VzXy5zZXQoaW50ZXJmYWNlTnVtYmVyLCBhbHRlcm5h
dGVTZXR0aW5nKTsKLSAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHsgc3VjY2VzczogdHJ1ZSB9
KTsKLSAgfQotCi0gIHJlc2V0KCkgewotICAgIGFzc2VydF90cnVlKHRoaXMub3BlbmVkXyk7Ci0g
ICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh7IHN1Y2Nlc3M6IHRydWUgfSk7Ci0gIH0KLQotICBj
bGVhckhhbHQoZW5kcG9pbnQpIHsKLSAgICBhc3NlcnRfdHJ1ZSh0aGlzLm9wZW5lZF8pOwotICAg
IGFzc2VydF9mYWxzZSh0aGlzLmN1cnJlbnRDb25maWd1cmF0aW9uXyA9PSBudWxsLCAnZGV2aWNl
IGNvbmZpZ3VyZWQnKTsKLSAgICAvLyBUT0RPKHJlaWxseWcpOiBBc3NlcnQgdGhhdCBlbmRwb2lu
dCBpcyB2YWxpZC4KLSAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHsgc3VjY2VzczogdHJ1ZSB9
KTsKLSAgfQotCi0gIGFzeW5jIGNvbnRyb2xUcmFuc2ZlckluKHBhcmFtcywgbGVuZ3RoLCB0aW1l
b3V0KSB7Ci0gICAgYXNzZXJ0X3RydWUodGhpcy5vcGVuZWRfKTsKLQotICAgIGlmICgocGFyYW1z
LnJlY2lwaWVudCA9PSBkZXZpY2UubW9qb20uVXNiQ29udHJvbFRyYW5zZmVyUmVjaXBpZW50LklO
VEVSRkFDRSB8fAotICAgICAgICAgcGFyYW1zLnJlY2lwaWVudCA9PSBkZXZpY2UubW9qb20uVXNi
Q29udHJvbFRyYW5zZmVyUmVjaXBpZW50LkVORFBPSU5UKSAmJgotICAgICAgICB0aGlzLmN1cnJl
bnRDb25maWd1cmF0aW9uXyA9PSBudWxsKSB7Ci0gICAgICByZXR1cm4gewotICAgICAgICBzdGF0
dXM6IGRldmljZS5tb2pvbS5Vc2JUcmFuc2ZlclN0YXR1cy5QRVJNSVNTSU9OX0RFTklFRCwKLSAg
ICAgIH07Ci0gICAgfQotCi0gICAgcmV0dXJuIHsKLSAgICAgIHN0YXR1czogZGV2aWNlLm1vam9t
LlVzYlRyYW5zZmVyU3RhdHVzLk9LLAotICAgICAgZGF0YTogW2xlbmd0aCA+PiA4LCBsZW5ndGgg
JiAweGZmLCBwYXJhbXMucmVxdWVzdCwgcGFyYW1zLnZhbHVlID4+IDgsCi0gICAgICAgICAgICAg
cGFyYW1zLnZhbHVlICYgMHhmZiwgcGFyYW1zLmluZGV4ID4+IDgsIHBhcmFtcy5pbmRleCAmIDB4
ZmZdCi0gICAgfTsKLSAgfQotCi0gIGFzeW5jIGNvbnRyb2xUcmFuc2Zlck91dChwYXJhbXMsIGRh
dGEsIHRpbWVvdXQpIHsKLSAgICBhc3NlcnRfdHJ1ZSh0aGlzLm9wZW5lZF8pOwotCi0gICAgaWYg
KChwYXJhbXMucmVjaXBpZW50ID09IGRldmljZS5tb2pvbS5Vc2JDb250cm9sVHJhbnNmZXJSZWNp
cGllbnQuSU5URVJGQUNFIHx8Ci0gICAgICAgICBwYXJhbXMucmVjaXBpZW50ID09IGRldmljZS5t
b2pvbS5Vc2JDb250cm9sVHJhbnNmZXJSZWNpcGllbnQuRU5EUE9JTlQpICYmCi0gICAgICAgIHRo
aXMuY3VycmVudENvbmZpZ3VyYXRpb25fID09IG51bGwpIHsKLSAgICAgIHJldHVybiB7Ci0gICAg
ICAgIHN0YXR1czogZGV2aWNlLm1vam9tLlVzYlRyYW5zZmVyU3RhdHVzLlBFUk1JU1NJT05fREVO
SUVELAotICAgICAgfTsKLSAgICB9Ci0KLSAgICByZXR1cm4gewotICAgICAgc3RhdHVzOiBkZXZp
Y2UubW9qb20uVXNiVHJhbnNmZXJTdGF0dXMuT0ssCi0gICAgICBieXRlc1dyaXR0ZW46IGRhdGEu
Ynl0ZUxlbmd0aAotICAgIH07Ci0gIH0KLQotICBnZW5lcmljVHJhbnNmZXJJbihlbmRwb2ludE51
bWJlciwgbGVuZ3RoLCB0aW1lb3V0KSB7Ci0gICAgYXNzZXJ0X3RydWUodGhpcy5vcGVuZWRfKTsK
LSAgICBhc3NlcnRfZmFsc2UodGhpcy5jdXJyZW50Q29uZmlndXJhdGlvbl8gPT0gbnVsbCwgJ2Rl
dmljZSBjb25maWd1cmVkJyk7Ci0gICAgLy8gVE9ETyhyZWlsbHlnKTogQXNzZXJ0IHRoYXQgZW5k
cG9pbnQgaXMgdmFsaWQuCi0gICAgbGV0IGRhdGEgPSBuZXcgQXJyYXkobGVuZ3RoKTsKLSAgICBm
b3IgKGxldCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKQotICAgICAgZGF0YVtpXSA9IGkgJiAweGZm
OwotICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoewotICAgICAgc3RhdHVzOiBkZXZpY2UubW9q
b20uVXNiVHJhbnNmZXJTdGF0dXMuT0ssCi0gICAgICBkYXRhOiBkYXRhCi0gICAgfSk7Ci0gIH0K
LQotICBnZW5lcmljVHJhbnNmZXJPdXQoZW5kcG9pbnROdW1iZXIsIGRhdGEsIHRpbWVvdXQpIHsK
LSAgICBhc3NlcnRfdHJ1ZSh0aGlzLm9wZW5lZF8pOwotICAgIGFzc2VydF9mYWxzZSh0aGlzLmN1
cnJlbnRDb25maWd1cmF0aW9uXyA9PSBudWxsLCAnZGV2aWNlIGNvbmZpZ3VyZWQnKTsKLSAgICAv
LyBUT0RPKHJlaWxseWcpOiBBc3NlcnQgdGhhdCBlbmRwb2ludCBpcyB2YWxpZC4KLSAgICByZXR1
cm4gUHJvbWlzZS5yZXNvbHZlKHsKLSAgICAgIHN0YXR1czogZGV2aWNlLm1vam9tLlVzYlRyYW5z
ZmVyU3RhdHVzLk9LLAotICAgICAgYnl0ZXNXcml0dGVuOiBkYXRhLmJ5dGVMZW5ndGgKLSAgICB9
KTsKLSAgfQotCi0gIGlzb2Nocm9ub3VzVHJhbnNmZXJJbihlbmRwb2ludE51bWJlciwgcGFja2V0
TGVuZ3RocywgdGltZW91dCkgewotICAgIGFzc2VydF90cnVlKHRoaXMub3BlbmVkXyk7Ci0gICAg
YXNzZXJ0X2ZhbHNlKHRoaXMuY3VycmVudENvbmZpZ3VyYXRpb25fID09IG51bGwsICdkZXZpY2Ug
Y29uZmlndXJlZCcpOwotICAgIC8vIFRPRE8ocmVpbGx5Zyk6IEFzc2VydCB0aGF0IGVuZHBvaW50
IGlzIHZhbGlkLgotICAgIGxldCBkYXRhID0gbmV3IEFycmF5KHBhY2tldExlbmd0aHMucmVkdWNl
KChhLCBiKSA9PiBhICsgYiwgMCkpOwotICAgIGxldCBkYXRhT2Zmc2V0ID0gMDsKLSAgICBsZXQg
cGFja2V0cyA9IG5ldyBBcnJheShwYWNrZXRMZW5ndGhzLmxlbmd0aCk7Ci0gICAgZm9yIChsZXQg
aSA9IDA7IGkgPCBwYWNrZXRMZW5ndGhzLmxlbmd0aDsgKytpKSB7Ci0gICAgICBmb3IgKGxldCBq
ID0gMDsgaiA8IHBhY2tldExlbmd0aHNbaV07ICsraikKLSAgICAgICAgZGF0YVtkYXRhT2Zmc2V0
KytdID0gaiAmIDB4ZmY7Ci0gICAgICBwYWNrZXRzW2ldID0gewotICAgICAgICBsZW5ndGg6IHBh
Y2tldExlbmd0aHNbaV0sCi0gICAgICAgIHRyYW5zZmVycmVkTGVuZ3RoOiBwYWNrZXRMZW5ndGhz
W2ldLAotICAgICAgICBzdGF0dXM6IGRldmljZS5tb2pvbS5Vc2JUcmFuc2ZlclN0YXR1cy5PSwot
ICAgICAgfTsKLSAgICB9Ci0gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh7IGRhdGE6IGRhdGEs
IHBhY2tldHM6IHBhY2tldHMgfSk7Ci0gIH0KLQotICBpc29jaHJvbm91c1RyYW5zZmVyT3V0KGVu
ZHBvaW50TnVtYmVyLCBkYXRhLCBwYWNrZXRMZW5ndGhzLCB0aW1lb3V0KSB7Ci0gICAgYXNzZXJ0
X3RydWUodGhpcy5vcGVuZWRfKTsKLSAgICBhc3NlcnRfZmFsc2UodGhpcy5jdXJyZW50Q29uZmln
dXJhdGlvbl8gPT0gbnVsbCwgJ2RldmljZSBjb25maWd1cmVkJyk7Ci0gICAgLy8gVE9ETyhyZWls
bHlnKTogQXNzZXJ0IHRoYXQgZW5kcG9pbnQgaXMgdmFsaWQuCi0gICAgbGV0IHBhY2tldHMgPSBu
ZXcgQXJyYXkocGFja2V0TGVuZ3Rocy5sZW5ndGgpOwotICAgIGZvciAobGV0IGkgPSAwOyBpIDwg
cGFja2V0TGVuZ3Rocy5sZW5ndGg7ICsraSkgewotICAgICAgcGFja2V0c1tpXSA9IHsKLSAgICAg
ICAgbGVuZ3RoOiBwYWNrZXRMZW5ndGhzW2ldLAotICAgICAgICB0cmFuc2ZlcnJlZExlbmd0aDog
cGFja2V0TGVuZ3Roc1tpXSwKLSAgICAgICAgc3RhdHVzOiBkZXZpY2UubW9qb20uVXNiVHJhbnNm
ZXJTdGF0dXMuT0sKLSAgICAgIH07Ci0gICAgfQotICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUo
eyBwYWNrZXRzOiBwYWNrZXRzIH0pOwotICB9Ci19Ci0KLWNsYXNzIEZha2VXZWJVc2JTZXJ2aWNl
IHsKLSAgY29uc3RydWN0b3IoKSB7Ci0gICAgdGhpcy5iaW5kaW5nU2V0XyA9IG5ldyBtb2pvLkJp
bmRpbmdTZXQoYmxpbmsubW9qb20uV2ViVXNiU2VydmljZSk7Ci0gICAgdGhpcy5kZXZpY2VzXyA9
IG5ldyBNYXAoKTsKLSAgICB0aGlzLmRldmljZXNCeUd1aWRfID0gbmV3IE1hcCgpOwotICAgIHRo
aXMuY2xpZW50XyA9IG51bGw7Ci0gICAgdGhpcy5uZXh0R3VpZF8gPSAwOwotICB9Ci0KLSAgYWRk
QmluZGluZyhoYW5kbGUpIHsKLSAgICB0aGlzLmJpbmRpbmdTZXRfLmFkZEJpbmRpbmcodGhpcywg
aGFuZGxlKTsKLSAgfQotCi0gIGFkZERldmljZShmYWtlRGV2aWNlLCBpbmZvKSB7Ci0gICAgbGV0
IGRldmljZSA9IHsKLSAgICAgIGZha2VEZXZpY2U6IGZha2VEZXZpY2UsCi0gICAgICBndWlkOiAo
dGhpcy5uZXh0R3VpZF8rKykudG9TdHJpbmcoKSwKLSAgICAgIGluZm86IGluZm8sCi0gICAgICBi
aW5kaW5nQXJyYXk6IFtdCi0gICAgfTsKLSAgICB0aGlzLmRldmljZXNfLnNldChmYWtlRGV2aWNl
LCBkZXZpY2UpOwotICAgIHRoaXMuZGV2aWNlc0J5R3VpZF8uc2V0KGRldmljZS5ndWlkLCBkZXZp
Y2UpOwotICAgIGlmICh0aGlzLmNsaWVudF8pCi0gICAgICB0aGlzLmNsaWVudF8ub25EZXZpY2VB
ZGRlZChmYWtlRGV2aWNlSW5pdFRvRGV2aWNlSW5mbyhkZXZpY2UuZ3VpZCwgaW5mbykpOwotICB9
Ci0KLSAgcmVtb3ZlRGV2aWNlKGZha2VEZXZpY2UpIHsKLSAgICBsZXQgZGV2aWNlID0gdGhpcy5k
ZXZpY2VzXy5nZXQoZmFrZURldmljZSk7Ci0gICAgaWYgKCFkZXZpY2UpCi0gICAgICB0aHJvdyBu
ZXcgRXJyb3IoJ0Nhbm5vdCByZW1vdmUgdW5rbm93biBkZXZpY2UuJyk7Ci0KLSAgICBmb3IgKHZh
ciBiaW5kaW5nIG9mIGRldmljZS5iaW5kaW5nQXJyYXkpCi0gICAgICBiaW5kaW5nLmNsb3NlKCk7
Ci0gICAgdGhpcy5kZXZpY2VzXy5kZWxldGUoZGV2aWNlLmZha2VEZXZpY2UpOwotICAgIHRoaXMu
ZGV2aWNlc0J5R3VpZF8uZGVsZXRlKGRldmljZS5ndWlkKTsKLSAgICBpZiAodGhpcy5jbGllbnRf
KSB7Ci0gICAgICB0aGlzLmNsaWVudF8ub25EZXZpY2VSZW1vdmVkKAotICAgICAgICAgIGZha2VE
ZXZpY2VJbml0VG9EZXZpY2VJbmZvKGRldmljZS5ndWlkLCBkZXZpY2UuaW5mbykpOwotICAgIH0K
LSAgfQotCi0gIHJlbW92ZUFsbERldmljZXMoKSB7Ci0gICAgdGhpcy5kZXZpY2VzXy5mb3JFYWNo
KGRldmljZSA9PiB7Ci0gICAgICBmb3IgKHZhciBiaW5kaW5nIG9mIGRldmljZS5iaW5kaW5nQXJy
YXkpCi0gICAgICAgIGJpbmRpbmcuY2xvc2UoKTsKLSAgICAgIHRoaXMuY2xpZW50Xy5vbkRldmlj
ZVJlbW92ZWQoCi0gICAgICAgICAgZmFrZURldmljZUluaXRUb0RldmljZUluZm8oZGV2aWNlLmd1
aWQsIGRldmljZS5pbmZvKSk7Ci0gICAgfSk7Ci0gICAgdGhpcy5kZXZpY2VzXy5jbGVhcigpOwot
ICAgIHRoaXMuZGV2aWNlc0J5R3VpZF8uY2xlYXIoKTsKLSAgfQotCi0gIGdldERldmljZXMoKSB7
Ci0gICAgbGV0IGRldmljZXMgPSBbXTsKLSAgICB0aGlzLmRldmljZXNfLmZvckVhY2goZGV2aWNl
ID0+IHsKLSAgICAgIGRldmljZXMucHVzaChmYWtlRGV2aWNlSW5pdFRvRGV2aWNlSW5mbyhkZXZp
Y2UuZ3VpZCwgZGV2aWNlLmluZm8pKTsKLSAgICB9KTsKLSAgICByZXR1cm4gUHJvbWlzZS5yZXNv
bHZlKHsgcmVzdWx0czogZGV2aWNlcyB9KTsKLSAgfQotCi0gIGdldERldmljZShndWlkLCByZXF1
ZXN0KSB7Ci0gICAgbGV0IHJldHJpZXZlZERldmljZSA9IHRoaXMuZGV2aWNlc0J5R3VpZF8uZ2V0
KGd1aWQpOwotICAgIGlmIChyZXRyaWV2ZWREZXZpY2UpIHsKLSAgICAgIGxldCBiaW5kaW5nID0g
bmV3IG1vam8uQmluZGluZygKLSAgICAgICAgICBkZXZpY2UubW9qb20uVXNiRGV2aWNlLAotICAg
ICAgICAgIG5ldyBGYWtlRGV2aWNlKHJldHJpZXZlZERldmljZS5pbmZvKSwKLSAgICAgICAgICBy
ZXF1ZXN0KTsKLSAgICAgIGJpbmRpbmcuc2V0Q29ubmVjdGlvbkVycm9ySGFuZGxlcigoKSA9PiB7
Ci0gICAgICAgIGlmIChyZXRyaWV2ZWREZXZpY2UuZmFrZURldmljZS5vbmNsb3NlKQotICAgICAg
ICAgIHJldHJpZXZlZERldmljZS5mYWtlRGV2aWNlLm9uY2xvc2UoKTsKLSAgICAgIH0pOwotICAg
ICAgcmV0cmlldmVkRGV2aWNlLmJpbmRpbmdBcnJheS5wdXNoKGJpbmRpbmcpOwotICAgIH0gZWxz
ZSB7Ci0gICAgICByZXF1ZXN0LmNsb3NlKCk7Ci0gICAgfQotICB9Ci0KLSAgZ2V0UGVybWlzc2lv
bihkZXZpY2VGaWx0ZXJzKSB7Ci0gICAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4gewot
ICAgICAgaWYgKG5hdmlnYXRvci51c2IudGVzdC5vbnJlcXVlc3RkZXZpY2UpIHsKLSAgICAgICAg
bmF2aWdhdG9yLnVzYi50ZXN0Lm9ucmVxdWVzdGRldmljZSgKLSAgICAgICAgICAgIG5ldyBVU0JE
ZXZpY2VSZXF1ZXN0RXZlbnQoZGV2aWNlRmlsdGVycywgcmVzb2x2ZSkpOwotICAgICAgfSBlbHNl
IHsKLSAgICAgICAgcmVzb2x2ZSh7IHJlc3VsdDogbnVsbCB9KTsKLSAgICAgIH0KLSAgICB9KTsK
LSAgfQotCi0gIHNldENsaWVudChjbGllbnRJbmZvKSB7Ci0gICAgdGhpcy5jbGllbnRfID0gbmV3
IGRldmljZS5tb2pvbS5Vc2JEZXZpY2VNYW5hZ2VyQ2xpZW50QXNzb2NpYXRlZFB0cihjbGllbnRJ
bmZvKTsKLSAgfQotfQotCi1jbGFzcyBVU0JEZXZpY2VSZXF1ZXN0RXZlbnQgewotICBjb25zdHJ1
Y3RvcihkZXZpY2VGaWx0ZXJzLCByZXNvbHZlKSB7Ci0gICAgdGhpcy5maWx0ZXJzID0gY29udmVy
dE1vam9EZXZpY2VGaWx0ZXJzKGRldmljZUZpbHRlcnMpOwotICAgIHRoaXMucmVzb2x2ZUZ1bmNf
ID0gcmVzb2x2ZTsKLSAgfQotCi0gIHJlc3BvbmRXaXRoKHZhbHVlKSB7Ci0gICAgLy8gV2FpdCB1
bnRpbCB8dmFsdWV8IHJlc29sdmVzIChpZiBpdCBpcyBhIFByb21pc2UpLiBUaGlzIGZ1bmN0aW9u
IHJldHVybnMKLSAgICAvLyBubyB2YWx1ZS4KLSAgICBQcm9taXNlLnJlc29sdmUodmFsdWUpLnRo
ZW4oZmFrZURldmljZSA9PiB7Ci0gICAgICBsZXQgZGV2aWNlID0gaW50ZXJuYWwud2ViVXNiU2Vy
dmljZS5kZXZpY2VzXy5nZXQoZmFrZURldmljZSk7Ci0gICAgICBsZXQgcmVzdWx0ID0gbnVsbDsK
LSAgICAgIGlmIChkZXZpY2UpIHsKLSAgICAgICAgcmVzdWx0ID0gZmFrZURldmljZUluaXRUb0Rl
dmljZUluZm8oZGV2aWNlLmd1aWQsIGRldmljZS5pbmZvKTsKLSAgICAgIH0KLSAgICAgIHRoaXMu
cmVzb2x2ZUZ1bmNfKHsgcmVzdWx0OiByZXN1bHQgfSk7Ci0gICAgfSwgKCkgPT4gewotICAgICAg
dGhpcy5yZXNvbHZlRnVuY18oeyByZXN1bHQ6IG51bGwgfSk7Ci0gICAgfSk7Ci0gIH0KLX0KLQot
Ly8gVW5saWtlIEZha2VEZXZpY2UgdGhpcyBjbGFzcyBpcyBleHBvcnRlZCB0byBjYWxsZXJzIG9m
IFVTQlRlc3QuYWRkRmFrZURldmljZS4KLWNsYXNzIEZha2VVU0JEZXZpY2UgewotICBjb25zdHJ1
Y3RvcigpIHsKLSAgICB0aGlzLm9uY2xvc2UgPSBudWxsOwotICB9Ci0KLSAgZGlzY29ubmVjdCgp
IHsKLSAgICBzZXRUaW1lb3V0KCgpID0+IGludGVybmFsLndlYlVzYlNlcnZpY2UucmVtb3ZlRGV2
aWNlKHRoaXMpLCAwKTsKLSAgfQotfQotCi1jbGFzcyBVU0JUZXN0IHsKLSAgY29uc3RydWN0b3Io
KSB7Ci0gICAgdGhpcy5vbnJlcXVlc3RkZXZpY2UgPSB1bmRlZmluZWQ7Ci0gIH0KLQotICBhc3lu
YyBpbml0aWFsaXplKCkgewotICAgIGlmIChpbnRlcm5hbC5pbml0aWFsaXplZCkKLSAgICAgIHJl
dHVybjsKLQotICAgIC8vIEJlIHJlYWR5IHRvIGhhbmRsZSAnUmVhZHlGb3JBdHRhY2htZW50JyBt
ZXNzYWdlIGZyb20gY2hpbGQgaWZyYW1lcy4KLSAgICBpZiAoJ3dpbmRvdycgaW4gc2VsZikgewot
ICAgICAgZ2V0TWVzc2FnZVBvcnQod2luZG93KTsKLSAgICB9Ci0KLSAgICBpbnRlcm5hbC53ZWJV
c2JTZXJ2aWNlID0gbmV3IEZha2VXZWJVc2JTZXJ2aWNlKCk7Ci0gICAgaW50ZXJuYWwud2ViVXNi
U2VydmljZUludGVyY2VwdG9yID0KLSAgICAgICAgbmV3IE1vam9JbnRlcmZhY2VJbnRlcmNlcHRv
cihibGluay5tb2pvbS5XZWJVc2JTZXJ2aWNlLm5hbWUpOwotICAgIGludGVybmFsLndlYlVzYlNl
cnZpY2VJbnRlcmNlcHRvci5vbmludGVyZmFjZXJlcXVlc3QgPQotICAgICAgICBlID0+IGludGVy
bmFsLndlYlVzYlNlcnZpY2UuYWRkQmluZGluZyhlLmhhbmRsZSk7Ci0gICAgaW50ZXJuYWwud2Vi
VXNiU2VydmljZUludGVyY2VwdG9yLnN0YXJ0KCk7Ci0KLSAgICAvLyBXYWl0IGZvciBhIGNhbGwg
dG8gR2V0RGV2aWNlcygpIHRvIHBhc3MgYmV0d2VlbiB0aGUgcmVuZGVyZXIgYW5kIHRoZQotICAg
IC8vIG1vY2sgaW4gb3JkZXIgdG8gZXN0YWJsaXNoIHRoYXQgZXZlcnl0aGluZyBpcyBzZXQgdXAu
Ci0gICAgYXdhaXQgbmF2aWdhdG9yLnVzYi5nZXREZXZpY2VzKCk7Ci0gICAgaW50ZXJuYWwuaW5p
dGlhbGl6ZWQgPSB0cnVlOwotICB9Ci0KLSAgLy8gUmV0dXJucyBhIHByb21pc2UgdGhhdCBpcyBy
ZXNvbHZlZCB3aGVuIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiB8dXNifCBpbiB0aGUKLSAgLy8gZ2xv
YmFsIHNjb3BlIGZvciB8Y29udGV4dHwgaXMgY29udHJvbGxlZCBieSB0aGUgY3VycmVudCBjb250
ZXh0LgotICBhdHRhY2hUb0NvbnRleHQoY29udGV4dCkgewotICAgIGlmICghaW50ZXJuYWwuaW5p
dGlhbGl6ZWQpCi0gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0NhbGwgaW5pdGlhbGl6ZSgpIGJlZm9y
ZSBhdHRhY2hUb0NvbnRleHQoKScpOwotCi0gICAgbGV0IHRhcmdldCA9IGNvbnRleHQuY29uc3Ry
dWN0b3IubmFtZSA9PT0gJ1dvcmtlcicgPyBjb250ZXh0IDogd2luZG93OwotICAgIHJldHVybiBn
ZXRNZXNzYWdlUG9ydCh0YXJnZXQpLnRoZW4oKCkgPT4gewotICAgICAgcmV0dXJuIG5ldyBQcm9t
aXNlKHJlc29sdmUgPT4gewotICAgICAgICBpbnRlcm5hbC5tZXNzYWdlUG9ydC5vbm1lc3NhZ2Ug
PSBjaGFubmVsRXZlbnQgPT4gewotICAgICAgICAgIHN3aXRjaCAoY2hhbm5lbEV2ZW50LmRhdGEu
dHlwZSkgewotICAgICAgICAgICAgY2FzZSBibGluay5tb2pvbS5XZWJVc2JTZXJ2aWNlLm5hbWU6
Ci0gICAgICAgICAgICAgIGludGVybmFsLndlYlVzYlNlcnZpY2UuYWRkQmluZGluZyhjaGFubmVs
RXZlbnQuZGF0YS5oYW5kbGUpOwotICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNh
c2UgJ0NvbXBsZXRlJzoKLSAgICAgICAgICAgICAgcmVzb2x2ZSgpOwotICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICB9Ci0gICAgICAgIH07Ci0gICAgICAgIGludGVybmFsLm1lc3NhZ2VQ
b3J0LnBvc3RNZXNzYWdlKHsKLSAgICAgICAgICB0eXBlOiAnQXR0YWNoJyAsCi0gICAgICAgICAg
aW50ZXJmYWNlczogWwotICAgICAgICAgICAgYmxpbmsubW9qb20uV2ViVXNiU2VydmljZS5uYW1l
LAotICAgICAgICAgIF19KTsKLSAgICAgIH0pOwotICAgIH0pOwotICB9Ci0KLSAgYWRkRmFrZURl
dmljZShkZXZpY2VJbml0KSB7Ci0gICAgaWYgKCFpbnRlcm5hbC5pbml0aWFsaXplZCkKLSAgICAg
IHRocm93IG5ldyBFcnJvcignQ2FsbCBpbml0aWFsaXplKCkgYmVmb3JlIGFkZEZha2VEZXZpY2Uo
KS4nKTsKLQotICAgIC8vIHxhZGREZXZpY2V8IGFuZCB8cmVtb3ZlRGV2aWNlfCBhcmUgY2FsbGVk
IGluIGEgc2V0VGltZW91dCBjYWxsYmFjayBzbwotICAgIC8vIHRoYXQgdGVzdHMgZG8gbm90IHJl
bHkgb24gdGhlIGRldmljZSBiZWluZyBpbW1lZGlhdGVseSBhdmFpbGFibGUgd2hpY2gKLSAgICAv
LyBtYXkgbm90IGJlIHRydWUgZm9yIGFsbCBpbXBsZW1lbnRhdGlvbnMgb2YgdGhpcyB0ZXN0IEFQ
SS4KLSAgICBsZXQgZmFrZURldmljZSA9IG5ldyBGYWtlVVNCRGV2aWNlKCk7Ci0gICAgc2V0VGlt
ZW91dCgKLSAgICAgICAgKCkgPT4gaW50ZXJuYWwud2ViVXNiU2VydmljZS5hZGREZXZpY2UoZmFr
ZURldmljZSwgZGV2aWNlSW5pdCksIDApOwotICAgIHJldHVybiBmYWtlRGV2aWNlOwotICB9Ci0K
LSAgcmVzZXQoKSB7Ci0gICAgaWYgKCFpbnRlcm5hbC5pbml0aWFsaXplZCkKLSAgICAgIHRocm93
IG5ldyBFcnJvcignQ2FsbCBpbml0aWFsaXplKCkgYmVmb3JlIHJlc2V0KCkuJyk7Ci0KLSAgICAv
LyBSZXNldCB0aGUgbW9ja3MgaW4gYSBzZXRUaW1lb3V0IGNhbGxiYWNrIHNvIHRoYXQgdGVzdHMg
ZG8gbm90IHJlbHkgb24KLSAgICAvLyB0aGUgZmFjdCB0aGF0IHRoaXMgcG9seWZpbGwgY2FuIGRv
IHRoaXMgc3luY2hyb25vdXNseS4KLSAgICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7
Ci0gICAgICBzZXRUaW1lb3V0KCgpID0+IHsKLSAgICAgICAgaWYgKGludGVybmFsLm1lc3NhZ2VQ
b3J0ICE9PSBudWxsKQotICAgICAgICAgIGludGVybmFsLm1lc3NhZ2VQb3J0LmNsb3NlKCk7Ci0g
ICAgICAgIGludGVybmFsLm1lc3NhZ2VQb3J0ID0gbnVsbDsKLSAgICAgICAgaW50ZXJuYWwud2Vi
VXNiU2VydmljZS5yZW1vdmVBbGxEZXZpY2VzKCk7Ci0gICAgICAgIHJlc29sdmUoKTsKLSAgICAg
IH0sIDApOwotICAgIH0pOwotICB9Ci19Ci0KLW5hdmlnYXRvci51c2IudGVzdCA9IG5ldyBVU0JU
ZXN0KCk7Ci0KLX0pKCk7CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2Vi
LXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS93ZWJ1c2ItdGVzdC5qcy5oZWFkZXJz
IGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMv
Y2hyb21pdW0vd2VidXNiLXRlc3QuanMuaGVhZGVycwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggNjgwNWMzMjNkZjVhOTc1MjMxNjQ4YjgzMGUzM2NlMTgzYzNjYmJkMy4uMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9MYXlvdXRUZXN0cy9pbXBvcnRl
ZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS93ZWJ1c2ItdGVzdC5q
cy5oZWFkZXJzCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotQ29udGVudC1UeXBlOiB0ZXh0
L2phdmFzY3JpcHQ7IGNoYXJzZXQ9dXRmLTgKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2ltcG9y
dGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL3dlYnhyLXRlc3Qt
bWF0aC1oZWxwZXIuanMgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRl
c3RzL3Jlc291cmNlcy9jaHJvbWl1bS93ZWJ4ci10ZXN0LW1hdGgtaGVscGVyLmpzCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMmM2YzEyZDA4ZmUxYTczOTg1N2JlYzBkYTg4ZTg5Yzhh
YmZmYzYwLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL0xh
eW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9t
aXVtL3dlYnhyLXRlc3QtbWF0aC1oZWxwZXIuanMKKysrIC9kZXYvbnVsbApAQCAtMSwyOTggKzAs
MCBAQAotJ3VzZSBzdHJpY3QnOwotCi0vLyBNYXRoIGhlbHBlciAtIHVzZWQgbWFpbmx5IGluIGhp
dCB0ZXN0IGltcGxlbWVudGF0aW9uIGRvbmUgYnkgd2VieHItdGVzdC5qcwotY2xhc3MgWFJNYXRo
SGVscGVyIHsKLSAgc3RhdGljIHRvU3RyaW5nKHApIHsKLSAgICByZXR1cm4gIlsiICsgcC54ICsg
IiwiICsgcC55ICsgIiwiICsgcC56ICsgIiwiICsgcC53ICsgIl0iOwotICB9Ci0KLSAgc3RhdGlj
IHRyYW5zZm9ybV9ieV9tYXRyaXgobWF0cml4LCBwb2ludCkgewotICAgIHJldHVybiB7Ci0gICAg
ICB4IDogbWF0cml4WzBdICogcG9pbnQueCArIG1hdHJpeFs0XSAqIHBvaW50LnkgKyBtYXRyaXhb
OF0gKiBwb2ludC56ICsgbWF0cml4WzEyXSAqIHBvaW50LncsCi0gICAgICB5IDogbWF0cml4WzFd
ICogcG9pbnQueCArIG1hdHJpeFs1XSAqIHBvaW50LnkgKyBtYXRyaXhbOV0gKiBwb2ludC56ICsg
bWF0cml4WzEzXSAqIHBvaW50LncsCi0gICAgICB6IDogbWF0cml4WzJdICogcG9pbnQueCArIG1h
dHJpeFs2XSAqIHBvaW50LnkgKyBtYXRyaXhbMTBdICogcG9pbnQueiArIG1hdHJpeFsxNF0gKiBw
b2ludC53LAotICAgICAgdyA6IG1hdHJpeFszXSAqIHBvaW50LnggKyBtYXRyaXhbN10gKiBwb2lu
dC55ICsgbWF0cml4WzExXSAqIHBvaW50LnogKyBtYXRyaXhbMTVdICogcG9pbnQudywKLSAgICB9
OwotICB9Ci0KLSAgc3RhdGljIG5lZyhwKSB7Ci0gICAgcmV0dXJuIHt4IDogLXAueCwgeSA6IC1w
LnksIHogOiAtcC56LCB3IDogcC53fTsKLSAgfQotCi0gIHN0YXRpYyBzdWIobGhzLCByaHMpIHsK
LSAgICAvLyAudyBpcyB0cmVhdGVkIGhlcmUgbGlrZSBhbiBlbnRpdHkgdHlwZSwgMSBzaWduaWZp
ZXMgcG9pbnRzLCAwIHNpZ25pZmllcyB2ZWN0b3JzLgotICAgIC8vIHBvaW50IC0gcG9pbnQsIHBv
aW50IC0gdmVjdG9yLCB2ZWN0b3IgLSB2ZWN0b3IgYXJlIG9rLCB2ZWN0b3IgLSBwb2ludCBpcyBu
b3QuCi0gICAgaWYgKGxocy53ICE9IHJocy53ICYmIGxocy53ID09IDAuMCkgewotICAgICAgdGhy
b3cgbmV3IEVycm9yKCJ2ZWN0b3IgLSBwb2ludCBub3QgYWxsb3dlZDogIiArIHRvU3RyaW5nKGxo
cykgKyAiLSIgKyB0b1N0cmluZyhyaHMpKTsKLSAgICB9Ci0KLSAgICByZXR1cm4ge3ggOiBsaHMu
eCAtIHJocy54LCB5IDogbGhzLnkgLSByaHMueSwgeiA6IGxocy56IC0gcmhzLnosIHcgOiBsaHMu
dyAtIHJocy53fTsKLSAgfQotCi0gIHN0YXRpYyBhZGQobGhzLCByaHMpIHsKLSAgICBpZiAobGhz
LncgPT0gcmhzLncgJiYgbGhzLncgPT0gMS4wKSB7Ci0gICAgICB0aHJvdyBuZXcgRXJyb3IoInBv
aW50ICsgcG9pbnQgbm90IGFsbG93ZWQiLCBwMSwgcDIpOwotICAgIH0KLQotICAgIHJldHVybiB7
eCA6IGxocy54ICsgcmhzLngsIHkgOiBsaHMueSArIHJocy55LCB6IDogbGhzLnogKyByaHMueiwg
dyA6IGxocy53ICsgcmhzLnd9OwotICB9Ci0KLSAgc3RhdGljIGNyb3NzKGxocywgcmhzKSB7Ci0g
ICAgaWYgKGxocy53ICE9IDAuMCB8fCByaHMudyAhPSAwLjApIHsKLSAgICAgIHRocm93IG5ldyBF
cnJvcigiY3Jvc3MgcHJvZHVjdCBub3QgYWxsb3dlZDogIiArIHRvU3RyaW5nKGxocykgKyAieCIg
KyB0b1N0cmluZyhyaHMpKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gewotICAgICAgeCA6IGxocy55
ICogcmhzLnogLSBsaHMueiAqIHJocy55LAotICAgICAgeSA6IGxocy56ICogcmhzLnggLSBsaHMu
eCAqIHJocy56LAotICAgICAgeiA6IGxocy54ICogcmhzLnkgLSBsaHMueSAqIHJocy54LAotICAg
ICAgdyA6IDAKLSAgICB9OwotICB9Ci0KLSAgc3RhdGljIGRvdChsaHMsIHJocykgewotICAgIGlm
IChsaHMudyAhPSAwIHx8IHJocy53ICE9IDApIHsKLSAgICAgIHRocm93IG5ldyBFcnJvcigiZG90
IHByb2R1Y3Qgbm90IGFsbG93ZWQ6ICIgKyB0b1N0cmluZyhsaHMpICsgIngiICsgdG9TdHJpbmco
cmhzKSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIGxocy54ICogcmhzLnggKyBsaHMueSAqIHJocy55
ICsgbGhzLnogKiByaHMuejsKLSAgfQotCi0gIHN0YXRpYyBtdWwoc2NhbGFyLCB2ZWN0b3IpIHsK
LSAgICBpZiAodmVjdG9yLncgIT0gMCkgewotICAgICAgdGhyb3cgbmV3IEVycm9yKCJzY2FsYXIg
KiB2ZWN0b3Igbm90IGFsbG93ZWQiLCBzY2FsYXIsIHZlY3Rvcik7Ci0gICAgfQotCi0gICAgcmV0
dXJuIHt4IDogdmVjdG9yLnggKiBzY2FsYXIsIHkgOiB2ZWN0b3IueSAqIHNjYWxhciwgeiA6IHZl
Y3Rvci56ICogc2NhbGFyLCB3IDogdmVjdG9yLnd9OwotICB9Ci0KLSAgc3RhdGljIGxlbmd0aCh2
ZWN0b3IpIHsKLSAgICByZXR1cm4gTWF0aC5zcXJ0KFhSTWF0aEhlbHBlci5kb3QodmVjdG9yLCB2
ZWN0b3IpKTsKLSAgfQotCi0gIHN0YXRpYyBub3JtYWxpemUodmVjdG9yKSB7Ci0gICAgY29uc3Qg
bCA9IFhSTWF0aEhlbHBlci5sZW5ndGgodmVjdG9yKTsKLSAgICByZXR1cm4gWFJNYXRoSGVscGVy
Lm11bCgxLjAvbCwgdmVjdG9yKTsKLSAgfQotCi0gIC8vIEFsbCB8ZmFjZXwncyBwb2ludHMgYW5k
IHxwb2ludHwgbXVzdCBiZSBjby1wbGFuYXIuCi0gIHN0YXRpYyBwb2ludEluRmFjZShwb2ludCwg
ZmFjZSkgewotICAgIGNvbnN0IG5vcm1hbGl6ZSA9IFhSTWF0aEhlbHBlci5ub3JtYWxpemU7Ci0g
ICAgY29uc3Qgc3ViID0gWFJNYXRoSGVscGVyLnN1YjsKLSAgICBjb25zdCBsZW5ndGggPSBYUk1h
dGhIZWxwZXIubGVuZ3RoOwotICAgIGNvbnN0IGNyb3NzID0gWFJNYXRoSGVscGVyLmNyb3NzOwot
Ci0gICAgbGV0IG9uVGhlUmlnaHQgPSBudWxsOwotICAgIGxldCBwcmV2aW91c19wb2ludCA9IGZh
Y2VbZmFjZS5sZW5ndGggLSAxXTsKLQotICAgIC8vIHxwb2ludHwgaXMgaW4gfGZhY2V8IGlmIGl0
J3Mgb24gdGhlIHNhbWUgc2lkZSBvZiBhbGwgdGhlIGVkZ2VzLgotICAgIGZvciAobGV0IGkgPSAw
OyBpIDwgZmFjZS5sZW5ndGg7ICsraSkgewotICAgICAgY29uc3QgY3VycmVudF9wb2ludCA9IGZh
Y2VbaV07Ci0KLSAgICAgIGNvbnN0IGVkZ2VfZGlyZWN0aW9uID0gbm9ybWFsaXplKHN1YihjdXJy
ZW50X3BvaW50LCBwcmV2aW91c19wb2ludCkpOwotICAgICAgY29uc3QgdHVybl9kaXJlY3Rpb24g
PSBub3JtYWxpemUoc3ViKHBvaW50LCBjdXJyZW50X3BvaW50KSk7Ci0KLSAgICAgIGNvbnN0IHNp
bl90dXJuX2FuZ2xlID0gbGVuZ3RoKGNyb3NzKGVkZ2VfZGlyZWN0aW9uLCB0dXJuX2RpcmVjdGlv
bikpOwotCi0gICAgICBpZiAob25UaGVSaWdodCA9PSBudWxsKSB7Ci0gICAgICAgIG9uVGhlUmln
aHQgPSBzaW5fdHVybl9hbmdsZSA+PSAwOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKG9u
VGhlUmlnaHQgJiYgc2luX3R1cm5fYW5nbGUgPCAwKSByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGlm
ICghb25UaGVSaWdodCAmJiBzaW5fdHVybl9hbmdsZSA+IDApIHJldHVybiBmYWxzZTsKLSAgICAg
IH0KLQotICAgICAgcHJldmlvdXNfcG9pbnQgPSBjdXJyZW50X3BvaW50OwotICAgIH0KLQotICAg
IHJldHVybiB0cnVlOwotICB9Ci0KLSAgc3RhdGljIGRldDJ4MihtMDAsIG0wMSwgbTEwLCBtMTEp
IHsKLSAgICByZXR1cm4gbTAwICogbTExIC0gbTAxICogbTEwOwotICB9Ci0KLSAgc3RhdGljIGRl
dDN4MygKLSAgICBtMDAsIG0wMSwgbTAyLAotICAgIG0xMCwgbTExLCBtMTIsCi0gICAgbTIwLCBt
MjEsIG0yMgotICApewotICAgIGNvbnN0IGRldDJ4MiA9IFhSTWF0aEhlbHBlci5kZXQyeDI7Ci0K
LSAgICByZXR1cm4gICAgbTAwICogZGV0MngyKG0xMSwgbTEyLCBtMjEsIG0yMikKLSAgICAgICAg
ICAgIC0gbTAxICogZGV0MngyKG0xMCwgbTEyLCBtMjAsIG0yMikKLSAgICAgICAgICAgICsgbTAy
ICogZGV0MngyKG0xMCwgbTExLCBtMjAsIG0yMSk7Ci0gIH0KLQotICBzdGF0aWMgZGV0NHg0KAot
ICAgIG0wMCwgbTAxLCBtMDIsIG0wMywKLSAgICBtMTAsIG0xMSwgbTEyLCBtMTMsCi0gICAgbTIw
LCBtMjEsIG0yMiwgbTIzLAotICAgIG0zMCwgbTMxLCBtMzIsIG0zMwotICApIHsKLSAgICBjb25z
dCBkZXQzeDMgPSBYUk1hdGhIZWxwZXIuZGV0M3gzOwotCi0gICAgcmV0dXJuICBtMDAgKiBkZXQz
eDMobTExLCBtMTIsIG0xMywKLSAgICAgICAgICAgICAgICAgICAgICAgICBtMjEsIG0yMiwgbTIz
LAotICAgICAgICAgICAgICAgICAgICAgICAgIG0zMSwgbTMyLCBtMzMpCi0gICAgICAgICAgLSBt
MDEgKiBkZXQzeDMobTEwLCBtMTIsIG0xMywKLSAgICAgICAgICAgICAgICAgICAgICAgICBtMjAs
IG0yMiwgbTIzLAotICAgICAgICAgICAgICAgICAgICAgICAgIG0zMCwgbTMyLCBtMzMpCi0gICAg
ICAgICAgKyBtMDIgKiBkZXQzeDMobTEwLCBtMTEsIG0xMywKLSAgICAgICAgICAgICAgICAgICAg
ICAgICBtMjAsIG0yMSwgbTIzLAotICAgICAgICAgICAgICAgICAgICAgICAgIG0zMCwgbTMxLCBt
MzMpCi0gICAgICAgICAgLSBtMDMgKiBkZXQzeDMobTEwLCBtMTEsIG0xMiwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICBtMjAsIG0yMSwgbTIyLAotICAgICAgICAgICAgICAgICAgICAgICAgIG0z
MCwgbTMxLCBtMzIpOwotICB9Ci0KLSAgc3RhdGljIGludjIobSkgewotICAgIC8vIG1paiAtIGkt
dGggY29sdW1uLCBqLXRoIHJvdwotICAgIGNvbnN0IG0wMCA9IG1bMF0sICBtMDEgPSBtWzFdLCAg
bTAyID0gbVsyXSwgIG0wMyA9IG1bM107Ci0gICAgY29uc3QgbTEwID0gbVs0XSwgIG0xMSA9IG1b
NV0sICBtMTIgPSBtWzZdLCAgbTEzID0gbVs3XTsKLSAgICBjb25zdCBtMjAgPSBtWzhdLCAgbTIx
ID0gbVs5XSwgIG0yMiA9IG1bMTBdLCBtMjMgPSBtWzExXTsKLSAgICBjb25zdCBtMzAgPSBtWzEy
XSwgbTMxID0gbVsxM10sIG0zMiA9IG1bMTRdLCBtMzMgPSBtWzE1XTsKLQotICAgIGNvbnN0IGRl
dCA9IGRldDR4NCgKLSAgICAgIG0wMCwgbTAxLCBtMDIsIG0wMywKLSAgICAgIG0xMCwgbTExLCBt
MTIsIG0xMywKLSAgICAgIG0yMCwgbTIxLCBtMjIsIG0yMywKLSAgICAgIG0zMCwgbTMxLCBtMzIs
IG0zMwotICAgICk7Ci0gIH0KLQotICBzdGF0aWMgdHJhbnNwb3NlKG0pIHsKLSAgICBjb25zdCBy
ZXN1bHQgPSBBcnJheSgxNik7Ci0gICAgZm9yIChsZXQgaSA9IDA7IGkgPCA0OyBpKyspIHsKLSAg
ICAgIGZvciAobGV0IGogPSAwOyBqIDwgNDsgaisrKSB7Ci0gICAgICAgIHJlc3VsdFtpICogNCAr
IGpdID0gbVtqICogNCArIGldOwotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gcmVzdWx0Owot
ICB9Ci0KLSAgLy8gSW52ZXJ0cyB0aGUgbWF0cml4LCBwb3J0ZWQgZnJvbSB0cmFuc2Zvcm1hdGlv
bl9tYXRyaXguY2MuCi0gIHN0YXRpYyBpbnZlcnNlKG0pIHsKLSAgICBjb25zdCBkZXQzeDMgPSBY
Uk1hdGhIZWxwZXIuZGV0M3gzOwotCi0gICAgLy8gbWlqIC0gaS10aCBjb2x1bW4sIGotdGggcm93
Ci0gICAgY29uc3QgbTAwID0gbVswXSwgIG0wMSA9IG1bMV0sICBtMDIgPSBtWzJdLCAgbTAzID0g
bVszXTsKLSAgICBjb25zdCBtMTAgPSBtWzRdLCAgbTExID0gbVs1XSwgIG0xMiA9IG1bNl0sICBt
MTMgPSBtWzddOwotICAgIGNvbnN0IG0yMCA9IG1bOF0sICBtMjEgPSBtWzldLCAgbTIyID0gbVsx
MF0sIG0yMyA9IG1bMTFdOwotICAgIGNvbnN0IG0zMCA9IG1bMTJdLCBtMzEgPSBtWzEzXSwgbTMy
ID0gbVsxNF0sIG0zMyA9IG1bMTVdOwotCi0gICAgY29uc3QgZGV0ID0gWFJNYXRoSGVscGVyLmRl
dDR4NCgKLSAgICAgIG0wMCwgbTAxLCBtMDIsIG0wMywKLSAgICAgIG0xMCwgbTExLCBtMTIsIG0x
MywKLSAgICAgIG0yMCwgbTIxLCBtMjIsIG0yMywKLSAgICAgIG0zMCwgbTMxLCBtMzIsIG0zMwot
ICAgICk7Ci0KLSAgICBpZiAoTWF0aC5hYnMoZGV0KSA8IDAuMDAwMSkgewotICAgICAgcmV0dXJu
IG51bGw7Ci0gICAgfQotCi0gICAgY29uc3QgaW52RGV0ID0gMS4wIC8gZGV0OwotICAgIC8vIENh
bGN1bGF0ZSBgY29tYXRyaXggKiAxL2RldGA6Ci0gICAgY29uc3QgcmVzdWx0MiA9IFsKLSAgICAg
IC8vIEZpcnN0IGNvbHVtbiAobTByKToKLSAgICAgIGludkRldCAqIGRldDN4MyhtMTEsIG0xMiwg
bTEzLCBtMjEsIG0yMiwgbTIzLCBtMzIsIG0zMiwgbTMzKSwKLSAgICAgIC1pbnZEZXQgKiBkZXQz
eDMobTEwLCBtMTIsIG0xMywgbTIwLCBtMjIsIG0yMywgbTMwLCBtMzIsIG0zMyksCi0gICAgICBp
bnZEZXQgKiBkZXQzeDMobTEwLCBtMTEsIG0xMywgbTIwLCBtMjEsIG0yMywgbTMwLCBtMzEsIG0z
MyksCi0gICAgICAtaW52RGV0ICogZGV0M3gzKG0xMCwgbTExLCBtMTIsIG0yMCwgbTIxLCBtMjIs
IG0zMCwgbTMxLCBtMzIpLAotICAgICAgLy8gU2Vjb25kIGNvbHVtbiAobTFyKToKLSAgICAgIC1p
bnZEZXQgKiBkZXQzeDMobTAxLCBtMDIsIG0wMywgbTIxLCBtMjIsIG0yMywgbTMyLCBtMzIsIG0z
MyksCi0gICAgICBpbnZEZXQgKiBkZXQzeDMobTAwLCBtMDIsIG0wMywgbTIwLCBtMjIsIG0yMywg
bTMwLCBtMzIsIG0zMyksCi0gICAgICAtaW52RGV0ICogZGV0M3gzKG0wMCwgbTAxLCBtMDMsIG0y
MCwgbTIxLCBtMjMsIG0zMCwgbTMxLCBtMzMpLAotICAgICAgaW52RGV0ICogZGV0M3gzKG0wMCwg
bTAxLCBtMDIsIG0yMCwgbTIxLCBtMjIsIG0zMCwgbTMxLCBtMzIpLAotICAgICAgLy8gVGhpcmQg
Y29sdW1uIChtMnIpOgotICAgICAgaW52RGV0ICogZGV0M3gzKG0wMSwgbTAyLCBtMDMsIG0xMSwg
bTEyLCBtMTMsIG0zMSwgbTMyLCBtMzMpLAotICAgICAgLWludkRldCAqIGRldDN4MyhtMDAsIG0w
MiwgbTAzLCBtMTAsIG0xMiwgbTEzLCBtMzAsIG0zMiwgbTMzKSwKLSAgICAgIGludkRldCAqIGRl
dDN4MyhtMDAsIG0wMSwgbTAzLCBtMTAsIG0xMSwgbTEzLCBtMzAsIG0zMSwgbTMzKSwKLSAgICAg
IC1pbnZEZXQgKiBkZXQzeDMobTAwLCBtMDEsIG0wMiwgbTEwLCBtMTEsIG0xMiwgbTMwLCBtMzEs
IG0zMiksCi0gICAgICAvLyBGb3VydGggY29sdW1uIChtM3IpOgotICAgICAgLWludkRldCAqIGRl
dDN4MyhtMDEsIG0wMiwgbTAzLCBtMTEsIG0xMiwgbTEzLCBtMjEsIG0yMiwgbTIzKSwKLSAgICAg
IGludkRldCAqIGRldDN4MyhtMDAsIG0wMiwgbTAzLCBtMTAsIG0xMiwgbTEzLCBtMjAsIG0yMiwg
bTIzKSwKLSAgICAgIC1pbnZEZXQgKiBkZXQzeDMobTAwLCBtMDEsIG0wMywgbTEwLCBtMTEsIG0x
MywgbTIwLCBtMjEsIG0yMyksCi0gICAgICBpbnZEZXQgKiBkZXQzeDMobTAwLCBtMDEsIG0wMiwg
bTEwLCBtMTEsIG0xMiwgbTIwLCBtMjEsIG0yMiksCi0gICAgXTsKLQotICAgIC8vIEFjdHVhbCBp
bnZlcnNlIGlzIGAxL2RldCAqIHRyYW5zcG9zZWQoY29tYXRyaXgpYDoKLSAgICByZXR1cm4gWFJN
YXRoSGVscGVyLnRyYW5zcG9zZShyZXN1bHQyKTsKLSAgfQotCi0gIHN0YXRpYyBtdWw0eDQobTEs
IG0yKSB7Ci0gICAgaWYgKG0xID09IG51bGwgfHwgbTIgPT0gbnVsbCkgewotICAgICAgcmV0dXJu
IG51bGw7Ci0gICAgfQotCi0gICAgY29uc3QgcmVzdWx0ID0gQXJyYXkoMTYpOwotCi0gICAgZm9y
IChsZXQgcm93ID0gMDsgcm93IDwgNDsgcm93KyspIHsKLSAgICAgIGZvciAobGV0IGNvbCA9IDA7
IGNvbCA8IDQ7IGNvbCsrKSB7Ci0gICAgICAgIHJlc3VsdFs0ICogY29sICsgcm93XSA9IDA7Ci0g
ICAgICAgIGZvcihsZXQgaSA9IDA7IGkgPCA0OyBpKyspIHsKLSAgICAgICAgICByZXN1bHRbNCAq
IGNvbCArIHJvd10gKz0gbTFbNCAqIGkgKyByb3ddICogbTJbNCAqIGNvbCArIGldOwotICAgICAg
ICB9Ci0gICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIHJlc3VsdDsKLSAgfQotCi0gIC8vIERl
Y29tcG9zZXMgYSBtYXRyaXgsIHdpdGggdGhlIGFzc3VtcHRpb24gdGhhdCB0aGUgcGFzc2VkIGlu
IG1hdHJpeCBpcwotICAvLyBhIHJpZ2lkIHRyYW5zZm9ybWF0aW9uIChpLmUuIHBvc2l0aW9uIGFu
ZCByb3RhdGlvbiAqb25seSohKS4KLSAgLy8gVGhlIHJlc3VsdCBpcyBhbiBvYmplY3Qgd2l0aCBg
cG9zaXRpb25gIGFuZCBgb3JpZW50YXRpb25gIGtleXMsIHdoaWNoIHNob3VsZAotICAvLyBiZSBj
b21wYXRpYmxlIHdpdGggRmFrZVhSUmlnaWRUcmFuc2Zvcm1Jbml0LgotICAvLyBUaGUgaW1wbGVt
ZW50YXRpb24gc2hvdWxkIG1hdGNoIHRoZSBiZWhhdmlvciBvZiBnZng6OlRyYW5zZm9ybSwgYnV0
IGFzc3VtZXMKLSAgLy8gdGhhdCBzY2FsZSwgc2tldyAmIHBlcnNwZWN0aXZlIGFyZSBub3QgcHJl
c2VudCBpbiB0aGUgbWF0cml4IHNvIGl0IGNvdWxkIGJlCi0gIC8vIHNpbXBsaWZpZWQuCi0gIHN0
YXRpYyBkZWNvbXBvc2VSaWdpZFRyYW5zZm9ybShtKSB7Ci0gICAgY29uc3QgbTAwID0gbVswXSwg
IG0wMSA9IG1bMV0sICBtMDIgPSBtWzJdLCAgbTAzID0gbVszXTsKLSAgICBjb25zdCBtMTAgPSBt
WzRdLCAgbTExID0gbVs1XSwgIG0xMiA9IG1bNl0sICBtMTMgPSBtWzddOwotICAgIGNvbnN0IG0y
MCA9IG1bOF0sICBtMjEgPSBtWzldLCAgbTIyID0gbVsxMF0sIG0yMyA9IG1bMTFdOwotICAgIGNv
bnN0IG0zMCA9IG1bMTJdLCBtMzEgPSBtWzEzXSwgbTMyID0gbVsxNF0sIG0zMyA9IG1bMTVdOwot
Ci0gICAgY29uc3QgcG9zaXRpb24gPSBbbTMwLCBtMzEsIG0zMl07Ci0gICAgY29uc3Qgb3JpZW50
YXRpb24gPSBbMCwgMCwgMCwgMF07Ci0KLSAgICBjb25zdCB0cmFjZSA9IG0wMCArIG0xMSArIG0y
MjsKLSAgICBpZiAodHJhY2UgPiAwKSB7Ci0gICAgICBjb25zdCBTID0gTWF0aC5zcXJ0KHRyYWNl
ICsgMSkgKiAyOwotICAgICAgb3JpZW50YXRpb25bM10gPSAwLjI1ICogUzsKLSAgICAgIG9yaWVu
dGF0aW9uWzBdID0gKG0xMiAtIG0yMSkgLyBTOwotICAgICAgb3JpZW50YXRpb25bMV0gPSAobTIw
IC0gbTAyKSAvIFM7Ci0gICAgICBvcmllbnRhdGlvblsyXSA9IChtMDEgLSBtMTApIC8gUzsKLSAg
ICB9IGVsc2UgaWYgKG0wMCA+IG0xMSAmJiBtMDAgPiBtMjIpIHsKLSAgICAgIGNvbnN0IFMgPSBN
YXRoLnNxcnQoMS4wICsgbTAwIC0gbTExIC0gbTIyKSAqIDI7Ci0gICAgICBvcmllbnRhdGlvblsz
XSA9IChtMTIgLSBtMjEpIC8gUzsKLSAgICAgIG9yaWVudGF0aW9uWzBdID0gMC4yNSAqIFM7Ci0g
ICAgICBvcmllbnRhdGlvblsxXSA9IChtMDEgKyBtMTApIC8gUzsKLSAgICAgIG9yaWVudGF0aW9u
WzJdID0gKG0yMCArIG0wMikgLyBTOwotICAgIH0gZWxzZSBpZiAobTExID4gbTIyKSB7Ci0gICAg
ICBjb25zdCBTID0gTWF0aC5zcXJ0KDEuMCArIG0xMSAtIG0wMCAtIG0yMikgKiAyOwotICAgICAg
b3JpZW50YXRpb25bM10gPSAobTIwIC0gbTAyKSAvIFM7Ci0gICAgICBvcmllbnRhdGlvblswXSA9
IChtMDEgKyBtMTApIC8gUzsKLSAgICAgIG9yaWVudGF0aW9uWzFdID0gMC4yNSAqIFM7Ci0gICAg
ICBvcmllbnRhdGlvblsyXSA9IChtMTIgKyBtMjEpIC8gUzsKLSAgICB9IGVsc2UgewotICAgICAg
Y29uc3QgUyA9IE1hdGguc3FydCgxLjAgKyBtMjIgLSBtMDAgLSBtMTEpICogMjsKLSAgICAgIG9y
aWVudGF0aW9uWzNdID0gKG0wMSAtIG0xMCkgLyBTOwotICAgICAgb3JpZW50YXRpb25bMF0gPSAo
bTIwICsgbTAyKSAvIFM7Ci0gICAgICBvcmllbnRhdGlvblsxXSA9IChtMTIgKyBtMjEpIC8gUzsK
LSAgICAgIG9yaWVudGF0aW9uWzJdID0gMC4yNSAqIFM7Ci0gICAgfQotCi0gICAgcmV0dXJuIHsg
cG9zaXRpb24sIG9yaWVudGF0aW9uIH07Ci0gIH0KLQotICBzdGF0aWMgaWRlbnRpdHkoKSB7Ci0g
ICAgcmV0dXJuIFsKLSAgICAgIDEsIDAsIDAsIDAsCi0gICAgICAwLCAxLCAwLCAwLAotICAgICAg
MCwgMCwgMSwgMCwKLSAgICAgIDAsIDAsIDAsIDEKLSAgICBdOwotICB9OwotfQotCi1YUk1hdGhI
ZWxwZXIuRVBTSUxPTiA9IDAuMDAxOwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQv
dzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vd2VieHItdGVzdC1tYXRo
LWhlbHBlci5qcy5oZWFkZXJzIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9y
bS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vd2VieHItdGVzdC1tYXRoLWhlbHBlci5qcy5oZWFk
ZXJzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ODA1YzMyM2RmNWE5NzUyMzE2NDhi
ODMwZTMzY2UxODNjM2NiYmQzLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwCi0tLSBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVz
b3VyY2VzL2Nocm9taXVtL3dlYnhyLXRlc3QtbWF0aC1oZWxwZXIuanMuaGVhZGVycworKysgL2Rl
di9udWxsCkBAIC0xICswLDAgQEAKLUNvbnRlbnQtVHlwZTogdGV4dC9qYXZhc2NyaXB0OyBjaGFy
c2V0PXV0Zi04CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRm
b3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS93ZWJ4ci10ZXN0LmpzIGIvTGF5b3V0VGVzdHMv
aW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vd2VieHIt
dGVzdC5qcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2VjYjE4ZTU1NTY3MTBjZDdm
OWQ0YmM2YTkyYTQxOTQ5ZGU3MjVjMS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMAotLS0gYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3Rz
L3Jlc291cmNlcy9jaHJvbWl1bS93ZWJ4ci10ZXN0LmpzCisrKyAvZGV2L251bGwKQEAgLTEsMTc0
NyArMCwwIEBACi0ndXNlIHN0cmljdCc7Ci0KLS8vIFRoaXMgcG9seWZpbGwgbGlicmFyeSBpbXBs
ZW1lbnRzIHRoZSBXZWJYUiBUZXN0IEFQSSBhcyBzcGVjaWZpZWQgaGVyZToKLS8vIGh0dHBzOi8v
Z2l0aHViLmNvbS9pbW1lcnNpdmUtd2ViL3dlYnhyLXRlc3QtYXBpCi0KLWNvbnN0IGRlZmF1bHRN
b2pvRnJvbUZsb29yID0gbmV3IGdmeC5tb2pvbS5UcmFuc2Zvcm0oKTsKLWRlZmF1bHRNb2pvRnJv
bUZsb29yLm1hdHJpeCA9IFsxLCAwLCAgICAgMCwgMCwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAwLCAxLCAgICAgMCwgMCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAw
LCAwLCAgICAgMSwgMCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCAtMS42NSwg
MCwgMV07Ci1jb25zdCBkZWZhdWx0X3N0YWdlX3BhcmFtZXRlcnMgPSB7Ci0gIG1vam9Gcm9tRmxv
b3I6IGRlZmF1bHRNb2pvRnJvbUZsb29yLAotICBib3VuZHM6IG51bGwKLX07Ci0KLWZ1bmN0aW9u
IGdldE1hdHJpeEZyb21UcmFuc2Zvcm0odHJhbnNmb3JtKSB7Ci0gIGNvbnN0IHggPSB0cmFuc2Zv
cm0ub3JpZW50YXRpb25bMF07Ci0gIGNvbnN0IHkgPSB0cmFuc2Zvcm0ub3JpZW50YXRpb25bMV07
Ci0gIGNvbnN0IHogPSB0cmFuc2Zvcm0ub3JpZW50YXRpb25bMl07Ci0gIGNvbnN0IHcgPSB0cmFu
c2Zvcm0ub3JpZW50YXRpb25bM107Ci0KLSAgY29uc3QgbTExID0gMS4wIC0gMi4wICogKHkgKiB5
ICsgeiAqIHopOwotICBjb25zdCBtMjEgPSAyLjAgKiAoeCAqIHkgKyB6ICogdyk7Ci0gIGNvbnN0
IG0zMSA9IDIuMCAqICh4ICogeiAtIHkgKiB3KTsKLQotICBjb25zdCBtMTIgPSAyLjAgKiAoeCAq
IHkgLSB6ICogdyk7Ci0gIGNvbnN0IG0yMiA9IDEuMCAtIDIuMCAqICh4ICogeCArIHogKiB6KTsK
LSAgY29uc3QgbTMyID0gMi4wICogKHkgKiB6ICsgeCAqIHcpOwotCi0gIGNvbnN0IG0xMyA9IDIu
MCAqICh4ICogeiArIHkgKiB3KTsKLSAgY29uc3QgbTIzID0gMi4wICogKHkgKiB6IC0geCAqIHcp
OwotICBjb25zdCBtMzMgPSAxLjAgLSAyLjAgKiAoeCAqIHggKyB5ICogeSk7Ci0KLSAgY29uc3Qg
bTE0ID0gdHJhbnNmb3JtLnBvc2l0aW9uWzBdOwotICBjb25zdCBtMjQgPSB0cmFuc2Zvcm0ucG9z
aXRpb25bMV07Ci0gIGNvbnN0IG0zNCA9IHRyYW5zZm9ybS5wb3NpdGlvblsyXTsKLQotICAvLyBD
b2x1bW4tbWFqb3IgbGluZWFyaXplZCBvcmRlciBpcyBleHBlY3RlZC4KLSAgcmV0dXJuIFttMTEs
IG0yMSwgbTMxLCAwLAotICAgICAgICAgIG0xMiwgbTIyLCBtMzIsIDAsCi0gICAgICAgICAgbTEz
LCBtMjMsIG0zMywgMCwKLSAgICAgICAgICBtMTQsIG0yNCwgbTM0LCAxXTsKLX0KLQotZnVuY3Rp
b24gY29tcG9zZUdGWFRyYW5zZm9ybShmYWtlVHJhbnNmb3JtSW5pdCkgewotICBjb25zdCB0cmFu
c2Zvcm0gPSBuZXcgZ2Z4Lm1vam9tLlRyYW5zZm9ybSgpOwotICB0cmFuc2Zvcm0ubWF0cml4ID0g
Z2V0TWF0cml4RnJvbVRyYW5zZm9ybShmYWtlVHJhbnNmb3JtSW5pdCk7Ci0gIHJldHVybiB0cmFu
c2Zvcm07Ci19Ci0KLWNsYXNzIENocm9tZVhSVGVzdCB7Ci0gIGNvbnN0cnVjdG9yKCkgewotICAg
IHRoaXMubW9ja1ZSU2VydmljZV8gPSBuZXcgTW9ja1ZSU2VydmljZShtb2pvLmZyYW1lSW50ZXJm
YWNlcyk7Ci0gIH0KLQotICBzaW11bGF0ZURldmljZUNvbm5lY3Rpb24oaW5pdF9wYXJhbXMpIHsK
LSAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRoaXMubW9ja1ZSU2VydmljZV8uYWRkUnVudGlt
ZShpbml0X3BhcmFtcykpOwotICB9Ci0KLSAgZGlzY29ubmVjdEFsbERldmljZXMoKSB7Ci0gICAg
dGhpcy5tb2NrVlJTZXJ2aWNlXy5yZW1vdmVBbGxSdW50aW1lcyhkZXZpY2UpOwotICAgIHJldHVy
biBQcm9taXNlLnJlc29sdmUoKTsKLSAgfQotCi0gIHNpbXVsYXRlVXNlckFjdGl2YXRpb24oY2Fs
bGJhY2spIHsKLSAgICBjb25zdCBidXR0b24gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdidXR0
b24nKTsKLSAgICBidXR0b24udGV4dENvbnRlbnQgPSAnY2xpY2sgdG8gY29udGludWUgdGVzdCc7
Ci0gICAgYnV0dG9uLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snOwotICAgIGJ1dHRvbi5zdHlsZS5m
b250U2l6ZSA9ICcyMHB4JzsKLSAgICBidXR0b24uc3R5bGUucGFkZGluZyA9ICcxMHB4JzsKLSAg
ICBidXR0b24ub25jbGljayA9ICgpID0+IHsKLSAgICAgIGNhbGxiYWNrKCk7Ci0gICAgICBkb2N1
bWVudC5ib2R5LnJlbW92ZUNoaWxkKGJ1dHRvbik7Ci0gICAgfTsKLSAgICBkb2N1bWVudC5ib2R5
LmFwcGVuZENoaWxkKGJ1dHRvbik7Ci0gICAgdGVzdF9kcml2ZXIuY2xpY2soYnV0dG9uKTsKLSAg
fQotCi0gIERlYnVnKG5hbWUsIG1zZykgewotICAgIGNvbnNvbGUubG9nKG5ldyBEYXRlKCkudG9J
U09TdHJpbmcoKSArICcgREVCVUdbJyArIG5hbWUgKyAnXSAnICsgbXNnKTsKLSAgfQotfQotCi0v
LyBNb2NraW5nIGNsYXNzIGRlZmluaXRpb25zCi0KLS8vIE1vY2sgc2VydmljZSBpbXBsZW1lbnRz
IHRoZSBWUlNlcnZpY2UgbW9qbyBpbnRlcmZhY2UuCi1jbGFzcyBNb2NrVlJTZXJ2aWNlIHsKLSAg
Y29uc3RydWN0b3IoKSB7Ci0gICAgdGhpcy5iaW5kaW5nU2V0XyA9IG5ldyBtb2pvLkJpbmRpbmdT
ZXQoZGV2aWNlLm1vam9tLlZSU2VydmljZSk7Ci0gICAgdGhpcy5ydW50aW1lc18gPSBbXTsKLQot
ICAgIHRoaXMuaW50ZXJjZXB0b3JfID0KLSAgICAgICAgbmV3IE1vam9JbnRlcmZhY2VJbnRlcmNl
cHRvcihkZXZpY2UubW9qb20uVlJTZXJ2aWNlLm5hbWUpOwotICAgIHRoaXMuaW50ZXJjZXB0b3Jf
Lm9uaW50ZXJmYWNlcmVxdWVzdCA9IGUgPT4KLSAgICAgICAgdGhpcy5iaW5kaW5nU2V0Xy5hZGRC
aW5kaW5nKHRoaXMsIGUuaGFuZGxlKTsKLSAgICB0aGlzLmludGVyY2VwdG9yXy5zdGFydCgpOwot
ICB9Ci0KLSAgLy8gVGVzdCBtZXRob2RzCi0gIGFkZFJ1bnRpbWUoZmFrZURldmljZUluaXQpIHsK
LSAgICBjb25zdCBydW50aW1lID0gbmV3IE1vY2tSdW50aW1lKGZha2VEZXZpY2VJbml0LCB0aGlz
KTsKLSAgICB0aGlzLnJ1bnRpbWVzXy5wdXNoKHJ1bnRpbWUpOwotCi0gICAgaWYgKHRoaXMuY2xp
ZW50XykgewotICAgICAgdGhpcy5jbGllbnRfLm9uRGV2aWNlQ2hhbmdlZCgpOwotICAgIH0KLQot
ICAgIHJldHVybiBydW50aW1lOwotICB9Ci0KLSAgcmVtb3ZlQWxsUnVudGltZXMoKSB7Ci0gICAg
aWYgKHRoaXMuY2xpZW50XykgewotICAgICAgdGhpcy5jbGllbnRfLm9uRGV2aWNlQ2hhbmdlZCgp
OwotICAgIH0KLQotICAgIHRoaXMucnVudGltZXNfID0gW107Ci0gIH0KLQotICByZW1vdmVSdW50
aW1lKGRldmljZSkgewotICAgIGNvbnN0IGluZGV4ID0gdGhpcy5ydW50aW1lc18uaW5kZXhPZihk
ZXZpY2UpOwotICAgIGlmIChpbmRleCA+PSAwKSB7Ci0gICAgICB0aGlzLnJ1bnRpbWVzXy5zcGxp
Y2UoaW5kZXgsIDEpOwotICAgICAgaWYgKHRoaXMuY2xpZW50XykgewotICAgICAgICB0aGlzLmNs
aWVudF8ub25EZXZpY2VDaGFuZ2VkKCk7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgc2V0Q2xp
ZW50KGNsaWVudCkgewotICAgIGlmICh0aGlzLmNsaWVudF8pIHsKLSAgICAgIHRocm93IG5ldyBF
cnJvcigic2V0Q2xpZW50IHNob3VsZCBvbmx5IGJlIGNhbGxlZCBvbmNlIik7Ci0gICAgfQotCi0g
ICAgdGhpcy5jbGllbnRfID0gY2xpZW50OwotICB9Ci0KLSAgcmVxdWVzdFNlc3Npb24oc2Vzc2lv
bk9wdGlvbnMsIHdhc19hY3RpdmF0aW9uKSB7Ci0gICAgY29uc3QgcmVxdWVzdHMgPSBbXTsKLSAg
ICAvLyBSZXF1ZXN0IGEgc2Vzc2lvbiBmcm9tIGFsbCB0aGUgcnVudGltZXMuCi0gICAgZm9yIChs
ZXQgaSA9IDA7IGkgPCB0aGlzLnJ1bnRpbWVzXy5sZW5ndGg7IGkrKykgewotICAgICAgcmVxdWVz
dHNbaV0gPSB0aGlzLnJ1bnRpbWVzX1tpXS5yZXF1ZXN0UnVudGltZVNlc3Npb24oc2Vzc2lvbk9w
dGlvbnMpOwotICAgIH0KLQotICAgIHJldHVybiBQcm9taXNlLmFsbChyZXF1ZXN0cykudGhlbigo
cmVzdWx0cykgPT4gewotICAgICAgLy8gRmluZCBhbmQgcmV0dXJuIHRoZSBmaXJzdCBzdWNjZXNz
ZnVsIHJlc3VsdC4KLSAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcmVzdWx0cy5sZW5ndGg7IGkr
KykgewotICAgICAgICBpZiAocmVzdWx0c1tpXS5zZXNzaW9uKSB7Ci0gICAgICAgICAgLy8gQ29u
c3RydWN0IGEgZHVtbXkgbWV0cmljcyByZWNvcmRlcgotICAgICAgICAgIGNvbnN0IG1ldHJpY3NS
ZWNvcmRlclB0ciA9IG5ldyBkZXZpY2UubW9qb20uWFJTZXNzaW9uTWV0cmljc1JlY29yZGVyUHRy
KCk7Ci0gICAgICAgICAgY29uc3QgbWV0cmljc1JlY29yZGVyUmVxdWVzdCA9IG1vam8ubWFrZVJl
cXVlc3QobWV0cmljc1JlY29yZGVyUHRyKTsKLSAgICAgICAgICBjb25zdCBtZXRyaWNzUmVjb3Jk
ZXJCaW5kaW5nID0gbmV3IG1vam8uQmluZGluZygKLSAgICAgICAgICAgICAgZGV2aWNlLm1vam9t
LlhSU2Vzc2lvbk1ldHJpY3NSZWNvcmRlciwgbmV3IE1vY2tYUlNlc3Npb25NZXRyaWNzUmVjb3Jk
ZXIoKSwgbWV0cmljc1JlY29yZGVyUmVxdWVzdCk7Ci0KLSAgICAgICAgICBjb25zdCBzdWNjZXNz
ID0gewotICAgICAgICAgICAgc2Vzc2lvbjogcmVzdWx0c1tpXS5zZXNzaW9uLAotICAgICAgICAg
ICAgbWV0cmljc1JlY29yZGVyOiBtZXRyaWNzUmVjb3JkZXJQdHIsCi0gICAgICAgICAgfTsKLQot
ICAgICAgICAgIHJldHVybiB7Ci0gICAgICAgICAgICByZXN1bHQ6IHsKLSAgICAgICAgICAgICAg
c3VjY2VzcyA6IHN1Y2Nlc3MsCi0gICAgICAgICAgICAgICR0YWcgOiAgMAotICAgICAgICAgICAg
fQotICAgICAgICAgIH07Ci0gICAgICAgIH0KLSAgICAgIH0KLQotICAgICAgLy8gSWYgdGhlcmUg
d2VyZSBubyBzdWNjZXNzZnVsIHJlc3VsdHMsIHJldHVybnMgYSBudWxsIHNlc3Npb24uCi0gICAg
ICByZXR1cm4gewotICAgICAgICByZXN1bHQ6IHsKLSAgICAgICAgICBmYWlsdXJlUmVhc29uIDog
ZGV2aWNlLm1vam9tLlJlcXVlc3RTZXNzaW9uRXJyb3IuTk9fUlVOVElNRV9GT1VORCwKLSAgICAg
ICAgICAkdGFnIDogIDEKLSAgICAgICAgfQotICAgICAgfTsKLSAgICB9KTsKLSAgfQotCi0gIGV4
aXRQcmVzZW50KCkgewotICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTsKLSAgfQotCi0gIHN1
cHBvcnRzU2Vzc2lvbihzZXNzaW9uT3B0aW9ucykgewotICAgIGNvbnN0IHJlcXVlc3RzID0gW107
Ci0gICAgLy8gQ2hlY2sgc3VwcG9ydHMgb24gYWxsIHRoZSBydW50aW1lcy4KLSAgICBmb3IgKGxl
dCBpID0gMDsgaSA8IHRoaXMucnVudGltZXNfLmxlbmd0aDsgaSsrKSB7Ci0gICAgICByZXF1ZXN0
c1tpXSA9IHRoaXMucnVudGltZXNfW2ldLnJ1bnRpbWVTdXBwb3J0c1Nlc3Npb24oc2Vzc2lvbk9w
dGlvbnMpOwotICAgIH0KLQotICAgIHJldHVybiBQcm9taXNlLmFsbChyZXF1ZXN0cykudGhlbigo
cmVzdWx0cykgPT4gewotICAgICAgLy8gRmluZCBhbmQgcmV0dXJuIHRoZSBmaXJzdCBzdWNjZXNz
ZnVsIHJlc3VsdC4KLSAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcmVzdWx0cy5sZW5ndGg7IGkr
KykgewotICAgICAgICBpZiAocmVzdWx0c1tpXS5zdXBwb3J0c1Nlc3Npb24pIHsKLSAgICAgICAg
ICByZXR1cm4gcmVzdWx0c1tpXTsKLSAgICAgICAgfQotICAgICAgfQotCi0gICAgICAvLyBJZiB0
aGVyZSB3ZXJlIG5vIHN1Y2Nlc3NmdWwgcmVzdWx0cywgcmV0dXJucyBmYWxzZS4KLSAgICAgIHJl
dHVybiB7c3VwcG9ydHNTZXNzaW9uOiBmYWxzZX07Ci0gICAgfSk7Ci0gIH0KLQotICAvLyBPbmx5
IGhhbmRsZXMgYXN5bmNocm9ub3VzIGNhbGxzIHRvIG1ha2VYckNvbXBhdGlibGUuIFN5bmNocm9u
b3VzIGNhbGxzIGFyZQotICAvLyBub3Qgc3VwcG9ydGVkIGluIEphdmFzY3JpcHQuCi0gIG1ha2VY
ckNvbXBhdGlibGUoKSB7Ci0gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh7Ci0gICAgICB4cl9j
b21wYXRpYmxlX3Jlc3VsdDogZGV2aWNlLm1vam9tLlhyQ29tcGF0aWJsZVJlc3VsdC5rQWxyZWFk
eUNvbXBhdGlibGUKLSAgICB9KTsKLSAgfQotfQotCi1jbGFzcyBGYWtlWFJBbmNob3JDb250cm9s
bGVyIHsKLSAgY29uc3RydWN0b3IoKSB7Ci0gICAgLy8gUHJpdmF0ZSBwcm9wZXJ0aWVzLgotICAg
IHRoaXMuZGV2aWNlXyA9IG51bGw7Ci0gICAgdGhpcy5pZF8gPSBudWxsOwotICAgIHRoaXMuZGly
dHlfID0gdHJ1ZTsKLQotICAgIC8vIFByb3BlcnRpZXMgYmFja2luZyB1cCBwdWJsaWMgYXR0cmli
dXRlcyAvIG1ldGhvZHMuCi0gICAgdGhpcy5kZWxldGVkXyA9IGZhbHNlOwotICAgIHRoaXMucGF1
c2VkXyA9IGZhbHNlOwotICAgIHRoaXMuYW5jaG9yT3JpZ2luXyA9IFhSTWF0aEhlbHBlci5pZGVu
dGl0eSgpOwotICB9Ci0KLSAgZ2V0IGRlbGV0ZWQoKSB7Ci0gICAgcmV0dXJuIHRoaXMuZGVsZXRl
ZF87Ci0gIH0KLQotICBwYXVzZVRyYWNraW5nKCkgewotICAgIGlmKCF0aGlzLnBhdXNlZF8pIHsK
LSAgICAgIHRoaXMucGF1c2VkXyA9IHRydWU7Ci0gICAgICB0aGlzLmRpcnR5XyA9IHRydWU7Ci0g
ICAgfQotICB9Ci0KLSAgcmVzdW1lVHJhY2tpbmcoKSB7Ci0gICAgaWYodGhpcy5wYXVzZWRfKSB7
Ci0gICAgICB0aGlzLnBhdXNlZF8gPSBmYWxzZTsKLSAgICAgIHRoaXMuZGlydHlfID0gdHJ1ZTsK
LSAgICB9Ci0gIH0KLQotICBzdG9wVHJhY2tpbmcoKSB7Ci0gICAgaWYoIXRoaXMuZGVsZXRlZF8p
IHsKLSAgICAgIHRoaXMuZGV2aWNlXy5kZWxldGVBbmNob3JDb250cm9sbGVyKHRoaXMuaWRfKTsK
LQotICAgICAgdGhpcy5kZWxldGVkXyA9IHRydWU7Ci0gICAgICB0aGlzLmRpcnR5XyA9IHRydWU7
Ci0gICAgfQotICB9Ci0KLSAgc2V0QW5jaG9yT3JpZ2luKGFuY2hvck9yaWdpbikgewotICAgIHRo
aXMuYW5jaG9yT3JpZ2luXyA9IGdldE1hdHJpeEZyb21UcmFuc2Zvcm0oYW5jaG9yT3JpZ2luKTsK
LSAgICB0aGlzLmRpcnR5XyA9IHRydWU7Ci0gIH0KLQotICAvLyBJbnRlcm5hbCBpbXBsZW1lbnRh
dGlvbjoKLSAgc2V0IGlkKHZhbHVlKSB7Ci0gICAgdGhpcy5pZF8gPSB2YWx1ZTsKLSAgfQotCi0g
IHNldCBkZXZpY2UodmFsdWUpIHsKLSAgICB0aGlzLmRldmljZV8gPSB2YWx1ZTsKLSAgfQotCi0g
IGdldCBkaXJ0eSgpIHsKLSAgICByZXR1cm4gdGhpcy5kaXJ0eV87Ci0gIH0KLQotICBnZXQgcGF1
c2VkKCkgewotICAgIHJldHVybiB0aGlzLnBhdXNlZF87Ci0gIH0KLQotICBtYXJrUHJvY2Vzc2Vk
KCkgewotICAgIHRoaXMuZGlydHlfID0gZmFsc2U7Ci0gIH0KLQotICBnZXRBbmNob3JPcmlnaW4o
KSB7Ci0gICAgcmV0dXJuIHRoaXMuYW5jaG9yT3JpZ2luXzsKLSAgfQotfQotCi0vLyBJbXBsZW1l
bnRzIFhSRnJhbWVEYXRhUHJvdmlkZXIgYW5kIFhSUHJlc2VudGF0aW9uUHJvdmlkZXIuIE1haW50
YWlucyBhIG1vY2sKLS8vIGZvciBYUlByZXNlbnRhdGlvblByb3ZpZGVyLiBJbXBsZW1lbnRzIEZh
a2VYUkRldmljZSB0ZXN0IEFQSS4KLWNsYXNzIE1vY2tSdW50aW1lIHsKLSAgLy8gTWFwcGluZyBm
cm9tIHN0cmluZyBmZWF0dXJlIG5hbWVzIHRvIHRoZSBjb3JyZXNwb25kaW5nIG1vam8gdHlwZXMu
Ci0gIC8vIFRoaXMgaXMgZXhwb3NlZCBhcyBhIG1lbWJlciBmb3IgZXh0ZW5zaWJpbGl0eS4KLSAg
c3RhdGljIGZlYXR1cmVUb01vam9NYXAgPSB7Ci0gICAgJ3ZpZXdlcic6IGRldmljZS5tb2pvbS5Y
UlNlc3Npb25GZWF0dXJlLlJFRl9TUEFDRV9WSUVXRVIsCi0gICAgJ2xvY2FsJzogZGV2aWNlLm1v
am9tLlhSU2Vzc2lvbkZlYXR1cmUuUkVGX1NQQUNFX0xPQ0FMLAotICAgICdsb2NhbC1mbG9vcic6
IGRldmljZS5tb2pvbS5YUlNlc3Npb25GZWF0dXJlLlJFRl9TUEFDRV9MT0NBTF9GTE9PUiwKLSAg
ICAnYm91bmRlZC1mbG9vcic6IGRldmljZS5tb2pvbS5YUlNlc3Npb25GZWF0dXJlLlJFRl9TUEFD
RV9CT1VOREVEX0ZMT09SLAotICAgICd1bmJvdW5kZWQnOiBkZXZpY2UubW9qb20uWFJTZXNzaW9u
RmVhdHVyZS5SRUZfU1BBQ0VfVU5CT1VOREVELAotICAgICdoaXQtdGVzdCc6IGRldmljZS5tb2pv
bS5YUlNlc3Npb25GZWF0dXJlLkhJVF9URVNULAotICAgICdkb20tb3ZlcmxheSc6IGRldmljZS5t
b2pvbS5YUlNlc3Npb25GZWF0dXJlLkRPTV9PVkVSTEFZLAotICAgICdsaWdodC1lc3RpbWF0aW9u
JzogZGV2aWNlLm1vam9tLlhSU2Vzc2lvbkZlYXR1cmUuTElHSFRfRVNUSU1BVElPTiwKLSAgICAn
YW5jaG9ycyc6IGRldmljZS5tb2pvbS5YUlNlc3Npb25GZWF0dXJlLkFOQ0hPUlMsCi0gIH07Ci0K
LSAgc3RhdGljIHNlc3Npb25Nb2RlVG9Nb2pvTWFwID0gewotICAgICJpbmxpbmUiOiBkZXZpY2Uu
bW9qb20uWFJTZXNzaW9uTW9kZS5rSW5saW5lLAotICAgICJpbW1lcnNpdmUtdnIiOiBkZXZpY2Uu
bW9qb20uWFJTZXNzaW9uTW9kZS5rSW1tZXJzaXZlVnIsCi0gICAgImltbWVyc2l2ZS1hciI6IGRl
dmljZS5tb2pvbS5YUlNlc3Npb25Nb2RlLmtJbW1lcnNpdmVBciwKLSAgfTsKLQotICBjb25zdHJ1
Y3RvcihmYWtlRGV2aWNlSW5pdCwgc2VydmljZSkgewotICAgIHRoaXMuc2Vzc2lvbkNsaWVudF8g
PSBuZXcgZGV2aWNlLm1vam9tLlhSU2Vzc2lvbkNsaWVudFB0cigpOwotICAgIHRoaXMucHJlc2Vu
dGF0aW9uX3Byb3ZpZGVyXyA9IG5ldyBNb2NrWFJQcmVzZW50YXRpb25Qcm92aWRlcigpOwotCi0g
ICAgdGhpcy5wb3NlXyA9IG51bGw7Ci0gICAgdGhpcy5uZXh0X2ZyYW1lX2lkXyA9IDA7Ci0gICAg
dGhpcy5ib3VuZHNfID0gbnVsbDsKLSAgICB0aGlzLnNlbmRfbW9qb19zcGFjZV9yZXNldF8gPSBm
YWxzZTsKLSAgICB0aGlzLnN0YWdlUGFyYW1ldGVyc18gPSBudWxsOwotICAgIHRoaXMuc3RhZ2VQ
YXJhbWV0ZXJzVXBkYXRlZF8gPSBmYWxzZTsKLQotICAgIHRoaXMuc2VydmljZV8gPSBzZXJ2aWNl
OwotCi0gICAgdGhpcy5mcmFtZXNPZlJlZmVyZW5jZSA9IHt9OwotCi0gICAgdGhpcy5pbnB1dF9z
b3VyY2VzXyA9IG5ldyBNYXAoKTsKLSAgICB0aGlzLm5leHRfaW5wdXRfc291cmNlX2luZGV4XyA9
IDE7Ci0KLSAgICAvLyBDdXJyZW50bHkgYWN0aXZlIGhpdCB0ZXN0IHN1YnNjcmlwdG9ucy4KLSAg
ICB0aGlzLmhpdFRlc3RTdWJzY3JpcHRpb25zXyA9IG5ldyBNYXAoKTsKLSAgICAvLyBDdXJyZW50
bHkgYWN0aXZlIHRyYW5zaWVudCBoaXQgdGVzdCBzdWJzY3JpcHRpb25zLgotICAgIHRoaXMudHJh
bnNpZW50SGl0VGVzdFN1YnNjcmlwdGlvbnNfID0gbmV3IE1hcCgpOwotICAgIC8vIElEIG9mIHRo
ZSBuZXh0IHN1YnNjcmlwdGlvbiB0byBiZSBhc3NpZ25lZC4KLSAgICB0aGlzLm5leHRfaGl0X3Rl
c3RfaWRfID0gMTsKLQotICAgIHRoaXMuYW5jaG9yX2NvbnRyb2xsZXJzXyA9IG5ldyBNYXAoKTsK
LSAgICAvLyBJRCBvZiB0aGUgbmV4dCBhbmNob3IgdG8gYmUgYXNzaWduZWQuCi0gICAgdGhpcy5u
ZXh0X2FuY2hvcl9pZF8gPSAxOwotICAgIC8vIEFuY2hvciBjcmVhdGlvbiBjYWxsYmFjayAoaW5p
dGlhbGx5IG51bGwsIGNhbiBiZSBzZXQgYnkgdGVzdHMpLgotICAgIHRoaXMuYW5jaG9yX2NyZWF0
aW9uX2NhbGxiYWNrXyA9IG51bGw7Ci0KLSAgICBsZXQgc3VwcG9ydGVkTW9kZXMgPSBbXTsKLSAg
ICBpZiAoZmFrZURldmljZUluaXQuc3VwcG9ydGVkTW9kZXMpIHsKLSAgICAgIHN1cHBvcnRlZE1v
ZGVzID0gZmFrZURldmljZUluaXQuc3VwcG9ydGVkTW9kZXMuc2xpY2UoKTsKLSAgICAgIGlmIChm
YWtlRGV2aWNlSW5pdC5zdXBwb3J0ZWRNb2Rlcy5sZW5ndGggPT09IDApIHsKLSAgICAgICAgc3Vw
cG9ydGVkTW9kZXMgPSBbImlubGluZSJdOwotICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICAv
LyBCYWNrLWNvbXBhdCBtb2RlLgotICAgICAgY29uc29sZS53YXJuKCJQbGVhc2UgdXNlIGBzdXBw
b3J0ZWRNb2Rlc2AgdG8gc2lnbmFsIHdoaWNoIG1vZGVzIGFyZSBzdXBwb3J0ZWQgYnkgdGhpcyBk
ZXZpY2UuIik7Ci0gICAgICBpZiAoZmFrZURldmljZUluaXQuc3VwcG9ydHNJbW1lcnNpdmUgPT0g
bnVsbCkgewotICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCInc3VwcG9ydHNJbW1lcnNpdmUn
IG11c3QgYmUgc2V0Iik7Ci0gICAgICB9Ci0KLSAgICAgIHN1cHBvcnRlZE1vZGVzID0gWyJpbmxp
bmUiXTsKLSAgICAgIGlmIChmYWtlRGV2aWNlSW5pdC5zdXBwb3J0c0ltbWVyc2l2ZSkgewotICAg
ICAgICBzdXBwb3J0ZWRNb2Rlcy5wdXNoKCJpbW1lcnNpdmUtdnIiKTsKLSAgICAgIH0KLSAgICB9
Ci0KLSAgICB0aGlzLnN1cHBvcnRlZE1vZGVzXyA9IHRoaXMuX2NvbnZlcnRNb2Rlc1RvRW51bShz
dXBwb3J0ZWRNb2Rlcyk7Ci0KLSAgICAvLyBJbml0aWFsaXplIERpc3BsYXlJbmZvIGZpcnN0IHRv
IHNldCB0aGUgZGVmYXVsdHMsIHRoZW4gb3ZlcnJpZGUgd2l0aAotICAgIC8vIGFueXRoaW5nIGZy
b20gdGhlIGRldmljZUluaXQKLSAgICBpZiAodGhpcy5zdXBwb3J0ZWRNb2Rlc18uaW5jbHVkZXMo
ZGV2aWNlLm1vam9tLlhSU2Vzc2lvbk1vZGUua0ltbWVyc2l2ZVZyKQotICAgICB8fCB0aGlzLnN1
cHBvcnRlZE1vZGVzXy5pbmNsdWRlcyhkZXZpY2UubW9qb20uWFJTZXNzaW9uTW9kZS5rSW1tZXJz
aXZlQXIpKSB7Ci0gICAgICB0aGlzLmRpc3BsYXlJbmZvXyA9IHRoaXMuZ2V0SW1tZXJzaXZlRGlz
cGxheUluZm8oKTsKLSAgICB9IGVsc2UgaWYgKHRoaXMuc3VwcG9ydGVkTW9kZXNfLmluY2x1ZGVz
KGRldmljZS5tb2pvbS5YUlNlc3Npb25Nb2RlLmtJbmxpbmUpKSB7Ci0gICAgICB0aGlzLmRpc3Bs
YXlJbmZvXyA9IHRoaXMuZ2V0Tm9uSW1tZXJzaXZlRGlzcGxheUluZm8oKTsKLSAgICB9IGVsc2Ug
ewotICAgICAgLy8gVGhpcyBzaG91bGQgbmV2ZXIgaGFwcGVuIQotICAgICAgY29uc29sZS5lcnJv
cigiRGV2aWNlIGhhcyBlbXB0eSBzdXBwb3J0ZWQgbW9kZXMgYXJyYXkhIik7Ci0gICAgICB0aHJv
dyBuZXcgSW52YWxpZFN0YXRlRXJyb3IoKTsKLSAgICB9Ci0KLSAgICBpZiAoZmFrZURldmljZUlu
aXQudmlld2VyT3JpZ2luICE9IG51bGwpIHsKLSAgICAgIHRoaXMuc2V0Vmlld2VyT3JpZ2luKGZh
a2VEZXZpY2VJbml0LnZpZXdlck9yaWdpbik7Ci0gICAgfQotCi0gICAgaWYgKGZha2VEZXZpY2VJ
bml0LmZsb29yT3JpZ2luICE9IG51bGwpIHsKLSAgICAgIHRoaXMuc2V0Rmxvb3JPcmlnaW4oZmFr
ZURldmljZUluaXQuZmxvb3JPcmlnaW4pOwotICAgIH0KLQotICAgIGlmIChmYWtlRGV2aWNlSW5p
dC53b3JsZCkgewotICAgICAgdGhpcy53b3JsZF8gPSBmYWtlRGV2aWNlSW5pdC53b3JsZDsKLSAg
ICB9Ci0KLSAgICAvLyBUaGlzIGFwcHJvcHJpYXRlbHkgaGFuZGxlcyBpZiB0aGUgY29vcmRpbmF0
ZXMgYXJlIG51bGwKLSAgICB0aGlzLnNldEJvdW5kc0dlb21ldHJ5KGZha2VEZXZpY2VJbml0LmJv
dW5kc0Nvb3JkaW5hdGVzKTsKLQotICAgIHRoaXMuc2V0Vmlld3MoZmFrZURldmljZUluaXQudmll
d3MpOwotCi0gICAgLy8gTmVlZCB0byBzdXBwb3J0IHdlYlZSIHdoaWNoIGRvZXNuJ3QgaGF2ZSBh
IG5vdGlvbiBvZiBmZWF0dXJlcwotICAgIHRoaXMuc2V0RmVhdHVyZXMoZmFrZURldmljZUluaXQu
c3VwcG9ydGVkRmVhdHVyZXMgfHwgW10pOwotICB9Ci0KLSAgX2NvbnZlcnRNb2RlVG9FbnVtKHNl
c3Npb25Nb2RlKSB7Ci0gICAgaWYgKHNlc3Npb25Nb2RlIGluIE1vY2tSdW50aW1lLnNlc3Npb25N
b2RlVG9Nb2pvTWFwKSB7Ci0gICAgICByZXR1cm4gTW9ja1J1bnRpbWUuc2Vzc2lvbk1vZGVUb01v
am9NYXBbc2Vzc2lvbk1vZGVdOwotICAgIH0KLQotICAgIHRocm93IG5ldyBUeXBlRXJyb3IoIlVu
cmVjb2duaXplZCB2YWx1ZSBmb3IgWFJTZXNzaW9uTW9kZSBlbnVtOiAiICsgc2Vzc2lvbk1vZGUp
OwotICB9Ci0KLSAgX2NvbnZlcnRNb2Rlc1RvRW51bShzZXNzaW9uTW9kZXMpIHsKLSAgICByZXR1
cm4gc2Vzc2lvbk1vZGVzLm1hcChtb2RlID0+IHRoaXMuX2NvbnZlcnRNb2RlVG9FbnVtKG1vZGUp
KTsKLSAgfQotCi0gIC8vIFRlc3QgQVBJIG1ldGhvZHMuCi0gIGRpc2Nvbm5lY3QoKSB7Ci0gICAg
dGhpcy5zZXJ2aWNlXy5yZW1vdmVSdW50aW1lKHRoaXMpOwotICAgIHRoaXMucHJlc2VudGF0aW9u
X3Byb3ZpZGVyXy5DbG9zZSgpOwotICAgIGlmICh0aGlzLnNlc3Npb25DbGllbnRfLnB0ci5pc0Jv
dW5kKCkpIHsKLSAgICAgIHRoaXMuc2Vzc2lvbkNsaWVudF8ucHRyLnJlc2V0KCk7Ci0gICAgfQot
Ci0gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpOwotICB9Ci0KLSAgc2V0Vmlld3Modmlld3Mp
IHsKLSAgICBpZiAodmlld3MpIHsKLSAgICAgIGxldCBjaGFuZ2VkID0gZmFsc2U7Ci0gICAgICBm
b3IgKGxldCBpID0gMDsgaSA8IHZpZXdzLmxlbmd0aDsgaSsrKSB7Ci0gICAgICAgIGlmICh2aWV3
c1tpXS5leWUgPT0gJ2xlZnQnKSB7Ci0gICAgICAgICAgdGhpcy5kaXNwbGF5SW5mb18ubGVmdEV5
ZSA9IHRoaXMuZ2V0RXllKHZpZXdzW2ldKTsKLSAgICAgICAgICBjaGFuZ2VkID0gdHJ1ZTsKLSAg
ICAgICAgfSBlbHNlIGlmICh2aWV3c1tpXS5leWUgPT0gJ3JpZ2h0JykgewotICAgICAgICAgIHRo
aXMuZGlzcGxheUluZm9fLnJpZ2h0RXllID0gdGhpcy5nZXRFeWUodmlld3NbaV0pOwotICAgICAg
ICAgIGNoYW5nZWQgPSB0cnVlOwotICAgICAgICB9Ci0gICAgICB9Ci0KLSAgICAgIGlmIChjaGFu
Z2VkICYmIHRoaXMuc2Vzc2lvbkNsaWVudF8ucHRyLmlzQm91bmQoKSkgewotICAgICAgICB0aGlz
LnNlc3Npb25DbGllbnRfLm9uQ2hhbmdlZCh0aGlzLmRpc3BsYXlJbmZvXyk7Ci0gICAgICB9Ci0g
ICAgfQotICB9Ci0KLSAgc2V0Vmlld2VyT3JpZ2luKG9yaWdpbiwgZW11bGF0ZWRQb3NpdGlvbiA9
IGZhbHNlKSB7Ci0gICAgY29uc3QgcCA9IG9yaWdpbi5wb3NpdGlvbjsKLSAgICBjb25zdCBxID0g
b3JpZ2luLm9yaWVudGF0aW9uOwotICAgIHRoaXMucG9zZV8gPSB7Ci0gICAgICBvcmllbnRhdGlv
bjogeyB4OiBxWzBdLCB5OiBxWzFdLCB6OiBxWzJdLCB3OiBxWzNdIH0sCi0gICAgICBwb3NpdGlv
bjogeyB4OiBwWzBdLCB5OiBwWzFdLCB6OiBwWzJdIH0sCi0gICAgICBlbXVsYXRlZFBvc2l0aW9u
OiBlbXVsYXRlZFBvc2l0aW9uLAotICAgICAgYW5ndWxhclZlbG9jaXR5OiBudWxsLAotICAgICAg
bGluZWFyVmVsb2NpdHk6IG51bGwsCi0gICAgICBhbmd1bGFyQWNjZWxlcmF0aW9uOiBudWxsLAot
ICAgICAgbGluZWFyQWNjZWxlcmF0aW9uOiBudWxsLAotICAgICAgaW5wdXRTdGF0ZTogbnVsbCwK
LSAgICAgIHBvc2VJbmRleDogMAotICAgIH07Ci0gIH0KLQotICBjbGVhclZpZXdlck9yaWdpbigp
IHsKLSAgICB0aGlzLnBvc2VfID0gbnVsbDsKLSAgfQotCi0gIHNpbXVsYXRlVmlzaWJpbGl0eUNo
YW5nZSh2aXNpYmlsaXR5U3RhdGUpIHsKLSAgICBsZXQgbW9qb1N0YXRlID0gbnVsbDsKLSAgICBz
d2l0Y2ggKHZpc2liaWxpdHlTdGF0ZSkgewotICAgICAgY2FzZSAidmlzaWJsZSI6Ci0gICAgICAg
IG1vam9TdGF0ZSA9IGRldmljZS5tb2pvbS5YUlZpc2liaWxpdHlTdGF0ZS5WSVNJQkxFOwotICAg
ICAgICBicmVhazsKLSAgICAgIGNhc2UgInZpc2libGUtYmx1cnJlZCI6Ci0gICAgICAgIG1vam9T
dGF0ZSA9IGRldmljZS5tb2pvbS5YUlZpc2liaWxpdHlTdGF0ZS5WSVNJQkxFX0JMVVJSRUQ7Ci0g
ICAgICAgIGJyZWFrOwotICAgICAgY2FzZSAiaGlkZGVuIjoKLSAgICAgICAgbW9qb1N0YXRlID0g
ZGV2aWNlLm1vam9tLlhSVmlzaWJpbGl0eVN0YXRlLkhJRERFTjsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgfQotICAgIGlmIChtb2pvU3RhdGUpIHsKLSAgICAgIHRoaXMuc2Vzc2lvbkNsaWVudF8ub25W
aXNpYmlsaXR5U3RhdGVDaGFuZ2VkKG1vam9TdGF0ZSk7Ci0gICAgfQotICB9Ci0KLSAgc2V0Qm91
bmRzR2VvbWV0cnkoYm91bmRzKSB7Ci0gICAgaWYgKGJvdW5kcyA9PSBudWxsKSB7Ci0gICAgICB0
aGlzLmJvdW5kc18gPSBudWxsOwotICAgIH0gZWxzZSBpZiAoYm91bmRzLmxlbmd0aCA8IDMpIHsK
LSAgICAgIHRocm93IG5ldyBFcnJvcigiQm91bmRzIG11c3QgaGF2ZSBhIGxlbmd0aCBvZiBhdCBs
ZWFzdCAzIik7Ci0gICAgfSBlbHNlIHsKLSAgICAgIHRoaXMuYm91bmRzXyA9IGJvdW5kczsKLSAg
ICB9Ci0KLSAgICAvLyBXZSBjYW4gb25seSBzZXQgYm91bmRzIGlmIHdlIGhhdmUgc3RhZ2VQYXJh
bWV0ZXJzIHNldDsgb3RoZXJ3aXNlLCB3ZQotICAgIC8vIGRvbid0IGtub3cgdGhlIHRyYW5zZm9y
bSBmcm9tIGxvY2FsIHNwYWNlIHRvIGJvdW5kcyBzcGFjZS4KLSAgICAvLyBXZSdsbCBjYWNoZSB0
aGUgYm91bmRzIHNvIHRoYXQgdGhleSBjYW4gYmUgc2V0IGluIHRoZSBmdXR1cmUgaWYgdGhlCi0g
ICAgLy8gZmxvb3JMZXZlbCB0cmFuc2Zvcm0gaXMgc2V0LCBidXQgd2Ugd29uJ3QgdXBkYXRlIHRo
ZW0ganVzdCB5ZXQuCi0gICAgaWYgKHRoaXMuc3RhZ2VQYXJhbWV0ZXJzXykgewotICAgICAgdGhp
cy5zdGFnZVBhcmFtZXRlcnNfLmJvdW5kcyA9IHRoaXMuYm91bmRzXzsKLSAgICAgIHRoaXMub25T
dGFnZVBhcmFtZXRlcnNVcGRhdGVkKCk7Ci0gICAgfQotICB9Ci0KLSAgc2V0Rmxvb3JPcmlnaW4o
Zmxvb3JPcmlnaW4pIHsKLSAgICBpZiAoIXRoaXMuc3RhZ2VQYXJhbWV0ZXJzXykgewotICAgICAg
dGhpcy5zdGFnZVBhcmFtZXRlcnNfID0gZGVmYXVsdF9zdGFnZV9wYXJhbWV0ZXJzOwotICAgICAg
dGhpcy5zdGFnZVBhcmFtZXRlcnNfLmJvdW5kcyA9IHRoaXMuYm91bmRzXzsKLSAgICB9Ci0KLSAg
ICB0aGlzLnN0YWdlUGFyYW1ldGVyc18ubW9qb0Zyb21GbG9vciA9IG5ldyBnZngubW9qb20uVHJh
bnNmb3JtKCk7Ci0KLSAgICAvLyBmbG9vck9yaWdpbiBpcyBwYXNzZWQgaW4gYXMgbW9qb0Zyb21G
bG9vci4KLSAgICB0aGlzLnN0YWdlUGFyYW1ldGVyc18ubW9qb0Zyb21GbG9vci5tYXRyaXggPQot
ICAgICAgZ2V0TWF0cml4RnJvbVRyYW5zZm9ybShmbG9vck9yaWdpbik7Ci0KLSAgICB0aGlzLm9u
U3RhZ2VQYXJhbWV0ZXJzVXBkYXRlZCgpOwotICB9Ci0KLSAgY2xlYXJGbG9vck9yaWdpbigpIHsK
LSAgICBpZiAodGhpcy5zdGFnZVBhcmFtZXRlcnNfKSB7Ci0gICAgICB0aGlzLnN0YWdlUGFyYW1l
dGVyc18gPSBudWxsOwotICAgICAgdGhpcy5vblN0YWdlUGFyYW1ldGVyc1VwZGF0ZWQoKTsKLSAg
ICB9Ci0gIH0KLQotICBvblN0YWdlUGFyYW1ldGVyc1VwZGF0ZWQoKSB7Ci0gICAgLy8gSW5kaWNh
dGUgZm9yIHRoZSBmcmFtZSBsb29wIHRoYXQgdGhlIHN0YWdlIHBhcmFtZXRlcnMgaGF2ZSBiZWVu
IHVwZGF0ZWQuCi0gICAgdGhpcy5zdGFnZVBhcmFtZXRlcnNVcGRhdGVkXyA9IHRydWU7Ci0gICAg
dGhpcy5kaXNwbGF5SW5mb18uc3RhZ2VQYXJhbWV0ZXJzID0gdGhpcy5zdGFnZVBhcmFtZXRlcnNf
OwotICAgIGlmICh0aGlzLnNlc3Npb25DbGllbnRfLnB0ci5pc0JvdW5kKCkpIHsKLSAgICAgIHRo
aXMuc2Vzc2lvbkNsaWVudF8ub25DaGFuZ2VkKHRoaXMuZGlzcGxheUluZm9fKTsKLSAgICB9Ci0g
IH0KLQotICBzaW11bGF0ZVJlc2V0UG9zZSgpIHsKLSAgICB0aGlzLnNlbmRfbW9qb19zcGFjZV9y
ZXNldF8gPSB0cnVlOwotICB9Ci0KLSAgc2ltdWxhdGVJbnB1dFNvdXJjZUNvbm5lY3Rpb24oZmFr
ZUlucHV0U291cmNlSW5pdCkgewotICAgIGNvbnN0IGluZGV4ID0gdGhpcy5uZXh0X2lucHV0X3Nv
dXJjZV9pbmRleF87Ci0gICAgdGhpcy5uZXh0X2lucHV0X3NvdXJjZV9pbmRleF8rKzsKLQotICAg
IGNvbnN0IHNvdXJjZSA9IG5ldyBNb2NrWFJJbnB1dFNvdXJjZShmYWtlSW5wdXRTb3VyY2VJbml0
LCBpbmRleCwgdGhpcyk7Ci0gICAgdGhpcy5pbnB1dF9zb3VyY2VzXy5zZXQoaW5kZXgsIHNvdXJj
ZSk7Ci0gICAgcmV0dXJuIHNvdXJjZTsKLSAgfQotCi0gIHNldEFuY2hvckNyZWF0aW9uQ2FsbGJh
Y2soY2FsbGJhY2spIHsKLSAgICB0aGlzLmFuY2hvcl9jcmVhdGlvbl9jYWxsYmFja18gPSBjYWxs
YmFjazsKLSAgfQotCi0gIC8vIEhlbHBlciBtZXRob2RzCi0gIGdldE5vbkltbWVyc2l2ZURpc3Bs
YXlJbmZvKCkgewotICAgIGNvbnN0IGRpc3BsYXlJbmZvID0gdGhpcy5nZXRJbW1lcnNpdmVEaXNw
bGF5SW5mbygpOwotCi0gICAgZGlzcGxheUluZm8uY2FwYWJpbGl0aWVzLmNhblByZXNlbnQgPSBm
YWxzZTsKLSAgICBkaXNwbGF5SW5mby5sZWZ0RXllID0gbnVsbDsKLSAgICBkaXNwbGF5SW5mby5y
aWdodEV5ZSA9IG51bGw7Ci0KLSAgICByZXR1cm4gZGlzcGxheUluZm87Ci0gIH0KLQotICAvLyBG
dW5jdGlvbiB0byBnZW5lcmF0ZSBzb21lIHZhbGlkIGRpc3BsYXkgaW5mb3JtYXRpb24gZm9yIHRo
ZSBkZXZpY2UuCi0gIGdldEltbWVyc2l2ZURpc3BsYXlJbmZvKCkgewotICAgIHJldHVybiB7Ci0g
ICAgICBkaXNwbGF5TmFtZTogJ0Zha2VEZXZpY2UnLAotICAgICAgY2FwYWJpbGl0aWVzOiB7Ci0g
ICAgICAgIGhhc1Bvc2l0aW9uOiBmYWxzZSwKLSAgICAgICAgaGFzRXh0ZXJuYWxEaXNwbGF5OiBm
YWxzZSwKLSAgICAgICAgY2FuUHJlc2VudDogdHJ1ZSwKLSAgICAgICAgbWF4TGF5ZXJzOiAxCi0g
ICAgICB9LAotICAgICAgc3RhZ2VQYXJhbWV0ZXJzOiBudWxsLAotICAgICAgbGVmdEV5ZTogewot
ICAgICAgICBmaWVsZE9mVmlldzogewotICAgICAgICAgIHVwRGVncmVlczogNDguMzE2LAotICAg
ICAgICAgIGRvd25EZWdyZWVzOiA1MC4wOTksCi0gICAgICAgICAgbGVmdERlZ3JlZXM6IDUwLjg5
OSwKLSAgICAgICAgICByaWdodERlZ3JlZXM6IDM1LjE5NwotICAgICAgICB9LAotICAgICAgICBo
ZWFkRnJvbUV5ZTogY29tcG9zZUdGWFRyYW5zZm9ybSh7Ci0gICAgICAgICAgcG9zaXRpb246IFst
MC4wMzIsIDAsIDBdLAotICAgICAgICAgIG9yaWVudGF0aW9uOiBbMCwgMCwgMCwgMV0KLSAgICAg
ICAgfSksCi0gICAgICAgIHJlbmRlcldpZHRoOiAyMCwKLSAgICAgICAgcmVuZGVySGVpZ2h0OiAy
MAotICAgICAgfSwKLSAgICAgIHJpZ2h0RXllOiB7Ci0gICAgICAgIGZpZWxkT2ZWaWV3OiB7Ci0g
ICAgICAgICAgdXBEZWdyZWVzOiA0OC4zMTYsCi0gICAgICAgICAgZG93bkRlZ3JlZXM6IDUwLjA5
OSwKLSAgICAgICAgICBsZWZ0RGVncmVlczogNTAuODk5LAotICAgICAgICAgIHJpZ2h0RGVncmVl
czogMzUuMTk3Ci0gICAgICAgIH0sCi0gICAgICAgIGhlYWRGcm9tRXllOiBjb21wb3NlR0ZYVHJh
bnNmb3JtKHsKLSAgICAgICAgICBwb3NpdGlvbjogWzAuMDMyLCAwLCAwXSwKLSAgICAgICAgICBv
cmllbnRhdGlvbjogWzAsIDAsIDAsIDFdCi0gICAgICAgIH0pLAotICAgICAgICByZW5kZXJXaWR0
aDogMjAsCi0gICAgICAgIHJlbmRlckhlaWdodDogMjAKLSAgICAgIH0sCi0gICAgICB3ZWJ4ckRl
ZmF1bHRGcmFtZWJ1ZmZlclNjYWxlOiAwLjcsCi0gICAgfTsKLSAgfQotCi0gIC8vIFRoaXMgZnVu
Y3Rpb24gY29udmVydHMgYmV0d2VlbiB0aGUgbWF0cml4IHByb3ZpZGVkIGJ5IHRoZSBXZWJYUiB0
ZXN0IEFQSQotICAvLyBhbmQgdGhlIGludGVybmFsIGRhdGEgcmVwcmVzZW50YXRpb24uCi0gIGdl
dEV5ZShmYWtlWFJWaWV3SW5pdCkgewotICAgIGxldCBmb3YgPSBudWxsOwotCi0gICAgaWYgKGZh
a2VYUlZpZXdJbml0LmZpZWxkT2ZWaWV3KSB7Ci0gICAgICBmb3YgPSB7Ci0gICAgICAgIHVwRGVn
cmVlczogZmFrZVhSVmlld0luaXQuZmllbGRPZlZpZXcudXBEZWdyZWVzLAotICAgICAgICBkb3du
RGVncmVlczogZmFrZVhSVmlld0luaXQuZmllbGRPZlZpZXcuZG93bkRlZ3JlZXMsCi0gICAgICAg
IGxlZnREZWdyZWVzOiBmYWtlWFJWaWV3SW5pdC5maWVsZE9mVmlldy5sZWZ0RGVncmVlcywKLSAg
ICAgICAgcmlnaHREZWdyZWVzOiBmYWtlWFJWaWV3SW5pdC5maWVsZE9mVmlldy5yaWdodERlZ3Jl
ZXMKLSAgICAgIH07Ci0gICAgfSBlbHNlIHsKLSAgICAgIGNvbnN0IG0gPSBmYWtlWFJWaWV3SW5p
dC5wcm9qZWN0aW9uTWF0cml4OwotCi0gICAgICBmdW5jdGlvbiB0b0RlZ3JlZXModGFuKSB7Ci0g
ICAgICAgIHJldHVybiBNYXRoLmF0YW4odGFuKSAqIDE4MCAvIE1hdGguUEk7Ci0gICAgICB9Ci0K
LSAgICAgIGNvbnN0IGxlZnRUYW4gPSAoMSAtIG1bOF0pIC8gbVswXTsKLSAgICAgIGNvbnN0IHJp
Z2h0VGFuID0gKDEgKyBtWzhdKSAvIG1bMF07Ci0gICAgICBjb25zdCB1cFRhbiA9ICgxICsgbVs5
XSkgLyBtWzVdOwotICAgICAgY29uc3QgZG93blRhbiA9ICgxIC0gbVs5XSkgLyBtWzVdOwotCi0g
ICAgICBmb3YgPSB7Ci0gICAgICAgIHVwRGVncmVlczogdG9EZWdyZWVzKHVwVGFuKSwKLSAgICAg
ICAgZG93bkRlZ3JlZXM6IHRvRGVncmVlcyhkb3duVGFuKSwKLSAgICAgICAgbGVmdERlZ3JlZXM6
IHRvRGVncmVlcyhsZWZ0VGFuKSwKLSAgICAgICAgcmlnaHREZWdyZWVzOiB0b0RlZ3JlZXMocmln
aHRUYW4pCi0gICAgICB9OwotICAgIH0KLQotICAgIHJldHVybiB7Ci0gICAgICBmaWVsZE9mVmll
dzogZm92LAotICAgICAgaGVhZEZyb21FeWU6IGNvbXBvc2VHRlhUcmFuc2Zvcm0oZmFrZVhSVmll
d0luaXQudmlld09mZnNldCksCi0gICAgICByZW5kZXJXaWR0aDogZmFrZVhSVmlld0luaXQucmVz
b2x1dGlvbi53aWR0aCwKLSAgICAgIHJlbmRlckhlaWdodDogZmFrZVhSVmlld0luaXQucmVzb2x1
dGlvbi5oZWlnaHQKLSAgICB9OwotICB9Ci0KLSAgc2V0RmVhdHVyZXMoc3VwcG9ydGVkRmVhdHVy
ZXMpIHsKLSAgICBmdW5jdGlvbiBjb252ZXJ0RmVhdHVyZVRvTW9qb20oZmVhdHVyZSkgewotICAg
ICAgaWYgKGZlYXR1cmUgaW4gTW9ja1J1bnRpbWUuZmVhdHVyZVRvTW9qb01hcCkgewotICAgICAg
ICByZXR1cm4gTW9ja1J1bnRpbWUuZmVhdHVyZVRvTW9qb01hcFtmZWF0dXJlXTsKLSAgICAgIH0g
ZWxzZSB7Ci0gICAgICAgIHJldHVybiBkZXZpY2UubW9qb20uWFJTZXNzaW9uRmVhdHVyZS5JTlZB
TElEOwotICAgICAgfQotICAgIH0KLQotICAgIHRoaXMuc3VwcG9ydGVkRmVhdHVyZXNfID0gW107
Ci0KLSAgICBmb3IgKGxldCBpID0gMDsgaSA8IHN1cHBvcnRlZEZlYXR1cmVzLmxlbmd0aDsgaSsr
KSB7Ci0gICAgICBjb25zdCBmZWF0dXJlID0gY29udmVydEZlYXR1cmVUb01vam9tKHN1cHBvcnRl
ZEZlYXR1cmVzW2ldKTsKLSAgICAgIGlmIChmZWF0dXJlICE9PSBkZXZpY2UubW9qb20uWFJTZXNz
aW9uRmVhdHVyZS5JTlZBTElEKSB7Ci0gICAgICAgIHRoaXMuc3VwcG9ydGVkRmVhdHVyZXNfLnB1
c2goZmVhdHVyZSk7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgLy8gVGhlc2UgbWV0aG9kcyBh
cmUgaW50ZW5kZWQgdG8gYmUgdXNlZCBieSBNb2NrWFJJbnB1dFNvdXJjZSBvbmx5LgotICBhZGRJ
bnB1dFNvdXJjZShzb3VyY2UpIHsKLSAgICBpZiAoIXRoaXMuaW5wdXRfc291cmNlc18uaGFzKHNv
dXJjZS5zb3VyY2VfaWRfKSkgewotICAgICAgdGhpcy5pbnB1dF9zb3VyY2VzXy5zZXQoc291cmNl
LnNvdXJjZV9pZF8sIHNvdXJjZSk7Ci0gICAgfQotICB9Ci0KLSAgcmVtb3ZlSW5wdXRTb3VyY2Uo
c291cmNlKSB7Ci0gICAgdGhpcy5pbnB1dF9zb3VyY2VzXy5kZWxldGUoc291cmNlLnNvdXJjZV9p
ZF8pOwotICB9Ci0KLSAgLy8gVGhlc2UgbWV0aG9kcyBhcmUgaW50ZW5kZWQgdG8gYmUgdXNlZCBi
eSBGYWtlWFJBbmNob3JDb250cm9sbGVyIG9ubHkuCi0gIGRlbGV0ZUFuY2hvckNvbnRyb2xsZXIo
Y29udHJvbGxlcklkKSB7Ci0gICAgdGhpcy5hbmNob3JfY29udHJvbGxlcnNfLmRlbGV0ZShjb250
cm9sbGVySWQpOwotICB9Ci0KLSAgLy8gRXh0ZW5zaW9uIHBvaW50IGZvciBub24tc3RhbmRhcmQg
bW9kdWxlcy4KLQotICBfaW5qZWN0QWRkaXRpb25hbEZyYW1lRGF0YShvcHRpb25zLCBmcmFtZURh
dGEpIHsKLSAgfQotCi0gIC8vIE1vam8gZnVuY3Rpb24gaW1wbGVtZW50YXRpb25zLgotCi0gIC8v
IFhSRnJhbWVEYXRhUHJvdmlkZXIgaW1wbGVtZW50YXRpb24uCi0gIGdldEZyYW1lRGF0YShvcHRp
b25zKSB7Ci0gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7Ci0KLSAgICAgIGNv
bnN0IHBvcHVsYXRlUG9zZSA9ICgpID0+IHsKLSAgICAgICAgY29uc3QgbW9qb19zcGFjZV9yZXNl
dCA9IHRoaXMuc2VuZF9tb2pvX3NwYWNlX3Jlc2V0XzsKLSAgICAgICAgdGhpcy5zZW5kX21vam9f
c3BhY2VfcmVzZXRfID0gZmFsc2U7Ci0KLSAgICAgICAgY29uc3Qgc3RhZ2VfcGFyYW1ldGVyc191
cGRhdGVkID0gdGhpcy5zdGFnZVBhcmFtZXRlcnNVcGRhdGVkXzsKLSAgICAgICAgdGhpcy5zdGFn
ZVBhcmFtZXRlcnNVcGRhdGVkXyA9IGZhbHNlOwotICAgICAgICBpZiAodGhpcy5wb3NlXykgewot
ICAgICAgICAgIHRoaXMucG9zZV8ucG9zZUluZGV4Kys7Ci0gICAgICAgIH0KLQotICAgICAgICAv
LyBTZXR0aW5nIHRoZSBpbnB1dF9zdGF0ZSB0byBudWxsIHRlc3RzIGEgc2xpZ2h0bHkgZGlmZmVy
ZW50IHBhdGggdGhhbgotICAgICAgICAvLyB0aGUgYnJvd3NlciB0ZXN0cyB3aGVyZSBpZiB0aGUg
bGFzdCBpbnB1dCBzb3VyY2UgaXMgcmVtb3ZlZCwgdGhlIGRldmljZQotICAgICAgICAvLyBjb2Rl
IGFsd2F5cyBzZW5kcyB1cCBhbiBlbXB0eSBhcnJheSwgYnV0IGl0J3MgYWxzbyB2YWxpZCBtb2pv
bSB0byBzZW5kCi0gICAgICAgIC8vIHVwIGEgbnVsbCBhcnJheS4KLSAgICAgICAgbGV0IGlucHV0
X3N0YXRlID0gbnVsbDsKLSAgICAgICAgaWYgKHRoaXMuaW5wdXRfc291cmNlc18uc2l6ZSA+IDAp
IHsKLSAgICAgICAgICBpbnB1dF9zdGF0ZSA9IFtdOwotICAgICAgICAgIGZvciAoY29uc3QgaW5w
dXRfc291cmNlIG9mIHRoaXMuaW5wdXRfc291cmNlc18udmFsdWVzKCkpIHsKLSAgICAgICAgICAg
IGlucHV0X3N0YXRlLnB1c2goaW5wdXRfc291cmNlLmdldElucHV0U291cmNlU3RhdGUoKSk7Ci0g
ICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgY29uc3QgZnJhbWVEYXRhID0gewotICAg
ICAgICAgIHBvc2U6IHRoaXMucG9zZV8sCi0gICAgICAgICAgbW9qb1NwYWNlUmVzZXQ6IG1vam9f
c3BhY2VfcmVzZXQsCi0gICAgICAgICAgaW5wdXRTdGF0ZTogaW5wdXRfc3RhdGUsCi0gICAgICAg
ICAgdGltZURlbHRhOiB7Ci0gICAgICAgICAgICAvLyB3aW5kb3cucGVyZm9ybWFuY2Uubm93KCkg
aXMgaW4gbWlsbGlzZWNvbmRzLCBzbyBjb252ZXJ0IHRvIG1pY3Jvc2Vjb25kcy4KLSAgICAgICAg
ICAgIG1pY3Jvc2Vjb25kczogd2luZG93LnBlcmZvcm1hbmNlLm5vdygpICogMTAwMCwKLSAgICAg
ICAgICB9LAotICAgICAgICAgIGZyYW1lSWQ6IHRoaXMubmV4dF9mcmFtZV9pZF8sCi0gICAgICAg
ICAgYnVmZmVySG9sZGVyOiBudWxsLAotICAgICAgICAgIGJ1ZmZlclNpemU6IHt9LAotICAgICAg
ICAgIHN0YWdlUGFyYW1ldGVyczogdGhpcy5zdGFnZVBhcmFtZXRlcnNfLAotICAgICAgICAgIHN0
YWdlUGFyYW1ldGVyc1VwZGF0ZWQ6IHN0YWdlX3BhcmFtZXRlcnNfdXBkYXRlZCwKLSAgICAgICAg
fTsKLQotICAgICAgICB0aGlzLm5leHRfZnJhbWVfaWRfKys7Ci0KLSAgICAgICAgdGhpcy5fY2Fs
Y3VsYXRlSGl0VGVzdFJlc3VsdHMoZnJhbWVEYXRhKTsKLQotICAgICAgICB0aGlzLl9jYWxjdWxh
dGVBbmNob3JJbmZvcm1hdGlvbihmcmFtZURhdGEpOwotCi0gICAgICAgIHRoaXMuX2luamVjdEFk
ZGl0aW9uYWxGcmFtZURhdGEob3B0aW9ucywgZnJhbWVEYXRhKTsKLQotICAgICAgICByZXNvbHZl
KHtmcmFtZURhdGF9KTsKLSAgICAgIH07Ci0KLSAgICAgIGlmKHRoaXMuc2Vzc2lvbk9wdGlvbnNf
Lm1vZGUgPT0gZGV2aWNlLm1vam9tLlhSU2Vzc2lvbk1vZGUua0lubGluZSkgewotICAgICAgICAv
LyBJbmxpbmUgc2Vzc2lvbnMgc2hvdWxkIG5vdCBoYXZlIGEgZGVsYXkgaW50cm9kdWNlZCBzaW5j
ZSBpdCBjYXVzZXMgdGhlbQotICAgICAgICAvLyB0byBtaXNzIGEgdnN5bmMgYmxpbmstc2lkZSBh
bmQgZGVsYXlzIHByb3BhZ2F0aW9uIG9mIGNoYW5nZXMgdGhhdCBoYXBwZW5lZAotICAgICAgICAv
LyB3aXRoaW4gYSByQUZjYiBieSBvbmUgZnJhbWUgKGUuZy4gc2V0Vmlld2VyT3JpZ2luKCkgY2Fs
bHMgd291bGQgdGFrZSAyIGZyYW1lcwotICAgICAgICAvLyB0byBwcm9wYWdhdGUpLgotICAgICAg
ICBwb3B1bGF0ZVBvc2UoKTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIC8vIEZvciBpbW1lcml2
ZSBzZXNzaW9ucywgYWRkIGFkZGl0aW9uYWwgZGVsYXkgdG8gYWxsb3cgZm9yIGFuY2hvciBjcmVh
dGlvbgotICAgICAgICAvLyBwcm9taXNlcyB0byBydW4uCi0gICAgICAgIHNldFRpbWVvdXQocG9w
dWxhdGVQb3NlLCAzKTsgIC8vIG5vdGU6IGFjY29yZGluZyB0byBNRE4sIHRoZSB0aW1lb3V0IGlz
IG5vdCBleGFjdAotICAgICAgfQotICAgIH0pOwotICB9Ci0KLSAgZ2V0RW52aXJvbm1lbnRJbnRl
Z3JhdGlvblByb3ZpZGVyKGVudmlyb25tZW50UHJvdmlkZXJSZXF1ZXN0KSB7Ci0gICAgdGhpcy5l
bnZpcm9ubWVudFByb3ZpZGVyQmluZGluZ18gPSBuZXcgbW9qby5Bc3NvY2lhdGVkQmluZGluZygK
LSAgICAgICAgZGV2aWNlLm1vam9tLlhSRW52aXJvbm1lbnRJbnRlZ3JhdGlvblByb3ZpZGVyLCB0
aGlzLAotICAgICAgICBlbnZpcm9ubWVudFByb3ZpZGVyUmVxdWVzdCk7Ci0gIH0KLQotICAvLyBO
b3RlIHRoYXQgaWYgZ2V0RW52aXJvbm1lbnRQcm92aWRlciBoYXNuJ3QgZmluaXNoZWQgcnVubmlu
ZyB5ZXQgdGhpcyB3aWxsCi0gIC8vIGJlIHVuZGVmaW5lZC4gSXQncyByZWNvbW1lbmRlZCB0aGF0
IHlvdSBhbGxvdyBhIHN1Y2Nlc3NmdWwgdGFzayB0byBwb3N0Ci0gIC8vIGZpcnN0IGJlZm9yZSBh
dHRlbXB0aW5nIHRvIGNsb3NlLgotICBjbG9zZUVudmlyb25tZW50SW50ZWdyYXRpb25Qcm92aWRl
cigpIHsKLSAgICB0aGlzLmVudmlyb25tZW50UHJvdmlkZXJCaW5kaW5nXy5jbG9zZSgpOwotICB9
Ci0KLSAgY2xvc2VEYXRhUHJvdmlkZXIoKSB7Ci0gICAgdGhpcy5kYXRhUHJvdmlkZXJCaW5kaW5n
Xy5jbG9zZSgpOwotICAgIHRoaXMuc2Vzc2lvbk9wdGlvbnNfID0gbnVsbDsKLSAgfQotCi0gIC8v
IFhSRW52aXJvbm1lbnRJbnRlZ3JhdGlvblByb3ZpZGVyIGltcGxlbWVudGF0aW9uOgotICBzdWJz
Y3JpYmVUb0hpdFRlc3QobmF0aXZlT3JpZ2luSW5mb3JtYXRpb24sIGVudGl0eVR5cGVzLCByYXkp
IHsKLSAgICBpZiAoIXRoaXMuc3VwcG9ydGVkTW9kZXNfLmluY2x1ZGVzKGRldmljZS5tb2pvbS5Y
UlNlc3Npb25Nb2RlLmtJbW1lcnNpdmVBcikpIHsKLSAgICAgIC8vIFJlamVjdCBvdXRzaWRlIG9m
IEFSLgotICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh7Ci0gICAgICAgIHJlc3VsdCA6IGRl
dmljZS5tb2pvbS5TdWJzY3JpYmVUb0hpdFRlc3RSZXN1bHQuRkFJTFVSRV9HRU5FUklDLAotICAg
ICAgICBzdWJzY3JpcHRpb25JZCA6IDAKLSAgICAgIH0pOwotICAgIH0KLQotICAgIGlmICghdGhp
cy5fbmF0aXZlT3JpZ2luS25vd24obmF0aXZlT3JpZ2luSW5mb3JtYXRpb24pKSB7Ci0gICAgICBy
ZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHsKLSAgICAgICAgcmVzdWx0IDogZGV2aWNlLm1vam9tLlN1
YnNjcmliZVRvSGl0VGVzdFJlc3VsdC5GQUlMVVJFX0dFTkVSSUMsCi0gICAgICAgIHN1YnNjcmlw
dGlvbklkIDogMAotICAgICAgfSk7Ci0gICAgfQotCi0gICAgLy8gU3RvcmUgdGhlIHN1YnNjcmlw
dGlvbiBpbmZvcm1hdGlvbiBhcy1pczoKLSAgICBjb25zdCBpZCA9IHRoaXMubmV4dF9oaXRfdGVz
dF9pZF8rKzsKLSAgICB0aGlzLmhpdFRlc3RTdWJzY3JpcHRpb25zXy5zZXQoaWQsIHsgbmF0aXZl
T3JpZ2luSW5mb3JtYXRpb24sIGVudGl0eVR5cGVzLCByYXkgfSk7Ci0KLSAgICByZXR1cm4gUHJv
bWlzZS5yZXNvbHZlKHsKLSAgICAgIHJlc3VsdCA6IGRldmljZS5tb2pvbS5TdWJzY3JpYmVUb0hp
dFRlc3RSZXN1bHQuU1VDQ0VTUywKLSAgICAgIHN1YnNjcmlwdGlvbklkIDogaWQKLSAgICB9KTsK
LSAgfQotCi0gIHN1YnNjcmliZVRvSGl0VGVzdEZvclRyYW5zaWVudElucHV0KHByb2ZpbGVOYW1l
LCBlbnRpdHlUeXBlcywgcmF5KXsKLSAgICBpZiAoIXRoaXMuc3VwcG9ydGVkTW9kZXNfLmluY2x1
ZGVzKGRldmljZS5tb2pvbS5YUlNlc3Npb25Nb2RlLmtJbW1lcnNpdmVBcikpIHsKLSAgICAgIC8v
IFJlamVjdCBvdXRzaWRlIG9mIEFSLgotICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh7Ci0g
ICAgICAgIHJlc3VsdCA6IGRldmljZS5tb2pvbS5TdWJzY3JpYmVUb0hpdFRlc3RSZXN1bHQuRkFJ
TFVSRV9HRU5FUklDLAotICAgICAgICBzdWJzY3JpcHRpb25JZCA6IDAKLSAgICAgIH0pOwotICAg
IH0KLQotICAgIC8vIFN0b3JlIHRoZSBzdWJzY3JpcHRpb24gaW5mb3JtYXRpb24gYXMtaXM6Ci0g
ICAgY29uc3QgaWQgPSB0aGlzLm5leHRfaGl0X3Rlc3RfaWRfKys7Ci0gICAgdGhpcy50cmFuc2ll
bnRIaXRUZXN0U3Vic2NyaXB0aW9uc18uc2V0KGlkLCB7IHByb2ZpbGVOYW1lLCBlbnRpdHlUeXBl
cywgcmF5IH0pOwotCi0gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh7Ci0gICAgICByZXN1bHQg
OiBkZXZpY2UubW9qb20uU3Vic2NyaWJlVG9IaXRUZXN0UmVzdWx0LlNVQ0NFU1MsCi0gICAgICBz
dWJzY3JpcHRpb25JZCA6IGlkCi0gICAgfSk7Ci0gIH0KLQotICBjcmVhdGVBbmNob3IobmF0aXZl
T3JpZ2luSW5mb3JtYXRpb24sIG5hdGl2ZU9yaWdpbkZyb21BbmNob3IpIHsKLSAgICByZXR1cm4g
bmV3IFByb21pc2UoKHJlc29sdmUpID0+IHsKLSAgICAgIGlmKHRoaXMuYW5jaG9yX2NyZWF0aW9u
X2NhbGxiYWNrXyA9PSBudWxsKSB7Ci0gICAgICAgIHJlc29sdmUoewotICAgICAgICAgIHJlc3Vs
dCA6IGRldmljZS5tb2pvbS5DcmVhdGVBbmNob3JSZXN1bHQuRkFJTFVSRSwKLSAgICAgICAgICBh
bmNob3JJZCA6IDAKLSAgICAgICAgfSk7Ci0KLSAgICAgICAgcmV0dXJuOwotICAgICAgfQotCi0g
ICAgICBjb25zdCBtb2pvRnJvbU5hdGl2ZU9yaWdpbiA9IHRoaXMuX2dldE1vam9Gcm9tTmF0aXZl
T3JpZ2luKG5hdGl2ZU9yaWdpbkluZm9ybWF0aW9uKTsKLSAgICAgIGlmKG1vam9Gcm9tTmF0aXZl
T3JpZ2luID09IG51bGwpIHsKLSAgICAgICAgcmVzb2x2ZSh7Ci0gICAgICAgICAgcmVzdWx0IDog
ZGV2aWNlLm1vam9tLkNyZWF0ZUFuY2hvclJlc3VsdC5GQUlMVVJFLAotICAgICAgICAgIGFuY2hv
cklkIDogMAotICAgICAgICB9KTsKLQotICAgICAgICByZXR1cm47Ci0gICAgICB9Ci0KLSAgICAg
IGNvbnN0IG1vam9Gcm9tQW5jaG9yID0gWFJNYXRoSGVscGVyLm11bDR4NChtb2pvRnJvbU5hdGl2
ZU9yaWdpbiwgbmF0aXZlT3JpZ2luRnJvbUFuY2hvcik7Ci0KLSAgICAgIGNvbnN0IGFuY2hvckNy
ZWF0aW9uUGFyYW1ldGVycyA9IHsKLSAgICAgICAgcmVxdWVzdGVkQW5jaG9yT3JpZ2luOiBtb2pv
RnJvbUFuY2hvciwKLSAgICAgICAgaXNBdHRhY2hlZFRvRW50aXR5OiBmYWxzZSwKLSAgICAgIH07
Ci0KLSAgICAgIGNvbnN0IGFuY2hvckNvbnRyb2xsZXIgPSBuZXcgRmFrZVhSQW5jaG9yQ29udHJv
bGxlcigpOwotCi0gICAgICB0aGlzLmFuY2hvcl9jcmVhdGlvbl9jYWxsYmFja18oYW5jaG9yQ3Jl
YXRpb25QYXJhbWV0ZXJzLCBhbmNob3JDb250cm9sbGVyKQotICAgICAgICAgICAgLnRoZW4oKHJl
c3VsdCkgPT4gewotICAgICAgICAgICAgICBpZihyZXN1bHQpIHsKLSAgICAgICAgICAgICAgICAv
LyBJZiB0aGUgdGVzdCBhbGxvd2VkIHRoZSBhbmNob3IgY3JlYXRpb24sCi0gICAgICAgICAgICAg
ICAgLy8gc3RvcmUgdGhlIGFuY2hvciBjb250cm9sbGVyICYgcmV0dXJuIHN1Y2Nlc3MuCi0KLSAg
ICAgICAgICAgICAgICBjb25zdCBhbmNob3JfaWQgPSB0aGlzLm5leHRfYW5jaG9yX2lkXzsKLSAg
ICAgICAgICAgICAgICB0aGlzLm5leHRfYW5jaG9yX2lkXysrOwotCi0gICAgICAgICAgICAgICAg
dGhpcy5hbmNob3JfY29udHJvbGxlcnNfLnNldChhbmNob3JfaWQsIGFuY2hvckNvbnRyb2xsZXIp
OwotICAgICAgICAgICAgICAgIGFuY2hvckNvbnRyb2xsZXIuZGV2aWNlID0gdGhpczsKLSAgICAg
ICAgICAgICAgICBhbmNob3JDb250cm9sbGVyLmlkID0gYW5jaG9yX2lkOwotCi0gICAgICAgICAg
ICAgICAgcmVzb2x2ZSh7Ci0gICAgICAgICAgICAgICAgICByZXN1bHQgOiBkZXZpY2UubW9qb20u
Q3JlYXRlQW5jaG9yUmVzdWx0LlNVQ0NFU1MsCi0gICAgICAgICAgICAgICAgICBhbmNob3JJZCA6
IGFuY2hvcl9pZAotICAgICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgICB9IGVsc2Ugewot
ICAgICAgICAgICAgICAgIC8vIFRoZSB0ZXN0IGhhcyByZWplY3RlZCBhbmNob3IgY3JlYXRpb24u
Ci0gICAgICAgICAgICAgICAgcmVzb2x2ZSh7Ci0gICAgICAgICAgICAgICAgICByZXN1bHQgOiBk
ZXZpY2UubW9qb20uQ3JlYXRlQW5jaG9yUmVzdWx0LkZBSUxVUkUsCi0gICAgICAgICAgICAgICAg
ICBhbmNob3JJZCA6IDAKLSAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgfSkKLSAgICAgICAgICAgIC5jYXRjaCgoKSA9PiB7Ci0gICAgICAgICAgICAgIC8v
IFRoZSB0ZXN0IHRocmV3IGFuIGVycm9yLCB0cmVhdCBhbmNob3IgY3JlYXRpb24gYXMgZmFpbGVk
LgotICAgICAgICAgICAgICByZXNvbHZlKHsKLSAgICAgICAgICAgICAgICByZXN1bHQgOiBkZXZp
Y2UubW9qb20uQ3JlYXRlQW5jaG9yUmVzdWx0LkZBSUxVUkUsCi0gICAgICAgICAgICAgICAgYW5j
aG9ySWQgOiAwCi0gICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgfSk7Ci0gICAgfSk7Ci0g
IH0KLQotICBjcmVhdGVQbGFuZUFuY2hvcihwbGFuZUZyb21BbmNob3IsIHBsYW5lSWQpIHsKLSAg
ICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHsKLQotICAgICAgLy8gTm90IHN1cHBv
cnRlZCB5ZXQuCi0KLSAgICAgIHJlc29sdmUoewotICAgICAgICByZXN1bHQgOiBkZXZpY2UubW9q
b20uQ3JlYXRlQW5jaG9yUmVzdWx0LkZBSUxVUkUsCi0gICAgICAgIGFuY2hvcklkIDogMAotICAg
ICAgfSk7Ci0gICAgfSk7Ci0gIH0KLQotICAvLyBVdGlsaXR5IGZ1bmN0aW9uCi0gIHJlcXVlc3RS
dW50aW1lU2Vzc2lvbihzZXNzaW9uT3B0aW9ucykgewotICAgIHJldHVybiB0aGlzLnJ1bnRpbWVT
dXBwb3J0c1Nlc3Npb24oc2Vzc2lvbk9wdGlvbnMpLnRoZW4oKHJlc3VsdCkgPT4gewotICAgICAg
Ly8gVGhlIEphdmFTY3JpcHQgYmluZGluZ3MgY29udmVydCBjX3N0eWxlX25hbWVzIHRvIGNhbWVs
Q2FzZSBuYW1lcy4KLSAgICAgIGNvbnN0IG9wdGlvbnMgPSBuZXcgZGV2aWNlLm1vam9tLlhSUHJl
c2VudGF0aW9uVHJhbnNwb3J0T3B0aW9ucygpOwotICAgICAgb3B0aW9ucy50cmFuc3BvcnRNZXRo
b2QgPQotICAgICAgICAgIGRldmljZS5tb2pvbS5YUlByZXNlbnRhdGlvblRyYW5zcG9ydE1ldGhv
ZC5TVUJNSVRfQVNfTUFJTEJPWF9IT0xERVI7Ci0gICAgICBvcHRpb25zLndhaXRGb3JUcmFuc2Zl
ck5vdGlmaWNhdGlvbiA9IHRydWU7Ci0gICAgICBvcHRpb25zLndhaXRGb3JSZW5kZXJOb3RpZmlj
YXRpb24gPSB0cnVlOwotCi0gICAgICBsZXQgc3VibWl0X2ZyYW1lX3Npbms7Ci0gICAgICBpZiAo
cmVzdWx0LnN1cHBvcnRzU2Vzc2lvbikgewotICAgICAgICBzdWJtaXRfZnJhbWVfc2luayA9IHsK
LSAgICAgICAgICBjbGllbnRSZWNlaXZlcjogdGhpcy5wcmVzZW50YXRpb25fcHJvdmlkZXJfLmdl
dENsaWVudFJlY2VpdmVyKCksCi0gICAgICAgICAgcHJvdmlkZXI6IHRoaXMucHJlc2VudGF0aW9u
X3Byb3ZpZGVyXy5iaW5kUHJvdmlkZXIoc2Vzc2lvbk9wdGlvbnMpLAotICAgICAgICAgIHRyYW5z
cG9ydE9wdGlvbnM6IG9wdGlvbnMKLSAgICAgICAgfTsKLQotICAgICAgICBjb25zdCBkYXRhUHJv
dmlkZXJQdHIgPSBuZXcgZGV2aWNlLm1vam9tLlhSRnJhbWVEYXRhUHJvdmlkZXJQdHIoKTsKLSAg
ICAgICAgY29uc3QgZGF0YVByb3ZpZGVyUmVxdWVzdCA9IG1vam8ubWFrZVJlcXVlc3QoZGF0YVBy
b3ZpZGVyUHRyKTsKLSAgICAgICAgdGhpcy5kYXRhUHJvdmlkZXJCaW5kaW5nXyA9IG5ldyBtb2pv
LkJpbmRpbmcoCi0gICAgICAgICAgICBkZXZpY2UubW9qb20uWFJGcmFtZURhdGFQcm92aWRlciwg
dGhpcywgZGF0YVByb3ZpZGVyUmVxdWVzdCk7Ci0gICAgICAgIHRoaXMuc2Vzc2lvbk9wdGlvbnNf
ID0gc2Vzc2lvbk9wdGlvbnM7Ci0KLSAgICAgICAgY29uc3QgY2xpZW50UmVjZWl2ZXIgPSBtb2pv
Lm1ha2VSZXF1ZXN0KHRoaXMuc2Vzc2lvbkNsaWVudF8pOwotCi0gICAgICAgIGNvbnN0IGVuYWJs
ZWRfZmVhdHVyZXMgPSBbXTsKLSAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzZXNzaW9uT3B0
aW9ucy5yZXF1aXJlZEZlYXR1cmVzLmxlbmd0aDsgaSsrKSB7Ci0gICAgICAgICAgaWYgKHRoaXMu
c3VwcG9ydGVkRmVhdHVyZXNfLmluZGV4T2Yoc2Vzc2lvbk9wdGlvbnMucmVxdWlyZWRGZWF0dXJl
c1tpXSkgIT09IC0xKSB7Ci0gICAgICAgICAgICBlbmFibGVkX2ZlYXR1cmVzLnB1c2goc2Vzc2lv
bk9wdGlvbnMucmVxdWlyZWRGZWF0dXJlc1tpXSk7Ci0gICAgICAgICAgfSBlbHNlIHsKLSAgICAg
ICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoe3Nlc3Npb246IG51bGx9KTsKLSAgICAgICAg
ICB9Ci0gICAgICAgIH0KLQotICAgICAgICBmb3IgKGxldCBpID0wOyBpIDwgc2Vzc2lvbk9wdGlv
bnMub3B0aW9uYWxGZWF0dXJlcy5sZW5ndGg7IGkrKykgewotICAgICAgICAgIGlmICh0aGlzLnN1
cHBvcnRlZEZlYXR1cmVzXy5pbmRleE9mKHNlc3Npb25PcHRpb25zLm9wdGlvbmFsRmVhdHVyZXNb
aV0pICE9PSAtMSkgewotICAgICAgICAgICAgZW5hYmxlZF9mZWF0dXJlcy5wdXNoKHNlc3Npb25P
cHRpb25zLm9wdGlvbmFsRmVhdHVyZXNbaV0pOwotICAgICAgICAgIH0KLSAgICAgICAgfQotCi0g
ICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoewotICAgICAgICAgIHNlc3Npb246IHsKLSAg
ICAgICAgICAgIHN1Ym1pdEZyYW1lU2luazogc3VibWl0X2ZyYW1lX3NpbmssCi0gICAgICAgICAg
ICBkYXRhUHJvdmlkZXI6IGRhdGFQcm92aWRlclB0ciwKLSAgICAgICAgICAgIGNsaWVudFJlY2Vp
dmVyOiBjbGllbnRSZWNlaXZlciwKLSAgICAgICAgICAgIGRpc3BsYXlJbmZvOiB0aGlzLmRpc3Bs
YXlJbmZvXywKLSAgICAgICAgICAgIGVuYWJsZWRGZWF0dXJlczogZW5hYmxlZF9mZWF0dXJlcywK
LSAgICAgICAgICB9Ci0gICAgICAgIH0pOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgcmV0dXJu
IFByb21pc2UucmVzb2x2ZSh7c2Vzc2lvbjogbnVsbH0pOwotICAgICAgfQotICAgIH0pOwotICB9
Ci0KLSAgcnVudGltZVN1cHBvcnRzU2Vzc2lvbihvcHRpb25zKSB7Ci0gICAgcmV0dXJuIFByb21p
c2UucmVzb2x2ZSh7Ci0gICAgICBzdXBwb3J0c1Nlc3Npb246IHRoaXMuc3VwcG9ydGVkTW9kZXNf
LmluY2x1ZGVzKG9wdGlvbnMubW9kZSkKLSAgICB9KTsKLSAgfQotCi0gIC8vIFByaXZhdGUgZnVu
Y3Rpb25zIC0gdXRpbGl0aWVzOgotICBfbmF0aXZlT3JpZ2luS25vd24obmF0aXZlT3JpZ2luSW5m
b3JtYXRpb24pewotCi0gICAgaWYgKG5hdGl2ZU9yaWdpbkluZm9ybWF0aW9uLiR0YWcgPT0gZGV2
aWNlLm1vam9tLlhSTmF0aXZlT3JpZ2luSW5mb3JtYXRpb24uVGFncy5pbnB1dFNvdXJjZUlkKSB7
Ci0gICAgICBpZiAoIXRoaXMuaW5wdXRfc291cmNlc18uaGFzKG5hdGl2ZU9yaWdpbkluZm9ybWF0
aW9uLmlucHV0U291cmNlSWQpKSB7Ci0gICAgICAgIC8vIFVua25vd24gaW5wdXQgc291cmNlLgot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICB9Ci0KLSAgICAgIHJldHVybiB0cnVlOwotICAg
IH0gZWxzZSBpZiAobmF0aXZlT3JpZ2luSW5mb3JtYXRpb24uJHRhZyA9PSBkZXZpY2UubW9qb20u
WFJOYXRpdmVPcmlnaW5JbmZvcm1hdGlvbi5UYWdzLnJlZmVyZW5jZVNwYWNlVHlwZSkgewotICAg
ICAgLy8gQm91bmRlZF9mbG9vciAmIHVuYm91bmRlZCByZWYgc3BhY2VzIGFyZSBub3QgeWV0IHN1
cHBvcnRlZCBmb3IgQVI6Ci0gICAgICBpZiAobmF0aXZlT3JpZ2luSW5mb3JtYXRpb24ucmVmZXJl
bmNlU3BhY2VUeXBlID09IGRldmljZS5tb2pvbS5YUlJlZmVyZW5jZVNwYWNlVHlwZS5rVW5ib3Vu
ZGVkCi0gICAgICAgfHwgbmF0aXZlT3JpZ2luSW5mb3JtYXRpb24ucmVmZXJlbmNlU3BhY2VUeXBl
ID09IGRldmljZS5tb2pvbS5YUlJlZmVyZW5jZVNwYWNlVHlwZS5rQm91bmRlZEZsb3IpIHsKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgfQotCi0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9
IGVsc2UgewotICAgICAgLy8gUGxhbmVzIGFuZCBhbmNob3JzIGFyZSBub3QgeWV0IHN1cHBvcnRl
ZCBieSB0aGUgbW9jayBpbnRlcmZhY2UuCi0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICB9
Ci0KLSAgLy8gUHJpdmF0ZSBmdW5jdGlvbnMgLSBhbmNob3JzIGltcGxlbWVudGF0aW9uOgotCi0g
IC8vIE1vZGlmaWVzIHBhc3NlZCBpbiBmcmFtZURhdGEgdG8gYWRkIGFuY2hvciBpbmZvcm1hdGlv
bi4KLSAgX2NhbGN1bGF0ZUFuY2hvckluZm9ybWF0aW9uKGZyYW1lRGF0YSkgewotICAgIGlmICgh
dGhpcy5zdXBwb3J0ZWRNb2Rlc18uaW5jbHVkZXMoZGV2aWNlLm1vam9tLlhSU2Vzc2lvbk1vZGUu
a0ltbWVyc2l2ZUFyKSkgewotICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGZyYW1lRGF0YS5h
bmNob3JzRGF0YSA9IG5ldyBkZXZpY2UubW9qb20uWFJBbmNob3JzRGF0YSgpOwotICAgIGZyYW1l
RGF0YS5hbmNob3JzRGF0YS5hbGxBbmNob3JzSWRzID0gW107Ci0gICAgZnJhbWVEYXRhLmFuY2hv
cnNEYXRhLnVwZGF0ZWRBbmNob3JzRGF0YSA9IFtdOwotCi0gICAgZm9yKGNvbnN0IFtpZCwgY29u
dHJvbGxlcl0gb2YgdGhpcy5hbmNob3JfY29udHJvbGxlcnNfKSB7Ci0gICAgICBmcmFtZURhdGEu
YW5jaG9yc0RhdGEuYWxsQW5jaG9yc0lkcy5wdXNoKGlkKTsKLQotICAgICAgLy8gU2VuZCB0aGUg
ZW50aXJlIGFuY2hvciBkYXRhIG92ZXIgaWYgdGhlcmUgd2FzIGEgY2hhbmdlIHNpbmNlIGxhc3Qg
R2V0RnJhbWVEYXRhKCkuCi0gICAgICBpZihjb250cm9sbGVyLmRpcnR5KSB7Ci0gICAgICAgIGNv
bnN0IGFuY2hvckRhdGEgPSBuZXcgZGV2aWNlLm1vam9tLlhSQW5jaG9yRGF0YSgpOwotICAgICAg
ICBhbmNob3JEYXRhLmlkID0gaWQ7Ci0gICAgICAgIGlmKCFjb250cm9sbGVyLnBhdXNlZCkgewot
ICAgICAgICAgIGFuY2hvckRhdGEubW9qb0Zyb21BbmNob3IgPSBYUk1hdGhIZWxwZXIuZGVjb21w
b3NlUmlnaWRUcmFuc2Zvcm0oCi0gICAgICAgICAgICBjb250cm9sbGVyLmdldEFuY2hvck9yaWdp
bigpKTsKLSAgICAgICAgfQotCi0gICAgICAgIGNvbnRyb2xsZXIubWFya1Byb2Nlc3NlZCgpOwot
Ci0gICAgICAgIGZyYW1lRGF0YS5hbmNob3JzRGF0YS51cGRhdGVkQW5jaG9yc0RhdGEucHVzaChh
bmNob3JEYXRhKTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICAvLyBQcml2YXRlIGZ1bmN0aW9u
cyAtIGhpdCB0ZXN0IGltcGxlbWVudGF0aW9uOgotCi0gIC8vIE1vZGlmaWVzIHBhc3NlZCBpbiBm
cmFtZURhdGEgdG8gYWRkIGhpdCB0ZXN0IHJlc3VsdHMuCi0gIF9jYWxjdWxhdGVIaXRUZXN0UmVz
dWx0cyhmcmFtZURhdGEpIHsKLSAgICBpZiAoIXRoaXMuc3VwcG9ydGVkTW9kZXNfLmluY2x1ZGVz
KGRldmljZS5tb2pvbS5YUlNlc3Npb25Nb2RlLmtJbW1lcnNpdmVBcikpIHsKLSAgICAgIHJldHVy
bjsKLSAgICB9Ci0KLSAgICBmcmFtZURhdGEuaGl0VGVzdFN1YnNjcmlwdGlvblJlc3VsdHMgPSBu
ZXcgZGV2aWNlLm1vam9tLlhSSGl0VGVzdFN1YnNjcmlwdGlvblJlc3VsdHNEYXRhKCk7Ci0gICAg
ZnJhbWVEYXRhLmhpdFRlc3RTdWJzY3JpcHRpb25SZXN1bHRzLnJlc3VsdHMgPSBbXTsKLSAgICBm
cmFtZURhdGEuaGl0VGVzdFN1YnNjcmlwdGlvblJlc3VsdHMudHJhbnNpZW50SW5wdXRSZXN1bHRz
ID0gW107Ci0KLSAgICBpZiAoIXRoaXMud29ybGRfKSB7Ci0gICAgICByZXR1cm47Ci0gICAgfQot
Ci0gICAgLy8gTm9uLXRyYW5zaWVudCBoaXQgdGVzdDoKLSAgICBmb3IgKGNvbnN0IFtpZCwgc3Vi
c2NyaXB0aW9uXSBvZiB0aGlzLmhpdFRlc3RTdWJzY3JpcHRpb25zXykgewotICAgICAgY29uc3Qg
bW9qb19mcm9tX25hdGl2ZV9vcmlnaW4gPSB0aGlzLl9nZXRNb2pvRnJvbU5hdGl2ZU9yaWdpbihz
dWJzY3JpcHRpb24ubmF0aXZlT3JpZ2luSW5mb3JtYXRpb24pOwotICAgICAgaWYgKCFtb2pvX2Zy
b21fbmF0aXZlX29yaWdpbikgY29udGludWU7Ci0KLSAgICAgIGNvbnN0IFttb2pvX3JheV9vcmln
aW4sIG1vam9fcmF5X2RpcmVjdGlvbl0gPSB0aGlzLl90cmFuc2Zvcm1SYXlUb01vam9TcGFjZSgK
LSAgICAgICAgc3Vic2NyaXB0aW9uLnJheSwKLSAgICAgICAgbW9qb19mcm9tX25hdGl2ZV9vcmln
aW4KLSAgICAgICk7Ci0KLSAgICAgIGNvbnN0IHJlc3VsdHMgPSB0aGlzLl9oaXRUZXN0V29ybGQo
bW9qb19yYXlfb3JpZ2luLCBtb2pvX3JheV9kaXJlY3Rpb24sIHN1YnNjcmlwdGlvbi5lbnRpdHlU
eXBlcyk7Ci0KLSAgICAgIGNvbnN0IHJlc3VsdCA9IG5ldyBkZXZpY2UubW9qb20uWFJIaXRUZXN0
U3Vic2NyaXB0aW9uUmVzdWx0RGF0YSgpOwotICAgICAgcmVzdWx0LnN1YnNjcmlwdGlvbklkID0g
aWQ7Ci0gICAgICByZXN1bHQuaGl0VGVzdFJlc3VsdHMgPSByZXN1bHRzOwotCi0gICAgICBmcmFt
ZURhdGEuaGl0VGVzdFN1YnNjcmlwdGlvblJlc3VsdHMucmVzdWx0cy5wdXNoKHJlc3VsdCk7Ci0g
ICAgfQotCi0gICAgLy8gVHJhbnNpZW50IGhpdCB0ZXN0OgotICAgIGNvbnN0IG1vam9fZnJvbV92
aWV3ZXIgPSB0aGlzLl9nZXRNb2pvRnJvbVZpZXdlcigpOwotCi0gICAgZm9yIChjb25zdCBbaWQs
IHN1YnNjcmlwdGlvbl0gb2YgdGhpcy50cmFuc2llbnRIaXRUZXN0U3Vic2NyaXB0aW9uc18pIHsK
LSAgICAgIGNvbnN0IHJlc3VsdCA9IG5ldyBkZXZpY2UubW9qb20uWFJIaXRUZXN0VHJhbnNpZW50
SW5wdXRTdWJzY3JpcHRpb25SZXN1bHREYXRhKCk7Ci0gICAgICByZXN1bHQuc3Vic2NyaXB0aW9u
SWQgPSBpZDsKLSAgICAgIHJlc3VsdC5pbnB1dFNvdXJjZUlkVG9IaXRUZXN0UmVzdWx0cyA9IG5l
dyBNYXAoKTsKLQotICAgICAgLy8gRmluZCBhbGwgaW5wdXQgc291cmNlcyB0aGF0IG1hdGNoIHRo
ZSBwcm9maWxlIG5hbWU6Ci0gICAgICBjb25zdCBtYXRjaGluZ19pbnB1dF9zb3VyY2VzID0gQXJy
YXkuZnJvbSh0aGlzLmlucHV0X3NvdXJjZXNfLnZhbHVlcygpKQotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuZmlsdGVyKGlucHV0X3NvdXJj
ZSA9PiBpbnB1dF9zb3VyY2UucHJvZmlsZXNfLmluY2x1ZGVzKHN1YnNjcmlwdGlvbi5wcm9maWxl
TmFtZSkpOwotCi0gICAgICBmb3IgKGNvbnN0IGlucHV0X3NvdXJjZSBvZiBtYXRjaGluZ19pbnB1
dF9zb3VyY2VzKSB7Ci0gICAgICAgIGNvbnN0IG1vam9fZnJvbV9uYXRpdmVfb3JpZ2luID0gaW5w
dXRfc291cmNlLl9nZXRNb2pvRnJvbUlucHV0U291cmNlKG1vam9fZnJvbV92aWV3ZXIpOwotCi0g
ICAgICAgIGNvbnN0IFttb2pvX3JheV9vcmlnaW4sIG1vam9fcmF5X2RpcmVjdGlvbl0gPSB0aGlz
Ll90cmFuc2Zvcm1SYXlUb01vam9TcGFjZSgKLSAgICAgICAgICBzdWJzY3JpcHRpb24ucmF5LAot
ICAgICAgICAgIG1vam9fZnJvbV9uYXRpdmVfb3JpZ2luCi0gICAgICAgICk7Ci0KLSAgICAgICAg
Y29uc3QgcmVzdWx0cyA9IHRoaXMuX2hpdFRlc3RXb3JsZChtb2pvX3JheV9vcmlnaW4sIG1vam9f
cmF5X2RpcmVjdGlvbiwgc3Vic2NyaXB0aW9uLmVudGl0eVR5cGVzKTsKLQotICAgICAgICByZXN1
bHQuaW5wdXRTb3VyY2VJZFRvSGl0VGVzdFJlc3VsdHMuc2V0KGlucHV0X3NvdXJjZS5zb3VyY2Vf
aWRfLCByZXN1bHRzKTsKLSAgICAgIH0KLQotICAgICAgZnJhbWVEYXRhLmhpdFRlc3RTdWJzY3Jp
cHRpb25SZXN1bHRzLnRyYW5zaWVudElucHV0UmVzdWx0cy5wdXNoKHJlc3VsdCk7Ci0gICAgfQot
ICB9Ci0KLSAgLy8gUmV0dXJucyAyLWVsZW1lbnQgYXJyYXkgW29yaWdpbiwgZGlyZWN0aW9uXSBv
ZiBhIHJheSBpbiBtb2pvIHNwYWNlLgotICAvLyB8cmF5fCBpcyBleHByZXNzZWQgcmVsYXRpdmUg
dG8gbmF0aXZlIG9yaWdpbi4KLSAgX3RyYW5zZm9ybVJheVRvTW9qb1NwYWNlKHJheSwgbW9qb19m
cm9tX25hdGl2ZV9vcmlnaW4pIHsKLSAgICBjb25zdCByYXlfb3JpZ2luID0gewotICAgICAgeDog
cmF5Lm9yaWdpbi54LAotICAgICAgeTogcmF5Lm9yaWdpbi55LAotICAgICAgejogcmF5Lm9yaWdp
bi56LAotICAgICAgdzogMQotICAgIH07Ci0gICAgY29uc3QgcmF5X2RpcmVjdGlvbiA9IHsKLSAg
ICAgIHg6IHJheS5kaXJlY3Rpb24ueCwKLSAgICAgIHk6IHJheS5kaXJlY3Rpb24ueSwKLSAgICAg
IHo6IHJheS5kaXJlY3Rpb24ueiwKLSAgICAgIHc6IDAKLSAgICB9OwotCi0gICAgY29uc3QgbW9q
b19yYXlfb3JpZ2luID0gWFJNYXRoSGVscGVyLnRyYW5zZm9ybV9ieV9tYXRyaXgoCi0gICAgICBt
b2pvX2Zyb21fbmF0aXZlX29yaWdpbiwKLSAgICAgIHJheV9vcmlnaW4pOwotICAgIGNvbnN0IG1v
am9fcmF5X2RpcmVjdGlvbiA9IFhSTWF0aEhlbHBlci50cmFuc2Zvcm1fYnlfbWF0cml4KAotICAg
ICAgbW9qb19mcm9tX25hdGl2ZV9vcmlnaW4sCi0gICAgICByYXlfZGlyZWN0aW9uKTsKLQotICAg
IHJldHVybiBbbW9qb19yYXlfb3JpZ2luLCBtb2pvX3JheV9kaXJlY3Rpb25dOwotICB9Ci0KLSAg
Ly8gSGl0IHRlc3RzIHRoZSBwYXNzZWQgaW4gcmF5IChleHByZXNzZWQgYXMgb3JpZ2luIGFuZCBk
aXJlY3Rpb24pIGFnYWluc3QgdGhlIG1vY2tlZCB3b3JsZCBkYXRhLgotICBfaGl0VGVzdFdvcmxk
KG9yaWdpbiwgZGlyZWN0aW9uLCBlbnRpdHlUeXBlcykgewotICAgIGxldCByZXN1bHQgPSBbXTsK
LQotICAgIGZvciAoY29uc3QgcmVnaW9uIG9mIHRoaXMud29ybGRfLmhpdFRlc3RSZWdpb25zKSB7
Ci0gICAgICBjb25zdCBwYXJ0aWFsX3Jlc3VsdCA9IHRoaXMuX2hpdFRlc3RSZWdpb24oCi0gICAg
ICAgIHJlZ2lvbiwKLSAgICAgICAgb3JpZ2luLCBkaXJlY3Rpb24sCi0gICAgICAgIGVudGl0eVR5
cGVzKTsKLQotICAgICAgcmVzdWx0ID0gcmVzdWx0LmNvbmNhdChwYXJ0aWFsX3Jlc3VsdCk7Ci0g
ICAgfQotCi0gICAgcmV0dXJuIHJlc3VsdC5zb3J0KChsaHMsIHJocykgPT4gbGhzLmRpc3RhbmNl
IC0gcmhzLmRpc3RhbmNlKTsKLSAgfQotCi0gIC8vIEhpdCB0ZXN0cyB0aGUgcGFzc2VkIGluIHJh
eSAoZXhwcmVzc2VkIGFzIG9yaWdpbiBhbmQgZGlyZWN0aW9uKSBhZ2FpbnN0IHdvcmxkIHJlZ2lv
bi4KLSAgLy8gfGVudGl0eVR5cGVzfCBpcyBhIHNldCBvZiBGYWtlWFJSZWdpb25UeXBlcy4KLSAg
Ly8gfHJlZ2lvbnwgaXMgRmFrZVhSUmVnaW9uLgotICAvLyBSZXR1cm5zIGFycmF5IG9mIFhSSGl0
UmVzdWx0cywgZWFjaCBlbnRyeSB3aWxsIGJlIGRlY29yYXRlZCB3aXRoIHRoZSBkaXN0YW5jZSBm
cm9tIHRoZSByYXkgb3JpZ2luIChhbG9uZyB0aGUgcmF5KS4KLSAgX2hpdFRlc3RSZWdpb24ocmVn
aW9uLCBvcmlnaW4sIGRpcmVjdGlvbiwgZW50aXR5VHlwZXMpIHsKLSAgICBjb25zdCByZWdpb25O
YW1lVG9Nb2pvRW51bSA9IHsKLSAgICAgICJwb2ludCI6ZGV2aWNlLm1vam9tLkVudGl0eVR5cGVG
b3JIaXRUZXN0LlBPSU5ULAotICAgICAgInBsYW5lIjpkZXZpY2UubW9qb20uRW50aXR5VHlwZUZv
ckhpdFRlc3QuUExBTkUsCi0gICAgICAibWVzaCI6bnVsbAotICAgIH07Ci0KLSAgICBpZiAoIWVu
dGl0eVR5cGVzLmluY2x1ZGVzKHJlZ2lvbk5hbWVUb01vam9FbnVtW3JlZ2lvbi50eXBlXSkpIHsK
LSAgICAgIHJldHVybiBbXTsKLSAgICB9Ci0KLSAgICBjb25zdCByZXN1bHQgPSBbXTsKLSAgICBm
b3IgKGNvbnN0IGZhY2Ugb2YgcmVnaW9uLmZhY2VzKSB7Ci0gICAgICBjb25zdCBtYXliZV9oaXQg
PSB0aGlzLl9oaXRUZXN0RmFjZShmYWNlLCBvcmlnaW4sIGRpcmVjdGlvbik7Ci0gICAgICBpZiAo
bWF5YmVfaGl0KSB7Ci0gICAgICAgIHJlc3VsdC5wdXNoKG1heWJlX2hpdCk7Ci0gICAgICB9Ci0g
ICAgfQotCi0gICAgLy8gVGhlIHJlc3VsdHMgc2hvdWxkIGJlIHNvcnRlZCBieSBkaXN0YW5jZSBh
bmQgdGhlcmUgc2hvdWxkIGJlIG5vIDIgZW50cmllcyB3aXRoCi0gICAgLy8gdGhlIHNhbWUgZGlz
dGFuY2UgZnJvbSByYXkgb3JpZ2luIC0gdGhhdCB3b3VsZCBtZWFuIHRoZXkgYXJlIHRoZSBzYW1l
IHBvaW50LgotICAgIC8vIFRoaXMgc2l0dWF0aW9uIGlzIHBvc3NpYmxlIHdoZW4gYSByYXkgaW50
ZXJzZWN0cyB0aGUgcmVnaW9uIHRocm91Z2ggYW4gZWRnZSBzaGFyZWQKLSAgICAvLyBieSAyIGZh
Y2VzLgotICAgIHJldHVybiByZXN1bHQuc29ydCgobGhzLCByaHMpID0+IGxocy5kaXN0YW5jZSAt
IHJocy5kaXN0YW5jZSkKLSAgICAgICAgICAgICAgICAgLmZpbHRlcigodmFsLCBpbmRleCwgYXJy
YXkpID0+IGluZGV4ID09PSAwIHx8IHZhbC5kaXN0YW5jZSAhPT0gYXJyYXlbaW5kZXggLSAxXS5k
aXN0YW5jZSk7Ci0gIH0KLQotICAvLyBIaXQgdGVzdHMgdGhlIHBhc3NlZCBpbiByYXkgKGV4cHJl
c3NlZCBhcyBvcmlnaW4gYW5kIGRpcmVjdGlvbikgYWdhaW5zdCBhIHNpbmdsZSBmYWNlLgotICAv
LyB8ZmFjZXwsIHxvcmlnaW58LCBhbmQgfGRpcmVjdGlvbnwgYXJlIHNwZWNpZmllZCBpbiB3b3Js
ZCAoYWthIG1vam8pIGNvb3JkaW5hdGVzLgotICAvLyB8ZmFjZXwgaXMgYW4gYXJyYXkgb2YgRE9N
UG9pbnRJbml0cy4KLSAgLy8gUmV0dXJucyBudWxsIGlmIHRoZSBmYWNlIGRvZXMgbm90IGludGVy
c2VjdCB3aXRoIHRoZSByYXksIG90aGVyd2lzZSB0aGUgcmVzdWx0IGlzCi0gIC8vIGFuIFhSSGl0
UmVzdWx0IHdpdGggbWF0cml4IGRlc2NyaWJpbmcgdGhlIHBvc2Ugb2YgdGhlIGludGVyc2VjdGlv
biBwb2ludC4KLSAgX2hpdFRlc3RGYWNlKGZhY2UsIG9yaWdpbiwgZGlyZWN0aW9uKSB7Ci0gICAg
Y29uc3QgYWRkID0gWFJNYXRoSGVscGVyLmFkZDsKLSAgICBjb25zdCBzdWIgPSBYUk1hdGhIZWxw
ZXIuc3ViOwotICAgIGNvbnN0IG11bCA9IFhSTWF0aEhlbHBlci5tdWw7Ci0gICAgY29uc3Qgbm9y
bWFsaXplID0gWFJNYXRoSGVscGVyLm5vcm1hbGl6ZTsKLSAgICBjb25zdCBkb3QgPSBYUk1hdGhI
ZWxwZXIuZG90OwotICAgIGNvbnN0IGNyb3NzID0gWFJNYXRoSGVscGVyLmNyb3NzOwotICAgIGNv
bnN0IG5lZyA9IFhSTWF0aEhlbHBlci5uZWc7Ci0KLSAgICAvLzEuIENhbGN1bGF0ZSBwbGFuZSBu
b3JtYWwgaW4gd29ybGQgY29vcmRpbmF0ZXMuCi0gICAgY29uc3QgcG9pbnRfQSA9IGZhY2UudmVy
dGljZXNbMF07Ci0gICAgY29uc3QgcG9pbnRfQiA9IGZhY2UudmVydGljZXNbMV07Ci0gICAgY29u
c3QgcG9pbnRfQyA9IGZhY2UudmVydGljZXNbMl07Ci0KLSAgICBjb25zdCBlZGdlX0FCID0gc3Vi
KHBvaW50X0IsIHBvaW50X0EpOwotICAgIGNvbnN0IGVkZ2VfQUMgPSBzdWIocG9pbnRfQywgcG9p
bnRfQSk7Ci0KLSAgICBjb25zdCBub3JtYWwgPSBub3JtYWxpemUoY3Jvc3MoZWRnZV9BQiwgZWRn
ZV9BQykpOwotCi0gICAgY29uc3QgbnVtZXJhdG9yID0gZG90KHN1Yihwb2ludF9BLCBvcmlnaW4p
LCBub3JtYWwpOwotICAgIGNvbnN0IGRlbm9taW5hdG9yID0gZG90KGRpcmVjdGlvbiwgbm9ybWFs
KTsKLQotICAgIGlmIChNYXRoLmFicyhkZW5vbWluYXRvcikgPCBYUk1hdGhIZWxwZXIuRVBTSUxP
TikgewotICAgICAgLy8gUGxhbmVzIGFyZSBuZWFybHkgcGFyYWxsZWwgLSB0aGVyZSdzIGVpdGhl
ciBpbmZpbml0ZWx5IG1hbnkgaW50ZXJzZWN0aW9uIHBvaW50cyBvciAwLgotICAgICAgLy8gQm90
aCBjYXNlcyBzaWduaWZ5IGEgIm5vIGhpdCIgZm9yIHVzLgotICAgICAgcmV0dXJuIG51bGw7Ci0g
ICAgfSBlbHNlIHsKLSAgICAgIC8vIFNpbmdsZSBpbnRlcnNlY3Rpb24gcG9pbnQgYmV0d2VlbiB0
aGUgaW5maW5pdGUgcGxhbmUgYW5kIHRoZSBsaW5lICgqbm90KiByYXkpLgotICAgICAgLy8gTmVl
ZCB0byBjYWxjdWxhdGUgdGhlIGhpdCB0ZXN0IG1hdHJpeCB0YWtpbmcgaW50byBhY2NvdW50IHRo
ZSBmYWNlIHZlcnRpY2VzLgotICAgICAgY29uc3QgZGlzdGFuY2UgPSBudW1lcmF0b3IgLyBkZW5v
bWluYXRvcjsKLSAgICAgIGlmIChkaXN0YW5jZSA8IDApIHsKLSAgICAgICAgLy8gTGluZSAtIHBs
YW5lIGludGVyc2VjdGlvbiBleGlzdHMsIGJ1dCBub3QgdGhlIGhhbGYtbGluZSAtIHBsYW5lIGRv
ZXMgbm90LgotICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIGNv
bnN0IGludGVyc2VjdGlvbl9wb2ludCA9IGFkZChvcmlnaW4sIG11bChkaXN0YW5jZSwgZGlyZWN0
aW9uKSk7Ci0gICAgICAgIC8vIFNpbmNlIHdlIGFyZSB0cmVhdGluZyB0aGUgZmFjZSBhcyBhIHNv
bGlkLCBmbGlwIHRoZSBub3JtYWwgc28gdGhhdCBpdHMKLSAgICAgICAgLy8gaGFsZi1zcGFjZSB3
aWxsIGNvbnRhaW4gdGhlIHJheSBvcmlnaW4uCi0gICAgICAgIGNvbnN0IHlfYXhpcyA9IGRlbm9t
aW5hdG9yID4gMCA/IG5lZyhub3JtYWwpIDogbm9ybWFsOwotCi0gICAgICAgIGxldCB6X2F4aXMg
PSBudWxsOwotICAgICAgICBjb25zdCBjb3NfZGlyZWN0aW9uX2FuZF95X2F4aXMgPSBkb3QoZGly
ZWN0aW9uLCB5X2F4aXMpOwotICAgICAgICBpZiAoTWF0aC5hYnMoY29zX2RpcmVjdGlvbl9hbmRf
eV9heGlzKSA+ICgxIC0gWFJNYXRoSGVscGVyLkVQU0lMT04pKSB7Ci0gICAgICAgICAgLy8gUmF5
IGFuZCB0aGUgaGl0IHRlc3Qgbm9ybWFsIGFyZSBjby1saW5lYXIgLSB0cnkgdXNpbmcgdGhlICd1
cCcgb3IgJ3JpZ2h0JyB2ZWN0b3IncyBwcm9qZWN0aW9uIG9uIHRoZSBmYWNlIHBsYW5lIGFzIHRo
ZSBaIGF4aXMuCi0gICAgICAgICAgLy8gTm90ZTogdGhpcyBlZGdlIGNhc2UgaXMgY3VycmVudGx5
IG5vdCBjb3ZlcmVkIGJ5IHRoZSBzcGVjLgotICAgICAgICAgIGNvbnN0IHVwID0ge3g6IDAuMCwg
eTogMS4wLCB6OiAwLjAsIHc6IDAuMH07Ci0gICAgICAgICAgY29uc3QgcmlnaHQgPSB7eDogMS4w
LCB5OiAwLjAsIHo6IDAuMCwgdzogMC4wfTsKLQotICAgICAgICAgIHpfYXhpcyA9IE1hdGguYWJz
KGRvdCh1cCwgeV9heGlzKSkgPiAoMSAtIFhSTWF0aEhlbHBlci5FUFNJTE9OKQotICAgICAgICAg
ICAgICAgICAgICAgICAgPyBzdWIodXAsIG11bChkb3QocmlnaHQsIHlfYXhpcyksIHlfYXhpcykp
ICAvLyBgdXAgaXMgYWxzbyBjby1saW5lYXIgd2l0aCBoaXQgdGVzdCBub3JtYWwsIHVzZSBgcmln
aHRgCi0gICAgICAgICAgICAgICAgICAgICAgICA6IHN1Yih1cCwgbXVsKGRvdCh1cCwgeV9heGlz
KSwgeV9heGlzKSk7ICAgIC8vIGB1cGAgaXMgbm90IGNvLWxpbmVhciB3aXRoIGhpdCB0ZXN0IG5v
cm1hbCwgdXNlIGl0Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgLy8gUHJvamVjdCB0aGUg
cmF5IGRpcmVjdGlvbiBvbnRvIHRoZSBwbGFuZSwgbmVnYXRlIGl0IGFuZCB1c2UgYXMgYSBaIGF4
aXMuCi0gICAgICAgICAgel9heGlzID0gbmVnKHN1YihkaXJlY3Rpb24sIG11bChjb3NfZGlyZWN0
aW9uX2FuZF95X2F4aXMsIHlfYXhpcykpKTsgLy8gWiBzaG91bGQgcG9pbnQgdG93YXJkcyB0aGUg
cmF5IG9yaWdpbiwgbm90IGF3YXkuCi0gICAgICAgIH0KLQotICAgICAgICBjb25zdCB4X2F4aXMg
PSBub3JtYWxpemUoY3Jvc3MoeV9heGlzLCB6X2F4aXMpKTsKLQotICAgICAgICAvLyBGaWx0ZXIg
b3V0IHRoZSBwb2ludHMgbm90IGluIHBvbHlnb24uCi0gICAgICAgIGlmICghWFJNYXRoSGVscGVy
LnBvaW50SW5GYWNlKGludGVyc2VjdGlvbl9wb2ludCwgZmFjZSkpIHsKLSAgICAgICAgICByZXR1
cm4gbnVsbDsKLSAgICAgICAgfQotCi0gICAgICAgIGNvbnN0IGhpdFJlc3VsdCA9IG5ldyBkZXZp
Y2UubW9qb20uWFJIaXRSZXN1bHQoKTsKLSAgICAgICAgaGl0UmVzdWx0LmRpc3RhbmNlID0gZGlz
dGFuY2U7ICAvLyBFeHRlbmQgdGhlIG9iamVjdCB3aXRoIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24g
dXNlZCBieSBoaWdoZXIgbGF5ZXJzLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIEl0IHdpbGwgbm90IGJlIHNlcmlhbGl6ZWQgb3ZlciBtb2pvbS4KLQotICAgICAg
ICBjb25zdCBtYXRyaXggPSBuZXcgQXJyYXkoMTYpOwotCi0gICAgICAgIG1hdHJpeFswXSA9IHhf
YXhpcy54OwotICAgICAgICBtYXRyaXhbMV0gPSB4X2F4aXMueTsKLSAgICAgICAgbWF0cml4WzJd
ID0geF9heGlzLno7Ci0gICAgICAgIG1hdHJpeFszXSA9IDA7Ci0KLSAgICAgICAgbWF0cml4WzRd
ID0geV9heGlzLng7Ci0gICAgICAgIG1hdHJpeFs1XSA9IHlfYXhpcy55OwotICAgICAgICBtYXRy
aXhbNl0gPSB5X2F4aXMuejsKLSAgICAgICAgbWF0cml4WzddID0gMDsKLQotICAgICAgICBtYXRy
aXhbOF0gPSB6X2F4aXMueDsKLSAgICAgICAgbWF0cml4WzldID0gel9heGlzLnk7Ci0gICAgICAg
IG1hdHJpeFsxMF0gPSB6X2F4aXMuejsKLSAgICAgICAgbWF0cml4WzExXSA9IDA7Ci0KLSAgICAg
ICAgbWF0cml4WzEyXSA9IGludGVyc2VjdGlvbl9wb2ludC54OwotICAgICAgICBtYXRyaXhbMTNd
ID0gaW50ZXJzZWN0aW9uX3BvaW50Lnk7Ci0gICAgICAgIG1hdHJpeFsxNF0gPSBpbnRlcnNlY3Rp
b25fcG9pbnQuejsKLSAgICAgICAgbWF0cml4WzE1XSA9IDE7Ci0KLSAgICAgICAgaGl0UmVzdWx0
Lm1vam9Gcm9tUmVzdWx0ID0gWFJNYXRoSGVscGVyLmRlY29tcG9zZVJpZ2lkVHJhbnNmb3JtKG1h
dHJpeCk7Ci0KLSAgICAgICAgcmV0dXJuIGhpdFJlc3VsdDsKLSAgICAgIH0KLSAgICB9Ci0gIH0K
LQotICBfZ2V0TW9qb0Zyb21WaWV3ZXIoKSB7Ci0gICAgY29uc3QgdHJhbnNmb3JtID0gewotICAg
ICAgcG9zaXRpb246IFsKLSAgICAgICAgdGhpcy5wb3NlXy5wb3NpdGlvbi54LAotICAgICAgICB0
aGlzLnBvc2VfLnBvc2l0aW9uLnksCi0gICAgICAgIHRoaXMucG9zZV8ucG9zaXRpb24uel0sCi0g
ICAgICBvcmllbnRhdGlvbjogWwotICAgICAgICB0aGlzLnBvc2VfLm9yaWVudGF0aW9uLngsCi0g
ICAgICAgIHRoaXMucG9zZV8ub3JpZW50YXRpb24ueSwKLSAgICAgICAgdGhpcy5wb3NlXy5vcmll
bnRhdGlvbi56LAotICAgICAgICB0aGlzLnBvc2VfLm9yaWVudGF0aW9uLnddLAotICAgIH07Ci0K
LSAgICByZXR1cm4gZ2V0TWF0cml4RnJvbVRyYW5zZm9ybSh0cmFuc2Zvcm0pOwotICB9Ci0KLSAg
X2dldE1vam9Gcm9tTmF0aXZlT3JpZ2luKG5hdGl2ZU9yaWdpbkluZm9ybWF0aW9uKSB7Ci0gICAg
Y29uc3QgbW9qb19mcm9tX3ZpZXdlciA9IHRoaXMuX2dldE1vam9Gcm9tVmlld2VyKCk7Ci0KLSAg
ICBpZiAobmF0aXZlT3JpZ2luSW5mb3JtYXRpb24uJHRhZyA9PSBkZXZpY2UubW9qb20uWFJOYXRp
dmVPcmlnaW5JbmZvcm1hdGlvbi5UYWdzLmlucHV0U291cmNlSWQpIHsKLSAgICAgIGlmICghdGhp
cy5pbnB1dF9zb3VyY2VzXy5oYXMobmF0aXZlT3JpZ2luSW5mb3JtYXRpb24uaW5wdXRTb3VyY2VJ
ZCkpIHsKLSAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICB9IGVsc2UgewotICAgICAgICBjb25z
dCBpbnB1dFNvdXJjZSA9IHRoaXMuaW5wdXRfc291cmNlc18uZ2V0KG5hdGl2ZU9yaWdpbkluZm9y
bWF0aW9uLmlucHV0U291cmNlSWQpOwotICAgICAgICByZXR1cm4gaW5wdXRTb3VyY2UuX2dldE1v
am9Gcm9tSW5wdXRTb3VyY2UobW9qb19mcm9tX3ZpZXdlcik7Ci0gICAgICB9Ci0gICAgfSBlbHNl
IGlmIChuYXRpdmVPcmlnaW5JbmZvcm1hdGlvbi4kdGFnID09IGRldmljZS5tb2pvbS5YUk5hdGl2
ZU9yaWdpbkluZm9ybWF0aW9uLlRhZ3MucmVmZXJlbmNlU3BhY2VUeXBlKSB7Ci0gICAgICBzd2l0
Y2ggKG5hdGl2ZU9yaWdpbkluZm9ybWF0aW9uLnJlZmVyZW5jZVNwYWNlVHlwZSkgewotICAgICAg
ICBjYXNlIGRldmljZS5tb2pvbS5YUlJlZmVyZW5jZVNwYWNlVHlwZS5rTG9jYWw6Ci0gICAgICAg
ICAgcmV0dXJuIFhSTWF0aEhlbHBlci5pZGVudGl0eSgpOwotICAgICAgICBjYXNlIGRldmljZS5t
b2pvbS5YUlJlZmVyZW5jZVNwYWNlVHlwZS5rTG9jYWxGbG9vcjoKLSAgICAgICAgICBpZiAodGhp
cy5zdGFnZVBhcmFtZXRlcnNfID09IG51bGwgfHwgdGhpcy5zdGFnZVBhcmFtZXRlcnNfLm1vam9G
cm9tRmxvb3IgPT0gbnVsbCkgewotICAgICAgICAgICAgY29uc29sZS53YXJuKCJTdGFuZGluZyB0
cmFuc2Zvcm0gbm90IGF2YWlsYWJsZS4iKTsKLSAgICAgICAgICAgIHJldHVybiBudWxsOwotICAg
ICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gdGhpcy5zdGFnZVBhcmFtZXRlcnNfLm1vam9Gcm9t
Rmxvb3IubWF0cml4OwotICAgICAgICBjYXNlIGRldmljZS5tb2pvbS5YUlJlZmVyZW5jZVNwYWNl
VHlwZS5rVmlld2VyOgotICAgICAgICAgIHJldHVybiBtb2pvX2Zyb21fdmlld2VyOwotICAgICAg
ICBjYXNlIGRldmljZS5tb2pvbS5YUlJlZmVyZW5jZVNwYWNlVHlwZS5rQm91bmRlZEZsb3I6Ci0g
ICAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICAgIGNhc2UgZGV2aWNlLm1vam9tLlhSUmVmZXJl
bmNlU3BhY2VUeXBlLmtVbmJvdW5kZWQ6Ci0gICAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICAg
IGRlZmF1bHQ6Ci0gICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigiVW5yZWNvZ25pemVkIFhS
UmVmZXJlbmNlU3BhY2VUeXBlISIpOwotICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICAvLyBB
bmNob3JzICYgcGxhbmVzIGFyZSBub3QgeWV0IHN1cHBvcnRlZCBmb3IgaGl0IHRlc3QuCi0gICAg
ICByZXR1cm4gbnVsbDsKLSAgICB9Ci0gIH0KLX0KLQotY2xhc3MgTW9ja1hSU2Vzc2lvbk1ldHJp
Y3NSZWNvcmRlciB7Ci0gIHJlcG9ydEZlYXR1cmVVc2VkKGZlYXR1cmUpIHsKLSAgICAvLyBEbyBu
b3RoaW5nCi0gIH0KLX0KLQotY2xhc3MgTW9ja1hSSW5wdXRTb3VyY2UgewotICBjb25zdHJ1Y3Rv
cihmYWtlSW5wdXRTb3VyY2VJbml0LCBpZCwgcGFpcmVkRGV2aWNlKSB7Ci0gICAgdGhpcy5zb3Vy
Y2VfaWRfID0gaWQ7Ci0gICAgdGhpcy5wYWlyZWREZXZpY2VfID0gcGFpcmVkRGV2aWNlOwotICAg
IHRoaXMuaGFuZGVkbmVzc18gPSBmYWtlSW5wdXRTb3VyY2VJbml0LmhhbmRlZG5lc3M7Ci0gICAg
dGhpcy50YXJnZXRfcmF5X21vZGVfID0gZmFrZUlucHV0U291cmNlSW5pdC50YXJnZXRSYXlNb2Rl
OwotCi0gICAgaWYgKGZha2VJbnB1dFNvdXJjZUluaXQucG9pbnRlck9yaWdpbiA9PSBudWxsKSB7
Ci0gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCJGYWtlWFJJbnB1dFNvdXJjZUluaXQucG9pbnRl
ck9yaWdpbiBpcyByZXF1aXJlZC4iKTsKLSAgICB9Ci0KLSAgICB0aGlzLnNldFBvaW50ZXJPcmln
aW4oZmFrZUlucHV0U291cmNlSW5pdC5wb2ludGVyT3JpZ2luKTsKLSAgICB0aGlzLnNldFByb2Zp
bGVzKGZha2VJbnB1dFNvdXJjZUluaXQucHJvZmlsZXMpOwotCi0gICAgdGhpcy5wcmltYXJ5X2lu
cHV0X3ByZXNzZWRfID0gZmFsc2U7Ci0gICAgaWYgKGZha2VJbnB1dFNvdXJjZUluaXQuc2VsZWN0
aW9uU3RhcnRlZCAhPSBudWxsKSB7Ci0gICAgICB0aGlzLnByaW1hcnlfaW5wdXRfcHJlc3NlZF8g
PSBmYWtlSW5wdXRTb3VyY2VJbml0LnNlbGVjdGlvblN0YXJ0ZWQ7Ci0gICAgfQotCi0gICAgdGhp
cy5wcmltYXJ5X2lucHV0X2NsaWNrZWRfID0gZmFsc2U7Ci0gICAgaWYgKGZha2VJbnB1dFNvdXJj
ZUluaXQuc2VsZWN0aW9uQ2xpY2tlZCAhPSBudWxsKSB7Ci0gICAgICB0aGlzLnByaW1hcnlfaW5w
dXRfY2xpY2tlZF8gPSBmYWtlSW5wdXRTb3VyY2VJbml0LnNlbGVjdGlvbkNsaWNrZWQ7Ci0gICAg
fQotCi0gICAgdGhpcy5wcmltYXJ5X3NxdWVlemVfcHJlc3NlZF8gPSBmYWxzZTsKLSAgICB0aGlz
LnByaW1hcnlfc3F1ZWV6ZV9jbGlja2VkXyA9IGZhbHNlOwotCi0gICAgdGhpcy5tb2pvX2Zyb21f
aW5wdXRfID0gbnVsbDsKLSAgICBpZiAoZmFrZUlucHV0U291cmNlSW5pdC5ncmlwT3JpZ2luICE9
IG51bGwpIHsKLSAgICAgIHRoaXMuc2V0R3JpcE9yaWdpbihmYWtlSW5wdXRTb3VyY2VJbml0Lmdy
aXBPcmlnaW4pOwotICAgIH0KLQotICAgIC8vIFRoaXMgcHJvcGVybHkgaGFuZGxlcyBpZiBzdXBw
b3J0ZWRCdXR0b25zIHdlcmUgbm90IHNwZWNpZmllZC4KLSAgICB0aGlzLnNldFN1cHBvcnRlZEJ1
dHRvbnMoZmFrZUlucHV0U291cmNlSW5pdC5zdXBwb3J0ZWRCdXR0b25zKTsKLQotICAgIHRoaXMu
ZW11bGF0ZWRfcG9zaXRpb25fID0gZmFsc2U7Ci0gICAgdGhpcy5kZXNjX2RpcnR5XyA9IHRydWU7
Ci0gIH0KLQotICAvLyBXZWJ4ci10ZXN0LWFwaQotICBzZXRIYW5kZWRuZXNzKGhhbmRlZG5lc3Mp
IHsKLSAgICBpZiAodGhpcy5oYW5kZWRuZXNzXyAhPSBoYW5kZWRuZXNzKSB7Ci0gICAgICB0aGlz
LmRlc2NfZGlydHlfID0gdHJ1ZTsKLSAgICAgIHRoaXMuaGFuZGVkbmVzc18gPSBoYW5kZWRuZXNz
OwotICAgIH0KLSAgfQotCi0gIHNldFRhcmdldFJheU1vZGUodGFyZ2V0UmF5TW9kZSkgewotICAg
IGlmICh0aGlzLnRhcmdldF9yYXlfbW9kZV8gIT0gdGFyZ2V0UmF5TW9kZSkgewotICAgICAgdGhp
cy5kZXNjX2RpcnR5XyA9IHRydWU7Ci0gICAgICB0aGlzLnRhcmdldF9yYXlfbW9kZV8gPSB0YXJn
ZXRSYXlNb2RlOwotICAgIH0KLSAgfQotCi0gIHNldFByb2ZpbGVzKHByb2ZpbGVzKSB7Ci0gICAg
dGhpcy5kZXNjX2RpcnR5XyA9IHRydWU7Ci0gICAgdGhpcy5wcm9maWxlc18gPSBwcm9maWxlczsK
LSAgfQotCi0gIHNldEdyaXBPcmlnaW4odHJhbnNmb3JtLCBlbXVsYXRlZFBvc2l0aW9uID0gZmFs
c2UpIHsKLSAgICAvLyBncmlwX29yaWdpbiB3YXMgcmVuYW1lZCB0byBtb2pvX2Zyb21faW5wdXQg
aW4gbW9qbwotICAgIHRoaXMubW9qb19mcm9tX2lucHV0XyA9IGNvbXBvc2VHRlhUcmFuc2Zvcm0o
dHJhbnNmb3JtKTsKLSAgICB0aGlzLmVtdWxhdGVkX3Bvc2l0aW9uXyA9IGVtdWxhdGVkUG9zaXRp
b247Ci0KLSAgICAvLyBUZWNobmljYWxseSwgc2V0dGluZyB0aGUgZ3JpcCBzaG91bGRuJ3QgbWFr
ZSB0aGUgZGVzY3JpcHRpb24gZGlydHksIGJ1dAotICAgIC8vIHRoZSB3ZWJ4ci10ZXN0LWFwaSBz
ZXRzIG91ciBwb2ludGVyIGFzIG1vam9Gcm9tUG9pbnRlcjsgaG93ZXZlciwgd2Ugb25seQotICAg
IC8vIHN1cHBvcnQgaXQgYWNyb3NzIG1vam9tIGFzIGlucHV0RnJvbVBvaW50ZXIsIHNvIHdlIG5l
ZWQgdG8gcmVjYWxjdWxhdGUgaXQKLSAgICAvLyB3aGVuZXZlciB0aGUgZ3JpcCBtb3Zlcy4KLSAg
ICB0aGlzLmRlc2NfZGlydHlfID0gdHJ1ZTsKLSAgfQotCi0gIGNsZWFyR3JpcE9yaWdpbigpIHsK
LSAgICAvLyBncmlwX29yaWdpbiB3YXMgcmVuYW1lZCB0byBtb2pvX2Zyb21faW5wdXQgaW4gbW9q
bwotICAgIGlmICh0aGlzLm1vam9fZnJvbV9pbnB1dF8gIT0gbnVsbCkgewotICAgICAgdGhpcy5t
b2pvX2Zyb21faW5wdXRfID0gbnVsbDsKLSAgICAgIHRoaXMuZW11bGF0ZWRfcG9zaXRpb25fID0g
ZmFsc2U7Ci0gICAgICB0aGlzLmRlc2NfZGlydHlfID0gdHJ1ZTsKLSAgICB9Ci0gIH0KLQotICBz
ZXRQb2ludGVyT3JpZ2luKHRyYW5zZm9ybSwgZW11bGF0ZWRQb3NpdGlvbiA9IGZhbHNlKSB7Ci0g
ICAgLy8gcG9pbnRlcl9vcmlnaW4gaXMgbW9qb19mcm9tX3BvaW50ZXIuCi0gICAgdGhpcy5kZXNj
X2RpcnR5XyA9IHRydWU7Ci0gICAgdGhpcy5tb2pvX2Zyb21fcG9pbnRlcl8gPSBjb21wb3NlR0ZY
VHJhbnNmb3JtKHRyYW5zZm9ybSk7Ci0gICAgdGhpcy5lbXVsYXRlZF9wb3NpdGlvbl8gPSBlbXVs
YXRlZFBvc2l0aW9uOwotICB9Ci0KLSAgZGlzY29ubmVjdCgpIHsKLSAgICB0aGlzLnBhaXJlZERl
dmljZV8ucmVtb3ZlSW5wdXRTb3VyY2UodGhpcyk7Ci0gIH0KLQotICByZWNvbm5lY3QoKSB7Ci0g
ICAgdGhpcy5wYWlyZWREZXZpY2VfLmFkZElucHV0U291cmNlKHRoaXMpOwotICB9Ci0KLSAgc3Rh
cnRTZWxlY3Rpb24oKSB7Ci0gICAgdGhpcy5wcmltYXJ5X2lucHV0X3ByZXNzZWRfID0gdHJ1ZTsK
LSAgICBpZiAodGhpcy5nYW1lcGFkXykgewotICAgICAgdGhpcy5nYW1lcGFkXy5idXR0b25zWzBd
LnByZXNzZWQgPSB0cnVlOwotICAgICAgdGhpcy5nYW1lcGFkXy5idXR0b25zWzBdLnRvdWNoZWQg
PSB0cnVlOwotICAgIH0KLSAgfQotCi0gIGVuZFNlbGVjdGlvbigpIHsKLSAgICBpZiAoIXRoaXMu
cHJpbWFyeV9pbnB1dF9wcmVzc2VkXykgewotICAgICAgdGhyb3cgbmV3IEVycm9yKCJBdHRlbXB0
ZWQgdG8gZW5kIHNlbGVjdGlvbiB3aGljaCB3YXMgbm90IHN0YXJ0ZWQiKTsKLSAgICB9Ci0KLSAg
ICB0aGlzLnByaW1hcnlfaW5wdXRfcHJlc3NlZF8gPSBmYWxzZTsKLSAgICB0aGlzLnByaW1hcnlf
aW5wdXRfY2xpY2tlZF8gPSB0cnVlOwotCi0gICAgaWYgKHRoaXMuZ2FtZXBhZF8pIHsKLSAgICAg
IHRoaXMuZ2FtZXBhZF8uYnV0dG9uc1swXS5wcmVzc2VkID0gZmFsc2U7Ci0gICAgICB0aGlzLmdh
bWVwYWRfLmJ1dHRvbnNbMF0udG91Y2hlZCA9IGZhbHNlOwotICAgIH0KLSAgfQotCi0gIHNpbXVs
YXRlU2VsZWN0KCkgewotICAgIHRoaXMucHJpbWFyeV9pbnB1dF9jbGlja2VkXyA9IHRydWU7Ci0g
IH0KLQotICBzZXRTdXBwb3J0ZWRCdXR0b25zKHN1cHBvcnRlZEJ1dHRvbnMpIHsKLSAgICB0aGlz
LmdhbWVwYWRfID0gbnVsbDsKLSAgICB0aGlzLnN1cHBvcnRlZF9idXR0b25zXyA9IFtdOwotCi0g
ICAgLy8gSWYgdGhlcmUgYXJlIG5vIHN1cHBvcnRlZCBidXR0b25zLCB3ZSBjYW4gc3RvcCBub3cu
Ci0gICAgaWYgKHN1cHBvcnRlZEJ1dHRvbnMgPT0gbnVsbCB8fCBzdXBwb3J0ZWRCdXR0b25zLmxl
bmd0aCA8IDEpIHsKLSAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBjb25zdCBzdXBwb3J0ZWRf
YnV0dG9uX21hcCA9IHt9OwotICAgIHRoaXMuZ2FtZXBhZF8gPSB0aGlzLmdldEVtcHR5R2FtZXBh
ZCgpOwotICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc3VwcG9ydGVkQnV0dG9ucy5sZW5ndGg7IGkr
KykgewotICAgICAgY29uc3QgYnV0dG9uVHlwZSA9IHN1cHBvcnRlZEJ1dHRvbnNbaV0uYnV0dG9u
VHlwZTsKLSAgICAgIHRoaXMuc3VwcG9ydGVkX2J1dHRvbnNfLnB1c2goYnV0dG9uVHlwZSk7Ci0g
ICAgICBzdXBwb3J0ZWRfYnV0dG9uX21hcFtidXR0b25UeXBlXSA9IHN1cHBvcnRlZEJ1dHRvbnNb
aV07Ci0gICAgfQotCi0gICAgLy8gTGV0J3Mgc3RhcnQgYnkgYnVpbGRpbmcgdGhlIGJ1dHRvbiBz
dGF0ZSBpbiBvcmRlciBvZiBwcmlvcml0eToKLSAgICAvLyBQcmltYXJ5IGJ1dHRvbiBpcyBpbmRl
eCAwLgotICAgIHRoaXMuZ2FtZXBhZF8uYnV0dG9ucy5wdXNoKHsKLSAgICAgIHByZXNzZWQ6IHRo
aXMucHJpbWFyeV9pbnB1dF9wcmVzc2VkXywKLSAgICAgIHRvdWNoZWQ6IHRoaXMucHJpbWFyeV9p
bnB1dF9wcmVzc2VkXywKLSAgICAgIHZhbHVlOiB0aGlzLnByaW1hcnlfaW5wdXRfcHJlc3NlZF8g
PyAxLjAgOiAwLjAKLSAgICB9KTsKLQotICAgIC8vIE5vdyBhZGQgdGhlIHJlc3Qgb2Ygb3VyIGJ1
dHRvbnMKLSAgICB0aGlzLmFkZEdhbWVwYWRCdXR0b24oc3VwcG9ydGVkX2J1dHRvbl9tYXBbJ2dy
aXAnXSk7Ci0gICAgdGhpcy5hZGRHYW1lcGFkQnV0dG9uKHN1cHBvcnRlZF9idXR0b25fbWFwWyd0
b3VjaHBhZCddKTsKLSAgICB0aGlzLmFkZEdhbWVwYWRCdXR0b24oc3VwcG9ydGVkX2J1dHRvbl9t
YXBbJ3RodW1ic3RpY2snXSk7Ci0gICAgdGhpcy5hZGRHYW1lcGFkQnV0dG9uKHN1cHBvcnRlZF9i
dXR0b25fbWFwWydvcHRpb25hbC1idXR0b24nXSk7Ci0gICAgdGhpcy5hZGRHYW1lcGFkQnV0dG9u
KHN1cHBvcnRlZF9idXR0b25fbWFwWydvcHRpb25hbC10aHVtYnN0aWNrJ10pOwotCi0gICAgLy8g
RmluYWxseSwgYmFjay1maWxsIHBsYWNlaG9sZGVyIGJ1dHRvbnMvYXhlcwotICAgIGZvciAobGV0
IGkgPSAwOyBpIDwgdGhpcy5nYW1lcGFkXy5idXR0b25zLmxlbmd0aDsgaSsrKSB7Ci0gICAgICBp
ZiAodGhpcy5nYW1lcGFkXy5idXR0b25zW2ldID09IG51bGwpIHsKLSAgICAgICAgdGhpcy5nYW1l
cGFkXy5idXR0b25zW2ldID0gewotICAgICAgICAgIHByZXNzZWQ6IGZhbHNlLAotICAgICAgICAg
IHRvdWNoZWQ6IGZhbHNlLAotICAgICAgICAgIHZhbHVlOiAwCi0gICAgICAgIH07Ci0gICAgICB9
Ci0gICAgfQotCi0gICAgZm9yIChsZXQgaT0wOyBpIDwgdGhpcy5nYW1lcGFkXy5heGVzLmxlbmd0
aDsgaSsrKSB7Ci0gICAgICBpZiAodGhpcy5nYW1lcGFkXy5heGVzW2ldID09IG51bGwpIHsKLSAg
ICAgICAgdGhpcy5nYW1lcGFkXy5heGVzW2ldID0gMDsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLQot
ICB1cGRhdGVCdXR0b25TdGF0ZShidXR0b25TdGF0ZSkgewotICAgIGlmICh0aGlzLnN1cHBvcnRl
ZF9idXR0b25zXy5pbmRleE9mKGJ1dHRvblN0YXRlLmJ1dHRvblR5cGUpID09IC0xKSB7Ci0gICAg
ICB0aHJvdyBuZXcgRXJyb3IoIlRyaWVkIHRvIHVwZGF0ZSBzdGF0ZSBvbiBhbiB1bnN1cHBvcnRl
ZCBidXR0b24iKTsKLSAgICB9Ci0KLSAgICBjb25zdCBidXR0b25JbmRleCA9IHRoaXMuZ2V0QnV0
dG9uSW5kZXgoYnV0dG9uU3RhdGUuYnV0dG9uVHlwZSk7Ci0gICAgY29uc3QgYXhlc1N0YXJ0SW5k
ZXggPSB0aGlzLmdldEF4ZXNTdGFydEluZGV4KGJ1dHRvblN0YXRlLmJ1dHRvblR5cGUpOwotCi0g
ICAgaWYgKGJ1dHRvbkluZGV4ID09IC0xKSB7Ci0gICAgICB0aHJvdyBuZXcgRXJyb3IoIlVua25v
d24gQnV0dG9uIFR5cGUhIik7Ci0gICAgfQotCi0gICAgLy8gaXMgdGhpcyBhICdzcXVlZXplJyBi
dXR0b24/Ci0gICAgaWYgKGJ1dHRvbkluZGV4ID09PSB0aGlzLmdldEJ1dHRvbkluZGV4KCdncmlw
JykpIHsKLSAgICAgIC8vIHNxdWVlemUKLSAgICAgIGlmIChidXR0b25TdGF0ZS5wcmVzc2VkKSB7
Ci0gICAgICAgIHRoaXMucHJpbWFyeV9zcXVlZXplX3ByZXNzZWRfID0gdHJ1ZTsKLSAgICAgIH0g
ZWxzZSBpZiAodGhpcy5nYW1lcGFkXy5idXR0b25zW2J1dHRvbkluZGV4XS5wcmVzc2VkKSB7Ci0g
ICAgICAgIHRoaXMucHJpbWFyeV9zcXVlZXplX2NsaWNrZWRfID0gdHJ1ZTsKLSAgICAgICAgdGhp
cy5wcmltYXJ5X3NxdWVlemVfcHJlc3NlZF8gPSBmYWxzZTsKLSAgICAgIH0gZWxzZSB7Ci0gICAg
ICAgIHRoaXMucHJpbWFyeV9zcXVlZXplX2NsaWNrZWRfID0gZmFsc2U7Ci0gICAgICAgIHRoaXMu
cHJpbWFyeV9zcXVlZXplX3ByZXNzZWRfID0gZmFsc2U7Ci0gICAgICB9Ci0gICAgfQotCi0gICAg
dGhpcy5nYW1lcGFkXy5idXR0b25zW2J1dHRvbkluZGV4XS5wcmVzc2VkID0gYnV0dG9uU3RhdGUu
cHJlc3NlZDsKLSAgICB0aGlzLmdhbWVwYWRfLmJ1dHRvbnNbYnV0dG9uSW5kZXhdLnRvdWNoZWQg
PSBidXR0b25TdGF0ZS50b3VjaGVkOwotICAgIHRoaXMuZ2FtZXBhZF8uYnV0dG9uc1tidXR0b25J
bmRleF0udmFsdWUgPSBidXR0b25TdGF0ZS5wcmVzc2VkVmFsdWU7Ci0KLSAgICBpZiAoYXhlc1N0
YXJ0SW5kZXggIT0gLTEpIHsKLSAgICAgIHRoaXMuZ2FtZXBhZF8uYXhlc1theGVzU3RhcnRJbmRl
eF0gPSBidXR0b25TdGF0ZS54VmFsdWUgPT0gbnVsbCA/IDAuMCA6IGJ1dHRvblN0YXRlLnhWYWx1
ZTsKLSAgICAgIHRoaXMuZ2FtZXBhZF8uYXhlc1theGVzU3RhcnRJbmRleCArIDFdID0gYnV0dG9u
U3RhdGUueVZhbHVlID09IG51bGwgPyAwLjAgOiBidXR0b25TdGF0ZS55VmFsdWU7Ci0gICAgfQot
ICB9Ci0KLSAgLy8gSGVscGVycyBmb3IgTW9qb20KLSAgZ2V0SW5wdXRTb3VyY2VTdGF0ZSgpIHsK
LSAgICBjb25zdCBpbnB1dF9zdGF0ZSA9IG5ldyBkZXZpY2UubW9qb20uWFJJbnB1dFNvdXJjZVN0
YXRlKCk7Ci0KLSAgICBpbnB1dF9zdGF0ZS5zb3VyY2VJZCA9IHRoaXMuc291cmNlX2lkXzsKLQot
ICAgIGlucHV0X3N0YXRlLnByaW1hcnlJbnB1dFByZXNzZWQgPSB0aGlzLnByaW1hcnlfaW5wdXRf
cHJlc3NlZF87Ci0gICAgaW5wdXRfc3RhdGUucHJpbWFyeUlucHV0Q2xpY2tlZCA9IHRoaXMucHJp
bWFyeV9pbnB1dF9jbGlja2VkXzsKLQotICAgIGlucHV0X3N0YXRlLnByaW1hcnlTcXVlZXplUHJl
c3NlZCA9IHRoaXMucHJpbWFyeV9zcXVlZXplX3ByZXNzZWRfOwotICAgIGlucHV0X3N0YXRlLnBy
aW1hcnlTcXVlZXplQ2xpY2tlZCA9IHRoaXMucHJpbWFyeV9zcXVlZXplX2NsaWNrZWRfOwotICAg
IC8vIFNldHRpbmcgdGhlIGlucHV0IHNvdXJjZSdzICJjbGlja2VkIiBzdGF0ZSBzaG91bGQgZ2Vu
ZXJhdGUgb25lICJzZWxlY3QiCi0gICAgLy8gZXZlbnQuIFJlc2V0IHRoZSBpbnB1dCB2YWx1ZSB0
byBwcmV2ZW50IGl0IGZyb20gY29udGludW91c2x5IGdlbmVyYXRpbmcKLSAgICAvLyBldmVudHMu
Ci0gICAgdGhpcy5wcmltYXJ5X2lucHV0X2NsaWNrZWRfID0gZmFsc2U7Ci0gICAgLy8gU2V0dGlu
ZyB0aGUgaW5wdXQgc291cmNlJ3MgImNsaWNrZWQiIHN0YXRlIHNob3VsZCBnZW5lcmF0ZSBvbmUg
InNxdWVlemUiCi0gICAgLy8gZXZlbnQuIFJlc2V0IHRoZSBpbnB1dCB2YWx1ZSB0byBwcmV2ZW50
IGl0IGZyb20gY29udGludW91c2x5IGdlbmVyYXRpbmcKLSAgICAvLyBldmVudHMuCi0gICAgdGhp
cy5wcmltYXJ5X3NxdWVlemVfY2xpY2tlZF8gPSBmYWxzZTsKLQotICAgIGlucHV0X3N0YXRlLm1v
am9Gcm9tSW5wdXQgPSB0aGlzLm1vam9fZnJvbV9pbnB1dF87Ci0KLSAgICBpbnB1dF9zdGF0ZS5n
YW1lcGFkID0gdGhpcy5nYW1lcGFkXzsKLQotICAgIGlucHV0X3N0YXRlLmVtdWxhdGVkUG9zaXRp
b24gPSB0aGlzLmVtdWxhdGVkX3Bvc2l0aW9uXzsKLQotICAgIGlmICh0aGlzLmRlc2NfZGlydHlf
KSB7Ci0gICAgICBjb25zdCBpbnB1dF9kZXNjID0gbmV3IGRldmljZS5tb2pvbS5YUklucHV0U291
cmNlRGVzY3JpcHRpb24oKTsKLQotICAgICAgc3dpdGNoICh0aGlzLnRhcmdldF9yYXlfbW9kZV8p
IHsKLSAgICAgICAgY2FzZSAnZ2F6ZSc6Ci0gICAgICAgICAgaW5wdXRfZGVzYy50YXJnZXRSYXlN
b2RlID0gZGV2aWNlLm1vam9tLlhSVGFyZ2V0UmF5TW9kZS5HQVpJTkc7Ci0gICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIGNhc2UgJ3RyYWNrZWQtcG9pbnRlcic6Ci0gICAgICAgICAgaW5wdXRfZGVz
Yy50YXJnZXRSYXlNb2RlID0gZGV2aWNlLm1vam9tLlhSVGFyZ2V0UmF5TW9kZS5QT0lOVElORzsK
LSAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSAnc2NyZWVuJzoKLSAgICAgICAgICBpbnB1
dF9kZXNjLnRhcmdldFJheU1vZGUgPSBkZXZpY2UubW9qb20uWFJUYXJnZXRSYXlNb2RlLlRBUFBJ
Tkc7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgdGhyb3cg
bmV3IEVycm9yKCdVbmhhbmRsZWQgdGFyZ2V0IHJheSBtb2RlICcgKyB0aGlzLnRhcmdldF9yYXlf
bW9kZV8pOwotICAgICAgfQotCi0gICAgICBzd2l0Y2ggKHRoaXMuaGFuZGVkbmVzc18pIHsKLSAg
ICAgICAgY2FzZSAnbGVmdCc6Ci0gICAgICAgICAgaW5wdXRfZGVzYy5oYW5kZWRuZXNzID0gZGV2
aWNlLm1vam9tLlhSSGFuZGVkbmVzcy5MRUZUOwotICAgICAgICAgIGJyZWFrOwotICAgICAgICBj
YXNlICdyaWdodCc6Ci0gICAgICAgICAgaW5wdXRfZGVzYy5oYW5kZWRuZXNzID0gZGV2aWNlLm1v
am9tLlhSSGFuZGVkbmVzcy5SSUdIVDsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgZGVmYXVs
dDoKLSAgICAgICAgICBpbnB1dF9kZXNjLmhhbmRlZG5lc3MgPSBkZXZpY2UubW9qb20uWFJIYW5k
ZWRuZXNzLk5PTkU7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0KLSAgICAgIC8vIE1vam8g
cmVxdWlyZXMgdXMgdG8gc2VuZCB0aGUgcG9pbnRlck9yaWdpbiBhcyByZWxhdGl2ZSB0byB0aGUg
Z3JpcAotICAgICAgLy8gc3BhY2UuIElmIHdlIGRvbid0IGhhdmUgYSBncmlwIHNwYWNlLCB3ZSds
bCBqdXN0IGFzc3VtZSB0aGF0IHRoZXJlCi0gICAgICAvLyBpcyBhIGdyaXAgYXQgaWRlbnRpdHku
IFRoaXMgYWxsb3dzIHRlc3RzIHRvIHNpbXVsYXRlIGNvbnRyb2xsZXJzIHRoYXQKLSAgICAgIC8v
IGFyZSByZWFsbHkganVzdCBhIHBvaW50ZXIgd2l0aCBubyB0cmFja2VkIGdyaXAsIHRob3VnaCB3
ZSB3aWxsIGVuZCB1cAotICAgICAgLy8gZXhwb3NpbmcgdGhhdCBncmlwIHNwYWNlLgotICAgICAg
bGV0IG1vam9fZnJvbV9pbnB1dCA9IFhSTWF0aEhlbHBlci5pZGVudGl0eSgpOwotICAgICAgc3dp
dGNoICh0aGlzLnRhcmdldF9yYXlfbW9kZV8pIHsKLSAgICAgICAgY2FzZSAnZ2F6ZSc6Ci0gICAg
ICAgIGNhc2UgJ3NjcmVlbic6Ci0gICAgICAgICAgLy8gRm9yIGdhemUgYW5kIHNjcmVlbiBzcGFj
ZSwgd2Ugd29uJ3QgaGF2ZSBhIG1vam9fZnJvbV9pbnB1dDsgaG93ZXZlcgotICAgICAgICAgIC8v
IHRoZSAiaW5wdXQiIHBvc2l0aW9uIGlzIGp1c3QgdGhlIHZpZXdlciwgc28gdXNlIG1vam9fZnJv
bV92aWV3ZXIuCi0gICAgICAgICAgbW9qb19mcm9tX2lucHV0ID0gdGhpcy5wYWlyZWREZXZpY2Vf
Ll9nZXRNb2pvRnJvbVZpZXdlcigpOwotICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlICd0
cmFja2VkLXBvaW50ZXInOgotICAgICAgICAgIC8vIElmIHdlIGhhdmUgYSB0cmFja2VkIGdyaXAg
cG9zaXRpb24gKGUuZy4gbW9qb19mcm9tX2lucHV0KSwgdGhlbiB1c2UKLSAgICAgICAgICAvLyB0
aGF0LiBJZiB3ZSBkb24ndCwgdGhlbiB3ZSdsbCBqdXN0IHNldCB0aGUgcG9pbnRlciBvZmZzZXQg
ZGlyZWN0bHksCi0gICAgICAgICAgLy8gdXNpbmcgaWRlbnRpdHkgYXMgc2V0IGFib3ZlLgotICAg
ICAgICAgIGlmICh0aGlzLm1vam9fZnJvbV9pbnB1dF8pIHsKLSAgICAgICAgICAgIG1vam9fZnJv
bV9pbnB1dCA9IHRoaXMubW9qb19mcm9tX2lucHV0Xy5tYXRyaXg7Ci0gICAgICAgICAgfQotICAg
ICAgICAgIGJyZWFrOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgIHRocm93IG5ldyBFcnJv
cignVW5oYW5kbGVkIHRhcmdldCByYXkgbW9kZSAnICsgdGhpcy50YXJnZXRfcmF5X21vZGVfKTsK
LSAgICAgIH0KLQotICAgICAgLy8gVG8gY29udmVydCBtb2pvX2Zyb21fcG9pbnRlciB0byBpbnB1
dF9mcm9tX3BvaW50ZXIsIHdlIG5lZWQ6Ci0gICAgICAvLyBpbnB1dF9mcm9tX3BvaW50ZXIgPSBp
bnB1dF9mcm9tX21vam8gKiBtb2pvX2Zyb21fcG9pbnRlcgotICAgICAgLy8gU2luY2Ugd2Ugc3Rv
cmUgbW9qb19mcm9tX2lucHV0LCB3ZSBuZWVkIHRvIGludmVydCBpdCBoZXJlIGJlZm9yZQotICAg
ICAgLy8gbXVsdGlwbHlpbmcuCi0gICAgICBsZXQgaW5wdXRfZnJvbV9tb2pvID0gWFJNYXRoSGVs
cGVyLmludmVyc2UobW9qb19mcm9tX2lucHV0KTsKLSAgICAgIGlucHV0X2Rlc2MuaW5wdXRGcm9t
UG9pbnRlciA9IG5ldyBnZngubW9qb20uVHJhbnNmb3JtKCk7Ci0gICAgICBpbnB1dF9kZXNjLmlu
cHV0RnJvbVBvaW50ZXIubWF0cml4ID0KLSAgICAgICAgWFJNYXRoSGVscGVyLm11bDR4NChpbnB1
dF9mcm9tX21vam8sIHRoaXMubW9qb19mcm9tX3BvaW50ZXJfLm1hdHJpeCk7Ci0KLSAgICAgIGlu
cHV0X2Rlc2MucHJvZmlsZXMgPSB0aGlzLnByb2ZpbGVzXzsKLQotICAgICAgaW5wdXRfc3RhdGUu
ZGVzY3JpcHRpb24gPSBpbnB1dF9kZXNjOwotCi0gICAgICB0aGlzLmRlc2NfZGlydHlfID0gZmFs
c2U7Ci0gICAgfQotCi0gICAgLy8gUG9pbnRlciBkYXRhIGZvciBET00gT3ZlcmxheSwgc2V0IGJ5
IHNldE92ZXJsYXlQb2ludGVyUG9zaXRpb24oKQotICAgIGlmICh0aGlzLm92ZXJsYXlfcG9pbnRl
cl9wb3NpdGlvbl8pIHsKLSAgICAgIGlucHV0X3N0YXRlLm92ZXJsYXlQb2ludGVyUG9zaXRpb24g
PSB0aGlzLm92ZXJsYXlfcG9pbnRlcl9wb3NpdGlvbl87Ci0gICAgICB0aGlzLm92ZXJsYXlfcG9p
bnRlcl9wb3NpdGlvbl8gPSBudWxsOwotICAgIH0KLQotICAgIHJldHVybiBpbnB1dF9zdGF0ZTsK
LSAgfQotCi0gIHNldE92ZXJsYXlQb2ludGVyUG9zaXRpb24oeCwgeSkgewotICAgIHRoaXMub3Zl
cmxheV9wb2ludGVyX3Bvc2l0aW9uXyA9IHt4OiB4LCB5OiB5fTsKLSAgfQotCi0gIGdldEVtcHR5
R2FtZXBhZCgpIHsKLSAgICAvLyBNb2pvIGNvbXBsYWlucyBpZiBzb21lIG9mIHRoZSBwcm9wZXJ0
aWVzIG9uIEdhbWVwYWQgYXJlIG51bGwsIHNvIHNldAotICAgIC8vIGV2ZXJ5dGhpbmcgdG8gcmVh
c29uYWJsZSBkZWZhdWx0cyB0aGF0IHRlc3RzIGNhbiBvdmVycmlkZS4KLSAgICBjb25zdCBnYW1l
cGFkID0gewotICAgICAgY29ubmVjdGVkOiB0cnVlLAotICAgICAgaWQ6ICIiLAotICAgICAgdGlt
ZXN0YW1wOiAwLAotICAgICAgYXhlczogW10sCi0gICAgICBidXR0b25zOiBbXSwKLSAgICAgIG1h
cHBpbmc6ICJ4ci1zdGFuZGFyZCIsCi0gICAgICBkaXNwbGF5X2lkOiAwLAotICAgIH07Ci0KLSAg
ICBzd2l0Y2ggKHRoaXMuaGFuZGVkbmVzc18pIHsKLSAgICAgIGNhc2UgJ2xlZnQnOgotICAgICAg
Z2FtZXBhZC5oYW5kID0gZGV2aWNlLm1vam9tLkdhbWVwYWRIYW5kLkdhbWVwYWRIYW5kTGVmdDsK
LSAgICAgIGJyZWFrOwotICAgICAgY2FzZSAncmlnaHQnOgotICAgICAgZ2FtZXBhZC5oYW5kID0g
ZGV2aWNlLm1vam9tLkdhbWVwYWRIYW5kLkdhbWVwYWRIYW5kUmlnaHQ7Ci0gICAgICBicmVhazsK
LSAgICAgIGRlZmF1bHQ6Ci0gICAgICBnYW1lcGFkLmhhbmQgPSBkZXZpY2UubW9qb20uR2FtZXBh
ZEhhbmQuR2FtZXBhZEhhbmROb25lOwotICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgcmV0dXJu
IGdhbWVwYWQ7Ci0gIH0KLQotICBhZGRHYW1lcGFkQnV0dG9uKGJ1dHRvblN0YXRlKSB7Ci0gICAg
aWYgKGJ1dHRvblN0YXRlID09IG51bGwpIHsKLSAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBj
b25zdCBidXR0b25JbmRleCA9IHRoaXMuZ2V0QnV0dG9uSW5kZXgoYnV0dG9uU3RhdGUuYnV0dG9u
VHlwZSk7Ci0gICAgY29uc3QgYXhlc1N0YXJ0SW5kZXggPSB0aGlzLmdldEF4ZXNTdGFydEluZGV4
KGJ1dHRvblN0YXRlLmJ1dHRvblR5cGUpOwotCi0gICAgaWYgKGJ1dHRvbkluZGV4ID09IC0xKSB7
Ci0gICAgICB0aHJvdyBuZXcgRXJyb3IoIlVua25vd24gQnV0dG9uIFR5cGUhIik7Ci0gICAgfQot
Ci0gICAgdGhpcy5nYW1lcGFkXy5idXR0b25zW2J1dHRvbkluZGV4XSA9IHsKLSAgICAgIHByZXNz
ZWQ6IGJ1dHRvblN0YXRlLnByZXNzZWQsCi0gICAgICB0b3VjaGVkOiBidXR0b25TdGF0ZS50b3Vj
aGVkLAotICAgICAgdmFsdWU6IGJ1dHRvblN0YXRlLnByZXNzZWRWYWx1ZQotICAgIH07Ci0KLSAg
ICAvLyBBZGQgeC95IHZhbHVlIGlmIHN1cHBvcnRlZC4KLSAgICBpZiAoYXhlc1N0YXJ0SW5kZXgg
IT0gLTEpIHsKLSAgICAgIHRoaXMuZ2FtZXBhZF8uYXhlc1theGVzU3RhcnRJbmRleF0gPSAoYnV0
dG9uU3RhdGUueFZhbHVlID09IG51bGwgPyAwLjAgOiBidXR0b25TYXRlLnhWYWx1ZSk7Ci0gICAg
ICB0aGlzLmdhbWVwYWRfLmF4ZXNbYXhlc1N0YXJ0SW5kZXggKyAxXSA9IChidXR0b25TdGF0ZS55
VmFsdWUgPT0gbnVsbCA/IDAuMCA6IGJ1dHRvblNhdGUueVZhbHVlKTsKLSAgICB9Ci0gIH0KLQot
ICAvLyBHZW5lcmFsIEhlbHBlciBtZXRob2RzCi0gIGdldEJ1dHRvbkluZGV4KGJ1dHRvblR5cGUp
IHsKLSAgICBzd2l0Y2ggKGJ1dHRvblR5cGUpIHsKLSAgICAgIGNhc2UgJ2dyaXAnOgotICAgICAg
ICByZXR1cm4gMTsKLSAgICAgIGNhc2UgJ3RvdWNocGFkJzoKLSAgICAgICAgcmV0dXJuIDI7Ci0g
ICAgICBjYXNlICd0aHVtYnN0aWNrJzoKLSAgICAgICAgcmV0dXJuIDM7Ci0gICAgICBjYXNlICdv
cHRpb25hbC1idXR0b24nOgotICAgICAgICByZXR1cm4gNDsKLSAgICAgIGNhc2UgJ29wdGlvbmFs
LXRodW1ic3RpY2snOgotICAgICAgICByZXR1cm4gNTsKLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAg
IHJldHVybiAtMTsKLSAgICB9Ci0gIH0KLQotICBnZXRBeGVzU3RhcnRJbmRleChidXR0b25UeXBl
KSB7Ci0gICAgc3dpdGNoIChidXR0b25UeXBlKSB7Ci0gICAgICBjYXNlICd0b3VjaHBhZCc6Ci0g
ICAgICAgIHJldHVybiAwOwotICAgICAgY2FzZSAndGh1bWJzdGljayc6Ci0gICAgICAgIHJldHVy
biAyOwotICAgICAgY2FzZSAnb3B0aW9uYWwtdGh1bWJzdGljayc6Ci0gICAgICAgIHJldHVybiA0
OwotICAgICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIC0xOwotICAgIH0KLSAgfQotCi0gIF9n
ZXRNb2pvRnJvbUlucHV0U291cmNlKG1vam9fZnJvbV92aWV3ZXIpIHsKLSAgICByZXR1cm4gdGhp
cy5tb2pvX2Zyb21fcG9pbnRlcl8ubWF0cml4OwotICB9Ci19Ci0KLS8vIE1vam8gaGVscGVyIGNs
YXNzZXMKLWNsYXNzIE1vY2tYUlByZXNlbnRhdGlvblByb3ZpZGVyIHsKLSAgY29uc3RydWN0b3Io
KSB7Ci0gICAgdGhpcy5iaW5kaW5nXyA9IG5ldyBtb2pvLkJpbmRpbmcoZGV2aWNlLm1vam9tLlhS
UHJlc2VudGF0aW9uUHJvdmlkZXIsIHRoaXMpOwotCi0gICAgdGhpcy5zdWJtaXRfZnJhbWVfY291
bnRfID0gMDsKLSAgICB0aGlzLm1pc3NpbmdfZnJhbWVfY291bnRfID0gMDsKLSAgfQotCi0gIGJp
bmRQcm92aWRlcihyZXF1ZXN0KSB7Ci0gICAgY29uc3QgcHJvdmlkZXJQdHIgPSBuZXcgZGV2aWNl
Lm1vam9tLlhSUHJlc2VudGF0aW9uUHJvdmlkZXJQdHIoKTsKLSAgICBjb25zdCBwcm92aWRlclJl
cXVlc3QgPSBtb2pvLm1ha2VSZXF1ZXN0KHByb3ZpZGVyUHRyKTsKLQotICAgIHRoaXMuYmluZGlu
Z18uY2xvc2UoKTsKLQotICAgIHRoaXMuYmluZGluZ18gPSBuZXcgbW9qby5CaW5kaW5nKAotICAg
ICAgICBkZXZpY2UubW9qb20uWFJQcmVzZW50YXRpb25Qcm92aWRlciwgdGhpcywgcHJvdmlkZXJS
ZXF1ZXN0KTsKLQotICAgIHJldHVybiBwcm92aWRlclB0cjsKLSAgfQotCi0gIGdldENsaWVudFJl
Y2VpdmVyKCkgewotICAgIHRoaXMuc3VibWl0RnJhbWVDbGllbnRfID0gbmV3IGRldmljZS5tb2pv
bS5YUlByZXNlbnRhdGlvbkNsaWVudFB0cigpOwotICAgIHJldHVybiBtb2pvLm1ha2VSZXF1ZXN0
KHRoaXMuc3VibWl0RnJhbWVDbGllbnRfKTsKLSAgfQotCi0gIC8vIFhSUHJlc2VudGF0aW9uUHJv
dmlkZXIgbW9qbyBpbXBsZW1lbnRhdGlvbgotICBzdWJtaXRGcmFtZU1pc3NpbmcoZnJhbWVJZCwg
bWFpbGJveEhvbGRlciwgdGltZVdhaXRlZCkgewotICAgIHRoaXMubWlzc2luZ19mcmFtZV9jb3Vu
dF8rKzsKLSAgfQotCi0gIHN1Ym1pdEZyYW1lKGZyYW1lSWQsIG1haWxib3hIb2xkZXIsIHRpbWVX
YWl0ZWQpIHsKLSAgICB0aGlzLnN1Ym1pdF9mcmFtZV9jb3VudF8rKzsKLQotICAgIC8vIFRyaWdn
ZXIgdGhlIHN1Ym1pdCBjb21wbGV0aW9uIGNhbGxiYWNrcyBoZXJlLiBXQVJOSU5HOiBUaGUKLSAg
ICAvLyBKYXZhc2NyaXB0LWJhc2VkIG1vam8gbW9ja3MgYXJlICpub3QqIHJlLWVudHJhbnQuIEl0
J3MgT0sgdG8KLSAgICAvLyB3YWl0IGZvciB0aGVzZSBub3RpZmljYXRpb25zIG9uIHRoZSBuZXh0
IGZyYW1lLCBidXQgd2FpdGluZwotICAgIC8vIHdpdGhpbiB0aGUgY3VycmVudCBmcmFtZSB3b3Vs
ZCBuZXZlciBmaW5pc2ggc2luY2UgdGhlIGluY29taW5nCi0gICAgLy8gY2FsbHMgd291bGQgYmUg
cXVldWVkIHVudGlsIHRoZSBjdXJyZW50IGV4ZWN1dGlvbiBjb250ZXh0IGZpbmlzaGVzLgotICAg
IHRoaXMuc3VibWl0RnJhbWVDbGllbnRfLm9uU3VibWl0RnJhbWVUcmFuc2ZlcnJlZCh0cnVlKTsK
LSAgICB0aGlzLnN1Ym1pdEZyYW1lQ2xpZW50Xy5vblN1Ym1pdEZyYW1lUmVuZGVyZWQoKTsKLSAg
fQotCi0gIC8vIFV0aWxpdHkgbWV0aG9kcwotICBDbG9zZSgpIHsKLSAgICB0aGlzLmJpbmRpbmdf
LmNsb3NlKCk7Ci0gIH0KLX0KLQotbmF2aWdhdG9yLnhyLnRlc3QgPSBuZXcgQ2hyb21lWFJUZXN0
KCk7CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRl
c3RzL3Jlc291cmNlcy9jaHJvbWl1bS93ZWJ4ci10ZXN0LmpzLmhlYWRlcnMgYi9MYXlvdXRUZXN0
cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS93ZWJ4
ci10ZXN0LmpzLmhlYWRlcnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY4MDVjMzIz
ZGY1YTk3NTIzMTY0OGI4MzBlMzNjZTE4M2MzY2JiZDMuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0
Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vd2VieHItdGVzdC5qcy5oZWFkZXJzCisrKyAv
ZGV2L251bGwKQEAgLTEgKzAsMCBAQAotQ29udGVudC1UeXBlOiB0ZXh0L2phdmFzY3JpcHQ7IGNo
YXJzZXQ9dXRmLTgKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxh
dGZvcm0tdGVzdHMvcmVzb3VyY2VzL2lkbGhhcm5lc3MuanMgYi9MYXlvdXRUZXN0cy9pbXBvcnRl
ZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9pZGxoYXJuZXNzLmpzCmluZGV4IDI1
YzE5M2I1NWU1Yjc2ZmZmNmRjMTgwMjY4MzU3YTExYTI3YWJjMDguLjk5NGEwZDgyZWY0NDRiZjQ1
NjZkYzI3YTgxNDg3ZTcwZDllMjg0ZWEgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2ltcG9ydGVk
L3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2lkbGhhcm5lc3MuanMKKysrIGIvTGF5
b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvaWRsaGFy
bmVzcy5qcwpAQCAtMjUzNCw2ICsyNTM0LDEwIEBAIElkbEludGVyZmFjZS5wcm90b3R5cGUuZG9f
bWVtYmVyX29wZXJhdGlvbl9hc3NlcnRzID0gZnVuY3Rpb24obWVtYmVySG9sZGVyT2JqZWN0CiAg
ICAgICAgIG1lbWJlckhvbGRlck9iamVjdFttZW1iZXIubmFtZV0ubGVuZ3RoLAogICAgICAgICBt
aW5PdmVybG9hZExlbmd0aChjdG9ycyksCiAgICAgICAgICJwcm9wZXJ0eSBoYXMgd3JvbmcgLmxl
bmd0aCIpOworICAgIGFzc2VydF9lcXVhbHMoCisgICAgICAgIG1lbWJlckhvbGRlck9iamVjdFtt
ZW1iZXIubmFtZV0ubmFtZSwKKyAgICAgICAgbWVtYmVyLm5hbWUsCisgICAgICAgICJwcm9wZXJ0
eSBoYXMgd3JvbmcgLm5hbWUiKTsKIAogICAgIC8vIE1ha2Ugc29tZSBzdWl0YWJsZSBhcmd1bWVu
dHMKICAgICB2YXIgYXJncyA9IG1lbWJlci5hcmd1bWVudHMubWFwKGZ1bmN0aW9uKGFyZykgewpA
QCAtMzQzMywxNiArMzQzNyw2MCBAQCBJZGxOYW1lc3BhY2UucHJvdG90eXBlLnRlc3RfbWVtYmVy
X2F0dHJpYnV0ZSA9IGZ1bmN0aW9uIChtZW1iZXIpCiAgICAgfS5iaW5kKHRoaXMpKTsKIH07CiAK
LUlkbE5hbWVzcGFjZS5wcm90b3R5cGUudGVzdCA9IGZ1bmN0aW9uICgpCitJZGxOYW1lc3BhY2Uu
cHJvdG90eXBlLnRlc3Rfc2VsZiA9IGZ1bmN0aW9uICgpCiB7CiAgICAgLyoqCiAgICAgICogVE9E
TyhsdWtlYmplcnJpbmcpOiBBc3NlcnQ6CiAgICAgICogLSAiTm90ZSB0aGF0IHVubGlrZSBpbnRl
cmZhY2VzIG9yIGRpY3Rpb25hcmllcywgbmFtZXNwYWNlcyBkbyBub3QgY3JlYXRlIHR5cGVzLiIK
LSAgICAgKiAtICJPZiB0aGUgZXh0ZW5kZWQgYXR0cmlidXRlcyBkZWZpbmVkIGluIHRoaXMgc3Bl
Y2lmaWNhdGlvbiwgb25seSB0aGUKLSAgICAgKiAgICAgW0V4cG9zZWRdIGFuZCBbU2VjdXJlQ29u
dGV4dF0gZXh0ZW5kZWQgYXR0cmlidXRlcyBhcmUgYXBwbGljYWJsZSB0byBuYW1lc3BhY2VzLiIK
LSAgICAgKiAtICJOYW1lc3BhY2VzIG11c3QgYmUgYW5ub3RhdGVkIHdpdGggdGhlIFtFeHBvc2Vk
XSBleHRlbmRlZCBhdHRyaWJ1dGUuIgogICAgICAqLwogCisgICAgc3Vic2V0VGVzdEJ5S2V5KHRo
aXMubmFtZSwgdGVzdCwgKCkgPT4geworICAgICAgICBhc3NlcnRfdHJ1ZSh0aGlzLmV4dEF0dHJz
LmV2ZXJ5KG8gPT4gby5uYW1lID09PSAiRXhwb3NlZCIgfHwgby5uYW1lID09PSAiU2VjdXJlQ29u
dGV4dCIpLAorICAgICAgICAgICAgIk9ubHkgdGhlIFtFeHBvc2VkXSBhbmQgW1NlY3VyZUNvbnRl
eHRdIGV4dGVuZGVkIGF0dHJpYnV0ZXMgYXJlIGFwcGxpY2FibGUgdG8gbmFtZXNwYWNlcyIpOwor
ICAgICAgICBhc3NlcnRfdHJ1ZSh0aGlzLmhhc19leHRlbmRlZF9hdHRyaWJ1dGUoIkV4cG9zZWQi
KSwKKyAgICAgICAgICAgICJOYW1lc3BhY2VzIG11c3QgYmUgYW5ub3RhdGVkIHdpdGggdGhlIFtF
eHBvc2VkXSBleHRlbmRlZCBhdHRyaWJ1dGUiKTsKKyAgICB9LCBgJHt0aGlzLm5hbWV9IG5hbWVz
cGFjZTogZXh0ZW5kZWQgYXR0cmlidXRlc2ApOworCisgICAgY29uc3QgbmFtZXNwYWNlT2JqZWN0
ID0gc2VsZlt0aGlzLm5hbWVdOworCisgICAgc3Vic2V0VGVzdEJ5S2V5KHRoaXMubmFtZSwgdGVz
dCwgKCkgPT4geworICAgICAgICBjb25zdCBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVz
Y3JpcHRvcihzZWxmLCB0aGlzLm5hbWUpOworICAgICAgICBhc3NlcnRfZXF1YWxzKGRlc2MudmFs
dWUsIG5hbWVzcGFjZU9iamVjdCwgYHdyb25nIHZhbHVlIGZvciAke3RoaXMubmFtZX0gbmFtZXNw
YWNlIG9iamVjdGApOworICAgICAgICBhc3NlcnRfdHJ1ZShkZXNjLndyaXRhYmxlLCAibmFtZXNw
YWNlIG9iamVjdCBzaG91bGQgYmUgd3JpdGFibGUiKTsKKyAgICAgICAgYXNzZXJ0X2ZhbHNlKGRl
c2MuZW51bWVyYWJsZSwgIm5hbWVzcGFjZSBvYmplY3Qgc2hvdWxkIG5vdCBiZSBlbnVtZXJhYmxl
Iik7CisgICAgICAgIGFzc2VydF90cnVlKGRlc2MuY29uZmlndXJhYmxlLCAibmFtZXNwYWNlIG9i
amVjdCBzaG91bGQgYmUgY29uZmlndXJhYmxlIik7CisgICAgICAgIGFzc2VydF9mYWxzZSgiZ2V0
IiBpbiBkZXNjLCAibmFtZXNwYWNlIG9iamVjdCBzaG91bGQgbm90IGhhdmUgYSBnZXR0ZXIiKTsK
KyAgICAgICAgYXNzZXJ0X2ZhbHNlKCJzZXQiIGluIGRlc2MsICJuYW1lc3BhY2Ugb2JqZWN0IHNo
b3VsZCBub3QgaGF2ZSBhIHNldHRlciIpOworICAgIH0sIGAke3RoaXMubmFtZX0gbmFtZXNwYWNl
OiBwcm9wZXJ0eSBkZXNjcmlwdG9yYCk7CisKKyAgICBzdWJzZXRUZXN0QnlLZXkodGhpcy5uYW1l
LCB0ZXN0LCAoKSA9PiB7CisgICAgICAgIGFzc2VydF90cnVlKE9iamVjdC5pc0V4dGVuc2libGUo
bmFtZXNwYWNlT2JqZWN0KSk7CisgICAgfSwgYCR7dGhpcy5uYW1lfSBuYW1lc3BhY2U6IFtbRXh0
ZW5zaWJsZV1dIGlzIHRydWVgKTsKKworICAgIHN1YnNldFRlc3RCeUtleSh0aGlzLm5hbWUsIHRl
c3QsICgpID0+IHsKKyAgICAgICAgYXNzZXJ0X3RydWUobmFtZXNwYWNlT2JqZWN0IGluc3RhbmNl
b2YgT2JqZWN0KTsKKworICAgICAgICBpZiAodGhpcy5uYW1lID09PSAiY29uc29sZSIpIHsKKyAg
ICAgICAgICAgIC8vIGh0dHBzOi8vY29uc29sZS5zcGVjLndoYXR3Zy5vcmcvI2NvbnNvbGUtbmFt
ZXNwYWNlCisgICAgICAgICAgICBjb25zdCBuYW1lc3BhY2VQcm90b3R5cGUgPSBPYmplY3QuZ2V0
UHJvdG90eXBlT2YobmFtZXNwYWNlT2JqZWN0KTsKKyAgICAgICAgICAgIGFzc2VydF9lcXVhbHMo
UmVmbGVjdC5vd25LZXlzKG5hbWVzcGFjZVByb3RvdHlwZSkubGVuZ3RoLCAwKTsKKyAgICAgICAg
ICAgIGFzc2VydF9lcXVhbHMoT2JqZWN0LmdldFByb3RvdHlwZU9mKG5hbWVzcGFjZVByb3RvdHlw
ZSksIE9iamVjdC5wcm90b3R5cGUpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgYXNz
ZXJ0X2VxdWFscyhPYmplY3QuZ2V0UHJvdG90eXBlT2YobmFtZXNwYWNlT2JqZWN0KSwgT2JqZWN0
LnByb3RvdHlwZSk7CisgICAgICAgIH0KKyAgICB9LCBgJHt0aGlzLm5hbWV9IG5hbWVzcGFjZTog
W1tQcm90b3R5cGVdXSBpcyBPYmplY3QucHJvdG90eXBlYCk7CisKKyAgICBzdWJzZXRUZXN0QnlL
ZXkodGhpcy5uYW1lLCB0ZXN0LCAoKSA9PiB7CisgICAgICAgIGFzc2VydF9lcXVhbHModHlwZW9m
IG5hbWVzcGFjZU9iamVjdCwgIm9iamVjdCIpOworICAgIH0sIGAke3RoaXMubmFtZX0gbmFtZXNw
YWNlOiB0eXBlb2YgaXMgIm9iamVjdCJgKTsKK307CisKK0lkbE5hbWVzcGFjZS5wcm90b3R5cGUu
dGVzdCA9IGZ1bmN0aW9uICgpCit7CisgICAgaWYgKCF0aGlzLnVudGVzdGVkKSB7CisgICAgICAg
IHRoaXMudGVzdF9zZWxmKCk7CisgICAgfQorCiAgICAgZm9yIChjb25zdCB2IG9mIE9iamVjdC52
YWx1ZXModGhpcy5tZW1iZXJzKSkgewogICAgICAgICBzd2l0Y2ggKHYudHlwZSkgewogCmRpZmYg
LS1naXQgYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291
cmNlcy90ZXN0LW9ubHktYXBpLmpzIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0
Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC1vbmx5LWFwaS5qcwppbmRleCA1Mzg5MWQyMWJkNGVh
NTdmNzg4ZDM1MjVhN2JiOTE0NWUxNjhmMmM3Li5lZjY2ZTBlNzMzZjljNjgwMDQxMjlkMjRiM2M5
YWQxMmI5YWEwNzA4IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBs
YXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0LW9ubHktYXBpLmpzCisrKyBiL0xheW91dFRlc3Rz
L2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3Qtb25seS1hcGku
anMKQEAgLTIzLDcgKzIzLDcgQEAgZnVuY3Rpb24gbG9hZFNjcmlwdChwYXRoKSB7CiAgICAgc2Ny
aXB0LmFzeW5jID0gZmFsc2U7CiAgICAgY29uc3QgcCA9IG5ldyBQcm9taXNlKChyZXNvbHZlLCBy
ZWplY3QpID0+IHsKICAgICAgIHNjcmlwdC5vbmxvYWQgPSAoKSA9PiB7IHJlc29sdmUoKTsgfTsK
LSAgICAgIHNjcmlwdC5vbmVycm9yID0gZSA9PiB7IHJlamVjdChlKTsgfTsKKyAgICAgIHNjcmlw
dC5vbmVycm9yID0gZSA9PiB7IHJlamVjdChgRXJyb3IgbG9hZGluZyAke3BhdGh9YCk7IH07CiAg
ICAgfSkKICAgICBkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKHNjcmlwdCk7CiAgICAgcmV0dXJu
IHA7CkBAIC0zMSw3ICszMSw3IEBAIGZ1bmN0aW9uIGxvYWRTY3JpcHQocGF0aCkgewogfQogCiAv
KioKLSAqIEEgaGVscGVyIGZvciBDaHJvbWl1bS1iYXNlZCBicm93c2VycyB0byBsb2FkIE1vam8g
SlMgYmluZGluZ2RzCisgKiBBIGhlbHBlciBmb3IgQ2hyb21pdW0tYmFzZWQgYnJvd3NlcnMgdG8g
bG9hZCBNb2pvIEpTIGJpbmRpbmdzCiAgKgogICogVGhpcyBpcyBhbiBhc3luYyBmdW5jdGlvbiB0
aGF0IHdvcmtzIGluIGJvdGggd29ya2VycyBhbmQgd2luZG93cy4gSXQgZmlyc3QKICAqIGxvYWRz
IG1vam9fYmluZGluZ3MuanMsIGRpc2FibGVzIGF1dG9tYXRpYyBkZXBlbmRlbmN5IGxvYWRpbmcs
IGFuZCBsb2FkcyBhbGwKQEAgLTM5LDE1ICszOSwyMiBAQCBmdW5jdGlvbiBsb2FkU2NyaXB0KHBh
dGgpIHsKICAqIHN1Y2Nlc3NmdWxseSwgb3IgcmVqZWN0cyBpZiBhbnkgZXhjZXB0aW9uIGlzIHJh
aXNlZC4gSWYgdGVzdGhhcm5lc3MuanMgaXMKICAqIHVzZWQsIGFuIHVuY2F1Z2h0IGV4Y2VwdGlv
biB3aWxsIHRlcm1pbmF0ZSB0aGUgdGVzdCB3aXRoIGEgaGFybmVzcyBlcnJvcgogICogKHVubGVz
cyBgYWxsb3dfdW5jYXVnaHRfZXhjZXB0aW9uYCBpcyB0cnVlKSwgd2hpY2ggaXMgdXN1YWxseSB0
aGUgZGVzaXJlZAotICogYmVoYXZpb3VyLiBPbmx5IGNhbGwgdGhpcyBmdW5jdGlvbiBpZiBpc0No
cm9taXVtQmFzZWQgPT09IHRydWUuCisgKiBiZWhhdmlvdXIuCisgKgorICogVGhpcyBmdW5jdGlv
biBhbHNvIHdvcmtzIHdpdGggQmxpbmsgd2ViIHRlc3RzIGxvYWRlZCBmcm9tIGZpbGU6Ly8sIGlu
IHdoaWNoCisgKiBjYXNlIGZpbGU6Ly8gd2lsbCBiZSBwcmVwZW5kZWQgdG8gYWxsICcvZ2VuLy4u
LicgVVJMcy4KKyAqCisgKiBPbmx5IGNhbGwgdGhpcyBmdW5jdGlvbiBpZiBpc0Nocm9taXVtQmFz
ZWQgPT09IHRydWUuCiAgKgogICogQHBhcmFtIHtBcnJheS48c3RyaW5nPn0gcmVzb3VyY2VzIC0g
QSBsaXN0IG9mIHNjcmlwdHMgdG8gbG9hZDogTW9qbyBKUwotICogICBiaW5kaW5ncyBzaG91bGQg
YmUgb2YgdGhlIGZvcm0gJy9nZW4vLi4vKi5tb2pvbS5qcycsIHRoZSBvcmRlcmluZyBvZiB3aGlj
aAotICogICBkb2VzIG5vdCBtYXR0ZXIuIERvIG5vdCBpbmNsdWRlIG1vam9fYmluZGluZ3MuanMg
aW4gdGhpcyBsaXN0LiBZb3UgbWF5Ci0gKiAgIGluY2x1ZGUgb3RoZXIgbm9uLW1vam9tLmpzIHNj
cmlwdHMgZm9yIGNvbnZlbmllbmNlLgorICogICBiaW5kaW5ncyBzaG91bGQgYmUgb2YgdGhlIGZv
cm0gJy9nZW4vLi4vKi5tb2pvbS5qcycgb3IKKyAqICAgJy9nZW4vLi4vKi5tb2pvbS1saXRlLmpz
JyAocmVxdWlyZXMgYGxpdGVgIHRvIGJlIHRydWUpOyB0aGUgb3JkZXIgZG9lcyBub3QKKyAqICAg
bWF0dGVyLiBEbyBub3QgaW5jbHVkZSAnbW9qb19iaW5kaW5ncy5qcycgb3IgJ21vam9fYmluZGlu
Z3NfbGl0ZS5qcycuCisgKiBAcGFyYW0ge2Jvb2xlYW49fSBsaXRlIC0gV2hldGhlciB0aGUgbGl0
ZSBiaW5kaW5ncyAoKi5tb2pvbS1saXRlLmpzKSBhcmUgdXNlZAorICogICAoZGVmYXVsdCBpcyBm
YWxzZSkuCiAgKiBAcmV0dXJucyB7UHJvbWlzZX0KICAqLwotYXN5bmMgZnVuY3Rpb24gbG9hZE1v
am9SZXNvdXJjZXMocmVzb3VyY2VzKSB7Cithc3luYyBmdW5jdGlvbiBsb2FkTW9qb1Jlc291cmNl
cyhyZXNvdXJjZXMsIGxpdGUgPSBmYWxzZSkgewogICBpZiAoIWlzQ2hyb21pdW1CYXNlZCkgewog
ICAgIHRocm93IG5ldyBFcnJvcignTW9qb0pTIG5vdCBlbmFibGVkOyBzdGFydCBDaHJvbWUgd2l0
aCAtLWVuYWJsZS1ibGluay1mZWF0dXJlcz1Nb2pvSlMsTW9qb0pTVGVzdCcpOwogICB9CkBAIC01
NSwxNCArNjIsMzkgQEAgYXN5bmMgZnVuY3Rpb24gbG9hZE1vam9SZXNvdXJjZXMocmVzb3VyY2Vz
KSB7CiAgICAgcmV0dXJuOwogICB9CiAKLSAgLy8gV2Ugd2FudCB0byBsb2FkIG1vam9fYmluZGlu
Z3MuanMgc2VwYXJhdGVseSB0byBzZXQgbW9qby5jb25maWcuCi0gIGlmIChyZXNvdXJjZXMuc29t
ZShwID0+IHAuZW5kc1dpdGgoJy9tb2pvX2JpbmRpbmdzLmpzJykpKSB7Ci0gICAgdGhyb3cgbmV3
IEVycm9yKCdEbyBub3QgbG9hZCBtb2pvX2JpbmRpbmdzLmpzIGV4cGxpY2l0bHkuJyk7CisgIGxl
dCBnZW5QcmVmaXggPSAnJzsKKyAgaWYgKHNlbGYubG9jYXRpb24ucGF0aG5hbWUuaW5jbHVkZXMo
Jy93ZWJfdGVzdHMvJykpIHsKKyAgICAvLyBCbGluayBpbnRlcm5hbCB3ZWIgdGVzdHMKKyAgICBn
ZW5QcmVmaXggPSAnZmlsZTovLyc7CisgIH0KKworICBmb3IgKGNvbnN0IHBhdGggb2YgcmVzb3Vy
Y2VzKSB7CisgICAgLy8gV2Ugd2FudCB0byBsb2FkIG1vam9fYmluZGluZ3MuanMgc2VwYXJhdGVs
eSB0byBzZXQgbW9qby5jb25maWcuCisgICAgaWYgKHBhdGguZW5kc1dpdGgoJy9tb2pvX2JpbmRp
bmdzLmpzJykpIHsKKyAgICAgIHRocm93IG5ldyBFcnJvcignRG8gbm90IGxvYWQgbW9qb19iaW5k
aW5ncy5qcyBleHBsaWNpdGx5LicpOworICAgIH0KKyAgICBpZiAocGF0aC5lbmRzV2l0aCgnL21v
am9fYmluZGluZ3NfbGl0ZS5qcycpKSB7CisgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0RvIG5vdCBs
b2FkIG1vam9fYmluZGluZ3NfbGl0ZS5qcyBleHBsaWNpdGx5LicpOworICAgIH0KKyAgICBpZiAo
bGl0ZSkgeworICAgICAgaWYgKCEgL15cL2dlblwvLipcLm1vam9tLWxpdGVcLmpzJC8udGVzdChw
YXRoKSkgeworICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVucmVjb2duaXplZCByZXNvdXJjZSBw
YXRoOiAke3BhdGh9YCk7CisgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgIGlmICghIC9eXC9n
ZW5cLy4qXC5tb2pvbVwuanMkLy50ZXN0KHBhdGgpKSB7CisgICAgICAgIHRocm93IG5ldyBFcnJv
cihgVW5yZWNvZ25pemVkIHJlc291cmNlIHBhdGg6ICR7cGF0aH1gKTsKKyAgICAgIH0KKyAgICB9
CisgIH0KKworICBpZiAobGl0ZSkgeworICAgIGF3YWl0IGxvYWRTY3JpcHQoZ2VuUHJlZml4ICsg
Jy9nZW4vbGF5b3V0X3Rlc3RfZGF0YS9tb2pvL3B1YmxpYy9qcy9tb2pvX2JpbmRpbmdzX2xpdGUu
anMnKTsKKyAgfSBlbHNlIHsKKyAgICBhd2FpdCBsb2FkU2NyaXB0KGdlblByZWZpeCArICcvZ2Vu
L2xheW91dF90ZXN0X2RhdGEvbW9qby9wdWJsaWMvanMvbW9qb19iaW5kaW5ncy5qcycpOworICAg
IG1vam8uY29uZmlnLmF1dG9Mb2FkTW9qb21EZXBzID0gZmFsc2U7CiAgIH0KLSAgYXdhaXQgbG9h
ZFNjcmlwdCgnL2dlbi9sYXlvdXRfdGVzdF9kYXRhL21vam8vcHVibGljL2pzL21vam9fYmluZGlu
Z3MuanMnKTsKLSAgbW9qby5jb25maWcuYXV0b0xvYWRNb2pvbURlcHMgPSBmYWxzZTsKIAogICBm
b3IgKGNvbnN0IHBhdGggb2YgcmVzb3VyY2VzKSB7Ci0gICAgYXdhaXQgbG9hZFNjcmlwdChwYXRo
KTsKKyAgICBhd2FpdCBsb2FkU2NyaXB0KGdlblByZWZpeCArIHBhdGgpOwogICB9CiB9CmRpZmYg
LS1naXQgYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291
cmNlcy90ZXN0LW9ubHktYXBpLm0uanMgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBs
YXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0LW9ubHktYXBpLm0uanMKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOTg0
ZjYzNWFiYWMwMDI3MjMwNGM3OGYyZjViYjk5YjM5N2IyNzUyMwotLS0gL2Rldi9udWxsCisrKyBi
L0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rl
c3Qtb25seS1hcGkubS5qcwpAQCAtMCwwICsxLDUgQEAKKy8qIFdoZXRoZXIgdGhlIGJyb3dzZXIg
aXMgQ2hyb21pdW0tYmFzZWQgd2l0aCBNb2pvSlMgZW5hYmxlZCAqLworZXhwb3J0IGNvbnN0IGlz
Q2hyb21pdW1CYXNlZCA9ICdNb2pvSW50ZXJmYWNlSW50ZXJjZXB0b3InIGluIHNlbGY7CisKKy8q
IFdoZXRoZXIgdGhlIGJyb3dzZXIgaXMgV2ViS2l0LWJhc2VkIHdpdGggaW50ZXJuYWwgdGVzdC1v
bmx5IEFQSSBlbmFibGVkICovCitleHBvcnQgY29uc3QgaXNXZWJLaXRCYXNlZCA9ICFpc0Nocm9t
aXVtQmFzZWQgJiYgJ2ludGVybmFscycgaW4gc2VsZjsKZGlmZiAtLWdpdCBhL0xheW91dFRlc3Rz
L2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3Qtb25seS1hcGku
bS5qcy5oZWFkZXJzIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0
cy9yZXNvdXJjZXMvdGVzdC1vbmx5LWFwaS5tLmpzLmhlYWRlcnMKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNWU4ZjY0
MGM2NjU5ZDE3NmVhY2E0YzcxY2MxNzk4YjcyODU1NDBiNwotLS0gL2Rldi9udWxsCisrKyBiL0xh
eW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3Qt
b25seS1hcGkubS5qcy5oZWFkZXJzCkBAIC0wLDAgKzEsMiBAQAorQ29udGVudC1UeXBlOiB0ZXh0
L2phdmFzY3JpcHQ7IGNoYXJzZXQ9dXRmLTgKK0NhY2hlLUNvbnRyb2w6IG1heC1hZ2U9MzYwMApk
aWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9y
ZXNvdXJjZXMvdGVzdC9jb25mdGVzdC5weSBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWIt
cGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvY29uZnRlc3QucHkKaW5kZXggYTlmNDIwM2Yy
NzljYmFkYjcwMjQ1NmIxZDcxZDZhYTYwZWQ1ZDBlZi4uMWJhZjY2MjJiMDU5OWM0NGZiODVkMjY3
Mjg4MDMxYTA1ZTQyNDNkYyAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dl
Yi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC9jb25mdGVzdC5weQorKysgYi9MYXlvdXRU
ZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L2NvbmZ0
ZXN0LnB5CkBAIC0yNSw2ICsyNSw3IEBAIGltcG9ydCB3ZWJkcml2ZXIKIAogZGVmIHB5dGVzdF9h
ZGRvcHRpb24ocGFyc2VyKToKICAgICBwYXJzZXIuYWRkb3B0aW9uKCItLWJpbmFyeSIsIGFjdGlv
bj0ic3RvcmUiLCBkZWZhdWx0PU5vbmUsIGhlbHA9InBhdGggdG8gYnJvd3NlciBiaW5hcnkiKQor
ICAgIHBhcnNlci5hZGRvcHRpb24oIi0taGVhZGxlc3MiLCBhY3Rpb249InN0b3JlX3RydWUiLCBk
ZWZhdWx0PUZhbHNlLCBoZWxwPSJydW4gYnJvd3NlciBpbiBoZWFkbGVzcyBtb2RlIikKIAogCiBk
ZWYgcHl0ZXN0X2NvbGxlY3RfZmlsZShwYXRoLCBwYXJlbnQpOgpAQCAtNDUsOSArNDYsMTEgQEAg
ZGVmIHB5dGVzdF9jb25maWd1cmUoY29uZmlnKToKICAgICBjb25maWcucHJvYyA9IHN1YnByb2Nl
c3MuUG9wZW4oWyJnZWNrb2RyaXZlciJdKQogICAgIGNvbmZpZy5hZGRfY2xlYW51cChjb25maWcu
cHJvYy5raWxsKQogCi0gICAgY2FwYWJpbGl0aWVzID0geyJhbHdheXNNYXRjaCI6IHsiYWNjZXB0
SW5zZWN1cmVDZXJ0cyI6IFRydWV9fQorICAgIGNhcGFiaWxpdGllcyA9IHsiYWx3YXlzTWF0Y2gi
OiB7ImFjY2VwdEluc2VjdXJlQ2VydHMiOiBUcnVlLCAibW96OmZpcmVmb3hPcHRpb25zIjoge319
fQogICAgIGlmIGNvbmZpZy5nZXRvcHRpb24oIi0tYmluYXJ5Iik6Ci0gICAgICAgIGNhcGFiaWxp
dGllc1siYWx3YXlzTWF0Y2giXVsibW96OmZpcmVmb3hPcHRpb25zIl0gPSB7ImJpbmFyeSI6IGNv
bmZpZy5nZXRvcHRpb24oIi0tYmluYXJ5Iil9CisgICAgICAgIGNhcGFiaWxpdGllc1siYWx3YXlz
TWF0Y2giXVsibW96OmZpcmVmb3hPcHRpb25zIl1bImJpbmFyeSJdID0gY29uZmlnLmdldG9wdGlv
bigiLS1iaW5hcnkiKQorICAgIGlmIGNvbmZpZy5nZXRvcHRpb24oIi0taGVhZGxlc3MiKToKKyAg
ICAgICAgY2FwYWJpbGl0aWVzWyJhbHdheXNNYXRjaCJdWyJtb3o6ZmlyZWZveE9wdGlvbnMiXVsi
YXJncyJdID0gWyItLWhlYWRsZXNzIl0KIAogICAgIGNvbmZpZy5kcml2ZXIgPSB3ZWJkcml2ZXIu
U2Vzc2lvbigibG9jYWxob3N0IiwgNDQ0NCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY2FwYWJpbGl0aWVzPWNhcGFiaWxpdGllcykKZGlmZiAtLWdpdCBhL0xheW91dFRl
c3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMv
ZnVuY3Rpb25hbC9pZGxoYXJuZXNzL0lkbE5hbWVzcGFjZS90ZXN0X2F0dHJpYnV0ZS5odG1sIGIv
TGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVz
dC90ZXN0cy9mdW5jdGlvbmFsL2lkbGhhcm5lc3MvSWRsTmFtZXNwYWNlL3Rlc3RfYXR0cmlidXRl
Lmh0bWwKaW5kZXggOGMxZjUxNzIxNjU0NGU3ODIyOTM5MmNjNmYzM2ViMDZjNzc5NjBiMy4uY2E1
ZWRmNDcyM2Q1YjVjMjA1NWMyZjAyNGQ5NTFlOTgxMjRjOGNkOSAxMDA2NDQKLS0tIGEvTGF5b3V0
VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0
cy9mdW5jdGlvbmFsL2lkbGhhcm5lc3MvSWRsTmFtZXNwYWNlL3Rlc3RfYXR0cmlidXRlLmh0bWwK
KysrIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJj
ZXMvdGVzdC90ZXN0cy9mdW5jdGlvbmFsL2lkbGhhcm5lc3MvSWRsTmFtZXNwYWNlL3Rlc3RfYXR0
cmlidXRlLmh0bWwKQEAgLTE2LDEzICsxNiwxOSBAQAogPHNjcmlwdD4KICJ1c2Ugc3RyaWN0IjsK
IAotc2VsZi5mb28gPSB7Ci0gIHRydXRoOiB0cnVlCi19OworT2JqZWN0LmRlZmluZVByb3BlcnR5
KHNlbGYsICJmb28iLCB7CisgIHZhbHVlOiB7CisgICAgdHJ1dGg6IHRydWUsCisgIH0sCisgIHdy
aXRhYmxlOiB0cnVlLAorICBlbnVtZXJhYmxlOiBmYWxzZSwKKyAgY29uZmlndXJhYmxlOiB0cnVl
LAorfSk7CiAKIHZhciBpZGxBcnJheSA9IG5ldyBJZGxBcnJheSgpOwotaWRsQXJyYXkuYWRkX2lk
bHMoCi1gbmFtZXNwYWNlIGZvbyB7CitpZGxBcnJheS5hZGRfaWRscyhgCitbRXhwb3NlZD1XaW5k
b3ddCituYW1lc3BhY2UgZm9vIHsKICAgcmVhZG9ubHkgYXR0cmlidXRlIGJvb2wgdHJ1dGg7CiAg
IHJlYWRvbmx5IGF0dHJpYnV0ZSBib29sIGxpZXM7CiB9O2ApOwpAQCAtMzUsNiArNDEsMzYgQEAg
aWRsQXJyYXkudGVzdCgpOwogICAgICJtZXNzYWdlIjogbnVsbAogICB9LAogICAic3VtbWFyaXpl
ZF90ZXN0cyI6IFsKKyAgICB7CisgICAgICAibmFtZSI6ICJmb28gbmFtZXNwYWNlOiBleHRlbmRl
ZCBhdHRyaWJ1dGVzIiwKKyAgICAgICJzdGF0dXNfc3RyaW5nIjogIlBBU1MiLAorICAgICAgInBy
b3BlcnRpZXMiOiB7fSwKKyAgICAgICJtZXNzYWdlIjogbnVsbAorICAgIH0sCisgICAgeworICAg
ICAgIm5hbWUiOiAiZm9vIG5hbWVzcGFjZTogcHJvcGVydHkgZGVzY3JpcHRvciIsCisgICAgICAi
c3RhdHVzX3N0cmluZyI6ICJQQVNTIiwKKyAgICAgICJwcm9wZXJ0aWVzIjoge30sCisgICAgICAi
bWVzc2FnZSI6IG51bGwKKyAgICB9LAorICAgIHsKKyAgICAgICJuYW1lIjogImZvbyBuYW1lc3Bh
Y2U6IFtbRXh0ZW5zaWJsZV1dIGlzIHRydWUiLAorICAgICAgInN0YXR1c19zdHJpbmciOiAiUEFT
UyIsCisgICAgICAicHJvcGVydGllcyI6IHt9LAorICAgICAgIm1lc3NhZ2UiOiBudWxsCisgICAg
fSwKKyAgICB7CisgICAgICAibmFtZSI6ICJmb28gbmFtZXNwYWNlOiBbW1Byb3RvdHlwZV1dIGlz
IE9iamVjdC5wcm90b3R5cGUiLAorICAgICAgInN0YXR1c19zdHJpbmciOiAiUEFTUyIsCisgICAg
ICAicHJvcGVydGllcyI6IHt9LAorICAgICAgIm1lc3NhZ2UiOiBudWxsCisgICAgfSwKKyAgICB7
CisgICAgICAibmFtZSI6ICJmb28gbmFtZXNwYWNlOiB0eXBlb2YgaXMgXCJvYmplY3RcIiIsCisg
ICAgICAic3RhdHVzX3N0cmluZyI6ICJQQVNTIiwKKyAgICAgICJwcm9wZXJ0aWVzIjoge30sCisg
ICAgICAibWVzc2FnZSI6IG51bGwKKyAgICB9LAogICAgIHsKICAgICAgICJuYW1lIjogImZvbyBu
YW1lc3BhY2U6IGF0dHJpYnV0ZSB0cnV0aCIsCiAgICAgICAic3RhdHVzX3N0cmluZyI6ICJQQVNT
IiwKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVz
dHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC9pZGxoYXJuZXNzL0lkbE5hbWVzcGFj
ZS90ZXN0X29wZXJhdGlvbi5odG1sIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0
Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9mdW5jdGlvbmFsL2lkbGhhcm5lc3MvSWRs
TmFtZXNwYWNlL3Rlc3Rfb3BlcmF0aW9uLmh0bWwKaW5kZXggMWI5OTU1MjlkMjM5Y2EwOWUyODk2
ZDY1MzIyNjI0M2I1ODFhY2IyZS4uNjBkN2Q0N2M5ZWVhNjRhODFkNTM5YWZhNmZkM2FjZDcyNTgx
YzAwYiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10
ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9mdW5jdGlvbmFsL2lkbGhhcm5lc3MvSWRsTmFtZXNw
YWNlL3Rlc3Rfb3BlcmF0aW9uLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dl
Yi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9mdW5jdGlvbmFsL2lkbGhhcm5l
c3MvSWRsTmFtZXNwYWNlL3Rlc3Rfb3BlcmF0aW9uLmh0bWwKQEAgLTE2LDM4ICsxNiw1NyBAQAog
PHNjcmlwdD4KICJ1c2Ugc3RyaWN0IjsKIAotc2VsZi5mb28gPSB7Ci0gIFRydXRoOiBmdW5jdGlv
bigpIHt9LAotfTsKLU9iamVjdC5kZWZpbmVQcm9wZXJ0eShzZWxmLmZvbywgIlRydXRoIiwgeyB3
cml0YWJsZTogdHJ1ZSB9KTsKK09iamVjdC5kZWZpbmVQcm9wZXJ0eShzZWxmLCAiZm9vIiwgewor
ICB2YWx1ZTogT2JqZWN0LmRlZmluZVByb3BlcnR5KHt9LCAiVHJ1dGgiLCB7CisgICAgdmFsdWU6
IGZ1bmN0aW9uKCkge30sCisgICAgd3JpdGFibGU6IHRydWUsCisgICAgZW51bWVyYWJsZTogdHJ1
ZSwKKyAgICBjb25maWd1cmFibGU6IHRydWUsCisgIH0pLAorICB3cml0YWJsZTogdHJ1ZSwKKyAg
ZW51bWVyYWJsZTogZmFsc2UsCisgIGNvbmZpZ3VyYWJsZTogdHJ1ZSwKK30pOwogCi1zZWxmLmJh
ciA9IHsKLSAgVHJ1dGg6IGZ1bmN0aW9uKCkge30sCi19Ci1PYmplY3QuZGVmaW5lUHJvcGVydHko
c2VsZi5iYXIsICJUcnV0aCIsIHsKLSAgd3JpdGFibGU6IGZhbHNlLAotICBjb25maWd1cmFibGU6
IGZhbHNlLAorT2JqZWN0LmRlZmluZVByb3BlcnR5KHNlbGYsICJiYXIiLCB7CisgIHZhbHVlOiBP
YmplY3QuZGVmaW5lUHJvcGVydHkoe30sICJUcnV0aCIsIHsKKyAgICB2YWx1ZTogZnVuY3Rpb24o
KSB7fSwKKyAgICB3cml0YWJsZTogZmFsc2UsCisgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICBj
b25maWd1cmFibGU6IGZhbHNlLAorICB9KSwKKyAgd3JpdGFibGU6IHRydWUsCisgIGVudW1lcmFi
bGU6IGZhbHNlLAorICBjb25maWd1cmFibGU6IHRydWUsCiB9KTsKIAotc2VsZi5iYXogPSB7Ci0g
IExvbmdTdG9yeTogZnVuY3Rpb24oaGVybywgLi4uZGV0YWlscykgewotICAgIHJldHVybiBgJHto
ZXJvfSB3ZW50IGFuZCAke2RldGFpbHMuam9pbignLCB0aGVuJyl9YAotICB9LAotICBTaG9ydFN0
b3J5OiBmdW5jdGlvbiguLi5kZXRhaWxzKSB7Ci0gICAgcmV0dXJuIGAke2RldGFpbHMuam9pbign
LiAnKX1gOworT2JqZWN0LmRlZmluZVByb3BlcnR5KHNlbGYsICJiYXoiLCB7CisgIHZhbHVlOiB7
CisgICAgTG9uZ1N0b3J5OiBmdW5jdGlvbihoZXJvLCAuLi5kZXRhaWxzKSB7CisgICAgICByZXR1
cm4gYCR7aGVyb30gd2VudCBhbmQgJHtkZXRhaWxzLmpvaW4oJywgdGhlbicpfWAKKyAgICB9LAor
ICAgIFNob3J0U3Rvcnk6IGZ1bmN0aW9uKC4uLmRldGFpbHMpIHsKKyAgICAgIHJldHVybiBgJHtk
ZXRhaWxzLmpvaW4oJy4gJyl9YDsKKyAgICB9LAogICB9LAotfTsKKyAgd3JpdGFibGU6IHRydWUs
CisgIGVudW1lcmFibGU6IGZhbHNlLAorICBjb25maWd1cmFibGU6IHRydWUsCit9KTsKIAogdmFy
IGlkbEFycmF5ID0gbmV3IElkbEFycmF5KCk7Ci1pZGxBcnJheS5hZGRfaWRscygKLWBuYW1lc3Bh
Y2UgZm9vIHsKK2lkbEFycmF5LmFkZF9pZGxzKGAKK1tFeHBvc2VkPVdpbmRvd10KK25hbWVzcGFj
ZSBmb28gewogICB2b2lkIFRydXRoKCk7CiAgIHZvaWQgTGllcygpOwogfTsKK1tFeHBvc2VkPVdp
bmRvd10KIG5hbWVzcGFjZSBiYXIgewogICBbTGVnYWN5VW5mb3JnZWFibGVdCiAgIHZvaWQgVHJ1
dGgoKTsKIH07CitbRXhwb3NlZD1XaW5kb3ddCiBuYW1lc3BhY2UgYmF6IHsKICAgRE9NU3RyaW5n
IExvbmdTdG9yeShhbnkgaGVybywgRE9NU3RyaW5nLi4uIGRldGFpbHMpOwogICBET01TdHJpbmcg
U2hvcnRTdG9yeShET01TdHJpbmcuLi4gZGV0YWlscyk7CkBAIC02MiwxOSArODEsMzEgQEAgaWRs
QXJyYXkudGVzdCgpOwogICB9LAogICAic3VtbWFyaXplZF90ZXN0cyI6IFsKICAgICB7Ci0gICAg
ICAibmFtZSI6ICJiYXIgbmFtZXNwYWNlOiBvcGVyYXRpb24gVHJ1dGgoKSIsCisgICAgICAibmFt
ZSI6ICJmb28gbmFtZXNwYWNlOiBleHRlbmRlZCBhdHRyaWJ1dGVzIiwKICAgICAgICJzdGF0dXNf
c3RyaW5nIjogIlBBU1MiLAogICAgICAgInByb3BlcnRpZXMiOiB7fSwKICAgICAgICJtZXNzYWdl
IjogbnVsbAogICAgIH0sCiAgICAgewotICAgICAgIm5hbWUiOiAiYmF6IG5hbWVzcGFjZTogb3Bl
cmF0aW9uIExvbmdTdG9yeShhbnksIERPTVN0cmluZy4uLikiLAorICAgICAgIm5hbWUiOiAiZm9v
IG5hbWVzcGFjZTogcHJvcGVydHkgZGVzY3JpcHRvciIsCiAgICAgICAic3RhdHVzX3N0cmluZyI6
ICJQQVNTIiwKICAgICAgICJwcm9wZXJ0aWVzIjoge30sCiAgICAgICAibWVzc2FnZSI6IG51bGwK
ICAgICB9LAogICAgIHsKLSAgICAgICJuYW1lIjogImJheiBuYW1lc3BhY2U6IG9wZXJhdGlvbiBT
aG9ydFN0b3J5KERPTVN0cmluZy4uLikiLAorICAgICAgIm5hbWUiOiAiZm9vIG5hbWVzcGFjZTog
W1tFeHRlbnNpYmxlXV0gaXMgdHJ1ZSIsCisgICAgICAic3RhdHVzX3N0cmluZyI6ICJQQVNTIiwK
KyAgICAgICJwcm9wZXJ0aWVzIjoge30sCisgICAgICAibWVzc2FnZSI6IG51bGwKKyAgICB9LAor
ICAgIHsKKyAgICAgICJuYW1lIjogImZvbyBuYW1lc3BhY2U6IFtbUHJvdG90eXBlXV0gaXMgT2Jq
ZWN0LnByb3RvdHlwZSIsCisgICAgICAic3RhdHVzX3N0cmluZyI6ICJQQVNTIiwKKyAgICAgICJw
cm9wZXJ0aWVzIjoge30sCisgICAgICAibWVzc2FnZSI6IG51bGwKKyAgICB9LAorICAgIHsKKyAg
ICAgICJuYW1lIjogImZvbyBuYW1lc3BhY2U6IHR5cGVvZiBpcyBcIm9iamVjdFwiIiwKICAgICAg
ICJzdGF0dXNfc3RyaW5nIjogIlBBU1MiLAogICAgICAgInByb3BlcnRpZXMiOiB7fSwKICAgICAg
ICJtZXNzYWdlIjogbnVsbApAQCAtOTAsNiArMTIxLDg2IEBAIGlkbEFycmF5LnRlc3QoKTsKICAg
ICAgICJzdGF0dXNfc3RyaW5nIjogIkZBSUwiLAogICAgICAgInByb3BlcnRpZXMiOiB7fSwKICAg
ICAgICJtZXNzYWdlIjogImFzc2VydF9vd25fcHJvcGVydHk6IG5hbWVzcGFjZSBvYmplY3QgbWlz
c2luZyBvcGVyYXRpb24gXCJMaWVzXCIgZXhwZWN0ZWQgcHJvcGVydHkgXCJMaWVzXCIgbWlzc2lu
ZyIKKyAgICB9LAorCisgICAgeworICAgICAgIm5hbWUiOiAiYmFyIG5hbWVzcGFjZTogZXh0ZW5k
ZWQgYXR0cmlidXRlcyIsCisgICAgICAic3RhdHVzX3N0cmluZyI6ICJQQVNTIiwKKyAgICAgICJw
cm9wZXJ0aWVzIjoge30sCisgICAgICAibWVzc2FnZSI6IG51bGwKKyAgICB9LAorICAgIHsKKyAg
ICAgICJuYW1lIjogImJhciBuYW1lc3BhY2U6IHByb3BlcnR5IGRlc2NyaXB0b3IiLAorICAgICAg
InN0YXR1c19zdHJpbmciOiAiUEFTUyIsCisgICAgICAicHJvcGVydGllcyI6IHt9LAorICAgICAg
Im1lc3NhZ2UiOiBudWxsCisgICAgfSwKKyAgICB7CisgICAgICAibmFtZSI6ICJiYXIgbmFtZXNw
YWNlOiBbW0V4dGVuc2libGVdXSBpcyB0cnVlIiwKKyAgICAgICJzdGF0dXNfc3RyaW5nIjogIlBB
U1MiLAorICAgICAgInByb3BlcnRpZXMiOiB7fSwKKyAgICAgICJtZXNzYWdlIjogbnVsbAorICAg
IH0sCisgICAgeworICAgICAgIm5hbWUiOiAiYmFyIG5hbWVzcGFjZTogW1tQcm90b3R5cGVdXSBp
cyBPYmplY3QucHJvdG90eXBlIiwKKyAgICAgICJzdGF0dXNfc3RyaW5nIjogIlBBU1MiLAorICAg
ICAgInByb3BlcnRpZXMiOiB7fSwKKyAgICAgICJtZXNzYWdlIjogbnVsbAorICAgIH0sCisgICAg
eworICAgICAgIm5hbWUiOiAiYmFyIG5hbWVzcGFjZTogdHlwZW9mIGlzIFwib2JqZWN0XCIiLAor
ICAgICAgInN0YXR1c19zdHJpbmciOiAiUEFTUyIsCisgICAgICAicHJvcGVydGllcyI6IHt9LAor
ICAgICAgIm1lc3NhZ2UiOiBudWxsCisgICAgfSwKKyAgICB7CisgICAgICAibmFtZSI6ICJiYXIg
bmFtZXNwYWNlOiBvcGVyYXRpb24gVHJ1dGgoKSIsCisgICAgICAic3RhdHVzX3N0cmluZyI6ICJQ
QVNTIiwKKyAgICAgICJwcm9wZXJ0aWVzIjoge30sCisgICAgICAibWVzc2FnZSI6IG51bGwKKyAg
ICB9LAorCisgICAgeworICAgICAgIm5hbWUiOiAiYmF6IG5hbWVzcGFjZTogZXh0ZW5kZWQgYXR0
cmlidXRlcyIsCisgICAgICAic3RhdHVzX3N0cmluZyI6ICJQQVNTIiwKKyAgICAgICJwcm9wZXJ0
aWVzIjoge30sCisgICAgICAibWVzc2FnZSI6IG51bGwKKyAgICB9LAorICAgIHsKKyAgICAgICJu
YW1lIjogImJheiBuYW1lc3BhY2U6IHByb3BlcnR5IGRlc2NyaXB0b3IiLAorICAgICAgInN0YXR1
c19zdHJpbmciOiAiUEFTUyIsCisgICAgICAicHJvcGVydGllcyI6IHt9LAorICAgICAgIm1lc3Nh
Z2UiOiBudWxsCisgICAgfSwKKyAgICB7CisgICAgICAibmFtZSI6ICJiYXogbmFtZXNwYWNlOiBb
W0V4dGVuc2libGVdXSBpcyB0cnVlIiwKKyAgICAgICJzdGF0dXNfc3RyaW5nIjogIlBBU1MiLAor
ICAgICAgInByb3BlcnRpZXMiOiB7fSwKKyAgICAgICJtZXNzYWdlIjogbnVsbAorICAgIH0sCisg
ICAgeworICAgICAgIm5hbWUiOiAiYmF6IG5hbWVzcGFjZTogW1tQcm90b3R5cGVdXSBpcyBPYmpl
Y3QucHJvdG90eXBlIiwKKyAgICAgICJzdGF0dXNfc3RyaW5nIjogIlBBU1MiLAorICAgICAgInBy
b3BlcnRpZXMiOiB7fSwKKyAgICAgICJtZXNzYWdlIjogbnVsbAorICAgIH0sCisgICAgeworICAg
ICAgIm5hbWUiOiAiYmF6IG5hbWVzcGFjZTogdHlwZW9mIGlzIFwib2JqZWN0XCIiLAorICAgICAg
InN0YXR1c19zdHJpbmciOiAiUEFTUyIsCisgICAgICAicHJvcGVydGllcyI6IHt9LAorICAgICAg
Im1lc3NhZ2UiOiBudWxsCisgICAgfSwKKyAgICB7CisgICAgICAibmFtZSI6ICJiYXogbmFtZXNw
YWNlOiBvcGVyYXRpb24gTG9uZ1N0b3J5KGFueSwgRE9NU3RyaW5nLi4uKSIsCisgICAgICAic3Rh
dHVzX3N0cmluZyI6ICJQQVNTIiwKKyAgICAgICJwcm9wZXJ0aWVzIjoge30sCisgICAgICAibWVz
c2FnZSI6IG51bGwKKyAgICB9LAorICAgIHsKKyAgICAgICJuYW1lIjogImJheiBuYW1lc3BhY2U6
IG9wZXJhdGlvbiBTaG9ydFN0b3J5KERPTVN0cmluZy4uLikiLAorICAgICAgInN0YXR1c19zdHJp
bmciOiAiUEFTUyIsCisgICAgICAicHJvcGVydGllcyI6IHt9LAorICAgICAgIm1lc3NhZ2UiOiBu
dWxsCiAgICAgfQogICBdLAogICAidHlwZSI6ICJjb21wbGV0ZSIKZGlmZiAtLWdpdCBhL0xheW91
dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVz
dHMvZnVuY3Rpb25hbC9uby10aXRsZS5odG1sIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dl
Yi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9mdW5jdGlvbmFsL25vLXRpdGxl
Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uYmFlZmI4MWJmOGZhYzUxZTI3NjdlMmU2MjM4ODdjZDBiOTZkOGYx
ZAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZv
cm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC9uby10aXRsZS5odG1sCkBA
IC0wLDAgKzEsMTQ5IEBACis8IURPQ1RZUEUgSFRNTD4KKzxodG1sPgorPGhlYWQ+Cis8bWV0YSBu
YW1lPSJ2YXJpYW50IiBjb250ZW50PSIiPgorPG1ldGEgbmFtZT0idmFyaWFudCIgY29udGVudD0i
P2tlZXAtcHJvbWlzZSI+Cis8dGl0bGU+VGVzdHMgd2l0aCBubyB0aXRsZTwvdGl0bGU+Cis8c2Ny
aXB0IHNyYz0iLi4vLi4vdmFyaWFudHMuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPHNjcmlwdCBz
cmM9Ii9yZXNvdXJjZXMvdGVzdGhhcm5lc3MuanMiPjwvc2NyaXB0PgorCis8Ym9keT4KKzxoMT5U
ZXN0cyB3aXRoIG5vIHRpdGxlPC9oMT4KKzxkaXYgaWQ9ImxvZyI+PC9kaXY+Cis8c2NyaXB0Pgor
ICB0ZXN0KGZ1bmN0aW9uKCl7YXNzZXJ0X3RydWUodHJ1ZSwgJzEnKX0pOworICB0ZXN0KCgpPT5h
c3NlcnRfdHJ1ZSh0cnVlLCAnMicpKTsKKyAgdGVzdCgoKSA9PiBhc3NlcnRfdHJ1ZSh0cnVlLCAn
MycpKTsKKyAgdGVzdCgoKSA9PiBhc3NlcnRfdHJ1ZSh0cnVlLCAnMycpKTsgIC8vIHRlc3QgZHVw
bGljYXRlIGJlaGF2aW91cgorICB0ZXN0KCgpID0+IGFzc2VydF90cnVlKHRydWUsICczJykpOyAg
Ly8gdGVzdCBkdXBsaWNhdGUgYmVoYXZpb3VyCisgIHRlc3QoKCkgPT4geworICAgICAgYXNzZXJ0
X3RydWUodHJ1ZSwgJzQnKTsKKyAgfSk7CisgIHRlc3QoKCkgPT4geyBhc3NlcnRfdHJ1ZSh0cnVl
LCAnNScpIH0pOworICB0ZXN0KCgpID0+IHsgYXNzZXJ0X3RydWUodHJ1ZSwgJzYnKSB9ICAgKTsK
KyAgdGVzdCgoKSA9PiB7IGFzc2VydF90cnVlKHRydWUsICc3Jyk7IH0pOworICB0ZXN0KCgpID0+
IHt9KTsKKyAgdGVzdCgoKSA9PiB7IH0pOworICB0ZXN0KCgpID0+IHs7Ozs7fSk7CisgIHRlc3Qo
KCkgPT4geyA7IDsgOyA7IH0pOworICB0ZXN0KCgpPT57fSk7CisgIHRlc3QoKCk9PnsgfSk7Cisg
IHRlc3QoKCk9Pns7Ozs7fSk7CisgIHRlc3QoKCk9PnsgOyA7IDsgOyB9KTsKKzwvc2NyaXB0Pgor
PHNjcmlwdCB0eXBlPSJ0ZXh0L2pzb24iIGlkPSJleHBlY3RlZCI+Cit7CisgICJzdW1tYXJpemVk
X3N0YXR1cyI6IHsKKyAgICAic3RhdHVzX3N0cmluZyI6ICJPSyIsCisgICAgIm1lc3NhZ2UiOiBu
dWxsCisgIH0sCisgICJzdW1tYXJpemVkX3Rlc3RzIjogWworICAgIHsKKyAgICAgICJzdGF0dXNf
c3RyaW5nIjogIlBBU1MiLAorICAgICAgIm5hbWUiOiAiVGVzdHMgd2l0aCBubyB0aXRsZSIsCisg
ICAgICAicHJvcGVydGllcyI6IHt9LAorICAgICAgIm1lc3NhZ2UiOiBudWxsCisgICAgfSwKKyAg
ICB7CisgICAgICAic3RhdHVzX3N0cmluZyI6ICJQQVNTIiwKKyAgICAgICJuYW1lIjogImFzc2Vy
dF90cnVlKHRydWUsICcyJykiLAorICAgICAgInByb3BlcnRpZXMiOiB7fSwKKyAgICAgICJtZXNz
YWdlIjogbnVsbAorICAgIH0sCisgICAgeworICAgICAgInN0YXR1c19zdHJpbmciOiAiUEFTUyIs
CisgICAgICAibmFtZSI6ICJhc3NlcnRfdHJ1ZSh0cnVlLCAnMycpIiwKKyAgICAgICJwcm9wZXJ0
aWVzIjoge30sCisgICAgICAibWVzc2FnZSI6IG51bGwKKyAgICB9LAorICAgIHsKKyAgICAgICJz
dGF0dXNfc3RyaW5nIjogIlBBU1MiLAorICAgICAgIm5hbWUiOiAiYXNzZXJ0X3RydWUodHJ1ZSwg
JzMnKSAxIiwKKyAgICAgICJwcm9wZXJ0aWVzIjoge30sCisgICAgICAibWVzc2FnZSI6IG51bGwK
KyAgICB9LAorICAgIHsKKyAgICAgICJzdGF0dXNfc3RyaW5nIjogIlBBU1MiLAorICAgICAgIm5h
bWUiOiAiYXNzZXJ0X3RydWUodHJ1ZSwgJzMnKSAyIiwKKyAgICAgICJwcm9wZXJ0aWVzIjoge30s
CisgICAgICAibWVzc2FnZSI6IG51bGwKKyAgICB9LAorICAgIHsKKyAgICAgICJzdGF0dXNfc3Ry
aW5nIjogIlBBU1MiLAorICAgICAgIm5hbWUiOiAiVGVzdHMgd2l0aCBubyB0aXRsZSAxIiwKKyAg
ICAgICJwcm9wZXJ0aWVzIjoge30sCisgICAgICAibWVzc2FnZSI6IG51bGwKKyAgICB9LAorICAg
IHsKKyAgICAgICJzdGF0dXNfc3RyaW5nIjogIlBBU1MiLAorICAgICAgIm5hbWUiOiAiYXNzZXJ0
X3RydWUodHJ1ZSwgJzUnKSIsCisgICAgICAicHJvcGVydGllcyI6IHt9LAorICAgICAgIm1lc3Nh
Z2UiOiBudWxsCisgICAgfSwKKyAgICB7CisgICAgICAic3RhdHVzX3N0cmluZyI6ICJQQVNTIiwK
KyAgICAgICJuYW1lIjogImFzc2VydF90cnVlKHRydWUsICc2JykiLAorICAgICAgInByb3BlcnRp
ZXMiOiB7fSwKKyAgICAgICJtZXNzYWdlIjogbnVsbAorICAgIH0sCisgICAgeworICAgICAgInN0
YXR1c19zdHJpbmciOiAiUEFTUyIsCisgICAgICAibmFtZSI6ICJhc3NlcnRfdHJ1ZSh0cnVlLCAn
NycpIiwKKyAgICAgICJwcm9wZXJ0aWVzIjoge30sCisgICAgICAibWVzc2FnZSI6IG51bGwKKyAg
ICB9LAorICAgIHsKKyAgICAgICJzdGF0dXNfc3RyaW5nIjogIlBBU1MiLAorICAgICAgIm5hbWUi
OiAiVGVzdHMgd2l0aCBubyB0aXRsZSAyIiwKKyAgICAgICJwcm9wZXJ0aWVzIjoge30sCisgICAg
ICAibWVzc2FnZSI6IG51bGwKKyAgICB9LAorICAgIHsKKyAgICAgICJzdGF0dXNfc3RyaW5nIjog
IlBBU1MiLAorICAgICAgIm5hbWUiOiAiVGVzdHMgd2l0aCBubyB0aXRsZSAzIiwKKyAgICAgICJw
cm9wZXJ0aWVzIjoge30sCisgICAgICAibWVzc2FnZSI6IG51bGwKKyAgICB9LAorICAgIHsKKyAg
ICAgICJzdGF0dXNfc3RyaW5nIjogIlBBU1MiLAorICAgICAgIm5hbWUiOiAiVGVzdHMgd2l0aCBu
byB0aXRsZSA0IiwKKyAgICAgICJwcm9wZXJ0aWVzIjoge30sCisgICAgICAibWVzc2FnZSI6IG51
bGwKKyAgICB9LAorICAgIHsKKyAgICAgICJzdGF0dXNfc3RyaW5nIjogIlBBU1MiLAorICAgICAg
Im5hbWUiOiAiVGVzdHMgd2l0aCBubyB0aXRsZSA1IiwKKyAgICAgICJwcm9wZXJ0aWVzIjoge30s
CisgICAgICAibWVzc2FnZSI6IG51bGwKKyAgICB9LAorICAgIHsKKyAgICAgICJzdGF0dXNfc3Ry
aW5nIjogIlBBU1MiLAorICAgICAgIm5hbWUiOiAiVGVzdHMgd2l0aCBubyB0aXRsZSA2IiwKKyAg
ICAgICJwcm9wZXJ0aWVzIjoge30sCisgICAgICAibWVzc2FnZSI6IG51bGwKKyAgICB9LAorICAg
IHsKKyAgICAgICJzdGF0dXNfc3RyaW5nIjogIlBBU1MiLAorICAgICAgIm5hbWUiOiAiVGVzdHMg
d2l0aCBubyB0aXRsZSA3IiwKKyAgICAgICJwcm9wZXJ0aWVzIjoge30sCisgICAgICAibWVzc2Fn
ZSI6IG51bGwKKyAgICB9LAorICAgIHsKKyAgICAgICJzdGF0dXNfc3RyaW5nIjogIlBBU1MiLAor
ICAgICAgIm5hbWUiOiAiVGVzdHMgd2l0aCBubyB0aXRsZSA4IiwKKyAgICAgICJwcm9wZXJ0aWVz
Ijoge30sCisgICAgICAibWVzc2FnZSI6IG51bGwKKyAgICB9LAorICAgIHsKKyAgICAgICJzdGF0
dXNfc3RyaW5nIjogIlBBU1MiLAorICAgICAgIm5hbWUiOiAiVGVzdHMgd2l0aCBubyB0aXRsZSA5
IiwKKyAgICAgICJwcm9wZXJ0aWVzIjoge30sCisgICAgICAibWVzc2FnZSI6IG51bGwKKyAgICB9
CisgIF0sCisgICJ0eXBlIjogImNvbXBsZXRlIgorfQorPC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0
bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRl
c3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvdzNjLWltcG9ydC5sb2cgYi9MYXlv
dXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rl
c3RzL2Z1bmN0aW9uYWwvdzNjLWltcG9ydC5sb2cKaW5kZXggZjc4YjE0MTI4ZDg0YmIzZmY0YzAw
MDhlNGU5MDFjM2I4MTU4ZTQ5Yi4uMTJiODBjMTMwNDg2YTMzOGJkYzY2ODc3ZTU1ZThmZTliZDFj
NTQ4NSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10
ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9mdW5jdGlvbmFsL3czYy1pbXBvcnQubG9nCisrKyBi
L0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rl
c3QvdGVzdHMvZnVuY3Rpb25hbC93M2MtaW1wb3J0LmxvZwpAQCAtMzYsNiArMzYsNyBAQCBMaXN0
IG9mIGZpbGVzOgogL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMv
cmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC9pZnJhbWUtY29uc29saWRhdGUtdGVzdHMu
aHRtbAogL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3Vy
Y2VzL3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC9pZnJhbWUtbXNnLmh0bWwKIC9MYXlvdXRUZXN0cy9p
bXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0
aW9uYWwvbG9nLWluc2VydGlvbi5odG1sCisvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1w
bGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9mdW5jdGlvbmFsL25vLXRpdGxlLmh0
bWwKIC9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNl
cy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvb3JkZXIuaHRtbAogL0xheW91dFRlc3RzL2ltcG9ydGVk
L3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC9w
cm9taXNlLWFzeW5jLmh0bWwKIC9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3Jt
LXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvcHJvbWlzZS13aXRoLXN5bmMu
aHRtbApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10
ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy91bml0L2Fzc2VydF9vYmplY3RfZXF1YWxzLmh0bWwg
Yi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90
ZXN0L3Rlc3RzL3VuaXQvYXNzZXJ0X29iamVjdF9lcXVhbHMuaHRtbAppbmRleCAxOTI5NmI4Mjkz
ZjI1MDU1YTIxMDBlYmQ4ODRkYzlkYmJkNzk5OWZmLi4zMTNkNzdiOTc3MTU2ZGZjOGE2ZTMxY2Nj
ZTU0NzA2NGYyYzQxNjQ4IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2Vi
LXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL3VuaXQvYXNzZXJ0X29iamVjdF9l
cXVhbHMuaHRtbAorKysgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRl
c3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL3VuaXQvYXNzZXJ0X29iamVjdF9lcXVhbHMuaHRtbApA
QCAtNDMsNyArNDMsNyBAQCB0ZXN0KGZ1bmN0aW9uKCkgewogICB2YXIgZXhwZWN0ZWQgPSB7fTsK
ICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGFjdHVhbCwgJ2EnLCB7IHZhbHVlOiAxLCBlbnVtZXJh
YmxlOiBmYWxzZSB9KTsKIAotICBhc3NlcnRfdHJ1ZShhY3R1YWwuYSAhPT0gZXhwZWN0ZWQuYSk7
CisgIGFzc2VydF9ub3RfZXF1YWxzKGFjdHVhbC5hLCBleHBlY3RlZC5hKTsKICAgYXNzZXJ0X29i
amVjdF9lcXVhbHMoYWN0dWFsLCBleHBlY3RlZCk7CiB9LCAnbm9uLWVudW1lcmFibGUgcHJvcGVy
dGllcyBpbiBhY3R1YWwgdmFsdWUgaWdub3JlZCcpOwogCkBAIC01Miw3ICs1Miw3IEBAIHRlc3Qo
ZnVuY3Rpb24oKSB7CiAgIHZhciBleHBlY3RlZCA9IHt9OwogICBPYmplY3QuZGVmaW5lUHJvcGVy
dHkoZXhwZWN0ZWQsICdhJywgeyB2YWx1ZTogMSwgZW51bWVyYWJsZTogZmFsc2UgfSk7CiAKLSAg
YXNzZXJ0X3RydWUoYWN0dWFsLmEgIT09IGV4cGVjdGVkLmEpOworICBhc3NlcnRfbm90X2VxdWFs
cyhhY3R1YWwuYSwgZXhwZWN0ZWQuYSk7CiAgIGFzc2VydF9vYmplY3RfZXF1YWxzKGFjdHVhbCwg
ZXhwZWN0ZWQpOwogfSwgJ25vbi1lbnVtZXJhYmxlIHByb3BlcnRpZXMgaW4gZXhwZWN0ZWQgdmFs
dWUgaWdub3JlZCcpOwogCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2Vi
LXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL3VuaXQvYXN5bmMtdGVzdC1yZXR1
cm4tcmVzdHJpY3Rpb25zLmh0bWwgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRm
b3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL3VuaXQvYXN5bmMtdGVzdC1yZXR1cm4tcmVz
dHJpY3Rpb25zLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMGZkZTJlMjQyMjNmMDE3NTMyOTQ2NTZlYTFiYWE0
MjdjM2ZmOWY0YQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93
ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvdW5pdC9hc3luYy10ZXN0LXJl
dHVybi1yZXN0cmljdGlvbnMuaHRtbApAQCAtMCwwICsxLDEzNSBAQAorPCFET0NUWVBFIEhUTUw+
Cis8aHRtbD4KKzxoZWFkPgorICA8bWV0YSBjaGFyc2V0PSJ1dGYtOCI+CisgIDxzY3JpcHQgc3Jj
PSIvcmVzb3VyY2VzL3Rlc3RoYXJuZXNzLmpzIj48L3NjcmlwdD4KKyAgPHRpdGxlPlJlc3RyaWN0
aW9ucyBvbiByZXR1cm4gdmFsdWUgZnJvbSBgYXN5bmNfdGVzdGA8L3RpdGxlPgorPC9oZWFkPgor
PGJvZHk+Cis8c2NyaXB0PgorZnVuY3Rpb24gbWFrZVRlc3QoLi4uYm9kaWVzKSB7CisgIGNvbnN0
IGNsb3NlU2NyaXB0ID0gJzwnICsgJy9zY3JpcHQ+JzsKKyAgbGV0IHNyYyA9IGAKKzwhRE9DVFlQ
RSBIVE1MPgorPGh0bWw+Cis8aGVhZD4KKzx0aXRsZT5Eb2N1bWVudCB0aXRsZTwvdGl0bGU+Cis8
c2NyaXB0IHNyYz0iL3Jlc291cmNlcy90ZXN0aGFybmVzcy5qcz8ke01hdGgucmFuZG9tKCl9Ij4k
e2Nsb3NlU2NyaXB0fQorPC9oZWFkPgorCis8Ym9keT4KKzxkaXYgaWQ9ImxvZyI+PC9kaXY+YDsK
KyAgYm9kaWVzLmZvckVhY2goKGJvZHkpID0+IHsKKyAgICBzcmMgKz0gJzxzY3JpcHQ+KCcgKyBi
b2R5ICsgJykoKTsnICsgY2xvc2VTY3JpcHQ7CisgIH0pOworCisgIGNvbnN0IGlmcmFtZSA9IGRv
Y3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2lmcmFtZScpOworCisgIGRvY3VtZW50LmJvZHkuYXBwZW5k
Q2hpbGQoaWZyYW1lKTsKKyAgaWZyYW1lLmNvbnRlbnREb2N1bWVudC53cml0ZShzcmMpOworCisg
IHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4geworICAgIHdpbmRvdy5hZGRFdmVudExp
c3RlbmVyKCdtZXNzYWdlJywgZnVuY3Rpb24gb25NZXNzYWdlKGUpIHsKKyAgICAgIGlmIChlLnNv
dXJjZSAhPT0gaWZyYW1lLmNvbnRlbnRXaW5kb3cpIHsKKyAgICAgICAgcmV0dXJuOworICAgICAg
fQorICAgICAgaWYgKCFlLmRhdGEgfHwgZS5kYXRhLnR5cGUgIT09J2NvbXBsZXRlJykgeworICAg
ICAgICByZXR1cm47CisgICAgICB9CisgICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcign
bWVzc2FnZScsIG9uTWVzc2FnZSk7CisgICAgICByZXNvbHZlKGUuZGF0YSk7CisgICAgfSk7CisK
KyAgICBpZnJhbWUuY29udGVudERvY3VtZW50LmNsb3NlKCk7CisgIH0pLnRoZW4oKHsgdGVzdHMs
IHN0YXR1cyB9KSA9PiB7CisgICAgY29uc3Qgc3VtbWFyeSA9IHsKKyAgICAgIGhhcm5lc3M6IHsK
KyAgICAgICAgc3RhdHVzOiBnZXRFbnVtUHJvcChzdGF0dXMsIHN0YXR1cy5zdGF0dXMpLAorICAg
ICAgICBtZXNzYWdlOiBzdGF0dXMubWVzc2FnZQorICAgICAgfSwKKyAgICAgIHRlc3RzOiB7fQor
ICAgIH07CisKKyAgICB0ZXN0cy5mb3JFYWNoKCh0ZXN0KSA9PiB7CisgICAgICBzdW1tYXJ5LnRl
c3RzW3Rlc3QubmFtZV0gPSBnZXRFbnVtUHJvcCh0ZXN0LCB0ZXN0LnN0YXR1cyk7CisgICAgfSk7
CisKKyAgICByZXR1cm4gc3VtbWFyeTsKKyAgfSk7Cit9CisKK2Z1bmN0aW9uIGdldEVudW1Qcm9w
KG9iamVjdCwgdmFsdWUpIHsKKyAgZm9yIChsZXQgcHJvcGVydHkgaW4gb2JqZWN0KSB7CisgICAg
aWYgKCEvXltBLVpdKyQvLnRlc3QocHJvcGVydHkpKSB7CisgICAgICBjb250aW51ZTsKKyAgICB9
CisKKyAgICBpZiAob2JqZWN0W3Byb3BlcnR5XSA9PT0gdmFsdWUpIHsKKyAgICAgIHJldHVybiBw
cm9wZXJ0eTsKKyAgICB9CisgIH0KK30KKworcHJvbWlzZV90ZXN0KCgpID0+IHsKKyAgcmV0dXJu
IG1ha2VUZXN0KAorICAgICAgKCkgPT4geworICAgICAgICBhc3luY190ZXN0KCh0KSA9PiB7dC5k
b25lKCk7IHJldHVybiB1bmRlZmluZWQ7fSwgJ2JlZm9yZScpOworICAgICAgICBhc3luY190ZXN0
KCh0KSA9PiB7dC5kb25lKCk7IHJldHVybiBudWxsO30sICdudWxsJyk7CisgICAgICAgIGFzeW5j
X3Rlc3QoKHQpID0+IHt0LmRvbmUoKTsgcmV0dXJuIHVuZGVmaW5lZDt9LCAnYWZ0ZXInKTsKKyAg
ICAgIH0KKyAgICApLnRoZW4oKHtoYXJuZXNzLCB0ZXN0c30pID0+IHsKKyAgICAgIGFzc2VydF9l
cXVhbHMoaGFybmVzcy5zdGF0dXMsICdFUlJPUicpOworICAgICAgYXNzZXJ0X2VxdWFscygKKyAg
ICAgICAgaGFybmVzcy5tZXNzYWdlLAorICAgICAgICAnVGVzdCBuYW1lZCAibnVsbCIgcGFzc2Vk
IGEgZnVuY3Rpb24gdG8gYGFzeW5jX3Rlc3RgIHRoYXQgcmV0dXJuZWQgYSB2YWx1ZS4nCisgICAg
ICApOworICAgICAgYXNzZXJ0X2VxdWFscyh0ZXN0cy5iZWZvcmUsICdQQVNTJyk7CisgICAgICBh
c3NlcnRfZXF1YWxzKHRlc3RzLm51bGwsICdQQVNTJyk7CisgICAgICAvLyBUaGlzIHRlc3QgZGlk
IG5vdCBnZXQgdGhlIGNoYW5jZSB0byBzdGFydC4KKyAgICAgIGFzc2VydF9lcXVhbHModGVzdHMu
YWZ0ZXIsIHVuZGVmaW5lZCk7CisgICAgfSk7Cit9LCAndGVzdCByZXR1cm5pbmcgYG51bGxgJyk7
CisKK3Byb21pc2VfdGVzdCgoKSA9PiB7CisgIHJldHVybiBtYWtlVGVzdCgKKyAgICAgICgpID0+
IHsKKyAgICAgICAgYXN5bmNfdGVzdCgodCkgPT4ge3QuZG9uZSgpOyByZXR1cm4gdW5kZWZpbmVk
O30sICdiZWZvcmUnKTsKKyAgICAgICAgYXN5bmNfdGVzdCgodCkgPT4ge3QuZG9uZSgpOyByZXR1
cm4ge307fSwgJ29iamVjdCcpOworICAgICAgICBhc3luY190ZXN0KCh0KSA9PiB7dC5kb25lKCk7
IHJldHVybiB1bmRlZmluZWQ7fSwgJ2FmdGVyJyk7CisgICAgICB9CisgICAgKS50aGVuKCh7aGFy
bmVzcywgdGVzdHN9KSA9PiB7CisgICAgICBhc3NlcnRfZXF1YWxzKGhhcm5lc3Muc3RhdHVzLCAn
RVJST1InKTsKKyAgICAgIGFzc2VydF9lcXVhbHMoCisgICAgICAgIGhhcm5lc3MubWVzc2FnZSwK
KyAgICAgICAgJ1Rlc3QgbmFtZWQgIm9iamVjdCIgcGFzc2VkIGEgZnVuY3Rpb24gdG8gYGFzeW5j
X3Rlc3RgIHRoYXQgcmV0dXJuZWQgYSB2YWx1ZS4nCisgICAgICApOworICAgICAgYXNzZXJ0X2Vx
dWFscyh0ZXN0cy5iZWZvcmUsICdQQVNTJyk7CisgICAgICBhc3NlcnRfZXF1YWxzKHRlc3RzLm9i
amVjdCwgJ1BBU1MnKTsKKyAgICAgIC8vIFRoaXMgdGVzdCBkaWQgbm90IGdldCB0aGUgY2hhbmNl
IHRvIHN0YXJ0LgorICAgICAgYXNzZXJ0X2VxdWFscyh0ZXN0cy5hZnRlciwgdW5kZWZpbmVkKTsK
KyAgICB9KTsKK30sICd0ZXN0IHJldHVybmluZyBhbiBvcmRpbmFyeSBvYmplY3QnKTsKKworcHJv
bWlzZV90ZXN0KCgpID0+IHsKKyAgcmV0dXJuIG1ha2VUZXN0KAorICAgICAgKCkgPT4geworICAg
ICAgICBhc3luY190ZXN0KCh0KSA9PiB7dC5kb25lKCk7IHJldHVybiB1bmRlZmluZWQ7fSwgJ2Jl
Zm9yZScpOworICAgICAgICBhc3luY190ZXN0KCh0KSA9PiB7dC5kb25lKCk7IHJldHVybiBQcm9t
aXNlLnJlc29sdmUoNSk7fSwgJ3RoZW5hYmxlJyk7CisgICAgICAgIGFzeW5jX3Rlc3QoKHQpID0+
IHt0LmRvbmUoKTsgcmV0dXJuIHVuZGVmaW5lZDt9LCAnYWZ0ZXInKTsKKyAgICAgIH0KKyAgICAp
LnRoZW4oKHtoYXJuZXNzLCB0ZXN0c30pID0+IHsKKyAgICAgIGFzc2VydF9lcXVhbHMoaGFybmVz
cy5zdGF0dXMsICdFUlJPUicpOworICAgICAgYXNzZXJ0X2VxdWFscygKKyAgICAgICAgaGFybmVz
cy5tZXNzYWdlLAorICAgICAgICAnVGVzdCBuYW1lZCAidGhlbmFibGUiIHBhc3NlZCBhIGZ1bmN0
aW9uIHRvIGBhc3luY190ZXN0YCB0aGF0IHJldHVybmVkIGEgdmFsdWUuICcgKworICAgICAgICAn
Q29uc2lkZXIgdXNpbmcgYHByb21pc2VfdGVzdGAgaW5zdGVhZCB3aGVuIHVzaW5nIFByb21pc2Vz
IG9yIGFzeW5jL2F3YWl0LicKKyAgICAgICk7CisgICAgICBhc3NlcnRfZXF1YWxzKHRlc3RzLmJl
Zm9yZSwgJ1BBU1MnKTsKKyAgICAgIGFzc2VydF9lcXVhbHModGVzdHMudGhlbmFibGUsICdQQVNT
Jyk7CisgICAgICAvLyBUaGlzIHRlc3QgZGlkIG5vdCBnZXQgYSBjaGFuY2UgdG8gc3RhcnQuCisg
ICAgICBhc3NlcnRfZXF1YWxzKHRlc3RzLmFmdGVyLCB1bmRlZmluZWQpOworICAgIH0pOworfSwg
J3Rlc3QgcmV0dXJuaW5nIGEgdGhlbmFibGUgb2JqZWN0Jyk7Cis8L3NjcmlwdD4KKzwvYm9keT4K
KzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZv
cm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvdW5pdC9iYXNpYy5odG1sIGIvTGF5b3V0VGVz
dHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy91
bml0L2Jhc2ljLmh0bWwKaW5kZXggZDkwN2M3YmI5ZmJmNGZhNGRjNjc0YmQ1N2U2YTg1NmI2OGVk
MTNlYS4uZDUyMDgyZjJlMDc2ZGUwNDU4YjY4OTc1MDUyM2IzZDEwNjQ2ZjRlMCAxMDA2NDQKLS0t
IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMv
dGVzdC90ZXN0cy91bml0L2Jhc2ljLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNj
L3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy91bml0L2Jhc2ljLmh0bWwK
QEAgLTI4LDcgKzI4LDcgQEAKICAgICAgICAgICAgIFdlYklETDIucGFyc2UoIkknbSBhIHN5bnRh
eCBlcnJvciIpOwogICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJXZWIgSURMIGRpZG4ndCB0
aHJvdyIpOwogICAgICAgICB9IGNhdGNoIChlKSB7Ci0gICAgICAgICAgICBhc3NlcnRfdHJ1ZShl
Lm5hbWUgPT09ICJXZWJJRExQYXJzZUVycm9yIik7CisgICAgICAgICAgICBhc3NlcnRfZXF1YWxz
KGUubmFtZSwgIldlYklETFBhcnNlRXJyb3IiKTsKICAgICAgICAgfQogICAgIH0sICdXZWJJREwy
IHBhcnNlIG1ldGhvZCBzaG91bGQgYmFpbCBvbiBpbmNvcnJlY3QgV2ViSURMJyk7CiAgICAgdGVz
dChmdW5jdGlvbigpIHsKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWIt
cGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvdW5pdC9leGNlcHRpb25hbC1jYXNl
cy5odG1sIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNv
dXJjZXMvdGVzdC90ZXN0cy91bml0L2V4Y2VwdGlvbmFsLWNhc2VzLmh0bWwKaW5kZXggMmJlNGRh
Y2FhZWM4YWU1M2U2M2Q3MDRlODQyZDMyOTY4YTQyNGI0Yi4uNDA1NGQwMzExZDJkZTVhODNjNDNi
YzA3NmQwZjc5ZThjNjAxZTQ3NCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNj
L3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy91bml0L2V4Y2VwdGlvbmFs
LWNhc2VzLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10
ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy91bml0L2V4Y2VwdGlvbmFsLWNhc2VzLmh0bWwKQEAg
LTEyNyw3ICsxMjcsNyBAQCBwcm9taXNlX3Rlc3QoKCkgPT4gewogICAgICAgICBhc3luY190ZXN0
KCh0KSA9PiB7CiAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7CiAgICAgICAgICAgICBzZXRU
aW1lb3V0KCgpID0+IHQuZG9uZSgpLCAwKTsKLSAgICAgICAgICAgIGFzeW5jX3Rlc3QoKHQpID0+
IHNldFRpbWVvdXQodC5kb25lLmJpbmQodCksIDApLCAnYWZ0ZXInKTsKKyAgICAgICAgICAgIGFz
eW5jX3Rlc3QoKHQpID0+IHsgc2V0VGltZW91dCh0LmRvbmUuYmluZCh0KSwgMCk7IH0sICdhZnRl
cicpOwogICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCd0aGlzIGVycm9yIGlzIGV4cGVjdGVk
Jyk7CiAgICAgICAgICAgfSwgMCk7CiAgICAgICAgIH0sICdkdXJpbmcnKTsKQEAgLTIwNSw3ICsy
MDUsNyBAQCBpZiAoJ29udW5oYW5kbGVkcmVqZWN0aW9uJyBpbiB3aW5kb3cpIHsKIAogICAgICAg
ICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3VuaGFuZGxlZHJlamVjdGlvbicsICgpID0+
IHsKICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gdC5kb25lKCksIDApOwotICAgICAgICAg
ICAgICBhc3luY190ZXN0KCh0KSA9PiBzZXRUaW1lb3V0KHQuZG9uZS5iaW5kKHQpLCAwKSwgJ2Fm
dGVyJyk7CisgICAgICAgICAgICAgIGFzeW5jX3Rlc3QoKHQpID0+IHsgc2V0VGltZW91dCh0LmRv
bmUuYmluZCh0KSwgMCk7IH0sICdhZnRlcicpOwogICAgICAgICAgICAgICB0LmRvbmUoKTsKICAg
ICAgICAgICAgIH0pOwogICAgICAgICAgIH0sICdkdXJpbmcnKTsKQEAgLTI2MSwxMCArMjYxLDEw
IEBAIGlmICgnb251bmhhbmRsZWRyZWplY3Rpb24nIGluIHdpbmRvdykgewogICAgIHJldHVybiBt
YWtlVGVzdCgKICAgICAgICAgKCkgPT4gewogICAgICAgICAgIHNldHVwKHsgZXhwbGljaXRfZG9u
ZTogdHJ1ZSB9KTsKLSAgICAgICAgICBhc3luY190ZXN0KCh0KSA9PiBzZXRUaW1lb3V0KHQuZG9u
ZS5iaW5kKHQpLCAwKSwgJ2JlZm9yZScpOworICAgICAgICAgIGFzeW5jX3Rlc3QoKHQpID0+IHsg
c2V0VGltZW91dCh0LmRvbmUuYmluZCh0KSwgMCk7IH0sICdiZWZvcmUnKTsKICAgICAgICAgICBQ
cm9taXNlLnJlamVjdChuZXcgRXJyb3IoJ3RoaXMgZXJyb3IgaXMgZXhwZWN0ZWQnKSk7CiAgICAg
ICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3VuaGFuZGxlZHJlamVjdGlvbicsICgpID0+
IHsKLSAgICAgICAgICAgIGFzeW5jX3Rlc3QoKHQpID0+IHNldFRpbWVvdXQodC5kb25lLmJpbmQo
dCksIDApLCAnYWZ0ZXInKTsKKyAgICAgICAgICAgIGFzeW5jX3Rlc3QoKHQpID0+IHsgc2V0VGlt
ZW91dCh0LmRvbmUuYmluZCh0KSwgMCk7IH0sICdhZnRlcicpOwogICAgICAgICAgICAgZG9uZSgp
OwogICAgICAgICAgIH0pOwogICAgICAgICB9CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbXBv
cnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL3VuaXQvdGVz
dC1yZXR1cm4tcmVzdHJpY3Rpb25zLmh0bWwgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2Vi
LXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL3VuaXQvdGVzdC1yZXR1cm4tcmVz
dHJpY3Rpb25zLmh0bWwKaW5kZXggYjg0NmQ0ZGM0MzAwYTk5MGVkZjdhOTA1ZjMwMWRjYWY3NWJl
ZTE4Yy4uMDI5NWM1MjE0ZGMyMmJlYmE5NzkxY2FmOGNkZmZjODY5ZTA3ZjFkOCAxMDA2NDQKLS0t
IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMv
dGVzdC90ZXN0cy91bml0L3Rlc3QtcmV0dXJuLXJlc3RyaWN0aW9ucy5odG1sCisrKyBiL0xheW91
dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVz
dHMvdW5pdC90ZXN0LXJldHVybi1yZXN0cmljdGlvbnMuaHRtbApAQCAtODEsNyArODEsNyBAQCBw
cm9taXNlX3Rlc3QoKCkgPT4gewogICAgICAgYXNzZXJ0X2VxdWFscyhoYXJuZXNzLnN0YXR1cywg
J0VSUk9SJyk7CiAgICAgICBhc3NlcnRfZXF1YWxzKAogICAgICAgICBoYXJuZXNzLm1lc3NhZ2Us
Ci0gICAgICAgICdUZXN0IG5hbWVkICJudWxsIiBpbmFwcHJvcHJpYXRlbHkgcmV0dXJuZWQgYSB2
YWx1ZScKKyAgICAgICAgJ1Rlc3QgbmFtZWQgIm51bGwiIHBhc3NlZCBhIGZ1bmN0aW9uIHRvIGB0
ZXN0YCB0aGF0IHJldHVybmVkIGEgdmFsdWUuJwogICAgICAgKTsKICAgICAgIGFzc2VydF9lcXVh
bHModGVzdHMuYmVmb3JlLCAnUEFTUycpOwogICAgICAgYXNzZXJ0X2VxdWFscyh0ZXN0cy5udWxs
LCAnUEFTUycpOwpAQCAtMTAwLDcgKzEwMCw3IEBAIHByb21pc2VfdGVzdCgoKSA9PiB7CiAgICAg
ICBhc3NlcnRfZXF1YWxzKGhhcm5lc3Muc3RhdHVzLCAnRVJST1InKTsKICAgICAgIGFzc2VydF9l
cXVhbHMoCiAgICAgICAgIGhhcm5lc3MubWVzc2FnZSwKLSAgICAgICAgJ1Rlc3QgbmFtZWQgIm9i
amVjdCIgaW5hcHByb3ByaWF0ZWx5IHJldHVybmVkIGEgdmFsdWUnCisgICAgICAgICdUZXN0IG5h
bWVkICJvYmplY3QiIHBhc3NlZCBhIGZ1bmN0aW9uIHRvIGB0ZXN0YCB0aGF0IHJldHVybmVkIGEg
dmFsdWUuJwogICAgICAgKTsKICAgICAgIGFzc2VydF9lcXVhbHModGVzdHMuYmVmb3JlLCAnUEFT
UycpOwogICAgICAgYXNzZXJ0X2VxdWFscyh0ZXN0cy5vYmplY3QsICdQQVNTJyk7CkBAIC0xMTIs
MTQgKzExMiwxNSBAQCBwcm9taXNlX3Rlc3QoKCkgPT4gewogICByZXR1cm4gbWFrZVRlc3QoCiAg
ICAgICAoKSA9PiB7CiAgICAgICAgIHRlc3QoKCkgPT4gdW5kZWZpbmVkLCAnYmVmb3JlJyk7Ci0g
ICAgICAgIHRlc3QoKCkgPT4gKHsgdGhlbigpIHt9IH0pLCAndGhlbmFibGUnKTsKKyAgICAgICAg
dGVzdCgoKSA9PiBQcm9taXNlLnJlc29sdmUoNSksICd0aGVuYWJsZScpOwogICAgICAgICB0ZXN0
KCgpID0+IHVuZGVmaW5lZCwgJ2FmdGVyJyk7CiAgICAgICB9CiAgICAgKS50aGVuKCh7aGFybmVz
cywgdGVzdHN9KSA9PiB7CiAgICAgICBhc3NlcnRfZXF1YWxzKGhhcm5lc3Muc3RhdHVzLCAnRVJS
T1InKTsKICAgICAgIGFzc2VydF9lcXVhbHMoCiAgICAgICAgIGhhcm5lc3MubWVzc2FnZSwKLSAg
ICAgICAgJ1Rlc3QgbmFtZWQgInRoZW5hYmxlIiBpbmFwcHJvcHJpYXRlbHkgcmV0dXJuZWQgYSB2
YWx1ZSwgY29uc2lkZXIgdXNpbmcgYHByb21pc2VfdGVzdGAgaW5zdGVhZCcKKyAgICAgICAgJ1Rl
c3QgbmFtZWQgInRoZW5hYmxlIiBwYXNzZWQgYSBmdW5jdGlvbiB0byBgdGVzdGAgdGhhdCByZXR1
cm5lZCBhIHZhbHVlLiAnICsKKyAgICAgICAgJ0NvbnNpZGVyIHVzaW5nIGBwcm9taXNlX3Rlc3Rg
IGluc3RlYWQgd2hlbiB1c2luZyBQcm9taXNlcyBvciBhc3luYy9hd2FpdC4nCiAgICAgICApOwog
ICAgICAgYXNzZXJ0X2VxdWFscyh0ZXN0cy5iZWZvcmUsICdQQVNTJyk7CiAgICAgICBhc3NlcnRf
ZXF1YWxzKHRlc3RzLnRoZW5hYmxlLCAnUEFTUycpOwpAQCAtMTQzLDcgKzE0NCw3IEBAIHByb21p
c2VfdGVzdCgoKSA9PiB7CiAgICAgICBhc3NlcnRfZXF1YWxzKGhhcm5lc3Muc3RhdHVzLCAnRVJS
T1InKTsKICAgICAgIGFzc2VydF9lcXVhbHMoCiAgICAgICAgIGhhcm5lc3MubWVzc2FnZSwKLSAg
ICAgICAgJ1Rlc3QgbmFtZWQgInJlc3RyaWN0ZWQiIGluYXBwcm9wcmlhdGVseSByZXR1cm5lZCBh
IHZhbHVlJworICAgICAgICAnVGVzdCBuYW1lZCAicmVzdHJpY3RlZCIgcGFzc2VkIGEgZnVuY3Rp
b24gdG8gYHRlc3RgIHRoYXQgcmV0dXJuZWQgYSB2YWx1ZS4nCiAgICAgICApOwogICAgICAgYXNz
ZXJ0X2VxdWFscyh0ZXN0cy5iZWZvcmUsICdQQVNTJyk7CiAgICAgICBhc3NlcnRfZXF1YWxzKHRl
c3RzLnJlc3RyaWN0ZWQsICdQQVNTJyk7CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbXBvcnRl
ZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL3VuaXQvdzNjLWlt
cG9ydC5sb2cgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jl
c291cmNlcy90ZXN0L3Rlc3RzL3VuaXQvdzNjLWltcG9ydC5sb2cKaW5kZXggNmIyMjQ3MTEyNDEx
MDQwMzhiNTk4MmVmN2IwNGViMWQxM2M4NDNlNC4uYjdiNDQyOTk3ZDQ2YjQxMjlmOGYwYjk2MmNi
MGM2ZGM4Y2Q0YmNhMCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1w
bGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy91bml0L3czYy1pbXBvcnQubG9nCisr
KyBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2Vz
L3Rlc3QvdGVzdHMvdW5pdC93M2MtaW1wb3J0LmxvZwpAQCAtMTcsNiArMTcsNyBAQCBMaXN0IG9m
IGZpbGVzOgogL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVz
b3VyY2VzL3Rlc3QvdGVzdHMvdW5pdC9hc3NlcnRfaW1wbGVtZW50cy5odG1sCiAvTGF5b3V0VGVz
dHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy91
bml0L2Fzc2VydF9pbXBsZW1lbnRzX29wdGlvbmFsLmh0bWwKIC9MYXlvdXRUZXN0cy9pbXBvcnRl
ZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL3VuaXQvYXNzZXJ0
X29iamVjdF9lcXVhbHMuaHRtbAorL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZv
cm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvdW5pdC9hc3luYy10ZXN0LXJldHVybi1yZXN0
cmljdGlvbnMuaHRtbAogL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVz
dHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvdW5pdC9iYXNpYy5odG1sCiAvTGF5b3V0VGVzdHMvaW1w
b3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy91bml0L2V4
Y2VwdGlvbmFsLWNhc2VzLXRpbWVvdXRzLmh0bWwKIC9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mv
d2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL3VuaXQvZXhjZXB0aW9uYWwt
Y2FzZXMuaHRtbApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0
Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90b3guaW5pIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQv
dzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90b3guaW5pCmluZGV4IGE3YTAy
ZTRiOTNiZGMwMDllZjBiMDVjYmMwMzljMzk3N2ZjZGQ0NmUuLjI2NmE2ZTg5NTJlMDRkOTAxMjA2
NDgzNjE0YmRhOTA5NzkzM2JiOGUgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3cz
Yy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdG94LmluaQorKysgYi9MYXlvdXRU
ZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3RveC5p
bmkKQEAgLTEsNiArMSw1IEBACiBbdG94XQotIyBOb3RlIHRoYXQgb25seSBweTI3IGlzIHJ1biBp
biBDSS4KLWVudmxpc3QgPSBweTI3LHB5MzYKK2Vudmxpc3QgPSBweTI3LHB5MzYscHkzOAogc2tp
cHNkaXN0PVRydWUKIAogW3Rlc3RlbnZdCkBAIC04LDcgKzcsNyBAQCBwYXNzZW52PURJU1BMQVkg
IyBOZWNlc3NhcnkgZm9yIHRoZSBzcGF3bmVkIEdlY2tvRHJpdmVyIHByb2Nlc3MgdG8gY29ubmVj
dCB0bwogICAgICAgICAgICAgICAgICMgdGhlIGFwcHJvcHJpYXRlIGRpc3BsYXkuCiBkZXBzID0K
ICAgaHRtbDVsaWIKLSAgcHl0ZXN0Pj0yLjkKKyAgcHl0ZXN0Pj0yLjksPDYgIyBwaW5uZWQgdG8g
PDYgZHVlIHRvIGh0dHBzOi8vZ2l0aHViLmNvbS93ZWItcGxhdGZvcm0tdGVzdHMvd3B0L2lzc3Vl
cy8yNjEzMgogICBweXZpcnR1YWxkaXNwbGF5CiAgIHNpeAogICByZXF1ZXN0cwpkaWZmIC0tZ2l0
IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMv
dGVzdC93cHRzZXJ2ZXIucHkgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3Jt
LXRlc3RzL3Jlc291cmNlcy90ZXN0L3dwdHNlcnZlci5weQppbmRleCBkNDdlMzI1ZmJlZjY0YTQy
NWJhOTFmMjFhNDlhNmQyN2UwM2E3ZTNiLi5hNTA0YTc2YTQ2ZTAwZGI4ZjliYjRhMTlkYzlkY2E1
OGVjMWM4MzE0IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRm
b3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3dwdHNlcnZlci5weQorKysgYi9MYXlvdXRUZXN0cy9p
bXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3dwdHNlcnZlci5w
eQpAQCAtMjQsNiArMjQsOCBAQCBjbGFzcyBXUFRTZXJ2ZXIob2JqZWN0KToKICAgICBkZWYgc3Rh
cnQoc2VsZik6CiAgICAgICAgIHNlbGYuZGV2bnVsbCA9IG9wZW4ob3MuZGV2bnVsbCwgJ3cnKQog
ICAgICAgICB3cHRzZXJ2ZV9jbWQgPSBbb3MucGF0aC5qb2luKHNlbGYud3B0X3Jvb3QsICd3cHQn
KSwgJ3NlcnZlJ10KKyAgICAgICAgaWYgc3lzLmV4ZWN1dGFibGU6CisgICAgICAgICAgICB3cHRz
ZXJ2ZV9jbWRbMDowXSA9IFtzeXMuZXhlY3V0YWJsZV0KICAgICAgICAgbG9nZ2luZy5pbmZvKCdF
eGVjdXRpbmcgJXMnICUgJyAnLmpvaW4od3B0c2VydmVfY21kKSkKICAgICAgICAgc2VsZi5wcm9j
ID0gc3VicHJvY2Vzcy5Qb3BlbigKICAgICAgICAgICAgIHdwdHNlcnZlX2NtZCwKZGlmZiAtLWdp
dCBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2Vz
L3Rlc3Rkcml2ZXItYWN0aW9ucy5qcyBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxh
dGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3Rkcml2ZXItYWN0aW9ucy5qcwppbmRleCA4NzBhMmU4
ZTI2Njc4MDg1ZjgwYzAzMGQ0MzZkZDEzNjg2ZmI5YjBiLi5mM2U2Mzg4ZThhY2QxOTk4ZDg5NzUw
MTUwZTA3NzlkZjMyN2E1NDE3IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mv
d2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0ZHJpdmVyLWFjdGlvbnMuanMKKysrIGIv
TGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVz
dGRyaXZlci1hY3Rpb25zLmpzCkBAIC05LDYgKzksNyBAQAogICBmdW5jdGlvbiBBY3Rpb25zKGRl
ZmF1bHRUaWNrRHVyYXRpb249MTYpIHsKICAgICB0aGlzLnNvdXJjZVR5cGVzID0gbmV3IE1hcChb
WyJrZXkiLCBLZXlTb3VyY2VdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbInBv
aW50ZXIiLCBQb2ludGVyU291cmNlXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
WyJ3aGVlbCIsIFdoZWVsU291cmNlXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
WyJub25lIiwgR2VuZXJhbFNvdXJjZV1dKTsKICAgICB0aGlzLnNvdXJjZXMgPSBuZXcgTWFwKCk7
CiAgICAgdGhpcy5zb3VyY2VPcmRlciA9IFtdOwpAQCAtMjIsNiArMjMsNyBAQAogICAgIHRoaXMu
Y3JlYXRlU291cmNlKCJub25lIik7CiAgICAgdGhpcy50aWNrSWR4ID0gMDsKICAgICB0aGlzLmRl
ZmF1bHRUaWNrRHVyYXRpb24gPSBkZWZhdWx0VGlja0R1cmF0aW9uOworICAgIHRoaXMuY29udGV4
dCA9IG51bGw7CiAgIH0KIAogICBBY3Rpb25zLnByb3RvdHlwZSA9IHsKQEAgLTY1LDcgKzY3LDE3
IEBACiAgICAgICB9IGNhdGNoKGUpIHsKICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KGUp
OwogICAgICAgfQotICAgICAgcmV0dXJuIHRlc3RfZHJpdmVyLmFjdGlvbl9zZXF1ZW5jZShhY3Rp
b25zKTsKKyAgICAgIHJldHVybiB0ZXN0X2RyaXZlci5hY3Rpb25fc2VxdWVuY2UoYWN0aW9ucywg
dGhpcy5jb250ZXh0KTsKKyAgICB9LAorCisgICAgLyoqCisgICAgICogU2V0IHRoZSBjb250ZXh0
IGZvciB0aGUgYWN0aW9ucworICAgICAqCisgICAgICogQHBhcmFtIHtXaW5kb3dQcm94eX0gY29u
dGV4dCAtIENvbnRleHQgaW4gd2hpY2ggdG8gcnVuIHRoZSBhY3Rpb24gc2VxdWVuY2UKKyAgICAg
Ki8KKyAgICBzZXRDb250ZXh0OiBmdW5jdGlvbihjb250ZXh0KSB7CisgICAgICB0aGlzLmNvbnRl
eHQgPSBjb250ZXh0OworICAgICAgcmV0dXJuIHRoaXM7CiAgICAgfSwKIAogICAgIC8qKgpAQCAt
NzMsNyArODUsNyBAQAogICAgICAqIElmIG5vIG5hbWUgaXMgcGFzc2VkLCBhIG5ldyBzb3VyY2Ug
d2l0aCB0aGUgZ2l2ZW4gdHlwZSBpcwogICAgICAqIGNyZWF0ZWQuCiAgICAgICoKLSAgICAgKiBA
cGFyYW0ge1N0cmluZ30gdHlwZSAtIFNvdXJjZSB0eXBlICgnbm9uZScsICdrZXknLCBvciAncG9p
bnRlcicpCisgICAgICogQHBhcmFtIHtTdHJpbmd9IHR5cGUgLSBTb3VyY2UgdHlwZSAoJ25vbmUn
LCAna2V5JywgJ3BvaW50ZXInLCBvciAnd2hlZWwnKQogICAgICAqIEBwYXJhbSB7U3RyaW5nP30g
bmFtZSAtIE5hbWUgb2YgdGhlIHNvdXJjZQogICAgICAqIEByZXR1cm5zIHtTb3VyY2V9IFNvdXJj
ZSBvYmplY3QgZm9yIHRoYXQgc291cmNlLgogICAgICAqLwpAQCAtMTU0LDYgKzE2NiwzMiBAQAog
ICAgICAgcmV0dXJuIHRoaXM7CiAgICAgfSwKIAorICAgIC8qKgorICAgICAqIEFkZCBhIG5ldyB3
aGVlbCBpbnB1dCBzb3VyY2Ugd2l0aCB0aGUgZ2l2ZW4gbmFtZQorICAgICAqCisgICAgICogQHBh
cmFtIHtTdHJpbmd9IHR5cGUgLSBOYW1lIG9mIHRoZSB3aGVlbCBzb3VyY2UKKyAgICAgKiBAcGFy
YW0ge0Jvb2x9IHNldCAtIFNldCBzb3VyY2UgYXMgdGhlIGRlZmF1bHQgd2hlZWwgc291cmNlCisg
ICAgICogQHJldHVybnMge0FjdGlvbnN9CisgICAgICovCisgICAgYWRkV2hlZWw6IGZ1bmN0aW9u
KG5hbWUsIHNldD10cnVlKSB7CisgICAgICB0aGlzLmNyZWF0ZVNvdXJjZSgid2hlZWwiLCBuYW1l
KTsKKyAgICAgIGlmIChzZXQpIHsKKyAgICAgICAgdGhpcy5zZXRXaGVlbChuYW1lKTsKKyAgICAg
IH0KKyAgICAgIHJldHVybiB0aGlzOworICAgIH0sCisKKyAgICAvKioKKyAgICAgKiBTZXQgdGhl
IGN1cnJlbnQgZGVmYXVsdCB3aGVlbCBzb3VyY2UKKyAgICAgKgorICAgICAqIEBwYXJhbSB7U3Ry
aW5nfSBuYW1lIC0gTmFtZSBvZiB0aGUgd2hlZWwgc291cmNlCisgICAgICogQHJldHVybnMge0Fj
dGlvbnN9CisgICAgICovCisgICAgc2V0V2hlZWw6IGZ1bmN0aW9uKG5hbWUpIHsKKyAgICAgIHRo
aXMuc2V0U291cmNlKCJ3aGVlbCIsIG5hbWUpOworICAgICAgcmV0dXJuIHRoaXM7CisgICAgfSwK
KwogICAgIGNyZWF0ZVNvdXJjZTogZnVuY3Rpb24odHlwZSwgbmFtZSwgcGFyYW1ldGVycz17fSkg
ewogICAgICAgaWYgKCF0aGlzLnNvdXJjZXMuaGFzKHR5cGUpKSB7CiAgICAgICAgIHRocm93IG5l
dyBFcnJvcihgJHt0eXBlfSBpcyBub3QgYSB2YWxpZCBhY3Rpb24gdHlwZWApOwpAQCAtMTk2LDgg
KzIzNCw5IEBACiAgICAgICoKICAgICAgKiBAcGFyYW0ge051bWJlcj99IGR1cmF0aW9uIC0gTWlu
aW11bSBsZW5ndGggb2YgdGhlIHRpY2sgaW4gbXMuCiAgICAgICogQHBhcmFtIHtTdHJpbmd9IHNv
dXJjZVR5cGUgLSBzb3VyY2UgdHlwZQotICAgICAqIEBwYXJhbSB7U3RyaW5nP30gc291cmNlTmFt
ZSAtIE5hbWVkIGtleSBvciBwb2ludGVyIHNvdXJjZSB0byB1c2Ugb3IgbnVsbCBmb3IgdGhlIGRl
ZmF1bHQKLSAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXkgb3IgcG9pbnRl
ciBzb3VyY2UKKyAgICAgKiBAcGFyYW0ge1N0cmluZz99IHNvdXJjZU5hbWUgLSBOYW1lZCBrZXks
IHBvaW50ZXIgb3Igd2hlZWwgc291cmNlIHRvIHVzZQorICAgICAqICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG9yIG51bGwgZm9yIHRoZSBkZWZhdWx0IGtleSwgcG9pbnRlciBvcgorICAg
ICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoZWVsIHNvdXJjZQogICAgICAqIEBy
ZXR1cm5zIHtBY3Rpb25zfQogICAgICAqLwogICAgIHBhdXNlOiBmdW5jdGlvbihkdXJhdGlvbj0w
LCBzb3VyY2VUeXBlPSJub25lIiwge3NvdXJjZU5hbWU9bnVsbH09e30pIHsKQEAgLTI4MCw2ICsz
MTksMjcgQEAKICAgICAgIHNvdXJjZS5wb2ludGVyTW92ZSh0aGlzLCB4LCB5LCBkdXJhdGlvbiwg
b3JpZ2luKTsKICAgICAgIHJldHVybiB0aGlzOwogICAgIH0sCisKKyAgICAvKioKKyAgICAgKiBD
cmVhdGUgYSBzY3JvbGwgZXZlbnQgZm9yIHRoZSBjdXJyZW50IGRlZmF1bHQgd2hlZWwgc291cmNl
CisgICAgICoKKyAgICAgKiBAcGFyYW0ge051bWJlcn0geCAtIG1vdXNlIGN1cnNvciB4IGNvb3Jk
aW5hdGUKKyAgICAgKiBAcGFyYW0ge051bWJlcn0geSAtIG1vdXNlIGN1cnNvciB5IGNvb3JkaW5h
dGUKKyAgICAgKiBAcGFyYW0ge051bWJlcn0gZGVsdGFYIC0gc2Nyb2xsIGRlbHRhIHZhbHVlIGFs
b25nIHRoZSB4LWF4aXMgaW4gcGl4ZWxzCisgICAgICogQHBhcmFtIHtOdW1iZXJ9IGRlbHRhWSAt
IHNjcm9sbCBkZWx0YSB2YWx1ZSBhbG9uZyB0aGUgeS1heGlzIGluIHBpeGVscworICAgICAqIEBw
YXJhbSB7U3RyaW5nfEVsZW1lbnR9IG9yaWdpbiAtIE9yaWdpbiBvZiB0aGUgY29vcmRpbmF0ZSBz
eXN0ZW0uCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRWl0aGVyICJ2
aWV3cG9ydCIgb3IgYW4gRWxlbWVudAorICAgICAqIEBwYXJhbSB7TnVtYmVyP30gZHVyYXRpb24g
LSBUaW1lIGluIG1zIGZvciB0aGUgc2Nyb2xsCisgICAgICogQHBhcmFtIHtTdHJpbmc/fSBzb3Vy
Y2VOYW1lIC0gTmFtZWQgd2hlZWwgc291cmNlIHRvIHVzZSBvciBudWxsIGZvciB0aGUKKyAgICAg
KiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0IHdoZWVsIHNvdXJjZQorICAg
ICAqIEByZXR1cm5zIHtBY3Rpb25zfQorICAgICAqLworICAgIHNjcm9sbDogZnVuY3Rpb24oeCwg
eSwgZGVsdGFYLCBkZWx0YVksCisgICAgICAgICAgICAgICAgICAgICB7b3JpZ2luPSJ2aWV3cG9y
dCIsIGR1cmF0aW9uLCBzb3VyY2VOYW1lPW51bGx9PXt9KSB7CisgICAgICBsZXQgc291cmNlID0g
dGhpcy5nZXRTb3VyY2UoIndoZWVsIiwgc291cmNlTmFtZSk7CisgICAgICBzb3VyY2Uuc2Nyb2xs
KHRoaXMsIHgsIHksIGRlbHRhWCwgZGVsdGFZLCBkdXJhdGlvbiwgb3JpZ2luKTsKKyAgICAgIHJl
dHVybiB0aGlzOworICAgIH0sCiAgIH07CiAKICAgZnVuY3Rpb24gR2VuZXJhbFNvdXJjZSgpIHsK
QEAgLTQxNyw1ICs0NzcsNDYgQEAKICAgICB9LAogICB9OwogCisgIGZ1bmN0aW9uIFdoZWVsU291
cmNlKCkgeworICAgIHRoaXMuYWN0aW9ucyA9IG5ldyBNYXAoKTsKKyAgfQorCisgIFdoZWVsU291
cmNlLnByb3RvdHlwZSA9IHsKKyAgICBzZXJpYWxpemU6IGZ1bmN0aW9uKHRpY2tDb3VudCkgewor
ICAgICAgaWYgKCF0aGlzLmFjdGlvbnMuc2l6ZSkgeworICAgICAgICByZXR1cm4gdW5kZWZpbmVk
OworICAgICAgfQorICAgICAgbGV0IGFjdGlvbnMgPSBbXTsKKyAgICAgIGxldCBkYXRhID0geyJ0
eXBlIjogIndoZWVsIiwgImFjdGlvbnMiOiBhY3Rpb25zfTsKKyAgICAgIGZvciAobGV0IGk9MDsg
aTx0aWNrQ291bnQ7IGkrKykgeworICAgICAgICBpZiAodGhpcy5hY3Rpb25zLmhhcyhpKSkgewor
ICAgICAgICAgIGFjdGlvbnMucHVzaCh0aGlzLmFjdGlvbnMuZ2V0KGkpKTsKKyAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICBhY3Rpb25zLnB1c2goeyJ0eXBlIjogInBhdXNlIn0pOworICAgICAg
ICB9CisgICAgICB9CisgICAgICByZXR1cm4gZGF0YTsKKyAgICB9LAorCisgICAgc2Nyb2xsOiBm
dW5jdGlvbihhY3Rpb25zLCB4LCB5LCBkZWx0YVgsIGRlbHRhWSwgZHVyYXRpb24sIG9yaWdpbikg
eworICAgICAgbGV0IHRpY2sgPSBhY3Rpb25zLnRpY2tJZHg7CisgICAgICBpZiAodGhpcy5hY3Rp
b25zLmhhcyh0aWNrKSkgeworICAgICAgICB0aWNrID0gYWN0aW9ucy5hZGRUaWNrKCkudGlja0lk
eDsKKyAgICAgIH0KKyAgICAgIHRoaXMuYWN0aW9ucy5zZXQodGljaywge3R5cGU6ICJzY3JvbGwi
LCB4LCB5LCBkZWx0YVgsIGRlbHRhWSwgb3JpZ2lufSk7CisgICAgICBpZiAoZHVyYXRpb24pIHsK
KyAgICAgICAgdGhpcy5hY3Rpb25zLmdldCh0aWNrKS5kdXJhdGlvbiA9IGR1cmF0aW9uOworICAg
ICAgfQorICAgIH0sCisKKyAgICBhZGRQYXVzZTogZnVuY3Rpb24oYWN0aW9ucywgZHVyYXRpb24p
IHsKKyAgICAgIGxldCB0aWNrID0gYWN0aW9ucy50aWNrSWR4OworICAgICAgaWYgKHRoaXMuYWN0
aW9ucy5oYXModGljaykpIHsKKyAgICAgICAgdGljayA9IGFjdGlvbnMuYWRkVGljaygpLnRpY2tJ
ZHg7CisgICAgICB9CisgICAgICB0aGlzLmFjdGlvbnMuc2V0KHRpY2ssIHt0eXBlOiAicGF1c2Ui
LCBkdXJhdGlvbjogZHVyYXRpb259KTsKKyAgICB9LAorICB9OworCiAgIHRlc3RfZHJpdmVyLkFj
dGlvbnMgPSBBY3Rpb25zOwogfSkoKTsKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2ltcG9ydGVk
L3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3Rkcml2ZXIuanMgYi9MYXlvdXRU
ZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0ZHJpdmVy
LmpzCmluZGV4IGE4NTg4YjQ0Zjk0Yzc4ZjBhM2MyNTQyMzg1YmNlMjBjZmQxYTY0YzkuLmM1M2Iy
NDEzNmMwOTFmMDVlNGZmYmUyODZkMDYwYWJhMGZhNjZjZGYgMTAwNjQ0Ci0tLSBhL0xheW91dFRl
c3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3Rkcml2ZXIu
anMKKysrIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNv
dXJjZXMvdGVzdGRyaXZlci5qcwpAQCAtMSw2ICsxLDcgQEAKIChmdW5jdGlvbigpIHsKICAgICAi
dXNlIHN0cmljdCI7CiAgICAgdmFyIGlkQ291bnRlciA9IDA7CisgICAgbGV0IHRlc3RoYXJuZXNz
X2NvbnRleHQgPSBudWxsOwogCiAgICAgZnVuY3Rpb24gZ2V0SW5WaWV3Q2VudGVyUG9pbnQocmVj
dCkgewogICAgICAgICB2YXIgbGVmdCA9IE1hdGgubWF4KDAsIHJlY3QubGVmdCk7CkBAIC0xNSw3
ICsxNiw4IEBACiAgICAgfQogCiAgICAgZnVuY3Rpb24gZ2V0UG9pbnRlckludGVyYWN0YWJsZVBh
aW50VHJlZShlbGVtZW50KSB7Ci0gICAgICAgIGlmICghd2luZG93LmRvY3VtZW50LmNvbnRhaW5z
KGVsZW1lbnQpKSB7CisgICAgICAgIGxldCBlbGVtZW50RG9jdW1lbnQgPSBlbGVtZW50Lm93bmVy
RG9jdW1lbnQ7CisgICAgICAgIGlmICghZWxlbWVudERvY3VtZW50LmNvbnRhaW5zKGVsZW1lbnQp
KSB7CiAgICAgICAgICAgICByZXR1cm4gW107CiAgICAgICAgIH0KIApAQCAtMjcsMTAgKzI5LDEw
IEBACiAKICAgICAgICAgdmFyIGNlbnRlclBvaW50ID0gZ2V0SW5WaWV3Q2VudGVyUG9pbnQocmVj
dGFuZ2xlc1swXSk7CiAKLSAgICAgICAgaWYgKCJlbGVtZW50c0Zyb21Qb2ludCIgaW4gZG9jdW1l
bnQpIHsKLSAgICAgICAgICAgIHJldHVybiBkb2N1bWVudC5lbGVtZW50c0Zyb21Qb2ludChjZW50
ZXJQb2ludFswXSwgY2VudGVyUG9pbnRbMV0pOwotICAgICAgICB9IGVsc2UgaWYgKCJtc0VsZW1l
bnRzRnJvbVBvaW50IiBpbiBkb2N1bWVudCkgewotICAgICAgICAgICAgdmFyIHJ2ID0gZG9jdW1l
bnQubXNFbGVtZW50c0Zyb21Qb2ludChjZW50ZXJQb2ludFswXSwgY2VudGVyUG9pbnRbMV0pOwor
ICAgICAgICBpZiAoImVsZW1lbnRzRnJvbVBvaW50IiBpbiBlbGVtZW50RG9jdW1lbnQpIHsKKyAg
ICAgICAgICAgIHJldHVybiBlbGVtZW50RG9jdW1lbnQuZWxlbWVudHNGcm9tUG9pbnQoY2VudGVy
UG9pbnRbMF0sIGNlbnRlclBvaW50WzFdKTsKKyAgICAgICAgfSBlbHNlIGlmICgibXNFbGVtZW50
c0Zyb21Qb2ludCIgaW4gZWxlbWVudERvY3VtZW50KSB7CisgICAgICAgICAgICB2YXIgcnYgPSBl
bGVtZW50RG9jdW1lbnQubXNFbGVtZW50c0Zyb21Qb2ludChjZW50ZXJQb2ludFswXSwgY2VudGVy
UG9pbnRbMV0pOwogICAgICAgICAgICAgcmV0dXJuIEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxs
KHJ2ID8gcnYgOiBbXSk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICB0aHJvdyBuZXcg
RXJyb3IoImRvY3VtZW50LmVsZW1lbnRzRnJvbVBvaW50IHVuc3VwcG9ydGVkIik7CkBAIC00Nyw2
ICs0OSwzMSBAQAogICAgICAqIEBuYW1lc3BhY2UKICAgICAgKi8KICAgICB3aW5kb3cudGVzdF9k
cml2ZXIgPSB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBTZXQgdGhlIGNvbnRleHQgaW4gd2hp
Y2ggdGVzdGhhcm5lc3MuanMgaXMgbG9hZGVkCisgICAgICAgICAqCisgICAgICAgICAqIEBwYXJh
bSB7V2luZG93UHJveHl9IGNvbnRleHQgLSB0aGUgd2luZG93IGNvbnRhaW5pbmcgdGVzdGhhcm5l
c3MuanMKKyAgICAgICAgICoqLworICAgICAgICBzZXRfdGVzdF9jb250ZXh0OiBmdW5jdGlvbihj
b250ZXh0KSB7CisgICAgICAgICAgaWYgKHdpbmRvdy50ZXN0X2RyaXZlcl9pbnRlcm5hbC5zZXRf
dGVzdF9jb250ZXh0KSB7CisgICAgICAgICAgICB3aW5kb3cudGVzdF9kcml2ZXJfaW50ZXJuYWwu
c2V0X3Rlc3RfY29udGV4dChjb250ZXh0KTsKKyAgICAgICAgICB9CisgICAgICAgICAgdGVzdGhh
cm5lc3NfY29udGV4dCA9IGNvbnRleHQ7CisgICAgICAgIH0sCisKKyAgICAgICAgLyoqCisgICAg
ICAgICAqIHBvc3RNZXNzYWdlIHRvIHRoZSBjb250ZXh0IGNvbnRhaW5pbmcgdGVzdGhhcm5lc3Mu
anMKKyAgICAgICAgICoKKyAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IG1zZyAtIHRoZSBkYXRh
IHRvIFBPU1QKKyAgICAgICAgICoqLworICAgICAgICBtZXNzYWdlX3Rlc3Q6IGZ1bmN0aW9uKG1z
ZykgeworICAgICAgICAgICAgbGV0IHRhcmdldCA9IHRlc3RoYXJuZXNzX2NvbnRleHQ7CisgICAg
ICAgICAgICBpZiAodGVzdGhhcm5lc3NfY29udGV4dCA9PT0gbnVsbCkgeworICAgICAgICAgICAg
ICAgIHRhcmdldCA9IHdpbmRvdzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHRhcmdldC5w
b3N0TWVzc2FnZShtc2csICIqIik7CisgICAgICAgIH0sCisKICAgICAgICAgLyoqCiAgICAgICAg
ICAqIFRyaWdnZXIgdXNlciBpbnRlcmFjdGlvbiBpbiBvcmRlciB0byBncmFudCBhZGRpdGlvbmFs
IHByaXZpbGVnZXMgdG8KICAgICAgICAgICogYSBwcm92aWRlZCBmdW5jdGlvbi4KQEAgLTU2LDMw
ICs4MywzNSBAQAogICAgICAgICAgKiBAcGFyYW0ge1N0cmluZ30gaW50ZW50IC0gYSBkZXNjcmlw
dGlvbiBvZiB0aGUgYWN0aW9uIHdoaWNoIG11Y2ggYmUKICAgICAgICAgICogICAgICAgICAgICAg
ICAgICAgICAgICAgIHRyaWdnZXJlZCBieSB1c2VyIGludGVyYWN0aW9uCiAgICAgICAgICAqIEBw
YXJhbSB7RnVuY3Rpb259IGFjdGlvbiAtIGNvZGUgcmVxdWlyaW5nIGVzY2FsYXRlZCBwcml2aWxl
Z2VzCisgICAgICAgICAqIEBwYXJhbSB7V2luZG93UHJveHl9IGNvbnRleHQgLSBCcm93c2luZyBj
b250ZXh0IGluIHdoaWNoCisgICAgICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB0byBydW4gdGhlIGNhbGwsIG9yIG51bGwgZm9yIHRoZSBjdXJyZW50CisgICAgICAgICAqICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicm93c2luZyBjb250ZXh0LgogICAgICAgICAg
KgogICAgICAgICAgKiBAcmV0dXJucyB7UHJvbWlzZX0gZnVsZmlsbGVkIGZvbGxvd2luZyB1c2Vy
IGludGVyYWN0aW9uIGFuZAogICAgICAgICAgKiAgICAgICAgICAgICAgICAgICAgZXhlY3V0aW9u
IG9mIHRoZSBwcm92aWRlZCBgYWN0aW9uYCBmdW5jdGlvbjsKICAgICAgICAgICogICAgICAgICAg
ICAgICAgICAgIHJlamVjdGVkIGlmIGludGVyYWN0aW9uIGZhaWxzIG9yIHRoZSBwcm92aWRlZAog
ICAgICAgICAgKiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gdGhyb3dzIGFuIGVycm9yCiAg
ICAgICAgICAqLwotICAgICAgICBibGVzczogZnVuY3Rpb24oaW50ZW50LCBhY3Rpb24pIHsKLSAg
ICAgICAgICAgIHZhciBidXR0b24gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJidXR0b24iKTsK
KyAgICAgICAgYmxlc3M6IGZ1bmN0aW9uKGludGVudCwgYWN0aW9uLCBjb250ZXh0PW51bGwpIHsK
KyAgICAgICAgICAgIGxldCBjb250ZXh0RG9jdW1lbnQgPSBjb250ZXh0ID8gY29udGV4dC5kb2N1
bWVudCA6IGRvY3VtZW50OworICAgICAgICAgICAgdmFyIGJ1dHRvbiA9IGNvbnRleHREb2N1bWVu
dC5jcmVhdGVFbGVtZW50KCJidXR0b24iKTsKICAgICAgICAgICAgIGJ1dHRvbi5pbm5lckhUTUwg
PSAiVGhpcyB0ZXN0IHJlcXVpcmVzIHVzZXIgaW50ZXJhY3Rpb24uPGJyIC8+IiArCiAgICAgICAg
ICAgICAgICAgIlBsZWFzZSBjbGljayBoZXJlIHRvIGFsbG93ICIgKyBpbnRlbnQgKyAiLiI7CiAg
ICAgICAgICAgICBidXR0b24uaWQgPSAid3B0LXRlc3QtZHJpdmVyLWJsZXNzLSIgKyAoaWRDb3Vu
dGVyICs9IDEpOwotICAgICAgICAgICAgY29uc3QgZWxlbSA9IGRvY3VtZW50LmJvZHkgfHwgZG9j
dW1lbnQuZG9jdW1lbnRFbGVtZW50OworICAgICAgICAgICAgY29uc3QgZWxlbSA9IGNvbnRleHRE
b2N1bWVudC5ib2R5IHx8IGNvbnRleHREb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7CiAgICAgICAg
ICAgICBlbGVtLmFwcGVuZENoaWxkKGJ1dHRvbik7CiAKLSAgICAgICAgICAgIHJldHVybiBuZXcg
UHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3QpIHsKLSAgICAgICAgICAgICAgICAgICAg
YnV0dG9uLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwgcmVzb2x2ZSk7CisgICAgICAgICAgICBs
ZXQgd2FpdF9jbGljayA9IG5ldyBQcm9taXNlKHJlc29sdmUgPT4gYnV0dG9uLmFkZEV2ZW50TGlz
dGVuZXIoImNsaWNrIiwgcmVzb2x2ZSkpOwogCi0gICAgICAgICAgICAgICAgICAgIHRlc3RfZHJp
dmVyLmNsaWNrKGJ1dHRvbikuY2F0Y2gocmVqZWN0KTsKLSAgICAgICAgICAgICAgICB9KS50aGVu
KGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgcmV0dXJuIHRlc3RfZHJpdmVyLmNsaWNrKGJ1dHRv
bikKKyAgICAgICAgICAgICAgICAudGhlbih3YWl0X2NsaWNrKQorICAgICAgICAgICAgICAgIC50
aGVuKGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgICBidXR0b24ucmVtb3ZlKCk7CiAK
ICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBhY3Rpb24gPT09ICJmdW5jdGlvbiIpIHsK
ICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBhY3Rpb24oKTsKICAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICAgICAgICAg
ICB9KTsKICAgICAgICAgfSwKIApAQCAtOTUsMTQgKzEyNyw2IEBACiAgICAgICAgICAqICAgICAg
ICAgICAgICAgICAgICB0aGUgY2FzZXMgdGhlIFdlYkRyaXZlciBjb21tYW5kIGVycm9ycwogICAg
ICAgICAgKi8KICAgICAgICAgY2xpY2s6IGZ1bmN0aW9uKGVsZW1lbnQpIHsKLSAgICAgICAgICAg
IGlmICh3aW5kb3cudG9wICE9PSB3aW5kb3cpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gUHJv
bWlzZS5yZWplY3QobmV3IEVycm9yKCJjYW4gb25seSBjbGljayBpbiB0b3AtbGV2ZWwgd2luZG93
IikpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoIXdpbmRvdy5kb2N1bWVudC5j
b250YWlucyhlbGVtZW50KSkgewotICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVj
dChuZXcgRXJyb3IoImVsZW1lbnQgaW4gZGlmZmVyZW50IGRvY3VtZW50IG9yIHNoYWRvdyB0cmVl
IikpOwotICAgICAgICAgICAgfQotCiAgICAgICAgICAgICBpZiAoIWluVmlldyhlbGVtZW50KSkg
ewogICAgICAgICAgICAgICAgIGVsZW1lbnQuc2Nyb2xsSW50b1ZpZXcoe2JlaGF2aW9yOiAiaW5z
dGFudCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmxvY2s6ICJl
bmQiLApAQCAtMTM1LDE0ICsxNTksNiBAQAogICAgICAgICAgKiAgICAgICAgICAgICAgICAgICAg
dGhlIGNhc2VzIHRoZSBXZWJEcml2ZXIgY29tbWFuZCBlcnJvcnMKICAgICAgICAgICovCiAgICAg
ICAgIHNlbmRfa2V5czogZnVuY3Rpb24oZWxlbWVudCwga2V5cykgewotICAgICAgICAgICAgaWYg
KHdpbmRvdy50b3AgIT09IHdpbmRvdykgewotICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNl
LnJlamVjdChuZXcgRXJyb3IoImNhbiBvbmx5IHNlbmQga2V5cyBpbiB0b3AtbGV2ZWwgd2luZG93
IikpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoIXdpbmRvdy5kb2N1bWVudC5j
b250YWlucyhlbGVtZW50KSkgewotICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVj
dChuZXcgRXJyb3IoImVsZW1lbnQgaW4gZGlmZmVyZW50IGRvY3VtZW50IG9yIHNoYWRvdyB0cmVl
IikpOwotICAgICAgICAgICAgfQotCiAgICAgICAgICAgICBpZiAoIWluVmlldyhlbGVtZW50KSkg
ewogICAgICAgICAgICAgICAgIGVsZW1lbnQuc2Nyb2xsSW50b1ZpZXcoe2JlaGF2aW9yOiAiaW5z
dGFudCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmxvY2s6ICJl
bmQiLApAQCAtMTY2LDM0ICsxODIsNDIgQEAKICAgICAgICAgICogaHR0cHM6Ly9naXRodWIuY29t
L1dJQ0cvcGFnZS1saWZlY3ljbGUvYmxvYi9tYXN0ZXIvUkVBRE1FLm1kfExpZmVjeWNsZSBBUEkK
ICAgICAgICAgICogZm9yIFdlYiBQYWdlc30KICAgICAgICAgICoKKyAgICAgICAgICogQHBhcmFt
IHtXaW5kb3dQcm94eX0gY29udGV4dCAtIEJyb3dzaW5nIGNvbnRleHQgaW4gd2hpY2gKKyAgICAg
ICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvIHJ1biB0aGUgY2FsbCwgb3Ig
bnVsbCBmb3IgdGhlIGN1cnJlbnQKKyAgICAgICAgICogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGJyb3dzaW5nIGNvbnRleHQuCisgICAgICAgICAqCiAgICAgICAgICAqIEByZXR1cm5z
IHtQcm9taXNlfSBmdWxmaWxsZWQgYWZ0ZXIgdGhlIGZyZWV6ZSByZXF1ZXN0IGlzIHNlbnQsIG9y
IHJlamVjdGVkCiAgICAgICAgICAqICAgICAgICAgICAgICAgICAgICBpbiBjYXNlIHRoZSBXZWJE
cml2ZXIgY29tbWFuZCBlcnJvcnMKICAgICAgICAgICovCi0gICAgICAgIGZyZWV6ZTogZnVuY3Rp
b24oKSB7CisgICAgICAgIGZyZWV6ZTogZnVuY3Rpb24oY29udGV4dD1udWxsKSB7CiAgICAgICAg
ICAgICByZXR1cm4gd2luZG93LnRlc3RfZHJpdmVyX2ludGVybmFsLmZyZWV6ZSgpOwogICAgICAg
ICB9LAogCiAgICAgICAgIC8qKgogICAgICAgICAgKiBTZW5kIGEgc2VxdWVuY2Ugb2YgYWN0aW9u
cwogICAgICAgICAgKgotICAgICAgICAgKiBUaGlzIGZ1bmN0aW9uIHNlbmRzIGEgc2VxdWVuY2Ug
b2YgYWN0aW9ucyB0byB0aGUgdG9wIGxldmVsIHdpbmRvdworICAgICAgICAgKiBUaGlzIGZ1bmN0
aW9uIHNlbmRzIGEgc2VxdWVuY2Ugb2YgYWN0aW9ucwogICAgICAgICAgKiB0byBwZXJmb3JtLiBJ
dCBpcyBtb2RlbGVkIGFmdGVyIHRoZSBiZWhhdmlvdXIgb2Yge0BsaW5rCiAgICAgICAgICAqIGh0
dHBzOi8vdzNjLmdpdGh1Yi5pby93ZWJkcml2ZXIvI2FjdGlvbnN8V2ViRHJpdmVyIEFjdGlvbnMg
Q29tbWFuZH0KICAgICAgICAgICoKICAgICAgICAgICogQHBhcmFtIHtBcnJheX0gYWN0aW9ucyAt
IGFuIGFycmF5IG9mIGFjdGlvbnMuIFRoZSBmb3JtYXQgaXMgdGhlIHNhbWUgYXMgdGhlIGFjdGlv
bnMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3BlcnR5IG9mIHRoZSBX
ZWJEcml2ZXIgY29tbWFuZCB7QGxpbmsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby93ZWJkcml2ZXIvI3BlcmZvcm0tYWN0aW9uc3xQZXJm
b3JtCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBY3Rpb25zfSBjb21tYW5k
LiBFYWNoIGVsZW1lbnQgaXMgYW4gb2JqZWN0IHJlcHJlc2VudGluZyBhbgotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXQgc291cmNlIGFuZCBlYWNoIGlucHV0IHNvdXJj
ZSBpdHNlbGYgaGFzIGFuIGFjdGlvbnMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHByb3BlcnR5IGRldGFpbGluZyB0aGUgYmVoYXZpb3VyIG9mIHRoYXQgc291cmNlIGF0IGVh
Y2ggdGltZXN0ZXAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChvciB0aWNr
KS4gQXV0aG9ycyBhcmUgbm90IGV4cGVjdGVkIHRvIGNvbnN0cnVjdCB0aGUgYWN0aW9ucwotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VxdWVuY2UgYnkgaGFuZCwgYnV0IHRv
IHVzZSB0aGUgYnVpbGRlciBhcGkgcHJvdmlkZWQgaW4KLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHRlc3Rkcml2ZXItYWN0aW9ucy5qcworICAgICAgICAgKiAgICAgICAgICAg
ICAgICAgICAgICAgICAgcHJvcGVydHkgb2YgdGhlIFdlYkRyaXZlciBjb21tYW5kIHtAbGluawor
ICAgICAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgaHR0cHM6Ly93M2MuZ2l0aHViLmlv
L3dlYmRyaXZlci8jcGVyZm9ybS1hY3Rpb25zfFBlcmZvcm0KKyAgICAgICAgICogICAgICAgICAg
ICAgICAgICAgICAgICAgIEFjdGlvbnN9IGNvbW1hbmQuIEVhY2ggZWxlbWVudCBpcyBhbiBvYmpl
Y3QgcmVwcmVzZW50aW5nIGFuCisgICAgICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICBp
bnB1dCBzb3VyY2UgYW5kIGVhY2ggaW5wdXQgc291cmNlIGl0c2VsZiBoYXMgYW4gYWN0aW9ucwor
ICAgICAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvcGVydHkgZGV0YWlsaW5nIHRo
ZSBiZWhhdmlvdXIgb2YgdGhhdCBzb3VyY2UgYXQgZWFjaCB0aW1lc3RlcAorICAgICAgICAgKiAg
ICAgICAgICAgICAgICAgICAgICAgICAgKG9yIHRpY2spLiBBdXRob3JzIGFyZSBub3QgZXhwZWN0
ZWQgdG8gY29uc3RydWN0IHRoZSBhY3Rpb25zCisgICAgICAgICAqICAgICAgICAgICAgICAgICAg
ICAgICAgICBzZXF1ZW5jZSBieSBoYW5kLCBidXQgdG8gdXNlIHRoZSBidWlsZGVyIGFwaSBwcm92
aWRlZCBpbgorICAgICAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgdGVzdGRyaXZlci1h
Y3Rpb25zLmpzCisgICAgICAgICAqIEBwYXJhbSB7V2luZG93UHJveHl9IGNvbnRleHQgLSBCcm93
c2luZyBjb250ZXh0IGluIHdoaWNoCisgICAgICAgICAqICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB0byBydW4gdGhlIGNhbGwsIG9yIG51bGwgZm9yIHRoZSBjdXJyZW50CisgICAgICAg
ICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicm93c2luZyBjb250ZXh0LgorICAg
ICAgICAgKgogICAgICAgICAgKiBAcmV0dXJucyB7UHJvbWlzZX0gZnVmaWxlZCBhZnRlciB0aGUg
YWN0aW9ucyBhcmUgcGVyZm9ybWVkLCBvciByZWplY3RlZCBpbgogICAgICAgICAgKiAgICAgICAg
ICAgICAgICAgICAgdGhlIGNhc2VzIHRoZSBXZWJEcml2ZXIgY29tbWFuZCBlcnJvcnMKICAgICAg
ICAgICovCi0gICAgICAgIGFjdGlvbl9zZXF1ZW5jZTogZnVuY3Rpb24oYWN0aW9ucykgewotICAg
ICAgICAgICAgcmV0dXJuIHdpbmRvdy50ZXN0X2RyaXZlcl9pbnRlcm5hbC5hY3Rpb25fc2VxdWVu
Y2UoYWN0aW9ucyk7CisgICAgICAgIGFjdGlvbl9zZXF1ZW5jZTogZnVuY3Rpb24oYWN0aW9ucywg
Y29udGV4dD1udWxsKSB7CisgICAgICAgICAgICByZXR1cm4gd2luZG93LnRlc3RfZHJpdmVyX2lu
dGVybmFsLmFjdGlvbl9zZXF1ZW5jZShhY3Rpb25zLCBjb250ZXh0KTsKICAgICAgICAgfSwKIAog
ICAgICAgICAvKioKQEAgLTIwMywxMSArMjI3LDE1IEBACiAgICAgICAgICAqIGJ5IFJlcG9ydGlu
Z09ic2VydmVyKSBmb3IgdGVzdGluZyBwdXJwb3NlcywgYXMgZGVzY3JpYmVkIGluCiAgICAgICAg
ICAqIHtAbGluayBodHRwczovL3czYy5naXRodWIuaW8vcmVwb3J0aW5nLyNnZW5lcmF0ZS10ZXN0
LXJlcG9ydC1jb21tYW5kfQogICAgICAgICAgKgorICAgICAgICAgKiBAcGFyYW0ge1dpbmRvd1By
b3h5fSBjb250ZXh0IC0gQnJvd3NpbmcgY29udGV4dCBpbiB3aGljaAorICAgICAgICAgKiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gcnVuIHRoZSBjYWxsLCBvciBudWxsIGZvciB0
aGUgY3VycmVudAorICAgICAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJv
d3NpbmcgY29udGV4dC4KKyAgICAgICAgICoKICAgICAgICAgICogQHJldHVybnMge1Byb21pc2V9
IGZ1bGZpbGxlZCBhZnRlciB0aGUgcmVwb3J0IGlzIGdlbmVyYXRlZCwgb3IKICAgICAgICAgICog
ICAgICAgICAgICAgICAgICAgIHJlamVjdGVkIGlmIHRoZSByZXBvcnQgZ2VuZXJhdGlvbiBmYWls
cwogICAgICAgICAgKi8KLSAgICAgICAgZ2VuZXJhdGVfdGVzdF9yZXBvcnQ6IGZ1bmN0aW9uKG1l
c3NhZ2UpIHsKLSAgICAgICAgICAgIHJldHVybiB3aW5kb3cudGVzdF9kcml2ZXJfaW50ZXJuYWwu
Z2VuZXJhdGVfdGVzdF9yZXBvcnQobWVzc2FnZSk7CisgICAgICAgIGdlbmVyYXRlX3Rlc3RfcmVw
b3J0OiBmdW5jdGlvbihtZXNzYWdlLCBjb250ZXh0PW51bGwpIHsKKyAgICAgICAgICAgIHJldHVy
biB3aW5kb3cudGVzdF9kcml2ZXJfaW50ZXJuYWwuZ2VuZXJhdGVfdGVzdF9yZXBvcnQobWVzc2Fn
ZSwgY29udGV4dCk7CiAgICAgICAgIH0sCiAKICAgICAgICAgLyoqCkBAIC0yMjEsNiArMjQ5LDkg
QEAKICAgICAgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3QKICAgICAg
ICAgICogQHBhcmFtIHtTdHJpbmd9IHN0YXRlIC0gdGhlIHN0YXRlIG9mIHRoZSBwZXJtaXNzaW9u
CiAgICAgICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gb25lX3JlYWxtIC0gT3B0aW9uYWwuIFdoZXRo
ZXIgdGhlIHBlcm1pc3Npb24gYXBwbGllcyB0byBvbmx5IG9uZSByZWFsbQorICAgICAgICAgKiBA
cGFyYW0ge1dpbmRvd1Byb3h5fSBjb250ZXh0IC0gQnJvd3NpbmcgY29udGV4dCBpbiB3aGljaAor
ICAgICAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gcnVuIHRoZSBjYWxs
LCBvciBudWxsIGZvciB0aGUgY3VycmVudAorICAgICAgICAgKiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgYnJvd3NpbmcgY29udGV4dC4KICAgICAgICAgICoKICAgICAgICAgICogVGhl
IGFib3ZlIHBhcmFtcyBhcmUgdXNlZCB0byBjcmVhdGUgYSBbUGVybWlzc2lvblNldFBhcmFtZXRl
cnNde0BsaW5rCiAgICAgICAgICAqIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby9wZXJtaXNzaW9ucy8j
ZGljdGRlZi1wZXJtaXNzaW9uc2V0cGFyYW1ldGVyc30gb2JqZWN0CkBAIC0yMjgsMTMgKzI1OSwx
MyBAQAogICAgICAgICAgKiBAcmV0dXJucyB7UHJvbWlzZX0gZnVsZmlsbGVkIGFmdGVyIHRoZSBw
ZXJtaXNzaW9uIGlzIHNldCwgb3IgcmVqZWN0ZWQgaWYgc2V0dGluZyB0aGUKICAgICAgICAgICog
ICAgICAgICAgICAgICAgICAgIHBlcm1pc3Npb24gZmFpbHMKICAgICAgICAgICovCi0gICAgICAg
IHNldF9wZXJtaXNzaW9uOiBmdW5jdGlvbihkZXNjcmlwdG9yLCBzdGF0ZSwgb25lX3JlYWxtKSB7
CisgICAgICAgIHNldF9wZXJtaXNzaW9uOiBmdW5jdGlvbihkZXNjcmlwdG9yLCBzdGF0ZSwgb25l
X3JlYWxtLCBjb250ZXh0PW51bGwpIHsKICAgICAgICAgICAgIGxldCBwZXJtaXNzaW9uX3BhcmFt
cyA9IHsKICAgICAgICAgICAgICAgZGVzY3JpcHRvciwKICAgICAgICAgICAgICAgc3RhdGUsCiAg
ICAgICAgICAgICAgIG9uZVJlYWxtOiBvbmVfcmVhbG0sCiAgICAgICAgICAgICB9OwotICAgICAg
ICAgICAgcmV0dXJuIHdpbmRvdy50ZXN0X2RyaXZlcl9pbnRlcm5hbC5zZXRfcGVybWlzc2lvbihw
ZXJtaXNzaW9uX3BhcmFtcyk7CisgICAgICAgICAgICByZXR1cm4gd2luZG93LnRlc3RfZHJpdmVy
X2ludGVybmFsLnNldF9wZXJtaXNzaW9uKHBlcm1pc3Npb25fcGFyYW1zLCBjb250ZXh0KTsKICAg
ICAgICAgfSwKIAogICAgICAgICAvKioKQEAgLTI0NywxMiArMjc4LDE2IEBACiAgICAgICAgICAq
IEBwYXJhbSB7T2JqZWN0fSBjb25maWcgLSBhbiBbQXV0aGVudGljYXRvciBDb25maWd1cmF0aW9u
XXtAbGluawogICAgICAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgaHR0cHM6Ly93M2Mu
Z2l0aHViLmlvL3dlYmF1dGhuLyNhdXRoZW50aWNhdG9yLWNvbmZpZ3VyYXRpb259CiAgICAgICAg
ICAqICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3QKKyAgICAgICAgICogQHBhcmFtIHtX
aW5kb3dQcm94eX0gY29udGV4dCAtIEJyb3dzaW5nIGNvbnRleHQgaW4gd2hpY2gKKyAgICAgICAg
ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvIHJ1biB0aGUgY2FsbCwgb3IgbnVs
bCBmb3IgdGhlIGN1cnJlbnQKKyAgICAgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGJyb3dzaW5nIGNvbnRleHQuCisgICAgICAgICAqCiAgICAgICAgICAqIEByZXR1cm5zIHtQ
cm9taXNlfSBmdWxmaWxsZWQgYWZ0ZXIgdGhlIGF1dGhlbnRpY2F0b3IgaXMgYWRkZWQsIG9yCiAg
ICAgICAgICAqICAgICAgICAgICAgICAgICAgICByZWplY3RlZCBpbiB0aGUgY2FzZXMgdGhlIFdl
YkRyaXZlciBjb21tYW5kCiAgICAgICAgICAqICAgICAgICAgICAgICAgICAgICBlcnJvcnMuIFJl
dHVybnMgdGhlIElEIG9mIHRoZSBhdXRoZW50aWNhdG9yCiAgICAgICAgICAqLwotICAgICAgICBh
ZGRfdmlydHVhbF9hdXRoZW50aWNhdG9yOiBmdW5jdGlvbihjb25maWcpIHsKLSAgICAgICAgICAg
IHJldHVybiB3aW5kb3cudGVzdF9kcml2ZXJfaW50ZXJuYWwuYWRkX3ZpcnR1YWxfYXV0aGVudGlj
YXRvcihjb25maWcpOworICAgICAgICBhZGRfdmlydHVhbF9hdXRoZW50aWNhdG9yOiBmdW5jdGlv
bihjb25maWcsIGNvbnRleHQ9bnVsbCkgeworICAgICAgICAgICAgcmV0dXJuIHdpbmRvdy50ZXN0
X2RyaXZlcl9pbnRlcm5hbC5hZGRfdmlydHVhbF9hdXRoZW50aWNhdG9yKGNvbmZpZywgY29udGV4
dCk7CiAgICAgICAgIH0sCiAKICAgICAgICAgLyoqCkBAIC0yNjQsMTMgKzI5OSwxNiBAQAogICAg
ICAgICAgKgogICAgICAgICAgKiBAcGFyYW0ge1N0cmluZ30gYXV0aGVudGljYXRvcl9pZCAtIHRo
ZSBJRCBvZiB0aGUgYXV0aGVudGljYXRvciB0byBiZQogICAgICAgICAgKiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHJlbW92ZWQuCisgICAgICAgICAqIEBwYXJhbSB7V2luZG93
UHJveHl9IGNvbnRleHQgLSBCcm93c2luZyBjb250ZXh0IGluIHdoaWNoCisgICAgICAgICAqICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0byBydW4gdGhlIGNhbGwsIG9yIG51bGwgZm9y
IHRoZSBjdXJyZW50CisgICAgICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBi
cm93c2luZyBjb250ZXh0LgogICAgICAgICAgKgogICAgICAgICAgKiBAcmV0dXJucyB7UHJvbWlz
ZX0gZnVsZmlsbGVkIGFmdGVyIHRoZSBhdXRoZW50aWNhdG9yIGlzIHJlbW92ZWQsIG9yCiAgICAg
ICAgICAqICAgICAgICAgICAgICAgICAgICByZWplY3RlZCBpbiB0aGUgY2FzZXMgdGhlIFdlYkRy
aXZlciBjb21tYW5kCiAgICAgICAgICAqICAgICAgICAgICAgICAgICAgICBlcnJvcnMKICAgICAg
ICAgICovCi0gICAgICAgIHJlbW92ZV92aXJ0dWFsX2F1dGhlbnRpY2F0b3I6IGZ1bmN0aW9uKGF1
dGhlbnRpY2F0b3JfaWQpIHsKLSAgICAgICAgICAgIHJldHVybiB3aW5kb3cudGVzdF9kcml2ZXJf
aW50ZXJuYWwucmVtb3ZlX3ZpcnR1YWxfYXV0aGVudGljYXRvcihhdXRoZW50aWNhdG9yX2lkKTsK
KyAgICAgICAgcmVtb3ZlX3ZpcnR1YWxfYXV0aGVudGljYXRvcjogZnVuY3Rpb24oYXV0aGVudGlj
YXRvcl9pZCwgY29udGV4dD1udWxsKSB7CisgICAgICAgICAgICByZXR1cm4gd2luZG93LnRlc3Rf
ZHJpdmVyX2ludGVybmFsLnJlbW92ZV92aXJ0dWFsX2F1dGhlbnRpY2F0b3IoYXV0aGVudGljYXRv
cl9pZCwgY29udGV4dCk7CiAgICAgICAgIH0sCiAKICAgICAgICAgLyoqCkBAIC0yODIsMTMgKzMy
MCwxNiBAQAogICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gY3JlZGVudGlhbCAtIEEgW0NyZWRl
bnRpYWwgUGFyYW1ldGVyc117QGxpbmsKICAgICAgICAgICogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBodHRwczovL3czYy5naXRodWIuaW8vd2ViYXV0aG4vI2NyZWRlbnRpYWwtcGFyYW1l
dGVyc30KICAgICAgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3QKKyAg
ICAgICAgICogQHBhcmFtIHtXaW5kb3dQcm94eX0gY29udGV4dCAtIEJyb3dzaW5nIGNvbnRleHQg
aW4gd2hpY2gKKyAgICAgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvIHJ1
biB0aGUgY2FsbCwgb3IgbnVsbCBmb3IgdGhlIGN1cnJlbnQKKyAgICAgICAgICogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGJyb3dzaW5nIGNvbnRleHQuCiAgICAgICAgICAqCiAgICAg
ICAgICAqIEByZXR1cm5zIHtQcm9taXNlfSBmdWxmaWxsZWQgYWZ0ZXIgdGhlIGNyZWRlbnRpYWwg
aXMgYWRkZWQsIG9yCiAgICAgICAgICAqICAgICAgICAgICAgICAgICAgICByZWplY3RlZCBpbiB0
aGUgY2FzZXMgdGhlIFdlYkRyaXZlciBjb21tYW5kCiAgICAgICAgICAqICAgICAgICAgICAgICAg
ICAgICBlcnJvcnMKICAgICAgICAgICovCi0gICAgICAgIGFkZF9jcmVkZW50aWFsOiBmdW5jdGlv
bihhdXRoZW50aWNhdG9yX2lkLCBjcmVkZW50aWFsKSB7Ci0gICAgICAgICAgICByZXR1cm4gd2lu
ZG93LnRlc3RfZHJpdmVyX2ludGVybmFsLmFkZF9jcmVkZW50aWFsKGF1dGhlbnRpY2F0b3JfaWQs
IGNyZWRlbnRpYWwpOworICAgICAgICBhZGRfY3JlZGVudGlhbDogZnVuY3Rpb24oYXV0aGVudGlj
YXRvcl9pZCwgY3JlZGVudGlhbCwgY29udGV4dD1udWxsKSB7CisgICAgICAgICAgICByZXR1cm4g
d2luZG93LnRlc3RfZHJpdmVyX2ludGVybmFsLmFkZF9jcmVkZW50aWFsKGF1dGhlbnRpY2F0b3Jf
aWQsIGNyZWRlbnRpYWwsIGNvbnRleHQpOwogICAgICAgICB9LAogCiAgICAgICAgIC8qKgpAQCAt
MzAwLDYgKzM0MSw5IEBACiAgICAgICAgICAqIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby93ZWJhdXRo
bi8jc2N0bi1hdXRvbWF0aW9uLWdldC1jcmVkZW50aWFscwogICAgICAgICAgKgogICAgICAgICAg
KiBAcGFyYW0ge1N0cmluZ30gYXV0aGVudGljYXRvcl9pZCAtIHRoZSBJRCBvZiB0aGUgYXV0aGVu
dGljYXRvcgorICAgICAgICAgKiBAcGFyYW0ge1dpbmRvd1Byb3h5fSBjb250ZXh0IC0gQnJvd3Np
bmcgY29udGV4dCBpbiB3aGljaAorICAgICAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdG8gcnVuIHRoZSBjYWxsLCBvciBudWxsIGZvciB0aGUgY3VycmVudAorICAgICAgICAg
KiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJvd3NpbmcgY29udGV4dC4KICAgICAg
ICAgICoKICAgICAgICAgICogQHJldHVybnMge1Byb21pc2V9IGZ1bGZpbGxlZCBhZnRlciB0aGUg
Y3JlZGVudGlhbHMgYXJlIHJldHVybmVkLCBvcgogICAgICAgICAgKiAgICAgICAgICAgICAgICAg
ICAgcmVqZWN0ZWQgaW4gdGhlIGNhc2VzIHRoZSBXZWJEcml2ZXIgY29tbWFuZApAQCAtMzA3LDgg
KzM1MSw4IEBACiAgICAgICAgICAqICAgICAgICAgICAgICAgICAgICBQYXJhbWV0ZXJzXXtAbGlu
awogICAgICAgICAgKiAgICAgICAgICAgICAgICAgICAgaHR0cHM6Ly93M2MuZ2l0aHViLmlvL3dl
YmF1dGhuLyNjcmVkZW50aWFsLXBhcmFtZXRlcnN9CiAgICAgICAgICAqLwotICAgICAgICBnZXRf
Y3JlZGVudGlhbHM6IGZ1bmN0aW9uKGF1dGhlbnRpY2F0b3JfaWQpIHsKLSAgICAgICAgICAgIHJl
dHVybiB3aW5kb3cudGVzdF9kcml2ZXJfaW50ZXJuYWwuZ2V0X2NyZWRlbnRpYWxzKGF1dGhlbnRp
Y2F0b3JfaWQpOworICAgICAgICBnZXRfY3JlZGVudGlhbHM6IGZ1bmN0aW9uKGF1dGhlbnRpY2F0
b3JfaWQsIGNvbnRleHQ9bnVsbCkgeworICAgICAgICAgICAgcmV0dXJuIHdpbmRvdy50ZXN0X2Ry
aXZlcl9pbnRlcm5hbC5nZXRfY3JlZGVudGlhbHMoYXV0aGVudGljYXRvcl9pZCwgY29udGV4dD1u
dWxsKTsKICAgICAgICAgfSwKIAogICAgICAgICAvKioKQEAgLTMxOCwxMyArMzYyLDE2IEBACiAg
ICAgICAgICAqCiAgICAgICAgICAqIEBwYXJhbSB7U3RyaW5nfSBhdXRoZW50aWNhdG9yX2lkIC0g
dGhlIElEIG9mIHRoZSBhdXRoZW50aWNhdG9yCiAgICAgICAgICAqIEBwYXJhbSB7U3RyaW5nfSBj
cmVkZW50aWFsX2lkIC0gdGhlIElEIG9mIHRoZSBjcmVkZW50aWFsCisgICAgICAgICAqIEBwYXJh
bSB7V2luZG93UHJveHl9IGNvbnRleHQgLSBCcm93c2luZyBjb250ZXh0IGluIHdoaWNoCisgICAg
ICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0byBydW4gdGhlIGNhbGwsIG9y
IG51bGwgZm9yIHRoZSBjdXJyZW50CisgICAgICAgICAqICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBicm93c2luZyBjb250ZXh0LgogICAgICAgICAgKgogICAgICAgICAgKiBAcmV0dXJu
cyB7UHJvbWlzZX0gZnVsZmlsbGVkIGFmdGVyIHRoZSBjcmVkZW50aWFsIGlzIHJlbW92ZWQsIG9y
CiAgICAgICAgICAqICAgICAgICAgICAgICAgICAgICByZWplY3RlZCBpbiB0aGUgY2FzZXMgdGhl
IFdlYkRyaXZlciBjb21tYW5kCiAgICAgICAgICAqICAgICAgICAgICAgICAgICAgICBlcnJvcnMu
CiAgICAgICAgICAqLwotICAgICAgICByZW1vdmVfY3JlZGVudGlhbDogZnVuY3Rpb24oYXV0aGVu
dGljYXRvcl9pZCwgY3JlZGVudGlhbF9pZCkgewotICAgICAgICAgICAgcmV0dXJuIHdpbmRvdy50
ZXN0X2RyaXZlcl9pbnRlcm5hbC5yZW1vdmVfY3JlZGVudGlhbChhdXRoZW50aWNhdG9yX2lkLCBj
cmVkZW50aWFsX2lkKTsKKyAgICAgICAgcmVtb3ZlX2NyZWRlbnRpYWw6IGZ1bmN0aW9uKGF1dGhl
bnRpY2F0b3JfaWQsIGNyZWRlbnRpYWxfaWQsIGNvbnRleHQ9bnVsbCkgeworICAgICAgICAgICAg
cmV0dXJuIHdpbmRvdy50ZXN0X2RyaXZlcl9pbnRlcm5hbC5yZW1vdmVfY3JlZGVudGlhbChhdXRo
ZW50aWNhdG9yX2lkLCBjcmVkZW50aWFsX2lkLCBjb250ZXh0KTsKICAgICAgICAgfSwKIAogICAg
ICAgICAvKioKQEAgLTMzMywxMyArMzgwLDE2IEBACiAgICAgICAgICAqIGh0dHBzOi8vdzNjLmdp
dGh1Yi5pby93ZWJhdXRobi8jc2N0bi1hdXRvbWF0aW9uLXJlbW92ZS1hbGwtY3JlZGVudGlhbHMK
ICAgICAgICAgICoKICAgICAgICAgICogQHBhcmFtIHtTdHJpbmd9IGF1dGhlbnRpY2F0b3JfaWQg
LSB0aGUgSUQgb2YgdGhlIGF1dGhlbnRpY2F0b3IKKyAgICAgICAgICogQHBhcmFtIHtXaW5kb3dQ
cm94eX0gY29udGV4dCAtIEJyb3dzaW5nIGNvbnRleHQgaW4gd2hpY2gKKyAgICAgICAgICogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvIHJ1biB0aGUgY2FsbCwgb3IgbnVsbCBmb3Ig
dGhlIGN1cnJlbnQKKyAgICAgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJy
b3dzaW5nIGNvbnRleHQuCiAgICAgICAgICAqCiAgICAgICAgICAqIEByZXR1cm5zIHtQcm9taXNl
fSBmdWxmaWxsZWQgYWZ0ZXIgdGhlIGNyZWRlbnRpYWxzIGFyZSByZW1vdmVkLCBvcgogICAgICAg
ICAgKiAgICAgICAgICAgICAgICAgICAgcmVqZWN0ZWQgaW4gdGhlIGNhc2VzIHRoZSBXZWJEcml2
ZXIgY29tbWFuZAogICAgICAgICAgKiAgICAgICAgICAgICAgICAgICAgZXJyb3JzLgogICAgICAg
ICAgKi8KLSAgICAgICAgcmVtb3ZlX2FsbF9jcmVkZW50aWFsczogZnVuY3Rpb24oYXV0aGVudGlj
YXRvcl9pZCkgewotICAgICAgICAgICAgcmV0dXJuIHdpbmRvdy50ZXN0X2RyaXZlcl9pbnRlcm5h
bC5yZW1vdmVfYWxsX2NyZWRlbnRpYWxzKGF1dGhlbnRpY2F0b3JfaWQpOworICAgICAgICByZW1v
dmVfYWxsX2NyZWRlbnRpYWxzOiBmdW5jdGlvbihhdXRoZW50aWNhdG9yX2lkLCBjb250ZXh0PW51
bGwpIHsKKyAgICAgICAgICAgIHJldHVybiB3aW5kb3cudGVzdF9kcml2ZXJfaW50ZXJuYWwucmVt
b3ZlX2FsbF9jcmVkZW50aWFscyhhdXRoZW50aWNhdG9yX2lkLCBjb250ZXh0KTsKICAgICAgICAg
fSwKIAogICAgICAgICAvKioKQEAgLTM1MSw5ICs0MDEsNDEgQEAKICAgICAgICAgICoKICAgICAg
ICAgICogQHBhcmFtIHtTdHJpbmd9IGF1dGhlbnRpY2F0b3JfaWQgLSB0aGUgSUQgb2YgdGhlIGF1
dGhlbnRpY2F0b3IKICAgICAgICAgICogQHBhcmFtIHtib29sZWFufSB1diAtIHRoZSBVc2VyIFZl
cmlmaWVkIGZsYWcKKyAgICAgICAgICogQHBhcmFtIHtXaW5kb3dQcm94eX0gY29udGV4dCAtIEJy
b3dzaW5nIGNvbnRleHQgaW4gd2hpY2gKKyAgICAgICAgICogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHRvIHJ1biB0aGUgY2FsbCwgb3IgbnVsbCBmb3IgdGhlIGN1cnJlbnQKKyAgICAg
ICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyb3dzaW5nIGNvbnRleHQuCisg
ICAgICAgICAqLworICAgICAgICBzZXRfdXNlcl92ZXJpZmllZDogZnVuY3Rpb24oYXV0aGVudGlj
YXRvcl9pZCwgdXYsIGNvbnRleHQ9bnVsbCkgeworICAgICAgICAgICAgcmV0dXJuIHdpbmRvdy50
ZXN0X2RyaXZlcl9pbnRlcm5hbC5zZXRfdXNlcl92ZXJpZmllZChhdXRoZW50aWNhdG9yX2lkLCB1
diwgY29udGV4dCk7CisgICAgICAgIH0sCisKKyAgICAgICAgLyoqCisgICAgICAgICAqIFNldHMg
dGhlIHN0b3JhZ2UgYWNjZXNzIHJ1bGUgZm9yIGFuIG9yaWdpbiB3aGVuIGVtYmVkZGVkCisgICAg
ICAgICAqIGluIGEgdGhpcmQtcGFydHkgY29udGV4dC4KKyAgICAgICAgICoKKyAgICAgICAgICog
e0BsaW5rIGh0dHBzOi8vcHJpdmFjeWNnLmdpdGh1Yi5pby9zdG9yYWdlLWFjY2Vzcy8jc2V0LXN0
b3JhZ2UtYWNjZXNzLWNvbW1hbmR9CisgICAgICAgICAqCisgICAgICAgICAqIEBwYXJhbSB7U3Ry
aW5nfSBvcmlnaW4gLSBBIHRoaXJkLXBhcnR5IG9yaWdpbiB0byBibG9jayBvciBhbGxvdy4KKyAg
ICAgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgIE1heSBiZSAiKiIgdG8gaW5kaWNhdGUg
YWxsIG9yaWdpbnMuCisgICAgICAgICAqIEBwYXJhbSB7U3RyaW5nfSBlbWJlZGRpbmdfb3JpZ2lu
IC0gYW4gZW1iZWRkaW5nIChmaXJzdC1wYXJ0eSkgb3JpZ2luCisgICAgICAgICAqICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgb24gd2hpY2gge29yaWdpbn0ncyBhY2Nlc3Mgc2hv
dWxkCisgICAgICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmUgYmxv
Y2tlZCBvciBhbGxvd2VkLgorICAgICAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIE1heSBiZSAiKiIgdG8gaW5kaWNhdGUgYWxsIG9yaWdpbnMuCisgICAgICAgICAqIEBw
YXJhbSB7U3RyaW5nfSBzdGF0ZSAtIFRoZSBzdG9yYWdlIGFjY2VzcyBzZXR0aW5nLgorICAgICAg
ICAgKiAgICAgICAgICAgICAgICAgICAgICAgICBNdXN0IGJlIGVpdGhlciAiYWxsb3dlZCIgb3Ig
ImJsb2NrZWQiLgorICAgICAgICAgKiBAcGFyYW0ge1dpbmRvd1Byb3h5fSBjb250ZXh0IC0gQnJv
d3NpbmcgY29udGV4dCBpbiB3aGljaAorICAgICAgICAgKiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdG8gcnVuIHRoZSBjYWxsLCBvciBudWxsIGZvciB0aGUgY3VycmVudAorICAgICAg
ICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJvd3NpbmcgY29udGV4dC4KKyAg
ICAgICAgICoKKyAgICAgICAgICogQHJldHVybnMge1Byb21pc2V9IEZ1bGZpbGxlZCBhZnRlciB0
aGUgc3RvcmFnZSBhY2Nlc3MgcnVsZSBoYXMgYmVlbgorICAgICAgICAgKiAgICAgICAgICAgICAg
ICAgICAgc2V0LCBvciByZWplY3RlZCBpZiBzZXR0aW5nIHRoZSBydWxlIGZhaWxzLgogICAgICAg
ICAgKi8KLSAgICAgICAgc2V0X3VzZXJfdmVyaWZpZWQ6IGZ1bmN0aW9uKGF1dGhlbnRpY2F0b3Jf
aWQsIHV2KSB7Ci0gICAgICAgICAgICByZXR1cm4gd2luZG93LnRlc3RfZHJpdmVyX2ludGVybmFs
LnNldF91c2VyX3ZlcmlmaWVkKGF1dGhlbnRpY2F0b3JfaWQsIHV2KTsKKyAgICAgICAgc2V0X3N0
b3JhZ2VfYWNjZXNzOiBmdW5jdGlvbihvcmlnaW4sIGVtYmVkZGluZ19vcmlnaW4sIHN0YXRlLCBj
b250ZXh0PW51bGwpIHsKKyAgICAgICAgICAgIGlmIChzdGF0ZSAhPT0gImFsbG93ZWQiICYmIHN0
YXRlICE9PSAiYmxvY2tlZCIpIHsKKyAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoInN0
b3JhZ2UgYWNjZXNzIHN0YXR1cyBtdXN0IGJlICdhbGxvd2VkJyBvciAnYmxvY2tlZCciKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIGNvbnN0IGJsb2NrZWQgPSBzdGF0ZSA9PT0gImJsb2Nr
ZWQiOworICAgICAgICAgICAgcmV0dXJuIHdpbmRvdy50ZXN0X2RyaXZlcl9pbnRlcm5hbC5zZXRf
c3RvcmFnZV9hY2Nlc3Mob3JpZ2luLCBlbWJlZGRpbmdfb3JpZ2luLCBibG9ja2VkLCBjb250ZXh0
KTsKICAgICAgICAgfSwKICAgICB9OwogCkBAIC0zNjYsMTMgKzQ0OCw2IEBACiAgICAgICAgICAq
LwogICAgICAgICBpbl9hdXRvbWF0aW9uOiBmYWxzZSwKIAotICAgICAgICAvKioKLSAgICAgICAg
ICogV2FpdHMgZm9yIGEgdXNlci1pbml0aWF0ZWQgY2xpY2sKLSAgICAgICAgICoKLSAgICAgICAg
ICogQHBhcmFtIHtFbGVtZW50fSBlbGVtZW50IC0gZWxlbWVudCB0byBiZSBjbGlja2VkCi0gICAg
ICAgICAqIEBwYXJhbSB7e3g6IG51bWJlciwgeTogbnVtYmVyfSBjb29yZHMgLSB2aWV3cG9ydCBj
b29yZGluYXRlcyB0byBjbGljayBhdAotICAgICAgICAgKiBAcmV0dXJucyB7UHJvbWlzZX0gZnVs
ZmlsbGVkIGFmdGVyIGNsaWNrIG9jY3VycwotICAgICAgICAgKi8KICAgICAgICAgY2xpY2s6IGZ1
bmN0aW9uKGVsZW1lbnQsIGNvb3JkcykgewogICAgICAgICAgICAgaWYgKHRoaXMuaW5fYXV0b21h
dGlvbikgewogICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3Io
J05vdCBpbXBsZW1lbnRlZCcpKTsKQEAgLTM4MywxNCArNDU4LDYgQEAKICAgICAgICAgICAgIH0p
OwogICAgICAgICB9LAogCi0gICAgICAgIC8qKgotICAgICAgICAgKiBXYWl0cyBmb3IgYW4gZWxl
bWVudCB0byByZWNlaXZlIGEgc2VyaWVzIG9mIGtleSBwcmVzc2VzCi0gICAgICAgICAqCi0gICAg
ICAgICAqIEBwYXJhbSB7RWxlbWVudH0gZWxlbWVudCAtIGVsZW1lbnQgd2hpY2ggc2hvdWxkIHJl
Y2V2ZSBrZXkgcHJlc3NlcwotICAgICAgICAgKiBAcGFyYW0ge1N0cmluZ30ga2V5cyAtIGtleXMg
dG8gZXhwZWN0Ci0gICAgICAgICAqIEByZXR1cm5zIHtQcm9taXNlfSBmdWxmaWxsZWQgYWZ0ZXIg
a2V5cyBhcmUgcmVjZWl2ZWQgb3IgcmVqZWN0ZWQgaWYKLSAgICAgICAgICogICAgICAgICAgICAg
ICAgICAgIGFuIGluY29ycmVjdCBrZXkgc2VxdWVuY2UgaXMgcmVjZWl2ZWQKLSAgICAgICAgICov
CiAgICAgICAgIHNlbmRfa2V5czogZnVuY3Rpb24oZWxlbWVudCwga2V5cykgewogICAgICAgICAg
ICAgaWYgKHRoaXMuaW5fYXV0b21hdGlvbikgewogICAgICAgICAgICAgICAgIHJldHVybiBQcm9t
aXNlLnJlamVjdChuZXcgRXJyb3IoJ05vdCBpbXBsZW1lbnRlZCcpKTsKQEAgLTQyMywxNTAgKzQ5
MCw1MiBAQAogICAgICAgICAgICAgfSk7CiAgICAgICAgIH0sCiAKLSAgICAgICAgLyoqCi0gICAg
ICAgICAqIEZyZWV6ZSB0aGUgY3VycmVudCBwYWdlCi0gICAgICAgICAqCi0gICAgICAgICAqIEBy
ZXR1cm5zIHtQcm9taXNlfSBmdWxmaWxsZWQgYWZ0ZXIgZnJlZXplIHJlcXVlc3QgaXMgc2VudCwg
b3RoZXJ3aXNlCi0gICAgICAgICAqIGl0IGdldHMgcmVqZWN0ZWQKLSAgICAgICAgICovCi0gICAg
ICAgIGZyZWV6ZTogZnVuY3Rpb24oKSB7CisgICAgICAgIGZyZWV6ZTogZnVuY3Rpb24oY29udGV4
dD1udWxsKSB7CiAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKCJ1
bmltcGxlbWVudGVkIikpOwogICAgICAgICB9LAogCi0gICAgICAgIC8qKgotICAgICAgICAgKiBT
ZW5kIGEgc2VxdWVuY2Ugb2YgcG9pbnRlciBhY3Rpb25zCi0gICAgICAgICAqCi0gICAgICAgICAq
IEByZXR1cm5zIHtQcm9taXNlfSBmdWZpbGxlZCBhZnRlciBhY3Rpb25zIGFyZSBzZW50LCByZWpl
Y3RlZCBpZiBhbnkgYWN0aW9ucwotICAgICAgICAgKiAgICAgICAgICAgICAgICAgICAgZmFpbAot
ICAgICAgICAgKi8KLSAgICAgICAgYWN0aW9uX3NlcXVlbmNlOiBmdW5jdGlvbihhY3Rpb25zKSB7
CisgICAgICAgIGFjdGlvbl9zZXF1ZW5jZTogZnVuY3Rpb24oYWN0aW9ucywgY29udGV4dD1udWxs
KSB7CiAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKCJ1bmltcGxl
bWVudGVkIikpOwogICAgICAgICB9LAogCi0gICAgICAgIC8qKgotICAgICAgICAgKiBHZW5lcmF0
ZXMgYSB0ZXN0IHJlcG9ydCBvbiB0aGUgY3VycmVudCBwYWdlCi0gICAgICAgICAqCi0gICAgICAg
ICAqIEBwYXJhbSB7U3RyaW5nfSBtZXNzYWdlIC0gdGhlIG1lc3NhZ2UgdG8gYmUgY29udGFpbmVk
IGluIHRoZSByZXBvcnQKLSAgICAgICAgICogQHJldHVybnMge1Byb21pc2V9IGZ1bGZpbGxlZCBh
ZnRlciB0aGUgcmVwb3J0IGlzIGdlbmVyYXRlZCwgb3IKLSAgICAgICAgICogICAgICAgICAgICAg
ICAgICAgIHJlamVjdGVkIGlmIHRoZSByZXBvcnQgZ2VuZXJhdGlvbiBmYWlscwotICAgICAgICAg
Ki8KLSAgICAgICAgZ2VuZXJhdGVfdGVzdF9yZXBvcnQ6IGZ1bmN0aW9uKG1lc3NhZ2UpIHsKKyAg
ICAgICAgZ2VuZXJhdGVfdGVzdF9yZXBvcnQ6IGZ1bmN0aW9uKG1lc3NhZ2UsIGNvbnRleHQ9bnVs
bCkgewogICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcigidW5pbXBs
ZW1lbnRlZCIpKTsKICAgICAgICAgfSwKIAogCi0gICAgICAgIC8qKgotICAgICAgICAgKiBTZXRz
IHRoZSBzdGF0ZSBvZiBhIHBlcm1pc3Npb24KLSAgICAgICAgICoKLSAgICAgICAgICogVGhpcyBm
dW5jdGlvbiBzaW11bGF0ZXMgYSB1c2VyIHNldHRpbmcgYSBwZXJtaXNzaW9uIGludG8gYSBwYXJ0
aWN1bGFyIHN0YXRlIGFzIGRlc2NyaWJlZAotICAgICAgICAgKiBpbiB7QGxpbmsgaHR0cHM6Ly93
M2MuZ2l0aHViLmlvL3Blcm1pc3Npb25zLyNzZXQtcGVybWlzc2lvbi1jb21tYW5kfQotICAgICAg
ICAgKgotICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gcGVybWlzc2lvbl9wYXJhbXMgLSBhIFtQ
ZXJtaXNzaW9uU2V0UGFyYW1ldGVyc117QGxpbnQKLSAgICAgICAgICogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaHR0cHM6Ly93M2MuZ2l0aHViLmlvL3Blcm1pc3Npb25zLyNk
aWN0ZGVmLXBlcm1pc3Npb25zZXRwYXJhbWV0ZXJzfQotICAgICAgICAgKiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBvYmplY3QKLSAgICAgICAgICogQHJldHVybnMge1Byb21p
c2V9IGZ1bGZpbGxlZCBhZnRlciB0aGUgcGVybWlzc2lvbiBpcyBzZXQsIG9yIHJlamVjdGVkIGlm
IHNldHRpbmcgdGhlCi0gICAgICAgICAqICAgICAgICAgICAgICAgICAgICBwZXJtaXNzaW9uIGZh
aWxzCi0gICAgICAgICAqLwotICAgICAgICBzZXRfcGVybWlzc2lvbjogZnVuY3Rpb24ocGVybWlz
c2lvbl9wYXJhbXMpIHsKKyAgICAgICAgc2V0X3Blcm1pc3Npb246IGZ1bmN0aW9uKHBlcm1pc3Np
b25fcGFyYW1zLCBjb250ZXh0PW51bGwpIHsKICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJl
amVjdChuZXcgRXJyb3IoInVuaW1wbGVtZW50ZWQiKSk7CiAgICAgICAgIH0sCiAKLSAgICAgICAg
LyoqCi0gICAgICAgICAqIENyZWF0ZXMgYSB2aXJ0dWFsIGF1dGhlbnRpY2F0b3IKLSAgICAgICAg
ICoKLSAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IGNvbmZpZyAtIHRoZSBhdXRoZW50aWNhdG9y
IGNvbmZpZ3VyYXRpb24KLSAgICAgICAgICogQHJldHVybnMge1Byb21pc2V9IGZ1bGZpbGxlZCBh
ZnRlciB0aGUgYXV0aGVudGljYXRvciBpcyBhZGRlZCwgb3IKLSAgICAgICAgICogICAgICAgICAg
ICAgICAgICAgIHJlamVjdGVkIGluIHRoZSBjYXNlcyB0aGUgV2ViRHJpdmVyIGNvbW1hbmQKLSAg
ICAgICAgICogICAgICAgICAgICAgICAgICAgIGVycm9ycy4KLSAgICAgICAgICovCi0gICAgICAg
IGFkZF92aXJ0dWFsX2F1dGhlbnRpY2F0b3I6IGZ1bmN0aW9uKGNvbmZpZykgeworICAgICAgICBh
ZGRfdmlydHVhbF9hdXRoZW50aWNhdG9yOiBmdW5jdGlvbihjb25maWcsIGNvbnRleHQ9bnVsbCkg
ewogICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcigidW5pbXBsZW1l
bnRlZCIpKTsKICAgICAgICAgfSwKIAotICAgICAgICAvKioKLSAgICAgICAgICogUmVtb3ZlcyBh
IHZpcnR1YWwgYXV0aGVudGljYXRvcgotICAgICAgICAgKgotICAgICAgICAgKiBAcGFyYW0ge1N0
cmluZ30gYXV0aGVudGljYXRvcl9pZCAtIHRoZSBJRCBvZiB0aGUgYXV0aGVudGljYXRvciB0byBi
ZQotICAgICAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbW92ZWQu
Ci0gICAgICAgICAqCi0gICAgICAgICAqIEByZXR1cm5zIHtQcm9taXNlfSBmdWxmaWxsZWQgYWZ0
ZXIgdGhlIGF1dGhlbnRpY2F0b3IgaXMgcmVtb3ZlZCwgb3IKLSAgICAgICAgICogICAgICAgICAg
ICAgICAgICAgIHJlamVjdGVkIGluIHRoZSBjYXNlcyB0aGUgV2ViRHJpdmVyIGNvbW1hbmQKLSAg
ICAgICAgICogICAgICAgICAgICAgICAgICAgIGVycm9ycwotICAgICAgICAgKi8KLSAgICAgICAg
cmVtb3ZlX3ZpcnR1YWxfYXV0aGVudGljYXRvcjogZnVuY3Rpb24oYXV0aGVudGljYXRvcl9pZCkg
eworICAgICAgICByZW1vdmVfdmlydHVhbF9hdXRoZW50aWNhdG9yOiBmdW5jdGlvbihhdXRoZW50
aWNhdG9yX2lkLCBjb250ZXh0PW51bGwpIHsKICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJl
amVjdChuZXcgRXJyb3IoInVuaW1wbGVtZW50ZWQiKSk7CiAgICAgICAgIH0sCiAKLSAgICAgICAg
LyoqCi0gICAgICAgICAqIEFkZHMgYSBjcmVkZW50aWFsIHRvIGEgdmlydHVhbCBhdXRoZW50aWNh
dG9yCi0gICAgICAgICAqCi0gICAgICAgICAqIEBwYXJhbSB7U3RyaW5nfSBhdXRoZW50aWNhdG9y
X2lkIC0gdGhlIElEIG9mIHRoZSBhdXRoZW50aWNhdG9yCi0gICAgICAgICAqIEBwYXJhbSB7T2Jq
ZWN0fSBjcmVkZW50aWFsIC0gQSBbQ3JlZGVudGlhbCBQYXJhbWV0ZXJzXXtAbGluawotICAgICAg
ICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby93
ZWJhdXRobi8jY3JlZGVudGlhbC1wYXJhbWV0ZXJzfQotICAgICAgICAgKiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG9iamVjdAotICAgICAgICAgKgotICAgICAgICAgKiBAcmV0dXJucyB7
UHJvbWlzZX0gZnVsZmlsbGVkIGFmdGVyIHRoZSBjcmVkZW50aWFsIGlzIGFkZGVkLCBvcgotICAg
ICAgICAgKiAgICAgICAgICAgICAgICAgICAgcmVqZWN0ZWQgaW4gdGhlIGNhc2VzIHRoZSBXZWJE
cml2ZXIgY29tbWFuZAotICAgICAgICAgKiAgICAgICAgICAgICAgICAgICAgZXJyb3JzCi0gICAg
ICAgICAqCi0gICAgICAgICAqLwotICAgICAgICBhZGRfY3JlZGVudGlhbDogZnVuY3Rpb24oYXV0
aGVudGljYXRvcl9pZCwgY3JlZGVudGlhbCkgeworICAgICAgICBhZGRfY3JlZGVudGlhbDogZnVu
Y3Rpb24oYXV0aGVudGljYXRvcl9pZCwgY3JlZGVudGlhbCwgY29udGV4dD1udWxsKSB7CiAgICAg
ICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKCJ1bmltcGxlbWVudGVkIikp
OwogICAgICAgICB9LAogCi0gICAgICAgIC8qKgotICAgICAgICAgKiBHZXRzIGFsbCB0aGUgY3Jl
ZGVudGlhbHMgc3RvcmVkIGluIGFuIGF1dGhlbnRpY2F0b3IKLSAgICAgICAgICoKLSAgICAgICAg
ICogQHBhcmFtIHtTdHJpbmd9IGF1dGhlbnRpY2F0b3JfaWQgLSB0aGUgSUQgb2YgdGhlIGF1dGhl
bnRpY2F0b3IKLSAgICAgICAgICoKLSAgICAgICAgICogQHJldHVybnMge1Byb21pc2V9IGZ1bGZp
bGxlZCBhZnRlciB0aGUgY3JlZGVudGlhbHMgYXJlIHJldHVybmVkLCBvcgotICAgICAgICAgKiAg
ICAgICAgICAgICAgICAgICAgcmVqZWN0ZWQgaW4gdGhlIGNhc2VzIHRoZSBXZWJEcml2ZXIgY29t
bWFuZAotICAgICAgICAgKiAgICAgICAgICAgICAgICAgICAgZXJyb3JzLiBSZXR1cm5zIGFuIGFy
cmF5IG9mIFtDcmVkZW50aWFsCi0gICAgICAgICAqICAgICAgICAgICAgICAgICAgICBQYXJhbWV0
ZXJzXXtAbGluawotICAgICAgICAgKiAgICAgICAgICAgICAgICAgICAgaHR0cHM6Ly93M2MuZ2l0
aHViLmlvL3dlYmF1dGhuLyNjcmVkZW50aWFsLXBhcmFtZXRlcnN9Ci0gICAgICAgICAqCi0gICAg
ICAgICAqLwotICAgICAgICBnZXRfY3JlZGVudGlhbHM6IGZ1bmN0aW9uKGF1dGhlbnRpY2F0b3Jf
aWQpIHsKKyAgICAgICAgZ2V0X2NyZWRlbnRpYWxzOiBmdW5jdGlvbihhdXRoZW50aWNhdG9yX2lk
LCBjb250ZXh0PW51bGwpIHsKICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcg
RXJyb3IoInVuaW1wbGVtZW50ZWQiKSk7CiAgICAgICAgIH0sCiAKLSAgICAgICAgLyoqCi0gICAg
ICAgICAqIFJlbW92ZSBhIGNyZWRlbnRpYWwgc3RvcmVkIGluIGFuIGF1dGhlbnRpY2F0b3IKLSAg
ICAgICAgICoKLSAgICAgICAgICogQHBhcmFtIHtTdHJpbmd9IGF1dGhlbnRpY2F0b3JfaWQgLSB0
aGUgSUQgb2YgdGhlIGF1dGhlbnRpY2F0b3IKLSAgICAgICAgICogQHBhcmFtIHtTdHJpbmd9IGNy
ZWRlbnRpYWxfaWQgLSB0aGUgSUQgb2YgdGhlIGNyZWRlbnRpYWwKLSAgICAgICAgICoKLSAgICAg
ICAgICogQHJldHVybnMge1Byb21pc2V9IGZ1bGZpbGxlZCBhZnRlciB0aGUgY3JlZGVudGlhbCBp
cyByZW1vdmVkLCBvcgotICAgICAgICAgKiAgICAgICAgICAgICAgICAgICAgcmVqZWN0ZWQgaW4g
dGhlIGNhc2VzIHRoZSBXZWJEcml2ZXIgY29tbWFuZAotICAgICAgICAgKiAgICAgICAgICAgICAg
ICAgICAgZXJyb3JzLgotICAgICAgICAgKgotICAgICAgICAgKi8KLSAgICAgICAgcmVtb3ZlX2Ny
ZWRlbnRpYWw6IGZ1bmN0aW9uKGF1dGhlbnRpY2F0b3JfaWQsIGNyZWRlbnRpYWxfaWQpIHsKKyAg
ICAgICAgcmVtb3ZlX2NyZWRlbnRpYWw6IGZ1bmN0aW9uKGF1dGhlbnRpY2F0b3JfaWQsIGNyZWRl
bnRpYWxfaWQsIGNvbnRleHQ9bnVsbCkgewogICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVq
ZWN0KG5ldyBFcnJvcigidW5pbXBsZW1lbnRlZCIpKTsKICAgICAgICAgfSwKIAotICAgICAgICAv
KioKLSAgICAgICAgICogUmVtb3ZlcyBhbGwgdGhlIGNyZWRlbnRpYWxzIHN0b3JlZCBpbiBhIHZp
cnR1YWwgYXV0aGVudGljYXRvcgotICAgICAgICAgKgotICAgICAgICAgKiBAcGFyYW0ge1N0cmlu
Z30gYXV0aGVudGljYXRvcl9pZCAtIHRoZSBJRCBvZiB0aGUgYXV0aGVudGljYXRvcgotICAgICAg
ICAgKgotICAgICAgICAgKiBAcmV0dXJucyB7UHJvbWlzZX0gZnVsZmlsbGVkIGFmdGVyIHRoZSBj
cmVkZW50aWFscyBhcmUgcmVtb3ZlZCwgb3IKLSAgICAgICAgICogICAgICAgICAgICAgICAgICAg
IHJlamVjdGVkIGluIHRoZSBjYXNlcyB0aGUgV2ViRHJpdmVyIGNvbW1hbmQKLSAgICAgICAgICog
ICAgICAgICAgICAgICAgICAgIGVycm9ycy4KLSAgICAgICAgICoKLSAgICAgICAgICovCi0gICAg
ICAgIHJlbW92ZV9hbGxfY3JlZGVudGlhbHM6IGZ1bmN0aW9uKGF1dGhlbnRpY2F0b3JfaWQpIHsK
KyAgICAgICAgcmVtb3ZlX2FsbF9jcmVkZW50aWFsczogZnVuY3Rpb24oYXV0aGVudGljYXRvcl9p
ZCwgY29udGV4dD1udWxsKSB7CiAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3
IEVycm9yKCJ1bmltcGxlbWVudGVkIikpOwogICAgICAgICB9LAogCi0gICAgICAgIC8qKgotICAg
ICAgICAgKiBTZXRzIHRoZSBVc2VyIFZlcmlmaWVkIGZsYWcgb24gYW4gYXV0aGVudGljYXRvcgot
ICAgICAgICAgKgotICAgICAgICAgKiBAcGFyYW0ge1N0cmluZ30gYXV0aGVudGljYXRvcl9pZCAt
IHRoZSBJRCBvZiB0aGUgYXV0aGVudGljYXRvcgotICAgICAgICAgKiBAcGFyYW0ge2Jvb2xlYW59
IHV2IC0gdGhlIFVzZXIgVmVyaWZpZWQgZmxhZwotICAgICAgICAgKgotICAgICAgICAgKi8KLSAg
ICAgICAgc2V0X3VzZXJfdmVyaWZpZWQ6IGZ1bmN0aW9uKGF1dGhlbnRpY2F0b3JfaWQsIHV2KSB7
CisgICAgICAgIHNldF91c2VyX3ZlcmlmaWVkOiBmdW5jdGlvbihhdXRoZW50aWNhdG9yX2lkLCB1
diwgY29udGV4dD1udWxsKSB7CisgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3
IEVycm9yKCJ1bmltcGxlbWVudGVkIikpOworICAgICAgICB9LAorCisgICAgICAgIHNldF9zdG9y
YWdlX2FjY2VzczogZnVuY3Rpb24ob3JpZ2luLCBlbWJlZGRpbmdfb3JpZ2luLCBibG9ja2VkLCBj
b250ZXh0PW51bGwpIHsKICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJy
b3IoInVuaW1wbGVtZW50ZWQiKSk7CiAgICAgICAgIH0sCiAgICAgfTsKZGlmZiAtLWdpdCBhL0xh
eW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3Ro
YXJuZXNzLmpzIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9y
ZXNvdXJjZXMvdGVzdGhhcm5lc3MuanMKaW5kZXggMjc0ZGM5ZDdkODkwZGJhN2Q5ODk4NWZlYWM5
NTMzZGQ2MjQ1MDQzMy4uZDUwZTA5NDExN2RmNTZkYjQ5ZDc1ZjE2MjBjNGFiYTUxMzE5ZmMzYyAx
MDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9y
ZXNvdXJjZXMvdGVzdGhhcm5lc3MuanMKKysrIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dl
Yi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdGhhcm5lc3MuanMKQEAgLTUyMCw2ICs1MjAs
NDMgQEAgcG9saWNpZXMgYW5kIGNvbnRyaWJ1dGlvbiBmb3JtcyBbM10uCiAgICAgICAgICAgICBP
YmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwod29ya2VyKSA9PSAnW29iamVjdCBTZXJ2aWNl
V29ya2VyXSc7CiAgICAgfQogCisgICAgdmFyIHNlZW5fZnVuY19uYW1lID0gT2JqZWN0LmNyZWF0
ZShudWxsKTsKKworICAgIGZ1bmN0aW9uIGdldF90ZXN0X25hbWUoZnVuYywgbmFtZSkKKyAgICB7
CisgICAgICAgIGlmIChuYW1lKSB7CisgICAgICAgICAgICByZXR1cm4gbmFtZTsKKyAgICAgICAg
fQorCisgICAgICAgIGlmIChmdW5jKSB7CisgICAgICAgICAgICB2YXIgZnVuY19jb2RlID0gZnVu
Yy50b1N0cmluZygpOworCisgICAgICAgICAgICAvLyBUcnkgYW5kIG1hdGNoIHdpdGggYnJhY2tl
dHMsIGJ1dCBmYWxsYmFjayB0byBtYXRjaGluZyB3aXRob3V0CisgICAgICAgICAgICB2YXIgYXJy
b3cgPSBmdW5jX2NvZGUubWF0Y2goL15cKFwpXHMqPT5ccyooPzp7KC4qKX1ccyp8KC4qKSkkLyk7
CisKKyAgICAgICAgICAgIC8vIENoZWNrIGZvciBKUyBsaW5lIHNlcGFyYXRvcnMKKyAgICAgICAg
ICAgIGlmIChhcnJvdyAhPT0gbnVsbCAmJiAhL1tcdTAwMEFcdTAwMERcdTIwMjhcdTIwMjldLy50
ZXN0KGZ1bmNfY29kZSkpIHsKKyAgICAgICAgICAgICAgICB2YXIgdHJpbW1lZCA9IChhcnJvd1sx
XSAhPT0gdW5kZWZpbmVkID8gYXJyb3dbMV0gOiBhcnJvd1syXSkudHJpbSgpOworICAgICAgICAg
ICAgICAgIC8vIGRyb3AgdHJhaWxpbmcgOyBpZiB0aGVyZSdzIG5vIGVhcmxpZXIgb25lcworICAg
ICAgICAgICAgICAgIHRyaW1tZWQgPSB0cmltbWVkLnJlcGxhY2UoL14oW147XSopKDtccyopKyQv
LCAiJDEiKTsKKworICAgICAgICAgICAgICAgIGlmICh0cmltbWVkKSB7CisgICAgICAgICAgICAg
ICAgICAgIGxldCBuYW1lID0gdHJpbW1lZDsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHNlZW5f
ZnVuY19uYW1lW3RyaW1tZWRdKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGlzIHN1
YnRlc3QgbmFtZSBhbHJlYWR5IGV4aXN0cywgc28gYWRkIGEgc3VmZml4LgorICAgICAgICAgICAg
ICAgICAgICAgICAgbmFtZSArPSAiICIgKyBzZWVuX2Z1bmNfbmFtZVt0cmltbWVkXTsKKyAgICAg
ICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlZW5fZnVu
Y19uYW1lW3RyaW1tZWRdID0gMDsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgICAgICBzZWVuX2Z1bmNfbmFtZVt0cmltbWVkXSArPSAxOworICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gbmFtZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKworICAgICAgICByZXR1cm4gdGVzdF9lbnZpcm9ubWVudC5uZXh0X2RlZmF1bHRfdGVzdF9u
YW1lKCk7CisgICAgfQorCiAgICAgLyoKICAgICAgKiBBUEkgZnVuY3Rpb25zCiAgICAgICovCkBA
IC01MzAsMTcgKzU2NywxOCBAQCBwb2xpY2llcyBhbmQgY29udHJpYnV0aW9uIGZvcm1zIFszXS4K
ICAgICAgICAgICAgIHRlc3RzLnN0YXR1cy5tZXNzYWdlID0gJ2B0ZXN0YCBpbnZva2VkIGFmdGVy
IGBwcm9taXNlX3NldHVwYCc7CiAgICAgICAgICAgICB0ZXN0cy5jb21wbGV0ZSgpOwogICAgICAg
ICB9Ci0gICAgICAgIHZhciB0ZXN0X25hbWUgPSBuYW1lID8gbmFtZSA6IHRlc3RfZW52aXJvbm1l
bnQubmV4dF9kZWZhdWx0X3Rlc3RfbmFtZSgpOworICAgICAgICB2YXIgdGVzdF9uYW1lID0gZ2V0
X3Rlc3RfbmFtZShmdW5jLCBuYW1lKTsKICAgICAgICAgdmFyIHRlc3Rfb2JqID0gbmV3IFRlc3Qo
dGVzdF9uYW1lLCBwcm9wZXJ0aWVzKTsKICAgICAgICAgdmFyIHZhbHVlID0gdGVzdF9vYmouc3Rl
cChmdW5jLCB0ZXN0X29iaiwgdGVzdF9vYmopOwogCiAgICAgICAgIGlmICh2YWx1ZSAhPT0gdW5k
ZWZpbmVkKSB7Ci0gICAgICAgICAgICB2YXIgbXNnID0gIlRlc3QgbmFtZWQgXCIiICsgdGVzdF9u
YW1lICsKLSAgICAgICAgICAgICAgICAiXCIgaW5hcHByb3ByaWF0ZWx5IHJldHVybmVkIGEgdmFs
dWUiOworICAgICAgICAgICAgdmFyIG1zZyA9ICdUZXN0IG5hbWVkICInICsgdGVzdF9uYW1lICsK
KyAgICAgICAgICAgICAgICAnIiBwYXNzZWQgYSBmdW5jdGlvbiB0byBgdGVzdGAgdGhhdCByZXR1
cm5lZCBhIHZhbHVlLic7CiAKICAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgaWYg
KHZhbHVlICYmIHZhbHVlLmhhc093blByb3BlcnR5KCJ0aGVuIikpIHsKLSAgICAgICAgICAgICAg
ICAgICAgbXNnICs9ICIsIGNvbnNpZGVyIHVzaW5nIGBwcm9taXNlX3Rlc3RgIGluc3RlYWQiOwor
ICAgICAgICAgICAgICAgIGlmICh2YWx1ZSAmJiB0eXBlb2YgdmFsdWUudGhlbiA9PT0gJ2Z1bmN0
aW9uJykgeworICAgICAgICAgICAgICAgICAgICBtc2cgKz0gJyBDb25zaWRlciB1c2luZyBgcHJv
bWlzZV90ZXN0YCBpbnN0ZWFkIHdoZW4gJyArCisgICAgICAgICAgICAgICAgICAgICAgICAndXNp
bmcgUHJvbWlzZXMgb3IgYXN5bmMvYXdhaXQuJzsKICAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICB9IGNhdGNoIChlcnIpIHt9CiAKQEAgLTU2NSwxMCArNjAzLDMzIEBAIHBvbGljaWVzIGFu
ZCBjb250cmlidXRpb24gZm9ybXMgWzNdLgogICAgICAgICAgICAgbmFtZSA9IGZ1bmM7CiAgICAg
ICAgICAgICBmdW5jID0gbnVsbDsKICAgICAgICAgfQotICAgICAgICB2YXIgdGVzdF9uYW1lID0g
bmFtZSA/IG5hbWUgOiB0ZXN0X2Vudmlyb25tZW50Lm5leHRfZGVmYXVsdF90ZXN0X25hbWUoKTsK
KyAgICAgICAgdmFyIHRlc3RfbmFtZSA9IGdldF90ZXN0X25hbWUoZnVuYywgbmFtZSk7CiAgICAg
ICAgIHZhciB0ZXN0X29iaiA9IG5ldyBUZXN0KHRlc3RfbmFtZSwgcHJvcGVydGllcyk7CiAgICAg
ICAgIGlmIChmdW5jKSB7Ci0gICAgICAgICAgICB0ZXN0X29iai5zdGVwKGZ1bmMsIHRlc3Rfb2Jq
LCB0ZXN0X29iaik7CisgICAgICAgICAgICB2YXIgdmFsdWUgPSB0ZXN0X29iai5zdGVwKGZ1bmMs
IHRlc3Rfb2JqLCB0ZXN0X29iaik7CisKKyAgICAgICAgICAgIC8vIFRlc3QgYXV0aG9ycyBzb21l
dGltZXMgcmV0dXJuIHZhbHVlcyB0byBhc3luY190ZXN0LCBleHBlY3RpbmcgdXMKKyAgICAgICAg
ICAgIC8vIHRvIGhhbmRsZSB0aGUgdmFsdWUgc29tZWhvdy4gTWFrZSBkb2luZyBzbyBhIGhhcm5l
c3MgZXJyb3IgdG8gYmUKKyAgICAgICAgICAgIC8vIGNsZWFyIHRoaXMgaXMgaW52YWxpZCwgYW5k
IHBvaW50IGF1dGhvcnMgdG8gcHJvbWlzZV90ZXN0IGlmIGl0CisgICAgICAgICAgICAvLyBtYXkg
YmUgYXBwcm9wcmlhdGUuCisgICAgICAgICAgICAvLworICAgICAgICAgICAgLy8gTm90ZSB0aGF0
IHdlIG9ubHkgcGVyZm9ybSB0aGlzIGNoZWNrIG9uIHRoZSBpbml0aWFsIGZ1bmN0aW9uCisgICAg
ICAgICAgICAvLyBwYXNzZWQgdG8gYXN5bmNfdGVzdCwgbm90IG9uIGFueSBsYXRlciBzdGVwcyAt
IHdlIGhhdmVuJ3Qgc2VlbiBhCisgICAgICAgICAgICAvLyBjb25zaXN0ZW50IHByb2JsZW0gd2l0
aCB0aG9zZSAoYW5kIGl0J3MgaGFyZGVyIHRvIGNoZWNrKS4KKyAgICAgICAgICAgIGlmICh2YWx1
ZSAhPT0gdW5kZWZpbmVkKSB7CisgICAgICAgICAgICAgICAgdmFyIG1zZyA9ICdUZXN0IG5hbWVk
ICInICsgdGVzdF9uYW1lICsKKyAgICAgICAgICAgICAgICAgICAgJyIgcGFzc2VkIGEgZnVuY3Rp
b24gdG8gYGFzeW5jX3Rlc3RgIHRoYXQgcmV0dXJuZWQgYSB2YWx1ZS4nOworCisgICAgICAgICAg
ICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlICYmIHR5cGVvZiB2YWx1
ZS50aGVuID09PSAnZnVuY3Rpb24nKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBtc2cgKz0g
JyBDb25zaWRlciB1c2luZyBgcHJvbWlzZV90ZXN0YCBpbnN0ZWFkIHdoZW4gJyArCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgJ3VzaW5nIFByb21pc2VzIG9yIGFzeW5jL2F3YWl0Lic7Cisg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9IGNhdGNoIChlcnIpIHt9CisK
KyAgICAgICAgICAgICAgICB0ZXN0cy5zZXRfc3RhdHVzKHRlc3RzLnN0YXR1cy5FUlJPUiwgbXNn
KTsKKyAgICAgICAgICAgICAgICB0ZXN0cy5jb21wbGV0ZSgpOworICAgICAgICAgICAgfQogICAg
ICAgICB9CiAgICAgICAgIHJldHVybiB0ZXN0X29iajsKICAgICB9CkBAIC01NzksNyArNjQwLDcg
QEAgcG9saWNpZXMgYW5kIGNvbnRyaWJ1dGlvbiBmb3JtcyBbM10uCiAgICAgICAgICAgICBuYW1l
ID0gZnVuYzsKICAgICAgICAgICAgIGZ1bmMgPSBudWxsOwogICAgICAgICB9Ci0gICAgICAgIHZh
ciB0ZXN0X25hbWUgPSBuYW1lID8gbmFtZSA6IHRlc3RfZW52aXJvbm1lbnQubmV4dF9kZWZhdWx0
X3Rlc3RfbmFtZSgpOworICAgICAgICB2YXIgdGVzdF9uYW1lID0gZ2V0X3Rlc3RfbmFtZShmdW5j
LCBuYW1lKTsKICAgICAgICAgdmFyIHRlc3QgPSBuZXcgVGVzdCh0ZXN0X25hbWUsIHByb3BlcnRp
ZXMpOwogICAgICAgICB0ZXN0Ll9pc19wcm9taXNlX3Rlc3QgPSB0cnVlOwogCkBAIC0xMzIzLDEw
ICsxMzg0LDE2IEBAIHBvbGljaWVzIGFuZCBjb250cmlidXRpb24gZm9ybXMgWzNdLgogICAgICAg
ICAgICAgICAgImV4cGVjdGVkIGEgbnVtYmVyIGJ1dCBnb3QgYSAke3R5cGVfYWN0dWFsfSIsCiAg
ICAgICAgICAgICAgICB7dHlwZV9hY3R1YWw6dHlwZW9mIGFjdHVhbH0pOwogCi0gICAgICAgIGFz
c2VydChNYXRoLmFicyhhY3R1YWwgLSBleHBlY3RlZCkgPD0gZXBzaWxvbiwKLSAgICAgICAgICAg
ICAgICJhc3NlcnRfYXBwcm94X2VxdWFscyIsIGRlc2NyaXB0aW9uLAotICAgICAgICAgICAgICAg
ImV4cGVjdGVkICR7ZXhwZWN0ZWR9ICsvLSAke2Vwc2lsb259IGJ1dCBnb3QgJHthY3R1YWx9IiwK
LSAgICAgICAgICAgICAgIHtleHBlY3RlZDpleHBlY3RlZCwgYWN0dWFsOmFjdHVhbCwgZXBzaWxv
bjplcHNpbG9ufSk7CisgICAgICAgIC8vIFRoZSBlcHNpbG9uIG1hdGggYmVsb3cgZG9lcyBub3Qg
cGxhY2UgbmljZSB3aXRoIE5hTiBhbmQgSW5maW5pdHkKKyAgICAgICAgLy8gQnV0IGluIHRoaXMg
Y2FzZSBJbmZpbml0eSA9IEluZmluaXR5IGFuZCBOYU4gPSBOYU4KKyAgICAgICAgaWYgKGlzRmlu
aXRlKGFjdHVhbCkgfHwgaXNGaW5pdGUoZXhwZWN0ZWQpKSB7CisgICAgICAgICAgICBhc3NlcnQo
TWF0aC5hYnMoYWN0dWFsIC0gZXhwZWN0ZWQpIDw9IGVwc2lsb24sCisgICAgICAgICAgICAgICAg
ICAgImFzc2VydF9hcHByb3hfZXF1YWxzIiwgZGVzY3JpcHRpb24sCisgICAgICAgICAgICAgICAg
ICAgImV4cGVjdGVkICR7ZXhwZWN0ZWR9ICsvLSAke2Vwc2lsb259IGJ1dCBnb3QgJHthY3R1YWx9
IiwKKyAgICAgICAgICAgICAgICAgICB7ZXhwZWN0ZWQ6ZXhwZWN0ZWQsIGFjdHVhbDphY3R1YWws
IGVwc2lsb246ZXBzaWxvbn0pOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgYXNzZXJ0
X2VxdWFscyhhY3R1YWwsIGV4cGVjdGVkKTsKKyAgICAgICAgfQogICAgIH0KICAgICBleHBvc2Uo
YXNzZXJ0X2FwcHJveF9lcXVhbHMsICJhc3NlcnRfYXBwcm94X2VxdWFscyIpOwogCkBAIC0yMDY5
LDcgKzIxMzYsNyBAQCBwb2xpY2llcyBhbmQgY29udHJpYnV0aW9uIGZvcm1zIFszXS4KICAgICAg
ICAgICAgICAgICBmdW5jKCk7CiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAg
IGlmKHJlbWFpbmluZyA9PT0gMCkgewotICAgICAgICAgICAgICAgICAgICBhc3NlcnQoZmFsc2Us
ICJ3YWl0X2ZvciIsIGRlc2NyaXB0aW9uLAorICAgICAgICAgICAgICAgICAgICBhc3NlcnQoZmFs
c2UsICJzdGVwX3dhaXRfZnVuYyIsIGRlc2NyaXB0aW9uLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIlRpbWVkIG91dCB3YWl0aW5nIG9uIGNvbmRpdGlvbiIpOwogICAgICAgICAgICAgICAg
IH0KICAgICAgICAgICAgICAgICByZW1haW5pbmctLTsKQEAgLTIwODQsNyArMjE1MSw3IEBAIHBv
bGljaWVzIGFuZCBjb250cmlidXRpb24gZm9ybXMgWzNdLgogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lb3V0PTMwMDAsIGludGVydmFsPTEwMCkg
ewogICAgICAgICAvKioKICAgICAgICAgICogUG9sbCBmb3IgYSBmdW5jdGlvbiB0byByZXR1cm4g
dHJ1ZSwgYW5kIGludm9rZSBhIGNhbGxiYWNrCi0gICAgICAgICAqIGZvbGxvd2VkIHRoaXMuZG9u
ZSgpIG9uY2UgaXQgZG9lcywgb3IgYXNzZXJ0IGlmIGEgdGltZW91dAorICAgICAgICAgKiBmb2xs
b3dlZCBieSB0aGlzLmRvbmUoKSBvbmNlIGl0IGRvZXMsIG9yIGFzc2VydCBpZiBhIHRpbWVvdXQK
ICAgICAgICAgICogaXMgcmVhY2hlZC4gVGhpcyBpcyBwcmVmZXJyZWQgb3ZlciBhIHNpbXBsZSBz
dGVwX3RpbWVvdXQKICAgICAgICAgICogd2hlbmV2ZXIgcG9zc2libGUgc2luY2UgaXQgYWxsb3dz
IHRoZSB0aW1lb3V0IHRvIGJlIGxvbmdlcgogICAgICAgICAgKiB0byByZWR1Y2UgaW50ZXJtaXR0
ZW50cyB3aXRob3V0IGNvbXByb21pc2luZyB0ZXN0IGV4ZWN1dGlvbiBzcGVlZApAQCAtMzc3Myw3
ICszODQwLDcgQEAgcG9saWNpZXMgYW5kIGNvbnRyaWJ1dGlvbiBmb3JtcyBbM10uCiAgICAgZnVu
Y3Rpb24gZ2V0X3RpdGxlKCkKICAgICB7CiAgICAgICAgIGlmICgnZG9jdW1lbnQnIGluIGdsb2Jh
bF9zY29wZSkgewotICAgICAgICAgICAgLy9Eb24ndCB1c2UgZG9jdW1lbnQudGl0bGUgdG8gd29y
ayBhcm91bmQgYW4gT3BlcmEgYnVnIGluIFhIVE1MIGRvY3VtZW50cworICAgICAgICAgICAgLy9E
b24ndCB1c2UgZG9jdW1lbnQudGl0bGUgdG8gd29yayBhcm91bmQgYW4gT3BlcmEvUHJlc3RvIGJ1
ZyBpbiBYSFRNTCBkb2N1bWVudHMKICAgICAgICAgICAgIHZhciB0aXRsZSA9IGRvY3VtZW50Lmdl
dEVsZW1lbnRzQnlUYWdOYW1lKCJ0aXRsZSIpWzBdOwogICAgICAgICAgICAgaWYgKHRpdGxlICYm
IHRpdGxlLmZpcnN0Q2hpbGQgJiYgdGl0bGUuZmlyc3RDaGlsZC5kYXRhKSB7CiAgICAgICAgICAg
ICAgICAgcmV0dXJuIHRpdGxlLmZpcnN0Q2hpbGQuZGF0YTsKQEAgLTM5OTgsNSArNDA2NSw1IEBA
IHNwYW4ub2ssIHNwYW4udGltZW91dCwgc3Bhbi5lcnJvciB7XAogfVwKICI7CiAKLX0pKHRoaXMp
OworfSkoc2VsZik7CiAvLyB2aW06IHNldCBleHBhbmR0YWIgc2hpZnR3aWR0aD00IHRhYnN0b3A9
NDoKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVz
dHMvcmVzb3VyY2VzL3czYy1pbXBvcnQubG9nIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dl
Yi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdzNjLWltcG9ydC5sb2cKaW5kZXggN2I4NmMzY2Uz
ZjM3YWI4YTE3NGVhMTYwNDQ2ZjU2NzVlZjA2MWUwNS4uMDZhZWQ0M2UyMDQ4YzczNmU4NGQxYzk2
MGEyYzZjMmZlMzliZGRmZCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dl
Yi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdzNjLWltcG9ydC5sb2cKKysrIGIvTGF5b3V0VGVz
dHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdzNjLWltcG9ydC5s
b2cKQEAgLTI0LDYgKzI0LDggQEAgTGlzdCBvZiBmaWxlczoKIC9MYXlvdXRUZXN0cy9pbXBvcnRl
ZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9zcmloYXJuZXNzLmpzCiAvTGF5b3V0
VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC1vbmx5
LWFwaS5qcwogL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVz
b3VyY2VzL3Rlc3Qtb25seS1hcGkuanMuaGVhZGVycworL0xheW91dFRlc3RzL2ltcG9ydGVkL3cz
Yy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3Qtb25seS1hcGkubS5qcworL0xheW91
dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3Qtb25s
eS1hcGkubS5qcy5oZWFkZXJzCiAvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9y
bS10ZXN0cy9yZXNvdXJjZXMvdGVzdGRyaXZlci1hY3Rpb25zLmpzCiAvTGF5b3V0VGVzdHMvaW1w
b3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdGRyaXZlci12ZW5kb3Iu
anMKIC9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNl
cy90ZXN0ZHJpdmVyLXZlbmRvci5qcy5oZWFkZXJzCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9p
bXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3dhc20vanNhcGkvaWRsaGFybmVzcy5hbnkt
ZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0
cy93YXNtL2pzYXBpL2lkbGhhcm5lc3MuYW55LWV4cGVjdGVkLnR4dAppbmRleCAxZTAxZGJkNWJm
OTM1NjIyMDcwMjlkYzAyNzZmNGQ4YjM4MTY5ZWIzLi5jZjMyM2IxMjA4NGI2MTVkMDJhZTU3NThj
ZTBkYzU5ZjE2YzAwN2Y1IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2Vi
LXBsYXRmb3JtLXRlc3RzL3dhc20vanNhcGkvaWRsaGFybmVzcy5hbnktZXhwZWN0ZWQudHh0Cisr
KyBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvd2FzbS9qc2Fw
aS9pZGxoYXJuZXNzLmFueS1leHBlY3RlZC50eHQKQEAgLTEsNSArMSwxMCBAQAogCiBQQVNTIHdh
c20tanMtYXBpIGludGVyZmFjZXMuCitQQVNTIFdlYkFzc2VtYmx5IG5hbWVzcGFjZTogZXh0ZW5k
ZWQgYXR0cmlidXRlcworUEFTUyBXZWJBc3NlbWJseSBuYW1lc3BhY2U6IHByb3BlcnR5IGRlc2Ny
aXB0b3IKK1BBU1MgV2ViQXNzZW1ibHkgbmFtZXNwYWNlOiBbW0V4dGVuc2libGVdXSBpcyB0cnVl
CitQQVNTIFdlYkFzc2VtYmx5IG5hbWVzcGFjZTogW1tQcm90b3R5cGVdXSBpcyBPYmplY3QucHJv
dG90eXBlCitQQVNTIFdlYkFzc2VtYmx5IG5hbWVzcGFjZTogdHlwZW9mIGlzICJvYmplY3QiCiBQ
QVNTIFdlYkFzc2VtYmx5IG5hbWVzcGFjZTogb3BlcmF0aW9uIHZhbGlkYXRlKEJ1ZmZlclNvdXJj
ZSkKIFBBU1MgV2ViQXNzZW1ibHkgbmFtZXNwYWNlOiBvcGVyYXRpb24gY29tcGlsZShCdWZmZXJT
b3VyY2UpCiBQQVNTIFdlYkFzc2VtYmx5IG5hbWVzcGFjZTogb3BlcmF0aW9uIGluc3RhbnRpYXRl
KEJ1ZmZlclNvdXJjZSwgb3B0aW9uYWwgb2JqZWN0KQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMv
aW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy93ZWItc2hhcmUvc2hhcmUtdXJsLWludmFs
aWQuaHR0cHMuaHRtbCBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVz
dHMvd2ViLXNoYXJlL3NoYXJlLXVybC1pbnZhbGlkLmh0dHBzLmh0bWwKaW5kZXggNWVhZThlODk0
MjZiNDg4OWQ2Zjk4N2EyNWRiMjRhODQwZDU4M2Y3MS4uY2I3NjQ1OGMyNGM1NjMyZjRhOTdkM2Y4
ZjVhNzQ0ZmM0NmQ3YjZhMCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dl
Yi1wbGF0Zm9ybS10ZXN0cy93ZWItc2hhcmUvc2hhcmUtdXJsLWludmFsaWQuaHR0cHMuaHRtbAor
KysgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3dlYi1zaGFy
ZS9zaGFyZS11cmwtaW52YWxpZC5odHRwcy5odG1sCkBAIC0xMSwxNSArMTEsNjYgQEAKICAgPGJv
ZHk+CiAgICAgPHNjcmlwdD4KICAgICAgIHByb21pc2VfdGVzdChhc3luYyB0ID0+IHsKLSAgICAg
ICAgY29uc3QgdXJsID0gImh0dHA6Ly9leGFtcGxlLmNvbTo2NTUzNiI7Ci0gICAgICAgIGF3YWl0
IHRlc3RfZHJpdmVyLmJsZXNzKAotICAgICAgICAgICJ3ZWIgc2hhcmUiLAotICAgICAgICAgICgp
ID0+IHsKLSAgICAgICAgICAgIHJldHVybiBwcm9taXNlX3JlamVjdHNfanModCwgVHlwZUVycm9y
LCBuYXZpZ2F0b3Iuc2hhcmUoeyB1cmwgfSkpOwotICAgICAgICAgIH0sCi0gICAgICAgICAgInNo
YXJlIHdpdGggYW4gaW52YWxpZCBVUkwiCi0gICAgICAgICk7CisgICAgICAgIGF3YWl0IHRlc3Rf
ZHJpdmVyLmJsZXNzKCk7CisgICAgICAgIGNvbnN0IHByb21pc2UgPSBuYXZpZ2F0b3Iuc2hhcmUo
eyB1cmw6ICJodHRwOi8vYS5jb206NjU1MzYiIH0pOworICAgICAgICByZXR1cm4gcHJvbWlzZV9y
ZWplY3RzX2pzKHQsIFR5cGVFcnJvciwgcHJvbWlzZSk7CiAgICAgICB9LCAic2hhcmUoKSByZWpl
Y3RzIHdoZW4gVVJMIGlzIGludmFsaWQiKTsKKworICAgICAgcHJvbWlzZV90ZXN0KGFzeW5jIHQg
PT4geworICAgICAgICBhd2FpdCB0ZXN0X2RyaXZlci5ibGVzcygpOworICAgICAgICBjb25zdCBw
cm9taXNlID0gbmF2aWdhdG9yLnNoYXJlKHsgdXJsOiAiZmlsZTovLy9ldGMvcGFzc3dkIiB9KTsK
KyAgICAgICAgcmV0dXJuIHByb21pc2VfcmVqZWN0c19qcyh0LCBUeXBlRXJyb3IsIHByb21pc2Up
OworICAgICAgfSwgInNoYXJlKCkgcmVqZWN0cyBmaWxlOi8vIFVSTHMiKTsKKworICAgICAgcHJv
bWlzZV90ZXN0KGFzeW5jIHQgPT4geworICAgICAgICBhd2FpdCB0ZXN0X2RyaXZlci5ibGVzcygp
OworICAgICAgICBjb25zdCBwcm9taXNlID0gbmF2aWdhdG9yLnNoYXJlKHsgdXJsOiAid3NzOi8v
YS5jb20vIiB9KTsKKyAgICAgICAgcmV0dXJuIHByb21pc2VfcmVqZWN0c19qcyh0LCBUeXBlRXJy
b3IsIHByb21pc2UpOworICAgICAgfSwgInNoYXJlKCkgcmVqZWN0cyB3c3M6IFVSTHMiKTsKKwor
ICAgICAgcHJvbWlzZV90ZXN0KGFzeW5jIHQgPT4geworICAgICAgICBhd2FpdCB0ZXN0X2RyaXZl
ci5ibGVzcygpOworICAgICAgICBjb25zdCBwcm9taXNlID0gbmF2aWdhdG9yLnNoYXJlKHsgdXJs
OiAiYWJvdXQ6Y29uZmlnIiB9KTsKKyAgICAgICAgcmV0dXJuIHByb21pc2VfcmVqZWN0c19qcyh0
LCBUeXBlRXJyb3IsIHByb21pc2UpOworICAgICAgfSwgInNoYXJlKCkgcmVqZWN0cyBhYm91dDog
VVJMcyIpOworCisgICAgICBwcm9taXNlX3Rlc3QoYXN5bmMgdCA9PiB7CisgICAgICAgIGF3YWl0
IHRlc3RfZHJpdmVyLmJsZXNzKCk7CisgICAgICAgIGNvbnN0IHByb21pc2UgPSBuYXZpZ2F0b3Iu
c2hhcmUoeyB1cmw6ICJjaHJvbWU6Ly9hYm91dCIgfSk7CisgICAgICAgIHJldHVybiBwcm9taXNl
X3JlamVjdHNfanModCwgVHlwZUVycm9yLCBwcm9taXNlKTsKKyAgICAgIH0sICJzaGFyZSgpIHJl
amVjdHMgY2hyb21lOiBVUkxzIik7CisKKyAgICAgIHByb21pc2VfdGVzdChhc3luYyB0ID0+IHsK
KyAgICAgICAgYXdhaXQgdGVzdF9kcml2ZXIuYmxlc3MoKTsKKyAgICAgICAgY29uc3QgcHJvbWlz
ZSA9IG5hdmlnYXRvci5zaGFyZSh7IHVybDogImphdmFzY3JpcHQ6d2luZG93LmFsZXJ0KCdlcnJv
cicpIiB9KTsKKyAgICAgICAgcmV0dXJuIHByb21pc2VfcmVqZWN0c19qcyh0LCBUeXBlRXJyb3Is
IHByb21pc2UpOworICAgICAgfSwgInNoYXJlKCkgcmVqZWN0cyBqYXZhc2NyaXB0OiBVUkxzIik7
CisKKyAgICAgIHByb21pc2VfdGVzdChhc3luYyB0ID0+IHsKKyAgICAgICAgYXdhaXQgdGVzdF9k
cml2ZXIuYmxlc3MoKTsKKyAgICAgICAgY29uc3QgZmlsZSA9IG5ldyBGaWxlKFtdLCAidGV4dC9w
bGFpbiIpOworICAgICAgICBjb25zdCBwcm9taXNlID0gbmF2aWdhdG9yLnNoYXJlKHsgdXJsOiBV
UkwuY3JlYXRlT2JqZWN0VVJMKGZpbGUpIH0pOworICAgICAgICByZXR1cm4gcHJvbWlzZV9yZWpl
Y3RzX2pzKHQsIFR5cGVFcnJvciwgcHJvbWlzZSk7CisgICAgICB9LCAic2hhcmUoKSByZWplY3Rz
IGJsb2I6IFVSTHMiKTsKKworICAgICAgcHJvbWlzZV90ZXN0KGFzeW5jIHQgPT4geworICAgICAg
ICBjb25zdCBlbmNvZGVyID0gbmV3IFRleHRFbmNvZGVyKCk7CisgICAgICAgIGNvbnN0IGVuY29k
ZWQgPSBlbmNvZGVyLmVuY29kZSgKKyAgICAgICAgICBgPG1ldGEgaHR0cC1lcXVpdj0icmVmcmVz
aCIgY29udGVudD0iMTt1cmw9aHR0cDovL2V4YW1wbGUuY29tLyI+YAorICAgICAgICApOworICAg
ICAgICBjb25zdCBmaWxlID0gbmV3IEZpbGUoZW5jb2RlZCwgInRleHQvaHRtbCIpOworICAgICAg
ICBjb25zdCB1cmwgPSBVUkwuY3JlYXRlT2JqZWN0VVJMKGZpbGUpOworICAgICAgICBjb25zdCBy
ZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpOworICAgICAgICByZWFkZXIucmVhZEFzRGF0YVVSTChm
aWxlKTsKKyAgICAgICAgY29uc3QgZGF0YVVSTCA9IGF3YWl0IG5ldyBQcm9taXNlKHJlc29sdmUg
PT4geworICAgICAgICAgIHJlYWRlci5hZGRFdmVudExpc3RlbmVyKCJsb2FkIiwgKCkgPT4gewor
ICAgICAgICAgICAgcmVzb2x2ZShyZWFkZXIucmVzdWx0KTsKKyAgICAgICAgICB9KTsKKyAgICAg
ICAgfSk7CisgICAgICAgIGF3YWl0IHRlc3RfZHJpdmVyLmJsZXNzKCk7CisgICAgICAgIGNvbnN0
IHByb21pc2UgPSBuYXZpZ2F0b3Iuc2hhcmUoeyB1cmw6IGRhdGFVUkwgfSk7CisgICAgICAgIHJl
dHVybiBwcm9taXNlX3JlamVjdHNfanModCwgVHlwZUVycm9yLCBwcm9taXNlKTsKKyAgICAgIH0s
ICJzaGFyZSgpIHJlamVjdHMgZGF0YTogVVJMcyIpOwogICAgIDwvc2NyaXB0PgogICA8L2JvZHk+
CiA8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRm
b3JtLXRlc3RzL3dlYnJ0Yy9SVENQZWVyQ29ubmVjdGlvbi1nZXRTdGF0cy5odHRwcy5odG1sIGIv
TGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy93ZWJydGMvUlRDUGVl
ckNvbm5lY3Rpb24tZ2V0U3RhdHMuaHR0cHMuaHRtbAppbmRleCBiZGY3NzcwMzUwZTk5ZmU2Yjcz
MGQzZTkxMjU1ZjQ5ZjMwOTYxZWQwLi5lZGUwYWIxZWZjMTA3OTlkMTI0NzM0MzdlNTNmMmVjNTU1
YWE2MjVmIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3Jt
LXRlc3RzL3dlYnJ0Yy9SVENQZWVyQ29ubmVjdGlvbi1nZXRTdGF0cy5odHRwcy5odG1sCisrKyBi
L0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvd2VicnRjL1JUQ1Bl
ZXJDb25uZWN0aW9uLWdldFN0YXRzLmh0dHBzLmh0bWwKQEAgLTgyLDcgKzgyLDcgQEAKICAgICBj
b25zdCBwYyA9IG5ldyBSVENQZWVyQ29ubmVjdGlvbigpOwogICAgIHQuYWRkX2NsZWFudXAoKCkg
PT4gcGMuY2xvc2UoKSk7CiAKLSAgICBjb25zdCBzdHJlYW0gPSBhd2FpdCBuYXZpZ2F0b3IubWVk
aWFEZXZpY2VzLmdldFVzZXJNZWRpYSh7YXVkaW86IHRydWV9KTsKKyAgICBjb25zdCBzdHJlYW0g
PSBhd2FpdCBnZXROb2lzZVN0cmVhbSh7YXVkaW86IHRydWV9KTsKICAgICB0LmFkZF9jbGVhbnVw
KCgpID0+IHN0cmVhbS5nZXRUcmFja3MoKS5mb3JFYWNoKHRyYWNrID0+IHRyYWNrLnN0b3AoKSkp
OwogICAgIGNvbnN0IFt0cmFja10gPSBzdHJlYW0uZ2V0VHJhY2tzKCk7CiAgICAgcGMuYWRkVHJh
bnNjZWl2ZXIodHJhY2spOwpAQCAtMjQ3LDcgKzI0Nyw3IEBACiAKICAgICBjb25zdCBkYXRhQ2hh
bm5lbCA9IHBjMS5jcmVhdGVEYXRhQ2hhbm5lbCgndGVzdC1jaGFubmVsJyk7CiAKLSAgICByZXR1
cm4gZ2V0Tm9pc2VTdHJlYW0oeworICAgIGdldE5vaXNlU3RyZWFtKHsKICAgICAgIGF1ZGlvOiB0
cnVlLAogICAgICAgdmlkZW86IHRydWUKICAgICB9KQpAQCAtMjkyLDkgKzI5Miw2IEBACiAgICAg
ICAgICAgJ0V4cGVjdCB2aWRlbyB0cmFjayBzdGF0cyB0byBiZSBmb3VuZCcpOwogCiAgICAgICAg
IGFzc2VydF9lcXVhbHModmlkZW9UcmFja1N0YXRzLmtpbmQsICd2aWRlbycpOwotCi0gICAgICAg
IGFzc2VydF90cnVlKG1lZGlhU3RyZWFtU3RhdHMudHJhY2tJZHMuaW5jbHVkZShhdWRpb1RyYWNr
U3RhdHMuaWQpKTsKLSAgICAgICAgYXNzZXJ0X3RydWUobWVkaWFTdHJlYW1TdGF0cy50cmFja0lk
cy5pbmNsdWRlKHZpZGVvVHJhY2tTdGF0cy5pZCkpOwogICAgICAgfQogCiAgICAgICBjb25zdCBv
bkNvbm5lY3RlZCA9IHQuc3RlcF9mdW5jKCgpID0+IHsKZGlmZiAtLWdpdCBhL0xheW91dFRlc3Rz
L2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvd2VicnRjL1JUQ1BlZXJDb25uZWN0aW9u
LXNldFJlbW90ZURlc2NyaXB0aW9uLXJlcGxhY2VUcmFjay5odHRwcy5odG1sIGIvTGF5b3V0VGVz
dHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy93ZWJydGMvUlRDUGVlckNvbm5lY3Rp
b24tc2V0UmVtb3RlRGVzY3JpcHRpb24tcmVwbGFjZVRyYWNrLmh0dHBzLmh0bWwKaW5kZXggNGJk
Y2RkZWM1MTE1YzNkOWM5NTM4NTk5NTA4NTRiM2VjOTdmYmJlZi4uMjE3MzI2YmZhZTIyZjEzY2E2
ZGNlMjg3NGQ4ZDAxZDEwNmFkNzM3OCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQv
dzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy93ZWJydGMvUlRDUGVlckNvbm5lY3Rpb24tc2V0UmVtb3Rl
RGVzY3JpcHRpb24tcmVwbGFjZVRyYWNrLmh0dHBzLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvaW1w
b3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy93ZWJydGMvUlRDUGVlckNvbm5lY3Rpb24tc2V0
UmVtb3RlRGVzY3JpcHRpb24tcmVwbGFjZVRyYWNrLmh0dHBzLmh0bWwKQEAgLTEzLDcgKzEzLDcg
QEAKICAgYXN5bmNfdGVzdCh0ID0+IHsKICAgICBjb25zdCBjYWxsZXIgPSBuZXcgUlRDUGVlckNv
bm5lY3Rpb24oKTsKICAgICB0LmFkZF9jbGVhbnVwKCgpID0+IGNhbGxlci5jbG9zZSgpKTsKLSAg
ICByZXR1cm4gZ2V0VXNlck1lZGlhVHJhY2tzQW5kU3RyZWFtcygyKQorICAgIGdldFVzZXJNZWRp
YVRyYWNrc0FuZFN0cmVhbXMoMikKICAgICAudGhlbih0LnN0ZXBfZnVuYygoW3RyYWNrcywgc3Ry
ZWFtc10pID0+IHsKICAgICAgIGNvbnN0IHNlbmRlciA9IGNhbGxlci5hZGRUcmFjayh0cmFja3Nb
MF0sIHN0cmVhbXNbMF0pOwogICAgICAgcmV0dXJuIHNlbmRlci5yZXBsYWNlVHJhY2sodHJhY2tz
WzFdKQpAQCAtMzAsNyArMzAsNyBAQAogICBhc3luY190ZXN0KHQgPT4gewogICAgIGNvbnN0IGNh
bGxlciA9IG5ldyBSVENQZWVyQ29ubmVjdGlvbigpOwogICAgIHQuYWRkX2NsZWFudXAoKCkgPT4g
Y2FsbGVyLmNsb3NlKCkpOwotICAgIHJldHVybiBnZXRVc2VyTWVkaWFUcmFja3NBbmRTdHJlYW1z
KDEpCisgICAgZ2V0VXNlck1lZGlhVHJhY2tzQW5kU3RyZWFtcygxKQogICAgIC50aGVuKHQuc3Rl
cF9mdW5jKChbdHJhY2tzLCBzdHJlYW1zXSkgPT4gewogICAgICAgY29uc3Qgc2VuZGVyID0gY2Fs
bGVyLmFkZFRyYWNrKHRyYWNrc1swXSwgc3RyZWFtc1swXSk7CiAgICAgICByZXR1cm4gc2VuZGVy
LnJlcGxhY2VUcmFjayhudWxsKQpAQCAtNDcsNyArNDcsNyBAQAogICBhc3luY190ZXN0KHQgPT4g
ewogICAgIGNvbnN0IGNhbGxlciA9IG5ldyBSVENQZWVyQ29ubmVjdGlvbigpOwogICAgIHQuYWRk
X2NsZWFudXAoKCkgPT4gY2FsbGVyLmNsb3NlKCkpOwotICAgIHJldHVybiBnZXRVc2VyTWVkaWFU
cmFja3NBbmRTdHJlYW1zKDIpCisgICAgZ2V0VXNlck1lZGlhVHJhY2tzQW5kU3RyZWFtcygyKQog
ICAgIC50aGVuKHQuc3RlcF9mdW5jKChbdHJhY2tzLCBzdHJlYW1zXSkgPT4gewogICAgICAgY29u
c3Qgc2VuZGVyID0gY2FsbGVyLmFkZFRyYWNrKHRyYWNrc1swXSwgc3RyZWFtc1swXSk7CiAgICAg
ICBhc3NlcnRfZXF1YWxzKHNlbmRlci50cmFjaywgdHJhY2tzWzBdKTsKQEAgLTY2LDcgKzY2LDcg
QEAKICAgICBjb25zdCBleHBlY3RlZEV4Y2VwdGlvbiA9ICdJbnZhbGlkU3RhdGVFcnJvcic7CiAg
ICAgY29uc3QgY2FsbGVyID0gbmV3IFJUQ1BlZXJDb25uZWN0aW9uKCk7CiAgICAgdC5hZGRfY2xl
YW51cCgoKSA9PiBjYWxsZXIuY2xvc2UoKSk7Ci0gICAgcmV0dXJuIGdldFVzZXJNZWRpYVRyYWNr
c0FuZFN0cmVhbXMoMikKKyAgICBnZXRVc2VyTWVkaWFUcmFja3NBbmRTdHJlYW1zKDIpCiAgICAg
LnRoZW4odC5zdGVwX2Z1bmMoKFt0cmFja3MsIHN0cmVhbXNdKSA9PiB7CiAgICAgICBjb25zdCBz
ZW5kZXIgPSBjYWxsZXIuYWRkVHJhY2sodHJhY2tzWzBdLCBzdHJlYW1zWzBdKTsKICAgICAgIGNh
bGxlci5jbG9zZSgpOwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1w
bGF0Zm9ybS10ZXN0cy93ZWJydGMvUlRDUGVlckNvbm5lY3Rpb24tdHJhY2stc3RhdHMuaHR0cHMt
ZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0
cy93ZWJydGMvUlRDUGVlckNvbm5lY3Rpb24tdHJhY2stc3RhdHMuaHR0cHMtZXhwZWN0ZWQudHh0
CmluZGV4IGM0YzFjODAyMjkxMmNmMTE2N2EyYTVlNTE0YzBhNGZiYmMwODk0NjAuLmZjNWM0NGIx
ZWMyNzllZDFkOWM1ZWFkZGRjNWRiMmJkYmYyZjFhYmQgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3Rz
L2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvd2VicnRjL1JUQ1BlZXJDb25uZWN0aW9u
LXRyYWNrLXN0YXRzLmh0dHBzLWV4cGVjdGVkLnR4dAorKysgYi9MYXlvdXRUZXN0cy9pbXBvcnRl
ZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3dlYnJ0Yy9SVENQZWVyQ29ubmVjdGlvbi10cmFjay1z
dGF0cy5odHRwcy1leHBlY3RlZC50eHQKQEAgLTEsMTAgKzEsNiBAQAogCiBQQVNTIGFkZFRyYWNr
KCkgd2l0aG91dCBzZXRMb2NhbERlc2NyaXB0aW9uKCkgeWllbGRzIHRyYWNrIHN0YXRzCi1GQUlM
IGFkZFRyYWNrKCkgd2l0aG91dCBzZXRMb2NhbERlc2NyaXB0aW9uKCkgeWllbGRzIG1lZGlhIHN0
cmVhbSBzdGF0cyBhc3NlcnRfdHJ1ZTogSGFzIHN0YXRzIGZvciBzdHJlYW0gZXhwZWN0ZWQgdHJ1
ZSBnb3QgZmFsc2UKIFBBU1MgYWRkVHJhY2soKSB3aXRoIHNldExvY2FsRGVzY3JpcHRpb24oKSB5
aWVsZHMgdHJhY2sgc3RhdHMKLUZBSUwgYWRkVHJhY2soKSB3aXRoIHNldExvY2FsRGVzY3JpcHRp
b24oKSB5aWVsZHMgbWVkaWEgc3RyZWFtIHN0YXRzIGFzc2VydF90cnVlOiBIYXMgc3RhdHMgZm9y
IHN0cmVhbSBleHBlY3RlZCB0cnVlIGdvdCBmYWxzZQotRkFJTCBhZGRUcmFjaygpOiBNZWRpYSBz
dHJlYW0gc3RhdHMgcmVmZXJlbmNlcyB0cmFjayBzdGF0cyBhc3NlcnRfdHJ1ZTogSGFzIHN0YXRz
IGZvciB0cmFjayBhbmQgc3RyZWFtIGV4cGVjdGVkIHRydWUgZ290IGZhbHNlCi1GQUlMIE1lZGlh
IHN0cmVhbSBzdGF0cyByZWZlcmVuY2VzIHRyYWNrIHN0YXRzIGFzc2VydF90cnVlOiBIYXMgc3Rh
dHMgZm9yIHRyYWNrIGFuZCBzdHJlYW0gZXhwZWN0ZWQgdHJ1ZSBnb3QgZmFsc2UKIFBBU1MgTy9B
IGV4Y2hhbmdlIHlpZWxkcyBvdXRib3VuZCBSVFAgc3RyZWFtIHN0YXRzIGZvciBzZW5kaW5nIHRy
YWNrCiBQQVNTIE8vQSBleGNoYW5nZSB5aWVsZHMgaW5ib3VuZCBSVFAgc3RyZWFtIHN0YXRzIGZv
ciByZWNlaXZpbmcgdHJhY2sKIFBBU1MgcmVwbGFjZVRyYWNrKCkgYmVmb3JlIG9mZmVyOiBuZXcg
dHJhY2sgYXR0YWNobWVudCBzdGF0cyBwcmVzZW50CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9p
bXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3dlYnJ0Yy9SVENQZWVyQ29ubmVjdGlvbi10
cmFjay1zdGF0cy5odHRwcy5odG1sIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0
Zm9ybS10ZXN0cy93ZWJydGMvUlRDUGVlckNvbm5lY3Rpb24tdHJhY2stc3RhdHMuaHR0cHMuaHRt
bAppbmRleCA4M2M5ZjE5MTZjZDAyYTVlOTEwMzFlNGU2MTgzMTk2MjhkYTUyY2NjLi43YzM0NDIy
MzAyOTk3OGYyYjBkZTEwY2U2ZDhlZGZhZjQ4OTA5MDI5IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0
cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3dlYnJ0Yy9SVENQZWVyQ29ubmVjdGlv
bi10cmFjay1zdGF0cy5odHRwcy5odG1sCisrKyBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93
ZWItcGxhdGZvcm0tdGVzdHMvd2VicnRjL1JUQ1BlZXJDb25uZWN0aW9uLXRyYWNrLXN0YXRzLmh0
dHBzLmh0bWwKQEAgLTIzLDcgKzIzLDcgQEAKICAgICBjb25zdCBwYyA9IG5ldyBSVENQZWVyQ29u
bmVjdGlvbigpOwogICAgIHQuYWRkX2NsZWFudXAoKCkgPT4gcGMuY2xvc2UoKSk7CiAgICAgbGV0
IHRyYWNrOwotICAgIHJldHVybiBnZXRVc2VyTWVkaWFUcmFja3NBbmRTdHJlYW1zKDEpCisgICAg
Z2V0VXNlck1lZGlhVHJhY2tzQW5kU3RyZWFtcygxKQogICAgIC50aGVuKHQuc3RlcF9mdW5jKChb
dHJhY2tzLCBzdHJlYW1zXSkgPT4gewogICAgICAgdC5hZGRfY2xlYW51cCgoKSA9PiB0cmFja3Mu
Zm9yRWFjaCh0cmFjayA9PiB0cmFjay5zdG9wKCkpKTsKICAgICAgIHRyYWNrID0gdHJhY2tzWzBd
OwpAQCAtNDgsMzEgKzQ4LDkgQEAKICAgYXN5bmNfdGVzdCh0ID0+IHsKICAgICBjb25zdCBwYyA9
IG5ldyBSVENQZWVyQ29ubmVjdGlvbigpOwogICAgIHQuYWRkX2NsZWFudXAoKCkgPT4gcGMuY2xv
c2UoKSk7Ci0gICAgbGV0IHN0cmVhbTsKLSAgICByZXR1cm4gZ2V0VXNlck1lZGlhVHJhY2tzQW5k
U3RyZWFtcygxKQotICAgIC50aGVuKHQuc3RlcF9mdW5jKChbdHJhY2tzLCBzdHJlYW1zXSkgPT4g
ewotICAgICAgdC5hZGRfY2xlYW51cCgoKSA9PiB0cmFja3MuZm9yRWFjaCh0cmFjayA9PiB0cmFj
ay5zdG9wKCkpKTsKLSAgICAgIGxldCB0cmFjayA9IHRyYWNrc1swXTsKLSAgICAgIHN0cmVhbSA9
IHN0cmVhbXNbMF07Ci0gICAgICBwYy5hZGRUcmFjayh0cmFjaywgc3RyZWFtKTsKLSAgICAgIHJl
dHVybiBwYy5nZXRTdGF0cygpOwotICAgIH0pKQotICAgIC50aGVuKHQuc3RlcF9mdW5jKHJlcG9y
dCA9PiB7Ci0gICAgICBsZXQgc3RyZWFtU3RhdHMgPSBmaW5kU3RhdHNCeVR5cGVBbmRJZChyZXBv
cnQsICdzdHJlYW0nLCBzdHJlYW0uaWQpOwotICAgICAgYXNzZXJ0X3RydWUoc3RyZWFtU3RhdHMg
IT0gbnVsbCwgJ0hhcyBzdGF0cyBmb3Igc3RyZWFtJyk7Ci0gICAgICB2YWxpZGF0ZVJ0Y1N0YXRz
KHJlcG9ydCwgc3RyZWFtU3RhdHMpOwotICAgICAgdC5kb25lKCk7Ci0gICAgfSkpCi0gICAgLmNh
dGNoKHQuc3RlcF9mdW5jKHJlYXNvbiA9PiB7Ci0gICAgICBhc3NlcnRfdW5yZWFjaGVkKHJlYXNv
bik7Ci0gICAgfSkpOwotICB9LCAnYWRkVHJhY2soKSB3aXRob3V0IHNldExvY2FsRGVzY3JpcHRp
b24oKSB5aWVsZHMgbWVkaWEgc3RyZWFtIHN0YXRzJyk7CiAKLSAgYXN5bmNfdGVzdCh0ID0+IHsK
LSAgICBjb25zdCBwYyA9IG5ldyBSVENQZWVyQ29ubmVjdGlvbigpOwotICAgIHQuYWRkX2NsZWFu
dXAoKCkgPT4gcGMuY2xvc2UoKSk7CiAgICAgbGV0IHRyYWNrOwotICAgIHJldHVybiBnZXRVc2Vy
TWVkaWFUcmFja3NBbmRTdHJlYW1zKDEpCisgICAgZ2V0VXNlck1lZGlhVHJhY2tzQW5kU3RyZWFt
cygxKQogICAgIC50aGVuKHQuc3RlcF9mdW5jKChbdHJhY2tzLCBzdHJlYW1zXSkgPT4gewogICAg
ICAgdC5hZGRfY2xlYW51cCgoKSA9PiB0cmFja3MuZm9yRWFjaCh0cmFjayA9PiB0cmFjay5zdG9w
KCkpKTsKICAgICAgIHRyYWNrID0gdHJhY2tzWzBdOwpAQCAtOTYsMTE0ICs3NCwxMyBAQAogICAg
IH0pKTsKICAgfSwgJ2FkZFRyYWNrKCkgd2l0aCBzZXRMb2NhbERlc2NyaXB0aW9uKCkgeWllbGRz
IHRyYWNrIHN0YXRzJyk7CiAKLSAgYXN5bmNfdGVzdCh0ID0+IHsKLSAgICBjb25zdCBwYyA9IG5l
dyBSVENQZWVyQ29ubmVjdGlvbigpOwotICAgIHQuYWRkX2NsZWFudXAoKCkgPT4gcGMuY2xvc2Uo
KSk7Ci0gICAgbGV0IHN0cmVhbTsKLSAgICByZXR1cm4gZ2V0VXNlck1lZGlhVHJhY2tzQW5kU3Ry
ZWFtcygxKQotICAgIC50aGVuKHQuc3RlcF9mdW5jKChbdHJhY2tzLCBzdHJlYW1zXSkgPT4gewot
ICAgICAgdC5hZGRfY2xlYW51cCgoKSA9PiB0cmFja3MuZm9yRWFjaCh0cmFjayA9PiB0cmFjay5z
dG9wKCkpKTsKLSAgICAgIGxldCB0cmFjayA9IHRyYWNrc1swXTsKLSAgICAgIHN0cmVhbSA9IHN0
cmVhbXNbMF07Ci0gICAgICBwYy5hZGRUcmFjayh0cmFjaywgc3RyZWFtKTsKLSAgICAgIHJldHVy
biBwYy5jcmVhdGVPZmZlcigpOwotICAgIH0pKQotICAgIC50aGVuKHQuc3RlcF9mdW5jKG9mZmVy
ID0+IHsKLSAgICAgIHJldHVybiBwYy5zZXRMb2NhbERlc2NyaXB0aW9uKG9mZmVyKTsKLSAgICB9
KSkKLSAgICAudGhlbih0LnN0ZXBfZnVuYygoKSA9PiB7Ci0gICAgICByZXR1cm4gcGMuZ2V0U3Rh
dHMoKTsKLSAgICB9KSkKLSAgICAudGhlbih0LnN0ZXBfZnVuYyhyZXBvcnQgPT4gewotICAgICAg
bGV0IHN0cmVhbVN0YXRzID0gZmluZFN0YXRzQnlUeXBlQW5kSWQocmVwb3J0LCAnc3RyZWFtJywg
c3RyZWFtLmlkKTsKLSAgICAgIGFzc2VydF90cnVlKHN0cmVhbVN0YXRzICE9IG51bGwsICdIYXMg
c3RhdHMgZm9yIHN0cmVhbScpOwotICAgICAgdmFsaWRhdGVSdGNTdGF0cyhyZXBvcnQsIHN0cmVh
bVN0YXRzKTsKLSAgICAgIHQuZG9uZSgpOwotICAgIH0pKQotICAgIC5jYXRjaCh0LnN0ZXBfZnVu
YyhyZWFzb24gPT4gewotICAgICAgYXNzZXJ0X3VucmVhY2hlZChyZWFzb24pOwotICAgIH0pKTsK
LSAgfSwgJ2FkZFRyYWNrKCkgd2l0aCBzZXRMb2NhbERlc2NyaXB0aW9uKCkgeWllbGRzIG1lZGlh
IHN0cmVhbSBzdGF0cycpOwotCi0gIGFzeW5jX3Rlc3QodCA9PiB7Ci0gICAgY29uc3QgcGMgPSBu
ZXcgUlRDUGVlckNvbm5lY3Rpb24oKTsKLSAgICB0LmFkZF9jbGVhbnVwKCgpID0+IHBjLmNsb3Nl
KCkpOwotICAgIGxldCB0cmFjazsKLSAgICBsZXQgc3RyZWFtOwotICAgIHJldHVybiBnZXRVc2Vy
TWVkaWFUcmFja3NBbmRTdHJlYW1zKDEpCi0gICAgLnRoZW4odC5zdGVwX2Z1bmMoKFt0cmFja3Ms
IHN0cmVhbXNdKSA9PiB7Ci0gICAgICB0LmFkZF9jbGVhbnVwKCgpID0+IHRyYWNrcy5mb3JFYWNo
KHRyYWNrID0+IHRyYWNrLnN0b3AoKSkpOwotICAgICAgdHJhY2sgPSB0cmFja3NbMF07Ci0gICAg
ICBzdHJlYW0gPSBzdHJlYW1zWzBdOwotICAgICAgcGMuYWRkVHJhY2sodHJhY2ssIHN0cmVhbSk7
Ci0gICAgICByZXR1cm4gcGMuY3JlYXRlT2ZmZXIoKTsKLSAgICB9KSkKLSAgICAudGhlbih0LnN0
ZXBfZnVuYyhvZmZlciA9PiB7Ci0gICAgICByZXR1cm4gcGMuc2V0TG9jYWxEZXNjcmlwdGlvbihv
ZmZlcik7Ci0gICAgfSkpCi0gICAgLnRoZW4odC5zdGVwX2Z1bmMoKCkgPT4gewotICAgICAgcmV0
dXJuIHBjLmdldFN0YXRzKCk7Ci0gICAgfSkpCi0gICAgLnRoZW4odC5zdGVwX2Z1bmMocmVwb3J0
ID0+IHsKLSAgICAgIGxldCB0cmFja1N0YXRzID0gZmluZFN0YXRzQnlUeXBlQW5kSWQocmVwb3J0
LCAndHJhY2snLCB0cmFjay5pZCk7Ci0gICAgICBsZXQgc3RyZWFtU3RhdHMgPSBmaW5kU3RhdHNC
eVR5cGVBbmRJZChyZXBvcnQsICdzdHJlYW0nLCBzdHJlYW0uaWQpOwotICAgICAgYXNzZXJ0X3Ry
dWUodHJhY2tTdGF0cyAhPSBudWxsICYmIHN0cmVhbVN0YXRzICE9IG51bGwsCi0gICAgICAgICAg
ICAgICAgICAnSGFzIHN0YXRzIGZvciB0cmFjayBhbmQgc3RyZWFtJyk7Ci0gICAgICBhc3NlcnRf
YXJyYXlfZXF1YWxzKHN0cmVhbVN0YXRzLnRyYWNrSWRzLCBbIHRyYWNrU3RhdHMuaWQgXSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgJ3N0cmVhbVN0YXRzLnRyYWNrSWRzID09IFsgdHJhY2tT
dGF0cy5pZCBdJyk7Ci0gICAgICB2YWxpZGF0ZVJ0Y1N0YXRzKHJlcG9ydCwgdHJhY2tTdGF0cyk7
Ci0gICAgICB2YWxpZGF0ZVJ0Y1N0YXRzKHJlcG9ydCwgc3RyZWFtU3RhdHMpOwotICAgICAgdC5k
b25lKCk7Ci0gICAgfSkpCi0gICAgLmNhdGNoKHQuc3RlcF9mdW5jKHJlYXNvbiA9PiB7Ci0gICAg
ICBhc3NlcnRfdW5yZWFjaGVkKHJlYXNvbik7Ci0gICAgfSkpOwotICB9LCAnYWRkVHJhY2soKTog
TWVkaWEgc3RyZWFtIHN0YXRzIHJlZmVyZW5jZXMgdHJhY2sgc3RhdHMnKTsKLQotICBhc3luY190
ZXN0KHQgPT4gewotICAgIGNvbnN0IHBjID0gbmV3IFJUQ1BlZXJDb25uZWN0aW9uKCk7Ci0gICAg
dC5hZGRfY2xlYW51cCgoKSA9PiBwYy5jbG9zZSgpKTsKLSAgICBsZXQgdHJhY2s7Ci0gICAgbGV0
IHN0cmVhbTsKLSAgICByZXR1cm4gZ2V0VXNlck1lZGlhVHJhY2tzQW5kU3RyZWFtcygxKQotICAg
IC50aGVuKHQuc3RlcF9mdW5jKChbdHJhY2tzLCBzdHJlYW1zXSkgPT4gewotICAgICAgdC5hZGRf
Y2xlYW51cCgoKSA9PiB0cmFja3MuZm9yRWFjaCh0cmFjayA9PiB0cmFjay5zdG9wKCkpKTsKLSAg
ICAgIHRyYWNrID0gdHJhY2tzWzBdOwotICAgICAgc3RyZWFtID0gc3RyZWFtc1swXTsKLSAgICAg
IHN0cmVhbS5hZGRUcmFjayh0cmFjayk7Ci0gICAgICBmb3IgKGNvbnN0IHRyYWNrIG9mIHN0cmVh
bS5nZXRUcmFja3MoKSkKLSAgICAgICAgcGMuYWRkVHJhY2sodHJhY2ssIHN0cmVhbSk7Ci0gICAg
ICByZXR1cm4gcGMuY3JlYXRlT2ZmZXIoKTsKLSAgICB9KSkKLSAgICAudGhlbih0LnN0ZXBfZnVu
YyhvZmZlciA9PiB7Ci0gICAgICByZXR1cm4gcGMuc2V0TG9jYWxEZXNjcmlwdGlvbihvZmZlcik7
Ci0gICAgfSkpCi0gICAgLnRoZW4odC5zdGVwX2Z1bmMoKCkgPT4gewotICAgICAgcmV0dXJuIHBj
LmdldFN0YXRzKCk7Ci0gICAgfSkpCi0gICAgLnRoZW4odC5zdGVwX2Z1bmMocmVwb3J0ID0+IHsK
LSAgICAgIGxldCB0cmFja1N0YXRzID0gZmluZFN0YXRzQnlUeXBlQW5kSWQocmVwb3J0LCAndHJh
Y2snLCB0cmFjay5pZCk7Ci0gICAgICBsZXQgc3RyZWFtU3RhdHMgPSBmaW5kU3RhdHNCeVR5cGVB
bmRJZChyZXBvcnQsICdzdHJlYW0nLCBzdHJlYW0uaWQpOwotICAgICAgYXNzZXJ0X3RydWUodHJh
Y2tTdGF0cyAhPSBudWxsICYmIHN0cmVhbVN0YXRzICE9IG51bGwsCi0gICAgICAgICAgICAgICAg
ICAnSGFzIHN0YXRzIGZvciB0cmFjayBhbmQgc3RyZWFtJyk7Ci0gICAgICBhc3NlcnRfYXJyYXlf
ZXF1YWxzKHN0cmVhbVN0YXRzLnRyYWNrSWRzLCBbIHRyYWNrU3RhdHMuaWQgXSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgJ3N0cmVhbVN0YXRzLnRyYWNrSWRzID09IFsgdHJhY2tTdGF0cy5p
ZCBdJyk7Ci0gICAgICB2YWxpZGF0ZVJ0Y1N0YXRzKHJlcG9ydCwgdHJhY2tTdGF0cyk7Ci0gICAg
ICB2YWxpZGF0ZVJ0Y1N0YXRzKHJlcG9ydCwgc3RyZWFtU3RhdHMpOwotICAgICAgdC5kb25lKCk7
Ci0gICAgfSkpCi0gICAgLmNhdGNoKHQuc3RlcF9mdW5jKHJlYXNvbiA9PiB7Ci0gICAgICBhc3Nl
cnRfdW5yZWFjaGVkKHJlYXNvbik7Ci0gICAgfSkpOwotICB9LCAnTWVkaWEgc3RyZWFtIHN0YXRz
IHJlZmVyZW5jZXMgdHJhY2sgc3RhdHMnKTsKLQogICBhc3luY190ZXN0KHQgPT4gewogICAgIGNv
bnN0IGNhbGxlciA9IG5ldyBSVENQZWVyQ29ubmVjdGlvbigpOwogICAgIHQuYWRkX2NsZWFudXAo
KCkgPT4gY2FsbGVyLmNsb3NlKCkpOwogICAgIGNvbnN0IGNhbGxlZSA9IG5ldyBSVENQZWVyQ29u
bmVjdGlvbigpOwogICAgIHQuYWRkX2NsZWFudXAoKCkgPT4gY2FsbGVlLmNsb3NlKCkpOwogICAg
IGxldCBzZW5kaW5nVHJhY2s7Ci0gICAgcmV0dXJuIGdldFVzZXJNZWRpYVRyYWNrc0FuZFN0cmVh
bXMoMSkKKyAgICBnZXRVc2VyTWVkaWFUcmFja3NBbmRTdHJlYW1zKDEpCiAgICAgLnRoZW4odC5z
dGVwX2Z1bmMoKFt0cmFja3MsIHN0cmVhbXNdKSA9PiB7CiAgICAgICB0LmFkZF9jbGVhbnVwKCgp
ID0+IHRyYWNrcy5mb3JFYWNoKHRyYWNrID0+IHRyYWNrLnN0b3AoKSkpOwogICAgICAgc2VuZGlu
Z1RyYWNrID0gdHJhY2tzWzBdOwpAQCAtMjM1LDEwICsxMTIsMTAgQEAKICAgICB0LmFkZF9jbGVh
bnVwKCgpID0+IGNhbGxlZS5jbG9zZSgpKTsKICAgICBsZXQgcmVjZWl2aW5nVHJhY2s7CiAgICAg
Y2FsbGVlLm9udHJhY2sgPSB0cmFja0V2ZW50ID0+IHsKLSAgICAgIGFzc2VydF90cnVlKHJlY2Vp
dmluZ1RyYWNrID09IHVuZGVmaW5lZCwgJ29udHJhY2sgaGFzIG5vdCBmaXJlZCBiZWZvcmUnKTsK
KyAgICAgIGFzc2VydF9lcXVhbHMocmVjZWl2aW5nVHJhY2ssIHVuZGVmaW5lZCwgJ29udHJhY2sg
aGFzIG5vdCBmaXJlZCBiZWZvcmUnKTsKICAgICAgIHJlY2VpdmluZ1RyYWNrID0gdHJhY2tFdmVu
dC50cmFjazsKICAgICB9OwotICAgIHJldHVybiBnZXRVc2VyTWVkaWFUcmFja3NBbmRTdHJlYW1z
KDEpCisgICAgZ2V0VXNlck1lZGlhVHJhY2tzQW5kU3RyZWFtcygxKQogICAgIC50aGVuKHQuc3Rl
cF9mdW5jKChbdHJhY2tzLCBzdHJlYW1zXSkgPT4gewogICAgICAgdC5hZGRfY2xlYW51cCgoKSA9
PiB0cmFja3MuZm9yRWFjaCh0cmFjayA9PiB0cmFjay5zdG9wKCkpKTsKICAgICAgIGNhbGxlci5h
ZGRUcmFjayh0cmFja3NbMF0sIHN0cmVhbXNbMF0pOwpAQCAtMjcxLDcgKzE0OCw3IEBACiAgICAg
bGV0IHNlbmRpbmdUcmFjazE7CiAgICAgbGV0IHNlbmRpbmdUcmFjazI7CiAgICAgbGV0IHNlbmRl
cjsKLSAgICByZXR1cm4gZ2V0VXNlck1lZGlhVHJhY2tzQW5kU3RyZWFtcygyKQorICAgIGdldFVz
ZXJNZWRpYVRyYWNrc0FuZFN0cmVhbXMoMikKICAgICAudGhlbih0LnN0ZXBfZnVuYygoW3RyYWNr
cywgc3RyZWFtc10pID0+IHsKICAgICAgIHQuYWRkX2NsZWFudXAoKCkgPT4gdHJhY2tzLmZvckVh
Y2godHJhY2sgPT4gdHJhY2suc3RvcCgpKSk7CiAgICAgICBzZW5kaW5nVHJhY2sxID0gdHJhY2tz
WzBdOwpAQCAtMzAxLDcgKzE3OCw3IEBACiAgICAgbGV0IHNlbmRpbmdUcmFjazE7CiAgICAgbGV0
IHNlbmRpbmdUcmFjazI7CiAgICAgbGV0IHNlbmRlcjsKLSAgICByZXR1cm4gZ2V0VXNlck1lZGlh
VHJhY2tzQW5kU3RyZWFtcygyKQorICAgIGdldFVzZXJNZWRpYVRyYWNrc0FuZFN0cmVhbXMoMikK
ICAgICAudGhlbih0LnN0ZXBfZnVuYygoW3RyYWNrcywgc3RyZWFtc10pID0+IHsKICAgICAgIHQu
YWRkX2NsZWFudXAoKCkgPT4gdHJhY2tzLmZvckVhY2godHJhY2sgPT4gdHJhY2suc3RvcCgpKSk7
CiAgICAgICBzZW5kaW5nVHJhY2sxID0gdHJhY2tzWzBdOwpAQCAtMzM5LDcgKzIxNiw3IEBACiAg
ICAgbGV0IHNlbmRpbmdUcmFjazE7CiAgICAgbGV0IHNlbmRpbmdUcmFjazI7CiAgICAgbGV0IHNl
bmRlcjsKLSAgICByZXR1cm4gZ2V0VXNlck1lZGlhVHJhY2tzQW5kU3RyZWFtcygyKQorICAgIGdl
dFVzZXJNZWRpYVRyYWNrc0FuZFN0cmVhbXMoMikKICAgICAudGhlbih0LnN0ZXBfZnVuYygoW3Ry
YWNrcywgc3RyZWFtc10pID0+IHsKICAgICAgIHQuYWRkX2NsZWFudXAoKCkgPT4gdHJhY2tzLmZv
ckVhY2godHJhY2sgPT4gdHJhY2suc3RvcCgpKSk7CiAgICAgICBzZW5kaW5nVHJhY2sxID0gdHJh
Y2tzWzBdOwpAQCAtMzc2LDcgKzI1Myw3IEBACiAgICAgbGV0IHNlbmRpbmdUcmFjazE7CiAgICAg
bGV0IHNlbmRpbmdUcmFjazI7CiAgICAgbGV0IHNlbmRlcjsKLSAgICByZXR1cm4gZ2V0VXNlck1l
ZGlhVHJhY2tzQW5kU3RyZWFtcygyKQorICAgIGdldFVzZXJNZWRpYVRyYWNrc0FuZFN0cmVhbXMo
MikKICAgICAudGhlbih0LnN0ZXBfZnVuYygoW3RyYWNrcywgc3RyZWFtc10pID0+IHsKICAgICAg
IHQuYWRkX2NsZWFudXAoKCkgPT4gdHJhY2tzLmZvckVhY2godHJhY2sgPT4gdHJhY2suc3RvcCgp
KSk7CiAgICAgICBzZW5kaW5nVHJhY2sxID0gdHJhY2tzWzBdOwpAQCAtMzk2LDcgKzI3Myw3IEBA
CiAgICAgICBhc3NlcnRfdHJ1ZSh0cmFja1N0YXRzLm9iamVjdERlbGV0ZWQpOwogICAgICAgbGV0
IG91dGJvdW5kU3RhdHMgPSBmaW5kU3RhdHNCeVR5cGVBbmRNZW1iZXIocmVwb3J0LCAnb3V0Ym91
bmQtcnRwJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICd0cmFja0lkJywgdHJhY2tTdGF0cy5pZCk7Ci0gICAgICBhc3NlcnRfdHJ1ZShvdXRib3Vu
ZFN0YXRzID09IG51bGwsCisgICAgICBhc3NlcnRfZXF1YWxzKG91dGJvdW5kU3RhdHMsIG51bGws
CiAgICAgICAgICAgICAgICAgICAnVGhlIG91dGJvdW5kIFJUUCBzdHJlYW0gc2hvdWxkIG5vIGxv
bmdlciByZWZlcmVuY2UgdGhlICcgKwogICAgICAgICAgICAgICAgICAgJ29yaWdpbmFsIGF0dGFj
aG1lbnQnKTsKICAgICAgIHQuZG9uZSgpOwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW1wb3J0
ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy93ZWJydGMvbGVnYWN5L1JUQ1BlZXJDb25uZWN0aW9u
LWFkZFN0cmVhbS5odHRwcy5odG1sIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0
Zm9ybS10ZXN0cy93ZWJydGMvbGVnYWN5L1JUQ1BlZXJDb25uZWN0aW9uLWFkZFN0cmVhbS5odHRw
cy5odG1sCmluZGV4IDVhMzVlYmM1M2I4ZDdjZTM4NTdkNDg2OWE0NzZlMGU5OWE5MDc4YzguLjdl
YmNhY2RhNTM3MWY3NGEyMzdkMWUxOTQxMmMyMDAzNzFiZTlkNTggMTAwNjQ0Ci0tLSBhL0xheW91
dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvd2VicnRjL2xlZ2FjeS9SVENQ
ZWVyQ29ubmVjdGlvbi1hZGRTdHJlYW0uaHR0cHMuaHRtbAorKysgYi9MYXlvdXRUZXN0cy9pbXBv
cnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3dlYnJ0Yy9sZWdhY3kvUlRDUGVlckNvbm5lY3Rp
b24tYWRkU3RyZWFtLmh0dHBzLmh0bWwKQEAgLTI3LDcgKzI3LDcgQEAKICAgICB0LmFkZF9jbGVh
bnVwKCgpID0+IHBjLmNsb3NlKCkpOwogICAgIGxldCB0cmFjazsKICAgICBsZXQgc3RyZWFtOwot
ICAgIHJldHVybiBnZXRVc2VyTWVkaWFUcmFja3NBbmRTdHJlYW1zKDEpCisgICAgZ2V0VXNlck1l
ZGlhVHJhY2tzQW5kU3RyZWFtcygxKQogICAgIC50aGVuKHQuc3RlcF9mdW5jKChbdHJhY2tzLCBz
dHJlYW1zXSkgPT4gewogICAgICAgdHJhY2sgPSB0cmFja3NbMF07CiAgICAgICBzdHJlYW0gPSBz
dHJlYW1zWzBdOwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vaW9zLXdrMi9pbXBv
cnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3BheW1lbnQtcmVxdWVzdC9zaG93LW1ldGhvZC1v
cHRpb25hbC1wcm9taXNlLXJlamVjdHMuaHR0cHMtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMv
cGxhdGZvcm0vaW9zLXdrMi9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3BheW1lbnQt
cmVxdWVzdC9zaG93LW1ldGhvZC1vcHRpb25hbC1wcm9taXNlLXJlamVjdHMuaHR0cHMtZXhwZWN0
ZWQudHh0CmluZGV4IDQyZmE3YTUxMTk3NTQyZTIwOWY1ZGRiYjk1ODM5MTc2ZWRmODJkYmUuLmZl
YTFjYTRiNGE1MjNmOTQ1MWZlMjViNzM0ZjY0MGJhZDhlMzI3Y2QgMTAwNjQ0Ci0tLSBhL0xheW91
dFRlc3RzL3BsYXRmb3JtL2lvcy13azIvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9w
YXltZW50LXJlcXVlc3Qvc2hvdy1tZXRob2Qtb3B0aW9uYWwtcHJvbWlzZS1yZWplY3RzLmh0dHBz
LWV4cGVjdGVkLnR4dAorKysgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9pb3Mtd2syL2ltcG9ydGVk
L3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcGF5bWVudC1yZXF1ZXN0L3Nob3ctbWV0aG9kLW9wdGlv
bmFsLXByb21pc2UtcmVqZWN0cy5odHRwcy1leHBlY3RlZC50eHQKQEAgLTEsMTMgKzEsMzEgQEAK
IENPTlNPTEUgTUVTU0FHRTogVW5oYW5kbGVkIFByb21pc2UgUmVqZWN0aW9uOiBTeW50YXhFcnJv
cjogdGVzdAogCi1QQVNTIFJlamVjdGlvbiBvZiBkZXRhaWxzUHJvbWlzZSBtdXN0IGFib3J0IHRo
ZSB1cGRhdGUgd2l0aCBhbiAnQWJvcnRFcnJvcicgRE9NRXhjZXB0aW9uLgotUEFTUyBUb3RhbCBp
biB0aGUgdXBkYXRlIGlzIGEgc3RyaW5nLCBzbyBjb252ZXJ0aW5nIHRvIElETCBtdXN0IGFib3J0
IHRoZSB1cGRhdGUgd2l0aCBhIFR5cGVFcnJvci4KLVBBU1MgVG90YWwgaXMgcmVjdXJzaXZlLCBz
byBjb252ZXJ0aW5nIHRvIElETCBtdXN0IGFib3J0IHRoZSB1cGRhdGUgd2l0aCBhIFR5cGVFcnJv
ci4KLVBBU1MgVXBkYXRpbmcgd2l0aCBhIG5lZ2F0aXZlIHRvdGFsIHJlc3VsdHMgaW4gYSBUeXBl
RXJyb3IuCi1QQVNTIFVwZGF0aW5nIHdpdGggYSBkaXNwbGF5SXRlbSB3aXRoIGFuIGludmFsaWQg
Y3VycmVuY3kgcmVzdWx0cyBpbiBSYW5nZUVycm9yLgotUEFTUyBVcGRhdGluZyB3aXRoIGR1cGxp
Y2F0ZSBzaGlwcGluZ09wdGlvbnMgKHNhbWUgSURzKSByZXN1bHRzIGluIGEgVHlwZUVycm9yLgot
UEFTUyBVcGRhdGluZyB3aXRoIGEgc2hpcHBpbmdPcHRpb24gd2l0aCBhbiBpbnZhbGlkIGN1cnJl
bmN5IHZhbHVlIHJlc3VsdHMgaW4gYSBSYW5nRXJyb3IuCi1QQVNTIE11c3QgdGhyb3cgYSBSYW5n
ZUVycm9yIHdoZW4gYSBtb2RpZmllcidzIHRvdGFsIGl0ZW0gaGFzIGFuIGludmFsaWQgY3VycmVu
Y3kuCi1QQVNTIE11c3QgdGhyb3cgYSBSYW5nZUVycm9yIHdoZW4gYSBtb2RpZmllciBkaXNwbGF5
IGl0ZW0gaGFzIGFuIGludmFsaWQgY3VycmVuY3kuCi1QQVNTIE11c3QgdGhyb3cgYXMgTW9kaWZp
ZXIgaGFzIGEgcmVjdXJzaXZlIGRpY3Rpb25hcnkuCitGQUlMIFJlamVjdGlvbiBvZiBkZXRhaWxz
UHJvbWlzZSBtdXN0IGFib3J0IHRoZSB1cGRhdGUgd2l0aCBhbiAnQWJvcnRFcnJvcicgRE9NRXhj
ZXB0aW9uLiBwcm9taXNlX3JlamVjdHNfZG9tOiBiYWREZXRhaWxzIG11c3QgY2F1c2UgYWNjZXB0
UHJvbWlzZSB0byByZWplY3Qgd2l0aCBleHBlY3RlZEVycm9yIGZ1bmN0aW9uICJmdW5jdGlvbiAo
KSB7IHRocm93IGUgfSIgdGhyZXcgb2JqZWN0ICJTZWN1cml0eUVycm9yOiBzaG93KCkgbXVzdCBi
ZSB0cmlnZ2VyZWQgYnkgdXNlciBhY3RpdmF0aW9uLiIgdGhhdCBpcyBub3QgYSBET01FeGNlcHRp
b24gQWJvcnRFcnJvcjogcHJvcGVydHkgImNvZGUiIGlzIGVxdWFsIHRvIDE4LCBleHBlY3RlZCAy
MAorRkFJTCBUb3RhbCBpbiB0aGUgdXBkYXRlIGlzIGEgc3RyaW5nLCBzbyBjb252ZXJ0aW5nIHRv
IElETCBtdXN0IGFib3J0IHRoZSB1cGRhdGUgd2l0aCBhIFR5cGVFcnJvci4gcHJvbWlzZV9yZWpl
Y3RzX2pzOiBiYWREZXRhaWxzIG11c3QgY2F1c2UgYWNjZXB0UHJvbWlzZSB0byByZWplY3Qgd2l0
aCBleHBlY3RlZEVycm9yIGZ1bmN0aW9uICJmdW5jdGlvbiAoKSB7IHRocm93IGUgfSIgdGhyZXcg
b2JqZWN0ICJTZWN1cml0eUVycm9yOiBzaG93KCkgbXVzdCBiZSB0cmlnZ2VyZWQgYnkgdXNlciBh
Y3RpdmF0aW9uLiIgKCJTZWN1cml0eUVycm9yIikgZXhwZWN0ZWQgaW5zdGFuY2Ugb2YgZnVuY3Rp
b24gImZ1bmN0aW9uIFR5cGVFcnJvcigpIHsKKyAgICBbbmF0aXZlIGNvZGVdCit9IiAoIlR5cGVF
cnJvciIpCitGQUlMIFRvdGFsIGlzIHJlY3Vyc2l2ZSwgc28gY29udmVydGluZyB0byBJREwgbXVz
dCBhYm9ydCB0aGUgdXBkYXRlIHdpdGggYSBUeXBlRXJyb3IuIHByb21pc2VfcmVqZWN0c19qczog
YmFkRGV0YWlscyBtdXN0IGNhdXNlIGFjY2VwdFByb21pc2UgdG8gcmVqZWN0IHdpdGggZXhwZWN0
ZWRFcnJvciBmdW5jdGlvbiAiZnVuY3Rpb24gKCkgeyB0aHJvdyBlIH0iIHRocmV3IG9iamVjdCAi
U2VjdXJpdHlFcnJvcjogc2hvdygpIG11c3QgYmUgdHJpZ2dlcmVkIGJ5IHVzZXIgYWN0aXZhdGlv
bi4iICgiU2VjdXJpdHlFcnJvciIpIGV4cGVjdGVkIGluc3RhbmNlIG9mIGZ1bmN0aW9uICJmdW5j
dGlvbiBUeXBlRXJyb3IoKSB7CisgICAgW25hdGl2ZSBjb2RlXQorfSIgKCJUeXBlRXJyb3IiKQor
RkFJTCBVcGRhdGluZyB3aXRoIGEgbmVnYXRpdmUgdG90YWwgcmVzdWx0cyBpbiBhIFR5cGVFcnJv
ci4gcHJvbWlzZV9yZWplY3RzX2pzOiBiYWREZXRhaWxzIG11c3QgY2F1c2UgYWNjZXB0UHJvbWlz
ZSB0byByZWplY3Qgd2l0aCBleHBlY3RlZEVycm9yIGZ1bmN0aW9uICJmdW5jdGlvbiAoKSB7IHRo
cm93IGUgfSIgdGhyZXcgb2JqZWN0ICJTZWN1cml0eUVycm9yOiBzaG93KCkgbXVzdCBiZSB0cmln
Z2VyZWQgYnkgdXNlciBhY3RpdmF0aW9uLiIgKCJTZWN1cml0eUVycm9yIikgZXhwZWN0ZWQgaW5z
dGFuY2Ugb2YgZnVuY3Rpb24gImZ1bmN0aW9uIFR5cGVFcnJvcigpIHsKKyAgICBbbmF0aXZlIGNv
ZGVdCit9IiAoIlR5cGVFcnJvciIpCitGQUlMIFVwZGF0aW5nIHdpdGggYSBkaXNwbGF5SXRlbSB3
aXRoIGFuIGludmFsaWQgY3VycmVuY3kgcmVzdWx0cyBpbiBSYW5nZUVycm9yLiBwcm9taXNlX3Jl
amVjdHNfanM6IGJhZERldGFpbHMgbXVzdCBjYXVzZSBhY2NlcHRQcm9taXNlIHRvIHJlamVjdCB3
aXRoIGV4cGVjdGVkRXJyb3IgZnVuY3Rpb24gImZ1bmN0aW9uICgpIHsgdGhyb3cgZSB9IiB0aHJl
dyBvYmplY3QgIlNlY3VyaXR5RXJyb3I6IHNob3coKSBtdXN0IGJlIHRyaWdnZXJlZCBieSB1c2Vy
IGFjdGl2YXRpb24uIiAoIlNlY3VyaXR5RXJyb3IiKSBleHBlY3RlZCBpbnN0YW5jZSBvZiBmdW5j
dGlvbiAiZnVuY3Rpb24gUmFuZ2VFcnJvcigpIHsKKyAgICBbbmF0aXZlIGNvZGVdCit9IiAoIlJh
bmdlRXJyb3IiKQorRkFJTCBVcGRhdGluZyB3aXRoIGR1cGxpY2F0ZSBzaGlwcGluZ09wdGlvbnMg
KHNhbWUgSURzKSByZXN1bHRzIGluIGEgVHlwZUVycm9yLiBwcm9taXNlX3JlamVjdHNfanM6IGJh
ZERldGFpbHMgbXVzdCBjYXVzZSBhY2NlcHRQcm9taXNlIHRvIHJlamVjdCB3aXRoIGV4cGVjdGVk
RXJyb3IgZnVuY3Rpb24gImZ1bmN0aW9uICgpIHsgdGhyb3cgZSB9IiB0aHJldyBvYmplY3QgIlNl
Y3VyaXR5RXJyb3I6IHNob3coKSBtdXN0IGJlIHRyaWdnZXJlZCBieSB1c2VyIGFjdGl2YXRpb24u
IiAoIlNlY3VyaXR5RXJyb3IiKSBleHBlY3RlZCBpbnN0YW5jZSBvZiBmdW5jdGlvbiAiZnVuY3Rp
b24gVHlwZUVycm9yKCkgeworICAgIFtuYXRpdmUgY29kZV0KK30iICgiVHlwZUVycm9yIikKK0ZB
SUwgVXBkYXRpbmcgd2l0aCBhIHNoaXBwaW5nT3B0aW9uIHdpdGggYW4gaW52YWxpZCBjdXJyZW5j
eSB2YWx1ZSByZXN1bHRzIGluIGEgUmFuZ0Vycm9yLiBwcm9taXNlX3JlamVjdHNfanM6IGJhZERl
dGFpbHMgbXVzdCBjYXVzZSBhY2NlcHRQcm9taXNlIHRvIHJlamVjdCB3aXRoIGV4cGVjdGVkRXJy
b3IgZnVuY3Rpb24gImZ1bmN0aW9uICgpIHsgdGhyb3cgZSB9IiB0aHJldyBvYmplY3QgIlNlY3Vy
aXR5RXJyb3I6IHNob3coKSBtdXN0IGJlIHRyaWdnZXJlZCBieSB1c2VyIGFjdGl2YXRpb24uIiAo
IlNlY3VyaXR5RXJyb3IiKSBleHBlY3RlZCBpbnN0YW5jZSBvZiBmdW5jdGlvbiAiZnVuY3Rpb24g
UmFuZ2VFcnJvcigpIHsKKyAgICBbbmF0aXZlIGNvZGVdCit9IiAoIlJhbmdlRXJyb3IiKQorRkFJ
TCBNdXN0IHRocm93IGEgUmFuZ2VFcnJvciB3aGVuIGEgbW9kaWZpZXIncyB0b3RhbCBpdGVtIGhh
cyBhbiBpbnZhbGlkIGN1cnJlbmN5LiBwcm9taXNlX3JlamVjdHNfanM6IGJhZERldGFpbHMgbXVz
dCBjYXVzZSBhY2NlcHRQcm9taXNlIHRvIHJlamVjdCB3aXRoIGV4cGVjdGVkRXJyb3IgZnVuY3Rp
b24gImZ1bmN0aW9uICgpIHsgdGhyb3cgZSB9IiB0aHJldyBvYmplY3QgIlNlY3VyaXR5RXJyb3I6
IHNob3coKSBtdXN0IGJlIHRyaWdnZXJlZCBieSB1c2VyIGFjdGl2YXRpb24uIiAoIlNlY3VyaXR5
RXJyb3IiKSBleHBlY3RlZCBpbnN0YW5jZSBvZiBmdW5jdGlvbiAiZnVuY3Rpb24gUmFuZ2VFcnJv
cigpIHsKKyAgICBbbmF0aXZlIGNvZGVdCit9IiAoIlJhbmdlRXJyb3IiKQorRkFJTCBNdXN0IHRo
cm93IGEgUmFuZ2VFcnJvciB3aGVuIGEgbW9kaWZpZXIgZGlzcGxheSBpdGVtIGhhcyBhbiBpbnZh
bGlkIGN1cnJlbmN5LiBwcm9taXNlX3JlamVjdHNfanM6IGJhZERldGFpbHMgbXVzdCBjYXVzZSBh
Y2NlcHRQcm9taXNlIHRvIHJlamVjdCB3aXRoIGV4cGVjdGVkRXJyb3IgZnVuY3Rpb24gImZ1bmN0
aW9uICgpIHsgdGhyb3cgZSB9IiB0aHJldyBvYmplY3QgIlNlY3VyaXR5RXJyb3I6IHNob3coKSBt
dXN0IGJlIHRyaWdnZXJlZCBieSB1c2VyIGFjdGl2YXRpb24uIiAoIlNlY3VyaXR5RXJyb3IiKSBl
eHBlY3RlZCBpbnN0YW5jZSBvZiBmdW5jdGlvbiAiZnVuY3Rpb24gUmFuZ2VFcnJvcigpIHsKKyAg
ICBbbmF0aXZlIGNvZGVdCit9IiAoIlJhbmdlRXJyb3IiKQorRkFJTCBNdXN0IHRocm93IGFzIE1v
ZGlmaWVyIGhhcyBhIHJlY3Vyc2l2ZSBkaWN0aW9uYXJ5LiBwcm9taXNlX3JlamVjdHNfanM6IGJh
ZERldGFpbHMgbXVzdCBjYXVzZSBhY2NlcHRQcm9taXNlIHRvIHJlamVjdCB3aXRoIGV4cGVjdGVk
RXJyb3IgZnVuY3Rpb24gImZ1bmN0aW9uICgpIHsgdGhyb3cgZSB9IiB0aHJldyBvYmplY3QgIlNl
Y3VyaXR5RXJyb3I6IHNob3coKSBtdXN0IGJlIHRyaWdnZXJlZCBieSB1c2VyIGFjdGl2YXRpb24u
IiAoIlNlY3VyaXR5RXJyb3IiKSBleHBlY3RlZCBpbnN0YW5jZSBvZiBmdW5jdGlvbiAiZnVuY3Rp
b24gVHlwZUVycm9yKCkgeworICAgIFtuYXRpdmUgY29kZV0KK30iICgiVHlwZUVycm9yIikKIApk
aWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjLXdrMi9pbXBvcnRlZC93M2Mvd2Vi
LXBsYXRmb3JtLXRlc3RzL3dlYi1zaGFyZS9zaGFyZS11cmwtaW52YWxpZC5odHRwcy1leHBlY3Rl
ZC50eHQgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMtd2syL2ltcG9ydGVkL3czYy93ZWItcGxh
dGZvcm0tdGVzdHMvd2ViLXNoYXJlL3NoYXJlLXVybC1pbnZhbGlkLmh0dHBzLWV4cGVjdGVkLnR4
dAppbmRleCAxMGQ3ODNiMTg1YTMxM2Y4ODRhZWVlODVlYWNhYTJlNWZiYWVjZTg1Li5lZGRlZTAx
YjY3YzM2MDdjOTdkMDA2YjFmY2ZhOWUwM2M4OWYyNDZkIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0
cy9wbGF0Zm9ybS9tYWMtd2syL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvd2ViLXNo
YXJlL3NoYXJlLXVybC1pbnZhbGlkLmh0dHBzLWV4cGVjdGVkLnR4dAorKysgYi9MYXlvdXRUZXN0
cy9wbGF0Zm9ybS9tYWMtd2syL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvd2ViLXNo
YXJlL3NoYXJlLXVybC1pbnZhbGlkLmh0dHBzLWV4cGVjdGVkLnR4dApAQCAtMSwzICsxLDEwIEBA
CiAKIFBBU1Mgc2hhcmUoKSByZWplY3RzIHdoZW4gVVJMIGlzIGludmFsaWQKK1BBU1Mgc2hhcmUo
KSByZWplY3RzIGZpbGU6Ly8gVVJMcworUEFTUyBzaGFyZSgpIHJlamVjdHMgd3NzOiBVUkxzCitQ
QVNTIHNoYXJlKCkgcmVqZWN0cyBhYm91dDogVVJMcworUEFTUyBzaGFyZSgpIHJlamVjdHMgY2hy
b21lOiBVUkxzCitQQVNTIHNoYXJlKCkgcmVqZWN0cyBqYXZhc2NyaXB0OiBVUkxzCitQQVNTIHNo
YXJlKCkgcmVqZWN0cyBibG9iOiBVUkxzCitGQUlMIHNoYXJlKCkgcmVqZWN0cyBkYXRhOiBVUkxz
IGFzc2VydF91bnJlYWNoZWQ6IFNob3VsZCBoYXZlIHJlamVjdGVkOiB1bmRlZmluZWQgUmVhY2hl
ZCB1bnJlYWNoYWJsZSBjb2RlCiAK
</data>

          </attachment>
      

    </bug>

</bugzilla>